@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,106 @@
1
+ # Migrating the `focus` border token → `focus-black` — v0.12.x → v0.13.0
2
+
3
+ ## Why this changed
4
+
5
+ The border token was named `focus` — after the _state_ it is used in rather than the _value_ it holds. That naming left nowhere to put a second focus colour, so when the blue focus ring arrived it had to be `focus-blue`, an odd sibling to a token whose name implied it covered all focus styling.
6
+
7
+ Both tokens are now named for their colour: `focus-black` and `focus-blue`. The rendered colour of `focus-black` is identical to the old `focus` (`#161B2D`, grey-1000) — this is a naming change, not a visual one.
8
+
9
+ ## What changed
10
+
11
+ | Before | After |
12
+ | ----------------------------- | ---------------------- |
13
+ | CSS variable `--stroke-focus` | `--stroke-focus-black` |
14
+ | `border-focus` | `border-focus-black` |
15
+ | `outline-focus` | `outline-focus-black` |
16
+ | `divide-focus` | `divide-focus-black` |
17
+ | `stroke-focus` (SVG) | `stroke-focus-black` |
18
+
19
+ The token feeds Tailwind's `borderColor`, `outlineColor`, `divideColor`, and `stroke` scales, so every utility built on it moves together.
20
+
21
+ **Not affected:**
22
+
23
+ - `controls-focus` / `--controls-stroke-focus` — a separate token, unchanged.
24
+ - `focus-blue` / `--stroke-focus-blue` — unchanged.
25
+ - Tailwind's `focus:` and `focus-visible:` **variants** — unrelated to the token. `focus-visible:outline-focus` becomes `focus-visible:outline-focus-black`; the `focus-visible:` prefix stays exactly as it is.
26
+
27
+ ## Step-by-step migration
28
+
29
+ ### 1. Find all usages
30
+
31
+ ```bash
32
+ grep -rEn "(border|outline|divide|stroke)-focus\b|--stroke-focus\b" src/
33
+ ```
34
+
35
+ The `\b` matters: without it the search also flags `focus-blue` and `--stroke-focus-blue`, which do not change.
36
+
37
+ ### 2. Rename the utilities
38
+
39
+ **Before:**
40
+
41
+ ```tsx
42
+ <button className="focus-visible:outline focus-visible:outline-focus" />
43
+ ```
44
+
45
+ **After:**
46
+
47
+ ```tsx
48
+ <button className="focus-visible:outline focus-visible:outline-focus-black" />
49
+ ```
50
+
51
+ The same applies inside SCSS `@apply` directives:
52
+
53
+ ```scss
54
+ /* Before */
55
+ .my-input:focus-visible {
56
+ @apply border-focus;
57
+ }
58
+
59
+ /* After */
60
+ .my-input:focus-visible {
61
+ @apply border-focus-black;
62
+ }
63
+ ```
64
+
65
+ ### 3. Rename the CSS variable override
66
+
67
+ Only relevant if you theme the token. Update the custom property name wherever you set it:
68
+
69
+ **Before:**
70
+
71
+ ```css
72
+ :root {
73
+ --stroke-focus: #1a1a2e;
74
+ }
75
+ ```
76
+
77
+ **After:**
78
+
79
+ ```css
80
+ :root {
81
+ --stroke-focus-black: #1a1a2e;
82
+ }
83
+ ```
84
+
85
+ An override left on `--stroke-focus` is **silently ignored** — the utility falls back to the built-in `#161B2D` with no error. This is the one failure mode that neither `typecheck` nor the compiler will catch, so grep for it explicitly.
86
+
87
+ ### 4. Verify
88
+
89
+ ```bash
90
+ npm run typecheck
91
+ npm run test
92
+ ```
93
+
94
+ `typecheck` does not see Tailwind class strings, so also confirm the utilities resolve in the compiled output:
95
+
96
+ ```bash
97
+ npm run build:css
98
+ grep -c "stroke-focus-black" dist/index.css
99
+ ```
100
+
101
+ A stale `border-focus` compiles to nothing at all — the element simply loses its focus border, which is easy to miss without a visual pass. Check focus states in Storybook by tabbing through affected controls.
102
+
103
+ ## Notes
104
+
105
+ - `ringColor` is **not** wired to this token scale, so `ring-focus-black` does not resolve — just as `ring-focus` did not before. Use `outline-focus-black` for focus rings.
106
+ - The colour value is unchanged, so a correctly-migrated codebase should be pixel-identical to 0.12.x.
@@ -0,0 +1,103 @@
1
+ # Migrating `DialProgressBar` → `ProgressBar` — v0.12.x → v0.13.0
2
+
3
+ ## Why this changed
4
+
5
+ `DialProgressBar` was built on 1.0 design tokens (`bg-layer-4`, `bg-controls-accent-primary`) that are on the removal list, so it could not be used in a 2.0 screen without dragging the legacy palette in with it. Rebuilding it on the 2.0 set also let it pick up the conventions the rest of the 2.0 components already follow: no `Dial*` prefix, the shared `ElementSize` enum instead of a bespoke one, and native props passed through.
6
+
7
+ Unlike the [`Spinner` rename](spinner-dial-prefix-removal.md), this is **not** a rename only — the size enum, the label prop, and the rendered colors all changed.
8
+
9
+ ## What changed
10
+
11
+ | Before | After |
12
+ | ------------------------------------- | -------------------------------------------- |
13
+ | `DialProgressBar` | `ProgressBar` |
14
+ | `DialProgressBarProps` | `ProgressBarProps` |
15
+ | `DialProgressBarSize.Small` (`'sm'`) | `ElementSize.Small` (`'small'`) |
16
+ | `DialProgressBarSize.Medium` (`'md'`) | `ElementSize.Standard` (`'standard'`) |
17
+ | `ariaLabel="…"` | `aria-label="…"` |
18
+ | _no visible label_ | `label` — renders above the bar and names it |
19
+
20
+ Unchanged: `value`, `max` (default `100`), `className` (still lands on the track element), the `role="progressbar"` element with `aria-valuenow` / `aria-valuemin` / `aria-valuemax`, the clamping of `value` into `0…max`, and the 4px / 8px heights.
21
+
22
+ Also changed, but requiring no code edit:
23
+
24
+ - **Colors** — track `bg-layer-4` → `bg-control-disable`, fill `bg-controls-accent-primary` → `bg-control-accent`. Both now match the 2.0 `Switch`.
25
+ - **Native props** — `ProgressBarProps` extends `HTMLAttributes<HTMLDivElement>`, so `aria-valuetext`, `data-*`, `onClick`, and the rest reach the element. `aria-valuetext` is the one to reach for when a percentage is not the useful announcement.
26
+ - **Reduced motion** — the width transition is now suppressed under `prefers-reduced-motion`.
27
+ - **Degenerate input** — a non-positive `max` or a non-finite `value` renders an empty bar instead of `width: NaN%`.
28
+ - The Storybook entry moved from `DIAL/Status/ProgressBar` to `Components_2_0/ProgressBar`. Story URLs only.
29
+
30
+ ## Step-by-step migration
31
+
32
+ ### 1. Find all usages
33
+
34
+ ```bash
35
+ grep -rn "DialProgressBar" src/
36
+ ```
37
+
38
+ ### 2. Rename the import, the tag, and the size enum
39
+
40
+ **Before:**
41
+
42
+ ```tsx
43
+ import {
44
+ DialProgressBar,
45
+ DialProgressBarSize,
46
+ type DialProgressBarProps,
47
+ } from '@epam/ai-dial-ui-kit';
48
+
49
+ <DialProgressBar value={40} ariaLabel="Upload progress" />;
50
+ <DialProgressBar value={40} size={DialProgressBarSize.Small} />;
51
+ <DialProgressBar value={40} size={DialProgressBarSize.Medium} />;
52
+ ```
53
+
54
+ **After:**
55
+
56
+ ```tsx
57
+ import {
58
+ ProgressBar,
59
+ ElementSize,
60
+ type ProgressBarProps,
61
+ } from '@epam/ai-dial-ui-kit';
62
+
63
+ <ProgressBar value={40} aria-label="Upload progress" />;
64
+ <ProgressBar value={40} size={ElementSize.Small} />;
65
+ <ProgressBar value={40} size={ElementSize.Standard} />;
66
+ ```
67
+
68
+ `ElementSize.Standard` is the default, so `size={DialProgressBarSize.Medium}` can simply be dropped.
69
+
70
+ ### 3. Replace the generic label with a real one
71
+
72
+ `ariaLabel` defaulted to `"Progress"`, so a screen has as many bars called "Progress" as it has bars. Where the bar has visible surrounding text, promote it into `label` — it renders above the bar and names it through `aria-labelledby`:
73
+
74
+ **Before:**
75
+
76
+ ```tsx
77
+ <span className="dial-small-text">Uploading</span>
78
+ <DialProgressBar value={progress} />
79
+ ```
80
+
81
+ **After:**
82
+
83
+ ```tsx
84
+ <ProgressBar value={progress} label="Uploading" />
85
+ ```
86
+
87
+ Where the bar has no visible label, keep naming it explicitly with `aria-label`. The `"Progress"` fallback still applies if you pass neither, so no bar ends up anonymous.
88
+
89
+ ### 4. Verify
90
+
91
+ ```bash
92
+ npm run typecheck
93
+ npm run test
94
+ ```
95
+
96
+ `typecheck` catches every usage: the old names are gone from the barrel, so the imports fail to resolve, and `ariaLabel` is no longer an accepted prop.
97
+
98
+ ## Notes
99
+
100
+ - `ariaLabel` does **not** silently keep working — it is not part of `HTMLAttributes`, so TypeScript rejects it rather than passing it through as an unknown DOM attribute.
101
+ - Tests asserting `getByRole('progressbar')` keep passing. Prefer tightening them to `getByRole('progressbar', { name })` now that the name is meaningful.
102
+ - If you relied on the exact track color, note that `bg-control-disable` (`#DCE0E8`) is lighter than the old `bg-layer-4` (`#D1DBEA`).
103
+ - `DialLoader` and `Skeleton` are different components and are not affected.
@@ -0,0 +1,69 @@
1
+ # Migrating `DialSpinner` → `Spinner` — v0.12.x → v0.13.0
2
+
3
+ ## Why this changed
4
+
5
+ The spinner is part of the 2.0 component set, which drops the `Dial*` prefix. Keeping `DialSpinner` alongside the unprefixed 2.0 components made the export list read as two conventions at once, with no signal about which era a component belongs to.
6
+
7
+ This is a **rename only**. The component's props, defaults, DOM, roles, and styling are untouched.
8
+
9
+ ## What changed
10
+
11
+ | Before | After |
12
+ | ------------------ | -------------- |
13
+ | `DialSpinner` | `Spinner` |
14
+ | `DialSpinnerProps` | `SpinnerProps` |
15
+
16
+ Unchanged: `size` (default `40`), `className`, `fullWidth` (default `false`), `ariaLabel` (default `"Loading"`), the outer `role="status"` container, and the inner `role="img"` ring.
17
+
18
+ The Storybook entry also moved from `DIAL/Status/Spinner` to `Components_2_0/Spinner`. This affects story URLs only, not consumers of the package.
19
+
20
+ ## Step-by-step migration
21
+
22
+ ### 1. Find all usages
23
+
24
+ ```bash
25
+ grep -rn "DialSpinner" src/
26
+ ```
27
+
28
+ ### 2. Rename the import and the JSX tag
29
+
30
+ **Before:**
31
+
32
+ ```tsx
33
+ import { DialSpinner, type DialSpinnerProps } from '@epam/ai-dial-ui-kit';
34
+
35
+ const Busy: FC<DialSpinnerProps> = (props) => <DialSpinner {...props} />;
36
+
37
+ <DialSpinner size={24} fullWidth ariaLabel="Loading results" />;
38
+ ```
39
+
40
+ **After:**
41
+
42
+ ```tsx
43
+ import { Spinner, type SpinnerProps } from '@epam/ai-dial-ui-kit';
44
+
45
+ const Busy: FC<SpinnerProps> = (props) => <Spinner {...props} />;
46
+
47
+ <Spinner size={24} fullWidth ariaLabel="Loading results" />;
48
+ ```
49
+
50
+ If `Spinner` collides with a local component of the same name, alias the import rather than renaming your own:
51
+
52
+ ```tsx
53
+ import { Spinner as DialSpinner } from '@epam/ai-dial-ui-kit';
54
+ ```
55
+
56
+ ### 3. Verify
57
+
58
+ ```bash
59
+ npm run typecheck
60
+ npm run test
61
+ ```
62
+
63
+ `typecheck` catches every usage — there is no runtime-only path to miss, since the old name is removed from the barrel and the import fails to resolve.
64
+
65
+ ## Notes
66
+
67
+ - Tests that render the spinner need no assertion changes: it still exposes `role="status"` on the container and `role="img"` with the `ariaLabel` name on the ring.
68
+ - `DialLoader` is a different component and is **not** renamed.
69
+ - `Notification`'s `loading` variant renders this spinner internally; no consumer change is needed there.
@@ -0,0 +1,93 @@
1
+ # Migrating the heading type scale — v0.12.x → v0.13.0
2
+
3
+ ## Why this changed
4
+
5
+ The design system's type scale has three display sizes and three heading sizes. The kit only had two display classes, so the 22px step that design calls **Display 3** was shipping as `dial-h1-text`, and every heading class was one step larger than the design named it.
6
+
7
+ Adding `dial-display3-text` at 22px/32px puts the 22px step where it belongs and lets `dial-h1-text`, `dial-h2-text`, and `dial-h3-text` carry the sizes design assigns to Heading 1–3. The set of available sizes is unchanged — the same six steps exist before and after. What moved is which class name each one answers to.
8
+
9
+ ## What changed
10
+
11
+ | Class | Before | After |
12
+ | --------------------- | ----------- | ----------------- |
13
+ | `.dial-display1-text` | 32px / 48px | 32px / 48px |
14
+ | `.dial-display2-text` | 28px / 40px | 28px / 40px |
15
+ | `.dial-display3-text` | — | 22px / 32px (new) |
16
+ | `.dial-h1-text` | 22px / 32px | **20px / 28px** |
17
+ | `.dial-h2-text` | 20px / 28px | **18px / 26px** |
18
+ | `.dial-h3-text` | 18px / 26px | **16px / 24px** |
19
+
20
+ All six stay `font-weight: 600` with no letter-spacing.
21
+
22
+ The kit also styles bare `h1`, `h2`, and `h3` elements from these classes, so **unclassed headings shrink one step too** — an `<h1>` with no `className` renders at 20px/28px instead of 22px/32px.
23
+
24
+ ## Step-by-step migration
25
+
26
+ ### 1. Find all usages
27
+
28
+ ```bash
29
+ grep -rEn "dial-h[123]-text" src/
30
+ ```
31
+
32
+ Also find headings that rely on the element defaults rather than a class, since those change with no class name to grep for:
33
+
34
+ ```bash
35
+ grep -rEn "<h[123](\s|>)" src/
36
+ ```
37
+
38
+ ### 2. Decide per usage: keep the size, or keep the semantic level
39
+
40
+ This is the whole migration, and it is a judgement call rather than a rename — a blind find-and-replace gets it wrong either way.
41
+
42
+ **To keep the rendered size identical**, shift the class name up one step:
43
+
44
+ | Before | After |
45
+ | --------------------- | --------------------------- |
46
+ | `dial-h1-text` (22px) | `dial-display3-text` (22px) |
47
+ | `dial-h2-text` (20px) | `dial-h1-text` (20px) |
48
+ | `dial-h3-text` (18px) | `dial-h2-text` (18px) |
49
+
50
+ **To adopt the new scale**, leave the class name alone and accept the smaller size. This is right where the class was chosen to match the heading level (an `<h2>` styled `dial-h2-text`) rather than to hit a specific pixel size.
51
+
52
+ **Before** — a dialog title that should stay at 20px:
53
+
54
+ ```tsx
55
+ <h2 className="dial-h2-text">Delete conversation</h2>
56
+ ```
57
+
58
+ **After:**
59
+
60
+ ```tsx
61
+ <h2 className="dial-h1-text">Delete conversation</h2>
62
+ ```
63
+
64
+ An `<h3>` that was picked purely for its 18px size and does not head a section is usually better off as `dial-body-semi-text` (16px/24px, the same metrics as the new `dial-h3-text`) on a non-heading element.
65
+
66
+ ### 3. Re-check unclassed headings
67
+
68
+ A bare `<h1>` in prose, markdown output, or a `prose` block picks up the new 20px/28px automatically. If a specific block must hold its old size, name the class explicitly:
69
+
70
+ ```tsx
71
+ <h1 className="dial-display3-text">Reports</h1>
72
+ ```
73
+
74
+ ### 4. Verify
75
+
76
+ ```bash
77
+ npm run typecheck
78
+ npm run test
79
+ ```
80
+
81
+ Neither sees Tailwind class strings, so confirm the compiled values as well:
82
+
83
+ ```bash
84
+ npm run build:css
85
+ grep -o "\.dial-h1-text{[^}]*}" dist/index.css
86
+ ```
87
+
88
+ Then do a visual pass in Storybook — **DIAL/Typography** shows the full scale side by side, and a heading that shrank one step is the failure mode to look for.
89
+
90
+ ## Notes
91
+
92
+ - Inside the kit, the 2.0 `Popup` title was re-pointed `dial-h2-text` → `dial-h1-text` and renders exactly as it did in 0.12.x. The 1.0 `DialPopup` title keeps `dial-h3-text` and therefore **adopts the new scale**: it drops from 18px/26px to 16px/24px. Nothing to change on your side — pass `titleClassName="dial-h2-text"` if a particular dialog must hold its old size.
93
+ - Nothing about this change is visible to TypeScript. A missed usage compiles, tests pass, and the heading simply renders one step small — so the grep in step 1 is the only reliable sweep.
@@ -16,6 +16,12 @@ migration-guides/
16
16
  | ------- | ----- | ------- |
17
17
  | 0.11.0 | [dropdown-menu-prop-flatten](0.11.0/dropdown-menu-prop-flatten.md) | `DialDropdown`/`DialDropdownIcon` `menu` prop replaced with flat `items`, `onItemClick`, `menuHeader`, `menuFooter` props |
18
18
  | 0.12.0 | [legacy-typography-classes-removal](0.12.0/legacy-typography-classes-removal.md) | Legacy `dial-h*`, `dial-body`, `dial-small*`, `dial-tiny*`, `dial-caption` classes removed in favor of the `dial-*-text` scale |
19
+ | 0.13.0 | [spinner-dial-prefix-removal](0.13.0/spinner-dial-prefix-removal.md) | `DialSpinner`/`DialSpinnerProps` renamed to `Spinner`/`SpinnerProps` |
20
+ | 0.13.0 | [focus-border-token-rename](0.13.0/focus-border-token-rename.md) | Border token `focus` renamed to `focus-black` (`--stroke-focus` → `--stroke-focus-black`) |
21
+ | 0.13.0 | [typography-heading-scale-shift](0.13.0/typography-heading-scale-shift.md) | `dial-display3-text` added at 22px; `dial-h1`/`h2`/`h3-text` shifted one step down to 20/18/16px |
22
+ | 0.13.0 | [caption-semi-text-lead-rename](0.13.0/caption-semi-text-lead-rename.md) | `dial-caption-semi-text` renamed to `dial-caption-lead-semi-text` and now uppercases |
23
+ | 0.13.0 | [progress-bar-2-0-rewrite](0.13.0/progress-bar-2-0-rewrite.md) | `DialProgressBar` rebuilt on 2.0 tokens as `ProgressBar`; `DialProgressBarSize` → `ElementSize`, `ariaLabel` → `aria-label` |
24
+ | 0.13.0 | [field-label-props-unification](0.13.0/field-label-props-unification.md) | `Calendar`, `Switch` and `ProgressBar` take `labelProps` instead of `label`, so every 2.0 field names itself through `Label` |
19
25
 
20
26
  ---
21
27
 
@@ -29,6 +29,7 @@ export interface DialAccordionProps {
29
29
  /**
30
30
  * A collapsible panel that toggles its content when the header is clicked.
31
31
  * aliases: Collapse|Disclosure|ExpandablePanel
32
+ * Design system 1.0
32
33
  *
33
34
  * Works as a controlled component when `expanded` is provided, otherwise it manages
34
35
  * its own state from `defaultExpanded`. The header shows a chevron that rotates when
@@ -1,8 +1,11 @@
1
1
  import { FC, ReactNode } from 'react';
2
2
  import { AnalyticsBarColorStop } from '../../../models/analytics';
3
3
  export interface DialAnalyticsBarProps {
4
- /** Current value used to size and color the bar. Omit it when `error` is set. */
5
- value?: number;
4
+ /**
5
+ * Current value used to size and color the bar. Pass `null` when there is no
6
+ * data (em dash, no progress bar). Omit it when `error` is set.
7
+ */
8
+ value?: number | null;
6
9
  /** Upper bound of the scale. Defaults to `1`. */
7
10
  maxValue?: number;
8
11
  /**
@@ -18,8 +21,8 @@ export interface DialAnalyticsBarProps {
18
21
  /** Optional label rendered above the bar, on the left. */
19
22
  title?: ReactNode;
20
23
  /**
21
- * Text rendered above the bar, on the right. Defaults to `value`.
22
- * Pass a formatted node (e.g. `"85%"`) to override.
24
+ * Text rendered above the bar, on the right. Defaults to `value`, or an em dash
25
+ * (`—`) when `value` is `null`. Pass a formatted node (e.g. `"85%"`) to override.
23
26
  */
24
27
  valueLabel?: ReactNode;
25
28
  /**
@@ -45,10 +48,12 @@ export interface DialAnalyticsBarProps {
45
48
  * A compact analytics meter: a horizontal bar whose fill width and color reflect a
46
49
  * value relative to `maxValue`, with an optional title on the left and value on the right.
47
50
  * aliases: MetricBar|Meter|ScoreBar
51
+ * Design system 1.0
48
52
  *
49
53
  * The fill color is resolved from `colorMap` based on the normalized ratio
50
54
  * (`value / maxValue`), so the bar shifts hue as the value grows. An empty bar
51
- * (value `0`) shows only the `bg-layer-1` track.
55
+ * (value `0`) shows only the `bg-layer-1` track. A missing value (`null`) shows
56
+ * an em dash and no progress bar.
52
57
  *
53
58
  * @example
54
59
  * ```tsx
@@ -65,12 +70,12 @@ export interface DialAnalyticsBarProps {
65
70
  * />
66
71
  * ```
67
72
  *
68
- * @param [value] - Current value used to size and color the bar. Omit it when `error` is set.
73
+ * @param [value] - Current value used to size and color the bar. Pass `null` for no data (em dash, no bar). Omit when `error` is set.
69
74
  * @param [maxValue=1] - Upper bound of the scale.
70
75
  * @param [error] - Renders the error state (error-colored bar + error tag).
71
76
  * @param [isLoading] - Renders the loading state (loader + empty track).
72
77
  * @param [title] - Optional label rendered above the bar, on the left.
73
- * @param [valueLabel] - Text rendered above the bar, on the right. Defaults to `value`.
78
+ * @param [valueLabel] - Text rendered above the bar, on the right. Defaults to `value` or `—` when null.
74
79
  * @param [colorMap=DEFAULT_ANALYTICS_BAR_COLOR_MAP] - Color bands keyed by ratio.
75
80
  * @param [className] - Additional CSS classes for the outer container.
76
81
  * @param [titleClassName] - Additional CSS classes for the title label.
@@ -7,14 +7,19 @@ export interface DialAnalyticsBarGroupProps {
7
7
  titleTooltip?: ReactNode;
8
8
  /** Description passed to the accordion header. Defaults to the number of entries. */
9
9
  description?: ReactNode;
10
- /** Map of metric name to numeric value. Each entry renders one bar. */
11
- data: Record<string, number>;
12
10
  /**
13
- * When provided, enables compare mode: each entry renders a delta badge (computed
14
- * as `data[key] - compareData[key]`) and two bars one for `data` and one for
15
- * `compareData`. `onBarClick` is ignored in compare mode.
11
+ * Map of metric name to numeric value. Each entry renders one bar.
12
+ * Pass `null` for a key when there is no data (em dash, no progress bar).
16
13
  */
17
- compareData?: Record<string, number>;
14
+ data: Record<string, number | null>;
15
+ /**
16
+ * When provided, enables compare mode: keys are the union of `data` and
17
+ * `compareData`. Each entry renders two bars and, when both sides are numeric,
18
+ * a delta badge (`compareData[key] - data[key]`, three decimal places). A
19
+ * missing key (or explicit `null`) on either side shows an em dash with no
20
+ * progress bar and no delta. A rounded delta of `0` is omitted.
21
+ */
22
+ compareData?: Record<string, number | null>;
18
23
  /**
19
24
  * Labels shown next to each of the two bars in compare mode.
20
25
  * The first label is for `data`, the second for `compareData`.
@@ -34,8 +39,12 @@ export interface DialAnalyticsBarGroupProps {
34
39
  nonCollapsible?: boolean;
35
40
  /** Renders a loader in place of the bars while the data is being fetched. */
36
41
  isLoading?: boolean;
37
- /** Invoked with the entry key and value when a bar is clicked. When set, each bar becomes an interactive button. */
38
- onBarClick?: (key: string, value: number) => void;
42
+ /**
43
+ * Invoked with the entry key and value when a bar is clicked. When set, each
44
+ * bar becomes an interactive button. In compare mode the whole entry (label,
45
+ * delta, both bars) is the click target.
46
+ */
47
+ onBarClick?: (key: string, value: number | null) => void;
39
48
  /** Renders every bar on a single row (50% title, 50% bar + value). */
40
49
  inline?: boolean;
41
50
  /** Additional CSS classes for each bar's title label. */
@@ -44,10 +53,7 @@ export interface DialAnalyticsBarGroupProps {
44
53
  barValueClassName?: string;
45
54
  /** Additional CSS classes for each bar's outer container (e.g. for custom hover effects). */
46
55
  barClassName?: string;
47
- /**
48
- * Map of bar key to tooltip content. When provided, hovering each bar shows its description.
49
- * Not applied in compare mode.
50
- */
56
+ /** Map of bar key to tooltip content. When provided, hovering each bar shows its description. */
51
57
  barDescriptions?: Record<string, ReactNode>;
52
58
  /** Additional CSS classes for the accordion container. */
53
59
  className?: string;
@@ -58,6 +64,7 @@ export interface DialAnalyticsBarGroupProps {
58
64
  * is shown as the header description, and each entry renders a {@link DialAnalyticsBar}
59
65
  * with the key as its title and the value as its value.
60
66
  * aliases: MetricBarGroup|BarList|NumericResults
67
+ * Design system 1.0
61
68
  *
62
69
  * @example
63
70
  * ```tsx
@@ -70,20 +77,20 @@ export interface DialAnalyticsBarGroupProps {
70
77
  * @param title - Title passed to the accordion header.
71
78
  * @param [titleTooltip] - Tooltip shown when hovering the accordion header title.
72
79
  * @param [description] - Description passed to the accordion header. Defaults to the number of entries.
73
- * @param data - Map of metric name to numeric value. Each entry renders one bar.
74
- * @param [compareData] - Enables compare mode: each entry shows a delta badge and two bars.
80
+ * @param data - Map of metric name to numeric value (or `null` when missing). Each entry renders one bar.
81
+ * @param [compareData] - Enables compare mode: union of keys, delta badge (`compareData − data`) when both sides are numeric and the rounded delta is non-zero, em dash (no bar) when a side is missing.
75
82
  * @param [compareLabels] - Labels for the two bars in compare mode: first for `data`, second for `compareData`.
76
83
  * @param [maxValue] - Upper bound passed to every bar.
77
84
  * @param [colorMap] - Color map passed to every bar.
78
85
  * @param [defaultExpanded=true] - Whether the accordion is expanded initially.
79
86
  * @param [nonCollapsible] - Renders the group permanently expanded without a toggle or chevron.
80
87
  * @param [isLoading] - Renders a loader in place of the bars while the data is being fetched.
81
- * @param [onBarClick] - Invoked with the entry key and value when a bar is clicked.
88
+ * @param [onBarClick] - Invoked with the entry key and value when a bar (or, in compare mode, the whole entry) is clicked.
82
89
  * @param [inline] - Renders every bar on a single row (50% title, 50% bar + value).
83
90
  * @param [barTitleClassName] - Additional CSS classes for each bar's title label.
84
91
  * @param [barValueClassName] - Additional CSS classes for each bar's value label.
85
92
  * @param [barClassName] - Additional CSS classes for each bar's outer container.
86
- * @param [barDescriptions] - Map of bar key to tooltip content. Hovering each bar shows its description. Not applied in compare mode.
93
+ * @param [barDescriptions] - Map of bar key to tooltip content. Hovering each bar shows its description.
87
94
  * @param [className] - Additional CSS classes for the accordion container.
88
95
  */
89
96
  export declare const DialAnalyticsBarGroup: FC<DialAnalyticsBarGroupProps>;
@@ -25,6 +25,11 @@ export interface DialAnalyticsCardProps {
25
25
  * When omitted, `delta ≥ 0` → success, `delta < 0` → error.
26
26
  */
27
27
  deltaPositive?: boolean;
28
+ /**
29
+ * Suffix appended to the formatted delta with no space (e.g. `"s"` → `+9s`,
30
+ * `-19s`). Any string is valid (`s`, `ms`, `%`).
31
+ */
32
+ deltaUnit?: string;
28
33
  /**
29
34
  * When provided, enables compare mode: the value area is split 50/50 with a
30
35
  * vertical divider and each side shows its own sub-title and value.
@@ -36,6 +41,7 @@ export interface DialAnalyticsCardProps {
36
41
  * A simple analytics summary card that displays a single metric as a title,
37
42
  * a prominent value, and an optional description.
38
43
  * aliases: MetricCard|StatCard|KpiCard
44
+ * Design system 1.0
39
45
  *
40
46
  * Two visual variants are available via the {@link AnalyticsCardVariant} enum:
41
47
  * - `Default` — `bg-layer-3`, large `dial-display2-text` value, supports a description.
@@ -43,8 +49,9 @@ export interface DialAnalyticsCardProps {
43
49
  * description (the `description` prop is ignored in this variant).
44
50
  *
45
51
  * **Compare mode** — pass `compareValues` to split the value area 50/50 between two
46
- * metrics, each with its own sub-title. Pair with `delta` to show a change badge next
47
- * to the card title.
52
+ * metrics, each with its own sub-title. Long sub-titles truncate to a single line and
53
+ * show the full text in a tooltip. Pair with `delta` to show a change badge next
54
+ * to the card title, and `deltaUnit` for a suffix such as `"s"`.
48
55
  *
49
56
  * @example
50
57
  * ```tsx
@@ -59,7 +66,9 @@ export interface DialAnalyticsCardProps {
59
66
  * ```tsx
60
67
  * <DialAnalyticsCard
61
68
  * title="Response time"
62
- * delta={12}
69
+ * delta={9}
70
+ * deltaUnit="s"
71
+ * deltaPositive={false}
63
72
  * compareValues={[
64
73
  * { title: 'This week', value: '248ms' },
65
74
  * { title: 'Last week', value: '220ms' },
@@ -75,6 +84,8 @@ export interface DialAnalyticsCardProps {
75
84
  * @param [isLoading] - Renders a loader in place of the value.
76
85
  * @param [className] - Additional CSS classes for the card container.
77
86
  * @param [delta] - Numeric change shown as a badge next to the title. ≥0 = success, <0 = error.
87
+ * @param [deltaPositive] - Overrides sign-based badge colour. Use for lower-is-better metrics.
88
+ * @param [deltaUnit] - Suffix appended to the formatted delta (e.g. `"s"` → `+9s`).
78
89
  * @param [compareValues] - Enables compare mode with two side-by-side metrics.
79
90
  */
80
91
  export declare const DialAnalyticsCard: FC<DialAnalyticsCardProps>;
@@ -7,6 +7,7 @@ export interface DialAnalyticsErrorTagProps {
7
7
  }
8
8
  /**
9
9
  * A non-interactive error tag used across analytics components to indicate that a
10
+ * Design system 1.0
10
11
  * metric value could not be provided. Renders a {@link DialTag} styled with the
11
12
  * error palette (`bg-error`, `text-error`, `border-error`).
12
13
  *
@@ -18,7 +18,7 @@ export interface DialAnalyticsHistogramProps {
18
18
  isLoading?: boolean;
19
19
  /** Additional CSS classes for the outer container. */
20
20
  className?: string;
21
- /** Second set of values to overlay in compare mode. Each column renders as a paired striped bar. */
21
+ /** Second set of values to overlay in compare mode. Primary bars are striped; compare bars are solid. */
22
22
  compareValues?: number[];
23
23
  /** Label for the primary values set, shown on the first tooltip line in compare mode. */
24
24
  valueSetLabel?: string;
@@ -27,11 +27,14 @@ export interface DialAnalyticsHistogramProps {
27
27
  }
28
28
  /**
29
29
  * A histogram that distributes `values` across the bands of a color map and draws a
30
- * column per band. Each column's height is relative to the most populated band; empty
31
- * columns are outlined, populated columns are filled with their band color. A baseline
32
- * separates the columns from the interval labels, and hovering a column reveals a
33
- * tooltip with its share of the total.
30
+ * column per band. Each column's height is relative to the Y-axis max (an even
31
+ * ceiling of the dataset size the "out of N" in the tooltip). Empty columns
32
+ * are outlined, populated columns are filled with their band color. A left
33
+ * Y-axis (count) and horizontal grid lines provide scale; interval labels run
34
+ * along the bottom. Hovering a column reveals a tooltip with its share of the
35
+ * total.
34
36
  * aliases: Distribution|ColumnChart|FrequencyChart
37
+ * Design system 1.0
35
38
  *
36
39
  * @example
37
40
  * ```tsx
@@ -49,7 +52,7 @@ export interface DialAnalyticsHistogramProps {
49
52
  * @param [showCount] - When `true`, renders each column's count inside its bar.
50
53
  * @param [isLoading] - Renders a loader in place of the histogram while the data is being fetched.
51
54
  * @param [className] - Additional CSS classes for the outer container.
52
- * @param [compareValues] - Second set of values; enables compare mode with paired striped columns.
55
+ * @param [compareValues] - Second set of values; enables compare mode (primary striped, compare solid).
53
56
  * @param [valueSetLabel] - Label for the primary values set (compare mode tooltip).
54
57
  * @param [compareValueSetLabel] - Label for the compare values set (compare mode tooltip).
55
58
  */
@@ -29,6 +29,16 @@ export declare const getHistogramColumnIndex: (value: number, colorMap: Analytic
29
29
  * column and computes each column's height as a ratio of the tallest column.
30
30
  */
31
31
  export declare const buildHistogramColumns: (values: number[], colorMap: AnalyticsBarColorStop[]) => AnalyticsHistogramColumn[];
32
+ /**
33
+ * Top of the Y-axis for a dataset of `total` values (the "out of N" in the
34
+ * tooltip). Rounds odd totals up so the midpoint tick is an integer
35
+ * (Figma: 0, 24, 48). Empty data still gets a 0–2 scale so the axis is visible.
36
+ */
37
+ export declare const getHistogramYMax: (total: number) => number;
38
+ /**
39
+ * Three Y-axis ticks from top to bottom: `yMax`, `yMax / 2`, `0`.
40
+ */
41
+ export declare const getHistogramYTicks: (total: number) => number[];
32
42
  /** Formats a column's interval bound for the axis label (trims float noise). */
33
43
  export declare const formatHistogramInterval: (value: number) => string;
34
44
  /**
@@ -9,6 +9,7 @@ export interface DialAutocompleteInputValueProps {
9
9
  /**
10
10
  * A component that displays a list of selected items in a customizable, styled list. Each item is
11
11
  * aliases: SelectedList|ItemDisplay
12
+ * Design system 1.0
12
13
  *
13
14
  * rendered as a tag wrapped in a tooltip, allowing for truncation and additional context when
14
15
  * hovered. The component is flexible and supports custom CSS classes for styling the list and