@epam/ai-dial-ui-kit 0.14.0-dev.1 → 0.14.0-dev.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/README.md +7 -1
  2. package/dist/CHANGELOG.md +56 -1
  3. package/dist/{JsonEditor-pyqbLZZf.cjs → JsonEditor-CIlvycLc.cjs} +1 -1
  4. package/dist/{JsonEditor-v9m_npfK.js → JsonEditor-NpnQyFhU.js} +1 -1
  5. package/dist/{MarkdownEditor-5UpxUtXf.js → MarkdownEditor-BfGhvCXb.js} +1 -1
  6. package/dist/{MarkdownEditor-BjqdSHPU.cjs → MarkdownEditor-D4Bnm8m2.cjs} +1 -1
  7. package/dist/{MarkdownEditor-CWZVSR--.js → MarkdownEditor-DNsyeoRP.js} +1 -1
  8. package/dist/{MarkdownEditor-9aPIyyuu.cjs → MarkdownEditor-HHw9bUhi.cjs} +1 -1
  9. package/dist/components-manifest.json +1757 -200
  10. package/dist/dial-ui-kit.cjs.js +1 -1
  11. package/dist/dial-ui-kit.es.js +227 -194
  12. package/dist/{index-DKDaSZqV.js → index-BLzC7Z4I.js} +14869 -13247
  13. package/dist/{index-xlqMH2Q1.cjs → index-CCLX8BoI.cjs} +31 -31
  14. package/dist/index.css +2 -2
  15. package/dist/migration-guides/0.14.0/button-tooltip-2-0.md +111 -0
  16. package/dist/migration-guides/0.14.0/control-color-token-rename.md +143 -0
  17. package/dist/migration-guides/0.14.0/focus-border-token-role-naming.md +87 -0
  18. package/dist/migration-guides/0.14.0/select-multiselect-option-row.md +99 -0
  19. package/dist/migration-guides/0.14.0/shadow-token-per-step-rename.md +104 -0
  20. package/dist/migration-guides/0.14.0/tag-single-size.md +121 -0
  21. package/dist/migration-guides/README.md +6 -0
  22. package/dist/src/components/Grid/comparators/base-column-comparator.d.ts +1 -4
  23. package/dist/src/components/Grid/renderers/utils.d.ts +1 -2
  24. package/dist/src/components/New/Button/Button.d.ts +4 -3
  25. package/dist/src/components/New/Calendar/constants.d.ts +5 -5
  26. package/dist/src/components/New/Checkbox/Checkbox.d.ts +50 -0
  27. package/dist/src/components/New/Checkbox/CheckboxBox.d.ts +30 -0
  28. package/dist/src/components/New/Checkbox/constants.d.ts +10 -0
  29. package/dist/src/components/New/CollapsibleSidebar/CollapsibleSidebar.d.ts +82 -0
  30. package/dist/src/components/New/Dropdown/constants.d.ts +3 -1
  31. package/dist/src/components/New/EllipsisTooltip/EllipsisTooltip.d.ts +51 -0
  32. package/dist/src/components/New/EllipsisTooltip/use-truncation.d.ts +21 -0
  33. package/dist/src/components/New/Grid/Grid.d.ts +124 -0
  34. package/dist/src/components/New/Grid/components/SelectionCell.d.ts +21 -0
  35. package/dist/src/components/New/Grid/components/SelectionHeader.d.ts +14 -0
  36. package/dist/src/components/New/Grid/constants.d.ts +59 -0
  37. package/dist/src/components/New/Grid/renderers/DateCellRenderer.d.ts +48 -0
  38. package/dist/src/components/New/Grid/renderers/constants.d.ts +5 -0
  39. package/dist/src/components/New/Highlight/Highlight.d.ts +1 -1
  40. package/dist/src/components/New/IconButton/IconButton.d.ts +4 -4
  41. package/dist/src/components/New/Input/Button/constants.d.ts +1 -1
  42. package/dist/src/components/New/Label/Label.d.ts +5 -0
  43. package/dist/src/components/New/NoDataContent/NoDataContent.d.ts +48 -0
  44. package/dist/src/components/New/Notification/Notification.d.ts +7 -0
  45. package/dist/src/components/New/Notification/NotificationWrapper.d.ts +2 -0
  46. package/dist/src/components/New/Popup/Popup.d.ts +48 -9
  47. package/dist/src/components/New/Popup/constants.d.ts +7 -0
  48. package/dist/src/components/New/Radio/Radio.d.ts +48 -0
  49. package/dist/src/components/New/RadioGroup/RadioGroup.d.ts +78 -0
  50. package/dist/src/components/New/RadioGroup/constants.d.ts +11 -0
  51. package/dist/src/components/New/RadioGroupPopupField/RadioGroupPopupField.d.ts +93 -0
  52. package/dist/src/components/New/RadioGroupPopupField/constants.d.ts +22 -0
  53. package/dist/src/components/New/ResizableContainer/ConditionalResizableContainer.d.ts +34 -0
  54. package/dist/src/components/New/ResizableContainer/ResizableContainer.d.ts +76 -0
  55. package/dist/src/components/New/ResizableContainer/components/ResizeHandle.d.ts +21 -0
  56. package/dist/src/components/New/SegmentedControl/SegmentedControl.d.ts +54 -0
  57. package/dist/src/components/New/SegmentedControl/constants.d.ts +16 -0
  58. package/dist/src/components/New/Select/constants.d.ts +2 -2
  59. package/dist/src/components/New/Slider/Slider.d.ts +70 -0
  60. package/dist/src/components/New/Tag/Tag.d.ts +26 -4
  61. package/dist/src/components/New/Tag/constants.d.ts +23 -0
  62. package/dist/src/components/New/ToggleIconButton/ToggleIconButton.d.ts +47 -0
  63. package/dist/src/components/New/Tooltip/Tooltip.d.ts +43 -0
  64. package/dist/src/components/New/Tooltip/TooltipContainer.d.ts +32 -0
  65. package/dist/src/components/New/Tooltip/TooltipContent.d.ts +18 -0
  66. package/dist/src/components/New/Tooltip/TooltipContext.d.ts +115 -0
  67. package/dist/src/components/New/Tooltip/TooltipTrigger.d.ts +18 -0
  68. package/dist/src/components/New/Tooltip/constants.d.ts +30 -0
  69. package/dist/src/components/New/constants/overlay.d.ts +12 -3
  70. package/dist/src/index.d.ts +44 -1
  71. package/dist/src/models/dropdown.d.ts +10 -0
  72. package/dist/src/types/notification.d.ts +2 -1
  73. package/dist/src/types/tag.d.ts +4 -0
  74. package/dist/src/types/tooltip.d.ts +6 -0
  75. package/dist/src/utils/grid-comparators.d.ts +4 -0
  76. package/dist/src/utils/grid-date.d.ts +7 -0
  77. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "0.14.0-dev.1",
3
- "generatedAt": "2026-08-19T12:39:41.400Z",
2
+ "version": "0.14.0-dev.12",
3
+ "generatedAt": "2026-08-27T13:56:58.300Z",
4
4
  "kit": {
5
5
  "name": "@epam/ai-dial-ui-kit",
6
6
  "description": "A modern UI kit for building AI DIAL interfaces with React",
@@ -21,7 +21,7 @@
21
21
  "setupNotes": "## Next.js Integration\n1. Install the package and peer dependencies that are not currently in your project\n``` bash\nnpm install @epam/ai-dial-ui-kit\nnpm install react react-dom @tabler/icons-react classnames\nnpm install @floating-ui/react monaco-editor @monaco-editor/react\n```\n\n2. Import style in the root layout of the project:\n\n```tsx\n// app/layout.tsx\nimport \"@epam/ai-dial-ui-kit/styles.css\";\n```\n\n3. Usage example\n\n```tsx\n// app/page.tsx\n\"use client\";\nimport { DialPrimaryButton } from \"@epam/ai-dial-ui-kit\";\n\nexport default function Home() {\n return (\n <div className=\"w-full h-full flex flex-col gap-3 items-center justify-center\">\n <h1>Test library</h1>\n <DialPrimaryButton onClick={() => alert('Hello AI DIAL!')} />\n </div>\n );\n}\n```\nSee \"🎨 Theming & Customization\" section in README."
22
22
  },
23
23
  "styles": "# Typography CSS Utility Classes\n\n## Design-system-compliant classes (`dial-*-text`)\n\nUse these by default. They follow the design system type scale.\n\n| Class | Design name | Weight | Size / Line-height |\n| --------------------------------- | --------------------------- | -------- | ----------------------------------- |\n| `.dial-display1-text` | Display 1 | semibold | 32px / 48px |\n| `.dial-display2-text` | Display 2 | semibold | 28px / 40px |\n| `.dial-display3-text` | Display 3 | semibold | 22px / 32px |\n| `.dial-h1-text` | Heading 1 | semibold | 20px / 28px |\n| `.dial-h2-text` | Heading 2 | semibold | 18px / 26px |\n| `.dial-h3-text` | Heading 3 | semibold | 16px / 24px |\n| `.dial-body-text` | Body Text | normal | 16px / 24px |\n| `.dial-body-semi-text` | Body Text (Semi Bold) | semibold | 16px / 24px |\n| `.dial-body-paragraph-text` | Body Paragraph | normal | 16px / 26px |\n| `.dial-body-paragraph-semi-text` | Body Paragraph (Semi Bold) | semibold | 16px / 26px |\n| `.dial-small-text` | Small Text | normal | 14px / 20px |\n| `.dial-small-semi-text` | Small Text (Semi Bold) | semibold | 14px / 20px |\n| `.dial-small-paragraph-text` | Small Paragraph | normal | 14px / 24px |\n| `.dial-small-paragraph-semi-text` | Small Paragraph (Semi Bold) | semibold | 14px / 24px |\n| `.dial-tiny-text` | Tiny Text | normal | 12px / 16px |\n| `.dial-tiny-lead-text` | Tiny Text Lead | normal | 12px / 16px (+0.03em, uppercase) |\n| `.dial-tiny-semi-text` | Tiny Text (Semi Bold) | semibold | 12px / 16px |\n| `.dial-tiny-lead-semi-text` | Tiny Text Lead (Semi Bold) | semibold | 12px / 16px (+0.03em, uppercase) |\n| `.dial-caption-text` | Caption | normal | 10px / 12px |\n| `.dial-caption-lead-semi-text` | Caption Lead (Semi Bold) | semibold | 10px / 12px (+0.06em, uppercase) |\n| `.dial-code-text` | Code | normal | 14px / 20px (Fira Code / monospace) |\n\nThe three `*-lead-*` classes apply `text-transform: uppercase` themselves — pass them the sentence-case string, not a pre-uppercased one, so the accessible name stays readable.\n\n`.dial-code-text` resolves its family through `var(--theme-font-mono, var(--font-fira-code, 'Fira Code'))` before falling back to the system monospace stack. The kit ships no font file; the host provides the face.\n\n## Legacy classes (avoid in new code)\n\nClasses like `dial-h1`, `dial-h2`, `dial-body`, `dial-small*`, `dial-tiny*`, `dial-caption` are legacy. They can be used in legacy projects if user explicidly specify they need legacy typography.\n\n## Raw SCSS source\n",
24
- "theming": "# Theming & CSS Variable Tokens\n\nAI DIAL UI Kit uses CSS custom properties (variables) for theming.\nDark and light themes are switched by setting different values for these variables on `:root` or a theme wrapper element.\n\n## Usage in Tailwind\n\nThe Tailwind config maps CSS variables to utility classes.\nUse these classes in your components:\n\n```tsx\n// Backgrounds\n<div className=\"bg-layer-0\" /> // darkest background\n<div className=\"bg-layer-1\" /> // main content area\n<div className=\"bg-layer-2\" /> // elevated panels\n\n// Text\n<span className=\"text-primary\" /> // main text color\n<span className=\"text-secondary\" /> // muted text\n<span className=\"text-error\" /> // error state\n\n// Borders\n<div className=\"border border-primary\" /> // standard border\n<div className=\"border border-error\" /> // error border\n```\n\n## Override CSS Variables\n\n```css\n:root {\n --bg-layer-0: #000000;\n --bg-layer-1: #0c101d;\n --bg-layer-2: #161b2d;\n --bg-layer-3: #1d2439;\n --text-primary: #eef1f7;\n --text-secondary: #9fa6bd;\n --text-error: #f76464;\n --stroke-primary: #696e7c;\n --controls-bg-accent-primary: #3664e2;\n /* ... see tailwind.config.js for full list */\n}\n```\n\n## Token Reference\n\n\n### backgroundsColors\n| Tailwind class suffix | CSS variable | Default value |\n|---|---|---|\n| `layer-sunken` | `var(--bg-layer-sunken)` | `#EEF1F7` |\n| `layer-base` | `var(--bg-layer-base)` | `#F5F7FA` |\n| `layer-raised` | `var(--bg-layer-raised)` | `#FCFCFC` |\n\n### controlsBgColors\n| Tailwind class suffix | CSS variable | Default value |\n|---|---|---|\n| `control-accent-alpha` | `var(--bg-control-accent-alpha)` | `#2764D90F` |\n| `control-accent-alpha-hover` | `var(--bg-control-accent-alpha-hover)` | `#2764D924` |\n| `control-accent-alpha-active` | `var(--bg-control-accent-alpha-active)` | `#2764D933` |\n| `control-accent` | `var(--bg-control-accent)` | `#124ACE` |\n| `control-neutral` | `var(--bg-control-neutral)` | `#FCFCFC` |\n| `control-neutral-hover` | `var(--bg-control-neutral-hover)` | `#E0E6F0` |\n| `control-neutral-active` | `var(--bg-control-neutral-active)` | `#D1DBEA` |\n| `control-error` | `var(--bg-control-error)` | `#AE2F2F` |\n| `control-error-hover` | `var(--bg-control-error-hover)` | `#BF3939` |\n| `control-error-active` | `var(--bg-control-error-active)` | `#CC4545` |\n| `control-error-alpha-hover` | `var(--bg-control-error-alpha-hover)` | `#F764641A` |\n| `control-error-alpha-active` | `var(--bg-control-error-alpha-active)` | `#F7646433` |\n| `control-disable` | `var(--bg-control-disable)` | `#DCE0E8` |\n\n### borderColors\n| Tailwind class suffix | CSS variable | Default value |\n|---|---|---|\n| `hover-alpha` | `var(--stroke-hover-alpha)` | `#2764D933` |\n| `focus-blue` | `var(--stroke-focus-blue)` | `#6785FB` |\n| `accent-alpha` | `var(--stroke-accent-alpha)` | `#2764D933` |\n| `error-alpha` | `var(--stroke-error-alpha)` | `#AE2F2F73` |\n| `control-disable-alpha` | `var(--text-control-disable-alpha)` | `#848E9C` |\n\n### visualBgColors\n| Tailwind class suffix | CSS variable | Default value |\n|---|---|---|\n| `green-1` | `var(--bg-visual-green-1)` | `#CDE8E5` |\n| `green-2` | `var(--bg-visual-green-2)` | `#D1F0DC` |\n| `violet-1` | `var(--bg-visual-violet-1)` | `#DDE3F9` |\n| `violet-2` | `var(--bg-visual-violet-2)` | `#F1E9FF` |\n\n### visualTextColors\n| Tailwind class suffix | CSS variable | Default value |\n|---|---|---|\n| `green-1` | `var(--text-visual-green-1)` | `#059669` |\n| `green-2` | `var(--text-visual-green-2)` | `#0D6E72` |\n| `green-3` | `var(--text-visual-green-3)` | `#065F46` |\n| `brown-1` | `var(--text-visual-brown-1)` | `#D36817` |\n| `brown-2` | `var(--text-visual-brown-2)` | `#B45309` |\n| `violet-1` | `var(--text-visual-violet-1)` | `#7C3AED` |\n| `violet-2` | `var(--text-visual-violet-2)` | `#3730B7` |\n\n### textColors\n| Tailwind class suffix | CSS variable | Default value |\n|---|---|---|\n| `warning-icon` | `var(--text-warning-icon)` | `#EEC840` |\n\n### controlsTextColors\n| Tailwind class suffix | CSS variable | Default value |\n|---|---|---|\n| `control-permanent` | `var(--text-control-permanent)` | `#FCFCFC` |\n| `control-disable-alpha` | `var(--text-control-disable-alpha)` | `#848E9C` |\n| `control-disable-beta` | `var(--text-control-disable-beta)` | `#DCE0E8` |\n| `control-blue-hover` | `var(--text-control-blue-hover)` | `#5976E9` |\n| `control-blue-active` | `var(--text-control-blue-active)` | `#6785FB` |\n\n### backgroundsColorsToRemove\n| Tailwind class suffix | CSS variable | Default value |\n|---|---|---|\n| `layer-0` | `var(--bg-layer-0)` | `#FCFCFC` |\n| `layer-1` | `var(--bg-layer-1)` | `#E0E6F0` |\n| `layer-2` | `var(--bg-layer-2)` | `#EEF1F7` |\n| `layer-3` | `var(--bg-layer-3)` | `#FCFCFC` |\n| `layer-4` | `var(--bg-layer-4)` | `#D1DBEA` |\n| `accent-primary-alpha` | `var(--bg-accent-primary-alpha)` | `#7DA4FF26` |\n| `accent-secondary-alpha` | `var(--bg-accent-secondary-alpha)` | `#37BABC2E` |\n| `accent-tertiary-alpha` | `var(--bg-accent-tertiary-alpha)` | `#A972FF2E` |\n| `accent-primary` | `var(--bg-accent-primary)` | `#5C8DEA` |\n| `accent-secondary` | `var(--bg-accent-secondary)` | `#37BABC` |\n| `red-400` | `var(--bg-red-400)` | `#F76464` |\n| `controls-accent-primary` | `var(--controls-bg-accent-primary)` | `#124ACE` |\n| `controls-accent-primary-hover` | `var(--controls-bg-accent-primary-hover)` | `#2656D9` |\n| `controls-accent-primary-active` | `var(--controls-bg-accent-primary-active)` | `#3664E2` |\n| `controls-accent-primary-alpha-active` | `var(--controls-bg-accent-primary-alpha-active)` | `#7DA4FF5C` |\n| `controls-accent-secondary-alpha-active` | `var(--controls-bg-accent-secondary-alpha-active)` | `#37BABC5C` |\n| `controls-accent-tertiary-alpha-active` | `var(--controls-bg-accent-tertiary-alpha-active)` | `#A972FF5C` |\n| `controls-error` | `var(--controls-bg-error)` | `#AE2F2F` |\n| `controls-error-hover` | `var(--controls-bg-error-hover)` | `#BF3939` |\n| `controls-error-active` | `var(--controls-bg-error-active)` | `#CC4545` |\n| `controls-error-alpha-active` | `var(--controls-bg-error-alpha-active)` | `#F764645C` |\n| `controls-disable-accent` | `var(--controls-bg-disable-accent)` | `#7C8293` |\n| `controls-disable` | `var(--controls-bg-disable)` | `#D1DBEA` |\n| `controls-neutral-hover` | `var(--controls-bg-neutral-hover)` | `#D1DBEA` |\n| `controls-neutral-active` | `var(--controls-bg-neutral-active)` | `#9FA6BD` |\n| `controls-accent-success-alpha-hover` | `var(--controls-bg-accent-success-alpha-hover)` | `#37BABC2E` |\n| `controls-accent-success-alpha-active` | `var(--controls-bg-accent-success-alpha-active)` | `#37BABC5C` |\n| `controls-enable-primary` | `var(--controls-enable-primary)` | `#FCFCFC` |\n\n### borderColorsToRemove\n| Tailwind class suffix | CSS variable | Default value |\n|---|---|---|\n| `accent-primary` | `var(--stroke-accent-primary)` | `#124ACE` |\n| `accent-secondary` | `var(--stroke-accent-secondary)` | `#007274` |\n| `controls-accent` | `var(--controls-bg-accent)` | `#5C8DEA` |\n| `red-900` | `var(--red-900)` | `#402027` |\n\n### textColorsToRemove\n| Tailwind class suffix | CSS variable | Default value |\n|---|---|---|\n| `accent-primary` | `var(--text-accent-primary)` | `#7DA4FF` |\n| `accent-secondary` | `var(--text-accent-secondary)` | `#37BABC` |\n| `accent-tertiary` | `var(--text-accent-tertiary)` | `#A972FF` |\n| `controls-permanent` | `var(--controls-text-permanent)` | `#FCFCFC` |\n| `controls-accent-disable` | `var(--controls-text-accent-disable)` | `#D1DBEA` |\n| `controls-primary-disable` | `var(--controls-text-primary-disable)` | `#696E7C` |\n| `controls-secondary-disable` | `var(--controls-text-secondary-disable)` | `#9FA6BD` |\n| `controls-neutral` | `var(--controls-text-neutral)` | `#161B2D` |\n| `controls-accent-primary-hover` | `var(--controls-text-accent-primary-hover)` | `#3664E2` |\n| `controls-accent-primary-active` | `var(--controls-text-accent-primary-active)` | `#7DA4FF` |",
24
+ "theming": "# Theming & CSS Variable Tokens\n\nAI DIAL UI Kit uses CSS custom properties (variables) for theming.\nDark and light themes are switched by setting different values for these variables on `:root` or a theme wrapper element.\n\n## Usage in Tailwind\n\nThe Tailwind config maps CSS variables to utility classes.\nUse these classes in your components:\n\n```tsx\n// Backgrounds\n<div className=\"bg-layer-0\" /> // darkest background\n<div className=\"bg-layer-1\" /> // main content area\n<div className=\"bg-layer-2\" /> // elevated panels\n\n// Text\n<span className=\"text-primary\" /> // main text color\n<span className=\"text-secondary\" /> // muted text\n<span className=\"text-error\" /> // error state\n\n// Borders\n<div className=\"border border-primary\" /> // standard border\n<div className=\"border border-error\" /> // error border\n```\n\n## Override CSS Variables\n\n```css\n:root {\n --bg-layer-0: #000000;\n --bg-layer-1: #0c101d;\n --bg-layer-2: #161b2d;\n --bg-layer-3: #1d2439;\n --text-primary: #eef1f7;\n --text-secondary: #9fa6bd;\n --text-error: #f76464;\n --stroke-primary: #696e7c;\n --controls-bg-accent-primary: #3664e2;\n /* ... see tailwind.config.js for full list */\n}\n```\n\n## Token Reference\n\n\n### backgroundsColors\n| Tailwind class suffix | CSS variable | Default value |\n|---|---|---|\n| `layer-sunken` | `var(--bg-layer-sunken)` | `#EEF1F7` |\n| `layer-base` | `var(--bg-layer-base)` | `#F5F7FA` |\n| `layer-raised` | `var(--bg-layer-raised)` | `#FCFCFC` |\n| `gradient-1` | `var(--bg-gradient-1)` | `#1D4ED8` |\n| `gradient-1-hover` | `var(--bg-gradient-1-hover)` | `#6785FB` |\n| `gradient-1-active` | `var(--bg-gradient-1-active)` | `#1D4ED8` |\n| `gradient-2` | `var(--bg-gradient-2)` | `#885DF2` |\n| `gradient-2-hover` | `var(--bg-gradient-2-hover)` | `#885DF2` |\n| `gradient-2-active` | `var(--bg-gradient-2-active)` | `#7C3AED` |\n| `control-accent-alpha` | `var(--bg-control-accent-alpha)` | `#2764D90F` |\n| `control-accent-alpha-hover` | `var(--bg-control-accent-alpha-hover)` | `#2764D924` |\n| `control-accent-alpha-active` | `var(--bg-control-accent-alpha-active)` | `#2764D933` |\n| `control-accent` | `var(--bg-control-accent)` | `#1D4ED8` |\n| `control-accent-hover` | `var(--bg-control-accent-hover)` | `#5976E9` |\n| `control-neutral` | `var(--bg-control-neutral)` | `#FCFCFC` |\n| `control-neutral-hover-strong` | `var(--bg-control-neutral-hover-strong)` | `#848E9C` |\n| `control-neutral-active` | `var(--bg-control-neutral-active)` | `#D1DBEA` |\n| `control-neutral-default` | `var(--bg-control-neutral-default)` | `#ACB3C3` |\n| `control-inverted` | `var(--bg-control-inverted)` | `#57647A` |\n| `control-error` | `var(--bg-control-error)` | `#AE2F2F` |\n| `control-error-hover` | `var(--bg-control-error-hover)` | `#BF3939` |\n| `control-error-active` | `var(--bg-control-error-active)` | `#CC4545` |\n| `control-error-alpha-hover` | `var(--bg-control-error-alpha-hover)` | `#F764641A` |\n| `control-error-alpha-active` | `var(--bg-control-error-alpha-active)` | `#F7646433` |\n| `control-disable-primary` | `var(--bg-control-disable-primary)` | `#DCE0E8` |\n| `control-disable-secondary` | `var(--bg-control-disable-secondary)` | `#ACB3C3` |\n| `green-1` | `var(--bg-visual-green-1)` | `#CDE8E5` |\n| `green-2` | `var(--bg-visual-green-2)` | `#D1F0DC` |\n| `violet-1` | `var(--bg-visual-violet-1)` | `#DDE3F9` |\n| `violet-2` | `var(--bg-visual-violet-2)` | `#F1E9FF` |\n\n### shadowColors\n| Tailwind class suffix | CSS variable | Default value |\n|---|---|---|\n| `xs-sm-1` | `var(--shadow-xs-sm-1)` | `#2764D933` |\n| `xs-sm-2` | `var(--shadow-xs-sm-2)` | `#161B2D08` |\n\n### borderColors\n| Tailwind class suffix | CSS variable | Default value |\n|---|---|---|\n| `accent-alpha` | `var(--stroke-accent-alpha)` | `#2764D933` |\n| `gradient-1` | `var(--stroke-gradient-1)` | `#5976E9` |\n| `gradient-2` | `var(--stroke-gradient-2)` | `#885DF2` |\n| `accent-focus` | `var(--stroke-accent-focus)` | `#6785FB` |\n| `error-alpha` | `var(--stroke-error-alpha)` | `#AE2F2F73` |\n| `control-disable-primary` | `var(--stroke-control-disable-primary)` | `#848E9C` |\n\n### textColors\n| Tailwind class suffix | CSS variable | Default value |\n|---|---|---|\n| `warning-icon` | `var(--text-warning-icon)` | `#EEC840` |\n| `green-1` | `var(--text-visual-green-1)` | `#059669` |\n| `green-2` | `var(--text-visual-green-2)` | `#0D6E72` |\n| `green-3` | `var(--text-visual-green-3)` | `#065F46` |\n| `brown-1` | `var(--text-visual-brown-1)` | `#D36817` |\n| `brown-2` | `var(--text-visual-brown-2)` | `#B45309` |\n| `violet-1` | `var(--text-visual-violet-1)` | `#7C3AED` |\n| `violet-2` | `var(--text-visual-violet-2)` | `#3730B7` |\n| `control-permanent` | `var(--text-control-permanent)` | `#FCFCFC` |\n| `control-inverted` | `var(--text-control-inverted)` | `#FCFCFC` |\n| `control-disable-primary` | `var(--text-control-disable-primary)` | `#848E9C` |\n| `control-disable-secondary` | `var(--text-control-disable-secondary)` | `#DCE0E8` |\n| `control-accent-hover` | `var(--text-control-accent-hover)` | `#5976E9` |\n| `control-accent-active` | `var(--text-control-accent-active)` | `#6785FB` |\n\n### backgroundsColorsToRemove\n| Tailwind class suffix | CSS variable | Default value |\n|---|---|---|\n| `layer-0` | `var(--bg-layer-0)` | `#FCFCFC` |\n| `layer-1` | `var(--bg-layer-1)` | `#E0E6F0` |\n| `layer-2` | `var(--bg-layer-2)` | `#EEF1F7` |\n| `layer-3` | `var(--bg-layer-3)` | `#FCFCFC` |\n| `layer-4` | `var(--bg-layer-4)` | `#D1DBEA` |\n| `accent-primary-alpha` | `var(--bg-accent-primary-alpha)` | `#7DA4FF26` |\n| `accent-secondary-alpha` | `var(--bg-accent-secondary-alpha)` | `#37BABC2E` |\n| `accent-tertiary-alpha` | `var(--bg-accent-tertiary-alpha)` | `#A972FF2E` |\n| `accent-primary` | `var(--bg-accent-primary)` | `#5C8DEA` |\n| `accent-secondary` | `var(--bg-accent-secondary)` | `#37BABC` |\n| `red-400` | `var(--bg-red-400)` | `#F76464` |\n| `controls-accent-primary` | `var(--controls-bg-accent-primary)` | `#124ACE` |\n| `controls-accent-primary-hover` | `var(--controls-bg-accent-primary-hover)` | `#2656D9` |\n| `controls-accent-primary-active` | `var(--controls-bg-accent-primary-active)` | `#3664E2` |\n| `controls-accent-primary-alpha-active` | `var(--controls-bg-accent-primary-alpha-active)` | `#7DA4FF5C` |\n| `controls-accent-secondary-alpha-active` | `var(--controls-bg-accent-secondary-alpha-active)` | `#37BABC5C` |\n| `controls-accent-tertiary-alpha-active` | `var(--controls-bg-accent-tertiary-alpha-active)` | `#A972FF5C` |\n| `controls-error` | `var(--controls-bg-error)` | `#AE2F2F` |\n| `controls-error-hover` | `var(--controls-bg-error-hover)` | `#BF3939` |\n| `controls-error-active` | `var(--controls-bg-error-active)` | `#CC4545` |\n| `controls-error-alpha-active` | `var(--controls-bg-error-alpha-active)` | `#F764645C` |\n| `controls-disable-accent` | `var(--controls-bg-disable-accent)` | `#7C8293` |\n| `controls-disable` | `var(--controls-bg-disable)` | `#D1DBEA` |\n| `controls-neutral-hover` | `var(--controls-bg-neutral-hover)` | `#D1DBEA` |\n| `controls-neutral-active` | `var(--controls-bg-neutral-active)` | `#9FA6BD` |\n| `controls-accent-success-alpha-hover` | `var(--controls-bg-accent-success-alpha-hover)` | `#37BABC2E` |\n| `controls-accent-success-alpha-active` | `var(--controls-bg-accent-success-alpha-active)` | `#37BABC5C` |\n| `controls-enable-primary` | `var(--controls-enable-primary)` | `#FCFCFC` |\n\n### borderColorsToRemove\n| Tailwind class suffix | CSS variable | Default value |\n|---|---|---|\n| `accent-primary` | `var(--stroke-accent-primary)` | `#124ACE` |\n| `accent-secondary` | `var(--stroke-accent-secondary)` | `#007274` |\n| `controls-accent` | `var(--controls-bg-accent)` | `#5C8DEA` |\n| `red-900` | `var(--red-900)` | `#402027` |\n\n### textColorsToRemove\n| Tailwind class suffix | CSS variable | Default value |\n|---|---|---|\n| `accent-primary` | `var(--text-accent-primary)` | `#7DA4FF` |\n| `accent-secondary` | `var(--text-accent-secondary)` | `#37BABC` |\n| `accent-tertiary` | `var(--text-accent-tertiary)` | `#A972FF` |\n| `controls-permanent` | `var(--controls-text-permanent)` | `#FCFCFC` |\n| `controls-accent-disable` | `var(--controls-text-accent-disable)` | `#D1DBEA` |\n| `controls-primary-disable` | `var(--controls-text-primary-disable)` | `#696E7C` |\n| `controls-secondary-disable` | `var(--controls-text-secondary-disable)` | `#9FA6BD` |\n| `controls-neutral` | `var(--controls-text-neutral)` | `#161B2D` |\n| `controls-accent-primary-hover` | `var(--controls-text-accent-primary-hover)` | `#3664E2` |\n| `controls-accent-primary-active` | `var(--controls-text-accent-primary-active)` | `#7DA4FF` |",
25
25
  "components": [
26
26
  {
27
27
  "name": "Spinner",
@@ -251,7 +251,7 @@
251
251
  }
252
252
  ],
253
253
  "examples": [
254
- "<Notification\n variant={NotificationVariant.Info}\n message=\"This is an info alert.\"\n/>\n\n<Notification\n variant={NotificationVariant.Success}\n title=\"Saved\"\n message=\"Changes saved successfully.\"\n/>\n\n<Notification\n variant={NotificationVariant.Error}\n closable\n message=\"Something went wrong.\"\n onClose={(e) => console.log('closed', e)}\n/>\n\n<Notification\n variant={NotificationVariant.Loading}\n title=\"Processing\"\n message=\"Please wait...\"\n/>"
254
+ "<Notification\n variant={NotificationVariant.Info}\n message=\"This is an info alert.\"\n/>\n\n<Notification\n variant={NotificationVariant.Success}\n title=\"Saved\"\n message=\"Changes saved successfully.\"\n/>\n\n<Notification\n variant={NotificationVariant.Error}\n closable\n message=\"Something went wrong.\"\n onClose={(e) => console.log('closed', e)}\n/>\n\n<Notification\n variant={NotificationVariant.Loading}\n title=\"Processing\"\n message=\"Please wait...\"\n/>\n\n<Notification\n variant={NotificationVariant.General}\n type={NotificationType.SectionMessage}\n title=\"Title\"\n message=\"Description text example\"\n/>"
255
255
  ],
256
256
  "sourceFile": "components/New/Notification/Notification.tsx"
257
257
  },
@@ -318,6 +318,24 @@
318
318
  "examples": [],
319
319
  "sourceFile": "components/New/Notification/NotificationWrapper.tsx"
320
320
  },
321
+ {
322
+ "name": "GeneralMessageNotification",
323
+ "category": "Components_2_0",
324
+ "generation": "2.0",
325
+ "description": "",
326
+ "props": [],
327
+ "examples": [],
328
+ "sourceFile": "components/New/Notification/NotificationWrapper.tsx"
329
+ },
330
+ {
331
+ "name": "GeneralToastNotification",
332
+ "category": "Components_2_0",
333
+ "generation": "2.0",
334
+ "description": "",
335
+ "props": [],
336
+ "examples": [],
337
+ "sourceFile": "components/New/Notification/NotificationWrapper.tsx"
338
+ },
321
339
  {
322
340
  "name": "InfoMessageNotification",
323
341
  "category": "Components_2_0",
@@ -703,8 +721,9 @@
703
721
  },
704
722
  {
705
723
  "name": "tooltipProps",
706
- "type": "TooltipProps",
707
- "required": false
724
+ "type": "ButtonTooltipProps",
725
+ "required": false,
726
+ "description": "Props of the 2.0 wrapping the button"
708
727
  },
709
728
  {
710
729
  "name": "href",
@@ -765,8 +784,9 @@
765
784
  },
766
785
  {
767
786
  "name": "tooltipProps",
768
- "type": "TooltipProps",
769
- "required": false
787
+ "type": "IconButtonTooltipProps",
788
+ "required": false,
789
+ "description": "Props of the 2.0 wrapping the button"
770
790
  }
771
791
  ],
772
792
  "examples": [
@@ -1301,6 +1321,12 @@
1301
1321
  "required": false,
1302
1322
  "defaultValue": "ElementSize.Small",
1303
1323
  "description": "The size of the label, which can be 'small', 'medium', or 'large'."
1324
+ },
1325
+ {
1326
+ "name": "containerClassName",
1327
+ "type": "string",
1328
+ "required": false,
1329
+ "description": "Additional classes for the wrapper holding the\n`<label>` and its info button. Needed when the label is a flex item that has\nto shrink: a wrapper left at `min-width: auto` cannot, so its text overflows\ninstead of truncating."
1304
1330
  }
1305
1331
  ],
1306
1332
  "examples": [
@@ -1526,7 +1552,7 @@
1526
1552
  "name": "Popup",
1527
1553
  "category": "Components_2_0",
1528
1554
  "generation": "2.0",
1529
- "description": "An accessible modal dialog using Floating UI.\naliases: Modal|Dialog\nDesign system 2.0\n\nRenders in a portal with a scrim overlay, focus management, a header with the\ntitle and close control, a scrollable body and an optional footer. Sections\nare separated by spacing rather than rules; add your own through\n`headerClassName` or the footer node if a surface needs them.\n\nA string `header` names the dialog automatically. A `header` node cannot —\npass `ariaLabel` in that case, or the dialog opens unnamed.",
1555
+ "description": "An accessible modal dialog using Floating UI.\naliases: Modal|Dialog\nDesign system 2.0\n\nRenders in a portal with a scrim overlay, focus management, a header with the\ntitle and close control, a scrollable body and an optional footer. Sections\nare separated by spacing rather than rules; opt into a rule with\n`headerDivider` / `footerDivider`.\n\nThe header grows from the title alone: `onBack` prepends a back control,\n`headerActions` sits between the title and the close button.\n\nThe footer is declared as data, not markup: `mainButtons` and\n`additionalButtons` take and the popup renders the\ns itself, so spacing, order and the neutral default are the\nsame on every dialog. `additionalButtonsOnLeft` moves the secondary group to\nthe opposite edge. A `footer` node still wins over both, for the rare surface\nthat needs something other than a row of buttons.\n\nA string `header` names the dialog automatically. A `header` node cannot —\npass `ariaLabel` in that case, or the dialog opens unnamed.",
1530
1556
  "props": [
1531
1557
  {
1532
1558
  "name": "open",
@@ -1593,7 +1619,13 @@
1593
1619
  "name": "footer",
1594
1620
  "type": "ReactNode",
1595
1621
  "required": false,
1596
- "description": "Footer area for actions"
1622
+ "description": "Custom footer node; overrides `mainButtons` and `additionalButtons`"
1623
+ },
1624
+ {
1625
+ "name": "footerClassName",
1626
+ "type": "string",
1627
+ "required": false,
1628
+ "description": "Additional CSS classes applied to the built-in footer container"
1597
1629
  },
1598
1630
  {
1599
1631
  "name": "onClose",
@@ -1601,6 +1633,58 @@
1601
1633
  "required": false,
1602
1634
  "description": "Callback fired when the popup requests to close"
1603
1635
  },
1636
+ {
1637
+ "name": "onBack",
1638
+ "type": "(e: MouseEvent<HTMLButtonElement>) => void",
1639
+ "required": false,
1640
+ "description": "Callback for the header back button; the button renders only when set"
1641
+ },
1642
+ {
1643
+ "name": "backAriaLabel",
1644
+ "type": "string",
1645
+ "required": false,
1646
+ "defaultValue": "'Back'",
1647
+ "description": "Accessible name of the back button"
1648
+ },
1649
+ {
1650
+ "name": "headerActions",
1651
+ "type": "ReactNode",
1652
+ "required": false,
1653
+ "description": "Controls rendered between the title and the close button"
1654
+ },
1655
+ {
1656
+ "name": "headerDivider",
1657
+ "type": "boolean",
1658
+ "required": false,
1659
+ "defaultValue": "false",
1660
+ "description": "Whether a rule is drawn under the header"
1661
+ },
1662
+ {
1663
+ "name": "mainButtons",
1664
+ "type": "ButtonProps[]",
1665
+ "required": false,
1666
+ "description": "Primary footer buttons, aligned to the trailing edge; each defaults to `ButtonVariant.Neutral`"
1667
+ },
1668
+ {
1669
+ "name": "additionalButtons",
1670
+ "type": "ButtonProps[]",
1671
+ "required": false,
1672
+ "description": "Secondary footer buttons, next to `mainButtons` unless moved left"
1673
+ },
1674
+ {
1675
+ "name": "additionalButtonsOnLeft",
1676
+ "type": "boolean",
1677
+ "required": false,
1678
+ "defaultValue": "false",
1679
+ "description": "Whether `additionalButtons` sit on the leading edge"
1680
+ },
1681
+ {
1682
+ "name": "footerDivider",
1683
+ "type": "boolean",
1684
+ "required": false,
1685
+ "defaultValue": "false",
1686
+ "description": "Whether a rule is drawn above the footer"
1687
+ },
1604
1688
  {
1605
1689
  "name": "size",
1606
1690
  "type": "PopupSize",
@@ -1638,7 +1722,7 @@
1638
1722
  }
1639
1723
  ],
1640
1724
  "examples": [
1641
- "<Popup\n open\n header=\"Title\"\n size={PopupSize.Md}\n footer={\n <div className=\"flex justify-end gap-2 px-6 py-4\">\n <NeutralButton label=\"Cancel\" />\n <PrimaryButton label=\"Confirm\" />\n </div>\n }\n onClose={() => setOpen(false)}\n>\n <div className=\"px-6 py-4\">Dialog content goes here…</div>\n</Popup>"
1725
+ "<Popup\n open\n header=\"Title\"\n size={PopupSize.Md}\n onBack={() => setStep(step - 1)}\n headerActions={<InfoButton caption=\"What is this?\" />}\n additionalButtonsOnLeft\n additionalButtons={[\n {\n label: 'Back',\n variant: ButtonVariant.Primary,\n appearance: ButtonAppearance.Link,\n iconBefore: <IconArrowLeft />,\n onClick: goBack,\n },\n ]}\n mainButtons={[\n { label: 'Cancel', onClick: () => setOpen(false) },\n { label: 'Confirm', variant: ButtonVariant.Primary, onClick: submit },\n ]}\n onClose={() => setOpen(false)}\n>\n <div className=\"px-6 py-4\">Dialog content goes here…</div>\n</Popup>"
1642
1726
  ],
1643
1727
  "sourceFile": "components/New/Popup/Popup.tsx"
1644
1728
  },
@@ -2095,359 +2179,1628 @@
2095
2179
  "sourceFile": "components/New/Switch/Switch.tsx"
2096
2180
  },
2097
2181
  {
2098
- "name": "Tabs",
2182
+ "name": "Radio",
2099
2183
  "category": "Components_2_0",
2100
2184
  "generation": "2.0",
2101
- "description": "A horizontal row of tabs, underlining the active one and showing optional count badges.\naliases: TabRow|TabNavigation|TabBar\nDesign system 2.0\n\nFollows the ARIA tabs pattern with automatic activation: only the active tab is\nin the tab order, and the arrow keys move both focus and selection. `Home` and\n`End` jump to the first and last tab, and the arrows wrap around the ends.\nTabs marked `disabled` are greyed out, cannot be clicked, and are skipped by\nkeyboard navigation.\n\nThe component renders the tabs only; the panels stay with the consumer.",
2185
+ "description": "A radio button from the 2.0 design system.\naliases: RadioButton|ChoiceOption|RadioInput\nDesign system 2.0",
2102
2186
  "props": [
2103
2187
  {
2104
- "name": "tabs",
2105
- "type": "TabItem[]",
2188
+ "name": "name",
2189
+ "type": "string",
2106
2190
  "required": true,
2107
- "description": "Ordered list of tabs to render."
2191
+ "description": "The group this radio belongs to; radios sharing it are mutually exclusive"
2108
2192
  },
2109
2193
  {
2110
- "name": "activeTabId",
2194
+ "name": "value",
2111
2195
  "type": "string",
2112
2196
  "required": true,
2113
- "description": "ID of the currently selected tab."
2197
+ "description": "The value reported to `onChange` when this radio is selected"
2114
2198
  },
2115
2199
  {
2116
- "name": "onTabChange",
2117
- "type": "(tabId: string) => void",
2118
- "required": true,
2119
- "description": "Fired with the tab's `id` when the user selects a tab."
2200
+ "name": "labelProps",
2201
+ "type": "LabelProps",
2202
+ "required": false,
2203
+ "description": "Props of the rendered next to the control"
2120
2204
  },
2121
2205
  {
2122
- "name": "ariaLabel",
2123
- "type": "string",
2206
+ "name": "isSelected",
2207
+ "type": "boolean",
2124
2208
  "required": false,
2125
- "description": "Accessible name for the tab list."
2209
+ "defaultValue": "false",
2210
+ "description": "Whether this radio is the selected one of its group"
2126
2211
  },
2127
2212
  {
2128
- "name": "className",
2129
- "type": "string",
2213
+ "name": "disabled",
2214
+ "type": "boolean",
2130
2215
  "required": false,
2131
- "description": "Additional CSS classes for the tab list container."
2216
+ "description": "Whether the radio is disabled"
2132
2217
  },
2133
2218
  {
2134
- "name": "tabClassName",
2219
+ "name": "onChange",
2220
+ "type": "(value: string) => void",
2221
+ "required": false,
2222
+ "description": "Callback fired with `value` when this radio becomes selected"
2223
+ },
2224
+ {
2225
+ "name": "caption",
2135
2226
  "type": "string",
2136
2227
  "required": false,
2137
- "description": "Additional CSS classes applied to every tab."
2228
+ "description": "Caption text rendered below the label, and described by the radio"
2138
2229
  }
2139
2230
  ],
2140
2231
  "examples": [
2141
- "<Tabs\n ariaLabel=\"Conversation views\"\n tabs={[\n { id: 'all', label: 'All', count: 12 },\n { id: 'shared', label: 'Shared with me' },\n ]}\n activeTabId={activeTabId}\n onTabChange={setActiveTabId}\n/>"
2232
+ "<Radio\n name=\"plan\"\n value=\"pro\"\n labelProps={{ label: 'Pro' }}\n isSelected={plan === 'pro'}\n onChange={setPlan}\n/>"
2142
2233
  ],
2143
- "sourceFile": "components/New/Tabs/Tabs.tsx"
2234
+ "sourceFile": "components/New/Radio/Radio.tsx"
2144
2235
  },
2145
2236
  {
2146
- "name": "FileDropzone",
2237
+ "name": "RadioGroup",
2147
2238
  "category": "Components_2_0",
2148
2239
  "generation": "2.0",
2149
- "description": "A dashed drop area that takes files by drag-and-drop or through the file picker.\naliases: LoadFileArea|FileUpload|DragDropUpload|UploadArea\nDesign system 2.0\n\nThe area is a label over a visually hidden file input, so the picker opens on\nclick and the control stays operable by keyboard and announced as a file input\nwithout any extra wiring. The border highlights while a drag hovers it.\n\n`accept` is enforced on drops as well as in the picker — the browser only\nfilters the latter — so `onChange` never receives a file the caller excluded.\nRejected files go to `onReject`; all copy stays with the caller, which keeps\nvalidation messages in the consumer's own wording and language.",
2240
+ "description": "A set of mutually exclusive options with one group label.\naliases: SelectionGroup|OptionGroup|RadioList\nDesign system 2.0",
2150
2241
  "props": [
2151
2242
  {
2152
- "name": "labelProps",
2153
- "type": "LabelProps",
2154
- "required": false,
2155
- "description": "Props of the naming the field, rendered above the area."
2156
- },
2157
- {
2158
- "name": "label",
2159
- "type": "ReactNode",
2243
+ "name": "items",
2244
+ "type": "RadioGroupItem[]",
2160
2245
  "required": true,
2161
- "description": "Primary line of copy."
2246
+ "description": "Options to render; each needs a unique `value` and may carry a `label`, `caption`, `content` and `disabled` flag"
2162
2247
  },
2163
2248
  {
2164
- "name": "description",
2165
- "type": "ReactNode",
2249
+ "name": "value",
2250
+ "type": "string",
2166
2251
  "required": false,
2167
- "description": "Secondary line of copy."
2252
+ "description": "The `value` of the selected option"
2168
2253
  },
2169
2254
  {
2170
2255
  "name": "onChange",
2171
- "type": "(files: File[]) => void",
2256
+ "type": "(value: string) => void",
2172
2257
  "required": true,
2173
- "description": "Fired with the accepted files."
2258
+ "description": "Callback fired with the newly selected `value`"
2174
2259
  },
2175
2260
  {
2176
- "name": "onReject",
2177
- "type": "(files: File[]) => void",
2261
+ "name": "name",
2262
+ "type": "string",
2178
2263
  "required": false,
2179
- "description": "Fired with dropped files that `accept` excluded."
2264
+ "description": "The `name` shared by the underlying radios; defaults to the group id"
2180
2265
  },
2181
2266
  {
2182
- "name": "accept",
2267
+ "name": "id",
2183
2268
  "type": "string",
2184
2269
  "required": false,
2185
- "description": "Comma-separated `accept` tokens."
2270
+ "description": "Base id for the group; option ids are derived from it"
2186
2271
  },
2187
2272
  {
2188
- "name": "multiple",
2189
- "type": "boolean",
2273
+ "name": "orientation",
2274
+ "type": "RadioGroupOrientation",
2190
2275
  "required": false,
2191
- "defaultValue": "false",
2192
- "description": "Whether more than one file can be selected."
2276
+ "defaultValue": "RadioGroupOrientation.Column",
2277
+ "description": "Whether the options stack or sit in a row"
2278
+ },
2279
+ {
2280
+ "name": "labelProps",
2281
+ "type": "LabelProps",
2282
+ "required": false,
2283
+ "description": "Props of the rendered above the options"
2193
2284
  },
2194
2285
  {
2195
2286
  "name": "disabled",
2196
2287
  "type": "boolean",
2197
2288
  "required": false,
2198
- "defaultValue": "false",
2199
- "description": "Disables picking and dropping."
2289
+ "description": "Disables every option"
2200
2290
  },
2201
2291
  {
2202
- "name": "errorText",
2292
+ "name": "error",
2203
2293
  "type": "string",
2204
2294
  "required": false,
2205
- "description": "Error message rendered below the area."
2295
+ "description": "Error message rendered below the options"
2206
2296
  },
2207
2297
  {
2208
- "name": "icon",
2209
- "type": "ReactNode",
2298
+ "name": "caption",
2299
+ "type": "string",
2210
2300
  "required": false,
2211
- "description": "Icon rendered above the copy."
2301
+ "description": "Helper text rendered below the options when there is no `error`"
2212
2302
  },
2213
2303
  {
2214
- "name": "id",
2304
+ "name": "ariaLabel",
2215
2305
  "type": "string",
2216
2306
  "required": false,
2217
- "description": "`id` of the underlying file input."
2307
+ "description": "Names the group when there is no string `labelProps.label`"
2218
2308
  },
2219
2309
  {
2220
- "name": "ariaLabel",
2310
+ "name": "className",
2221
2311
  "type": "string",
2222
2312
  "required": false,
2223
- "description": "Accessible name; needed when `label` carries no text."
2313
+ "description": "Additional classes for the outer container"
2224
2314
  },
2225
2315
  {
2226
- "name": "className",
2316
+ "name": "optionsClassName",
2227
2317
  "type": "string",
2228
2318
  "required": false,
2229
- "description": "Additional CSS classes for the drop area."
2319
+ "description": "Additional classes for the options wrapper"
2320
+ },
2321
+ {
2322
+ "name": "radioClassName",
2323
+ "type": "string",
2324
+ "required": false,
2325
+ "description": "Additional classes for every option's control row"
2326
+ },
2327
+ {
2328
+ "name": "contentClassName",
2329
+ "type": "string",
2330
+ "required": false,
2331
+ "description": "Additional classes for the selected option's content"
2230
2332
  }
2231
2333
  ],
2232
2334
  "examples": [
2233
- "<FileDropzone\n label=\"Drag and drop it or click here to upload\"\n description=\"File formats .md, .zip and .skill\"\n accept=\".md,.zip,.skill\"\n onChange={(files) => upload(files)}\n onReject={() => setError('Unsupported file format')}\n/>"
2335
+ "<RadioGroup\n labelProps={{ label: 'Delivery' }}\n value={delivery}\n onChange={setDelivery}\n items={[\n { value: 'pickup', label: 'Pickup', caption: 'Free, ready today' },\n { value: 'courier', label: 'Courier', content: <AddressForm /> },\n ]}\n/>"
2234
2336
  ],
2235
- "sourceFile": "components/New/FileDropzone/FileDropzone.tsx"
2337
+ "sourceFile": "components/New/RadioGroup/RadioGroup.tsx"
2236
2338
  },
2237
2339
  {
2238
- "name": "Tag",
2340
+ "name": "RadioGroupPopupField",
2239
2341
  "category": "Components_2_0",
2240
2342
  "generation": "2.0",
2241
- "description": "A compact label element used for selections, filters, or categories.\naliases: Chip|Pill\nDesign system 2.0\n\nThe label truncates rather than wrapping, and carries a native `title` so the\nfull text stays reachable when it does.\n\nA tag with `onClick` becomes a `role=\"button\"` operable with Enter and Space.\nIts remove control is a real nested `<button>`, so keep the two roles apart in\nthe caller: a clickable tag that is also closable gives a screen reader two\nactions with no way to tell which one it landed on.",
2343
+ "description": "A field whose value is picked from a inside a .\naliases: PopupRadio|ChoicePopup|RadioPopupField\nDesign system 2.0",
2242
2344
  "props": [
2243
2345
  {
2244
- "name": "label",
2245
- "type": "string",
2346
+ "name": "items",
2347
+ "type": "RadioGroupItem[]",
2246
2348
  "required": true,
2247
- "description": "Text content displayed inside the tag."
2349
+ "description": "Options offered inside the popup"
2248
2350
  },
2249
2351
  {
2250
- "name": "icon",
2352
+ "name": "value",
2353
+ "type": "string",
2354
+ "required": false,
2355
+ "description": "The committed value, shown in the collapsed field"
2356
+ },
2357
+ {
2358
+ "name": "customValue",
2359
+ "type": "string",
2360
+ "required": false,
2361
+ "description": "Text shown in the field in place of the selected option's label"
2362
+ },
2363
+ {
2364
+ "name": "header",
2251
2365
  "type": "ReactNode",
2366
+ "required": true,
2367
+ "description": "Title of the popup"
2368
+ },
2369
+ {
2370
+ "name": "onApply",
2371
+ "type": "(value?: string) => void",
2372
+ "required": true,
2373
+ "description": "Callback fired with the selected value when Apply is clicked"
2374
+ },
2375
+ {
2376
+ "name": "id",
2377
+ "type": "string",
2252
2378
  "required": false,
2253
- "description": "Icon rendered before the label."
2379
+ "description": "Base id for the field; the label and the options derive theirs from it"
2254
2380
  },
2255
2381
  {
2256
- "name": "size",
2257
- "type": "ElementSize",
2382
+ "name": "labelProps",
2383
+ "type": "LabelProps",
2258
2384
  "required": false,
2259
- "defaultValue": "ElementSize.Standard",
2260
- "description": "Tag height: standard is 24px, small is 20px."
2385
+ "description": "Props of the rendered above the field"
2261
2386
  },
2262
2387
  {
2263
- "name": "selected",
2264
- "type": "boolean",
2388
+ "name": "placeholder",
2389
+ "type": "string",
2265
2390
  "required": false,
2266
- "defaultValue": "false",
2267
- "description": "Applies the accent-tinted selected styling."
2391
+ "description": "Text shown in the field while no value is selected"
2268
2392
  },
2269
2393
  {
2270
- "name": "disabled",
2271
- "type": "boolean",
2394
+ "name": "selectedValue",
2395
+ "type": "string",
2272
2396
  "required": false,
2273
- "defaultValue": "false",
2274
- "description": "Dims the tag and suppresses the remove control and click handling."
2397
+ "description": "Controlled draft selection inside the popup"
2275
2398
  },
2276
2399
  {
2277
- "name": "closable",
2400
+ "name": "onSelectionChange",
2401
+ "type": "(value: string) => void",
2402
+ "required": false,
2403
+ "description": "Callback fired when the draft selection changes"
2404
+ },
2405
+ {
2406
+ "name": "onCancel",
2407
+ "type": "() => void",
2408
+ "required": false,
2409
+ "description": "Callback fired when Cancel is clicked, before the popup closes"
2410
+ },
2411
+ {
2412
+ "name": "onClose",
2413
+ "type": "() => void",
2414
+ "required": false,
2415
+ "description": "Callback fired whenever the popup closes"
2416
+ },
2417
+ {
2418
+ "name": "isValid",
2278
2419
  "type": "boolean",
2279
2420
  "required": false,
2280
- "defaultValue": "false",
2281
- "description": "Renders the remove button. Needs `onRemove` to appear."
2421
+ "defaultValue": "true",
2422
+ "description": "Whether Apply is enabled"
2282
2423
  },
2283
2424
  {
2284
- "name": "removeLabel",
2425
+ "name": "applyButtonLabel",
2285
2426
  "type": "string",
2286
2427
  "required": false,
2287
- "description": "Accessible name of the remove button; defaults to `Remove <label>`."
2428
+ "defaultValue": "defaultApplyLabel",
2429
+ "description": "Label of the Apply button"
2288
2430
  },
2289
2431
  {
2290
- "name": "onRemove",
2291
- "type": "(event: MouseEvent<HTMLButtonElement>) => void",
2432
+ "name": "cancelButtonLabel",
2433
+ "type": "string",
2292
2434
  "required": false,
2293
- "description": "Called when the remove button is clicked. The click does not bubble to `onClick`."
2294
- }
2295
- ],
2296
- "examples": [
2297
- "<Tag label=\"TypeScript\" />\n<Tag label=\"TypeScript\" closable onRemove={() => remove('TypeScript')} />\n<Tag label=\"Drafts\" selected onClick={() => toggle('Drafts')} />"
2298
- ],
2299
- "sourceFile": "components/New/Tag/Tag.tsx"
2300
- },
2301
- {
2302
- "name": "TagInput",
2303
- "category": "Components_2_0",
2304
- "generation": "2.0",
2305
- "description": "A tag input field: type a value and commit it with Enter or comma.\naliases: MultiTag|TagField|ChipInput\nDesign system 2.0\n\nThe field is an , so it carries the 2.0 field styling, sizes,\nlabel, caption and error states, and the tags render as s in its\ncontent slot. The field grows as tags wrap, unless `collapseTagOverflow` keeps\nthem on one line behind a `+N` chip.\n\nWorks controlled (`value` + `onChange`) or uncontrolled (`defaultValue`).\nDuplicate tags are ignored. Backspace on an empty input removes the last tag.",
2306
- "props": [
2435
+ "defaultValue": "defaultCancelLabel",
2436
+ "description": "Label of the Cancel button"
2437
+ },
2307
2438
  {
2308
- "name": "id",
2309
- "type": "string",
2439
+ "name": "size",
2440
+ "type": "PopupSize",
2441
+ "required": false,
2442
+ "defaultValue": "PopupSize.Md",
2443
+ "description": "Size of the popup"
2444
+ },
2445
+ {
2446
+ "name": "portalId",
2447
+ "type": "string",
2448
+ "required": false,
2449
+ "description": "Portal container id for the popup"
2450
+ },
2451
+ {
2452
+ "name": "disabled",
2453
+ "type": "boolean",
2454
+ "required": false,
2455
+ "description": "Disables the field, so the popup cannot be opened"
2456
+ },
2457
+ {
2458
+ "name": "invalid",
2459
+ "type": "boolean",
2460
+ "required": false,
2461
+ "description": "Paints the field with the error border"
2462
+ },
2463
+ {
2464
+ "name": "error",
2465
+ "type": "string",
2466
+ "required": false,
2467
+ "description": "Error message rendered below the field"
2468
+ },
2469
+ {
2470
+ "name": "caption",
2471
+ "type": "string",
2472
+ "required": false,
2473
+ "description": "Helper text rendered below the field when there is no `error`"
2474
+ },
2475
+ {
2476
+ "name": "ariaLabel",
2477
+ "type": "string",
2478
+ "required": false,
2479
+ "description": "Names the field when there is no string `labelProps.label`"
2480
+ },
2481
+ {
2482
+ "name": "className",
2483
+ "type": "string",
2484
+ "required": false,
2485
+ "description": "Additional classes for the outer container"
2486
+ },
2487
+ {
2488
+ "name": "fieldClassName",
2489
+ "type": "string",
2490
+ "required": false,
2491
+ "description": "Additional classes for the collapsed field"
2492
+ }
2493
+ ],
2494
+ "examples": [
2495
+ "<RadioGroupPopupField\n labelProps={{ label: 'Status' }}\n header=\"Select status\"\n placeholder=\"None\"\n items={[\n { value: 'draft', label: 'Draft' },\n { value: 'published', label: 'Published' },\n ]}\n value={status}\n onApply={(next) => setStatus(next)}\n/>"
2496
+ ],
2497
+ "sourceFile": "components/New/RadioGroupPopupField/RadioGroupPopupField.tsx"
2498
+ },
2499
+ {
2500
+ "name": "Checkbox",
2501
+ "category": "Components_2_0",
2502
+ "generation": "2.0",
2503
+ "description": "A checkbox from the 2.0 design system.\naliases: ToggleCheckbox|MultiSelectOption|TriStateCheckbox\nDesign system 2.0",
2504
+ "props": [
2505
+ {
2506
+ "name": "labelProps",
2507
+ "type": "LabelProps",
2508
+ "required": false,
2509
+ "description": "Props of the rendered next to the control"
2510
+ },
2511
+ {
2512
+ "name": "isSelected",
2513
+ "type": "boolean",
2514
+ "required": false,
2515
+ "defaultValue": "false",
2516
+ "description": "The current value of the checkbox"
2517
+ },
2518
+ {
2519
+ "name": "isIndeterminate",
2520
+ "type": "boolean",
2521
+ "required": false,
2522
+ "defaultValue": "false",
2523
+ "description": "Whether the checkbox is in the mixed state"
2524
+ },
2525
+ {
2526
+ "name": "invalid",
2527
+ "type": "boolean",
2528
+ "required": false,
2529
+ "defaultValue": "false",
2530
+ "description": "Whether the checkbox failed validation (applies error styling)"
2531
+ },
2532
+ {
2533
+ "name": "disabled",
2534
+ "type": "boolean",
2535
+ "required": false,
2536
+ "description": "Whether the checkbox is disabled"
2537
+ },
2538
+ {
2539
+ "name": "onChange",
2540
+ "type": "(value: boolean) => void",
2541
+ "required": false,
2542
+ "description": "Callback fired with the new value when toggled"
2543
+ },
2544
+ {
2545
+ "name": "caption",
2546
+ "type": "string",
2547
+ "required": false,
2548
+ "description": "Caption text rendered below the label, and described by the checkbox"
2549
+ },
2550
+ {
2551
+ "name": "boxClassName",
2552
+ "type": "string",
2553
+ "required": false,
2554
+ "description": "Additional classes for the box itself. Use it to drop\nthe box's own focus ring where the container already draws one, as a\nmultiselect row does."
2555
+ }
2556
+ ],
2557
+ "examples": [
2558
+ "<Checkbox\n labelProps={{ label: 'Accept terms' }}\n isSelected={accepted}\n onChange={setAccepted}\n/>"
2559
+ ],
2560
+ "sourceFile": "components/New/Checkbox/Checkbox.tsx"
2561
+ },
2562
+ {
2563
+ "name": "CheckboxBox",
2564
+ "category": "Components_2_0",
2565
+ "generation": "2.0",
2566
+ "description": "The 20px box a checkbox draws — the square, its border, its fill and the\ncheck or dash inside.\nDesign system 2.0\n\nTwo things render it: , where it is the `<label for>` that\ntoggles the input next to it, and rows that only *look* like a checkbox —\na `menuitemcheckbox` in a dropdown, whose state lives on `aria-checked` and\nwhose whole row is the control. Passing `htmlFor` picks the first: the box\nbecomes a label with a pointer target of its own. Without it the box is a\ndecorative `<span>`, hidden from assistive technology, and the row around it\ncarries both the state and the pointer target.",
2567
+ "props": [
2568
+ {
2569
+ "name": "isSelected",
2570
+ "type": "boolean",
2571
+ "required": false,
2572
+ "defaultValue": "false",
2573
+ "description": "Whether the box is filled with a check"
2574
+ },
2575
+ {
2576
+ "name": "isIndeterminate",
2577
+ "type": "boolean",
2578
+ "required": false,
2579
+ "defaultValue": "false",
2580
+ "description": "Whether the box is filled with a dash; takes precedence over `isSelected`"
2581
+ },
2582
+ {
2583
+ "name": "invalid",
2584
+ "type": "boolean",
2585
+ "required": false,
2586
+ "defaultValue": "false",
2587
+ "description": "Paints the box with the error colour"
2588
+ },
2589
+ {
2590
+ "name": "disabled",
2591
+ "type": "boolean",
2592
+ "required": false,
2593
+ "defaultValue": "false",
2594
+ "description": "Greys the box out"
2595
+ },
2596
+ {
2597
+ "name": "htmlFor",
2598
+ "type": "string",
2599
+ "required": false,
2600
+ "description": "Id of the input this box labels; omit for a decorative box"
2601
+ },
2602
+ {
2603
+ "name": "className",
2604
+ "type": "string",
2605
+ "required": false,
2606
+ "description": "Additional classes for the box"
2607
+ }
2608
+ ],
2609
+ "examples": [],
2610
+ "sourceFile": "components/New/Checkbox/CheckboxBox.tsx"
2611
+ },
2612
+ {
2613
+ "name": "ToggleIconButton",
2614
+ "category": "Components_2_0",
2615
+ "generation": "2.0",
2616
+ "description": "An icon button that stays pressed, for a setting the icon itself represents.\naliases: IconToggle|ToggleButton|BookmarkButton\nDesign system 2.0",
2617
+ "props": [
2618
+ {
2619
+ "name": "icon",
2620
+ "type": "ReactNode",
2621
+ "required": true,
2622
+ "description": "Icon shown while unselected; rendered at 16px"
2623
+ },
2624
+ {
2625
+ "name": "selectedIcon",
2626
+ "type": "ReactNode",
2627
+ "required": false,
2628
+ "description": "Icon shown while selected; falls back to `icon`"
2629
+ },
2630
+ {
2631
+ "name": "isSelected",
2632
+ "type": "boolean",
2633
+ "required": false,
2634
+ "defaultValue": "false",
2635
+ "description": "Whether the toggle is on"
2636
+ },
2637
+ {
2638
+ "name": "onToggle",
2639
+ "type": "(isSelected: boolean) => void",
2640
+ "required": false,
2641
+ "description": "Callback fired with the next value when clicked"
2642
+ },
2643
+ {
2644
+ "name": "tooltipProps",
2645
+ "type": "ToggleTooltipProps",
2646
+ "required": false,
2647
+ "description": "Props of the 2.0 wrapping the button"
2648
+ }
2649
+ ],
2650
+ "examples": [
2651
+ "<ToggleIconButton\n icon={<IconBookmark />}\n selectedIcon={<IconBookmarkFilled />}\n isSelected={isBookmarked}\n onToggle={setIsBookmarked}\n tooltipProps={{ tooltip: 'Bookmark' }}\n/>"
2652
+ ],
2653
+ "sourceFile": "components/New/ToggleIconButton/ToggleIconButton.tsx"
2654
+ },
2655
+ {
2656
+ "name": "SegmentedControl",
2657
+ "category": "Components_2_0",
2658
+ "generation": "2.0",
2659
+ "description": "A single-select switch between a few mutually exclusive, equally sized options.\naliases: SegmentedButton|ViewSwitcher|ButtonGroup\nDesign system 2.0",
2660
+ "props": [
2661
+ {
2662
+ "name": "items",
2663
+ "type": "SegmentedControlItem<T>[]",
2664
+ "required": true,
2665
+ "description": "Segments to render; each needs a unique `value` and may carry a `label`, `icon` and `disabled` flag"
2666
+ },
2667
+ {
2668
+ "name": "value",
2669
+ "type": "T",
2670
+ "required": true,
2671
+ "description": "The currently selected `value`"
2672
+ },
2673
+ {
2674
+ "name": "onChange",
2675
+ "type": "(value: T) => void",
2676
+ "required": true,
2677
+ "description": "Callback fired with the newly selected `value`"
2678
+ },
2679
+ {
2680
+ "name": "disabled",
2681
+ "type": "boolean",
2682
+ "required": false,
2683
+ "description": "Disables every segment"
2684
+ },
2685
+ {
2686
+ "name": "className",
2687
+ "type": "string",
2688
+ "required": false,
2689
+ "description": "Additional classes for the track"
2690
+ },
2691
+ {
2692
+ "name": "segmentClassName",
2693
+ "type": "string",
2694
+ "required": false,
2695
+ "description": "Additional classes for every segment"
2696
+ },
2697
+ {
2698
+ "name": "'aria-label'",
2699
+ "type": "string",
2700
+ "required": false
2701
+ }
2702
+ ],
2703
+ "examples": [
2704
+ "<SegmentedControl\n aria-label=\"View\"\n value={view}\n onChange={setView}\n items={[\n { value: 'list', icon: <IconList />, 'aria-label': 'List' },\n { value: 'grid', icon: <IconGrid />, 'aria-label': 'Grid' },\n ]}\n/>"
2705
+ ],
2706
+ "sourceFile": "components/New/SegmentedControl/SegmentedControl.tsx"
2707
+ },
2708
+ {
2709
+ "name": "Tabs",
2710
+ "category": "Components_2_0",
2711
+ "generation": "2.0",
2712
+ "description": "A horizontal row of tabs, underlining the active one and showing optional count badges.\naliases: TabRow|TabNavigation|TabBar\nDesign system 2.0\n\nFollows the ARIA tabs pattern with automatic activation: only the active tab is\nin the tab order, and the arrow keys move both focus and selection. `Home` and\n`End` jump to the first and last tab, and the arrows wrap around the ends.\nTabs marked `disabled` are greyed out, cannot be clicked, and are skipped by\nkeyboard navigation.\n\nThe component renders the tabs only; the panels stay with the consumer.",
2713
+ "props": [
2714
+ {
2715
+ "name": "tabs",
2716
+ "type": "TabItem[]",
2717
+ "required": true,
2718
+ "description": "Ordered list of tabs to render."
2719
+ },
2720
+ {
2721
+ "name": "activeTabId",
2722
+ "type": "string",
2723
+ "required": true,
2724
+ "description": "ID of the currently selected tab."
2725
+ },
2726
+ {
2727
+ "name": "onTabChange",
2728
+ "type": "(tabId: string) => void",
2729
+ "required": true,
2730
+ "description": "Fired with the tab's `id` when the user selects a tab."
2731
+ },
2732
+ {
2733
+ "name": "ariaLabel",
2734
+ "type": "string",
2735
+ "required": false,
2736
+ "description": "Accessible name for the tab list."
2737
+ },
2738
+ {
2739
+ "name": "className",
2740
+ "type": "string",
2741
+ "required": false,
2742
+ "description": "Additional CSS classes for the tab list container."
2743
+ },
2744
+ {
2745
+ "name": "tabClassName",
2746
+ "type": "string",
2747
+ "required": false,
2748
+ "description": "Additional CSS classes applied to every tab."
2749
+ }
2750
+ ],
2751
+ "examples": [
2752
+ "<Tabs\n ariaLabel=\"Conversation views\"\n tabs={[\n { id: 'all', label: 'All', count: 12 },\n { id: 'shared', label: 'Shared with me' },\n ]}\n activeTabId={activeTabId}\n onTabChange={setActiveTabId}\n/>"
2753
+ ],
2754
+ "sourceFile": "components/New/Tabs/Tabs.tsx"
2755
+ },
2756
+ {
2757
+ "name": "FileDropzone",
2758
+ "category": "Components_2_0",
2759
+ "generation": "2.0",
2760
+ "description": "A dashed drop area that takes files by drag-and-drop or through the file picker.\naliases: LoadFileArea|FileUpload|DragDropUpload|UploadArea\nDesign system 2.0\n\nThe area is a label over a visually hidden file input, so the picker opens on\nclick and the control stays operable by keyboard and announced as a file input\nwithout any extra wiring. The border highlights while a drag hovers it.\n\n`accept` is enforced on drops as well as in the picker — the browser only\nfilters the latter — so `onChange` never receives a file the caller excluded.\nRejected files go to `onReject`; all copy stays with the caller, which keeps\nvalidation messages in the consumer's own wording and language.",
2761
+ "props": [
2762
+ {
2763
+ "name": "labelProps",
2764
+ "type": "LabelProps",
2765
+ "required": false,
2766
+ "description": "Props of the naming the field, rendered above the area."
2767
+ },
2768
+ {
2769
+ "name": "label",
2770
+ "type": "ReactNode",
2771
+ "required": true,
2772
+ "description": "Primary line of copy."
2773
+ },
2774
+ {
2775
+ "name": "description",
2776
+ "type": "ReactNode",
2777
+ "required": false,
2778
+ "description": "Secondary line of copy."
2779
+ },
2780
+ {
2781
+ "name": "onChange",
2782
+ "type": "(files: File[]) => void",
2783
+ "required": true,
2784
+ "description": "Fired with the accepted files."
2785
+ },
2786
+ {
2787
+ "name": "onReject",
2788
+ "type": "(files: File[]) => void",
2789
+ "required": false,
2790
+ "description": "Fired with dropped files that `accept` excluded."
2791
+ },
2792
+ {
2793
+ "name": "accept",
2794
+ "type": "string",
2795
+ "required": false,
2796
+ "description": "Comma-separated `accept` tokens."
2797
+ },
2798
+ {
2799
+ "name": "multiple",
2800
+ "type": "boolean",
2801
+ "required": false,
2802
+ "defaultValue": "false",
2803
+ "description": "Whether more than one file can be selected."
2804
+ },
2805
+ {
2806
+ "name": "disabled",
2807
+ "type": "boolean",
2808
+ "required": false,
2809
+ "defaultValue": "false",
2810
+ "description": "Disables picking and dropping."
2811
+ },
2812
+ {
2813
+ "name": "errorText",
2814
+ "type": "string",
2815
+ "required": false,
2816
+ "description": "Error message rendered below the area."
2817
+ },
2818
+ {
2819
+ "name": "icon",
2820
+ "type": "ReactNode",
2821
+ "required": false,
2822
+ "description": "Icon rendered above the copy."
2823
+ },
2824
+ {
2825
+ "name": "id",
2826
+ "type": "string",
2827
+ "required": false,
2828
+ "description": "`id` of the underlying file input."
2829
+ },
2830
+ {
2831
+ "name": "ariaLabel",
2832
+ "type": "string",
2833
+ "required": false,
2834
+ "description": "Accessible name; needed when `label` carries no text."
2835
+ },
2836
+ {
2837
+ "name": "className",
2838
+ "type": "string",
2839
+ "required": false,
2840
+ "description": "Additional CSS classes for the drop area."
2841
+ }
2842
+ ],
2843
+ "examples": [
2844
+ "<FileDropzone\n label=\"Drag and drop it or click here to upload\"\n description=\"File formats .md, .zip and .skill\"\n accept=\".md,.zip,.skill\"\n onChange={(files) => upload(files)}\n onReject={() => setError('Unsupported file format')}\n/>"
2845
+ ],
2846
+ "sourceFile": "components/New/FileDropzone/FileDropzone.tsx"
2847
+ },
2848
+ {
2849
+ "name": "Tag",
2850
+ "category": "Components_2_0",
2851
+ "generation": "2.0",
2852
+ "description": "A compact label element used for selections, filters, or categories.\naliases: Chip|Pill\nDesign system 2.0\n\nThe tag has one height — the 32px pill of the 2.0 design. There is no `size`\nprop: a tag sizes itself, and a caller that needs a different height is\nusually reaching for a button.\n\nThe label truncates rather than wrapping, and carries a native `title` so the\nfull text stays reachable when it does.\n\nA tag with `onClick` becomes a `role=\"button\"` operable with Enter and Space.\nIts remove control is a real nested `<button>`, so keep the two roles apart in\nthe caller: a clickable tag that is also closable gives a screen reader two\nactions with no way to tell which one it landed on.\n\nNo tag draws a rim; the two appearances are told apart by their fill.\n`TagAppearance.Selectable` is the filter chip of the 2.0 design: no fill\nat all until it is selected, one hover tint shared by both states, a semibold\nlabel once selected, and the state carried on `aria-pressed` rather than by\nthe tint alone. Give it an `onClick` — a selectable tag that cannot be\nactivated is a colour and nothing else.\n\nSelecting one therefore changes its width by the difference between the\nregular and semibold label. In a wrapping filter row that is what the design\nasks for; if a fixed width matters, give the chip one.",
2853
+ "props": [
2854
+ {
2855
+ "name": "label",
2856
+ "type": "string",
2857
+ "required": true,
2858
+ "description": "Text content displayed inside the tag."
2859
+ },
2860
+ {
2861
+ "name": "icon",
2862
+ "type": "ReactNode",
2863
+ "required": false,
2864
+ "description": "Icon rendered before the label."
2865
+ },
2866
+ {
2867
+ "name": "appearance",
2868
+ "type": "TagAppearance",
2869
+ "required": false,
2870
+ "defaultValue": "TagAppearance.Outlined",
2871
+ "description": "`outlined` is the filled chip on the raised\nlayer; `selectable` is the unfilled filter chip that tints and turns semibold when selected."
2872
+ },
2873
+ {
2874
+ "name": "selected",
2875
+ "type": "boolean",
2876
+ "required": false,
2877
+ "defaultValue": "false",
2878
+ "description": "Applies the accent-tinted selected styling."
2879
+ },
2880
+ {
2881
+ "name": "disabled",
2882
+ "type": "boolean",
2883
+ "required": false,
2884
+ "defaultValue": "false",
2885
+ "description": "Stops the tag responding: no click handling, no remove control. The design defines no disabled tag, so the colours stay put."
2886
+ },
2887
+ {
2888
+ "name": "closable",
2889
+ "type": "boolean",
2890
+ "required": false,
2891
+ "defaultValue": "false",
2892
+ "description": "Renders the remove button. Needs `onRemove` to appear."
2893
+ },
2894
+ {
2895
+ "name": "removeLabel",
2896
+ "type": "string",
2897
+ "required": false,
2898
+ "description": "Accessible name of the remove button; defaults to `Remove <label>`."
2899
+ },
2900
+ {
2901
+ "name": "onRemove",
2902
+ "type": "(event: MouseEvent<HTMLButtonElement>) => void",
2903
+ "required": false,
2904
+ "description": "Called when the remove button is clicked. The click does not bubble to `onClick`."
2905
+ }
2906
+ ],
2907
+ "examples": [
2908
+ "<Tag label=\"TypeScript\" />\n<Tag label=\"TypeScript\" closable onRemove={() => remove('TypeScript')} />\n<Tag label=\"Drafts\" selected onClick={() => toggle('Drafts')} />\n<Tag\n label=\"Drafts\"\n appearance={TagAppearance.Selectable}\n selected={isSelected}\n onClick={() => toggle('Drafts')}\n/>"
2909
+ ],
2910
+ "sourceFile": "components/New/Tag/Tag.tsx"
2911
+ },
2912
+ {
2913
+ "name": "TagInput",
2914
+ "category": "Components_2_0",
2915
+ "generation": "2.0",
2916
+ "description": "A tag input field: type a value and commit it with Enter or comma.\naliases: MultiTag|TagField|ChipInput\nDesign system 2.0\n\nThe field is an , so it carries the 2.0 field styling, sizes,\nlabel, caption and error states, and the tags render as s in its\ncontent slot. The field grows as tags wrap, unless `collapseTagOverflow` keeps\nthem on one line behind a `+N` chip.\n\nWorks controlled (`value` + `onChange`) or uncontrolled (`defaultValue`).\nDuplicate tags are ignored. Backspace on an empty input removes the last tag.",
2917
+ "props": [
2918
+ {
2919
+ "name": "id",
2920
+ "type": "string",
2921
+ "required": false,
2922
+ "description": "The id of the text input, linked to the label."
2923
+ },
2924
+ {
2925
+ "name": "value",
2926
+ "type": "string[]",
2927
+ "required": false,
2928
+ "description": "Controlled tag list."
2929
+ },
2930
+ {
2931
+ "name": "defaultValue",
2932
+ "type": "string[]",
2933
+ "required": false,
2934
+ "description": "Initial tag list when uncontrolled."
2935
+ },
2936
+ {
2937
+ "name": "size",
2938
+ "type": "ElementSize",
2939
+ "required": false,
2940
+ "defaultValue": "ElementSize.Standard",
2941
+ "description": "Field height: standard is 40px, small is 24px."
2942
+ },
2943
+ {
2944
+ "name": "labelProps",
2945
+ "type": "LabelProps",
2946
+ "required": false,
2947
+ "description": "Props of the rendered above the field."
2948
+ },
2949
+ {
2950
+ "name": "placeholder",
2951
+ "type": "string",
2952
+ "required": false,
2953
+ "description": "Placeholder shown while there are no tags."
2954
+ },
2955
+ {
2956
+ "name": "caption",
2957
+ "type": "string",
2958
+ "required": false,
2959
+ "description": "Helper text rendered below the field when there is no `error`."
2960
+ },
2961
+ {
2962
+ "name": "error",
2963
+ "type": "string",
2964
+ "required": false,
2965
+ "description": "Error message rendered below the field (pass `invalid` too for error styling)."
2966
+ },
2967
+ {
2968
+ "name": "invalid",
2969
+ "type": "boolean",
2970
+ "required": false,
2971
+ "description": "Applies the field's error styling."
2972
+ },
2973
+ {
2974
+ "name": "disabled",
2975
+ "type": "boolean",
2976
+ "required": false,
2977
+ "defaultValue": "false",
2978
+ "description": "Disables typing and tag removal."
2979
+ },
2980
+ {
2981
+ "name": "readOnly",
2982
+ "type": "boolean",
2983
+ "required": false,
2984
+ "defaultValue": "false",
2985
+ "description": "Shows the tags without allowing new ones or removal."
2986
+ },
2987
+ {
2988
+ "name": "collapseTagOverflow",
2989
+ "type": "boolean",
2990
+ "required": false,
2991
+ "defaultValue": "false",
2992
+ "description": "Keep the tags on one line, replacing the ones that do not fit with a `+N` chip."
2993
+ },
2994
+ {
2995
+ "name": "ariaLabel",
2996
+ "type": "string",
2997
+ "required": false,
2998
+ "description": "Accessible name for the text input; use it when there is no visible label."
2999
+ },
3000
+ {
3001
+ "name": "tagListLabel",
3002
+ "type": "string",
3003
+ "required": false,
3004
+ "defaultValue": "'Tags'",
3005
+ "description": "Accessible name of the tag list."
3006
+ },
3007
+ {
3008
+ "name": "className",
3009
+ "type": "string",
3010
+ "required": false,
3011
+ "description": "Additional CSS classes for the outer container."
3012
+ },
3013
+ {
3014
+ "name": "fieldClassName",
3015
+ "type": "string",
3016
+ "required": false,
3017
+ "description": "Additional CSS classes for the field itself."
3018
+ },
3019
+ {
3020
+ "name": "tagClassName",
3021
+ "type": "string",
3022
+ "required": false,
3023
+ "description": "Additional CSS classes applied to every tag."
3024
+ },
3025
+ {
3026
+ "name": "onChange",
3027
+ "type": "(tags: string[]) => void",
3028
+ "required": false,
3029
+ "description": "Called with the new list whenever a tag is added or removed."
3030
+ }
3031
+ ],
3032
+ "examples": [
3033
+ "const [tags, setTags] = useState<string[]>(['React']);\n\n<TagInput\n id=\"skills\"\n labelProps={{ label: 'Skills' }}\n placeholder=\"Add a skill\"\n caption=\"Press Enter or comma to add\"\n value={tags}\n onChange={setTags}\n/>"
3034
+ ],
3035
+ "sourceFile": "components/New/TagInput/TagInput.tsx"
3036
+ },
3037
+ {
3038
+ "name": "Search",
3039
+ "category": "Components_2_0",
3040
+ "generation": "2.0",
3041
+ "description": "A search field with a leading magnifier and a clear button, built on .\naliases: SearchField|QueryInput|SearchBox\nDesign system 2.0\n\nFully controlled: it renders exactly the `value` it is given and reports every\nedit through `onChange`, which receives `undefined` for an empty field. The\nclear button appears only while there is something to clear, and returns focus\nto the input once pressed so keyboard users are not dropped to the page body.\n\n`type` and both icon slots are owned by this component; every other\n prop is passed through.",
3042
+ "props": [
3043
+ {
3044
+ "name": "withoutBorder",
3045
+ "type": "boolean",
3046
+ "required": false,
3047
+ "defaultValue": "false",
3048
+ "description": "Renders the field without its border and background"
3049
+ },
3050
+ {
3051
+ "name": "clearLabel",
3052
+ "type": "string",
3053
+ "required": false,
3054
+ "defaultValue": "'Clear search'",
3055
+ "description": "Accessible name of the clear button"
3056
+ }
3057
+ ],
3058
+ "examples": [
3059
+ "<Search\n id=\"search\"\n value={query}\n placeholder=\"Search\"\n onChange={setQuery}\n/>"
3060
+ ],
3061
+ "sourceFile": "components/New/Search/Search.tsx"
3062
+ },
3063
+ {
3064
+ "name": "Slider",
3065
+ "category": "Components_2_0",
3066
+ "generation": "2.0",
3067
+ "description": "A range slider from the 2.0 design system.\naliases: RangeInput|TemperatureSlider|RangeSlider\nDesign system 2.0",
3068
+ "props": [
3069
+ {
3070
+ "name": "value",
3071
+ "type": "number",
3072
+ "required": true,
3073
+ "description": "Current slider value"
3074
+ },
3075
+ {
3076
+ "name": "min",
3077
+ "type": "number",
3078
+ "required": false,
3079
+ "defaultValue": "0",
3080
+ "description": "Minimum value"
3081
+ },
3082
+ {
3083
+ "name": "max",
3084
+ "type": "number",
3085
+ "required": false,
3086
+ "defaultValue": "1",
3087
+ "description": "Maximum value"
3088
+ },
3089
+ {
3090
+ "name": "step",
3091
+ "type": "number",
3092
+ "required": false,
3093
+ "defaultValue": "0.1",
3094
+ "description": "Step increment"
3095
+ },
3096
+ {
3097
+ "name": "disabled",
3098
+ "type": "boolean",
3099
+ "required": false,
3100
+ "description": "Whether the slider is disabled"
3101
+ },
3102
+ {
3103
+ "name": "labelProps",
3104
+ "type": "LabelProps",
3105
+ "required": false,
3106
+ "description": "Props of the rendered above the track"
3107
+ },
3108
+ {
3109
+ "name": "labels",
3110
+ "type": "[string, string] | [string, string, string]",
3111
+ "required": false,
3112
+ "description": "2 or 3 strings rendered below the track (start, [middle,] end)"
3113
+ },
3114
+ {
3115
+ "name": "formatValue",
3116
+ "type": "(value: number) => string",
3117
+ "required": false,
3118
+ "description": "Custom formatter for the displayed value; also becomes the announced `aria-valuetext`"
3119
+ },
3120
+ {
3121
+ "name": "showValue",
3122
+ "type": "boolean",
3123
+ "required": false,
3124
+ "defaultValue": "false",
3125
+ "description": "Renders the current value at the end of the label row"
3126
+ },
3127
+ {
3128
+ "name": "caption",
3129
+ "type": "string",
3130
+ "required": false,
3131
+ "description": "Helper text rendered below the track, and described by the slider"
3132
+ },
3133
+ {
3134
+ "name": "error",
3135
+ "type": "string",
3136
+ "required": false,
3137
+ "description": "Error message rendered below the track; replaces the caption"
3138
+ },
3139
+ {
3140
+ "name": "onChange",
3141
+ "type": "(value: number) => void",
3142
+ "required": false,
3143
+ "description": "Callback fired with the new value"
3144
+ },
3145
+ {
3146
+ "name": "containerClassName",
3147
+ "type": "string",
3148
+ "required": false,
3149
+ "description": "Additional classes for the outer container"
3150
+ },
3151
+ {
3152
+ "name": "trackClassName",
3153
+ "type": "string",
3154
+ "required": false,
3155
+ "description": "Additional classes for the unfilled track"
3156
+ },
3157
+ {
3158
+ "name": "fillClassName",
3159
+ "type": "string",
3160
+ "required": false,
3161
+ "description": "Additional classes for the filled portion of the track"
3162
+ }
3163
+ ],
3164
+ "examples": [
3165
+ "<Slider\n id=\"temperature\"\n labelProps={{ label: 'Temperature' }}\n value={temperature}\n labels={['Precise', 'Neutral', 'Creative']}\n onChange={setTemperature}\n/>"
3166
+ ],
3167
+ "sourceFile": "components/New/Slider/Slider.tsx"
3168
+ },
3169
+ {
3170
+ "name": "Tooltip",
3171
+ "category": "Components_2_0",
3172
+ "generation": "2.0",
3173
+ "description": "Shows a short explanation next to an element while it is hovered or focused.\naliases: HoverPopover|InfoPopover\nDesign system 2.0\n\nThe tooltip is placed on one of the four sides of the trigger and follows it\non scroll, flipping to the opposite side when it would not fit.\n\nTooltip text does not reach assistive technology unless the trigger itself\ncarries it: pass `asChild` so the `aria-describedby` lands on the control\nrather than on a wrapper `<span>`, and never let a tooltip be the only\naccessible name of a control — it renders nothing on mobile screens.",
3174
+ "props": [
3175
+ {
3176
+ "name": "hideTooltip",
3177
+ "type": "boolean",
3178
+ "required": false,
3179
+ "defaultValue": "false",
3180
+ "description": "Suppress the tooltip while keeping the trigger rendered"
3181
+ },
3182
+ {
3183
+ "name": "tooltip",
3184
+ "type": "ReactNode",
3185
+ "required": false,
3186
+ "description": "The content to display in the tooltip"
3187
+ },
3188
+ {
3189
+ "name": "children",
3190
+ "type": "ReactNode",
3191
+ "required": true,
3192
+ "description": "The element that triggers the tooltip"
3193
+ },
3194
+ {
3195
+ "name": "asChild",
3196
+ "type": "boolean",
3197
+ "required": false,
3198
+ "defaultValue": "false",
3199
+ "description": "Use the child as the trigger instead of wrapping it in a `<span>`"
3200
+ },
3201
+ {
3202
+ "name": "triggerClassName",
3203
+ "type": "string",
3204
+ "required": false,
3205
+ "description": "Additional CSS classes for the trigger element"
3206
+ },
3207
+ {
3208
+ "name": "contentClassName",
3209
+ "type": "string",
3210
+ "required": false,
3211
+ "description": "Additional CSS classes for the tooltip bubble"
3212
+ }
3213
+ ],
3214
+ "examples": [
3215
+ "<Tooltip tooltip=\"Tooltip text\" placement={TooltipPlacement.Top} asChild>\n <button>Hover me</button>\n</Tooltip>"
3216
+ ],
3217
+ "sourceFile": "components/New/Tooltip/Tooltip.tsx"
3218
+ },
3219
+ {
3220
+ "name": "TooltipContainer",
3221
+ "category": "Components_2_0",
3222
+ "generation": "2.0",
3223
+ "description": "Provides tooltip positioning and open state to a trigger and a content pair.\naliases: TooltipProvider|TooltipRoot\nDesign system 2.0\n\nUse it directly only when the trigger and the content cannot be rendered by\n`Tooltip` itself — for example when the content needs custom markup.",
3224
+ "props": [],
3225
+ "examples": [
3226
+ "<TooltipContainer placement={TooltipPlacement.Top}>\n <TooltipTrigger asChild>\n <button>Hover me</button>\n </TooltipTrigger>\n <TooltipContent>Tooltip text</TooltipContent>\n</TooltipContainer>"
3227
+ ],
3228
+ "sourceFile": "components/New/Tooltip/TooltipContainer.tsx"
3229
+ },
3230
+ {
3231
+ "name": "TooltipContent",
3232
+ "category": "Components_2_0",
3233
+ "generation": "2.0",
3234
+ "description": "The floating bubble that carries the tooltip text.\nDesign system 2.0\n\nRendered in a portal, above popups and dropdowns, with an arrow pointing back\nat the trigger. Renders nothing on a mobile screen, where there is no hover\nto reveal it — so a control must never depend on a tooltip alone to be\nunderstood, or to have an accessible name.",
3235
+ "props": [
3236
+ {
3237
+ "name": "style",
3238
+ "type": "CSSProperties",
3239
+ "required": false,
3240
+ "description": "Additional inline styles for the tooltip bubble"
3241
+ }
3242
+ ],
3243
+ "examples": [],
3244
+ "sourceFile": "components/New/Tooltip/TooltipContent.tsx"
3245
+ },
3246
+ {
3247
+ "name": "TooltipTrigger",
3248
+ "category": "Components_2_0",
3249
+ "generation": "2.0",
3250
+ "description": "The element a tooltip is anchored to and opened from.\nDesign system 2.0\n\nPrefer `asChild` whenever the trigger is a single element: it puts the\n`aria-describedby` that names the tooltip on the control itself instead of on\na wrapper `<span>`, which is the only way the tooltip text reaches assistive\ntechnology.",
3251
+ "props": [
3252
+ {
3253
+ "name": "asChild",
3254
+ "type": "boolean",
3255
+ "required": false,
3256
+ "defaultValue": "false",
3257
+ "description": "Render the child as the trigger instead of wrapping it in a `<span>`"
3258
+ }
3259
+ ],
3260
+ "examples": [],
3261
+ "sourceFile": "components/New/Tooltip/TooltipTrigger.tsx"
3262
+ },
3263
+ {
3264
+ "name": "EllipsisTooltip",
3265
+ "category": "Components_2_0",
3266
+ "generation": "2.0",
3267
+ "description": "Single-line text with a CSS ellipsis that reveals the full string in a\ntooltip **only when it is actually clipped**.\naliases: TruncatedText|TruncationTooltip\nDesign system 2.0\n\nText that fits gets no tooltip at all, so a row of labels does not sprout\ntooltips that repeat what is already on screen.\n\nThe width has to be finite for anything to truncate: the element is a\n`min-w-0`, `flex-1` block, and `className` sets the width it should fit into.\n\na11y: while truncated, the full string is exposed as the element's\n`aria-label`, so a screen reader reads the whole label even though the\ntooltip itself renders nothing on mobile screens.",
3268
+ "props": [
3269
+ {
3270
+ "name": "text",
3271
+ "type": "ReactNode",
3272
+ "required": true,
3273
+ "description": "The text or node to display, truncated with an ellipsis when it does not fit"
3274
+ },
3275
+ {
3276
+ "name": "className",
3277
+ "type": "string",
3278
+ "required": false,
3279
+ "description": "Additional CSS classes for the text element, typically its width"
3280
+ },
3281
+ {
3282
+ "name": "contentClassName",
3283
+ "type": "string",
3284
+ "required": false,
3285
+ "description": "Additional CSS classes for the tooltip bubble"
3286
+ },
3287
+ {
3288
+ "name": "hideTooltip",
3289
+ "type": "boolean",
3290
+ "required": false,
3291
+ "defaultValue": "false",
3292
+ "description": "Suppress the tooltip even while the text is truncated"
3293
+ },
3294
+ {
3295
+ "name": "id",
3296
+ "type": "string",
3297
+ "required": false,
3298
+ "description": "`id` of the text element"
3299
+ },
3300
+ {
3301
+ "name": "customTooltipContent",
3302
+ "type": "ReactNode",
3303
+ "required": false,
3304
+ "description": "Shown instead of the full text while truncated"
3305
+ }
3306
+ ],
3307
+ "examples": [
3308
+ "<EllipsisTooltip text=\"Very long message that will be truncated\" />\n\n<EllipsisTooltip\n text={<span className=\"dial-small-semi-text\">Custom node</span>}\n className=\"max-w-[160px]\"\n/>\n\n<EllipsisTooltip text=\"Tooltip suppressed even when clipped\" hideTooltip />"
3309
+ ],
3310
+ "sourceFile": "components/New/EllipsisTooltip/EllipsisTooltip.tsx"
3311
+ },
3312
+ {
3313
+ "name": "CollapsibleSidebar",
3314
+ "category": "Components_2_0",
3315
+ "generation": "2.0",
3316
+ "description": "A side panel that collapses to a narrow rail carrying its title vertically.\naliases: ToggleSidebar|CollapsiblePanel|SidePanel\nDesign system 2.0\n\nWorks as a controlled component when `isOpened` is provided, otherwise it keeps\nits own state from `defaultOpened`. The width is derived from the open state, so\nchanging `width` on an open sidebar takes effect immediately.\n\nThe panel is an `aside` named by `ariaLabel`, and the toggle is a real\n`aria-expanded` control pointing at the content region. Content stays mounted\nwhile collapsed — hidden with `display: none` — so scroll position and any\nform state inside it survive a collapse.\n\nThe container paints no background and no radius: it is meant to sit on the\nsurface it belongs to. Pass `className` for either.",
3317
+ "props": [
3318
+ {
3319
+ "name": "children",
3320
+ "type": "ReactNode",
3321
+ "required": true,
3322
+ "description": "Content shown while the sidebar is expanded."
3323
+ },
3324
+ {
3325
+ "name": "title",
3326
+ "type": "ReactNode",
3327
+ "required": true,
3328
+ "description": "Name of the panel, rendered as vertical text while collapsed."
3329
+ },
3330
+ {
3331
+ "name": "width",
3332
+ "type": "number",
3333
+ "required": false,
3334
+ "defaultValue": "280",
3335
+ "description": "Width in px while expanded."
3336
+ },
3337
+ {
3338
+ "name": "collapsedWidth",
3339
+ "type": "number",
3340
+ "required": false,
3341
+ "defaultValue": "COLLAPSED_WIDTH",
3342
+ "description": "Width in px while collapsed."
3343
+ },
3344
+ {
3345
+ "name": "isOpened",
3346
+ "type": "boolean",
3347
+ "required": false,
3348
+ "description": "Controlled open state."
3349
+ },
3350
+ {
3351
+ "name": "defaultOpened",
3352
+ "type": "boolean",
3353
+ "required": false,
3354
+ "defaultValue": "true",
3355
+ "description": "Initial open state when uncontrolled."
3356
+ },
3357
+ {
3358
+ "name": "onToggle",
3359
+ "type": "(nextOpened: boolean, e: MouseEvent<HTMLButtonElement>) => void",
3360
+ "required": false,
3361
+ "description": "Fired when the toggle is clicked. Receives the next open state."
3362
+ },
3363
+ {
3364
+ "name": "additionalButtons",
3365
+ "type": "ReactNode",
3366
+ "required": false,
3367
+ "description": "Extra footer controls, rendered while expanded."
3368
+ },
3369
+ {
3370
+ "name": "ariaLabel",
3371
+ "type": "string",
3372
+ "required": false,
3373
+ "defaultValue": "'Sidebar'",
3374
+ "description": "Accessible name of the sidebar region."
3375
+ },
3376
+ {
3377
+ "name": "collapseLabel",
3378
+ "type": "string",
3379
+ "required": false,
3380
+ "defaultValue": "'Collapse sidebar'",
3381
+ "description": "Name and tooltip of the toggle while expanded."
3382
+ },
3383
+ {
3384
+ "name": "expandLabel",
3385
+ "type": "string",
3386
+ "required": false,
3387
+ "defaultValue": "'Expand sidebar'",
3388
+ "description": "Name and tooltip of the toggle while collapsed."
3389
+ },
3390
+ {
3391
+ "name": "className",
3392
+ "type": "string",
3393
+ "required": false,
3394
+ "description": "Additional CSS classes for the outer container."
3395
+ },
3396
+ {
3397
+ "name": "titleClassName",
3398
+ "type": "string",
3399
+ "required": false,
3400
+ "description": "Additional CSS classes for the vertical title."
3401
+ },
3402
+ {
3403
+ "name": "contentClassName",
3404
+ "type": "string",
3405
+ "required": false,
3406
+ "description": "Additional CSS classes for the content region."
3407
+ },
3408
+ {
3409
+ "name": "footerClassName",
3410
+ "type": "string",
3411
+ "required": false,
3412
+ "description": "Additional CSS classes for the footer."
3413
+ }
3414
+ ],
3415
+ "examples": [
3416
+ "<CollapsibleSidebar title=\"Filters\" width={320}>\n <FilterForm />\n</CollapsibleSidebar>\n\n<CollapsibleSidebar\n title=\"Filters\"\n isOpened={opened}\n onToggle={setOpened}\n>\n <FilterForm />\n</CollapsibleSidebar>"
3417
+ ],
3418
+ "sourceFile": "components/New/CollapsibleSidebar/CollapsibleSidebar.tsx"
3419
+ },
3420
+ {
3421
+ "name": "ResizableContainer",
3422
+ "category": "Components_2_0",
3423
+ "generation": "2.0",
3424
+ "description": "A panel the user can widen or narrow by dragging its edge.\naliases: ResizePanel|SizableContainer|Splitter\nDesign system 2.0\n\nWorks as a controlled component when `width` is provided, otherwise it keeps\nits own width from `defaultWidth`. The handle appears on hover and while\ndragging, and stays within `minWidth`–`maxWidth` in both modes.\n\nThe handle is a focusable `separator`, so the panel resizes with the arrow\nkeys — `Home` and `End` jump to the bounds — and each press reports through\n`onResize` and `onResizeStop`. Unlike the 1.0 container this one draws no\ndividers between its children; pass `divide-y divide-tertiary` through\n`className` if you want them.",
3425
+ "props": [
3426
+ {
3427
+ "name": "children",
3428
+ "type": "ReactNode",
3429
+ "required": true,
3430
+ "description": "Content placed inside the container."
3431
+ },
3432
+ {
3433
+ "name": "minWidth",
3434
+ "type": "number",
3435
+ "required": true,
3436
+ "description": "Minimum allowed width in px."
3437
+ },
3438
+ {
3439
+ "name": "maxWidth",
3440
+ "type": "number",
3441
+ "required": true,
3442
+ "description": "Maximum allowed width in px."
3443
+ },
3444
+ {
3445
+ "name": "width",
3446
+ "type": "number",
3447
+ "required": false,
3448
+ "description": "Controlled width. If omitted the container is uncontrolled."
3449
+ },
3450
+ {
3451
+ "name": "defaultWidth",
3452
+ "type": "number",
3453
+ "required": false,
3454
+ "description": "Initial width when uncontrolled. Defaults to `minWidth`."
3455
+ },
3456
+ {
3457
+ "name": "onResizeStop",
3458
+ "type": "(width: number) => void",
3459
+ "required": false,
3460
+ "description": "Fired when a resize ends, and once per arrow key press."
3461
+ },
3462
+ {
3463
+ "name": "onResize",
3464
+ "type": "(width: number) => void",
3465
+ "required": false,
3466
+ "description": "Fired continuously while dragging."
3467
+ },
3468
+ {
3469
+ "name": "side",
3470
+ "type": "ResizableContainerSide",
3471
+ "required": false,
3472
+ "defaultValue": "ResizableContainerSide.Right",
3473
+ "description": "Edge carrying the resize handle."
3474
+ },
3475
+ {
3476
+ "name": "keyboardStep",
3477
+ "type": "number",
3478
+ "required": false,
3479
+ "defaultValue": "DEFAULT_KEYBOARD_STEP",
3480
+ "description": "Width change per arrow key press."
3481
+ },
3482
+ {
3483
+ "name": "ariaLabel",
3484
+ "type": "string",
3485
+ "required": false,
3486
+ "defaultValue": "'Resize panel'",
3487
+ "description": "Accessible name of the handle."
3488
+ },
3489
+ {
3490
+ "name": "className",
3491
+ "type": "string",
3492
+ "required": false,
3493
+ "description": "Additional CSS classes for the inner content wrapper."
3494
+ },
3495
+ {
3496
+ "name": "resizeHandlerClassName",
3497
+ "type": "string",
3498
+ "required": false,
3499
+ "description": "Additional CSS classes for the resize handle."
3500
+ },
3501
+ {
3502
+ "name": "resizeHandler",
3503
+ "type": "ReactNode",
3504
+ "required": false,
3505
+ "description": "Custom node rendered inside the handle."
3506
+ }
3507
+ ],
3508
+ "examples": [
3509
+ "<ResizableContainer minWidth={180} maxWidth={520} defaultWidth={260}>\n <Sidebar />\n</ResizableContainer>\n\n<ResizableContainer\n minWidth={180}\n maxWidth={520}\n width={sidebarWidth}\n onResizeStop={setSidebarWidth}\n>\n <Sidebar />\n</ResizableContainer>"
3510
+ ],
3511
+ "sourceFile": "components/New/ResizableContainer/ResizableContainer.tsx"
3512
+ },
3513
+ {
3514
+ "name": "ConditionalResizableContainer",
3515
+ "category": "Components_2_0",
3516
+ "generation": "2.0",
3517
+ "description": "Renders its children inside a only while `enabled`.\naliases: OptionalResize|ConditionalPanel\nDesign system 2.0\n\nWhen `enabled` is false the children are rendered on their own, with no\nwrapper element and no resize behaviour — useful for a panel that is only\nresizable while it is expanded. Every other prop is passed straight through;\nsee for controlled and uncontrolled sizing, sides\nand callbacks.",
3518
+ "props": [
3519
+ {
3520
+ "name": "enabled",
3521
+ "type": "boolean",
3522
+ "required": false,
3523
+ "defaultValue": "true",
3524
+ "description": "Whether resizing is enabled."
3525
+ }
3526
+ ],
3527
+ "examples": [
3528
+ "<ConditionalResizableContainer\n enabled={isExpanded}\n minWidth={180}\n maxWidth={520}\n defaultWidth={260}\n>\n <Sidebar />\n</ConditionalResizableContainer>"
3529
+ ],
3530
+ "sourceFile": "components/New/ResizableContainer/ConditionalResizableContainer.tsx"
3531
+ },
3532
+ {
3533
+ "name": "NoDataContent",
3534
+ "category": "Components_2_0",
3535
+ "generation": "2.0",
3536
+ "description": "Message shown in place of a list, table or grid that has nothing to show.\naliases: EmptyState|NoResults|ZeroState\nDesign system 2.0\n\nFills its container and centres an illustration, a headline and an optional\nsecondary line. The icon is decorative, so it is hidden from assistive tech\nand the text carries the message on its own.",
3537
+ "props": [
3538
+ {
3539
+ "name": "title",
3540
+ "type": "ReactNode",
3541
+ "required": true,
3542
+ "description": "Headline of the empty state."
3543
+ },
3544
+ {
3545
+ "name": "description",
3546
+ "type": "ReactNode",
3547
+ "required": false,
3548
+ "description": "Optional secondary line under the title."
3549
+ },
3550
+ {
3551
+ "name": "icon",
3552
+ "type": "ReactNode",
3553
+ "required": false,
3554
+ "description": "Illustration above the title. Defaults to a struck-through clipboard."
3555
+ },
3556
+ {
3557
+ "name": "live",
3558
+ "type": "boolean",
3559
+ "required": false,
3560
+ "defaultValue": "false",
3561
+ "description": "Announce the empty state to assistive tech as it appears."
3562
+ },
3563
+ {
3564
+ "name": "className",
3565
+ "type": "string",
3566
+ "required": false,
3567
+ "description": "Additional CSS classes for the container."
3568
+ },
3569
+ {
3570
+ "name": "titleClassName",
3571
+ "type": "string",
3572
+ "required": false,
3573
+ "description": "Additional CSS classes for the title."
3574
+ },
3575
+ {
3576
+ "name": "descriptionClassName",
3577
+ "type": "string",
3578
+ "required": false,
3579
+ "description": "Additional CSS classes for the description."
3580
+ }
3581
+ ],
3582
+ "examples": [
3583
+ "<NoDataContent\n title=\"No results found\"\n description=\"Try a different search term.\"\n/>\n\n<NoDataContent title=\"Nothing here yet\" icon={<IconInbox size={60} />} live />"
3584
+ ],
3585
+ "sourceFile": "components/New/NoDataContent/NoDataContent.tsx"
3586
+ },
3587
+ {
3588
+ "name": "Grid",
3589
+ "category": "Components_2_0",
3590
+ "generation": "2.0",
3591
+ "description": "A data grid built on ag-Grid, wired to the 2.0 tokens and controls.\naliases: DataTable|TableGrid|DataGrid\nDesign system 2.0\n\nComes preconfigured with case-insensitive sorting, floating column filters,\ncolumns sized to the available width, a row context menu, truncation\ntooltips, and an empty state.\n\nThe selection column renders the 2.0 `Checkbox` and `Radio` instead of\nag-Grid's own inputs, so selection looks and behaves like every other control\nin the kit and the select-all reaches the `mixed` state when the selection is\npartial. The column stays faded out until the row is hovered, something is\nselected, or the keyboard reaches it.\n\nSelection works controlled or uncontrolled: pass `selectedRowIds` to own it,\nor read `onSelectionChange` and let the grid keep its own. A `sort` declared\non a column is honoured — 1.0 stripped it on startup.",
3592
+ "props": [
3593
+ {
3594
+ "name": "columnDefs",
3595
+ "type": "ColDef<T>[]",
3596
+ "required": false,
3597
+ "description": "Column definitions, in ag-Grid `ColDef` format."
3598
+ },
3599
+ {
3600
+ "name": "rowData",
3601
+ "type": "T[]",
3602
+ "required": false,
3603
+ "description": "Rows to display."
3604
+ },
3605
+ {
3606
+ "name": "additionalGridOptions",
3607
+ "type": "GridOptions<T>",
3608
+ "required": false,
3609
+ "description": "Extra ag-Grid options, merged over the defaults."
3610
+ },
3611
+ {
3612
+ "name": "getContextMenuItems",
3613
+ "type": "(row: T) => DropdownItem[]",
3614
+ "required": false,
3615
+ "description": "Items of the row context menu. Omit for no menu."
3616
+ },
3617
+ {
3618
+ "name": "className",
3619
+ "type": "string",
3620
+ "required": false,
3621
+ "description": "Additional CSS classes for the grid container."
3622
+ },
3623
+ {
3624
+ "name": "ariaLabel",
3625
+ "type": "string",
3626
+ "required": false,
3627
+ "defaultValue": "'Data grid'",
3628
+ "description": "Accessible name of the grid region."
3629
+ },
3630
+ {
3631
+ "name": "wrapCustomCellRenderers",
3632
+ "type": "boolean | ((col: ColDef<T>) => boolean)",
3633
+ "required": false,
3634
+ "defaultValue": "true",
3635
+ "description": "Whether custom renderers get context-menu support."
3636
+ },
3637
+ {
3638
+ "name": "disabledRowIds",
3639
+ "type": "Set<string>",
3640
+ "required": false,
3641
+ "description": "Rows that cannot be selected."
3642
+ },
3643
+ {
3644
+ "name": "selectedRowIds",
3645
+ "type": "Set<string>",
2310
3646
  "required": false,
2311
- "description": "The id of the text input, linked to the label."
3647
+ "description": "Controlled selection: ids of the selected rows."
2312
3648
  },
2313
3649
  {
2314
- "name": "value",
2315
- "type": "string[]",
3650
+ "name": "onGridApiChange",
3651
+ "type": "(api: GridApi<T>) => void",
2316
3652
  "required": false,
2317
- "description": "Controlled tag list."
3653
+ "description": "Fired when the grid API becomes available."
2318
3654
  },
2319
3655
  {
2320
- "name": "defaultValue",
2321
- "type": "string[]",
3656
+ "name": "onSelectionChange",
3657
+ "type": "(selectedRowIds: Set<string>, selectedRows: T[]) => void",
2322
3658
  "required": false,
2323
- "description": "Initial tag list when uncontrolled."
3659
+ "description": "Fired when the selection changes."
2324
3660
  },
2325
3661
  {
2326
- "name": "size",
2327
- "type": "ElementSize",
3662
+ "name": "getRowId",
3663
+ "type": "(row: T) => string",
2328
3664
  "required": false,
2329
- "defaultValue": "ElementSize.Standard",
2330
- "description": "Field height: standard is 40px, small is 24px."
3665
+ "description": "Extracts the unique id of a row. Defaults to its `id` field."
2331
3666
  },
2332
3667
  {
2333
- "name": "labelProps",
2334
- "type": "LabelProps",
3668
+ "name": "alternateOddRowColors",
3669
+ "type": "boolean",
2335
3670
  "required": false,
2336
- "description": "Props of the rendered above the field."
3671
+ "defaultValue": "false",
3672
+ "description": "Tints odd rows."
2337
3673
  },
2338
3674
  {
2339
- "name": "placeholder",
3675
+ "name": "filterPlaceholder",
2340
3676
  "type": "string",
2341
3677
  "required": false,
2342
- "description": "Placeholder shown while there are no tags."
3678
+ "defaultValue": "'Enter value'",
3679
+ "description": "Placeholder of the column filter inputs."
2343
3680
  },
2344
3681
  {
2345
- "name": "caption",
2346
- "type": "string",
3682
+ "name": "emptyStateIcon",
3683
+ "type": "ReactNode",
2347
3684
  "required": false,
2348
- "description": "Helper text rendered below the field when there is no `error`."
3685
+ "description": "Illustration of the empty state."
2349
3686
  },
2350
3687
  {
2351
- "name": "error",
3688
+ "name": "emptyStateTitle",
2352
3689
  "type": "string",
2353
3690
  "required": false,
2354
- "description": "Error message rendered below the field (pass `invalid` too for error styling)."
3691
+ "defaultValue": "'No results found'",
3692
+ "description": "Headline of the empty state."
2355
3693
  },
2356
3694
  {
2357
- "name": "invalid",
2358
- "type": "boolean",
3695
+ "name": "emptyStateDescription",
3696
+ "type": "string",
2359
3697
  "required": false,
2360
- "description": "Applies the field's error styling."
3698
+ "defaultValue": "\"Sorry, we couldn't find any results for your search.\"",
3699
+ "description": "Secondary line of the empty state."
2361
3700
  },
2362
3701
  {
2363
- "name": "disabled",
3702
+ "name": "loading",
2364
3703
  "type": "boolean",
2365
3704
  "required": false,
2366
3705
  "defaultValue": "false",
2367
- "description": "Disables typing and tag removal."
3706
+ "description": "Shows the loading overlay."
2368
3707
  },
2369
3708
  {
2370
- "name": "readOnly",
3709
+ "name": "wrapperBorder",
2371
3710
  "type": "boolean",
2372
3711
  "required": false,
2373
- "defaultValue": "false",
2374
- "description": "Shows the tags without allowing new ones or removal."
3712
+ "defaultValue": "true",
3713
+ "description": "Draws a border around the grid."
2375
3714
  },
2376
3715
  {
2377
- "name": "collapseTagOverflow",
3716
+ "name": "withoutHeaderBorders",
2378
3717
  "type": "boolean",
2379
3718
  "required": false,
2380
3719
  "defaultValue": "false",
2381
- "description": "Keep the tags on one line, replacing the ones that do not fit with a `+N` chip."
2382
- },
2383
- {
2384
- "name": "ariaLabel",
2385
- "type": "string",
2386
- "required": false,
2387
- "description": "Accessible name for the text input; use it when there is no visible label."
3720
+ "description": "Hides the vertical borders between header cells."
2388
3721
  },
2389
3722
  {
2390
- "name": "tagListLabel",
2391
- "type": "string",
3723
+ "name": "selectionMode",
3724
+ "type": "GridSelectionMode",
2392
3725
  "required": false,
2393
- "defaultValue": "'Tags'",
2394
- "description": "Accessible name of the tag list."
3726
+ "description": "Renders a selection column of checkboxes or radios."
2395
3727
  },
2396
3728
  {
2397
- "name": "className",
2398
- "type": "string",
3729
+ "name": "allowDisabledContextMenu",
3730
+ "type": "boolean",
2399
3731
  "required": false,
2400
- "description": "Additional CSS classes for the outer container."
3732
+ "defaultValue": "false",
3733
+ "description": "Keeps the context menu on a non-selectable row."
2401
3734
  },
2402
3735
  {
2403
- "name": "fieldClassName",
2404
- "type": "string",
3736
+ "name": "selectRowLabel",
3737
+ "type": "(row: T) => string",
2405
3738
  "required": false,
2406
- "description": "Additional CSS classes for the field itself."
3739
+ "description": "Accessible name of a row's selection control."
2407
3740
  },
2408
3741
  {
2409
- "name": "tagClassName",
3742
+ "name": "selectAllLabel",
2410
3743
  "type": "string",
2411
3744
  "required": false,
2412
- "description": "Additional CSS classes applied to every tag."
2413
- },
2414
- {
2415
- "name": "onChange",
2416
- "type": "(tags: string[]) => void",
2417
- "required": false,
2418
- "description": "Called with the new list whenever a tag is added or removed."
3745
+ "defaultValue": "'Select all rows'",
3746
+ "description": "Accessible name of the select-all control."
2419
3747
  }
2420
3748
  ],
2421
3749
  "examples": [
2422
- "const [tags, setTags] = useState<string[]>(['React']);\n\n<TagInput\n id=\"skills\"\n labelProps={{ label: 'Skills' }}\n placeholder=\"Add a skill\"\n caption=\"Press Enter or comma to add\"\n value={tags}\n onChange={setTags}\n/>"
3750
+ "interface Product { id: string; name: string; price: number }\n\nconst columns: ColDef<Product>[] = [\n { field: 'name', headerName: 'Product', flex: 1 },\n { field: 'price', headerName: 'Price', width: 120 },\n];\n\n<Grid<Product> columnDefs={columns} rowData={products} />\n\n// With selection and a context menu\n<Grid<Product>\n columnDefs={columns}\n rowData={products}\n selectionMode={GridSelectionMode.MULTIPLE}\n selectedRowIds={selectedIds}\n onSelectionChange={(ids) => setSelectedIds(ids)}\n selectRowLabel={(row) => `Select ${row.name}`}\n getContextMenuItems={(row) => [{ key: 'edit', label: 'Edit' }]}\n/>"
2423
3751
  ],
2424
- "sourceFile": "components/New/TagInput/TagInput.tsx"
3752
+ "sourceFile": "components/New/Grid/Grid.tsx"
2425
3753
  },
2426
3754
  {
2427
- "name": "Search",
2428
- "category": "Components_2_0",
3755
+ "name": "DateCellRenderer",
3756
+ "category": "Components_2_0/Grid",
2429
3757
  "generation": "2.0",
2430
- "description": "A search field with a leading magnifier and a clear button, built on .\naliases: SearchField|QueryInput|SearchBox\nDesign system 2.0\n\nFully controlled: it renders exactly the `value` it is given and reports every\nedit through `onChange`, which receives `undefined` for an empty field. The\nclear button appears only while there is something to clear, and returns focus\nto the input once pressed so keyboard users are not dropped to the page body.\n\n`type` and both icon slots are owned by this component; every other\n prop is passed through.",
3758
+ "description": "Date cell for the 2.0 , usable as an ag-Grid `cellRenderer`.\naliases: DateCell|TimestampCell\nDesign system 2.0\n\nFormats the value with `Intl.DateTimeFormat` and wraps it in a\n, so the full string is only offered when the column is\ntoo narrow to show it. A valid date is rendered inside a `<time datetime>`,\nwhich gives assistive tech and crawlers the machine-readable value next to\nthe localised one.",
2431
3759
  "props": [
2432
3760
  {
2433
- "name": "withoutBorder",
2434
- "type": "boolean",
3761
+ "name": "value",
3762
+ "type": "DateValue | null",
2435
3763
  "required": false,
2436
- "defaultValue": "false",
2437
- "description": "Renders the field without its border and background"
3764
+ "description": "The date to render."
2438
3765
  },
2439
3766
  {
2440
- "name": "clearLabel",
3767
+ "name": "locale",
2441
3768
  "type": "string",
2442
3769
  "required": false,
2443
- "defaultValue": "'Clear search'",
2444
- "description": "Accessible name of the clear button"
3770
+ "defaultValue": "DEFAULT_LOCALE",
3771
+ "description": "Locale used for formatting."
3772
+ },
3773
+ {
3774
+ "name": "options",
3775
+ "type": "Intl.DateTimeFormatOptions",
3776
+ "required": false,
3777
+ "defaultValue": "DEFAULT_DATE_FORMAT_OPTIONS",
3778
+ "description": "`Intl.DateTimeFormat` options, e.g. `timeZone`."
3779
+ },
3780
+ {
3781
+ "name": "emptyPlaceholder",
3782
+ "type": "string",
3783
+ "required": false,
3784
+ "description": "Rendered when the value carries no usable date."
3785
+ },
3786
+ {
3787
+ "name": "className",
3788
+ "type": "string",
3789
+ "required": false,
3790
+ "description": "Additional CSS classes for the cell."
3791
+ },
3792
+ {
3793
+ "name": "hideTooltip",
3794
+ "type": "boolean",
3795
+ "required": false,
3796
+ "defaultValue": "false",
3797
+ "description": "Suppresses the truncation tooltip."
2445
3798
  }
2446
3799
  ],
2447
3800
  "examples": [
2448
- "<Search\n id=\"search\"\n value={query}\n placeholder=\"Search\"\n onChange={setQuery}\n/>"
3801
+ "// As a column renderer\n{ field: 'createdAt', cellRenderer: DateCellRenderer,\n cellRendererParams: { options: { timeZone: 'UTC' } } }\n\n// Directly\n<DateCellRenderer value=\"2025-07-20T00:00:00Z\" options={{ timeZone: 'UTC' }} />\n<DateCellRenderer value={1752969600000} /> // epoch milliseconds"
2449
3802
  ],
2450
- "sourceFile": "components/New/Search/Search.tsx"
3803
+ "sourceFile": "components/New/Grid/renderers/DateCellRenderer.tsx"
2451
3804
  },
2452
3805
  {
2453
3806
  "name": "DialCaptionText",
@@ -3200,7 +4553,8 @@
3200
4553
  "examples": [
3201
4554
  "<DialCheckbox\n id=\"checkbox\"\n label=\"Dial Checkbox\"\n checked={true}\n disabled={false}\n onChange={(value) => console.log(value)}\n/>"
3202
4555
  ],
3203
- "sourceFile": "components/Checkbox/Checkbox.tsx"
4556
+ "sourceFile": "components/Checkbox/Checkbox.tsx",
4557
+ "supersededBy": "Checkbox"
3204
4558
  },
3205
4559
  {
3206
4560
  "name": "DialSteps",
@@ -3448,7 +4802,8 @@
3448
4802
  "examples": [
3449
4803
  "<DialRadioGroup\n fieldTitle=\"Delivery\"\n elementId=\"delivery\"\n orientation={RadioGroupOrientation.Column}\n activeRadioButton=\"courier\"\n radioButtons={[\n { id: 'pickup', name: 'Pickup', content: <span>Free, ready today</span> },\n { id: 'courier', name: 'Courier', content: <span>Arrives tomorrow</span> },\n ]}\n onChange={(id) => console.log('selected', id)}\n/>"
3450
4804
  ],
3451
- "sourceFile": "components/RadioGroup/RadioGroup.tsx"
4805
+ "sourceFile": "components/RadioGroup/RadioGroup.tsx",
4806
+ "supersededBy": "RadioGroup"
3452
4807
  },
3453
4808
  {
3454
4809
  "name": "DialSlider",
@@ -3542,7 +4897,8 @@
3542
4897
  "examples": [
3543
4898
  "<DialSlider\n value={0.5}\n min={0}\n max={1}\n step={0.1}\n labels={['Precise', 'Neutral', 'Creative']}\n aria-label=\"Temperature\"\n onChange={(v) => console.log(v)}\n/>"
3544
4899
  ],
3545
- "sourceFile": "components/Slider/Slider.tsx"
4900
+ "sourceFile": "components/Slider/Slider.tsx",
4901
+ "supersededBy": "Slider"
3546
4902
  },
3547
4903
  {
3548
4904
  "name": "DialNoDataContent",
@@ -3590,7 +4946,8 @@
3590
4946
  "examples": [
3591
4947
  "<NoDataContent\n emptyDataTitle=\"No results found\"\n icon={<CustomIcon />}\n/>"
3592
4948
  ],
3593
- "sourceFile": "components/NoDataContent/NoDataContent.tsx"
4949
+ "sourceFile": "components/NoDataContent/NoDataContent.tsx",
4950
+ "supersededBy": "NoDataContent"
3594
4951
  },
3595
4952
  {
3596
4953
  "name": "DialCollapsibleSidebar",
@@ -3665,7 +5022,8 @@
3665
5022
  "examples": [
3666
5023
  "<DialCollapsibleSidebar\n width={300}\n title=\"Menu\"\n titleClassName=\"text-primary font-bold\"\n containerClassName=\"bg-gray-100 shadow-md\"\n iconSize={24}\n additionalButtons={<button>Extra</button>}\n>\n <div>Content goes here</div>\n</DialCollapsibleSidebar>"
3667
5024
  ],
3668
- "sourceFile": "components/CollapsibleSidebar/CollapsibleSidebar.tsx"
5025
+ "sourceFile": "components/CollapsibleSidebar/CollapsibleSidebar.tsx",
5026
+ "supersededBy": "CollapsibleSidebar"
3669
5027
  },
3670
5028
  {
3671
5029
  "name": "DialLabelledText",
@@ -3807,7 +5165,8 @@
3807
5165
  "examples": [
3808
5166
  "<DialEllipsisTooltip text=\"Very long message that will be truncated\" />\n<DialEllipsisTooltip text={<span className=\"font-medium\">Custom node</span>} className=\"max-w-[160px]\" />\n<DialEllipsisTooltip text=\"Tooltip disabled even if truncated\" hideTooltip />"
3809
5167
  ],
3810
- "sourceFile": "components/EllipsisTooltip/EllipsisTooltip.tsx"
5168
+ "sourceFile": "components/EllipsisTooltip/EllipsisTooltip.tsx",
5169
+ "supersededBy": "EllipsisTooltip"
3811
5170
  },
3812
5171
  {
3813
5172
  "name": "DialDraggableItem",
@@ -4259,7 +5618,8 @@
4259
5618
  }
4260
5619
  ],
4261
5620
  "examples": [],
4262
- "sourceFile": "components/ResizableContainer/ResizableContainer.tsx"
5621
+ "sourceFile": "components/ResizableContainer/ResizableContainer.tsx",
5622
+ "supersededBy": "ResizableContainer"
4263
5623
  },
4264
5624
  {
4265
5625
  "name": "DialConditionalResizableContainer",
@@ -4278,7 +5638,8 @@
4278
5638
  "examples": [
4279
5639
  "<DialConditionalResizableContainer\n enabled={!isCollapsed}\n defaultWidth={260}\n minWidth={180}\n maxWidth={520}\n onResize={(w) => console.log('Current width:', w)}\n onResizeStop={(w) => setSidebarWidth(w)}\n>\n <Sidebar />\n</DialConditionalResizableContainer>"
4280
5640
  ],
4281
- "sourceFile": "components/ResizableContainer/ConditionalResizableContainer.tsx"
5641
+ "sourceFile": "components/ResizableContainer/ConditionalResizableContainer.tsx",
5642
+ "supersededBy": "ConditionalResizableContainer"
4282
5643
  },
4283
5644
  {
4284
5645
  "name": "DialGrid",
@@ -4433,7 +5794,8 @@
4433
5794
  "examples": [
4434
5795
  "// Basic usage with data\ninterface Product {\n id: string;\n name: string;\n price: number;\n}\n\nconst columns: ColDef<Product>[] = [\n { field: 'name', headerName: 'Product Name', flex: 1 },\n { field: 'price', headerName: 'Price', width: 120 },\n];\n\n<DialGrid<Product>\n columnDefs={columns}\n rowData={products}\n/>\n\n// With loading state\n<DialGrid<Product>\n columnDefs={columns}\n rowData={products}\n loading={true}\n/>\n\n// With context menu\nconst getContextMenu = (row: Product): DropdownItem[] => [\n { key: 'edit', label: 'Edit' },\n { key: 'delete', label: 'Delete', danger: true },\n];\n\n<DialGrid<Product>\n columnDefs={columns}\n rowData={products}\n getContextMenuItems={getContextMenu}\n/>\n\n// Controlled selection\nconst [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());\n\n<DialGrid<Product>\n columnDefs={columns}\n rowData={products}\n selectedRowIds={selectedIds}\n onSelectionChange={(ids, rows) => {\n setSelectedIds(ids);\n console.log('Selected:', rows);\n }}\n/>"
4435
5796
  ],
4436
- "sourceFile": "components/Grid/Grid.tsx"
5797
+ "sourceFile": "components/Grid/Grid.tsx",
5798
+ "supersededBy": "Grid"
4437
5799
  },
4438
5800
  {
4439
5801
  "name": "DialDateCellRenderer",
@@ -4482,7 +5844,8 @@
4482
5844
  "examples": [
4483
5845
  "// ag-Grid colDef\n{ field: 'createdAt', cellRenderer: DateCellRenderer, cellRendererParams: { options: { timeZone: 'UTC' } } }\n\n// Direct usage\n<DateCellRenderer value=\"2025-07-20T00:00:00Z\" options={{ timeZone: 'UTC' }} />\n<DateCellRenderer value={1752969600000} options={{ timeZone: 'UTC' }} /> // milliseconds"
4484
5846
  ],
4485
- "sourceFile": "components/Grid/renderers/DateCellRenderer.tsx"
5847
+ "sourceFile": "components/Grid/renderers/DateCellRenderer.tsx",
5848
+ "supersededBy": "DateCellRenderer"
4486
5849
  },
4487
5850
  {
4488
5851
  "name": "DialTabs",
@@ -5106,7 +6469,8 @@
5106
6469
  "examples": [
5107
6470
  "<DialTooltip tooltip=\"This is helpful information\">\n <button>Hover me</button>\n</DialTooltip>"
5108
6471
  ],
5109
- "sourceFile": "components/Tooltip/Tooltip.tsx"
6472
+ "sourceFile": "components/Tooltip/Tooltip.tsx",
6473
+ "supersededBy": "Tooltip"
5110
6474
  },
5111
6475
  {
5112
6476
  "name": "DialTooltipContainer",
@@ -5115,7 +6479,8 @@
5115
6479
  "description": "The container component that provides tooltip context and state management\nDesign system 1.0",
5116
6480
  "props": [],
5117
6481
  "examples": [],
5118
- "sourceFile": "components/Tooltip/TooltipContainer.tsx"
6482
+ "sourceFile": "components/Tooltip/TooltipContainer.tsx",
6483
+ "supersededBy": "TooltipContainer"
5119
6484
  },
5120
6485
  {
5121
6486
  "name": "DialTooltipContent",
@@ -5124,7 +6489,8 @@
5124
6489
  "description": "The content area of a tooltip that displays the tooltip information\nDesign system 1.0",
5125
6490
  "props": [],
5126
6491
  "examples": [],
5127
- "sourceFile": "components/Tooltip/TooltipContent.tsx"
6492
+ "sourceFile": "components/Tooltip/TooltipContent.tsx",
6493
+ "supersededBy": "TooltipContent"
5128
6494
  },
5129
6495
  {
5130
6496
  "name": "DialTooltipTrigger",
@@ -5133,7 +6499,8 @@
5133
6499
  "description": "The trigger element for a tooltip that can be clicked or hovered\nDesign system 1.0",
5134
6500
  "props": [],
5135
6501
  "examples": [],
5136
- "sourceFile": "components/Tooltip/TooltipTrigger.tsx"
6502
+ "sourceFile": "components/Tooltip/TooltipTrigger.tsx",
6503
+ "supersededBy": "TooltipTrigger"
5137
6504
  },
5138
6505
  {
5139
6506
  "name": "DialSwitch",
@@ -5230,7 +6597,8 @@
5230
6597
  "examples": [
5231
6598
  "<DialSegmentedControl\n ariaLabel=\"View\"\n value={view}\n onChange={setView}\n options={[\n { value: 'list', label: 'List' },\n { value: 'grid', label: 'Grid' },\n ]}\n/>"
5232
6599
  ],
5233
- "sourceFile": "components/SegmentedControl/SegmentedControl.tsx"
6600
+ "sourceFile": "components/SegmentedControl/SegmentedControl.tsx",
6601
+ "supersededBy": "SegmentedControl"
5234
6602
  },
5235
6603
  {
5236
6604
  "name": "DialPopup",
@@ -5441,7 +6809,8 @@
5441
6809
  "examples": [
5442
6810
  "<DialRadioGroupPopupField\n fieldTitle=\"Status\"\n htmlFor=\"status\"\n header=\"Select status\"\n emptyValueText=\"None\"\n radioButtons={[\n { id: 'draft', name: 'Draft' },\n { id: 'review', name: 'In Review' },\n { id: 'published', name: 'Published' },\n ]}\n selectedValue=\"draft\"\n selectedRadioValue=\"draft\"\n onChangeRadioField={(id) => console.log('radio changed', id)}\n id=\"status-group\"\n isValid={true}\n onApply={() => console.log('applied')}\n/>"
5443
6811
  ],
5444
- "sourceFile": "components/RadioGroupPopupField/RadioGroupPopupField.tsx"
6812
+ "sourceFile": "components/RadioGroupPopupField/RadioGroupPopupField.tsx",
6813
+ "supersededBy": "RadioGroupPopupField"
5445
6814
  },
5446
6815
  {
5447
6816
  "name": "DialFormPopup",
@@ -8167,6 +9536,14 @@
8167
9536
  "name": "danger?",
8168
9537
  "value": "boolean"
8169
9538
  },
9539
+ {
9540
+ "name": "selectable?",
9541
+ "value": "boolean"
9542
+ },
9543
+ {
9544
+ "name": "checked?",
9545
+ "value": "boolean"
9546
+ },
8170
9547
  {
8171
9548
  "name": "type?",
8172
9549
  "value": "DropdownItemType"
@@ -8685,6 +10062,10 @@
8685
10062
  {
8686
10063
  "name": "Loading",
8687
10064
  "value": "'loading'"
10065
+ },
10066
+ {
10067
+ "name": "General",
10068
+ "value": "'general'"
8688
10069
  }
8689
10070
  ],
8690
10071
  "sourceFile": "types/notification.ts"
@@ -8733,6 +10114,64 @@
8733
10114
  "sourceFile": "components/New/Calendar/Calendar.tsx",
8734
10115
  "typeBody": "Date | string | null"
8735
10116
  },
10117
+ {
10118
+ "name": "RadioGroupItem",
10119
+ "kind": "interface",
10120
+ "members": [
10121
+ {
10122
+ "name": "value",
10123
+ "value": "string"
10124
+ },
10125
+ {
10126
+ "name": "label?",
10127
+ "value": "ReactNode"
10128
+ },
10129
+ {
10130
+ "name": "caption?",
10131
+ "value": "string"
10132
+ },
10133
+ {
10134
+ "name": "content?",
10135
+ "value": "ReactNode"
10136
+ },
10137
+ {
10138
+ "name": "disabled?",
10139
+ "value": "boolean"
10140
+ },
10141
+ {
10142
+ "name": "'aria-label'?",
10143
+ "value": "string"
10144
+ }
10145
+ ],
10146
+ "sourceFile": "components/New/RadioGroup/RadioGroup.tsx"
10147
+ },
10148
+ {
10149
+ "name": "SegmentedControlItem",
10150
+ "kind": "interface",
10151
+ "members": [
10152
+ {
10153
+ "name": "value",
10154
+ "value": "T"
10155
+ },
10156
+ {
10157
+ "name": "label?",
10158
+ "value": "ReactNode"
10159
+ },
10160
+ {
10161
+ "name": "icon?",
10162
+ "value": "ReactNode"
10163
+ },
10164
+ {
10165
+ "name": "disabled?",
10166
+ "value": "boolean"
10167
+ },
10168
+ {
10169
+ "name": "'aria-label'?",
10170
+ "value": "string"
10171
+ }
10172
+ ],
10173
+ "sourceFile": "components/New/SegmentedControl/SegmentedControl.tsx"
10174
+ },
8736
10175
  {
8737
10176
  "name": "TabItem",
8738
10177
  "kind": "interface",
@@ -8756,6 +10195,71 @@
8756
10195
  ],
8757
10196
  "sourceFile": "components/New/Tabs/Tabs.tsx",
8758
10197
  "description": "A single tab entry rendered by ."
10198
+ },
10199
+ {
10200
+ "name": "TagAppearance",
10201
+ "kind": "enum",
10202
+ "members": [
10203
+ {
10204
+ "name": "Outlined",
10205
+ "value": "'outlined'"
10206
+ },
10207
+ {
10208
+ "name": "Selectable",
10209
+ "value": "'selectable'"
10210
+ }
10211
+ ],
10212
+ "sourceFile": "types/tag.ts"
10213
+ },
10214
+ {
10215
+ "name": "TooltipContainerOptions",
10216
+ "kind": "interface",
10217
+ "members": [
10218
+ {
10219
+ "name": "initialOpen?",
10220
+ "value": "boolean"
10221
+ },
10222
+ {
10223
+ "name": "placement?",
10224
+ "value": "TooltipPlacement"
10225
+ },
10226
+ {
10227
+ "name": "isTriggerClickable?",
10228
+ "value": "boolean"
10229
+ },
10230
+ {
10231
+ "name": "open?",
10232
+ "value": "boolean"
10233
+ },
10234
+ {
10235
+ "name": "onOpenChange?",
10236
+ "value": "(open: boolean) => void"
10237
+ }
10238
+ ],
10239
+ "sourceFile": "components/New/Tooltip/TooltipContext.tsx"
10240
+ },
10241
+ {
10242
+ "name": "TooltipPlacement",
10243
+ "kind": "enum",
10244
+ "members": [
10245
+ {
10246
+ "name": "Top",
10247
+ "value": "'top'"
10248
+ },
10249
+ {
10250
+ "name": "Right",
10251
+ "value": "'right'"
10252
+ },
10253
+ {
10254
+ "name": "Bottom",
10255
+ "value": "'bottom'"
10256
+ },
10257
+ {
10258
+ "name": "Left",
10259
+ "value": "'left'"
10260
+ }
10261
+ ],
10262
+ "sourceFile": "types/tooltip.ts"
8759
10263
  }
8760
10264
  ],
8761
10265
  "hooks": [
@@ -8775,7 +10279,7 @@
8775
10279
  },
8776
10280
  {
8777
10281
  "name": "convertGridDateToDate",
8778
- "sourceFile": "components/Grid/renderers/utils.ts"
10282
+ "sourceFile": "utils/grid-date.ts"
8779
10283
  },
8780
10284
  {
8781
10285
  "name": "useDialFileManagerTabs",
@@ -8819,6 +10323,59 @@
8819
10323
  "sourceFile": "utils/file-accept.ts",
8820
10324
  "description": "Tests a file against the value of a native `accept` attribute.\n\nThe file picker filters by `accept` on its own, but a drop does not: dropping\na `.png` onto an input that accepts `.md` hands the file over regardless. Any\ndrop target therefore has to re-check what it received.\n\nSupports all three `accept` token forms — an extension (`.md`), a full MIME\ntype (`text/markdown`) and a MIME wildcard (`image/*`). An empty or missing\n`accept` accepts everything, matching the attribute's own semantics.",
8821
10325
  "signature": "(file: File, accept?: string) => boolean"
10326
+ },
10327
+ {
10328
+ "name": "GRID_SELECTION_COLUMN_ID",
10329
+ "sourceFile": "components/New/Grid/Grid.tsx",
10330
+ "description": "Column id of the selection column this component prepends itself.",
10331
+ "signature": "GRID_SELECTION_COLUMN_ID = 'dial-kit-grid-selection'"
10332
+ },
10333
+ {
10334
+ "name": "DEFAULT_DATE_FORMAT_OPTIONS",
10335
+ "sourceFile": "components/New/Grid/renderers/constants.ts",
10336
+ "signature": "DEFAULT_DATE_FORMAT_OPTIONS: Intl.DateTimeFormatOptions"
10337
+ },
10338
+ {
10339
+ "name": "DEFAULT_DATE_LOCALE",
10340
+ "sourceFile": "components/New/Grid/renderers/constants.ts"
10341
+ },
10342
+ {
10343
+ "name": "GRID_ALIGN_RIGHT_CLASS",
10344
+ "sourceFile": "components/New/Grid/constants.ts",
10345
+ "description": "Right-aligns a column. Applied by the consumer through `cellClass`.",
10346
+ "signature": "GRID_ALIGN_RIGHT_CLASS = 'dial-kit-grid-align-right'"
10347
+ },
10348
+ {
10349
+ "name": "GRID_ROOT_CLASS",
10350
+ "sourceFile": "components/New/Grid/constants.ts",
10351
+ "description": "Root class of the 2.0 grid; every rule in `styles/grid.scss` sits under it.",
10352
+ "signature": "GRID_ROOT_CLASS = 'dial-kit-grid'"
10353
+ },
10354
+ {
10355
+ "name": "GRID_THEME_PARAMS",
10356
+ "sourceFile": "components/New/Grid/constants.ts",
10357
+ "description": "ag-Grid theme parameters, resolved from the 2.0 colour tokens with the same\nliteral fallbacks the Tailwind config carries, so a consumer that defines no\nCSS variables still gets the intended palette.\n\nHover sits one step up the accent-alpha ramp from the selected tint, so a\nhovered selected row still reads as hovered — the same relationship the 2.0\ndropdown and select rows use.",
10358
+ "signature": "GRID_THEME_PARAMS = {\n accentColor: 'var(--bg-control-accent, #1D4ED8)',\n backgroundColor: 'var(--bg-layer-raised, #FCFCFC)',\n oddRowBackgroundColor: 'var(--bg-layer-sunken, #EEF1F7)',\n selectedRowBackgroundColor: 'var(--bg-control-accent-alpha, #2764D90F)',\n rowHoverColor: 'var(--bg-control-accent-alpha-hover, #2764D924)',\n borderColor: 'var(--stroke-tertiary, #E0E6F0)',\n rowBorder: '1px solid var(--stroke-tertiary, #E0E6F0)',\n chromeBackgroundColor: 'var(--bg-layer-base, #F5F7FA)',\n foregroundColor: 'var(--text-primary, #161B2D)',\n headerTextColor: 'var(--text-secondary, #57647A)',\n // 1.0 asked the browser for dark native widgets while painting a light\n // theme; the scheme now matches the palette it is used with.\n browserColorScheme: 'light',\n headerFontSize: 14,\n headerFontWeight: 600,\n fontSize: 14,\n fontFamily: 'var(--theme-font, var(--font-inter))',\n spacing: 4,\n borderRadius: 4,\n wrapperBorderRadius: 8,\n}"
10359
+ },
10360
+ {
10361
+ "name": "GRID_ROW_HEIGHT",
10362
+ "sourceFile": "components/New/Grid/constants.ts"
10363
+ },
10364
+ {
10365
+ "name": "convertToDate",
10366
+ "sourceFile": "utils/grid-date.ts",
10367
+ "description": "Normalises the value a date cell can receive into a `Date`, or `null` when it\ncarries no usable date. A pure integer string is read as epoch milliseconds,\nso a serialised timestamp behaves like the number it came from.",
10368
+ "signature": "(input?: DateValue | null) => Date | null"
10369
+ },
10370
+ {
10371
+ "name": "baseColumnComparator",
10372
+ "sourceFile": "utils/grid-comparators.ts",
10373
+ "signature": "(a: string | number | undefined, b: string | number | undefined, _nodeA?: IRowNode, _nodeB?: IRowNode, isInverted?: boolean) => number"
10374
+ },
10375
+ {
10376
+ "name": "checkColDefsChanges",
10377
+ "sourceFile": "utils/grid-comparators.ts",
10378
+ "signature": "(cols: ColDef[], initialCols: ColDef[]) => unknown"
8822
10379
  }
8823
10380
  ],
8824
10381
  "utils": [