@salt-ds/lab 1.0.0-alpha.93 → 1.0.0-alpha.95

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 (226) hide show
  1. package/CHANGELOG.md +214 -0
  2. package/css/salt-lab.css +190 -143
  3. package/dist-cjs/index.js +12 -58
  4. package/dist-cjs/index.js.map +1 -1
  5. package/dist-cjs/mega-menu/MegaMenuGroup.js +2 -5
  6. package/dist-cjs/mega-menu/MegaMenuGroup.js.map +1 -1
  7. package/dist-cjs/mega-menu/MegaMenuGroups.css.js +6 -0
  8. package/dist-cjs/mega-menu/MegaMenuGroups.css.js.map +1 -0
  9. package/dist-cjs/mega-menu/{MegaMenuSection.js → MegaMenuGroups.js} +8 -8
  10. package/dist-cjs/mega-menu/MegaMenuGroups.js.map +1 -0
  11. package/dist-cjs/mega-menu/MegaMenuHeader.js +0 -1
  12. package/dist-cjs/mega-menu/MegaMenuHeader.js.map +1 -1
  13. package/dist-cjs/mega-menu/MegaMenuItem.css.js +1 -1
  14. package/dist-cjs/mega-menu/MegaMenuItem.js +6 -5
  15. package/dist-cjs/mega-menu/MegaMenuItem.js.map +1 -1
  16. package/dist-cjs/mega-menu/MegaMenuSupportingActions.css.js +6 -0
  17. package/dist-cjs/mega-menu/MegaMenuSupportingActions.css.js.map +1 -0
  18. package/dist-cjs/mega-menu/MegaMenuSupportingActions.js +31 -0
  19. package/dist-cjs/mega-menu/MegaMenuSupportingActions.js.map +1 -0
  20. package/dist-cjs/mega-menu/MegaMenuSupportingContent.css.js +6 -0
  21. package/dist-cjs/mega-menu/MegaMenuSupportingContent.css.js.map +1 -0
  22. package/dist-cjs/mega-menu/MegaMenuSupportingContent.js +31 -0
  23. package/dist-cjs/mega-menu/MegaMenuSupportingContent.js.map +1 -0
  24. package/dist-cjs/mega-menu/useMegaMenuKeyboard.js +2 -2
  25. package/dist-cjs/mega-menu/useMegaMenuKeyboard.js.map +1 -1
  26. package/dist-cjs/toolbar-next/ToolbarContentNext.css.js +6 -0
  27. package/dist-cjs/toolbar-next/ToolbarContentNext.css.js.map +1 -0
  28. package/dist-cjs/toolbar-next/ToolbarContentNext.js +32 -0
  29. package/dist-cjs/toolbar-next/ToolbarContentNext.js.map +1 -0
  30. package/dist-cjs/toolbar-next/ToolbarNext.css.js +6 -0
  31. package/dist-cjs/toolbar-next/ToolbarNext.css.js.map +1 -0
  32. package/dist-cjs/toolbar-next/ToolbarNext.js +394 -0
  33. package/dist-cjs/toolbar-next/ToolbarNext.js.map +1 -0
  34. package/dist-cjs/toolbar-next/ToolbarNextOverflow.css.js +6 -0
  35. package/dist-cjs/toolbar-next/ToolbarNextOverflow.css.js.map +1 -0
  36. package/dist-cjs/toolbar-next/ToolbarNextOverflow.js +706 -0
  37. package/dist-cjs/toolbar-next/ToolbarNextOverflow.js.map +1 -0
  38. package/dist-cjs/toolbar-next/ToolbarNextOverflowFloatingBoundary.js +165 -0
  39. package/dist-cjs/toolbar-next/ToolbarNextOverflowFloatingBoundary.js.map +1 -0
  40. package/dist-cjs/toolbar-next/TooltrayNext.css.js +6 -0
  41. package/dist-cjs/toolbar-next/TooltrayNext.css.js.map +1 -0
  42. package/dist-cjs/toolbar-next/TooltrayNext.js +55 -0
  43. package/dist-cjs/toolbar-next/TooltrayNext.js.map +1 -0
  44. package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js +409 -0
  45. package/dist-cjs/toolbar-next/toolbarNextKeyboardUtils.js.map +1 -0
  46. package/dist-cjs/toolbar-next/toolbarNextUtils.js +215 -0
  47. package/dist-cjs/toolbar-next/toolbarNextUtils.js.map +1 -0
  48. package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js +312 -0
  49. package/dist-cjs/toolbar-next/useToolbarNextKeyboardNavigation.js.map +1 -0
  50. package/dist-cjs/toolbar-next/useToolbarNextOverflow.js +743 -0
  51. package/dist-cjs/toolbar-next/useToolbarNextOverflow.js.map +1 -0
  52. package/dist-es/index.js +6 -12
  53. package/dist-es/index.js.map +1 -1
  54. package/dist-es/mega-menu/MegaMenuGroup.js +2 -5
  55. package/dist-es/mega-menu/MegaMenuGroup.js.map +1 -1
  56. package/dist-es/mega-menu/MegaMenuGroups.css.js +4 -0
  57. package/dist-es/mega-menu/MegaMenuGroups.css.js.map +1 -0
  58. package/dist-es/mega-menu/{MegaMenuSection.js → MegaMenuGroups.js} +7 -7
  59. package/dist-es/mega-menu/MegaMenuGroups.js.map +1 -0
  60. package/dist-es/mega-menu/MegaMenuHeader.js +0 -1
  61. package/dist-es/mega-menu/MegaMenuHeader.js.map +1 -1
  62. package/dist-es/mega-menu/MegaMenuItem.css.js +1 -1
  63. package/dist-es/mega-menu/MegaMenuItem.js +7 -6
  64. package/dist-es/mega-menu/MegaMenuItem.js.map +1 -1
  65. package/dist-es/mega-menu/MegaMenuSupportingActions.css.js +4 -0
  66. package/dist-es/mega-menu/MegaMenuSupportingActions.css.js.map +1 -0
  67. package/dist-es/mega-menu/MegaMenuSupportingActions.js +29 -0
  68. package/dist-es/mega-menu/MegaMenuSupportingActions.js.map +1 -0
  69. package/dist-es/mega-menu/MegaMenuSupportingContent.css.js +4 -0
  70. package/dist-es/mega-menu/MegaMenuSupportingContent.css.js.map +1 -0
  71. package/dist-es/mega-menu/MegaMenuSupportingContent.js +29 -0
  72. package/dist-es/mega-menu/MegaMenuSupportingContent.js.map +1 -0
  73. package/dist-es/mega-menu/useMegaMenuKeyboard.js +2 -2
  74. package/dist-es/mega-menu/useMegaMenuKeyboard.js.map +1 -1
  75. package/dist-es/toolbar-next/ToolbarContentNext.css.js +4 -0
  76. package/dist-es/toolbar-next/ToolbarContentNext.css.js.map +1 -0
  77. package/dist-es/toolbar-next/ToolbarContentNext.js +30 -0
  78. package/dist-es/toolbar-next/ToolbarContentNext.js.map +1 -0
  79. package/dist-es/toolbar-next/ToolbarNext.css.js +4 -0
  80. package/dist-es/toolbar-next/ToolbarNext.css.js.map +1 -0
  81. package/dist-es/toolbar-next/ToolbarNext.js +392 -0
  82. package/dist-es/toolbar-next/ToolbarNext.js.map +1 -0
  83. package/dist-es/toolbar-next/ToolbarNextOverflow.css.js +4 -0
  84. package/dist-es/toolbar-next/ToolbarNextOverflow.css.js.map +1 -0
  85. package/dist-es/toolbar-next/ToolbarNextOverflow.js +701 -0
  86. package/dist-es/toolbar-next/ToolbarNextOverflow.js.map +1 -0
  87. package/dist-es/toolbar-next/ToolbarNextOverflowFloatingBoundary.js +159 -0
  88. package/dist-es/toolbar-next/ToolbarNextOverflowFloatingBoundary.js.map +1 -0
  89. package/dist-es/toolbar-next/TooltrayNext.css.js +4 -0
  90. package/dist-es/toolbar-next/TooltrayNext.css.js.map +1 -0
  91. package/dist-es/toolbar-next/TooltrayNext.js +53 -0
  92. package/dist-es/toolbar-next/TooltrayNext.js.map +1 -0
  93. package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js +390 -0
  94. package/dist-es/toolbar-next/toolbarNextKeyboardUtils.js.map +1 -0
  95. package/dist-es/toolbar-next/toolbarNextUtils.js +211 -0
  96. package/dist-es/toolbar-next/toolbarNextUtils.js.map +1 -0
  97. package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js +310 -0
  98. package/dist-es/toolbar-next/useToolbarNextKeyboardNavigation.js.map +1 -0
  99. package/dist-es/toolbar-next/useToolbarNextOverflow.js +741 -0
  100. package/dist-es/toolbar-next/useToolbarNextOverflow.js.map +1 -0
  101. package/dist-types/index.d.ts +1 -5
  102. package/dist-types/mega-menu/MegaMenuGroups.d.ts +8 -0
  103. package/dist-types/mega-menu/MegaMenuItem.d.ts +3 -2
  104. package/dist-types/mega-menu/MegaMenuSupportingActions.d.ts +8 -0
  105. package/dist-types/mega-menu/MegaMenuSupportingContent.d.ts +8 -0
  106. package/dist-types/mega-menu/index.d.ts +3 -3
  107. package/dist-types/toolbar-next/ToolbarContentNext.d.ts +11 -0
  108. package/dist-types/toolbar-next/ToolbarNext.d.ts +12 -0
  109. package/dist-types/toolbar-next/ToolbarNextOverflow.d.ts +34 -0
  110. package/dist-types/toolbar-next/ToolbarNextOverflowFloatingBoundary.d.ts +16 -0
  111. package/dist-types/toolbar-next/TooltrayNext.d.ts +37 -0
  112. package/dist-types/toolbar-next/index.d.ts +3 -0
  113. package/dist-types/toolbar-next/toolbarNextKeyboardUtils.d.ts +39 -0
  114. package/dist-types/toolbar-next/toolbarNextUtils.d.ts +42 -0
  115. package/dist-types/toolbar-next/useToolbarNextKeyboardNavigation.d.ts +42 -0
  116. package/dist-types/toolbar-next/useToolbarNextOverflow.d.ts +37 -0
  117. package/package.json +2 -4
  118. package/dist-cjs/calendar/index.js +0 -61
  119. package/dist-cjs/calendar/index.js.map +0 -1
  120. package/dist-cjs/date-input/index.js +0 -23
  121. package/dist-cjs/date-input/index.js.map +0 -1
  122. package/dist-cjs/date-picker/index.js +0 -106
  123. package/dist-cjs/date-picker/index.js.map +0 -1
  124. package/dist-cjs/localization-provider/index.js +0 -26
  125. package/dist-cjs/localization-provider/index.js.map +0 -1
  126. package/dist-cjs/mega-menu/MegaMenuContent.css.js +0 -6
  127. package/dist-cjs/mega-menu/MegaMenuContent.css.js.map +0 -1
  128. package/dist-cjs/mega-menu/MegaMenuContent.js +0 -33
  129. package/dist-cjs/mega-menu/MegaMenuContent.js.map +0 -1
  130. package/dist-cjs/mega-menu/MegaMenuItemContent.css.js +0 -6
  131. package/dist-cjs/mega-menu/MegaMenuItemContent.css.js.map +0 -1
  132. package/dist-cjs/mega-menu/MegaMenuItemContent.js +0 -23
  133. package/dist-cjs/mega-menu/MegaMenuItemContent.js.map +0 -1
  134. package/dist-cjs/mega-menu/MegaMenuSection.css.js +0 -6
  135. package/dist-cjs/mega-menu/MegaMenuSection.css.js.map +0 -1
  136. package/dist-cjs/mega-menu/MegaMenuSection.js.map +0 -1
  137. package/dist-cjs/tree/Tree.css.js +0 -6
  138. package/dist-cjs/tree/Tree.css.js.map +0 -1
  139. package/dist-cjs/tree/Tree.js +0 -303
  140. package/dist-cjs/tree/Tree.js.map +0 -1
  141. package/dist-cjs/tree/TreeContext.js +0 -31
  142. package/dist-cjs/tree/TreeContext.js.map +0 -1
  143. package/dist-cjs/tree/TreeNode.css.js +0 -6
  144. package/dist-cjs/tree/TreeNode.css.js.map +0 -1
  145. package/dist-cjs/tree/TreeNode.js +0 -103
  146. package/dist-cjs/tree/TreeNode.js.map +0 -1
  147. package/dist-cjs/tree/TreeNodeExpansionIcon.css.js +0 -6
  148. package/dist-cjs/tree/TreeNodeExpansionIcon.css.js.map +0 -1
  149. package/dist-cjs/tree/TreeNodeExpansionIcon.js +0 -62
  150. package/dist-cjs/tree/TreeNodeExpansionIcon.js.map +0 -1
  151. package/dist-cjs/tree/TreeNodeLabel.css.js +0 -6
  152. package/dist-cjs/tree/TreeNodeLabel.css.js.map +0 -1
  153. package/dist-cjs/tree/TreeNodeLabel.js +0 -26
  154. package/dist-cjs/tree/TreeNodeLabel.js.map +0 -1
  155. package/dist-cjs/tree/TreeNodeTrigger.css.js +0 -6
  156. package/dist-cjs/tree/TreeNodeTrigger.css.js.map +0 -1
  157. package/dist-cjs/tree/TreeNodeTrigger.js +0 -153
  158. package/dist-cjs/tree/TreeNodeTrigger.js.map +0 -1
  159. package/dist-cjs/tree/treeModel.js +0 -61
  160. package/dist-cjs/tree/treeModel.js.map +0 -1
  161. package/dist-cjs/tree/useTree.js +0 -337
  162. package/dist-cjs/tree/useTree.js.map +0 -1
  163. package/dist-cjs/utils/deprecatedExport.js +0 -30
  164. package/dist-cjs/utils/deprecatedExport.js.map +0 -1
  165. package/dist-es/calendar/index.js +0 -50
  166. package/dist-es/calendar/index.js.map +0 -1
  167. package/dist-es/date-input/index.js +0 -20
  168. package/dist-es/date-input/index.js.map +0 -1
  169. package/dist-es/date-picker/index.js +0 -85
  170. package/dist-es/date-picker/index.js.map +0 -1
  171. package/dist-es/localization-provider/index.js +0 -20
  172. package/dist-es/localization-provider/index.js.map +0 -1
  173. package/dist-es/mega-menu/MegaMenuContent.css.js +0 -4
  174. package/dist-es/mega-menu/MegaMenuContent.css.js.map +0 -1
  175. package/dist-es/mega-menu/MegaMenuContent.js +0 -31
  176. package/dist-es/mega-menu/MegaMenuContent.js.map +0 -1
  177. package/dist-es/mega-menu/MegaMenuItemContent.css.js +0 -4
  178. package/dist-es/mega-menu/MegaMenuItemContent.css.js.map +0 -1
  179. package/dist-es/mega-menu/MegaMenuItemContent.js +0 -21
  180. package/dist-es/mega-menu/MegaMenuItemContent.js.map +0 -1
  181. package/dist-es/mega-menu/MegaMenuSection.css.js +0 -4
  182. package/dist-es/mega-menu/MegaMenuSection.css.js.map +0 -1
  183. package/dist-es/mega-menu/MegaMenuSection.js.map +0 -1
  184. package/dist-es/tree/Tree.css.js +0 -4
  185. package/dist-es/tree/Tree.css.js.map +0 -1
  186. package/dist-es/tree/Tree.js +0 -301
  187. package/dist-es/tree/Tree.js.map +0 -1
  188. package/dist-es/tree/TreeContext.js +0 -26
  189. package/dist-es/tree/TreeContext.js.map +0 -1
  190. package/dist-es/tree/TreeNode.css.js +0 -4
  191. package/dist-es/tree/TreeNode.css.js.map +0 -1
  192. package/dist-es/tree/TreeNode.js +0 -101
  193. package/dist-es/tree/TreeNode.js.map +0 -1
  194. package/dist-es/tree/TreeNodeExpansionIcon.css.js +0 -4
  195. package/dist-es/tree/TreeNodeExpansionIcon.css.js.map +0 -1
  196. package/dist-es/tree/TreeNodeExpansionIcon.js +0 -60
  197. package/dist-es/tree/TreeNodeExpansionIcon.js.map +0 -1
  198. package/dist-es/tree/TreeNodeLabel.css.js +0 -4
  199. package/dist-es/tree/TreeNodeLabel.css.js.map +0 -1
  200. package/dist-es/tree/TreeNodeLabel.js +0 -24
  201. package/dist-es/tree/TreeNodeLabel.js.map +0 -1
  202. package/dist-es/tree/TreeNodeTrigger.css.js +0 -4
  203. package/dist-es/tree/TreeNodeTrigger.css.js.map +0 -1
  204. package/dist-es/tree/TreeNodeTrigger.js +0 -151
  205. package/dist-es/tree/TreeNodeTrigger.js.map +0 -1
  206. package/dist-es/tree/treeModel.js +0 -57
  207. package/dist-es/tree/treeModel.js.map +0 -1
  208. package/dist-es/tree/useTree.js +0 -335
  209. package/dist-es/tree/useTree.js.map +0 -1
  210. package/dist-es/utils/deprecatedExport.js +0 -27
  211. package/dist-es/utils/deprecatedExport.js.map +0 -1
  212. package/dist-types/calendar/index.d.ts +0 -13
  213. package/dist-types/date-input/index.d.ts +0 -3
  214. package/dist-types/localization-provider/index.d.ts +0 -9
  215. package/dist-types/mega-menu/MegaMenuContent.d.ts +0 -8
  216. package/dist-types/mega-menu/MegaMenuItemContent.d.ts +0 -8
  217. package/dist-types/mega-menu/MegaMenuSection.d.ts +0 -8
  218. package/dist-types/tree/Tree.d.ts +0 -36
  219. package/dist-types/tree/TreeContext.d.ts +0 -77
  220. package/dist-types/tree/TreeNode.d.ts +0 -25
  221. package/dist-types/tree/TreeNodeExpansionIcon.d.ts +0 -4
  222. package/dist-types/tree/TreeNodeLabel.d.ts +0 -4
  223. package/dist-types/tree/TreeNodeTrigger.d.ts +0 -8
  224. package/dist-types/tree/index.d.ts +0 -4
  225. package/dist-types/tree/treeModel.d.ts +0 -24
  226. package/dist-types/tree/useTree.d.ts +0 -68
package/CHANGELOG.md CHANGED
@@ -1,5 +1,219 @@
1
1
  # @salt-ds/lab
2
2
 
3
+ ## 1.0.0-alpha.95
4
+
5
+ ### Minor Changes
6
+
7
+ - 8043fee: Updated `MegaMenu` with several API improvements:
8
+
9
+ - **Renamed `MegaMenuSection` to `MegaMenuGroups`.** The associated CSS custom property `--saltMegaMenuSection-columnWidth` has been renamed to `--saltMegaMenuGroups-columnWidth`.
10
+ - **Renamed `MegaMenuContent` to `MegaMenuSupportingContent`** to better convey its purpose as a region for supporting content alongside the menu groups.
11
+ - **Removed `MegaMenuItemContent`.** Pass the label directly to `MegaMenuItem`.
12
+ - **Added `MegaMenuSupportingActions`.** Use it to group one or more supporting action links beneath the menu groups in a `MegaMenuPanel`.
13
+ - **Added a `render` prop to `MegaMenuItem`** for integration with custom link or routing components (such as `react-router`'s `Link`).
14
+
15
+ ```diff
16
+ - <MegaMenuSection>
17
+ + <MegaMenuGroups>
18
+ <MegaMenuGroup>
19
+ <MegaMenuHeader>Financial services</MegaMenuHeader>
20
+ - <MegaMenuItem>
21
+ - <Icon aria-hidden />
22
+ - <MegaMenuItemContent>Digital banking</MegaMenuItemContent>
23
+ - </MegaMenuItem>
24
+ + <MegaMenuItem render={<Link to="/digital-banking" />}>
25
+ + <Icon aria-hidden />
26
+ + Digital banking
27
+ + </MegaMenuItem>
28
+ </MegaMenuGroup>
29
+ - </MegaMenuSection>
30
+ + </MegaMenuGroups>
31
+ - <MegaMenuContent>...</MegaMenuContent>
32
+ + <MegaMenuSupportingContent>...</MegaMenuSupportingContent>
33
+ + <MegaMenuSupportingActions>
34
+ + <Link href="#demo" IconComponent={ChevronRightIcon}>Book a demo</Link>
35
+ + </MegaMenuSupportingActions>
36
+ ```
37
+
38
+ - 8687aa7: Date-related components and utilities are no longer re-exported from `@salt-ds/lab`. Update the import source to `@salt-ds/date-components`.
39
+
40
+ The exact set of components depends on the selection variant you're using.
41
+
42
+ **Single-date selection** (`DateInputSingle`, single `DatePicker`, `DatePickerSingleInput`, `DatePickerSingleGridPanel`, single `Calendar`):
43
+
44
+ ```diff
45
+ import {
46
+ type DateInputSingleDetails,
47
+ DateInputSingle,
48
+ DatePicker,
49
+ DatePickerOverlay,
50
+ DatePickerSingleGridPanel,
51
+ DatePickerSingleInput,
52
+ DatePickerTrigger,
53
+ type SingleDateSelection,
54
+ Calendar,
55
+ CalendarGrid,
56
+ CalendarNavigation,
57
+ LocalizationProvider,
58
+ useLocalization,
59
+ - } from "@salt-ds/lab";
60
+ + } from "@salt-ds/date-components";
61
+ ```
62
+
63
+ **Range selection** (`DateInputRange`, range `DatePicker`, `DatePickerRangeInput`, `DatePickerRangePanel`, `DatePickerRangeGridPanel`, range `Calendar`):
64
+
65
+ ```diff
66
+ import {
67
+ type DateInputRangeDetails,
68
+ DateInputRange,
69
+ DatePicker,
70
+ DatePickerOverlay,
71
+ DatePickerRangeGridPanel,
72
+ DatePickerRangeInput,
73
+ DatePickerRangePanel,
74
+ DatePickerTrigger,
75
+ type DateRangeSelection,
76
+ Calendar,
77
+ CalendarGrid,
78
+ CalendarNavigation,
79
+ LocalizationProvider,
80
+ useLocalization,
81
+ - } from "@salt-ds/lab";
82
+ + } from "@salt-ds/date-components";
83
+ ```
84
+
85
+ **Offset selection** (offset `Calendar`; offset `DatePicker` built from the range input + range panel with `selectionVariant="offset"`):
86
+
87
+ ```diff
88
+ import {
89
+ type DateRangeSelection,
90
+ Calendar,
91
+ CalendarGrid,
92
+ CalendarNavigation,
93
+ DatePicker,
94
+ DatePickerOverlay,
95
+ DatePickerRangeInput,
96
+ DatePickerRangePanel,
97
+ DatePickerTrigger,
98
+ LocalizationProvider,
99
+ useLocalization,
100
+ - } from "@salt-ds/lab";
101
+ + } from "@salt-ds/date-components";
102
+ ```
103
+
104
+ ### Patch Changes
105
+
106
+ - 4314ca5: Fixed `ToolbarNext` focus handling when composing multiselect `ComboBox` controls, preserving pill keyboard navigation and preventing focus flashes when restoring toolbar focus.
107
+ - Updated dependencies [9729a10]
108
+ - Updated dependencies [52daa64]
109
+ - Updated dependencies [ed2779c]
110
+ - Updated dependencies [07e4d5d]
111
+ - @salt-ds/core@1.64.0
112
+
113
+ ## 1.0.0-alpha.94
114
+
115
+ ### Minor Changes
116
+
117
+ - fcf295b: Removed `Tree`, `TreeNode`, `TreeNodeTrigger`, and `TreeNodeLabel` from lab and promoted to core.
118
+ - 5fc9124: ## Summary
119
+
120
+ New `ToolbarNext`, `ToolbarContentNext`, and `TooltrayNext` components for composing horizontal toolbars with responsive overflow, grouped controls, and keyboard navigation.
121
+
122
+ **What's included**
123
+
124
+ - Flat authoring with `TooltrayNext` children aligned to start, center, or end
125
+ - Explicit `ToolbarContentNext` regions for start, center, and end toolbar layouts
126
+ - Shared, named, grouped, independent, and non-overflowing tooltray overflow modes
127
+ - Overflow priority control for deciding which trays collapse first
128
+ - Bordered and transparent appearances with primary, secondary, and tertiary variants
129
+ - Horizontal toolbar semantics and keyboard navigation across toolbar controls and overflow menus
130
+ - `TooltrayNext` as a layout-only wrapper, with optional `role="group"` and accessible labels for meaningful control groups
131
+
132
+ ## Examples
133
+
134
+ **Basic Toolbar** — place `TooltrayNext` components directly inside `ToolbarNext`; use `align="end"` for trailing actions
135
+
136
+ ```tsx
137
+ import { Button, Dropdown, Input, Option } from "@salt-ds/core";
138
+ import { GridIcon, ListIcon, SearchIcon } from "@salt-ds/icons";
139
+ import { ToolbarNext, TooltrayNext } from "@salt-ds/lab";
140
+
141
+ const options = ["Option A", "Option B", "Option C"];
142
+
143
+ <ToolbarNext aria-label="Data controls">
144
+ <TooltrayNext>
145
+ <Dropdown bordered defaultSelected={["Option A"]} style={{ width: 160 }}>
146
+ {options.map((option) => (
147
+ <Option value={option} key={option} />
148
+ ))}
149
+ </Dropdown>
150
+ </TooltrayNext>
151
+ <TooltrayNext role="group" aria-label="Search">
152
+ <Input
153
+ bordered
154
+ startAdornment={<SearchIcon />}
155
+ placeholder="Search"
156
+ style={{ width: 180 }}
157
+ />
158
+ </TooltrayNext>
159
+ <TooltrayNext align="end" role="group" aria-label="View and actions">
160
+ <Button appearance="transparent" aria-label="Grid view">
161
+ <GridIcon aria-hidden />
162
+ </Button>
163
+ <Button appearance="transparent" aria-label="List view">
164
+ <ListIcon aria-hidden />
165
+ </Button>
166
+ <Button appearance="solid">Run</Button>
167
+ </TooltrayNext>
168
+ </ToolbarNext>;
169
+ ```
170
+
171
+ **Centered Toolbar With Named Overflow** — use `ToolbarContentNext` when you need explicit start, center, and end regions; named overflow keeps related actions behind a labelled trigger
172
+
173
+ ```tsx
174
+ import { Button, ToggleButton, ToggleButtonGroup } from "@salt-ds/core";
175
+ import { ToolbarContentNext, ToolbarNext, TooltrayNext } from "@salt-ds/lab";
176
+
177
+ <ToolbarNext aria-label="Centered actions">
178
+ <ToolbarContentNext position="start">
179
+ <TooltrayNext
180
+ overflowMode="none"
181
+ role="group"
182
+ aria-label="Primary action"
183
+ >
184
+ <Button appearance="solid">Create</Button>
185
+ </TooltrayNext>
186
+ </ToolbarContentNext>
187
+ <ToolbarContentNext position="center">
188
+ <TooltrayNext overflowMode="none" role="group" aria-label="View options">
189
+ <ToggleButtonGroup>
190
+ <ToggleButton value="day">Day</ToggleButton>
191
+ <ToggleButton value="week">Week</ToggleButton>
192
+ <ToggleButton value="month">Month</ToggleButton>
193
+ </ToggleButtonGroup>
194
+ </TooltrayNext>
195
+ </ToolbarContentNext>
196
+ <ToolbarContentNext position="end">
197
+ <TooltrayNext
198
+ overflowGroup="Actions"
199
+ overflowLabel="Actions"
200
+ overflowMode="grouped"
201
+ overflowPriority={5}
202
+ role="group"
203
+ aria-label="Secondary actions"
204
+ >
205
+ <Button appearance="transparent">Export</Button>
206
+ <Button appearance="transparent">Settings</Button>
207
+ </TooltrayNext>
208
+ </ToolbarContentNext>
209
+ </ToolbarNext>;
210
+ ```
211
+
212
+ ### Patch Changes
213
+
214
+ - Updated dependencies [fcf295b]
215
+ - @salt-ds/core@1.63.0
216
+
3
217
  ## 1.0.0-alpha.93
4
218
 
5
219
  ### Minor Changes
package/css/salt-lab.css CHANGED
@@ -1893,11 +1893,6 @@
1893
1893
  border-right: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-separable-primary-borderColor);
1894
1894
  }
1895
1895
 
1896
- /* src/mega-menu/MegaMenuContent.css */
1897
- .saltMegaMenuContent {
1898
- padding: var(--salt-spacing-300);
1899
- }
1900
-
1901
1896
  /* src/mega-menu/MegaMenuGroup.css */
1902
1897
  .saltMegaMenuGroup {
1903
1898
  display: flex;
@@ -1912,6 +1907,15 @@
1912
1907
  flex-direction: column;
1913
1908
  }
1914
1909
 
1910
+ /* src/mega-menu/MegaMenuGroups.css */
1911
+ .saltMegaMenuGroups {
1912
+ display: grid;
1913
+ grid-template-columns: repeat(auto-fit, var(--saltMegaMenuGroups-columnWidth, 12rem));
1914
+ gap: var(--salt-spacing-300);
1915
+ padding: var(--salt-spacing-300);
1916
+ max-inline-size: var(--saltMegaMenuPanel-availableWidth, calc(100vw - var(--salt-spacing-600)));
1917
+ }
1918
+
1915
1919
  /* src/mega-menu/MegaMenuHeader.css */
1916
1920
  .saltMegaMenuHeader-content {
1917
1921
  display: flex;
@@ -1952,6 +1956,14 @@
1952
1956
  height: var(--salt-size-base);
1953
1957
  align-items: center;
1954
1958
  }
1959
+ .saltMegaMenuItem-content {
1960
+ flex: 1 0;
1961
+ margin: var(--salt-spacing-75) 0;
1962
+ font-family: var(--salt-text-fontFamily);
1963
+ font-size: var(--salt-text-fontSize);
1964
+ font-weight: var(--salt-text-fontWeight);
1965
+ line-height: var(--salt-text-lineHeight);
1966
+ }
1955
1967
  .saltMegaMenuItem > a:focus-visible {
1956
1968
  outline: var(--salt-focused-outline);
1957
1969
  outline-offset: calc(var(--salt-size-fixed-100) * -2);
@@ -1973,16 +1985,6 @@
1973
1985
  pointer-events: none;
1974
1986
  }
1975
1987
 
1976
- /* src/mega-menu/MegaMenuItemContent.css */
1977
- .saltMegaMenuItemContent {
1978
- flex: 1 0;
1979
- margin: var(--salt-spacing-75) 0;
1980
- font-family: var(--salt-text-fontFamily);
1981
- font-size: var(--salt-text-fontSize);
1982
- font-weight: var(--salt-text-fontWeight);
1983
- line-height: var(--salt-text-lineHeight);
1984
- }
1985
-
1986
1988
  /* src/mega-menu/MegaMenuPanel.css */
1987
1989
  .saltMegaMenuPanel {
1988
1990
  display: flex;
@@ -1999,13 +2001,17 @@
1999
2001
  box-shadow: var(--salt-overlayable-shadow-popout);
2000
2002
  }
2001
2003
 
2002
- /* src/mega-menu/MegaMenuSection.css */
2003
- .saltMegaMenuSection {
2004
- display: grid;
2005
- grid-template-columns: repeat(auto-fit, var(--saltMegaMenuSection-columnWidth, 12rem));
2006
- gap: var(--salt-spacing-300);
2004
+ /* src/mega-menu/MegaMenuSupportingActions.css */
2005
+ .saltMegaMenuSupportingActions {
2006
+ display: flex;
2007
+ flex-wrap: wrap;
2008
+ width: fit-content;
2009
+ padding-bottom: var(--salt-spacing-300);
2010
+ }
2011
+
2012
+ /* src/mega-menu/MegaMenuSupportingContent.css */
2013
+ .saltMegaMenuSupportingContent {
2007
2014
  padding: var(--salt-spacing-300);
2008
- max-inline-size: var(--saltMegaMenuPanel-availableWidth, calc(100vw - var(--salt-spacing-600)));
2009
2015
  }
2010
2016
 
2011
2017
  /* src/menu-button/MenuButton.css */
@@ -3121,163 +3127,204 @@
3121
3127
  flex-basis: 0;
3122
3128
  }
3123
3129
 
3124
- /* src/tree/Tree.css */
3125
- .saltTree {
3130
+ /* src/toolbar-next/ToolbarContentNext.css */
3131
+ .saltToolbarContentNext {
3126
3132
  display: flex;
3127
- flex-direction: column;
3128
- gap: var(--salt-spacing-fixed-100);
3129
- list-style: none;
3130
- margin: 0;
3131
- padding: 0;
3132
- outline: none;
3133
- width: 100%;
3134
- box-sizing: border-box;
3133
+ align-items: center;
3134
+ gap: var(--salt-spacing-100);
3135
+ min-width: 0;
3136
+ flex-shrink: 0;
3135
3137
  }
3136
- .saltTree-disabled {
3137
- cursor: var(--salt-cursor-disabled);
3138
+ .saltToolbarContentNext[data-position=start] {
3139
+ justify-content: flex-start;
3138
3140
  }
3139
-
3140
- /* src/tree/TreeNode.css */
3141
- .saltTreeNode {
3142
- list-style: none;
3143
- position: relative;
3144
- cursor: var(--salt-cursor-hover);
3141
+ .saltToolbarContentNext[data-position=center] {
3142
+ justify-content: center;
3145
3143
  }
3146
- .saltTreeNode:focus {
3147
- outline: none;
3144
+ .saltToolbarContentNext[data-position=end] {
3145
+ justify-content: flex-end;
3148
3146
  }
3149
- .saltTreeNode:focus-visible > .saltTreeNodeTrigger,
3150
- .saltTreeNode-focusVisible > .saltTreeNodeTrigger {
3151
- outline: var(--salt-focused-outline);
3152
- outline-offset: calc(var(--salt-size-fixed-100) * -2);
3147
+ .saltToolbarContentNext[data-implicit] > .saltTooltrayNext[data-align=center],
3148
+ .saltToolbarContentNext[data-implicit] > .saltTooltrayNext[data-align=end] {
3149
+ margin-inline-start: 0;
3150
+ margin-inline-end: 0;
3151
+ }
3152
+
3153
+ /* src/toolbar-next/ToolbarNext.css */
3154
+ .saltToolbarNext {
3155
+ box-sizing: border-box;
3156
+ inline-size: 100%;
3157
+ min-width: 0;
3153
3158
  position: relative;
3154
- z-index: calc(var(--salt-zIndex-default) + 1);
3155
3159
  }
3156
- .saltTreeNode-selected:focus-visible > .saltTreeNodeTrigger,
3157
- .saltTreeNode-selected.saltTreeNode-focusVisible > .saltTreeNodeTrigger {
3158
- outline: var(--salt-focused-outline);
3159
- outline-offset: calc(var(--salt-size-fixed-100) * -2);
3160
- z-index: calc(var(--salt-zIndex-default) + 1);
3160
+ .saltToolbarNext-layout {
3161
+ align-items: center;
3162
+ --saltToolbarNext-band-gap: var(--salt-spacing-100);
3161
3163
  }
3162
- .saltTreeNode-group {
3164
+ .saltToolbarNext-layout:not([data-centered]) {
3163
3165
  display: flex;
3164
- flex-direction: column;
3165
- gap: var(--salt-spacing-fixed-100);
3166
- list-style: none;
3167
- margin: 0;
3168
- padding: 0;
3169
- padding-top: var(--salt-spacing-fixed-100);
3166
+ column-gap: var(--saltToolbarNext-band-gap);
3170
3167
  }
3171
- .saltTreeNode-checkbox {
3172
- flex-shrink: 0;
3173
- height: var(--salt-size-selectable);
3168
+ .saltToolbarNext-layout[data-centered] {
3169
+ display: grid;
3170
+ grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
3174
3171
  }
3175
- .saltTreeNode-icon {
3172
+ .saltToolbarNext-band {
3176
3173
  display: flex;
3177
3174
  align-items: center;
3175
+ gap: var(--saltToolbarNext-band-gap);
3176
+ min-width: 0;
3177
+ }
3178
+ .saltToolbarNext-layout:not([data-centered]) > .saltToolbarNext-band[data-band-position=end] {
3179
+ justify-content: flex-end;
3180
+ margin-inline-start: auto;
3181
+ }
3182
+ .saltToolbarNext-layout[data-centered] > .saltToolbarNext-band[data-band-position=start] {
3183
+ grid-column: 1;
3184
+ }
3185
+ .saltToolbarNext-layout[data-centered] > .saltToolbarNext-band[data-band-position=center] {
3186
+ grid-column: 2;
3178
3187
  justify-content: center;
3179
- width: var(--saltTreeNodeTrigger-iconSize);
3180
- min-width: var(--saltTreeNodeTrigger-iconSize);
3181
- height: var(--saltTreeNodeTrigger-iconSize);
3182
- flex-shrink: 0;
3183
3188
  }
3184
- .saltTreeNode-icon > * {
3185
- color: var(--salt-content-primary-foreground);
3189
+ .saltToolbarNext-layout[data-centered] > .saltToolbarNext-band[data-band-position=end] {
3190
+ grid-column: 3;
3191
+ justify-content: flex-end;
3186
3192
  }
3187
-
3188
- /* src/tree/TreeNodeExpansionIcon.css */
3189
- .saltTreeNodeExpansionIcon {
3193
+ .saltToolbarNext-fallback {
3190
3194
  display: flex;
3191
3195
  align-items: center;
3192
- justify-content: center;
3193
- width: var(--saltTreeNodeTrigger-iconSize);
3194
- min-width: var(--saltTreeNodeTrigger-iconSize);
3195
- height: var(--saltTreeNodeTrigger-iconSize);
3196
- flex-shrink: 0;
3197
- position: relative;
3196
+ gap: var(--salt-spacing-100);
3198
3197
  }
3199
- .saltTreeNodeExpansionIcon-icon {
3200
- color: var(--salt-content-primary-foreground);
3198
+ .saltToolbarNext-layout > * {
3199
+ min-width: 0;
3201
3200
  }
3202
- .saltTreeNodeExpansionIcon::before {
3203
- content: "";
3204
- display: block;
3201
+ .saltToolbarNext-primary {
3202
+ --toolbarNext-background: var(--salt-container-primary-background);
3203
+ --toolbarNext-borderColor: var(--salt-container-primary-borderColor);
3204
+ }
3205
+ .saltToolbarNext-secondary {
3206
+ --toolbarNext-background: var(--salt-container-secondary-background);
3207
+ --toolbarNext-borderColor: var(--salt-container-secondary-borderColor);
3208
+ }
3209
+ .saltToolbarNext-tertiary {
3210
+ --toolbarNext-background: var(--salt-container-tertiary-background);
3211
+ --toolbarNext-borderColor: var(--salt-container-tertiary-borderColor);
3212
+ }
3213
+ .saltToolbarNext-bordered {
3214
+ background: var(--saltToolbarNext-background, var(--toolbarNext-background));
3215
+ border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--saltToolbarNext-borderColor, var(--toolbarNext-borderColor));
3216
+ border-radius: var(--salt-palette-corner, 0);
3217
+ padding: var(--salt-spacing-100);
3218
+ }
3219
+ .saltToolbarNext-transparent {
3220
+ background: transparent;
3221
+ border: none;
3222
+ padding: 0;
3223
+ }
3224
+ .saltToolbarNext-measurements {
3225
+ display: flex;
3226
+ gap: var(--salt-spacing-100);
3205
3227
  position: absolute;
3206
- width: var(--salt-size-base);
3207
- height: var(--salt-size-base);
3208
- top: 50%;
3209
- left: 50%;
3210
- transform: translate(-50%, -50%);
3228
+ visibility: hidden;
3229
+ pointer-events: none;
3230
+ inset: 0 auto auto 0;
3231
+ block-size: 0;
3232
+ overflow: hidden;
3211
3233
  }
3212
-
3213
- /* src/tree/TreeNodeLabel.css */
3214
- .saltTreeNodeLabel {
3215
- flex: 1;
3216
- font-family: var(--salt-text-fontFamily);
3217
- font-size: var(--salt-text-fontSize);
3218
- font-weight: var(--salt-text-fontWeight);
3219
- line-height: var(--salt-text-lineHeight);
3220
- letter-spacing: var(--salt-text-letterSpacing);
3221
- word-break: break-word;
3234
+ .saltToolbarNext-measureTrigger {
3235
+ white-space: nowrap;
3222
3236
  }
3223
3237
 
3224
- /* src/tree/TreeNodeTrigger.css */
3225
- .saltTreeNodeTrigger {
3226
- box-sizing: border-box;
3238
+ /* src/toolbar-next/ToolbarNextOverflow.css */
3239
+ .saltToolbarNextOverflow-content {
3240
+ position: relative;
3241
+ }
3242
+ .saltToolbarNextOverflow-slot,
3243
+ .saltToolbarNextOverflow-panelItem {
3244
+ align-items: center;
3227
3245
  display: flex;
3228
- align-items: flex-start;
3246
+ flex-shrink: 0;
3229
3247
  gap: var(--salt-spacing-100);
3230
- width: 100%;
3231
- padding-top: calc(var(--salt-spacing-75) + var(--salt-spacing-50));
3232
- padding-bottom: calc(var(--salt-spacing-75) + var(--salt-spacing-50));
3233
- padding-right: var(--salt-spacing-100);
3234
- --saltTreeNodeTrigger-iconSize: max(var(--salt-size-icon), 12px);
3235
- --saltTreeNodeTrigger-indentStep: calc(var(--saltTreeNodeTrigger-iconSize) + var(--salt-spacing-100));
3236
- --saltTreeNodeTrigger-iconOffsetY: calc((var(--salt-text-lineHeight) - var(--saltTreeNodeTrigger-iconSize)) / 2);
3237
- --saltTreeNodeTrigger-checkboxOffsetY: calc((var(--salt-text-lineHeight) - var(--salt-size-selectable)) / 2);
3238
- padding-left: calc(var(--salt-spacing-100) + (var(--saltTreeNodeTrigger-indentStep) * (var(--saltTreeNode-level, 1) - 1)));
3239
- background: var(--salt-selectable-background);
3240
- color: var(--salt-content-primary-foreground);
3248
+ min-width: 0;
3241
3249
  }
3242
- .saltTree-multiselect .saltTreeNodeTrigger {
3243
- --saltTreeNodeTrigger-indentStep: calc(((var(--saltTreeNodeTrigger-iconSize) + var(--salt-size-selectable)) / 2) + var(--salt-spacing-100));
3250
+ .saltToolbarNextOverflow-slot[data-align=end] {
3251
+ margin-inline-start: auto;
3244
3252
  }
3245
- .saltTreeNodeTrigger:hover {
3246
- background: var(--salt-selectable-background-hover);
3253
+ .saltToolbarNextOverflow-slot[data-align=center] {
3254
+ margin-inline-start: auto;
3255
+ margin-inline-end: auto;
3247
3256
  }
3248
- .saltTreeNode:focus-visible > .saltTreeNodeTrigger,
3249
- .saltTreeNode-focusVisible > .saltTreeNodeTrigger {
3250
- background: var(--salt-selectable-background-hover);
3257
+ .saltToolbarNextOverflow-item {
3258
+ align-items: center;
3259
+ display: flex;
3260
+ flex-shrink: 0;
3261
+ min-width: 0;
3251
3262
  }
3252
- .saltTreeNode-selected > .saltTreeNodeTrigger {
3253
- background: var(--salt-selectable-background-selected);
3254
- box-shadow: 0 calc(var(--salt-size-fixed-100) * -1) 0 0 var(--salt-selectable-borderColor-selected), 0 var(--salt-size-fixed-100) 0 0 var(--salt-selectable-borderColor-selected);
3255
- position: relative;
3256
- z-index: var(--salt-zIndex-default);
3263
+ .saltToolbarNextOverflow-menu {
3264
+ display: flex;
3265
+ flex-shrink: 0;
3257
3266
  }
3258
- .saltTreeNode-selected:focus-visible > .saltTreeNodeTrigger,
3259
- .saltTreeNode-selected.saltTreeNode-focusVisible > .saltTreeNodeTrigger {
3260
- background: var(--salt-selectable-background-selected);
3267
+ .saltToolbarNextOverflow-itemHost,
3268
+ .saltToolbarNextOverflow-contentHost {
3269
+ display: contents;
3261
3270
  }
3262
- .saltTreeNode-disabled > .saltTreeNodeTrigger,
3263
- .saltTreeNode-disabled:hover > .saltTreeNodeTrigger {
3264
- opacity: 0.4;
3265
- cursor: var(--salt-cursor-disabled);
3266
- background: var(--salt-selectable-background);
3267
- color: var(--salt-content-primary-foreground);
3271
+ .saltToolbarNextOverflow-trigger {
3272
+ white-space: nowrap;
3268
3273
  }
3269
- .saltTreeNodeTrigger > .saltTreeNode-checkbox {
3270
- margin-top: var(--saltTreeNodeTrigger-checkboxOffsetY);
3271
- margin-bottom: 0;
3274
+ .saltToolbarNextOverflow-panel {
3275
+ background: var(--salt-container-primary-background);
3276
+ border: var(--salt-size-fixed-100) var(--salt-borderStyle-solid) var(--salt-selectable-borderColor-selected);
3277
+ border-radius: var(--salt-palette-corner, 0);
3278
+ box-shadow: var(--salt-overlayable-shadow-popout);
3279
+ box-sizing: border-box;
3280
+ max-width: min(32rem, calc(100vw - var(--salt-spacing-300)));
3281
+ overflow: auto;
3282
+ position: absolute;
3283
+ z-index: var(--salt-zIndex-flyover);
3284
+ }
3285
+ .saltToolbarNextOverflow-floatingDescendant.saltToolbarNextOverflow-floatingDescendant {
3286
+ z-index: calc(var(--salt-zIndex-flyover) + var(--salt-zIndex-default));
3287
+ }
3288
+ .saltToolbarNextOverflow-panelContent {
3289
+ align-items: center;
3290
+ display: flex;
3291
+ flex-wrap: wrap;
3292
+ gap: var(--salt-spacing-100);
3293
+ max-width: inherit;
3294
+ min-width: max-content;
3295
+ padding: var(--salt-spacing-100);
3296
+ }
3297
+ .saltToolbarNextOverflow-panel .saltTooltrayNext[data-align=center],
3298
+ .saltToolbarNextOverflow-panel .saltTooltrayNext[data-align=end] {
3299
+ margin-inline-start: 0;
3300
+ margin-inline-end: 0;
3272
3301
  }
3273
- .saltTreeNodeTrigger > .saltTreeNodeExpansionIcon,
3274
- .saltTreeNodeTrigger > .saltTreeNode-icon {
3275
- margin-top: var(--saltTreeNodeTrigger-iconOffsetY);
3302
+ .saltToolbarNextOverflow-panel .saltTooltrayNext > * {
3303
+ inline-size: auto;
3276
3304
  }
3277
- .saltTreeNodeTrigger > .saltIcon {
3278
- margin-top: var(--saltTreeNodeTrigger-iconOffsetY);
3305
+ .saltToolbarNextOverflow-content > .saltToolbarNextOverflow-slot .saltTooltrayNext[data-align=center],
3306
+ .saltToolbarNextOverflow-content > .saltToolbarNextOverflow-slot .saltTooltrayNext[data-align=end] {
3307
+ margin-inline-start: 0;
3308
+ margin-inline-end: 0;
3309
+ }
3310
+
3311
+ /* src/toolbar-next/TooltrayNext.css */
3312
+ .saltTooltrayNext {
3313
+ display: flex;
3314
+ align-items: center;
3315
+ flex: 0 0 auto;
3316
+ gap: var(--salt-spacing-100);
3317
+ min-width: 0;
3318
+ }
3319
+ .saltTooltrayNext > * {
3279
3320
  flex-shrink: 0;
3280
- color: var(--salt-content-primary-foreground);
3321
+ }
3322
+ .saltTooltrayNext[data-align=end] {
3323
+ margin-inline-start: auto;
3324
+ }
3325
+ .saltTooltrayNext[data-align=center] {
3326
+ margin-inline-start: auto;
3327
+ margin-inline-end: auto;
3281
3328
  }
3282
3329
 
3283
3330
  /* src/window/ElectronWindow.css */
@@ -3390,4 +3437,4 @@
3390
3437
  margin: calc(var(--salt-size-unit) / 2) 0;
3391
3438
  }
3392
3439
 
3393
- /* src/4e80e272-9a7e-4873-a06d-4a946b33ff4b.css */
3440
+ /* src/0af170c9-7e3f-4fb8-8504-21af9780540e.css */