Skip to content

dialectlabs/blinks

Folders and files

NameName
Last commit message
Last commit date
Jan 30, 2025
Feb 24, 2025
Jun 3, 2024
Jun 5, 2024
Sep 24, 2024
Jan 29, 2025
Feb 20, 2025
Sep 24, 2024
Jul 10, 2024
Jun 3, 2024

Repository files navigation

@dialectlabs/blinks — the Actions Interface

Usage

Installation

Solana

npm add @dialectlabs/blinks @solana/web3.js @solana/wallet-adapter-react @solana/wallet-adapter-react-ui

EVM

npm add @dialectlabs/blinks viem wagmi

Style Presets & Overriding Theme

Style Presets

BlinkComponent component contains a stylePreset prop that accepts the following values:

  • default - dial.to-styled blink (light)
  • x-dark - X-styled blink (dark)
  • x-light - X-styled blink (light)
  • custom - clean slate, no colors, radii at all, use CSS Variables to style. See Overriding Theme.
import '@dialectlabs/blinks/index.css';
import { BlinkComponent } from "@dialectlabs/blinks";

<BlinkComponent stylePreset="x-dark" ... />

Overriding Theme

In your CSS, you can override the following CSS Variables to customize the look of the blink:

/* x-dark */
.blink.x-dark {
  --blink-bg-primary: #202327;
  --blink-button: #1d9bf0;
  --blink-button-disabled: #2f3336;
  --blink-button-hover: #3087da;
  --blink-button-success: #00ae661a;
  --blink-icon-error: #ff6565;
  --blink-icon-error-hover: #ff7a7a;
  --blink-icon-primary: #6e767d;
  --blink-icon-primary-hover: #949ca4;
  --blink-icon-warning: #ffb545;
  --blink-icon-warning-hover: #ffc875;
  --blink-input-bg: #202327;
  --blink-input-stroke: #3d4144;
  --blink-input-stroke-disabled: #2f3336;
  --blink-input-stroke-error: #ff6565;
  --blink-input-stroke-hover: #6e767d;
  --blink-input-stroke-selected: #1d9bf0;
  --blink-stroke-error: #ff6565;
  --blink-stroke-primary: #1d9bf0;
  --blink-stroke-secondary: #3d4144;
  --blink-stroke-warning: #ffb545;
  --blink-text-brand: #35aeff;
  --blink-text-button: #ffffff;
  --blink-text-button-disabled: #768088;
  --blink-text-button-success: #12dc88;
  --blink-text-error: #ff6565;
  --blink-text-error-hover: #ff7a7a;
  --blink-text-input: #ffffff;
  --blink-text-input-disabled: #566470;
  --blink-text-input-placeholder: #6e767d;
  --blink-text-link: #6e767d;
  --blink-text-link-hover: #949ca4;
  --blink-text-primary: #ffffff;
  --blink-text-secondary: #949ca4;
  --blink-text-success: #12dc88;
  --blink-text-warning: #ffb545;
  --blink-text-warning-hover: #ffc875;
  --blink-transparent-error: #aa00001a;
  --blink-transparent-grey: #6e767d1a;
  --blink-transparent-warning: #a966001a;

  --blink-border-radius-rounded-lg: 0.25rem;
  --blink-border-radius-rounded-xl: 0.5rem;
  --blink-border-radius-rounded-2xl: 1.125rem;
  --blink-border-radius-rounded-button: 624.9375rem;
  --blink-border-radius-rounded-input: 624.9375rem;

  /* box-shadow */
  --blink-shadow-container: 0px 2px 8px 0px rgba(59, 176, 255, 0.22),
    0px 1px 48px 0px rgba(29, 155, 240, 0.24);
}

be sure to import these overrides after @dialectlabs/blinks styles (or by CSS Specificity as suggested above)

Chrome Extension

Package provides an entrypoint function with styled for X Blink components

// contentScript.ts
import { setupTwitterObserver } from "@dialectlabs/blinks/ext/twitter";
import { BlinkSolanaConfig } from "@dialectlabs/blinks";

// your RPC_URL is used to create a connection to confirm the transaction after action execution
setupTwitterObserver(new BlinkSolanaConfig(RPC_URL, {
  metadata: {
    supportedBlockchainIds: [BlockchainIds.SOLANA_MAINNET]
  },
  connect: async () => { ... },
  signTransaction: async (tx: string) => { ... }
}))

// or

import type { BlinkAdapter, BlinkAdapterMetadata } from "@dialectlabs/blinks";

class MyBlinkAdapter implements BlinkAdapter {
  async connect() { ... }

  async signTransaction(tx: string) { ... }

  async confirmTransaction(sig: string) { ... }

  get metadata(): BlinkAdapterMetadata {
    return {
      supportedBlockchainIds: [BlockchainIds.SOLANA_MAINNET],
    };
  }

  async signMessage(data: string | SignMessageData) { ... }
}

setupTwitterObserver(new MyBlinkAdapter());

Manifest

  "content_scripts": [
    {
      "matches": ["https://twitter.com/*", "https://x.com/*", "https://pro.x.com/*"],
      "js": ["src/contentScript.ts"],
    }
  ]

Learn More: