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

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 (173) hide show
  1. package/README.md +45 -0
  2. package/dist/CHANGELOG.md +48 -1
  3. package/dist/{JsonEditor-CRSkEnWP.cjs → JsonEditor-pyqbLZZf.cjs} +1 -1
  4. package/dist/{JsonEditor-Djt1V27V.js → JsonEditor-v9m_npfK.js} +1 -1
  5. package/dist/MarkdownEditor-5UpxUtXf.js +75 -0
  6. package/dist/{MarkdownEditor-BbGX2uA9.cjs → MarkdownEditor-9aPIyyuu.cjs} +1 -1
  7. package/dist/MarkdownEditor-BjqdSHPU.cjs +1 -0
  8. package/dist/{MarkdownEditor-DtKScLM2.js → MarkdownEditor-CWZVSR--.js} +1 -1
  9. package/dist/components-manifest.json +3420 -391
  10. package/dist/dial-ui-kit.cjs.js +1 -1
  11. package/dist/dial-ui-kit.es.js +201 -148
  12. package/dist/{index-JVDPW40K.js → index-DKDaSZqV.js} +24490 -21241
  13. package/dist/index-xlqMH2Q1.cjs +71 -0
  14. package/dist/index.css +6 -2
  15. package/dist/mcp-server.cjs +29 -9
  16. package/dist/migration-guides/0.13.0/caption-semi-text-lead-rename.md +82 -0
  17. package/dist/migration-guides/0.13.0/field-label-props-unification.md +94 -0
  18. package/dist/migration-guides/0.13.0/focus-border-token-rename.md +106 -0
  19. package/dist/migration-guides/0.13.0/progress-bar-2-0-rewrite.md +103 -0
  20. package/dist/migration-guides/0.13.0/spinner-dial-prefix-removal.md +69 -0
  21. package/dist/migration-guides/0.13.0/typography-heading-scale-shift.md +93 -0
  22. package/dist/migration-guides/README.md +6 -0
  23. package/dist/src/components/Accordion/Accordion.d.ts +1 -0
  24. package/dist/src/components/Analytics/Bar/Bar.d.ts +12 -7
  25. package/dist/src/components/Analytics/BarGroup/BarGroup.d.ts +23 -16
  26. package/dist/src/components/Analytics/Card/Card.d.ts +14 -3
  27. package/dist/src/components/Analytics/ErrorTag/ErrorTag.d.ts +1 -0
  28. package/dist/src/components/Analytics/Histogram/Histogram.d.ts +9 -6
  29. package/dist/src/components/Analytics/Histogram/utils.d.ts +10 -0
  30. package/dist/src/components/AutocompleteInput/AutocompleteInputValue.d.ts +1 -0
  31. package/dist/src/components/Breadcrumb/Breadcrumb.d.ts +1 -0
  32. package/dist/src/components/Breadcrumb/BreadcrumbItem.d.ts +3 -0
  33. package/dist/src/components/Button/Button.d.ts +1 -0
  34. package/dist/src/components/Button/ButtonWrappers.d.ts +1 -15
  35. package/dist/src/components/ButtonDropdown/ButtonDropdown.d.ts +1 -0
  36. package/dist/src/components/CaptionText/CaptionText.d.ts +1 -0
  37. package/dist/src/components/Checkbox/Checkbox.d.ts +1 -0
  38. package/dist/src/components/CloseButton/CloseButton.d.ts +1 -0
  39. package/dist/src/components/CollapsibleSidebar/CollapsibleSidebar.d.ts +1 -0
  40. package/dist/src/components/ConfirmationPopup/ConfirmationPopup.d.ts +1 -0
  41. package/dist/src/components/DraggableItem/DraggableItem.d.ts +1 -0
  42. package/dist/src/components/DropdownIcon/DropdownIcon.d.ts +1 -0
  43. package/dist/src/components/EllipsisTooltip/EllipsisTooltip.d.ts +1 -0
  44. package/dist/src/components/FabButton/FabButton.d.ts +8 -3
  45. package/dist/src/components/FileIcon/FileIcon.d.ts +1 -0
  46. package/dist/src/components/FileManager/FileManager.d.ts +3 -0
  47. package/dist/src/components/FileManager/FileManagerProvider.d.ts +1 -0
  48. package/dist/src/components/FileManager/components/DestinationFolderPopup/DestinationFolderPopup.d.ts +3 -0
  49. package/dist/src/components/FileManager/components/FoldersTree/FoldersTree.d.ts +3 -0
  50. package/dist/src/components/FileManager/hooks/use-file-manager-context.d.ts +2 -0
  51. package/dist/src/components/FileManager/hooks/use-file-manager-tabs.d.ts +3 -0
  52. package/dist/src/components/FileName/FileName.d.ts +1 -0
  53. package/dist/src/components/FolderName/FolderName.d.ts +1 -0
  54. package/dist/src/components/FormItem/FormItem.d.ts +1 -0
  55. package/dist/src/components/FormPopup/FormPopup.d.ts +1 -0
  56. package/dist/src/components/Grid/Grid.d.ts +1 -0
  57. package/dist/src/components/Grid/comparators/base-column-comparator.d.ts +1 -0
  58. package/dist/src/components/Grid/renderers/DateCellRenderer.d.ts +1 -0
  59. package/dist/src/components/Icon/Icon.d.ts +1 -0
  60. package/dist/src/components/IconButton/IconButton.d.ts +5 -0
  61. package/dist/src/components/IconButton/IconButtonWrappers.d.ts +1 -0
  62. package/dist/src/components/Input/Input.d.ts +1 -0
  63. package/dist/src/components/InputPopup/InputPopup.d.ts +1 -0
  64. package/dist/src/components/JsonEditor/JsonEditor.d.ts +1 -0
  65. package/dist/src/components/Label/Label.d.ts +1 -0
  66. package/dist/src/components/LabelledText/LabelledText.d.ts +1 -0
  67. package/dist/src/components/LoadFileArea/LoadFileArea.d.ts +1 -0
  68. package/dist/src/components/LoadFileArea/LoadFileAreaField.d.ts +1 -0
  69. package/dist/src/components/Loader/Loader.d.ts +1 -0
  70. package/dist/src/components/MarkdownEditor/MarkdownEditor.d.ts +1 -0
  71. package/dist/src/components/New/Accordion/Accordion.d.ts +71 -0
  72. package/dist/src/components/New/Button/Button.d.ts +66 -0
  73. package/dist/src/components/New/Button/ButtonWrappers.d.ts +94 -0
  74. package/dist/src/components/New/Button/__tests__/utils.spec.d.ts +1 -0
  75. package/dist/src/components/New/Button/constants.d.ts +2 -0
  76. package/dist/src/components/New/Button/utils.d.ts +2 -0
  77. package/dist/src/components/New/ButtonDropdown/ButtonDropdown.d.ts +24 -0
  78. package/dist/src/components/New/ButtonDropdown/constants.d.ts +1 -0
  79. package/dist/src/components/New/Calendar/Calendar.d.ts +55 -0
  80. package/dist/src/components/New/Calendar/constants.d.ts +17 -0
  81. package/dist/src/components/New/Calendar/utils.d.ts +25 -0
  82. package/dist/src/components/New/Calendar/utils.spec.d.ts +1 -0
  83. package/dist/src/components/New/CaptionText/CaptionText.d.ts +21 -0
  84. package/dist/src/components/New/CardShell/CardShell.d.ts +14 -0
  85. package/dist/src/components/New/CloseButton/CloseButton.d.ts +33 -0
  86. package/dist/src/components/New/ConfirmationPopup/ConfirmationPopup.d.ts +55 -0
  87. package/dist/src/components/New/ConfirmationPopup/constants.d.ts +14 -0
  88. package/dist/src/components/New/Dropdown/Dropdown.d.ts +87 -0
  89. package/dist/src/components/New/Dropdown/DropdownSubMenuItem.d.ts +8 -0
  90. package/dist/src/components/New/Dropdown/constants.d.ts +9 -0
  91. package/dist/src/components/New/FileDropzone/FileDropzone.d.ts +81 -0
  92. package/dist/src/components/New/FolderPath/FolderPath.d.ts +32 -0
  93. package/dist/src/components/New/Highlight/Highlight.d.ts +19 -0
  94. package/dist/src/components/New/IconButton/IconButton.d.ts +48 -0
  95. package/dist/src/components/New/IconButton/IconButtonWrappers.d.ts +71 -0
  96. package/dist/src/components/New/InfoButton/InfoButton.d.ts +26 -0
  97. package/dist/src/components/New/InfoButton/InfoButton.stories.d.ts +6 -0
  98. package/dist/src/components/New/InlineSelect/InlineSelect.d.ts +51 -0
  99. package/dist/src/components/New/Input/Button/InputButton.d.ts +25 -0
  100. package/dist/src/components/New/Input/Button/constants.d.ts +1 -0
  101. package/dist/src/components/New/Input/Input.d.ts +67 -0
  102. package/dist/src/components/New/Input/utils.d.ts +2 -0
  103. package/dist/src/components/New/Label/Label.d.ts +33 -0
  104. package/dist/src/components/New/MarkdownEditor/MarkdownEditor.d.ts +33 -0
  105. package/dist/src/components/New/MarkdownEditor/constants.d.ts +20 -0
  106. package/dist/src/components/New/Notification/Notification.d.ts +7 -0
  107. package/dist/src/components/New/Notification/constants.d.ts +12 -1
  108. package/dist/src/components/New/NumberInput/NumberInput.d.ts +36 -0
  109. package/dist/src/components/New/PasswordInput/PasswordInput.d.ts +33 -0
  110. package/dist/src/components/New/Popup/Popup.d.ts +72 -0
  111. package/dist/src/components/New/Popup/constants.d.ts +10 -0
  112. package/dist/src/components/New/Search/Search.d.ts +42 -0
  113. package/dist/src/components/New/Select/MultiSelectTags.d.ts +17 -0
  114. package/dist/src/components/New/Select/Select.d.ts +110 -0
  115. package/dist/src/components/New/Select/SelectSubMenuItem.d.ts +8 -0
  116. package/dist/src/components/New/Select/constants.d.ts +32 -0
  117. package/dist/src/components/New/Switch/Switch.d.ts +38 -0
  118. package/dist/src/components/New/Tabs/Tabs.d.ts +63 -0
  119. package/dist/src/components/New/Tag/Tag.d.ts +45 -0
  120. package/dist/src/components/New/TagInput/TagInput.d.ts +72 -0
  121. package/dist/src/components/New/TagInput/utils.d.ts +21 -0
  122. package/dist/src/components/New/TagInput/utils.spec.d.ts +1 -0
  123. package/dist/src/components/New/Textarea/Textarea.d.ts +39 -0
  124. package/dist/src/components/New/constants/overlay.d.ts +24 -0
  125. package/dist/src/components/NoDataContent/NoDataContent.d.ts +1 -0
  126. package/dist/src/components/Notification/Notification.d.ts +1 -0
  127. package/dist/src/components/NumberInput/NumberInput.d.ts +1 -0
  128. package/dist/src/components/Pagination/Pagination.d.ts +3 -0
  129. package/dist/src/components/PasswordInput/PasswordInput.d.ts +1 -0
  130. package/dist/src/components/Popup/Popup.d.ts +2 -1
  131. package/dist/src/components/ProgressBar/ProgressBar.d.ts +51 -10
  132. package/dist/src/components/RadioButton/RadioButton.d.ts +1 -0
  133. package/dist/src/components/RadioGroup/RadioGroup.d.ts +1 -0
  134. package/dist/src/components/RadioGroupPopupField/RadioGroupPopupField.d.ts +1 -0
  135. package/dist/src/components/RemoveButton/RemoveButton.d.ts +1 -0
  136. package/dist/src/components/ResizableContainer/ConditionalResizableContainer.d.ts +1 -0
  137. package/dist/src/components/ResizableContainer/ResizableContainer.d.ts +1 -0
  138. package/dist/src/components/SchemaRenderer/SchemaRenderer.d.ts +1 -0
  139. package/dist/src/components/SchemaRenderer/components/SchemaKeyValueEditor.d.ts +9 -1
  140. package/dist/src/components/SchemaRenderer/types.d.ts +6 -1
  141. package/dist/src/components/SchemaRenderer/utils.d.ts +1 -0
  142. package/dist/src/components/Search/Search.d.ts +1 -0
  143. package/dist/src/components/SegmentedControl/SegmentedControl.d.ts +1 -0
  144. package/dist/src/components/Select/Select.d.ts +1 -0
  145. package/dist/src/components/SelectField/SelectField.d.ts +1 -0
  146. package/dist/src/components/SharedEntityIndicator/SharedEntityIndicator.d.ts +1 -0
  147. package/dist/src/components/Skeleton/Skeleton.d.ts +19 -18
  148. package/dist/src/components/Skeleton/utils.d.ts +2 -2
  149. package/dist/src/components/Slider/Slider.d.ts +1 -0
  150. package/dist/src/components/Spinner/Spinner.d.ts +5 -2
  151. package/dist/src/components/Steps/Steps.d.ts +1 -0
  152. package/dist/src/components/Switch/Switch.d.ts +1 -0
  153. package/dist/src/components/Tabs/Tabs.d.ts +1 -0
  154. package/dist/src/components/Tag/Tag.d.ts +1 -0
  155. package/dist/src/components/TagInput/TagInput.d.ts +1 -0
  156. package/dist/src/components/Textarea/Textarea.d.ts +1 -0
  157. package/dist/src/components/Tooltip/Tooltip.d.ts +1 -0
  158. package/dist/src/components/Tooltip/TooltipContainer.d.ts +1 -0
  159. package/dist/src/components/Tooltip/TooltipContent.d.ts +1 -0
  160. package/dist/src/components/Tooltip/TooltipTrigger.d.ts +1 -0
  161. package/dist/src/index.d.ts +89 -13
  162. package/dist/src/mcp/types.d.ts +12 -0
  163. package/dist/src/models/dropdown.d.ts +27 -0
  164. package/dist/src/types/button.d.ts +1 -0
  165. package/dist/src/types/calendar.d.ts +6 -0
  166. package/dist/src/types/skeleton.d.ts +3 -3
  167. package/dist/src/utils/__tests__/accessible-name.spec.d.ts +1 -0
  168. package/dist/src/utils/__tests__/file-accept.spec.d.ts +1 -0
  169. package/dist/src/utils/accessible-name.d.ts +19 -0
  170. package/dist/src/utils/file-accept.d.ts +16 -0
  171. package/dist/src/utils/sub-menu-floating.d.ts +15 -2
  172. package/package.json +4 -2
  173. package/dist/index-CmA_N28F.cjs +0 -71
@@ -0,0 +1,110 @@
1
+ import { FC, MouseEvent, ReactNode, Ref } from 'react';
2
+ import { LabelProps } from '../Label/Label';
3
+ import { SelectOption } from '../../../models/select';
4
+ import { ElementSize } from '../../../types/size';
5
+ export interface SelectProps {
6
+ options: SelectOption[];
7
+ multiple?: boolean;
8
+ id?: string;
9
+ size?: ElementSize;
10
+ value?: string | string[];
11
+ customSelectedValue?: string;
12
+ prefix?: string;
13
+ defaultValue?: string | string[];
14
+ placeholder?: string;
15
+ labelProps?: LabelProps;
16
+ error?: string;
17
+ caption?: string;
18
+ ariaLabel?: string;
19
+ searchable?: boolean;
20
+ searchSize?: ElementSize;
21
+ searchPlaceholder?: string;
22
+ selectAll?: boolean;
23
+ selectAllLabel?: string;
24
+ emptyStateTitle?: string;
25
+ emptyStateDescription?: string;
26
+ emptyStateIcon?: ReactNode;
27
+ disabled?: boolean;
28
+ className?: string;
29
+ fieldClassName?: string;
30
+ listClassName?: string;
31
+ closable?: boolean;
32
+ invalid?: boolean;
33
+ header?: ReactNode | (() => ReactNode);
34
+ footer?: ReactNode | (() => ReactNode);
35
+ open?: boolean;
36
+ onOpenChange?: (open: boolean) => void;
37
+ onSearchQueryChange?: (query: string) => void;
38
+ dismissRef?: Ref<unknown>;
39
+ onClose?: (e: MouseEvent<HTMLButtonElement>) => void;
40
+ onChange?: (next: string | string[]) => void;
41
+ onFooterClick?: (e: MouseEvent<HTMLDivElement>) => void;
42
+ customMultiSelectTagsRenderer?: (options: SelectOption[], selectedValues: string[], handleRemoveTag: (event: MouseEvent<HTMLButtonElement, globalThis.MouseEvent>, val: string) => void) => ReactNode;
43
+ }
44
+ /**
45
+ * A versatile select supporting single and multiple selections.
46
+ * aliases: OptionPicker|ChoiceSelector
47
+ * Design system 2.0
48
+ *
49
+ * The field is an {@link Input}, so it carries the 2.0 field styling, sizes,
50
+ * label, caption and error states, and it exposes the control as a `combobox`
51
+ * whose popup is the option list.
52
+ *
53
+ * Single mode:
54
+ * - The field shows the selected option's leading icon + label.
55
+ * - In the list, the selected option is indicated by a LEFT border, a tinted background
56
+ * and a trailing check icon.
57
+ *
58
+ * Multiple mode uses checkboxes (including Select All with indeterminate state) and
59
+ * renders the selection as removable tags inside the field.
60
+ *
61
+ * The field itself is never typeable: `searchable` puts a search field in the overlay
62
+ * header that filters the options.
63
+ *
64
+ * @example
65
+ * ```tsx
66
+ * <Select options={[{ value: 'option-1', label: 'Option 1' }]} />
67
+ * <Select searchable options={[{ value: 'a', label: 'Alpha' }, { value: 'b', label: 'Beta' }]} />
68
+ * <Select multiple selectAll options={[{ value: '1', label: 'One' }, { value: '2', label: 'Two' }]} />
69
+ * <Select labelProps={{ label: 'Operator' }} caption="Pick a comparison" options={options} />
70
+ * ```
71
+ *
72
+ * @param options - Array of options to select from.
73
+ * @param [id] - The id of the field, linked to the label.
74
+ * @param [multiple] - Whether multiple selections are allowed.
75
+ * @param [size=ElementSize.Standard] - Field height: standard is 40px, small is 24px.
76
+ * @param [value] - Controlled selected value(s).
77
+ * @param [customSelectedValue] - Custom string to render as the selected value in single mode.
78
+ * @param [prefix] - Prefix for selected value(s).
79
+ * @param [defaultValue] - Uncontrolled initial selected value(s).
80
+ * @param [placeholder="Select..."] - Placeholder text when no selection is made.
81
+ * @param [labelProps] - Props of the {@link Label} rendered above the field.
82
+ * @param [error] - Error message rendered below the field (does not by itself apply error styling, pass `invalid` too).
83
+ * @param [caption] - Helper text rendered below the field when there is no `error`.
84
+ * @param [ariaLabel] - Accessible name for the field; use it when there is no visible label.
85
+ * @param [searchable=false] - Show a search field in the overlay header.
86
+ * @param [searchSize=ElementSize.Standard] - Size of the overlay search input when `searchable` is enabled.
87
+ * @param [searchPlaceholder] - Placeholder for the overlay search input.
88
+ * @param [selectAll=false] - Show a "Select All" checkbox in multiple mode.
89
+ * @param [selectAllLabel="Select all"] - Label for the "Select All" checkbox.
90
+ * @param [emptyStateTitle="No options available"] - Title text when there are no options.
91
+ * @param [emptyStateDescription] - Description text when there are no options.
92
+ * @param [emptyStateIcon] - Icon to display when there are no options.
93
+ * @param [invalid] - Whether the select is in an invalid state, affecting styling.
94
+ * @param [disabled=false] - Disable the control.
95
+ * @param [className] - Additional CSS classes for the outer container.
96
+ * @param [fieldClassName] - Additional CSS classes for the field itself.
97
+ * @param [listClassName] - Additional CSS classes for the list dropdown.
98
+ * @param [closable=false] - Show a close button in the dropdown header.
99
+ * @param [header] - Custom node/function rendered above the options.
100
+ * @param [footer] - Custom node/function rendered below the options.
101
+ * @param [open] - Controlled open state of the dropdown. When provided, makes the dropdown controlled.
102
+ * @param [onOpenChange] - Called when the dropdown open state changes.
103
+ * @param [onClose] - Called when the dropdown close button is clicked.
104
+ * @param [onChange] - Called when the selection changes.
105
+ * @param [onSearchQueryChange] - Called when the overlay search query changes, including the reset to `''` on close. Use it to fetch options for the query.
106
+ * @param [onFooterClick] - Called when the footer element is clicked. When provided, automatically closes the dropdown.
107
+ * @param [dismissRef] - Ref object to expose a `dismiss` method to programmatically close the select.
108
+ * @param [customMultiSelectTagsRenderer] - Renders the selected tags of a multi-select in place of the default ones.
109
+ */
110
+ export declare const Select: FC<SelectProps>;
@@ -0,0 +1,8 @@
1
+ import { FC } from 'react';
2
+ import { SelectOption } from '../../../models/select';
3
+ export interface SelectSubMenuItemProps {
4
+ opt: SelectOption;
5
+ selectedValues: string[];
6
+ onSelect: (value: string) => void;
7
+ }
8
+ export declare const SelectSubMenuItem: FC<SelectSubMenuItemProps>;
@@ -0,0 +1,32 @@
1
+ export declare const selectOverlayBaseClassName: string;
2
+ export declare const selectOptionBaseClassName: string;
3
+ export declare const selectOptionSelectedClassName = "bg-control-accent-alpha-hover";
4
+ /**
5
+ * Holds the option list to the width of the field.
6
+ *
7
+ * `Dropdown` only pins the overlay's *min* width to the trigger and lets
8
+ * `max-width` run to the available viewport width — as an inline style, so a
9
+ * single long label stretches the list across the screen and only `!important`
10
+ * can rein it back in. `--reference-width` is the trigger width the dropdown
11
+ * publishes, and it is set whenever `matchReferenceWidth` is left on (the
12
+ * default this component relies on).
13
+ */
14
+ export declare const selectListWidthClassName = "!max-w-[var(--reference-width)]";
15
+ export declare const selectOptionDisabledClassName = "opacity-75";
16
+ export declare const dropdownMenuMaxHeight = 352;
17
+ export declare const selectSubMenuGap = 4;
18
+ export declare const selectSubMenuClassName: string;
19
+ /** Marks an option that opens a nested list. Matches the dropdown's caret. */
20
+ export declare const selectSubMenuCaretIcon: import("react/jsx-runtime").JSX.Element;
21
+ /** Classes for the chevron rendered as the field's trailing icon. */
22
+ export declare const selectFieldIconClassName = "text-secondary transition-transform";
23
+ /**
24
+ * Number of options below which the overlay's search row stays hidden: a list
25
+ * short enough to scan at a glance does not need to be filtered.
26
+ */
27
+ export declare const selectSearchThreshold = 8;
28
+ export declare const selectSearchIcon: import("react/jsx-runtime").JSX.Element;
29
+ export declare const selectCloseIcon: import("react/jsx-runtime").JSX.Element;
30
+ /** Marks the selected option in single mode, alongside its tinted row. */
31
+ export declare const selectOptionCheckIcon: import("react/jsx-runtime").JSX.Element;
32
+ export declare const selectEmptyStateIcon: import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,38 @@
1
+ import { FC, InputHTMLAttributes } from 'react';
2
+ import { LabelProps } from '../Label/Label';
3
+ type NativeInputProps = Omit<InputHTMLAttributes<HTMLInputElement>, 'type' | 'checked' | 'onChange' | 'size'>;
4
+ export interface SwitchProps extends NativeInputProps {
5
+ labelProps?: LabelProps;
6
+ isOn?: boolean;
7
+ disabled?: boolean;
8
+ onChange?: (value: boolean) => void;
9
+ caption?: string;
10
+ }
11
+ /**
12
+ * A switch (toggle) control from the 2.0 design system.
13
+ * aliases: ToggleSwitch|BinaryToggle|Switcher
14
+ * Design system 2.0
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * <Switch
19
+ * id="notifications"
20
+ * labelProps={{ label: 'Active' }}
21
+ * isOn={isActive}
22
+ * onChange={setIsActive}
23
+ * />
24
+ * ```
25
+ *
26
+ * The track and the label text are two sibling `<label for>` elements rather
27
+ * than one wrapper, so the {@link Label} keeps its own `required` marker and
28
+ * `caption` info button — a button nested in a label forwards its clicks to the
29
+ * labelled control. Clicking either one still toggles the switch.
30
+ *
31
+ * @param [labelProps] - Props of the {@link Label} rendered next to the control
32
+ * @param [isOn=false] - The current value of the switch
33
+ * @param [disabled=false] - Whether the switch is disabled
34
+ * @param [onChange] - Callback fired with the new value when toggled
35
+ * @param [caption] - Caption text rendered below the label, and described by the switch
36
+ */
37
+ export declare const Switch: FC<SwitchProps>;
38
+ export {};
@@ -0,0 +1,63 @@
1
+ import { FC } from 'react';
2
+ /** A single tab entry rendered by {@link Tabs}. */
3
+ export interface TabItem {
4
+ /** Unique identifier used to match against `activeTabId`. */
5
+ id: string;
6
+ /** Visible label text for the tab. */
7
+ label: string;
8
+ /** Optional numeric badge rendered after the label. */
9
+ count?: number;
10
+ /** Renders the tab greyed out and unselectable, and skips it during keyboard navigation. */
11
+ disabled?: boolean;
12
+ }
13
+ export interface TabsProps {
14
+ /** Ordered list of tabs to render. */
15
+ tabs: TabItem[];
16
+ /** ID of the currently selected tab. */
17
+ activeTabId: string;
18
+ /** Fired with the tab's `id` when the user selects a tab. */
19
+ onTabChange: (tabId: string) => void;
20
+ /**
21
+ * Accessible name for the tab list. A row of tabs carries no name of its own,
22
+ * so screen readers announce it as an unlabelled list without this.
23
+ */
24
+ ariaLabel?: string;
25
+ /** Additional CSS classes for the tab list container. */
26
+ className?: string;
27
+ /** Additional CSS classes applied to every tab. */
28
+ tabClassName?: string;
29
+ }
30
+ /**
31
+ * A horizontal row of tabs, underlining the active one and showing optional count badges.
32
+ * aliases: TabRow|TabNavigation|TabBar
33
+ * Design system 2.0
34
+ *
35
+ * Follows the ARIA tabs pattern with automatic activation: only the active tab is
36
+ * in the tab order, and the arrow keys move both focus and selection. `Home` and
37
+ * `End` jump to the first and last tab, and the arrows wrap around the ends.
38
+ * Tabs marked `disabled` are greyed out, cannot be clicked, and are skipped by
39
+ * keyboard navigation.
40
+ *
41
+ * The component renders the tabs only; the panels stay with the consumer.
42
+ *
43
+ * @example
44
+ * ```tsx
45
+ * <Tabs
46
+ * ariaLabel="Conversation views"
47
+ * tabs={[
48
+ * { id: 'all', label: 'All', count: 12 },
49
+ * { id: 'shared', label: 'Shared with me' },
50
+ * ]}
51
+ * activeTabId={activeTabId}
52
+ * onTabChange={setActiveTabId}
53
+ * />
54
+ * ```
55
+ *
56
+ * @param tabs - Ordered list of tabs to render.
57
+ * @param activeTabId - ID of the currently selected tab.
58
+ * @param onTabChange - Fired with the tab's `id` when the user selects a tab.
59
+ * @param [ariaLabel] - Accessible name for the tab list.
60
+ * @param [className] - Additional CSS classes for the tab list container.
61
+ * @param [tabClassName] - Additional CSS classes applied to every tab.
62
+ */
63
+ export declare const Tabs: FC<TabsProps>;
@@ -0,0 +1,45 @@
1
+ import { FC, HTMLAttributes, MouseEvent, ReactNode } from 'react';
2
+ import { ElementSize } from '../../../types/size';
3
+ type NativeTagProps = Omit<HTMLAttributes<HTMLSpanElement>, 'children'>;
4
+ export interface TagProps extends NativeTagProps {
5
+ label: string;
6
+ icon?: ReactNode;
7
+ size?: ElementSize;
8
+ selected?: boolean;
9
+ disabled?: boolean;
10
+ closable?: boolean;
11
+ removeLabel?: string;
12
+ onRemove?: (event: MouseEvent<HTMLButtonElement>) => void;
13
+ }
14
+ /**
15
+ * A compact label element used for selections, filters, or categories.
16
+ * aliases: Chip|Pill
17
+ * Design system 2.0
18
+ *
19
+ * The label truncates rather than wrapping, and carries a native `title` so the
20
+ * full text stays reachable when it does.
21
+ *
22
+ * A tag with `onClick` becomes a `role="button"` operable with Enter and Space.
23
+ * Its remove control is a real nested `<button>`, so keep the two roles apart in
24
+ * the caller: a clickable tag that is also closable gives a screen reader two
25
+ * actions with no way to tell which one it landed on.
26
+ *
27
+ * @example
28
+ * ```tsx
29
+ * <Tag label="TypeScript" />
30
+ * <Tag label="TypeScript" closable onRemove={() => remove('TypeScript')} />
31
+ * <Tag label="Drafts" selected onClick={() => toggle('Drafts')} />
32
+ * ```
33
+ *
34
+ * @param label - Text content displayed inside the tag.
35
+ * @param [icon] - Icon rendered before the label.
36
+ * @param [size=ElementSize.Standard] - Tag height: standard is 24px, small is 20px.
37
+ * @param [selected=false] - Applies the accent-tinted selected styling.
38
+ * @param [disabled=false] - Dims the tag and suppresses the remove control and click handling.
39
+ * @param [closable=false] - Renders the remove button. Needs `onRemove` to appear.
40
+ * @param [removeLabel] - Accessible name of the remove button; defaults to `Remove <label>`.
41
+ * @param [onRemove] - Called when the remove button is clicked. The click does not bubble to `onClick`.
42
+ * @param [onClick] - Called when the tag itself is activated. Makes the tag a button.
43
+ */
44
+ export declare const Tag: FC<TagProps>;
45
+ export {};
@@ -0,0 +1,72 @@
1
+ import { FC } from 'react';
2
+ import { ElementSize } from '../../../types/size';
3
+ import { LabelProps } from '../Label/Label';
4
+ export interface TagInputProps {
5
+ id?: string;
6
+ /** Controlled tag list. Pass it together with `onChange`. */
7
+ value?: string[];
8
+ /** Initial tag list when the component manages its own state. */
9
+ defaultValue?: string[];
10
+ size?: ElementSize;
11
+ labelProps?: LabelProps;
12
+ placeholder?: string;
13
+ caption?: string;
14
+ error?: string;
15
+ invalid?: boolean;
16
+ disabled?: boolean;
17
+ readOnly?: boolean;
18
+ collapseTagOverflow?: boolean;
19
+ ariaLabel?: string;
20
+ tagListLabel?: string;
21
+ className?: string;
22
+ fieldClassName?: string;
23
+ tagClassName?: string;
24
+ onChange?: (tags: string[]) => void;
25
+ }
26
+ /**
27
+ * A tag input field: type a value and commit it with Enter or comma.
28
+ * aliases: MultiTag|TagField|ChipInput
29
+ * Design system 2.0
30
+ *
31
+ * The field is an {@link Input}, so it carries the 2.0 field styling, sizes,
32
+ * label, caption and error states, and the tags render as {@link Tag}s in its
33
+ * content slot. The field grows as tags wrap, unless `collapseTagOverflow` keeps
34
+ * them on one line behind a `+N` chip.
35
+ *
36
+ * Works controlled (`value` + `onChange`) or uncontrolled (`defaultValue`).
37
+ * Duplicate tags are ignored. Backspace on an empty input removes the last tag.
38
+ *
39
+ * @example
40
+ * ```tsx
41
+ * const [tags, setTags] = useState<string[]>(['React']);
42
+ *
43
+ * <TagInput
44
+ * id="skills"
45
+ * labelProps={{ label: 'Skills' }}
46
+ * placeholder="Add a skill"
47
+ * caption="Press Enter or comma to add"
48
+ * value={tags}
49
+ * onChange={setTags}
50
+ * />
51
+ * ```
52
+ *
53
+ * @param [id] - The id of the text input, linked to the label.
54
+ * @param [value] - Controlled tag list.
55
+ * @param [defaultValue=[]] - Initial tag list when uncontrolled.
56
+ * @param [size=ElementSize.Standard] - Field height: standard is 40px, small is 24px.
57
+ * @param [labelProps] - Props of the {@link Label} rendered above the field.
58
+ * @param [placeholder] - Placeholder shown while there are no tags.
59
+ * @param [caption] - Helper text rendered below the field when there is no `error`.
60
+ * @param [error] - Error message rendered below the field (pass `invalid` too for error styling).
61
+ * @param [invalid=false] - Applies the field's error styling.
62
+ * @param [disabled=false] - Disables typing and tag removal.
63
+ * @param [readOnly=false] - Shows the tags without allowing new ones or removal.
64
+ * @param [collapseTagOverflow=false] - Keep the tags on one line, replacing the ones that do not fit with a `+N` chip.
65
+ * @param [ariaLabel] - Accessible name for the text input; use it when there is no visible label.
66
+ * @param [tagListLabel="Tags"] - Accessible name of the tag list.
67
+ * @param [className] - Additional CSS classes for the outer container.
68
+ * @param [fieldClassName] - Additional CSS classes for the field itself.
69
+ * @param [tagClassName] - Additional CSS classes applied to every tag.
70
+ * @param [onChange] - Called with the new list whenever a tag is added or removed.
71
+ */
72
+ export declare const TagInput: FC<TagInputProps>;
@@ -0,0 +1,21 @@
1
+ export interface VisibleTagCountInput {
2
+ /** Width the tags have to fit into, in px. */
3
+ availableWidth: number;
4
+ /** Rendered width of every tag, in render order. */
5
+ tagWidths: number[];
6
+ /** Rendered width of the `+N` chip shown when not every tag fits. */
7
+ overflowChipWidth: number;
8
+ /** Horizontal gap between two neighbouring tags. */
9
+ gap: number;
10
+ }
11
+ /**
12
+ * How many tags of a collapsed row fit before the `+N` chip has to take over.
13
+ *
14
+ * Kept pure and separate from the component because jsdom performs no layout:
15
+ * the widths come from the DOM, but the arithmetic they feed is the part worth
16
+ * testing.
17
+ *
18
+ * A non-positive `availableWidth` means nothing has been laid out yet, so every
19
+ * tag is reported as visible and the caller is expected to skip the update.
20
+ */
21
+ export declare const getVisibleTagCount: ({ availableWidth, tagWidths, overflowChipWidth, gap, }: VisibleTagCountInput) => number;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,39 @@
1
+ import { DetailedHTMLProps, FC, TextareaHTMLAttributes } from 'react';
2
+ import { LabelProps } from '../Label/Label';
3
+ export interface TextareaProps extends DetailedHTMLProps<Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, 'onChange'>, HTMLTextAreaElement> {
4
+ labelProps?: LabelProps;
5
+ invalid?: boolean;
6
+ containerClassName?: string;
7
+ resize?: boolean;
8
+ error?: string;
9
+ caption?: string;
10
+ onChange?: (value: string) => void;
11
+ }
12
+ /**
13
+ * A flexible textarea component with validation support and consistent styling
14
+ * aliases: MultilineInput|TextBox
15
+ * Design system 2.0
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * <DialTextarea
20
+ * id="description"
21
+ * placeholder="Enter description..."
22
+ * value={value}
23
+ * onChange={(value) => setValue(value)}
24
+ * />
25
+ * ```
26
+ * @params Component properties extending:
27
+ * - {@link TextareaHTMLAttributes<HTMLTextAreaElement>} - Standard textarea attributes (id, value, placeholder, disabled, etc.)
28
+ * - {@link HTMLTextAreaElement} - The underlying HTML textarea element type
29
+ *
30
+ * @param [onChange] - Callback function called when the textarea value changes
31
+ * @param [labelProps] - Props for the field label, including `label` (label text) and `required` (whether to show required indicator)
32
+ * @param [className=""] - Additional CSS classes to apply to the textarea element
33
+ * @param [containerClassName=""] - Additional CSS classes to apply to the container div
34
+ * @param [invalid=false] - Whether the textarea has validation errors (applies error styling)
35
+ * @param [resize=false] - Whether the textarea has possibility to resize
36
+ * @param [error] - Error message to display below the textarea (also adds error styling)
37
+ * @param [caption] - Optional caption text to display below the textarea
38
+ */
39
+ export declare const Textarea: FC<TextareaProps>;
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Styling shared by the 2.0 floating surfaces — the dropdown menu and the select
3
+ * option list. They are the same object visually, so they read from one place
4
+ * rather than each keeping its own copy of the tokens.
5
+ */
6
+ /** The floating panel itself: rounded raised card with a one-unit inset. */
7
+ export declare const overlaySurfaceClassName = "rounded-xl bg-layer-raised p-1 shadow-md";
8
+ /**
9
+ * A nested panel opened from a row of the surface above it. It is the same
10
+ * object as its parent panel, so it reads from `overlaySurfaceClassName` too —
11
+ * only the width behaviour differs, since a submenu is sized by its own content
12
+ * rather than by the trigger further up.
13
+ */
14
+ export declare const overlaySubMenuClassName: string;
15
+ /**
16
+ * A selectable row inside the panel. Keeps a visible focus ring: these rows are
17
+ * reached by keyboard, and the 1.0 versions suppressed the ring outright.
18
+ */
19
+ export declare const overlayItemClassName: string;
20
+ /** Tint marking the row that is currently selected. */
21
+ export declare const overlayItemSelectedClassName = "bg-control-accent-alpha-hover";
22
+ export declare const overlayItemDisabledClassName = "opacity-75";
23
+ /** Distance between the trigger and its panel, and between nested panels. */
24
+ export declare const overlayGap = 4;
@@ -10,6 +10,7 @@ export interface DialNoDataContentProps {
10
10
  /**
11
11
  * A component for displaying a message and icon when there is no data to show.
12
12
  * aliases: EmptyState|NoResults
13
+ * Design system 1.0
13
14
  *
14
15
  * @example
15
16
  * ```tsx
@@ -13,6 +13,7 @@ export interface DialNotificationProps extends Omit<HTMLAttributes<HTMLDivElemen
13
13
  /**
14
14
  * A contextual feedback component for displaying important messages.
15
15
  * aliases: Notification|StatusBanner
16
+ * Design system 1.0
16
17
  *
17
18
  * Renders a colored container with an icon, message text, and an optional
18
19
  * close button.
@@ -8,6 +8,7 @@ export interface DialNumberInputProps extends Omit<DialInputProps, 'onChange'> {
8
8
  /**
9
9
  * A number input field component
10
10
  * aliases: NumericField|NumberField
11
+ * Design system 1.0
11
12
  *
12
13
  * @example
13
14
  * ```tsx
@@ -5,4 +5,7 @@ export interface DialPaginationProps {
5
5
  onPageChange: (page: number) => void;
6
6
  className?: string;
7
7
  }
8
+ /**
9
+ * Design system 1.0
10
+ */
8
11
  export declare const DialPagination: FC<DialPaginationProps>;
@@ -3,6 +3,7 @@ import { DialInputProps } from '../Input/Input';
3
3
  /**
4
4
  * A password input component with show/hide functionality and customizable props.
5
5
  * aliases: SecureInput|ToggleablePassword
6
+ * Design system 1.0
6
7
  *
7
8
  * @example
8
9
  * ```tsx
@@ -21,6 +21,7 @@ export interface DialPopupProps {
21
21
  /**
22
22
  * An accessible modal dialog component using Floating UI.
23
23
  * aliases: Modal|Dialog
24
+ * Design system 1.0
24
25
  *
25
26
  * Renders in a portal with a scrim overlay, focus management, header with a title,
26
27
  * content area, optional footer and a close control.
@@ -58,6 +59,6 @@ export interface DialPopupProps {
58
59
  * @param [size=PopupSize.Md] - Sets the max-width of the popup
59
60
  * @param [hideClose=false] Whether the close button is hidden in the header (default: false)
60
61
  * @param [closeOnOutsideClick=true] - Whether the popup closes when clicking outside (default: true)
61
- * @param [preventKeyboardOnOpen=false] - When true, initial focus goes to a non-input guard to avoid opening the virtual keyboard on mobile
62
+ * @param [preventKeyboardOnOpen=false] - When true, initial focus goes to a non-input guard to avoid opening the virtual keyboard on mobile. Redundant since the default focuses the dialog container, which never raises the keyboard; kept for compatibility
62
63
  */
63
64
  export declare const DialPopup: FC<DialPopupProps>;
@@ -1,13 +1,54 @@
1
- import { FC } from 'react';
2
- export declare enum DialProgressBarSize {
3
- Small = "sm",
4
- Medium = "md"
5
- }
6
- export interface DialProgressBarProps {
1
+ import { FC, HTMLAttributes, ReactNode } from 'react';
2
+ import { LabelProps } from '../New/Label/Label';
3
+ import { ElementSize } from '../../types/size';
4
+ type NativeProgressBarProps = Omit<HTMLAttributes<HTMLDivElement>, 'children'>;
5
+ export interface ProgressBarProps extends NativeProgressBarProps {
7
6
  value: number;
8
7
  max?: number;
9
- size?: DialProgressBarSize;
10
- className?: string;
11
- ariaLabel?: string;
8
+ size?: ElementSize;
9
+ labelProps?: LabelProps;
10
+ valueLabel?: ReactNode;
12
11
  }
13
- export declare const DialProgressBar: FC<DialProgressBarProps>;
12
+ /**
13
+ * A horizontal bar indicating progress toward a goal.
14
+ * aliases: Progress|LoadingBar|Meter
15
+ * Design system 2.0
16
+ *
17
+ * Names itself from `labelProps.label` through `aria-labelledby`; without one it
18
+ * falls back to `aria-label`, and finally to `Progress` so the bar is never
19
+ * anonymous. Prefer a real label — several bars all announcing "Progress" tell a
20
+ * screen reader user nothing about which is which.
21
+ *
22
+ * Screen readers derive the announced percentage from the value and `max`. When
23
+ * the raw numbers are more useful than a percentage, pass `aria-valuetext`
24
+ * (e.g. `"3 of 10 files"`); it goes straight through to the element.
25
+ *
26
+ * `valueLabel` renders a readout at the end of the label row. Formatting stays
27
+ * with the caller — the bar has no way to know how many decimals or which unit
28
+ * a given quantity deserves. It does not name the bar, so pair it with a
29
+ * matching `aria-valuetext` to have the same reading announced.
30
+ *
31
+ * @example
32
+ * ```tsx
33
+ * <ProgressBar value={40} labelProps={{ label: 'Uploading' }} />
34
+ * <ProgressBar value={3} max={10} aria-valuetext="3 of 10 files" />
35
+ * <ProgressBar value={80} size={ElementSize.Small} />
36
+ *
37
+ * <ProgressBar
38
+ * value={3.313182}
39
+ * max={500}
40
+ * labelProps={{ label: 'Cost per month', caption: 'Billed monthly' }}
41
+ * valueLabel="3.31 / 500"
42
+ * aria-valuetext="3.31 of 500"
43
+ * />
44
+ * ```
45
+ *
46
+ * @param value - Current progress. Clamped into `0…max`.
47
+ * @param [max=100] - Value that counts as complete.
48
+ * @param [size=ElementSize.Standard] - Bar height: standard is 8px, small is 4px.
49
+ * @param [labelProps] - Props of the {@link Label} rendered above the bar, which also names it.
50
+ * @param [valueLabel] - Readout rendered at the end of the label row.
51
+ * @param [className] - Additional classes on the track element.
52
+ */
53
+ export declare const ProgressBar: FC<ProgressBarProps>;
54
+ export {};
@@ -18,6 +18,7 @@ export interface DialRadioButtonProps {
18
18
  /**
19
19
  * A stylized, accessible radio input with optional description.
20
20
  * aliases: ChoiceOption|RadioInput
21
+ * Design system 1.0
21
22
  *
22
23
  * Renders a native `<input type="radio" />` paired with a label. When `checked`
23
24
  * and `description` are provided, a supporting text block appears under the control.
@@ -24,6 +24,7 @@ export interface DialRadioGroupProps {
24
24
  /**
25
25
  * Groups multiple `DialRadio` options and renders custom content for the active option.
26
26
  * aliases: SelectionGroup|OptionGroup
27
+ * Design system 1.0
27
28
  *
28
29
  * Uses `DialField` as the field label and a container with `role="radiogroup"`.
29
30
  * Content provided in `radioButtons[].content` is shown under the currently active radio.
@@ -18,6 +18,7 @@ export interface RadioGroupPopupFieldProps extends Pick<DialLabelProps, 'label'
18
18
  /**
19
19
  * A composite field that opens a popup with a radio group selector.
20
20
  * aliases: PopupRadio|ChoicePopup
21
+ * Design system 1.0
21
22
  *
22
23
  * Renders a labeled readout using `DialInputPopup`; when opened, a `DialPopup`
23
24
  * displays a `DialRadioGroup` allowing the user to pick from a list of options.
@@ -6,6 +6,7 @@ export interface DialRemoveButtonProps extends Omit<DialButtonProps, 'iconBefore
6
6
  /**
7
7
  * A specialized button component for removal or delete actions.
8
8
  * aliases: DeleteButton|TrashButton
9
+ * Design system 1.0
9
10
  *
10
11
  * Renders a `DialDangerButton` with a predefined trash icon (`IconTrashX`) as the leading icon.
11
12
  * Additional props are passed directly to the underlying `DialDangerButton`.
@@ -6,6 +6,7 @@ export interface DialConditionalResizableContainerProps extends DialResizableCon
6
6
  /**
7
7
  * DialConditionalResizableContainer — A conditional wrapper around `DialResizableContainer`.
8
8
  * aliases: OptionalResize|ConditionalPanel
9
+ * Design system 1.0
9
10
  *
10
11
  * This component renders its children inside a resizable container only when `enabled` is true.
11
12
  * When `enabled` is false, children are rendered directly without any resizable behavior.
@@ -15,6 +15,7 @@ export interface DialResizableContainerProps {
15
15
  /**
16
16
  * DialResizableContainer — A reusable resizable container
17
17
  * aliases: ResizePanel|SizableContainer
18
+ * Design system 1.0
18
19
  *
19
20
  * supporting both **controlled** and **uncontrolled** width modes.
20
21
  *
@@ -3,6 +3,7 @@ import { DialSchemaRendererProps } from './types';
3
3
  /**
4
4
  * Renders a JSON Schema as a form UI with collapsible sections, validation, and default values.
5
5
  * aliases: SchemaRenderer|JsonSchemaForm
6
+ * Design system 1.0
6
7
  *
7
8
  * @example
8
9
  * ```tsx