@epam/ai-dial-ui-kit 0.14.0-dev.2 → 0.14.0-dev.22

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 (83) hide show
  1. package/README.md +7 -1
  2. package/dist/CHANGELOG.md +56 -1
  3. package/dist/{JsonEditor-DPtZkKQi.cjs → JsonEditor-CLmDZqJH.cjs} +1 -1
  4. package/dist/{JsonEditor-CM-CG-FK.js → JsonEditor-DdYGciSl.js} +1 -1
  5. package/dist/{MarkdownEditor-cdq8UZxL.js → MarkdownEditor-B9Bs3UUs.js} +1 -1
  6. package/dist/MarkdownEditor-DXdBLiV3.cjs +1 -0
  7. package/dist/{MarkdownEditor-D4WuEafx.cjs → MarkdownEditor-DlAqXKw_.cjs} +1 -1
  8. package/dist/MarkdownEditor-YU-phCxT.js +69 -0
  9. package/dist/components-manifest.json +1795 -202
  10. package/dist/dial-ui-kit.cjs.js +1 -1
  11. package/dist/dial-ui-kit.es.js +231 -195
  12. package/dist/{index-CBk9P1Pa.js → index-CpVGPv8D.js} +15116 -13323
  13. package/dist/{index-A_KNCHda.cjs → index-DBHH26fT.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 +139 -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 +26 -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 +61 -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 +77 -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/ThemeScope/ThemeScope.d.ts +46 -0
  63. package/dist/src/components/New/ToggleIconButton/ToggleIconButton.d.ts +47 -0
  64. package/dist/src/components/New/Tooltip/Tooltip.d.ts +43 -0
  65. package/dist/src/components/New/Tooltip/TooltipContainer.d.ts +32 -0
  66. package/dist/src/components/New/Tooltip/TooltipContent.d.ts +18 -0
  67. package/dist/src/components/New/Tooltip/TooltipContext.d.ts +115 -0
  68. package/dist/src/components/New/Tooltip/TooltipTrigger.d.ts +18 -0
  69. package/dist/src/components/New/Tooltip/constants.d.ts +30 -0
  70. package/dist/src/components/New/constants/icon.d.ts +22 -0
  71. package/dist/src/components/New/constants/overlay.d.ts +12 -3
  72. package/dist/src/index.d.ts +47 -1
  73. package/dist/src/models/dropdown.d.ts +10 -0
  74. package/dist/src/types/notification.d.ts +2 -1
  75. package/dist/src/types/tag.d.ts +4 -0
  76. package/dist/src/types/tooltip.d.ts +6 -0
  77. package/dist/src/utils/__tests__/element-size-observer.spec.d.ts +1 -0
  78. package/dist/src/utils/element-size-observer.d.ts +26 -0
  79. package/dist/src/utils/grid-comparators.d.ts +4 -0
  80. package/dist/src/utils/grid-date.d.ts +7 -0
  81. package/package.json +1 -1
  82. package/dist/MarkdownEditor-DRQoDnC-.js +0 -75
  83. package/dist/MarkdownEditor-DyIvPpmt.cjs +0 -1
@@ -1,6 +1,6 @@
1
1
  {
2
- "version": "0.14.0-dev.2",
3
- "generatedAt": "2026-08-21T12:07:18.186Z",
2
+ "version": "0.14.0-dev.22",
3
+ "generatedAt": "2026-09-02T19:03:41.496Z",
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-1` | `var(--shadow-xs-1)` | `#2764D933` |\n| `xs-2` | `var(--shadow-xs-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
  },
@@ -1932,6 +2016,30 @@
1932
2016
  ],
1933
2017
  "sourceFile": "components/New/Dropdown/Dropdown.tsx"
1934
2018
  },
2019
+ {
2020
+ "name": "ThemeScope",
2021
+ "category": "Components_2_0",
2022
+ "generation": "2.0",
2023
+ "description": "Marks a subtree as living under a host-defined token scope, so overlays this\nsubtree opens in a portal are painted with the same tokens.\nDesign system 2.0\n\nRedefining design tokens on a panel root re-themes everything the panel\nrenders — until a `Dropdown`, `Popup`, `Tooltip` or `Calendar` escapes into a\n`FloatingPortal` at the end of `<body>`, where the scope's custom properties\nno longer reach it. Wrapping the panel in a `ThemeScope` re-applies the same\nclass to those portalled overlays, so an overlay opened from a dark panel\nstays dark while the rest of the app keeps its own palette.\n\nThe wrapper itself is `display: contents`, so it generates no box and leaves\nthe surrounding flex or grid layout untouched — custom properties inherit\nthrough it all the same. Scopes nest: an inner scope's overlays carry the\nouter classes first, matching the cascade they would see in place.",
2024
+ "props": [
2025
+ {
2026
+ "name": "className",
2027
+ "type": "string",
2028
+ "required": true,
2029
+ "description": "Class name redefining the design tokens for this subtree"
2030
+ },
2031
+ {
2032
+ "name": "children",
2033
+ "type": "ReactNode",
2034
+ "required": true,
2035
+ "description": "The subtree painted with those tokens"
2036
+ }
2037
+ ],
2038
+ "examples": [
2039
+ "// .side-panel-theme redefines --bg-*, --text-* and --stroke-* tokens.\n<ThemeScope className=\"side-panel-theme\">\n <ConversationPanel {...props} />\n</ThemeScope>"
2040
+ ],
2041
+ "sourceFile": "components/New/ThemeScope/ThemeScope.tsx"
2042
+ },
1935
2043
  {
1936
2044
  "name": "CaptionText",
1937
2045
  "category": "Components_2_0",
@@ -2095,359 +2203,1628 @@
2095
2203
  "sourceFile": "components/New/Switch/Switch.tsx"
2096
2204
  },
2097
2205
  {
2098
- "name": "Tabs",
2206
+ "name": "Radio",
2099
2207
  "category": "Components_2_0",
2100
2208
  "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.",
2209
+ "description": "A radio button from the 2.0 design system.\naliases: RadioButton|ChoiceOption|RadioInput\nDesign system 2.0",
2102
2210
  "props": [
2103
2211
  {
2104
- "name": "tabs",
2105
- "type": "TabItem[]",
2212
+ "name": "name",
2213
+ "type": "string",
2106
2214
  "required": true,
2107
- "description": "Ordered list of tabs to render."
2215
+ "description": "The group this radio belongs to; radios sharing it are mutually exclusive"
2108
2216
  },
2109
2217
  {
2110
- "name": "activeTabId",
2218
+ "name": "value",
2111
2219
  "type": "string",
2112
2220
  "required": true,
2113
- "description": "ID of the currently selected tab."
2221
+ "description": "The value reported to `onChange` when this radio is selected"
2114
2222
  },
2115
2223
  {
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."
2224
+ "name": "labelProps",
2225
+ "type": "LabelProps",
2226
+ "required": false,
2227
+ "description": "Props of the rendered next to the control"
2120
2228
  },
2121
2229
  {
2122
- "name": "ariaLabel",
2123
- "type": "string",
2230
+ "name": "isSelected",
2231
+ "type": "boolean",
2124
2232
  "required": false,
2125
- "description": "Accessible name for the tab list."
2233
+ "defaultValue": "false",
2234
+ "description": "Whether this radio is the selected one of its group"
2126
2235
  },
2127
2236
  {
2128
- "name": "className",
2129
- "type": "string",
2237
+ "name": "disabled",
2238
+ "type": "boolean",
2130
2239
  "required": false,
2131
- "description": "Additional CSS classes for the tab list container."
2240
+ "description": "Whether the radio is disabled"
2132
2241
  },
2133
2242
  {
2134
- "name": "tabClassName",
2243
+ "name": "onChange",
2244
+ "type": "(value: string) => void",
2245
+ "required": false,
2246
+ "description": "Callback fired with `value` when this radio becomes selected"
2247
+ },
2248
+ {
2249
+ "name": "caption",
2135
2250
  "type": "string",
2136
2251
  "required": false,
2137
- "description": "Additional CSS classes applied to every tab."
2252
+ "description": "Caption text rendered below the label, and described by the radio"
2138
2253
  }
2139
2254
  ],
2140
2255
  "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/>"
2256
+ "<Radio\n name=\"plan\"\n value=\"pro\"\n labelProps={{ label: 'Pro' }}\n isSelected={plan === 'pro'}\n onChange={setPlan}\n/>"
2142
2257
  ],
2143
- "sourceFile": "components/New/Tabs/Tabs.tsx"
2258
+ "sourceFile": "components/New/Radio/Radio.tsx"
2144
2259
  },
2145
2260
  {
2146
- "name": "FileDropzone",
2261
+ "name": "RadioGroup",
2147
2262
  "category": "Components_2_0",
2148
2263
  "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.",
2264
+ "description": "A set of mutually exclusive options with one group label.\naliases: SelectionGroup|OptionGroup|RadioList\nDesign system 2.0",
2150
2265
  "props": [
2151
2266
  {
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",
2267
+ "name": "items",
2268
+ "type": "RadioGroupItem[]",
2160
2269
  "required": true,
2161
- "description": "Primary line of copy."
2270
+ "description": "Options to render; each needs a unique `value` and may carry a `label`, `caption`, `content` and `disabled` flag"
2162
2271
  },
2163
2272
  {
2164
- "name": "description",
2165
- "type": "ReactNode",
2273
+ "name": "value",
2274
+ "type": "string",
2166
2275
  "required": false,
2167
- "description": "Secondary line of copy."
2276
+ "description": "The `value` of the selected option"
2168
2277
  },
2169
2278
  {
2170
2279
  "name": "onChange",
2171
- "type": "(files: File[]) => void",
2280
+ "type": "(value: string) => void",
2172
2281
  "required": true,
2173
- "description": "Fired with the accepted files."
2282
+ "description": "Callback fired with the newly selected `value`"
2174
2283
  },
2175
2284
  {
2176
- "name": "onReject",
2177
- "type": "(files: File[]) => void",
2285
+ "name": "name",
2286
+ "type": "string",
2178
2287
  "required": false,
2179
- "description": "Fired with dropped files that `accept` excluded."
2288
+ "description": "The `name` shared by the underlying radios; defaults to the group id"
2180
2289
  },
2181
2290
  {
2182
- "name": "accept",
2291
+ "name": "id",
2183
2292
  "type": "string",
2184
2293
  "required": false,
2185
- "description": "Comma-separated `accept` tokens."
2294
+ "description": "Base id for the group; option ids are derived from it"
2186
2295
  },
2187
2296
  {
2188
- "name": "multiple",
2189
- "type": "boolean",
2297
+ "name": "orientation",
2298
+ "type": "RadioGroupOrientation",
2190
2299
  "required": false,
2191
- "defaultValue": "false",
2192
- "description": "Whether more than one file can be selected."
2300
+ "defaultValue": "RadioGroupOrientation.Column",
2301
+ "description": "Whether the options stack or sit in a row"
2302
+ },
2303
+ {
2304
+ "name": "labelProps",
2305
+ "type": "LabelProps",
2306
+ "required": false,
2307
+ "description": "Props of the rendered above the options"
2193
2308
  },
2194
2309
  {
2195
2310
  "name": "disabled",
2196
2311
  "type": "boolean",
2197
2312
  "required": false,
2198
- "defaultValue": "false",
2199
- "description": "Disables picking and dropping."
2313
+ "description": "Disables every option"
2200
2314
  },
2201
2315
  {
2202
- "name": "errorText",
2316
+ "name": "error",
2203
2317
  "type": "string",
2204
2318
  "required": false,
2205
- "description": "Error message rendered below the area."
2319
+ "description": "Error message rendered below the options"
2206
2320
  },
2207
2321
  {
2208
- "name": "icon",
2209
- "type": "ReactNode",
2322
+ "name": "caption",
2323
+ "type": "string",
2210
2324
  "required": false,
2211
- "description": "Icon rendered above the copy."
2325
+ "description": "Helper text rendered below the options when there is no `error`"
2212
2326
  },
2213
2327
  {
2214
- "name": "id",
2328
+ "name": "ariaLabel",
2215
2329
  "type": "string",
2216
2330
  "required": false,
2217
- "description": "`id` of the underlying file input."
2331
+ "description": "Names the group when there is no string `labelProps.label`"
2218
2332
  },
2219
2333
  {
2220
- "name": "ariaLabel",
2334
+ "name": "className",
2221
2335
  "type": "string",
2222
2336
  "required": false,
2223
- "description": "Accessible name; needed when `label` carries no text."
2337
+ "description": "Additional classes for the outer container"
2224
2338
  },
2225
2339
  {
2226
- "name": "className",
2340
+ "name": "optionsClassName",
2227
2341
  "type": "string",
2228
2342
  "required": false,
2229
- "description": "Additional CSS classes for the drop area."
2343
+ "description": "Additional classes for the options wrapper"
2344
+ },
2345
+ {
2346
+ "name": "radioClassName",
2347
+ "type": "string",
2348
+ "required": false,
2349
+ "description": "Additional classes for every option's control row"
2350
+ },
2351
+ {
2352
+ "name": "contentClassName",
2353
+ "type": "string",
2354
+ "required": false,
2355
+ "description": "Additional classes for the selected option's content"
2230
2356
  }
2231
2357
  ],
2232
2358
  "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/>"
2359
+ "<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
2360
  ],
2235
- "sourceFile": "components/New/FileDropzone/FileDropzone.tsx"
2361
+ "sourceFile": "components/New/RadioGroup/RadioGroup.tsx"
2236
2362
  },
2237
2363
  {
2238
- "name": "Tag",
2364
+ "name": "RadioGroupPopupField",
2239
2365
  "category": "Components_2_0",
2240
2366
  "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.",
2367
+ "description": "A field whose value is picked from a inside a .\naliases: PopupRadio|ChoicePopup|RadioPopupField\nDesign system 2.0",
2242
2368
  "props": [
2243
2369
  {
2244
- "name": "label",
2245
- "type": "string",
2370
+ "name": "items",
2371
+ "type": "RadioGroupItem[]",
2246
2372
  "required": true,
2247
- "description": "Text content displayed inside the tag."
2373
+ "description": "Options offered inside the popup"
2248
2374
  },
2249
2375
  {
2250
- "name": "icon",
2251
- "type": "ReactNode",
2376
+ "name": "value",
2377
+ "type": "string",
2252
2378
  "required": false,
2253
- "description": "Icon rendered before the label."
2379
+ "description": "The committed value, shown in the collapsed field"
2254
2380
  },
2255
2381
  {
2256
- "name": "size",
2257
- "type": "ElementSize",
2382
+ "name": "customValue",
2383
+ "type": "string",
2258
2384
  "required": false,
2259
- "defaultValue": "ElementSize.Standard",
2260
- "description": "Tag height: standard is 24px, small is 20px."
2385
+ "description": "Text shown in the field in place of the selected option's label"
2261
2386
  },
2262
2387
  {
2263
- "name": "selected",
2264
- "type": "boolean",
2388
+ "name": "header",
2389
+ "type": "ReactNode",
2390
+ "required": true,
2391
+ "description": "Title of the popup"
2392
+ },
2393
+ {
2394
+ "name": "onApply",
2395
+ "type": "(value?: string) => void",
2396
+ "required": true,
2397
+ "description": "Callback fired with the selected value when Apply is clicked"
2398
+ },
2399
+ {
2400
+ "name": "id",
2401
+ "type": "string",
2265
2402
  "required": false,
2266
- "defaultValue": "false",
2267
- "description": "Applies the accent-tinted selected styling."
2403
+ "description": "Base id for the field; the label and the options derive theirs from it"
2268
2404
  },
2269
2405
  {
2270
- "name": "disabled",
2271
- "type": "boolean",
2406
+ "name": "labelProps",
2407
+ "type": "LabelProps",
2272
2408
  "required": false,
2273
- "defaultValue": "false",
2274
- "description": "Dims the tag and suppresses the remove control and click handling."
2409
+ "description": "Props of the rendered above the field"
2275
2410
  },
2276
2411
  {
2277
- "name": "closable",
2278
- "type": "boolean",
2412
+ "name": "placeholder",
2413
+ "type": "string",
2279
2414
  "required": false,
2280
- "defaultValue": "false",
2281
- "description": "Renders the remove button. Needs `onRemove` to appear."
2415
+ "description": "Text shown in the field while no value is selected"
2282
2416
  },
2283
2417
  {
2284
- "name": "removeLabel",
2418
+ "name": "selectedValue",
2285
2419
  "type": "string",
2286
2420
  "required": false,
2287
- "description": "Accessible name of the remove button; defaults to `Remove <label>`."
2421
+ "description": "Controlled draft selection inside the popup"
2288
2422
  },
2289
2423
  {
2290
- "name": "onRemove",
2291
- "type": "(event: MouseEvent<HTMLButtonElement>) => void",
2424
+ "name": "onSelectionChange",
2425
+ "type": "(value: string) => void",
2292
2426
  "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": [
2427
+ "description": "Callback fired when the draft selection changes"
2428
+ },
2307
2429
  {
2308
- "name": "id",
2309
- "type": "string",
2430
+ "name": "onCancel",
2431
+ "type": "() => void",
2432
+ "required": false,
2433
+ "description": "Callback fired when Cancel is clicked, before the popup closes"
2434
+ },
2435
+ {
2436
+ "name": "onClose",
2437
+ "type": "() => void",
2438
+ "required": false,
2439
+ "description": "Callback fired whenever the popup closes"
2440
+ },
2441
+ {
2442
+ "name": "isValid",
2443
+ "type": "boolean",
2444
+ "required": false,
2445
+ "defaultValue": "true",
2446
+ "description": "Whether Apply is enabled"
2447
+ },
2448
+ {
2449
+ "name": "applyButtonLabel",
2450
+ "type": "string",
2451
+ "required": false,
2452
+ "defaultValue": "defaultApplyLabel",
2453
+ "description": "Label of the Apply button"
2454
+ },
2455
+ {
2456
+ "name": "cancelButtonLabel",
2457
+ "type": "string",
2458
+ "required": false,
2459
+ "defaultValue": "defaultCancelLabel",
2460
+ "description": "Label of the Cancel button"
2461
+ },
2462
+ {
2463
+ "name": "size",
2464
+ "type": "PopupSize",
2465
+ "required": false,
2466
+ "defaultValue": "PopupSize.Md",
2467
+ "description": "Size of the popup"
2468
+ },
2469
+ {
2470
+ "name": "portalId",
2471
+ "type": "string",
2472
+ "required": false,
2473
+ "description": "Portal container id for the popup"
2474
+ },
2475
+ {
2476
+ "name": "disabled",
2477
+ "type": "boolean",
2478
+ "required": false,
2479
+ "description": "Disables the field, so the popup cannot be opened"
2480
+ },
2481
+ {
2482
+ "name": "invalid",
2483
+ "type": "boolean",
2484
+ "required": false,
2485
+ "description": "Paints the field with the error border"
2486
+ },
2487
+ {
2488
+ "name": "error",
2489
+ "type": "string",
2490
+ "required": false,
2491
+ "description": "Error message rendered below the field"
2492
+ },
2493
+ {
2494
+ "name": "caption",
2495
+ "type": "string",
2496
+ "required": false,
2497
+ "description": "Helper text rendered below the field when there is no `error`"
2498
+ },
2499
+ {
2500
+ "name": "ariaLabel",
2501
+ "type": "string",
2502
+ "required": false,
2503
+ "description": "Names the field when there is no string `labelProps.label`"
2504
+ },
2505
+ {
2506
+ "name": "className",
2507
+ "type": "string",
2508
+ "required": false,
2509
+ "description": "Additional classes for the outer container"
2510
+ },
2511
+ {
2512
+ "name": "fieldClassName",
2513
+ "type": "string",
2514
+ "required": false,
2515
+ "description": "Additional classes for the collapsed field"
2516
+ }
2517
+ ],
2518
+ "examples": [
2519
+ "<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/>"
2520
+ ],
2521
+ "sourceFile": "components/New/RadioGroupPopupField/RadioGroupPopupField.tsx"
2522
+ },
2523
+ {
2524
+ "name": "Checkbox",
2525
+ "category": "Components_2_0",
2526
+ "generation": "2.0",
2527
+ "description": "A checkbox from the 2.0 design system.\naliases: ToggleCheckbox|MultiSelectOption|TriStateCheckbox\nDesign system 2.0",
2528
+ "props": [
2529
+ {
2530
+ "name": "labelProps",
2531
+ "type": "LabelProps",
2532
+ "required": false,
2533
+ "description": "Props of the rendered next to the control"
2534
+ },
2535
+ {
2536
+ "name": "isSelected",
2537
+ "type": "boolean",
2538
+ "required": false,
2539
+ "defaultValue": "false",
2540
+ "description": "The current value of the checkbox"
2541
+ },
2542
+ {
2543
+ "name": "isIndeterminate",
2544
+ "type": "boolean",
2545
+ "required": false,
2546
+ "defaultValue": "false",
2547
+ "description": "Whether the checkbox is in the mixed state"
2548
+ },
2549
+ {
2550
+ "name": "invalid",
2551
+ "type": "boolean",
2552
+ "required": false,
2553
+ "defaultValue": "false",
2554
+ "description": "Whether the checkbox failed validation (applies error styling)"
2555
+ },
2556
+ {
2557
+ "name": "disabled",
2558
+ "type": "boolean",
2559
+ "required": false,
2560
+ "description": "Whether the checkbox is disabled"
2561
+ },
2562
+ {
2563
+ "name": "onChange",
2564
+ "type": "(value: boolean) => void",
2565
+ "required": false,
2566
+ "description": "Callback fired with the new value when toggled"
2567
+ },
2568
+ {
2569
+ "name": "caption",
2570
+ "type": "string",
2571
+ "required": false,
2572
+ "description": "Caption text rendered below the label, and described by the checkbox"
2573
+ },
2574
+ {
2575
+ "name": "boxClassName",
2576
+ "type": "string",
2577
+ "required": false,
2578
+ "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."
2579
+ }
2580
+ ],
2581
+ "examples": [
2582
+ "<Checkbox\n labelProps={{ label: 'Accept terms' }}\n isSelected={accepted}\n onChange={setAccepted}\n/>"
2583
+ ],
2584
+ "sourceFile": "components/New/Checkbox/Checkbox.tsx"
2585
+ },
2586
+ {
2587
+ "name": "CheckboxBox",
2588
+ "category": "Components_2_0",
2589
+ "generation": "2.0",
2590
+ "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.",
2591
+ "props": [
2592
+ {
2593
+ "name": "isSelected",
2594
+ "type": "boolean",
2595
+ "required": false,
2596
+ "defaultValue": "false",
2597
+ "description": "Whether the box is filled with a check"
2598
+ },
2599
+ {
2600
+ "name": "isIndeterminate",
2601
+ "type": "boolean",
2602
+ "required": false,
2603
+ "defaultValue": "false",
2604
+ "description": "Whether the box is filled with a dash; takes precedence over `isSelected`"
2605
+ },
2606
+ {
2607
+ "name": "invalid",
2608
+ "type": "boolean",
2609
+ "required": false,
2610
+ "defaultValue": "false",
2611
+ "description": "Paints the box with the error colour"
2612
+ },
2613
+ {
2614
+ "name": "disabled",
2615
+ "type": "boolean",
2616
+ "required": false,
2617
+ "defaultValue": "false",
2618
+ "description": "Greys the box out"
2619
+ },
2620
+ {
2621
+ "name": "htmlFor",
2622
+ "type": "string",
2623
+ "required": false,
2624
+ "description": "Id of the input this box labels; omit for a decorative box"
2625
+ },
2626
+ {
2627
+ "name": "className",
2628
+ "type": "string",
2629
+ "required": false,
2630
+ "description": "Additional classes for the box"
2631
+ }
2632
+ ],
2633
+ "examples": [],
2634
+ "sourceFile": "components/New/Checkbox/CheckboxBox.tsx"
2635
+ },
2636
+ {
2637
+ "name": "ToggleIconButton",
2638
+ "category": "Components_2_0",
2639
+ "generation": "2.0",
2640
+ "description": "An icon button that stays pressed, for a setting the icon itself represents.\naliases: IconToggle|ToggleButton|BookmarkButton\nDesign system 2.0",
2641
+ "props": [
2642
+ {
2643
+ "name": "icon",
2644
+ "type": "ReactNode",
2645
+ "required": true,
2646
+ "description": "Icon shown while unselected; rendered at 16px"
2647
+ },
2648
+ {
2649
+ "name": "selectedIcon",
2650
+ "type": "ReactNode",
2651
+ "required": false,
2652
+ "description": "Icon shown while selected; falls back to `icon`"
2653
+ },
2654
+ {
2655
+ "name": "isSelected",
2656
+ "type": "boolean",
2657
+ "required": false,
2658
+ "defaultValue": "false",
2659
+ "description": "Whether the toggle is on"
2660
+ },
2661
+ {
2662
+ "name": "onToggle",
2663
+ "type": "(isSelected: boolean) => void",
2664
+ "required": false,
2665
+ "description": "Callback fired with the next value when clicked"
2666
+ },
2667
+ {
2668
+ "name": "tooltipProps",
2669
+ "type": "ToggleTooltipProps",
2670
+ "required": false,
2671
+ "description": "Props of the 2.0 wrapping the button"
2672
+ }
2673
+ ],
2674
+ "examples": [
2675
+ "<ToggleIconButton\n icon={<IconBookmark />}\n selectedIcon={<IconBookmarkFilled />}\n isSelected={isBookmarked}\n onToggle={setIsBookmarked}\n tooltipProps={{ tooltip: 'Bookmark' }}\n/>"
2676
+ ],
2677
+ "sourceFile": "components/New/ToggleIconButton/ToggleIconButton.tsx"
2678
+ },
2679
+ {
2680
+ "name": "SegmentedControl",
2681
+ "category": "Components_2_0",
2682
+ "generation": "2.0",
2683
+ "description": "A single-select switch between a few mutually exclusive, equally sized options.\naliases: SegmentedButton|ViewSwitcher|ButtonGroup\nDesign system 2.0",
2684
+ "props": [
2685
+ {
2686
+ "name": "items",
2687
+ "type": "SegmentedControlItem<T>[]",
2688
+ "required": true,
2689
+ "description": "Segments to render; each needs a unique `value` and may carry a `label`, `icon` and `disabled` flag"
2690
+ },
2691
+ {
2692
+ "name": "value",
2693
+ "type": "T",
2694
+ "required": true,
2695
+ "description": "The currently selected `value`"
2696
+ },
2697
+ {
2698
+ "name": "onChange",
2699
+ "type": "(value: T) => void",
2700
+ "required": true,
2701
+ "description": "Callback fired with the newly selected `value`"
2702
+ },
2703
+ {
2704
+ "name": "disabled",
2705
+ "type": "boolean",
2706
+ "required": false,
2707
+ "description": "Disables every segment"
2708
+ },
2709
+ {
2710
+ "name": "className",
2711
+ "type": "string",
2712
+ "required": false,
2713
+ "description": "Additional classes for the track"
2714
+ },
2715
+ {
2716
+ "name": "segmentClassName",
2717
+ "type": "string",
2718
+ "required": false,
2719
+ "description": "Additional classes for every segment"
2720
+ },
2721
+ {
2722
+ "name": "'aria-label'",
2723
+ "type": "string",
2724
+ "required": false
2725
+ }
2726
+ ],
2727
+ "examples": [
2728
+ "<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/>"
2729
+ ],
2730
+ "sourceFile": "components/New/SegmentedControl/SegmentedControl.tsx"
2731
+ },
2732
+ {
2733
+ "name": "Tabs",
2734
+ "category": "Components_2_0",
2735
+ "generation": "2.0",
2736
+ "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.",
2737
+ "props": [
2738
+ {
2739
+ "name": "tabs",
2740
+ "type": "TabItem[]",
2741
+ "required": true,
2742
+ "description": "Ordered list of tabs to render."
2743
+ },
2744
+ {
2745
+ "name": "activeTabId",
2746
+ "type": "string",
2747
+ "required": true,
2748
+ "description": "ID of the currently selected tab."
2749
+ },
2750
+ {
2751
+ "name": "onTabChange",
2752
+ "type": "(tabId: string) => void",
2753
+ "required": true,
2754
+ "description": "Fired with the tab's `id` when the user selects a tab."
2755
+ },
2756
+ {
2757
+ "name": "ariaLabel",
2758
+ "type": "string",
2759
+ "required": false,
2760
+ "description": "Accessible name for the tab list."
2761
+ },
2762
+ {
2763
+ "name": "className",
2764
+ "type": "string",
2765
+ "required": false,
2766
+ "description": "Additional CSS classes for the tab list container."
2767
+ },
2768
+ {
2769
+ "name": "tabClassName",
2770
+ "type": "string",
2771
+ "required": false,
2772
+ "description": "Additional CSS classes applied to every tab."
2773
+ }
2774
+ ],
2775
+ "examples": [
2776
+ "<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/>"
2777
+ ],
2778
+ "sourceFile": "components/New/Tabs/Tabs.tsx"
2779
+ },
2780
+ {
2781
+ "name": "FileDropzone",
2782
+ "category": "Components_2_0",
2783
+ "generation": "2.0",
2784
+ "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.",
2785
+ "props": [
2786
+ {
2787
+ "name": "labelProps",
2788
+ "type": "LabelProps",
2789
+ "required": false,
2790
+ "description": "Props of the naming the field, rendered above the area."
2791
+ },
2792
+ {
2793
+ "name": "label",
2794
+ "type": "ReactNode",
2795
+ "required": true,
2796
+ "description": "Primary line of copy."
2797
+ },
2798
+ {
2799
+ "name": "description",
2800
+ "type": "ReactNode",
2801
+ "required": false,
2802
+ "description": "Secondary line of copy."
2803
+ },
2804
+ {
2805
+ "name": "onChange",
2806
+ "type": "(files: File[]) => void",
2807
+ "required": true,
2808
+ "description": "Fired with the accepted files."
2809
+ },
2810
+ {
2811
+ "name": "onReject",
2812
+ "type": "(files: File[]) => void",
2813
+ "required": false,
2814
+ "description": "Fired with dropped files that `accept` excluded."
2815
+ },
2816
+ {
2817
+ "name": "accept",
2818
+ "type": "string",
2819
+ "required": false,
2820
+ "description": "Comma-separated `accept` tokens."
2821
+ },
2822
+ {
2823
+ "name": "multiple",
2824
+ "type": "boolean",
2825
+ "required": false,
2826
+ "defaultValue": "false",
2827
+ "description": "Whether more than one file can be selected."
2828
+ },
2829
+ {
2830
+ "name": "disabled",
2831
+ "type": "boolean",
2832
+ "required": false,
2833
+ "defaultValue": "false",
2834
+ "description": "Disables picking and dropping."
2835
+ },
2836
+ {
2837
+ "name": "errorText",
2838
+ "type": "string",
2839
+ "required": false,
2840
+ "description": "Error message rendered below the area."
2841
+ },
2842
+ {
2843
+ "name": "icon",
2844
+ "type": "ReactNode",
2845
+ "required": false,
2846
+ "description": "Icon rendered above the copy."
2847
+ },
2848
+ {
2849
+ "name": "id",
2850
+ "type": "string",
2851
+ "required": false,
2852
+ "description": "`id` of the underlying file input."
2853
+ },
2854
+ {
2855
+ "name": "ariaLabel",
2856
+ "type": "string",
2857
+ "required": false,
2858
+ "description": "Accessible name; needed when `label` carries no text."
2859
+ },
2860
+ {
2861
+ "name": "className",
2862
+ "type": "string",
2863
+ "required": false,
2864
+ "description": "Additional CSS classes for the drop area."
2865
+ }
2866
+ ],
2867
+ "examples": [
2868
+ "<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/>"
2869
+ ],
2870
+ "sourceFile": "components/New/FileDropzone/FileDropzone.tsx"
2871
+ },
2872
+ {
2873
+ "name": "Tag",
2874
+ "category": "Components_2_0",
2875
+ "generation": "2.0",
2876
+ "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.",
2877
+ "props": [
2878
+ {
2879
+ "name": "label",
2880
+ "type": "string",
2881
+ "required": true,
2882
+ "description": "Text content displayed inside the tag."
2883
+ },
2884
+ {
2885
+ "name": "icon",
2886
+ "type": "ReactNode",
2887
+ "required": false,
2888
+ "description": "Icon rendered before the label."
2889
+ },
2890
+ {
2891
+ "name": "appearance",
2892
+ "type": "TagAppearance",
2893
+ "required": false,
2894
+ "defaultValue": "TagAppearance.Outlined",
2895
+ "description": "`outlined` is the filled chip on the raised\nlayer; `selectable` is the unfilled filter chip that tints and turns semibold when selected."
2896
+ },
2897
+ {
2898
+ "name": "selected",
2899
+ "type": "boolean",
2900
+ "required": false,
2901
+ "defaultValue": "false",
2902
+ "description": "Applies the accent-tinted selected styling."
2903
+ },
2904
+ {
2905
+ "name": "disabled",
2906
+ "type": "boolean",
2907
+ "required": false,
2908
+ "defaultValue": "false",
2909
+ "description": "Stops the tag responding: no click handling, no remove control. The design defines no disabled tag, so the colours stay put."
2910
+ },
2911
+ {
2912
+ "name": "closable",
2913
+ "type": "boolean",
2914
+ "required": false,
2915
+ "defaultValue": "false",
2916
+ "description": "Renders the remove button. Needs `onRemove` to appear."
2917
+ },
2918
+ {
2919
+ "name": "removeLabel",
2920
+ "type": "string",
2921
+ "required": false,
2922
+ "description": "Accessible name of the remove button; defaults to `Remove <label>`."
2923
+ },
2924
+ {
2925
+ "name": "onRemove",
2926
+ "type": "(event: MouseEvent<HTMLButtonElement>) => void",
2927
+ "required": false,
2928
+ "description": "Called when the remove button is clicked. The click does not bubble to `onClick`."
2929
+ }
2930
+ ],
2931
+ "examples": [
2932
+ "<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/>"
2933
+ ],
2934
+ "sourceFile": "components/New/Tag/Tag.tsx"
2935
+ },
2936
+ {
2937
+ "name": "TagInput",
2938
+ "category": "Components_2_0",
2939
+ "generation": "2.0",
2940
+ "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.",
2941
+ "props": [
2942
+ {
2943
+ "name": "id",
2944
+ "type": "string",
2310
2945
  "required": false,
2311
2946
  "description": "The id of the text input, linked to the label."
2312
2947
  },
2313
2948
  {
2314
- "name": "value",
2315
- "type": "string[]",
2949
+ "name": "value",
2950
+ "type": "string[]",
2951
+ "required": false,
2952
+ "description": "Controlled tag list."
2953
+ },
2954
+ {
2955
+ "name": "defaultValue",
2956
+ "type": "string[]",
2957
+ "required": false,
2958
+ "description": "Initial tag list when uncontrolled."
2959
+ },
2960
+ {
2961
+ "name": "size",
2962
+ "type": "ElementSize",
2963
+ "required": false,
2964
+ "defaultValue": "ElementSize.Standard",
2965
+ "description": "Field height: standard is 40px, small is 24px."
2966
+ },
2967
+ {
2968
+ "name": "labelProps",
2969
+ "type": "LabelProps",
2970
+ "required": false,
2971
+ "description": "Props of the rendered above the field."
2972
+ },
2973
+ {
2974
+ "name": "placeholder",
2975
+ "type": "string",
2976
+ "required": false,
2977
+ "description": "Placeholder shown while there are no tags."
2978
+ },
2979
+ {
2980
+ "name": "caption",
2981
+ "type": "string",
2982
+ "required": false,
2983
+ "description": "Helper text rendered below the field when there is no `error`."
2984
+ },
2985
+ {
2986
+ "name": "error",
2987
+ "type": "string",
2988
+ "required": false,
2989
+ "description": "Error message rendered below the field (pass `invalid` too for error styling)."
2990
+ },
2991
+ {
2992
+ "name": "invalid",
2993
+ "type": "boolean",
2994
+ "required": false,
2995
+ "description": "Applies the field's error styling."
2996
+ },
2997
+ {
2998
+ "name": "disabled",
2999
+ "type": "boolean",
3000
+ "required": false,
3001
+ "defaultValue": "false",
3002
+ "description": "Disables typing and tag removal."
3003
+ },
3004
+ {
3005
+ "name": "readOnly",
3006
+ "type": "boolean",
3007
+ "required": false,
3008
+ "defaultValue": "false",
3009
+ "description": "Shows the tags without allowing new ones or removal."
3010
+ },
3011
+ {
3012
+ "name": "collapseTagOverflow",
3013
+ "type": "boolean",
3014
+ "required": false,
3015
+ "defaultValue": "false",
3016
+ "description": "Keep the tags on one line, replacing the ones that do not fit with a `+N` chip."
3017
+ },
3018
+ {
3019
+ "name": "ariaLabel",
3020
+ "type": "string",
3021
+ "required": false,
3022
+ "description": "Accessible name for the text input; use it when there is no visible label."
3023
+ },
3024
+ {
3025
+ "name": "tagListLabel",
3026
+ "type": "string",
3027
+ "required": false,
3028
+ "defaultValue": "'Tags'",
3029
+ "description": "Accessible name of the tag list."
3030
+ },
3031
+ {
3032
+ "name": "className",
3033
+ "type": "string",
3034
+ "required": false,
3035
+ "description": "Additional CSS classes for the outer container."
3036
+ },
3037
+ {
3038
+ "name": "fieldClassName",
3039
+ "type": "string",
3040
+ "required": false,
3041
+ "description": "Additional CSS classes for the field itself."
3042
+ },
3043
+ {
3044
+ "name": "tagClassName",
3045
+ "type": "string",
3046
+ "required": false,
3047
+ "description": "Additional CSS classes applied to every tag."
3048
+ },
3049
+ {
3050
+ "name": "onChange",
3051
+ "type": "(tags: string[]) => void",
3052
+ "required": false,
3053
+ "description": "Called with the new list whenever a tag is added or removed."
3054
+ }
3055
+ ],
3056
+ "examples": [
3057
+ "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/>"
3058
+ ],
3059
+ "sourceFile": "components/New/TagInput/TagInput.tsx"
3060
+ },
3061
+ {
3062
+ "name": "Search",
3063
+ "category": "Components_2_0",
3064
+ "generation": "2.0",
3065
+ "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.",
3066
+ "props": [
3067
+ {
3068
+ "name": "withoutBorder",
3069
+ "type": "boolean",
3070
+ "required": false,
3071
+ "defaultValue": "false",
3072
+ "description": "Renders the field without its border and background"
3073
+ },
3074
+ {
3075
+ "name": "clearLabel",
3076
+ "type": "string",
3077
+ "required": false,
3078
+ "defaultValue": "'Clear search'",
3079
+ "description": "Accessible name of the clear button"
3080
+ }
3081
+ ],
3082
+ "examples": [
3083
+ "<Search\n id=\"search\"\n value={query}\n placeholder=\"Search\"\n onChange={setQuery}\n/>"
3084
+ ],
3085
+ "sourceFile": "components/New/Search/Search.tsx"
3086
+ },
3087
+ {
3088
+ "name": "Slider",
3089
+ "category": "Components_2_0",
3090
+ "generation": "2.0",
3091
+ "description": "A range slider from the 2.0 design system.\naliases: RangeInput|TemperatureSlider|RangeSlider\nDesign system 2.0",
3092
+ "props": [
3093
+ {
3094
+ "name": "value",
3095
+ "type": "number",
3096
+ "required": true,
3097
+ "description": "Current slider value"
3098
+ },
3099
+ {
3100
+ "name": "min",
3101
+ "type": "number",
3102
+ "required": false,
3103
+ "defaultValue": "0",
3104
+ "description": "Minimum value"
3105
+ },
3106
+ {
3107
+ "name": "max",
3108
+ "type": "number",
3109
+ "required": false,
3110
+ "defaultValue": "1",
3111
+ "description": "Maximum value"
3112
+ },
3113
+ {
3114
+ "name": "step",
3115
+ "type": "number",
3116
+ "required": false,
3117
+ "defaultValue": "0.1",
3118
+ "description": "Step increment"
3119
+ },
3120
+ {
3121
+ "name": "disabled",
3122
+ "type": "boolean",
3123
+ "required": false,
3124
+ "description": "Whether the slider is disabled"
3125
+ },
3126
+ {
3127
+ "name": "labelProps",
3128
+ "type": "LabelProps",
3129
+ "required": false,
3130
+ "description": "Props of the rendered above the track"
3131
+ },
3132
+ {
3133
+ "name": "labels",
3134
+ "type": "[string, string] | [string, string, string]",
3135
+ "required": false,
3136
+ "description": "2 or 3 strings rendered below the track (start, [middle,] end)"
3137
+ },
3138
+ {
3139
+ "name": "formatValue",
3140
+ "type": "(value: number) => string",
3141
+ "required": false,
3142
+ "description": "Custom formatter for the displayed value; also becomes the announced `aria-valuetext`"
3143
+ },
3144
+ {
3145
+ "name": "showValue",
3146
+ "type": "boolean",
3147
+ "required": false,
3148
+ "defaultValue": "false",
3149
+ "description": "Renders the current value at the end of the label row"
3150
+ },
3151
+ {
3152
+ "name": "caption",
3153
+ "type": "string",
3154
+ "required": false,
3155
+ "description": "Helper text rendered below the track, and described by the slider"
3156
+ },
3157
+ {
3158
+ "name": "error",
3159
+ "type": "string",
3160
+ "required": false,
3161
+ "description": "Error message rendered below the track; replaces the caption"
3162
+ },
3163
+ {
3164
+ "name": "onChange",
3165
+ "type": "(value: number) => void",
3166
+ "required": false,
3167
+ "description": "Callback fired with the new value"
3168
+ },
3169
+ {
3170
+ "name": "containerClassName",
3171
+ "type": "string",
3172
+ "required": false,
3173
+ "description": "Additional classes for the outer container"
3174
+ },
3175
+ {
3176
+ "name": "trackClassName",
3177
+ "type": "string",
3178
+ "required": false,
3179
+ "description": "Additional classes for the unfilled track"
3180
+ },
3181
+ {
3182
+ "name": "fillClassName",
3183
+ "type": "string",
3184
+ "required": false,
3185
+ "description": "Additional classes for the filled portion of the track"
3186
+ }
3187
+ ],
3188
+ "examples": [
3189
+ "<Slider\n id=\"temperature\"\n labelProps={{ label: 'Temperature' }}\n value={temperature}\n labels={['Precise', 'Neutral', 'Creative']}\n onChange={setTemperature}\n/>"
3190
+ ],
3191
+ "sourceFile": "components/New/Slider/Slider.tsx"
3192
+ },
3193
+ {
3194
+ "name": "Tooltip",
3195
+ "category": "Components_2_0",
3196
+ "generation": "2.0",
3197
+ "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.",
3198
+ "props": [
3199
+ {
3200
+ "name": "hideTooltip",
3201
+ "type": "boolean",
3202
+ "required": false,
3203
+ "defaultValue": "false",
3204
+ "description": "Suppress the tooltip while keeping the trigger rendered"
3205
+ },
3206
+ {
3207
+ "name": "tooltip",
3208
+ "type": "ReactNode",
3209
+ "required": false,
3210
+ "description": "The content to display in the tooltip"
3211
+ },
3212
+ {
3213
+ "name": "children",
3214
+ "type": "ReactNode",
3215
+ "required": true,
3216
+ "description": "The element that triggers the tooltip"
3217
+ },
3218
+ {
3219
+ "name": "asChild",
3220
+ "type": "boolean",
3221
+ "required": false,
3222
+ "defaultValue": "false",
3223
+ "description": "Use the child as the trigger instead of wrapping it in a `<span>`"
3224
+ },
3225
+ {
3226
+ "name": "triggerClassName",
3227
+ "type": "string",
3228
+ "required": false,
3229
+ "description": "Additional CSS classes for the trigger element"
3230
+ },
3231
+ {
3232
+ "name": "contentClassName",
3233
+ "type": "string",
3234
+ "required": false,
3235
+ "description": "Additional CSS classes for the tooltip bubble"
3236
+ }
3237
+ ],
3238
+ "examples": [
3239
+ "<Tooltip tooltip=\"Tooltip text\" placement={TooltipPlacement.Top} asChild>\n <button>Hover me</button>\n</Tooltip>"
3240
+ ],
3241
+ "sourceFile": "components/New/Tooltip/Tooltip.tsx"
3242
+ },
3243
+ {
3244
+ "name": "TooltipContainer",
3245
+ "category": "Components_2_0",
3246
+ "generation": "2.0",
3247
+ "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.",
3248
+ "props": [],
3249
+ "examples": [
3250
+ "<TooltipContainer placement={TooltipPlacement.Top}>\n <TooltipTrigger asChild>\n <button>Hover me</button>\n </TooltipTrigger>\n <TooltipContent>Tooltip text</TooltipContent>\n</TooltipContainer>"
3251
+ ],
3252
+ "sourceFile": "components/New/Tooltip/TooltipContainer.tsx"
3253
+ },
3254
+ {
3255
+ "name": "TooltipContent",
3256
+ "category": "Components_2_0",
3257
+ "generation": "2.0",
3258
+ "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.",
3259
+ "props": [
3260
+ {
3261
+ "name": "style",
3262
+ "type": "CSSProperties",
3263
+ "required": false,
3264
+ "description": "Additional inline styles for the tooltip bubble"
3265
+ }
3266
+ ],
3267
+ "examples": [],
3268
+ "sourceFile": "components/New/Tooltip/TooltipContent.tsx"
3269
+ },
3270
+ {
3271
+ "name": "TooltipTrigger",
3272
+ "category": "Components_2_0",
3273
+ "generation": "2.0",
3274
+ "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.",
3275
+ "props": [
3276
+ {
3277
+ "name": "asChild",
3278
+ "type": "boolean",
3279
+ "required": false,
3280
+ "defaultValue": "false",
3281
+ "description": "Render the child as the trigger instead of wrapping it in a `<span>`"
3282
+ }
3283
+ ],
3284
+ "examples": [],
3285
+ "sourceFile": "components/New/Tooltip/TooltipTrigger.tsx"
3286
+ },
3287
+ {
3288
+ "name": "EllipsisTooltip",
3289
+ "category": "Components_2_0",
3290
+ "generation": "2.0",
3291
+ "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.",
3292
+ "props": [
3293
+ {
3294
+ "name": "text",
3295
+ "type": "ReactNode",
3296
+ "required": true,
3297
+ "description": "The text or node to display, truncated with an ellipsis when it does not fit"
3298
+ },
3299
+ {
3300
+ "name": "className",
3301
+ "type": "string",
3302
+ "required": false,
3303
+ "description": "Additional CSS classes for the text element, typically its width"
3304
+ },
3305
+ {
3306
+ "name": "contentClassName",
3307
+ "type": "string",
3308
+ "required": false,
3309
+ "description": "Additional CSS classes for the tooltip bubble"
3310
+ },
3311
+ {
3312
+ "name": "hideTooltip",
3313
+ "type": "boolean",
3314
+ "required": false,
3315
+ "defaultValue": "false",
3316
+ "description": "Suppress the tooltip even while the text is truncated"
3317
+ },
3318
+ {
3319
+ "name": "id",
3320
+ "type": "string",
3321
+ "required": false,
3322
+ "description": "`id` of the text element"
3323
+ },
3324
+ {
3325
+ "name": "customTooltipContent",
3326
+ "type": "ReactNode",
3327
+ "required": false,
3328
+ "description": "Shown instead of the full text while truncated"
3329
+ }
3330
+ ],
3331
+ "examples": [
3332
+ "<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 />"
3333
+ ],
3334
+ "sourceFile": "components/New/EllipsisTooltip/EllipsisTooltip.tsx"
3335
+ },
3336
+ {
3337
+ "name": "CollapsibleSidebar",
3338
+ "category": "Components_2_0",
3339
+ "generation": "2.0",
3340
+ "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.",
3341
+ "props": [
3342
+ {
3343
+ "name": "children",
3344
+ "type": "ReactNode",
3345
+ "required": true,
3346
+ "description": "Content shown while the sidebar is expanded."
3347
+ },
3348
+ {
3349
+ "name": "title",
3350
+ "type": "ReactNode",
3351
+ "required": true,
3352
+ "description": "Name of the panel, rendered as vertical text while collapsed."
3353
+ },
3354
+ {
3355
+ "name": "width",
3356
+ "type": "number",
3357
+ "required": false,
3358
+ "defaultValue": "280",
3359
+ "description": "Width in px while expanded."
3360
+ },
3361
+ {
3362
+ "name": "collapsedWidth",
3363
+ "type": "number",
3364
+ "required": false,
3365
+ "defaultValue": "COLLAPSED_WIDTH",
3366
+ "description": "Width in px while collapsed."
3367
+ },
3368
+ {
3369
+ "name": "isOpened",
3370
+ "type": "boolean",
3371
+ "required": false,
3372
+ "description": "Controlled open state."
3373
+ },
3374
+ {
3375
+ "name": "defaultOpened",
3376
+ "type": "boolean",
3377
+ "required": false,
3378
+ "defaultValue": "true",
3379
+ "description": "Initial open state when uncontrolled."
3380
+ },
3381
+ {
3382
+ "name": "onToggle",
3383
+ "type": "(nextOpened: boolean, e: MouseEvent<HTMLButtonElement>) => void",
3384
+ "required": false,
3385
+ "description": "Fired when the toggle is clicked. Receives the next open state."
3386
+ },
3387
+ {
3388
+ "name": "additionalButtons",
3389
+ "type": "ReactNode",
3390
+ "required": false,
3391
+ "description": "Extra footer controls, rendered while expanded."
3392
+ },
3393
+ {
3394
+ "name": "ariaLabel",
3395
+ "type": "string",
3396
+ "required": false,
3397
+ "defaultValue": "'Sidebar'",
3398
+ "description": "Accessible name of the sidebar region."
3399
+ },
3400
+ {
3401
+ "name": "collapseLabel",
3402
+ "type": "string",
3403
+ "required": false,
3404
+ "defaultValue": "'Collapse sidebar'",
3405
+ "description": "Name and tooltip of the toggle while expanded."
3406
+ },
3407
+ {
3408
+ "name": "expandLabel",
3409
+ "type": "string",
3410
+ "required": false,
3411
+ "defaultValue": "'Expand sidebar'",
3412
+ "description": "Name and tooltip of the toggle while collapsed."
3413
+ },
3414
+ {
3415
+ "name": "className",
3416
+ "type": "string",
3417
+ "required": false,
3418
+ "description": "Additional CSS classes for the outer container."
3419
+ },
3420
+ {
3421
+ "name": "titleClassName",
3422
+ "type": "string",
3423
+ "required": false,
3424
+ "description": "Additional CSS classes for the vertical title."
3425
+ },
3426
+ {
3427
+ "name": "contentClassName",
3428
+ "type": "string",
3429
+ "required": false,
3430
+ "description": "Additional CSS classes for the content region."
3431
+ },
3432
+ {
3433
+ "name": "footerClassName",
3434
+ "type": "string",
3435
+ "required": false,
3436
+ "description": "Additional CSS classes for the footer."
3437
+ }
3438
+ ],
3439
+ "examples": [
3440
+ "<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>"
3441
+ ],
3442
+ "sourceFile": "components/New/CollapsibleSidebar/CollapsibleSidebar.tsx"
3443
+ },
3444
+ {
3445
+ "name": "ResizableContainer",
3446
+ "category": "Components_2_0",
3447
+ "generation": "2.0",
3448
+ "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 — an accent line with a chevron\npointing away from the panel — appears on hover and while dragging, and stays\nwithin `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.",
3449
+ "props": [
3450
+ {
3451
+ "name": "children",
3452
+ "type": "ReactNode",
3453
+ "required": true,
3454
+ "description": "Content placed inside the container."
3455
+ },
3456
+ {
3457
+ "name": "minWidth",
3458
+ "type": "number",
3459
+ "required": true,
3460
+ "description": "Minimum allowed width in px."
3461
+ },
3462
+ {
3463
+ "name": "maxWidth",
3464
+ "type": "number",
3465
+ "required": true,
3466
+ "description": "Maximum allowed width in px."
3467
+ },
3468
+ {
3469
+ "name": "width",
3470
+ "type": "number",
3471
+ "required": false,
3472
+ "description": "Controlled width. If omitted the container is uncontrolled."
3473
+ },
3474
+ {
3475
+ "name": "defaultWidth",
3476
+ "type": "number",
3477
+ "required": false,
3478
+ "description": "Initial width when uncontrolled. Defaults to `minWidth`."
3479
+ },
3480
+ {
3481
+ "name": "onResizeStop",
3482
+ "type": "(width: number) => void",
3483
+ "required": false,
3484
+ "description": "Fired when a resize ends, and once per arrow key press."
3485
+ },
3486
+ {
3487
+ "name": "onResize",
3488
+ "type": "(width: number) => void",
3489
+ "required": false,
3490
+ "description": "Fired continuously while dragging."
3491
+ },
3492
+ {
3493
+ "name": "side",
3494
+ "type": "ResizableContainerSide",
3495
+ "required": false,
3496
+ "defaultValue": "ResizableContainerSide.Right",
3497
+ "description": "Edge carrying the resize handle."
3498
+ },
3499
+ {
3500
+ "name": "keyboardStep",
3501
+ "type": "number",
3502
+ "required": false,
3503
+ "defaultValue": "DEFAULT_KEYBOARD_STEP",
3504
+ "description": "Width change per arrow key press."
3505
+ },
3506
+ {
3507
+ "name": "ariaLabel",
3508
+ "type": "string",
3509
+ "required": false,
3510
+ "defaultValue": "'Resize panel'",
3511
+ "description": "Accessible name of the handle."
3512
+ },
3513
+ {
3514
+ "name": "className",
3515
+ "type": "string",
3516
+ "required": false,
3517
+ "description": "Additional CSS classes for the inner content wrapper."
3518
+ },
3519
+ {
3520
+ "name": "resizeHandlerClassName",
3521
+ "type": "string",
3522
+ "required": false,
3523
+ "description": "Additional CSS classes for the resize handle."
3524
+ },
3525
+ {
3526
+ "name": "resizeHandler",
3527
+ "type": "ReactNode",
3528
+ "required": false,
3529
+ "description": "Custom node rendered inside the handle, replacing the default chevron."
3530
+ }
3531
+ ],
3532
+ "examples": [
3533
+ "<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>"
3534
+ ],
3535
+ "sourceFile": "components/New/ResizableContainer/ResizableContainer.tsx"
3536
+ },
3537
+ {
3538
+ "name": "ConditionalResizableContainer",
3539
+ "category": "Components_2_0",
3540
+ "generation": "2.0",
3541
+ "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.",
3542
+ "props": [
3543
+ {
3544
+ "name": "enabled",
3545
+ "type": "boolean",
3546
+ "required": false,
3547
+ "defaultValue": "true",
3548
+ "description": "Whether resizing is enabled."
3549
+ }
3550
+ ],
3551
+ "examples": [
3552
+ "<ConditionalResizableContainer\n enabled={isExpanded}\n minWidth={180}\n maxWidth={520}\n defaultWidth={260}\n>\n <Sidebar />\n</ConditionalResizableContainer>"
3553
+ ],
3554
+ "sourceFile": "components/New/ResizableContainer/ConditionalResizableContainer.tsx"
3555
+ },
3556
+ {
3557
+ "name": "NoDataContent",
3558
+ "category": "Components_2_0",
3559
+ "generation": "2.0",
3560
+ "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.",
3561
+ "props": [
3562
+ {
3563
+ "name": "title",
3564
+ "type": "ReactNode",
3565
+ "required": true,
3566
+ "description": "Headline of the empty state."
3567
+ },
3568
+ {
3569
+ "name": "description",
3570
+ "type": "ReactNode",
3571
+ "required": false,
3572
+ "description": "Optional secondary line under the title."
3573
+ },
3574
+ {
3575
+ "name": "icon",
3576
+ "type": "ReactNode",
3577
+ "required": false,
3578
+ "description": "Illustration above the title. Defaults to a struck-through clipboard."
3579
+ },
3580
+ {
3581
+ "name": "live",
3582
+ "type": "boolean",
3583
+ "required": false,
3584
+ "defaultValue": "false",
3585
+ "description": "Announce the empty state to assistive tech as it appears."
3586
+ },
3587
+ {
3588
+ "name": "className",
3589
+ "type": "string",
3590
+ "required": false,
3591
+ "description": "Additional CSS classes for the container."
3592
+ },
3593
+ {
3594
+ "name": "titleClassName",
3595
+ "type": "string",
3596
+ "required": false,
3597
+ "description": "Additional CSS classes for the title."
3598
+ },
3599
+ {
3600
+ "name": "descriptionClassName",
3601
+ "type": "string",
3602
+ "required": false,
3603
+ "description": "Additional CSS classes for the description."
3604
+ }
3605
+ ],
3606
+ "examples": [
3607
+ "<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 />"
3608
+ ],
3609
+ "sourceFile": "components/New/NoDataContent/NoDataContent.tsx"
3610
+ },
3611
+ {
3612
+ "name": "Grid",
3613
+ "category": "Components_2_0",
3614
+ "generation": "2.0",
3615
+ "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.",
3616
+ "props": [
3617
+ {
3618
+ "name": "columnDefs",
3619
+ "type": "ColDef<T>[]",
3620
+ "required": false,
3621
+ "description": "Column definitions, in ag-Grid `ColDef` format."
3622
+ },
3623
+ {
3624
+ "name": "rowData",
3625
+ "type": "T[]",
3626
+ "required": false,
3627
+ "description": "Rows to display."
3628
+ },
3629
+ {
3630
+ "name": "additionalGridOptions",
3631
+ "type": "GridOptions<T>",
3632
+ "required": false,
3633
+ "description": "Extra ag-Grid options, merged over the defaults."
3634
+ },
3635
+ {
3636
+ "name": "getContextMenuItems",
3637
+ "type": "(row: T) => DropdownItem[]",
3638
+ "required": false,
3639
+ "description": "Items of the row context menu. Omit for no menu."
3640
+ },
3641
+ {
3642
+ "name": "className",
3643
+ "type": "string",
3644
+ "required": false,
3645
+ "description": "Additional CSS classes for the grid container."
3646
+ },
3647
+ {
3648
+ "name": "ariaLabel",
3649
+ "type": "string",
3650
+ "required": false,
3651
+ "defaultValue": "'Data grid'",
3652
+ "description": "Accessible name of the grid region."
3653
+ },
3654
+ {
3655
+ "name": "wrapCustomCellRenderers",
3656
+ "type": "boolean | ((col: ColDef<T>) => boolean)",
3657
+ "required": false,
3658
+ "defaultValue": "true",
3659
+ "description": "Whether custom renderers get context-menu support."
3660
+ },
3661
+ {
3662
+ "name": "disabledRowIds",
3663
+ "type": "Set<string>",
3664
+ "required": false,
3665
+ "description": "Rows that cannot be selected."
3666
+ },
3667
+ {
3668
+ "name": "selectedRowIds",
3669
+ "type": "Set<string>",
3670
+ "required": false,
3671
+ "description": "Controlled selection: ids of the selected rows."
3672
+ },
3673
+ {
3674
+ "name": "onGridApiChange",
3675
+ "type": "(api: GridApi<T>) => void",
3676
+ "required": false,
3677
+ "description": "Fired when the grid API becomes available."
3678
+ },
3679
+ {
3680
+ "name": "onSelectionChange",
3681
+ "type": "(selectedRowIds: Set<string>, selectedRows: T[]) => void",
2316
3682
  "required": false,
2317
- "description": "Controlled tag list."
3683
+ "description": "Fired when the selection changes."
2318
3684
  },
2319
3685
  {
2320
- "name": "defaultValue",
2321
- "type": "string[]",
3686
+ "name": "getRowId",
3687
+ "type": "(row: T) => string",
2322
3688
  "required": false,
2323
- "description": "Initial tag list when uncontrolled."
3689
+ "description": "Extracts the unique id of a row. Defaults to its `id` field."
2324
3690
  },
2325
3691
  {
2326
- "name": "size",
2327
- "type": "ElementSize",
3692
+ "name": "alternateOddRowColors",
3693
+ "type": "boolean",
2328
3694
  "required": false,
2329
- "defaultValue": "ElementSize.Standard",
2330
- "description": "Field height: standard is 40px, small is 24px."
3695
+ "defaultValue": "false",
3696
+ "description": "Tints odd rows."
2331
3697
  },
2332
3698
  {
2333
- "name": "labelProps",
2334
- "type": "LabelProps",
3699
+ "name": "filterPlaceholder",
3700
+ "type": "string",
2335
3701
  "required": false,
2336
- "description": "Props of the rendered above the field."
3702
+ "defaultValue": "'Enter value'",
3703
+ "description": "Placeholder of the column filter inputs."
2337
3704
  },
2338
3705
  {
2339
- "name": "placeholder",
2340
- "type": "string",
3706
+ "name": "emptyStateIcon",
3707
+ "type": "ReactNode",
2341
3708
  "required": false,
2342
- "description": "Placeholder shown while there are no tags."
3709
+ "description": "Illustration of the empty state."
2343
3710
  },
2344
3711
  {
2345
- "name": "caption",
3712
+ "name": "emptyStateTitle",
2346
3713
  "type": "string",
2347
3714
  "required": false,
2348
- "description": "Helper text rendered below the field when there is no `error`."
3715
+ "defaultValue": "'No results found'",
3716
+ "description": "Headline of the empty state."
2349
3717
  },
2350
3718
  {
2351
- "name": "error",
3719
+ "name": "emptyStateDescription",
2352
3720
  "type": "string",
2353
3721
  "required": false,
2354
- "description": "Error message rendered below the field (pass `invalid` too for error styling)."
3722
+ "defaultValue": "\"Sorry, we couldn't find any results for your search.\"",
3723
+ "description": "Secondary line of the empty state."
2355
3724
  },
2356
3725
  {
2357
- "name": "invalid",
3726
+ "name": "loading",
2358
3727
  "type": "boolean",
2359
3728
  "required": false,
2360
- "description": "Applies the field's error styling."
3729
+ "defaultValue": "false",
3730
+ "description": "Shows the loading overlay."
2361
3731
  },
2362
3732
  {
2363
- "name": "disabled",
3733
+ "name": "wrapperBorder",
2364
3734
  "type": "boolean",
2365
3735
  "required": false,
2366
- "defaultValue": "false",
2367
- "description": "Disables typing and tag removal."
3736
+ "defaultValue": "true",
3737
+ "description": "Draws a border around the grid."
2368
3738
  },
2369
3739
  {
2370
- "name": "readOnly",
3740
+ "name": "withoutHeaderBorders",
2371
3741
  "type": "boolean",
2372
3742
  "required": false,
2373
3743
  "defaultValue": "false",
2374
- "description": "Shows the tags without allowing new ones or removal."
3744
+ "description": "Hides the vertical borders between header cells."
2375
3745
  },
2376
3746
  {
2377
- "name": "collapseTagOverflow",
3747
+ "name": "selectionMode",
3748
+ "type": "GridSelectionMode",
3749
+ "required": false,
3750
+ "description": "Renders a selection column of checkboxes or radios."
3751
+ },
3752
+ {
3753
+ "name": "allowDisabledContextMenu",
2378
3754
  "type": "boolean",
2379
3755
  "required": false,
2380
3756
  "defaultValue": "false",
2381
- "description": "Keep the tags on one line, replacing the ones that do not fit with a `+N` chip."
3757
+ "description": "Keeps the context menu on a non-selectable row."
2382
3758
  },
2383
3759
  {
2384
- "name": "ariaLabel",
2385
- "type": "string",
3760
+ "name": "selectRowLabel",
3761
+ "type": "(row: T) => string",
2386
3762
  "required": false,
2387
- "description": "Accessible name for the text input; use it when there is no visible label."
3763
+ "description": "Accessible name of a row's selection control."
2388
3764
  },
2389
3765
  {
2390
- "name": "tagListLabel",
3766
+ "name": "selectAllLabel",
2391
3767
  "type": "string",
2392
3768
  "required": false,
2393
- "defaultValue": "'Tags'",
2394
- "description": "Accessible name of the tag list."
3769
+ "defaultValue": "'Select all rows'",
3770
+ "description": "Accessible name of the select-all control."
3771
+ }
3772
+ ],
3773
+ "examples": [
3774
+ "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/>"
3775
+ ],
3776
+ "sourceFile": "components/New/Grid/Grid.tsx"
3777
+ },
3778
+ {
3779
+ "name": "DateCellRenderer",
3780
+ "category": "Components_2_0/Grid",
3781
+ "generation": "2.0",
3782
+ "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.",
3783
+ "props": [
3784
+ {
3785
+ "name": "value",
3786
+ "type": "DateValue | null",
3787
+ "required": false,
3788
+ "description": "The date to render."
2395
3789
  },
2396
3790
  {
2397
- "name": "className",
3791
+ "name": "locale",
2398
3792
  "type": "string",
2399
3793
  "required": false,
2400
- "description": "Additional CSS classes for the outer container."
3794
+ "defaultValue": "DEFAULT_LOCALE",
3795
+ "description": "Locale used for formatting."
2401
3796
  },
2402
3797
  {
2403
- "name": "fieldClassName",
2404
- "type": "string",
3798
+ "name": "options",
3799
+ "type": "Intl.DateTimeFormatOptions",
2405
3800
  "required": false,
2406
- "description": "Additional CSS classes for the field itself."
3801
+ "defaultValue": "DEFAULT_DATE_FORMAT_OPTIONS",
3802
+ "description": "`Intl.DateTimeFormat` options, e.g. `timeZone`."
2407
3803
  },
2408
3804
  {
2409
- "name": "tagClassName",
3805
+ "name": "emptyPlaceholder",
2410
3806
  "type": "string",
2411
3807
  "required": false,
2412
- "description": "Additional CSS classes applied to every tag."
3808
+ "description": "Rendered when the value carries no usable date."
2413
3809
  },
2414
3810
  {
2415
- "name": "onChange",
2416
- "type": "(tags: string[]) => void",
3811
+ "name": "className",
3812
+ "type": "string",
2417
3813
  "required": false,
2418
- "description": "Called with the new list whenever a tag is added or removed."
2419
- }
2420
- ],
2421
- "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/>"
2423
- ],
2424
- "sourceFile": "components/New/TagInput/TagInput.tsx"
2425
- },
2426
- {
2427
- "name": "Search",
2428
- "category": "Components_2_0",
2429
- "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.",
2431
- "props": [
3814
+ "description": "Additional CSS classes for the cell."
3815
+ },
2432
3816
  {
2433
- "name": "withoutBorder",
3817
+ "name": "hideTooltip",
2434
3818
  "type": "boolean",
2435
3819
  "required": false,
2436
3820
  "defaultValue": "false",
2437
- "description": "Renders the field without its border and background"
2438
- },
2439
- {
2440
- "name": "clearLabel",
2441
- "type": "string",
2442
- "required": false,
2443
- "defaultValue": "'Clear search'",
2444
- "description": "Accessible name of the clear button"
3821
+ "description": "Suppresses the truncation tooltip."
2445
3822
  }
2446
3823
  ],
2447
3824
  "examples": [
2448
- "<Search\n id=\"search\"\n value={query}\n placeholder=\"Search\"\n onChange={setQuery}\n/>"
3825
+ "// 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
3826
  ],
2450
- "sourceFile": "components/New/Search/Search.tsx"
3827
+ "sourceFile": "components/New/Grid/renderers/DateCellRenderer.tsx"
2451
3828
  },
2452
3829
  {
2453
3830
  "name": "DialCaptionText",
@@ -3200,7 +4577,8 @@
3200
4577
  "examples": [
3201
4578
  "<DialCheckbox\n id=\"checkbox\"\n label=\"Dial Checkbox\"\n checked={true}\n disabled={false}\n onChange={(value) => console.log(value)}\n/>"
3202
4579
  ],
3203
- "sourceFile": "components/Checkbox/Checkbox.tsx"
4580
+ "sourceFile": "components/Checkbox/Checkbox.tsx",
4581
+ "supersededBy": "Checkbox"
3204
4582
  },
3205
4583
  {
3206
4584
  "name": "DialSteps",
@@ -3448,7 +4826,8 @@
3448
4826
  "examples": [
3449
4827
  "<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
4828
  ],
3451
- "sourceFile": "components/RadioGroup/RadioGroup.tsx"
4829
+ "sourceFile": "components/RadioGroup/RadioGroup.tsx",
4830
+ "supersededBy": "RadioGroup"
3452
4831
  },
3453
4832
  {
3454
4833
  "name": "DialSlider",
@@ -3542,7 +4921,8 @@
3542
4921
  "examples": [
3543
4922
  "<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
4923
  ],
3545
- "sourceFile": "components/Slider/Slider.tsx"
4924
+ "sourceFile": "components/Slider/Slider.tsx",
4925
+ "supersededBy": "Slider"
3546
4926
  },
3547
4927
  {
3548
4928
  "name": "DialNoDataContent",
@@ -3590,7 +4970,8 @@
3590
4970
  "examples": [
3591
4971
  "<NoDataContent\n emptyDataTitle=\"No results found\"\n icon={<CustomIcon />}\n/>"
3592
4972
  ],
3593
- "sourceFile": "components/NoDataContent/NoDataContent.tsx"
4973
+ "sourceFile": "components/NoDataContent/NoDataContent.tsx",
4974
+ "supersededBy": "NoDataContent"
3594
4975
  },
3595
4976
  {
3596
4977
  "name": "DialCollapsibleSidebar",
@@ -3665,7 +5046,8 @@
3665
5046
  "examples": [
3666
5047
  "<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
5048
  ],
3668
- "sourceFile": "components/CollapsibleSidebar/CollapsibleSidebar.tsx"
5049
+ "sourceFile": "components/CollapsibleSidebar/CollapsibleSidebar.tsx",
5050
+ "supersededBy": "CollapsibleSidebar"
3669
5051
  },
3670
5052
  {
3671
5053
  "name": "DialLabelledText",
@@ -3807,7 +5189,8 @@
3807
5189
  "examples": [
3808
5190
  "<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
5191
  ],
3810
- "sourceFile": "components/EllipsisTooltip/EllipsisTooltip.tsx"
5192
+ "sourceFile": "components/EllipsisTooltip/EllipsisTooltip.tsx",
5193
+ "supersededBy": "EllipsisTooltip"
3811
5194
  },
3812
5195
  {
3813
5196
  "name": "DialDraggableItem",
@@ -4259,7 +5642,8 @@
4259
5642
  }
4260
5643
  ],
4261
5644
  "examples": [],
4262
- "sourceFile": "components/ResizableContainer/ResizableContainer.tsx"
5645
+ "sourceFile": "components/ResizableContainer/ResizableContainer.tsx",
5646
+ "supersededBy": "ResizableContainer"
4263
5647
  },
4264
5648
  {
4265
5649
  "name": "DialConditionalResizableContainer",
@@ -4278,7 +5662,8 @@
4278
5662
  "examples": [
4279
5663
  "<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
5664
  ],
4281
- "sourceFile": "components/ResizableContainer/ConditionalResizableContainer.tsx"
5665
+ "sourceFile": "components/ResizableContainer/ConditionalResizableContainer.tsx",
5666
+ "supersededBy": "ConditionalResizableContainer"
4282
5667
  },
4283
5668
  {
4284
5669
  "name": "DialGrid",
@@ -4433,7 +5818,8 @@
4433
5818
  "examples": [
4434
5819
  "// 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
5820
  ],
4436
- "sourceFile": "components/Grid/Grid.tsx"
5821
+ "sourceFile": "components/Grid/Grid.tsx",
5822
+ "supersededBy": "Grid"
4437
5823
  },
4438
5824
  {
4439
5825
  "name": "DialDateCellRenderer",
@@ -4482,7 +5868,8 @@
4482
5868
  "examples": [
4483
5869
  "// 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
5870
  ],
4485
- "sourceFile": "components/Grid/renderers/DateCellRenderer.tsx"
5871
+ "sourceFile": "components/Grid/renderers/DateCellRenderer.tsx",
5872
+ "supersededBy": "DateCellRenderer"
4486
5873
  },
4487
5874
  {
4488
5875
  "name": "DialTabs",
@@ -5106,7 +6493,8 @@
5106
6493
  "examples": [
5107
6494
  "<DialTooltip tooltip=\"This is helpful information\">\n <button>Hover me</button>\n</DialTooltip>"
5108
6495
  ],
5109
- "sourceFile": "components/Tooltip/Tooltip.tsx"
6496
+ "sourceFile": "components/Tooltip/Tooltip.tsx",
6497
+ "supersededBy": "Tooltip"
5110
6498
  },
5111
6499
  {
5112
6500
  "name": "DialTooltipContainer",
@@ -5115,7 +6503,8 @@
5115
6503
  "description": "The container component that provides tooltip context and state management\nDesign system 1.0",
5116
6504
  "props": [],
5117
6505
  "examples": [],
5118
- "sourceFile": "components/Tooltip/TooltipContainer.tsx"
6506
+ "sourceFile": "components/Tooltip/TooltipContainer.tsx",
6507
+ "supersededBy": "TooltipContainer"
5119
6508
  },
5120
6509
  {
5121
6510
  "name": "DialTooltipContent",
@@ -5124,7 +6513,8 @@
5124
6513
  "description": "The content area of a tooltip that displays the tooltip information\nDesign system 1.0",
5125
6514
  "props": [],
5126
6515
  "examples": [],
5127
- "sourceFile": "components/Tooltip/TooltipContent.tsx"
6516
+ "sourceFile": "components/Tooltip/TooltipContent.tsx",
6517
+ "supersededBy": "TooltipContent"
5128
6518
  },
5129
6519
  {
5130
6520
  "name": "DialTooltipTrigger",
@@ -5133,7 +6523,8 @@
5133
6523
  "description": "The trigger element for a tooltip that can be clicked or hovered\nDesign system 1.0",
5134
6524
  "props": [],
5135
6525
  "examples": [],
5136
- "sourceFile": "components/Tooltip/TooltipTrigger.tsx"
6526
+ "sourceFile": "components/Tooltip/TooltipTrigger.tsx",
6527
+ "supersededBy": "TooltipTrigger"
5137
6528
  },
5138
6529
  {
5139
6530
  "name": "DialSwitch",
@@ -5230,7 +6621,8 @@
5230
6621
  "examples": [
5231
6622
  "<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
6623
  ],
5233
- "sourceFile": "components/SegmentedControl/SegmentedControl.tsx"
6624
+ "sourceFile": "components/SegmentedControl/SegmentedControl.tsx",
6625
+ "supersededBy": "SegmentedControl"
5234
6626
  },
5235
6627
  {
5236
6628
  "name": "DialPopup",
@@ -5441,7 +6833,8 @@
5441
6833
  "examples": [
5442
6834
  "<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
6835
  ],
5444
- "sourceFile": "components/RadioGroupPopupField/RadioGroupPopupField.tsx"
6836
+ "sourceFile": "components/RadioGroupPopupField/RadioGroupPopupField.tsx",
6837
+ "supersededBy": "RadioGroupPopupField"
5445
6838
  },
5446
6839
  {
5447
6840
  "name": "DialFormPopup",
@@ -8167,6 +9560,14 @@
8167
9560
  "name": "danger?",
8168
9561
  "value": "boolean"
8169
9562
  },
9563
+ {
9564
+ "name": "selectable?",
9565
+ "value": "boolean"
9566
+ },
9567
+ {
9568
+ "name": "checked?",
9569
+ "value": "boolean"
9570
+ },
8170
9571
  {
8171
9572
  "name": "type?",
8172
9573
  "value": "DropdownItemType"
@@ -8685,6 +10086,10 @@
8685
10086
  {
8686
10087
  "name": "Loading",
8687
10088
  "value": "'loading'"
10089
+ },
10090
+ {
10091
+ "name": "General",
10092
+ "value": "'general'"
8688
10093
  }
8689
10094
  ],
8690
10095
  "sourceFile": "types/notification.ts"
@@ -8733,6 +10138,64 @@
8733
10138
  "sourceFile": "components/New/Calendar/Calendar.tsx",
8734
10139
  "typeBody": "Date | string | null"
8735
10140
  },
10141
+ {
10142
+ "name": "RadioGroupItem",
10143
+ "kind": "interface",
10144
+ "members": [
10145
+ {
10146
+ "name": "value",
10147
+ "value": "string"
10148
+ },
10149
+ {
10150
+ "name": "label?",
10151
+ "value": "ReactNode"
10152
+ },
10153
+ {
10154
+ "name": "caption?",
10155
+ "value": "string"
10156
+ },
10157
+ {
10158
+ "name": "content?",
10159
+ "value": "ReactNode"
10160
+ },
10161
+ {
10162
+ "name": "disabled?",
10163
+ "value": "boolean"
10164
+ },
10165
+ {
10166
+ "name": "'aria-label'?",
10167
+ "value": "string"
10168
+ }
10169
+ ],
10170
+ "sourceFile": "components/New/RadioGroup/RadioGroup.tsx"
10171
+ },
10172
+ {
10173
+ "name": "SegmentedControlItem",
10174
+ "kind": "interface",
10175
+ "members": [
10176
+ {
10177
+ "name": "value",
10178
+ "value": "T"
10179
+ },
10180
+ {
10181
+ "name": "label?",
10182
+ "value": "ReactNode"
10183
+ },
10184
+ {
10185
+ "name": "icon?",
10186
+ "value": "ReactNode"
10187
+ },
10188
+ {
10189
+ "name": "disabled?",
10190
+ "value": "boolean"
10191
+ },
10192
+ {
10193
+ "name": "'aria-label'?",
10194
+ "value": "string"
10195
+ }
10196
+ ],
10197
+ "sourceFile": "components/New/SegmentedControl/SegmentedControl.tsx"
10198
+ },
8736
10199
  {
8737
10200
  "name": "TabItem",
8738
10201
  "kind": "interface",
@@ -8756,6 +10219,71 @@
8756
10219
  ],
8757
10220
  "sourceFile": "components/New/Tabs/Tabs.tsx",
8758
10221
  "description": "A single tab entry rendered by ."
10222
+ },
10223
+ {
10224
+ "name": "TagAppearance",
10225
+ "kind": "enum",
10226
+ "members": [
10227
+ {
10228
+ "name": "Outlined",
10229
+ "value": "'outlined'"
10230
+ },
10231
+ {
10232
+ "name": "Selectable",
10233
+ "value": "'selectable'"
10234
+ }
10235
+ ],
10236
+ "sourceFile": "types/tag.ts"
10237
+ },
10238
+ {
10239
+ "name": "TooltipContainerOptions",
10240
+ "kind": "interface",
10241
+ "members": [
10242
+ {
10243
+ "name": "initialOpen?",
10244
+ "value": "boolean"
10245
+ },
10246
+ {
10247
+ "name": "placement?",
10248
+ "value": "TooltipPlacement"
10249
+ },
10250
+ {
10251
+ "name": "isTriggerClickable?",
10252
+ "value": "boolean"
10253
+ },
10254
+ {
10255
+ "name": "open?",
10256
+ "value": "boolean"
10257
+ },
10258
+ {
10259
+ "name": "onOpenChange?",
10260
+ "value": "(open: boolean) => void"
10261
+ }
10262
+ ],
10263
+ "sourceFile": "components/New/Tooltip/TooltipContext.tsx"
10264
+ },
10265
+ {
10266
+ "name": "TooltipPlacement",
10267
+ "kind": "enum",
10268
+ "members": [
10269
+ {
10270
+ "name": "Top",
10271
+ "value": "'top'"
10272
+ },
10273
+ {
10274
+ "name": "Right",
10275
+ "value": "'right'"
10276
+ },
10277
+ {
10278
+ "name": "Bottom",
10279
+ "value": "'bottom'"
10280
+ },
10281
+ {
10282
+ "name": "Left",
10283
+ "value": "'left'"
10284
+ }
10285
+ ],
10286
+ "sourceFile": "types/tooltip.ts"
8759
10287
  }
8760
10288
  ],
8761
10289
  "hooks": [
@@ -8775,7 +10303,7 @@
8775
10303
  },
8776
10304
  {
8777
10305
  "name": "convertGridDateToDate",
8778
- "sourceFile": "components/Grid/renderers/utils.ts"
10306
+ "sourceFile": "utils/grid-date.ts"
8779
10307
  },
8780
10308
  {
8781
10309
  "name": "useDialFileManagerTabs",
@@ -8814,11 +10342,76 @@
8814
10342
  "description": "Hook to read the File Manager context.\nThrows if used outside of the provider.",
8815
10343
  "signature": "() => unknown"
8816
10344
  },
10345
+ {
10346
+ "name": "useThemeScope",
10347
+ "sourceFile": "components/New/ThemeScope/ThemeScope.tsx",
10348
+ "description": "Class names of the enclosing `ThemeScope`s, outermost first, or `''` when the\ncaller sits outside any scope. Components rendering into a `FloatingPortal`\nmerge this onto their floating root so the tokens follow them out of the\nsubtree.",
10349
+ "signature": "() => string"
10350
+ },
8817
10351
  {
8818
10352
  "name": "matchesAccept",
8819
10353
  "sourceFile": "utils/file-accept.ts",
8820
10354
  "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
10355
  "signature": "(file: File, accept?: string) => boolean"
10356
+ },
10357
+ {
10358
+ "name": "GRID_SELECTION_COLUMN_ID",
10359
+ "sourceFile": "components/New/Grid/Grid.tsx",
10360
+ "description": "Column id of the selection column this component prepends itself.",
10361
+ "signature": "GRID_SELECTION_COLUMN_ID = 'dial-kit-grid-selection'"
10362
+ },
10363
+ {
10364
+ "name": "DEFAULT_DATE_FORMAT_OPTIONS",
10365
+ "sourceFile": "components/New/Grid/renderers/constants.ts",
10366
+ "signature": "DEFAULT_DATE_FORMAT_OPTIONS: Intl.DateTimeFormatOptions"
10367
+ },
10368
+ {
10369
+ "name": "DEFAULT_DATE_LOCALE",
10370
+ "sourceFile": "components/New/Grid/renderers/constants.ts"
10371
+ },
10372
+ {
10373
+ "name": "GRID_ALIGN_RIGHT_CLASS",
10374
+ "sourceFile": "components/New/Grid/constants.ts",
10375
+ "description": "Right-aligns a column. Applied by the consumer through `cellClass`.",
10376
+ "signature": "GRID_ALIGN_RIGHT_CLASS = 'dial-kit-grid-align-right'"
10377
+ },
10378
+ {
10379
+ "name": "GRID_ROOT_CLASS",
10380
+ "sourceFile": "components/New/Grid/constants.ts",
10381
+ "description": "Root class of the 2.0 grid; every rule in `styles/grid.scss` sits under it.",
10382
+ "signature": "GRID_ROOT_CLASS = 'dial-kit-grid'"
10383
+ },
10384
+ {
10385
+ "name": "GRID_THEME_PARAMS",
10386
+ "sourceFile": "components/New/Grid/constants.ts",
10387
+ "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.",
10388
+ "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 // Dividers inside the table sit on the thin stroke (0.5px) rather than the\n // 1px main stroke that controls and standalone dividers use, so a dense grid\n // reads as rows of data instead of a set of boxes. Sub-pixel widths are\n // antialiased rather than snapped, which is what makes the line look lighter.\n // `wrapperBorder` and the pinned-column boundary are left on the main stroke\n // by the theme: those frame the table and separate its regions rather than\n // dividing rows and columns.\n rowBorder: THIN_TABLE_DIVIDER,\n headerRowBorder: THIN_TABLE_DIVIDER,\n headerColumnBorder: THIN_TABLE_DIVIDER,\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}"
10389
+ },
10390
+ {
10391
+ "name": "GRID_ROW_HEIGHT",
10392
+ "sourceFile": "components/New/Grid/constants.ts"
10393
+ },
10394
+ {
10395
+ "name": "DIAL_KIT_ICON_STROKE",
10396
+ "sourceFile": "components/New/constants/icon.ts",
10397
+ "description": "Icon stroke (1.5px) from the 2.0 stroke scale. Tabler renders every outline\nicon at `stroke={2}` unless told otherwise, so the token has to be passed\nexplicitly — a 2.0 component that omits it draws a heavier icon than the\ndesign system asks for.\n\nIt is a number rather than a Tailwind utility because an icon's weight is an\nSVG `stroke-width` attribute on the glyph, not a border on its box. The\nborder half of the same scale stays on plain Tailwind widths — `border`,\n`border-2`, `border-4`, and `border-[0.5px]` for a table divider.\n\nExported publicly so icons a consumer passes into a 2.0 component — a button\nicon, a menu item, a segmented-control segment — can match the ones the\ncomponents draw themselves.\n\nTwo deliberate departures inside the library: the empty-state illustrations\n(`NoDataContent`, the grid's no-rows overlay) use a much lighter stroke,\nsince a 1.5px line reads as a drawing at 16px and as a fence at 100px; and\nthe checkbox glyph uses a heavier one, because it is a control mark sized to\na 14px box rather than an icon from the set.",
10398
+ "signature": "DIAL_KIT_ICON_STROKE = 1.5"
10399
+ },
10400
+ {
10401
+ "name": "convertToDate",
10402
+ "sourceFile": "utils/grid-date.ts",
10403
+ "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.",
10404
+ "signature": "(input?: DateValue | null) => Date | null"
10405
+ },
10406
+ {
10407
+ "name": "baseColumnComparator",
10408
+ "sourceFile": "utils/grid-comparators.ts",
10409
+ "signature": "(a: string | number | undefined, b: string | number | undefined, _nodeA?: IRowNode, _nodeB?: IRowNode, isInverted?: boolean) => number"
10410
+ },
10411
+ {
10412
+ "name": "checkColDefsChanges",
10413
+ "sourceFile": "utils/grid-comparators.ts",
10414
+ "signature": "(cols: ColDef[], initialCols: ColDef[]) => unknown"
8822
10415
  }
8823
10416
  ],
8824
10417
  "utils": [