CentercodeDitto
DittoPorygonAPI

TokenPicker

Select dynamic tokens for template strings

Overview

TokenPicker provides a popover interface for selecting dynamic tokens to insert into template strings. Tokens are displayed grouped by category (user, program, project, etc.) with search filtering. Selected tokens are returned as paths (e.g., "user.name") which can be wrapped in {{}} syntax for template resolution.

Key Features

  • Grouped token display with collapsible sections
  • Search filtering across all tokens
  • Copy-to-clipboard for individual tokens
  • PII indicator for sensitive fields
  • Syntax help tooltip in footer
  • Custom trigger button support

Interactive Examples

Button-Based Token Picker

Click "Token Picker" button to browse and insert tokens.

Inline Autocomplete (type {"{{"})

Type {{ to trigger autocomplete. Use ↑↓ to navigate, Enter to insert, Esc to close.

Detected Tokens

{{user.name}}{{program.name}}

Interfaces

TokenGroup

PropTypeDescription
idstringUnique identifier for the group
namestringDisplay name for the group header
iconIconDefinition?Optional icon for the group header
itemsTokenItem[]Array of tokens within this group

TokenItem

PropTypeDescription
pathstringToken path (e.g., "user.name")
labelstringHuman-readable label
categorystringCategory for grouping
descriptionstring?Optional description text
isPIIboolean?Whether this is a PII field (shows warning)

Props Reference

PropTypeDefaultDescription
groupsTokenGroup[]requiredArray of token groups to display
onSelect(token: string) => voidrequiredCallback when a token is selected (returns path)
triggerReactNode-Custom trigger element (defaults to button)
searchPlaceholderstring-Override default search placeholder text
disabledbooleanfalseDisable the picker
classNamestring-Additional CSS classes for the trigger
side'top' | 'right' | 'bottom' | 'left''bottom'Popover position relative to trigger
align'start' | 'center' | 'end''start'Popover alignment

Usage

import { TokenPicker, type TokenGroup } from '@/ui/components/token-picker';
import { faUser, faGrid2 } from '@fortawesome/duotone-regular-svg-icons';

// Define token groups
const groups: TokenGroup[] = [
  {
    id: 'user',
    name: 'User',
    icon: faUser,
    items: [
      { path: 'user.name', label: 'Name', category: 'user' },
      { path: 'user.email', label: 'Email', category: 'user', isPII: true },
    ],
  },
  {
    id: 'program',
    name: 'Program',
    icon: faGrid2,
    items: [
      { path: 'program.name', label: 'Program Name', category: 'program' },
    ],
  },
];

// Usage in component
<TokenPicker
  groups={groups}
  onSelect={(path) => {
    // Insert token at cursor: `{{${path}}}`
    insertAtCursor(`{{${path}}}`);
  }}
/>