@galaxy-io/dls 1.6.0 → 2.0.0

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 (538) hide show
  1. package/README.md +47 -50
  2. package/biome/index.json +74 -0
  3. package/biome/plugins/no-hex-literal.grit +20 -0
  4. package/biome/plugins/no-inline-style.grit +13 -0
  5. package/biome/plugins/no-margin.grit +9 -0
  6. package/biome/plugins/warn/no-hex-literal.grit +23 -0
  7. package/biome/plugins/warn/no-inline-style.grit +13 -0
  8. package/biome/plugins/warn/no-margin.grit +9 -0
  9. package/dist/a11y/FocusScope.d.ts +44 -0
  10. package/dist/a11y/FocusScope.js +229 -0
  11. package/dist/a11y/VisuallyHidden.d.ts +21 -0
  12. package/dist/a11y/VisuallyHidden.js +30 -0
  13. package/dist/avatar/Avatar.d.ts +56 -14
  14. package/dist/avatar/Avatar.js +250 -96
  15. package/dist/avatar/AvatarGroup.d.ts +43 -0
  16. package/dist/avatar/AvatarGroup.js +153 -0
  17. package/dist/backgrounds/GridBackground.d.ts +48 -0
  18. package/dist/backgrounds/GridBackground.js +146 -0
  19. package/dist/beacons/Beacon.d.ts +86 -22
  20. package/dist/beacons/Beacon.js +170 -47
  21. package/dist/brand/GalaxyFilamentWordmark.d.ts +30 -0
  22. package/dist/brand/GalaxyFilamentWordmark.js +39 -0
  23. package/dist/brand/GalaxyLogomark.d.ts +26 -0
  24. package/dist/brand/GalaxyLogomark.js +41 -0
  25. package/dist/brand/GalaxyLogomarkAnimation.d.ts +36 -0
  26. package/dist/brand/GalaxyLogomarkAnimation.js +107 -0
  27. package/dist/brand/GalaxyWordmark.d.ts +30 -0
  28. package/dist/brand/GalaxyWordmark.js +63 -0
  29. package/dist/brand/assets/galaxy-logomark-animation.js +136678 -0
  30. package/dist/brand/brandMark.d.ts +26 -0
  31. package/dist/brand/brandMark.js +35 -0
  32. package/dist/buttons/Button.d.ts +148 -59
  33. package/dist/buttons/Button.js +437 -227
  34. package/dist/buttons/ButtonGroup.d.ts +38 -0
  35. package/dist/buttons/ButtonGroup.js +68 -0
  36. package/dist/buttons/CopyButton.d.ts +77 -0
  37. package/dist/buttons/CopyButton.js +65 -0
  38. package/dist/charts/AreaChart.d.ts +49 -0
  39. package/dist/charts/AreaChart.js +31 -0
  40. package/dist/charts/BarChart.d.ts +54 -67
  41. package/dist/charts/BarChart.js +136 -116
  42. package/dist/charts/ChartAxis.d.ts +35 -40
  43. package/dist/charts/ChartAxis.js +114 -90
  44. package/dist/charts/ChartCategoryTargets.d.ts +12 -26
  45. package/dist/charts/ChartCategoryTargets.js +32 -20
  46. package/dist/charts/ChartFrame.d.ts +69 -116
  47. package/dist/charts/ChartFrame.js +253 -119
  48. package/dist/charts/ChartGroupProvider.d.ts +30 -41
  49. package/dist/charts/ChartGroupProvider.js +20 -7
  50. package/dist/charts/ChartLegend.d.ts +27 -48
  51. package/dist/charts/ChartLegend.js +206 -125
  52. package/dist/charts/ChartMarkTargets.d.ts +12 -28
  53. package/dist/charts/ChartMarkTargets.js +33 -20
  54. package/dist/charts/ChartPrimitives.d.ts +50 -305
  55. package/dist/charts/ChartPrimitives.js +65 -413
  56. package/dist/charts/ChartTooltip.d.ts +20 -26
  57. package/dist/charts/ChartTooltip.js +77 -40
  58. package/dist/charts/Heatmap.d.ts +35 -0
  59. package/dist/charts/Heatmap.js +295 -0
  60. package/dist/charts/LineChart.d.ts +54 -47
  61. package/dist/charts/LineChart.js +159 -117
  62. package/dist/charts/PieChart.d.ts +32 -53
  63. package/dist/charts/PieChart.js +149 -135
  64. package/dist/charts/Sparkline.d.ts +107 -0
  65. package/dist/charts/Sparkline.js +244 -0
  66. package/dist/charts/StatChart.d.ts +37 -13
  67. package/dist/charts/StatChart.js +82 -35
  68. package/dist/charts/barChartGeometry.d.ts +138 -86
  69. package/dist/charts/barChartGeometry.js +122 -101
  70. package/dist/charts/barChartLegend.d.ts +14 -18
  71. package/dist/charts/barChartLegend.js +18 -13
  72. package/dist/charts/chartFormat.d.ts +12 -18
  73. package/dist/charts/chartFormat.js +20 -52
  74. package/dist/charts/chartPalette.d.ts +33 -0
  75. package/dist/charts/chartPalette.js +68 -0
  76. package/dist/charts/chartScales.d.ts +41 -108
  77. package/dist/charts/chartScales.js +62 -128
  78. package/dist/charts/constants.d.ts +96 -256
  79. package/dist/charts/constants.js +105 -275
  80. package/dist/charts/heatmapGeometry.d.ts +95 -0
  81. package/dist/charts/heatmapGeometry.js +155 -0
  82. package/dist/charts/lineChartGeometry.d.ts +108 -58
  83. package/dist/charts/lineChartGeometry.js +120 -78
  84. package/dist/charts/pieChartGeometry.d.ts +66 -40
  85. package/dist/charts/pieChartGeometry.js +68 -38
  86. package/dist/charts/types.d.ts +197 -466
  87. package/dist/charts/types.js +55 -144
  88. package/dist/charts/useCartesianChartLayout.d.ts +28 -59
  89. package/dist/charts/useCartesianChartLayout.js +47 -32
  90. package/dist/charts/useChartDimensions.d.ts +19 -40
  91. package/dist/charts/useChartDimensions.js +40 -56
  92. package/dist/charts/useChartFormatters.d.ts +6 -15
  93. package/dist/charts/useChartFormatters.js +4 -9
  94. package/dist/charts/useChartInteraction.d.ts +47 -116
  95. package/dist/charts/useChartInteraction.js +95 -71
  96. package/dist/charts/useChartTooltipPosition.d.ts +29 -39
  97. package/dist/charts/useChartTooltipPosition.js +14 -5
  98. package/dist/charts/useSeriesColorResolver.d.ts +11 -33
  99. package/dist/charts/useSeriesColorResolver.js +19 -12
  100. package/dist/chips/Chip.d.ts +155 -44
  101. package/dist/chips/Chip.js +329 -155
  102. package/dist/chips/ChipGroup.d.ts +53 -0
  103. package/dist/chips/ChipGroup.js +98 -0
  104. package/dist/drawer/Drawer.d.ts +81 -17
  105. package/dist/drawer/Drawer.js +370 -65
  106. package/dist/dropdown/Dropdown.d.ts +80 -63
  107. package/dist/dropdown/Dropdown.js +127 -129
  108. package/dist/editor/CodeEditor.d.ts +119 -40
  109. package/dist/editor/CodeEditor.js +490 -400
  110. package/dist/editor/CodeEditorReactWidget.d.ts +20 -17
  111. package/dist/editor/CodeEditorReactWidget.js +28 -21
  112. package/dist/feedback/Alert.d.ts +49 -0
  113. package/dist/feedback/Alert.js +172 -0
  114. package/dist/feedback/EmptyState.d.ts +39 -0
  115. package/dist/feedback/EmptyState.js +109 -0
  116. package/dist/feedback/ProgressBar.d.ts +125 -0
  117. package/dist/feedback/ProgressBar.js +183 -0
  118. package/dist/feedback/ProgressCircle.d.ts +99 -0
  119. package/dist/feedback/ProgressCircle.js +187 -0
  120. package/dist/feedback/Skeleton.d.ts +69 -0
  121. package/dist/feedback/Skeleton.js +130 -0
  122. package/dist/feedback/Spinner.d.ts +63 -0
  123. package/dist/feedback/Spinner.js +141 -0
  124. package/dist/fonts.css +70 -0
  125. package/dist/hooks/internal/useIsClient.d.ts +2 -0
  126. package/dist/hooks/internal/useIsClient.js +14 -0
  127. package/dist/hooks/useClipboard.d.ts +19 -0
  128. package/dist/hooks/useClipboard.js +45 -0
  129. package/dist/hooks/useControlledOpenState.d.ts +21 -0
  130. package/dist/hooks/useControlledOpenState.js +19 -0
  131. package/dist/hooks/useControlledState.d.ts +19 -0
  132. package/dist/hooks/useControlledState.js +22 -0
  133. package/dist/hooks/useDebouncedValue.d.ts +14 -0
  134. package/dist/hooks/useDebouncedValue.js +33 -0
  135. package/dist/hooks/useDisclosure.d.ts +26 -0
  136. package/dist/hooks/useDisclosure.js +36 -0
  137. package/dist/hooks/useDismiss.d.ts +23 -27
  138. package/dist/hooks/useDismiss.js +39 -27
  139. package/dist/hooks/useElementClientSize.d.ts +10 -10
  140. package/dist/hooks/useElementClientSize.js +8 -11
  141. package/dist/hooks/useElementWidth.d.ts +6 -13
  142. package/dist/hooks/useElementWidth.js +6 -14
  143. package/dist/hooks/useField.d.ts +47 -0
  144. package/dist/hooks/useField.js +40 -0
  145. package/dist/hooks/useHotkey.d.ts +77 -0
  146. package/dist/hooks/useHotkey.js +246 -0
  147. package/dist/hooks/useIsMac.d.ts +12 -0
  148. package/dist/hooks/useIsMac.js +27 -0
  149. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +17 -0
  150. package/dist/hooks/useIsomorphicLayoutEffect.js +20 -0
  151. package/dist/hooks/useLocalStorage.d.ts +28 -0
  152. package/dist/hooks/useLocalStorage.js +145 -0
  153. package/dist/hooks/useMediaQuery.d.ts +11 -0
  154. package/dist/hooks/useMediaQuery.js +23 -0
  155. package/dist/hooks/usePrefersReducedMotion.d.ts +12 -0
  156. package/dist/hooks/usePrefersReducedMotion.js +25 -0
  157. package/dist/hooks/useResize.d.ts +42 -62
  158. package/dist/hooks/useResize.js +43 -31
  159. package/dist/icons/Icon.d.ts +64 -37
  160. package/dist/icons/Icon.js +96 -37
  161. package/dist/icons/internal/IconSlot.d.ts +10 -0
  162. package/dist/icons/internal/IconSlot.js +32 -0
  163. package/dist/inputs/CheckboxGroup.d.ts +115 -0
  164. package/dist/inputs/CheckboxGroup.js +183 -0
  165. package/dist/inputs/CheckboxInput.d.ts +98 -28
  166. package/dist/inputs/CheckboxInput.js +218 -88
  167. package/dist/inputs/ColorInput.d.ts +115 -29
  168. package/dist/inputs/ColorInput.js +748 -326
  169. package/dist/inputs/CopyInput.d.ts +49 -20
  170. package/dist/inputs/CopyInput.js +57 -49
  171. package/dist/inputs/CronInput.d.ts +94 -0
  172. package/dist/inputs/CronInput.js +618 -0
  173. package/dist/inputs/DateInput.d.ts +175 -28
  174. package/dist/inputs/DateInput.js +1109 -451
  175. package/dist/inputs/DurationInput.d.ts +101 -0
  176. package/dist/inputs/DurationInput.js +441 -0
  177. package/dist/inputs/Field.d.ts +75 -0
  178. package/dist/inputs/Field.js +247 -0
  179. package/dist/inputs/Fieldset.d.ts +53 -0
  180. package/dist/inputs/Fieldset.js +149 -0
  181. package/dist/inputs/FileInput.d.ts +110 -0
  182. package/dist/inputs/FileInput.js +476 -0
  183. package/dist/inputs/Input.d.ts +148 -187
  184. package/dist/inputs/Input.js +339 -259
  185. package/dist/inputs/KeyValueInput.d.ts +120 -0
  186. package/dist/inputs/KeyValueInput.js +383 -0
  187. package/dist/inputs/MultiSelectInput.d.ts +165 -54
  188. package/dist/inputs/MultiSelectInput.js +175 -559
  189. package/dist/inputs/NumberInput.d.ts +65 -9
  190. package/dist/inputs/NumberInput.js +197 -40
  191. package/dist/inputs/PasswordInput.d.ts +17 -12
  192. package/dist/inputs/PasswordInput.js +33 -33
  193. package/dist/inputs/PinInput.d.ts +117 -0
  194. package/dist/inputs/PinInput.js +364 -0
  195. package/dist/inputs/RadioGroup.d.ts +115 -0
  196. package/dist/inputs/RadioGroup.js +179 -0
  197. package/dist/inputs/RadioInput.d.ts +87 -24
  198. package/dist/inputs/RadioInput.js +182 -95
  199. package/dist/inputs/SearchInput.d.ts +66 -0
  200. package/dist/inputs/SearchInput.js +156 -0
  201. package/dist/inputs/SelectInput.d.ts +195 -55
  202. package/dist/inputs/SelectInput.js +1308 -446
  203. package/dist/inputs/SliderInput.d.ts +150 -30
  204. package/dist/inputs/SliderInput.js +441 -186
  205. package/dist/inputs/SwitchInput.d.ts +109 -0
  206. package/dist/inputs/SwitchInput.js +248 -0
  207. package/dist/inputs/TagInput.d.ts +117 -0
  208. package/dist/inputs/TagInput.js +408 -0
  209. package/dist/inputs/TextAreaInput.d.ts +146 -44
  210. package/dist/inputs/TextAreaInput.js +292 -198
  211. package/dist/inputs/TextInput.d.ts +4 -13
  212. package/dist/inputs/TextInput.js +13 -48
  213. package/dist/inputs/ToggleInput.d.ts +120 -22
  214. package/dist/inputs/ToggleInput.js +262 -116
  215. package/dist/inputs/internal/bareField.d.ts +18 -0
  216. package/dist/inputs/internal/bareField.js +38 -0
  217. package/dist/inputs/internal/devWarn.d.ts +7 -0
  218. package/dist/inputs/internal/devWarn.js +30 -0
  219. package/dist/inputs/internal/fieldFrame.d.ts +34 -0
  220. package/dist/inputs/internal/fieldFrame.js +64 -0
  221. package/dist/inputs/internal/fieldWiring.d.ts +50 -0
  222. package/dist/inputs/internal/fieldWiring.js +38 -0
  223. package/dist/inputs/internal/innerButton.d.ts +2 -0
  224. package/dist/inputs/internal/innerButton.js +24 -0
  225. package/dist/inputs/internal/ownField.d.ts +45 -0
  226. package/dist/inputs/internal/ownField.js +58 -0
  227. package/dist/inputs/internal/predicates.d.ts +9 -0
  228. package/dist/inputs/internal/predicates.js +11 -0
  229. package/dist/inputs/internal/useComboboxPopover.d.ts +46 -0
  230. package/dist/inputs/internal/useComboboxPopover.js +92 -0
  231. package/dist/json/JsonViewer.d.ts +62 -0
  232. package/dist/json/JsonViewer.js +483 -0
  233. package/dist/layout/Box.d.ts +87 -0
  234. package/dist/layout/Box.js +109 -0
  235. package/dist/layout/Divider.d.ts +25 -0
  236. package/dist/layout/Divider.js +70 -0
  237. package/dist/layout/Flex.d.ts +139 -0
  238. package/dist/layout/Flex.js +165 -0
  239. package/dist/layout/FlexItem.d.ts +72 -0
  240. package/dist/layout/FlexItem.js +84 -0
  241. package/dist/layout/Grid.d.ts +140 -0
  242. package/dist/layout/Grid.js +178 -0
  243. package/dist/layout/Portal.d.ts +29 -0
  244. package/dist/layout/Portal.js +27 -0
  245. package/dist/layout/ResizablePanels.d.ts +88 -0
  246. package/dist/layout/ResizablePanels.js +198 -0
  247. package/dist/layout/ResizeHandle.d.ts +48 -0
  248. package/dist/layout/ResizeHandle.js +143 -0
  249. package/dist/layout/ScrollArea.d.ts +30 -0
  250. package/dist/layout/ScrollArea.js +138 -0
  251. package/dist/links/Link.d.ts +101 -1
  252. package/dist/links/Link.js +166 -4
  253. package/dist/lists/BulletedList.d.ts +25 -7
  254. package/dist/lists/BulletedList.js +72 -27
  255. package/dist/lists/DescriptionList.d.ts +91 -0
  256. package/dist/lists/DescriptionList.js +147 -0
  257. package/dist/menu/ContextMenu.d.ts +64 -0
  258. package/dist/menu/ContextMenu.js +34 -0
  259. package/dist/menu/Menu.d.ts +280 -0
  260. package/dist/menu/Menu.js +1003 -0
  261. package/dist/modal/ConfirmDialog.d.ts +55 -0
  262. package/dist/modal/ConfirmDialog.js +151 -0
  263. package/dist/modal/Modal.d.ts +64 -14
  264. package/dist/modal/Modal.js +189 -48
  265. package/dist/navigation/Breadcrumbs.d.ts +65 -0
  266. package/dist/navigation/Breadcrumbs.js +243 -0
  267. package/dist/navigation/CommandPalette.d.ts +83 -0
  268. package/dist/navigation/CommandPalette.js +509 -0
  269. package/dist/navigation/Pagination.d.ts +87 -0
  270. package/dist/navigation/Pagination.js +300 -0
  271. package/dist/navigation/SidebarNav.d.ts +107 -0
  272. package/dist/navigation/SidebarNav.js +341 -0
  273. package/dist/navigation/Stepper.d.ts +52 -0
  274. package/dist/navigation/Stepper.js +207 -0
  275. package/dist/navigation/Tabs.d.ts +113 -0
  276. package/dist/navigation/Tabs.js +543 -0
  277. package/dist/navigation/Topbar.d.ts +20 -0
  278. package/dist/navigation/Topbar.js +62 -0
  279. package/dist/overlay/OverlayProvider.d.ts +28 -32
  280. package/dist/overlay/OverlayProvider.js +42 -93
  281. package/dist/overlay/useOverlay.d.ts +88 -12
  282. package/dist/overlay/useOverlay.js +220 -43
  283. package/dist/overlays/Popover.d.ts +114 -0
  284. package/dist/overlays/Popover.js +389 -0
  285. package/dist/shapes/Circle.d.ts +84 -8
  286. package/dist/shapes/Circle.js +122 -20
  287. package/dist/shapes/Square.d.ts +84 -8
  288. package/dist/shapes/Square.js +123 -20
  289. package/dist/styles/mixins.d.ts +35 -0
  290. package/dist/styles/mixins.js +60 -0
  291. package/dist/styles.css +1 -202
  292. package/dist/table/InfiniteSpreadsheet.d.ts +140 -10
  293. package/dist/table/InfiniteSpreadsheet.js +762 -225
  294. package/dist/table/InfiniteTable.d.ts +116 -14
  295. package/dist/table/InfiniteTable.js +287 -429
  296. package/dist/table/SpreadsheetCellEditor.d.ts +54 -6
  297. package/dist/table/SpreadsheetCellEditor.js +163 -84
  298. package/dist/table/TableCore.d.ts +252 -0
  299. package/dist/table/TableCore.js +1077 -0
  300. package/dist/table/VirtualizedInfiniteTable.d.ts +104 -14
  301. package/dist/table/VirtualizedInfiniteTable.js +280 -219
  302. package/dist/table/types.d.ts +66 -244
  303. package/dist/table/types.js +0 -51
  304. package/dist/table/useInfiniteScrollSentinel.d.ts +25 -21
  305. package/dist/table/useInfiniteScrollSentinel.js +38 -30
  306. package/dist/table/useSpreadsheetCellNavigation.d.ts +44 -0
  307. package/dist/table/useSpreadsheetCellNavigation.js +141 -0
  308. package/dist/table/useTableColumnLayout.d.ts +90 -25
  309. package/dist/table/useTableColumnLayout.js +255 -50
  310. package/dist/table/useTableKeyboardNavigation.d.ts +32 -21
  311. package/dist/table/useTableKeyboardNavigation.js +95 -71
  312. package/dist/table/useTableRowSelection.d.ts +24 -25
  313. package/dist/table/useTableRowSelection.js +57 -84
  314. package/dist/table/useTableVirtualizer.d.ts +20 -0
  315. package/dist/table/useTableVirtualizer.js +48 -0
  316. package/dist/text/Bold.d.ts +5 -6
  317. package/dist/text/Bold.js +16 -15
  318. package/dist/text/Code.d.ts +5 -6
  319. package/dist/text/Code.js +16 -25
  320. package/dist/text/CodeBlock.d.ts +77 -0
  321. package/dist/text/CodeBlock.js +373 -0
  322. package/dist/text/EditableText.d.ts +55 -15
  323. package/dist/text/EditableText.js +153 -135
  324. package/dist/text/Ellipsis.d.ts +34 -8
  325. package/dist/text/Ellipsis.js +55 -23
  326. package/dist/text/Kbd.d.ts +72 -0
  327. package/dist/text/Kbd.js +284 -0
  328. package/dist/text/MarkdownText.d.ts +27 -10
  329. package/dist/text/MarkdownText.js +317 -300
  330. package/dist/text/RequiredMarker.d.ts +17 -5
  331. package/dist/text/RequiredMarker.js +34 -36
  332. package/dist/text/Selectable.d.ts +5 -6
  333. package/dist/text/Selectable.js +16 -13
  334. package/dist/text/Span.d.ts +82 -0
  335. package/dist/text/Span.js +115 -0
  336. package/dist/text/Text.d.ts +128 -41
  337. package/dist/text/Text.js +209 -76
  338. package/dist/theme/GalaxyProvider.d.ts +75 -0
  339. package/dist/theme/GalaxyProvider.js +223 -0
  340. package/dist/theme/ThemeSwitcher.d.ts +52 -0
  341. package/dist/theme/ThemeSwitcher.js +94 -0
  342. package/dist/theme/enums.d.ts +118 -0
  343. package/dist/theme/enums.js +144 -0
  344. package/dist/theme/tokens/dark.d.ts +2 -0
  345. package/dist/theme/tokens/dark.js +275 -0
  346. package/dist/theme/tokens/generate.d.ts +15 -0
  347. package/dist/theme/tokens/generate.js +47 -0
  348. package/dist/theme/tokens/light.d.ts +2 -0
  349. package/dist/theme/tokens/light.js +274 -0
  350. package/dist/theme/tokens/palette.d.ts +14 -0
  351. package/dist/theme/tokens/palette.js +153 -0
  352. package/dist/theme/tokens/scales.d.ts +26 -0
  353. package/dist/theme/tokens/scales.js +154 -0
  354. package/dist/theme/tokens/t.d.ts +3 -0
  355. package/dist/theme/tokens/t.js +25 -0
  356. package/dist/theme/tokens/types.d.ts +189 -0
  357. package/dist/theme/tokens/types.js +0 -0
  358. package/dist/theme/useGalaxyTheme.d.ts +46 -0
  359. package/dist/theme/useGalaxyTheme.js +36 -0
  360. package/dist/theme/useInverseScope.d.ts +18 -0
  361. package/dist/theme/useInverseScope.js +33 -0
  362. package/dist/three/GalaxyLogomark3D.d.ts +46 -0
  363. package/dist/three/GalaxyLogomark3D.js +134 -0
  364. package/dist/three/assets/galaxy-logomark.js +4 -0
  365. package/dist/three/galaxyLogomark3DScene.d.ts +27 -0
  366. package/dist/three/galaxyLogomark3DScene.js +165 -0
  367. package/dist/timeline/Timeline.d.ts +99 -0
  368. package/dist/timeline/Timeline.js +269 -0
  369. package/dist/toast/Toast.d.ts +43 -19
  370. package/dist/toast/Toast.js +130 -89
  371. package/dist/toast/ToastProvider.d.ts +23 -23
  372. package/dist/toast/ToastProvider.js +298 -101
  373. package/dist/toast/ToastViewport.d.ts +12 -0
  374. package/dist/toast/ToastViewport.js +210 -0
  375. package/dist/toast/useToast.d.ts +139 -5
  376. package/dist/toast/useToast.js +15 -13
  377. package/dist/tokens.css +654 -0
  378. package/dist/tooltip/Tooltip.d.ts +64 -44
  379. package/dist/tooltip/Tooltip.js +280 -73
  380. package/dist/tooltip/internal/LazyTooltip.d.ts +7 -0
  381. package/dist/tooltip/internal/LazyTooltip.js +53 -0
  382. package/dist/transform/Fade.d.ts +33 -11
  383. package/dist/transform/Fade.js +71 -19
  384. package/dist/transform/Flasher.d.ts +25 -0
  385. package/dist/transform/Flasher.js +39 -0
  386. package/dist/transform/Rotate.d.ts +24 -12
  387. package/dist/transform/Rotate.js +36 -22
  388. package/dist/transform/ScaleFade.d.ts +36 -11
  389. package/dist/transform/ScaleFade.js +86 -28
  390. package/dist/transform/internal/CollapseMotion.d.ts +10 -0
  391. package/dist/transform/internal/CollapseMotion.js +65 -0
  392. package/dist/tree/Tree.d.ts +85 -0
  393. package/dist/tree/Tree.js +387 -0
  394. package/dist/tree/treeRow.d.ts +39 -0
  395. package/dist/tree/treeRow.js +75 -0
  396. package/dist/utils/colors.d.ts +46 -13
  397. package/dist/utils/colors.js +92 -34
  398. package/dist/utils/css.d.ts +23 -0
  399. package/dist/utils/css.js +30 -0
  400. package/dist/utils/format.d.ts +58 -0
  401. package/dist/utils/format.js +220 -0
  402. package/dist/vite/index.d.ts +16 -0
  403. package/dist/vite/index.js +52 -0
  404. package/dist/widget/Widget.d.ts +164 -48
  405. package/dist/widget/Widget.js +335 -96
  406. package/dist/widget/WidgetGroup.d.ts +36 -0
  407. package/dist/widget/WidgetGroup.js +103 -0
  408. package/package.json +851 -157
  409. package/dist/accordion/Accordion.d.ts +0 -54
  410. package/dist/accordion/Accordion.js +0 -183
  411. package/dist/assets/components/GalaxyFilamentWordmarkDark.d.ts +0 -3
  412. package/dist/assets/components/GalaxyFilamentWordmarkDark.js +0 -14
  413. package/dist/assets/components/GalaxyFilamentWordmarkLight.d.ts +0 -3
  414. package/dist/assets/components/GalaxyFilamentWordmarkLight.js +0 -14
  415. package/dist/assets/components/GalaxyLogomarkDark.d.ts +0 -3
  416. package/dist/assets/components/GalaxyLogomarkDark.js +0 -11
  417. package/dist/assets/components/GalaxyLogomarkLight.d.ts +0 -3
  418. package/dist/assets/components/GalaxyLogomarkLight.js +0 -17
  419. package/dist/assets/components/GalaxyWordmarkDark.d.ts +0 -3
  420. package/dist/assets/components/GalaxyWordmarkDark.js +0 -15
  421. package/dist/assets/components/GalaxyWordmarkLight.d.ts +0 -3
  422. package/dist/assets/components/GalaxyWordmarkLight.js +0 -28
  423. package/dist/assets/models/galaxy-animation.js +0 -136666
  424. package/dist/assets/models/galaxy-logomark.js +0 -4
  425. package/dist/avatar/AvatarShimmer.d.ts +0 -30
  426. package/dist/avatar/AvatarShimmer.js +0 -22
  427. package/dist/backgrounds/CellGridBackground.d.ts +0 -24
  428. package/dist/backgrounds/CellGridBackground.js +0 -44
  429. package/dist/backgrounds/CrossGridBackground.d.ts +0 -26
  430. package/dist/backgrounds/CrossGridBackground.js +0 -49
  431. package/dist/backgrounds/DotGridBackground.d.ts +0 -24
  432. package/dist/backgrounds/DotGridBackground.js +0 -47
  433. package/dist/badge/Badge.d.ts +0 -42
  434. package/dist/badge/Badge.js +0 -99
  435. package/dist/charts/ChartEmptyState.d.ts +0 -17
  436. package/dist/charts/ChartEmptyState.js +0 -29
  437. package/dist/charts/ProgressBar.d.ts +0 -29
  438. package/dist/charts/ProgressBar.js +0 -65
  439. package/dist/charts/chartTheme.d.ts +0 -18
  440. package/dist/charts/chartTheme.js +0 -26
  441. package/dist/containers/FlexItem.d.ts +0 -50
  442. package/dist/containers/FlexItem.js +0 -91
  443. package/dist/containers/FlexWrapper.d.ts +0 -96
  444. package/dist/containers/FlexWrapper.js +0 -143
  445. package/dist/containers/GridWrapper.d.ts +0 -79
  446. package/dist/containers/GridWrapper.js +0 -125
  447. package/dist/containers/Spacing.d.ts +0 -23
  448. package/dist/containers/Spacing.js +0 -59
  449. package/dist/containers/Wrapper.d.ts +0 -26
  450. package/dist/containers/Wrapper.js +0 -54
  451. package/dist/dividers/HorizontalDivider.d.ts +0 -7
  452. package/dist/dividers/HorizontalDivider.js +0 -39
  453. package/dist/dividers/VerticalDivider.d.ts +0 -6
  454. package/dist/dividers/VerticalDivider.js +0 -21
  455. package/dist/icons/GalaxyFilamentWordmark.d.ts +0 -11
  456. package/dist/icons/GalaxyFilamentWordmark.js +0 -25
  457. package/dist/icons/GalaxyLogomark.d.ts +0 -13
  458. package/dist/icons/GalaxyLogomark.js +0 -27
  459. package/dist/icons/GalaxyLogomark3D.d.ts +0 -56
  460. package/dist/icons/GalaxyLogomark3D.js +0 -319
  461. package/dist/icons/GalaxyLogomarkAnimation.d.ts +0 -18
  462. package/dist/icons/GalaxyLogomarkAnimation.js +0 -48
  463. package/dist/icons/GalaxyWordmark.d.ts +0 -11
  464. package/dist/icons/GalaxyWordmark.js +0 -25
  465. package/dist/inputs/MultiTextInput.d.ts +0 -32
  466. package/dist/inputs/MultiTextInput.js +0 -180
  467. package/dist/inputs/SwitcherInput.d.ts +0 -27
  468. package/dist/inputs/SwitcherInput.js +0 -64
  469. package/dist/inputs/hooks.d.ts +0 -10
  470. package/dist/inputs/hooks.js +0 -22
  471. package/dist/overlay/constants.d.ts +0 -28
  472. package/dist/overlay/constants.js +0 -37
  473. package/dist/resizable/HorizontalResizeHandle.d.ts +0 -17
  474. package/dist/resizable/HorizontalResizeHandle.js +0 -38
  475. package/dist/resizable/VerticalResizeHandle.d.ts +0 -18
  476. package/dist/resizable/VerticalResizeHandle.js +0 -39
  477. package/dist/table/SpreadsheetCell.d.ts +0 -21
  478. package/dist/table/SpreadsheetCell.js +0 -71
  479. package/dist/table/SpreadsheetHeaderCell.d.ts +0 -23
  480. package/dist/table/SpreadsheetHeaderCell.js +0 -91
  481. package/dist/table/SpreadsheetMenuItem.d.ts +0 -14
  482. package/dist/table/SpreadsheetMenuItem.js +0 -33
  483. package/dist/table/SpreadsheetPrimitives.d.ts +0 -172
  484. package/dist/table/SpreadsheetPrimitives.js +0 -105
  485. package/dist/table/SpreadsheetRow.d.ts +0 -33
  486. package/dist/table/SpreadsheetRow.js +0 -73
  487. package/dist/table/SpreadsheetRowActionCell.d.ts +0 -14
  488. package/dist/table/SpreadsheetRowActionCell.js +0 -51
  489. package/dist/table/TableExpandCell.d.ts +0 -11
  490. package/dist/table/TableExpandCell.js +0 -24
  491. package/dist/table/TableExpandedRow.d.ts +0 -16
  492. package/dist/table/TableExpandedRow.js +0 -77
  493. package/dist/table/TableHeaderCellContent.d.ts +0 -30
  494. package/dist/table/TableHeaderCellContent.js +0 -48
  495. package/dist/table/TablePrimitives.d.ts +0 -313
  496. package/dist/table/TablePrimitives.js +0 -302
  497. package/dist/table/TableSelectCell.d.ts +0 -18
  498. package/dist/table/TableSelectCell.js +0 -27
  499. package/dist/table/TableStatusRow.d.ts +0 -18
  500. package/dist/table/TableStatusRow.js +0 -50
  501. package/dist/table/useSpreadsheetEditing.d.ts +0 -13
  502. package/dist/table/useSpreadsheetEditing.js +0 -41
  503. package/dist/table/useTableColumnResize.d.ts +0 -38
  504. package/dist/table/useTableColumnResize.js +0 -155
  505. package/dist/table/useTableRowExpansion.d.ts +0 -24
  506. package/dist/table/useTableRowExpansion.js +0 -62
  507. package/dist/table/utils.d.ts +0 -50
  508. package/dist/table/utils.js +0 -78
  509. package/dist/text/HotKeys.d.ts +0 -30
  510. package/dist/text/HotKeys.js +0 -74
  511. package/dist/text/Paragraph.d.ts +0 -33
  512. package/dist/text/Paragraph.js +0 -83
  513. package/dist/text/TextShimmer.d.ts +0 -14
  514. package/dist/text/TextShimmer.js +0 -34
  515. package/dist/theme/GalaxyTheme.d.ts +0 -67
  516. package/dist/theme/GalaxyTheme.js +0 -119
  517. package/dist/theme/constants.d.ts +0 -8
  518. package/dist/theme/constants.js +0 -38
  519. package/dist/theme/index.d.ts +0 -6
  520. package/dist/theme/index.js +0 -7
  521. package/dist/theme/types.d.ts +0 -195
  522. package/dist/theme/types.js +0 -10
  523. package/dist/theme/typography.d.ts +0 -2
  524. package/dist/theme/typography.js +0 -73
  525. package/dist/theme/variants/dark.d.ts +0 -2
  526. package/dist/theme/variants/dark.js +0 -125
  527. package/dist/theme/variants/light.d.ts +0 -2
  528. package/dist/theme/variants/light.js +0 -125
  529. package/dist/toast/ToastContainer.d.ts +0 -10
  530. package/dist/toast/ToastContainer.js +0 -31
  531. package/dist/toast/ToastWrapper.d.ts +0 -6
  532. package/dist/toast/ToastWrapper.js +0 -27
  533. package/dist/transform/Flash.d.ts +0 -7
  534. package/dist/transform/Flash.js +0 -18
  535. package/dist/transform/Spin.d.ts +0 -14
  536. package/dist/transform/Spin.js +0 -25
  537. package/dist/utils/linaria.d.ts +0 -1
  538. package/dist/utils/linaria.js +0 -8
@@ -1,204 +1,459 @@
1
- import { withTheme } from "../theme/GalaxyTheme.js";
2
- import Text from "../text/Text.js";
3
- import FlexWrapper, { AlignItems, FlexDirection, JustifyContent } from "../containers/FlexWrapper.js";
4
- import { InputLabel, InputSize, InputVariant, getInputSurfaceColor, getInputTextSize } from "./Input.js";
1
+ import { Placement } from "../theme/enums.js";
2
+ import Text, { TextSize, TextVariant } from "../text/Text.js";
3
+ import { useControlledState } from "../hooks/useControlledState.js";
4
+ import Tooltip from "../tooltip/Tooltip.js";
5
+ import { useDevWarning } from "./internal/devWarn.js";
6
+ import { isFilled } from "./internal/predicates.js";
7
+ import { useFieldWiring } from "./internal/fieldWiring.js";
8
+ import Field, { FieldSize } from "./Field.js";
9
+ import { useOwnField } from "./internal/ownField.js";
5
10
  /* empty css */
6
11
  import { styled } from "@linaria/react";
7
- import { match } from "ts-pattern";
8
- import { useCallback, useEffect, useRef, useState } from "react";
12
+ import { forwardRef, useRef, useState } from "react";
9
13
  import { jsx, jsxs } from "react/jsx-runtime";
14
+ import { cx } from "@linaria/core";
10
15
  //#region src/inputs/SliderInput.tsx
11
16
  /**
12
- * Rail thickness per `InputSize`. A slider has no box to fill, so it runs its
13
- * own scale rather than `getInputHeight`.
17
+ * Sets a number, or a range of two numbers (`isRange`), by dragging a thumb along a rail, for
18
+ * values people tune by feel: an opacity, a sampling rate, a threshold. It holds the value with
19
+ * `value` / `defaultValue` / `onChange` (continuously while dragging) and reports the end of a
20
+ * gesture with `onChangeEnd`. It snaps to `step` between `min` and `max`, can show ticks with
21
+ * labels (`marks`), and can show the current value in a tooltip above the thumb
22
+ * (`hasValueTooltip`). Each thumb is a `role="slider"` element.
23
+ *
24
+ * Labels and errors go through `Field`. SliderInput never validates. Replaces 1.x `SliderInput`
25
+ * (`onInteractionEnd` → `onChangeEnd(value)`, `onInteractionStart` and `width` removed,
26
+ * `InputSize` / `InputVariant` → `SliderInputSize` / `SliderInputVariant`).
14
27
  */
15
- function getSliderRailHeight(size) {
16
- return match(size).returnType().with(InputSize.SMALL, () => 2).with(InputSize.MEDIUM, () => 3).with(InputSize.LARGE, () => 4).exhaustive();
17
- }
18
- function getSliderHandleSize(size) {
19
- return match(size).returnType().with(InputSize.SMALL, () => 6).with(InputSize.MEDIUM, () => 8).with(InputSize.LARGE, () => 10).exhaustive();
28
+ /** Canonical rungs; SliderInput supports all five. The track area is the rung height. */
29
+ var SliderInputSize = /* @__PURE__ */ function(SliderInputSize) {
30
+ /** 20px track area, 2px rail, 10px thumb. */
31
+ SliderInputSize["X_SMALL"] = "X_SMALL";
32
+ /** 24px track area, 2px rail, 12px thumb. */
33
+ SliderInputSize["SMALL"] = "SMALL";
34
+ /** 32px track area, 4px rail, 14px thumb. The default. */
35
+ SliderInputSize["MEDIUM"] = "MEDIUM";
36
+ /** 36px track area, 4px rail, 16px thumb. */
37
+ SliderInputSize["LARGE"] = "LARGE";
38
+ /** 40px track area, 4px rail, 18px thumb. */
39
+ SliderInputSize["X_LARGE"] = "X_LARGE";
40
+ return SliderInputSize;
41
+ }({});
42
+ /** Fill of the unfilled rail (Constitution V-A surface set; 1.x InputVariant unchanged). */
43
+ var SliderInputVariant = /* @__PURE__ */ function(SliderInputVariant) {
44
+ /** `background.base` fill. */
45
+ SliderInputVariant["BASE"] = "BASE";
46
+ /** `background.primary` fill. The default. */
47
+ SliderInputVariant["PRIMARY"] = "PRIMARY";
48
+ /** `background.secondary` fill. */
49
+ SliderInputVariant["SECONDARY"] = "SECONDARY";
50
+ /** `background.tertiary` fill. */
51
+ SliderInputVariant["TERTIARY"] = "TERTIARY";
52
+ return SliderInputVariant;
53
+ }({});
54
+ /** The width without `fillWidth` (the SelectInput width). */
55
+ /** "Minimum" / "Maximum": the range thumbs' fixed English names (Decision 15). */
56
+ var SLIDER_INPUT_RANGE_THUMB_NAMES = ["Minimum", "Maximum"];
57
+ /** Decimal places of a number as written (`0.1` → 1, `1e-3` → 3). */
58
+ function decimalsOf(number) {
59
+ if (!Number.isFinite(number)) return 0;
60
+ const [mantissa = "", exponent] = String(number).toLowerCase().split("e");
61
+ const fraction = mantissa.split(".")[1]?.length ?? 0;
62
+ return Math.max(0, fraction - (exponent === void 0 ? 0 : Number(exponent)));
20
63
  }
21
- var _exp = () => ({ $isDisabled }) => $isDisabled ? "not-allowed" : "pointer";
22
- var _exp2 = () => ({ $isDisabled }) => $isDisabled ? .5 : 1;
23
- var SliderWrapper = withTheme(/*#__PURE__*/ styled("div")({
24
- name: "SliderWrapper",
25
- class: "sbeizks",
26
- propsAsIs: false,
27
- vars: {
28
- "sbeizks-0": [_exp()],
29
- "sbeizks-1": [_exp2()]
30
- }
31
- }));
32
- var _exp3 = () => ({ $size }) => `${getSliderRailHeight($size)}px`;
33
- var _exp4 = () => ({ theme, $variant }) => getInputSurfaceColor(theme, $variant);
34
- var SliderTrack = withTheme(/*#__PURE__*/ styled("div")({
35
- name: "SliderTrack",
36
- class: "s42jcip",
37
- propsAsIs: false,
38
- vars: {
39
- "s42jcip-0": [_exp3()],
40
- "s42jcip-1": [_exp4()]
41
- }
42
- }));
43
- var _exp5 = () => ({ theme }) => theme.color.icon.primary;
44
- var SliderFill = withTheme(/*#__PURE__*/ styled("div")({
45
- name: "SliderFill",
46
- class: "s1b59sw7",
47
- propsAsIs: false,
48
- vars: { "s1b59sw7-0": [_exp5()] }
49
- }));
50
- var _exp6 = () => ({ $percentage, $size }) => {
51
- const handle = getSliderHandleSize($size);
52
- return `calc(${handle / 2}px + ${$percentage}% - ${$percentage / 100 * handle}px)`;
53
- };
54
- var _exp8 = () => ({ $size }) => `${getSliderHandleSize($size)}px`;
55
- var _exp9 = () => ({ theme }) => theme.color.icon.primary;
56
- var _exp0 = () => ({ $isDisabled }) => $isDisabled ? "not-allowed" : "grab";
57
- var _exp1 = () => ({ $isDragging }) => $isDragging ? "none" : "left 0.1s ease-out, transform 0.1s ease-out";
58
- var _exp10 = () => ({ $isDisabled }) => $isDisabled ? "none" : "auto";
59
- var _exp11 = () => ({ $isDisabled }) => $isDisabled ? "not-allowed" : "grabbing";
60
- var _exp12 = () => ({ $isDisabled }) => $isDisabled ? "translate(-50%, -50%)" : "translate(-50%, -50%) scale(1.1)";
61
- var SliderHandle = withTheme(/*#__PURE__*/ styled("div")({
62
- name: "SliderHandle",
63
- class: "salrebx",
64
- propsAsIs: false,
65
- vars: {
66
- "salrebx-0": [_exp6()],
67
- "salrebx-1": [_exp8()],
68
- "salrebx-2": [_exp9()],
69
- "salrebx-3": [_exp0()],
70
- "salrebx-4": [_exp1()],
71
- "salrebx-5": [_exp10()],
72
- "salrebx-6": [_exp11()],
73
- "salrebx-7": [_exp12()]
74
- }
75
- }));
76
- var HiddenInput = /*#__PURE__*/ styled("input")({
77
- name: "HiddenInput",
78
- class: "h1trli0w",
64
+ /** A position along the track for a fraction custom property. */
65
+ /** The root: the track, then the mark labels. */
66
+ var Slider = /*#__PURE__*/ styled("div")({
67
+ name: "Slider",
68
+ class: "gx-SliderInput-Slider-sbeizks",
69
+ propsAsIs: false
70
+ });
71
+ /** The hit area and positioning box: the full rung height. */
72
+ var Track = /*#__PURE__*/ styled("div")({
73
+ name: "Track",
74
+ class: "gx-SliderInput-Track-t42jcip",
75
+ propsAsIs: false
76
+ });
77
+ /** The unfilled rail, with a hairline on every variant. */
78
+ var Rail = /*#__PURE__*/ styled("span")({
79
+ name: "Rail",
80
+ class: "gx-SliderInput-Rail-r1b59sw7",
81
+ propsAsIs: false
82
+ });
83
+ /** The filled span: from the start to the thumb, or between the two thumbs. */
84
+ var Fill = /*#__PURE__*/ styled("span")({
85
+ name: "Fill",
86
+ class: "gx-SliderInput-Fill-falrebx",
87
+ propsAsIs: false
88
+ });
89
+ /** A 2px dot on the rail. */
90
+ var Tick = /*#__PURE__*/ styled("span")({
91
+ name: "Tick",
92
+ class: "gx-SliderInput-Tick-t1trli0w",
93
+ propsAsIs: false
94
+ });
95
+ /** A thumb: the focusable `role="slider"` element. */
96
+ var Thumb = /*#__PURE__*/ styled("span")({
97
+ name: "Thumb",
98
+ class: "gx-SliderInput-Thumb-t1vqwgc8",
99
+ propsAsIs: false
100
+ });
101
+ /** The labels row under the track; labels are not clipped. */
102
+ var MarkLabels = /*#__PURE__*/ styled("div")({
103
+ name: "MarkLabels",
104
+ class: "gx-SliderInput-MarkLabels-m1i23o1h",
105
+ propsAsIs: false
106
+ });
107
+ /** One mark label, centered on its tick. */
108
+ var MarkLabel = /*#__PURE__*/ styled("span")({
109
+ name: "MarkLabel",
110
+ class: "gx-SliderInput-MarkLabel-m14axfe1",
79
111
  propsAsIs: false
80
112
  });
113
+ /** Range: the fill runs between the two thumbs. */
114
+ var FILL_RANGE_CSS = "gx-SliderInput-FILL_RANGE_CSS-fudygu0";
115
+ /** The low thumb's position. */
116
+ var THUMB_LOW_CSS = "gx-SliderInput-THUMB_LOW_CSS-tftu20f";
117
+ /** The high (or only) thumb's position. */
118
+ var THUMB_HIGH_CSS = "gx-SliderInput-THUMB_HIGH_CSS-ti8xoiz";
119
+ /** A tick on the filled span stays visible on the fill. */
120
+ var TICK_FILLED_CSS = "gx-SliderInput-TICK_FILLED_CSS-t1a78r92";
121
+ /** The thumb being dragged. */
122
+ var DRAGGING_CSS = "gx-SliderInput-DRAGGING_CSS-d12egp3k";
123
+ /** Track, rail and thumb sizes per rung; every value is even, so both center on whole pixels. */
124
+ var SLIDER_INPUT_SIZE_TO_CSS_MAP = {
125
+ ["X_SMALL"]: "gx-SliderInput-X_SMALL-xbdzcws",
126
+ ["SMALL"]: "gx-SliderInput-SMALL-s8thtvu",
127
+ ["MEDIUM"]: "gx-SliderInput-MEDIUM-m1ub36fq",
128
+ ["LARGE"]: "gx-SliderInput-LARGE-l1ebia5y",
129
+ ["X_LARGE"]: "gx-SliderInput-X_LARGE-xtm9yr7"
130
+ };
131
+ /** The unfilled rail per variant: the Input rest fills, with the hairline kept on every variant. */
132
+ var SLIDER_INPUT_VARIANT_TO_CSS_MAP = {
133
+ ["BASE"]: "gx-SliderInput-BASE-b1eim1rd",
134
+ ["PRIMARY"]: "gx-SliderInput-PRIMARY-pmdyvcs",
135
+ ["SECONDARY"]: "gx-SliderInput-SECONDARY-sfme75x",
136
+ ["TERTIARY"]: "gx-SliderInput-TERTIARY-twnayei"
137
+ };
138
+ /** `isGhost`: no rail fill, the hairline kept. Declared after the variant map, which it replaces. */
139
+ var GHOST_CSS = "gx-SliderInput-GHOST_CSS-g1nk0y5e";
140
+ /** Mark labels per rung. */
141
+ var SLIDER_INPUT_SIZE_TO_MARK_TEXT_SIZE_MAP = {
142
+ ["X_SMALL"]: TextSize.CAPTION,
143
+ ["SMALL"]: TextSize.CAPTION,
144
+ ["MEDIUM"]: TextSize.BODY_SM,
145
+ ["LARGE"]: TextSize.BODY_SM,
146
+ ["X_LARGE"]: TextSize.BODY_SM
147
+ };
148
+ /** The `Field` a SliderInput renders for its own `label` / `error` uses the same rung. */
149
+ var SLIDER_INPUT_SIZE_TO_FIELD_SIZE_MAP = {
150
+ ["X_SMALL"]: FieldSize.X_SMALL,
151
+ ["SMALL"]: FieldSize.SMALL,
152
+ ["MEDIUM"]: FieldSize.MEDIUM,
153
+ ["LARGE"]: FieldSize.LARGE,
154
+ ["X_LARGE"]: FieldSize.X_LARGE
155
+ };
81
156
  /**
82
- * A drag-to-set numeric slider. Fully controlled.
83
- *
84
- * `onChange` fires on every pointer move. When each change is expensive, drive
85
- * a preview from it and commit on `onInteractionEnd`.
157
+ * Hover on an editable slider: the rail hairline turns `border.hovered` (stronger than
158
+ * `border.primary` in both themes, Constitution III.6), as an input frame does.
86
159
  */
87
- var SliderInput = ({ variant = InputVariant.PRIMARY, size = InputSize.MEDIUM, label, labelTooltip, value, onChange, onInteractionStart, onInteractionEnd, min = 0, max = 100, step = 1, isDisabled = false, width, fillWidth }) => {
88
- const [isDragging, setIsDragging] = useState(false);
89
- const sliderRef = useRef(null);
90
- const isInteractingRef = useRef(false);
91
- const beginInteraction = useCallback(() => {
92
- if (isDisabled || isInteractingRef.current) return;
93
- isInteractingRef.current = true;
94
- onInteractionStart?.();
95
- }, [isDisabled, onInteractionStart]);
96
- const endInteraction = useCallback(() => {
97
- if (!isInteractingRef.current) return;
98
- isInteractingRef.current = false;
99
- onInteractionEnd?.();
100
- }, [onInteractionEnd]);
101
- useEffect(() => () => {
102
- endInteraction();
103
- }, [endInteraction]);
104
- const percentage = max === min ? 0 : Math.max(0, Math.min(100, (value - min) / (max - min) * 100));
105
- const handleChange = useCallback((newValue) => {
106
- if (isDisabled) return;
107
- onChange(Math.round(Math.max(min, Math.min(max, newValue)) / step) * step);
108
- }, [
109
- isDisabled,
110
- min,
111
- max,
112
- step,
160
+ var HOVER_CSS = "gx-SliderInput-HOVER_CSS-h18dfoic";
161
+ /** Error hairline on the rail, at rest and on hover. */
162
+ var ERROR_CSS = "gx-SliderInput-ERROR_CSS-epqawlc";
163
+ /**
164
+ * Disabled: the rail keeps its resting hairline (`border.disabled` is not used on frames); fill and
165
+ * thumbs turn `text.disabled`; nothing reacts to the pointer.
166
+ */
167
+ var DISABLED_CSS = "gx-SliderInput-DISABLED_CSS-d15bc6fe";
168
+ /** Read-only: focusable and announced, but nothing looks draggable. */
169
+ var READ_ONLY_CSS = "gx-SliderInput-READ_ONLY_CSS-r24kxar";
170
+ /** Stretch to the parent's width (slider, and the `Field` wrapper when there is one). */
171
+ var FILL_WIDTH_CSS = "gx-SliderInput-FILL_WIDTH_CSS-fz4wyc9";
172
+ /** The track, thumbs and marks, wired to the nearest Field (the slider's own or the app's). */
173
+ function SliderBody({ sliderProps, forwardedRef, isRoot }) {
174
+ const { isRange = false, value, defaultValue, onChange, onChangeEnd, min: minProp = 0, max: maxProp = 100, step: stepProp = 1, marks, formatValue = String, hasValueTooltip = false, size = "MEDIUM", variant = "PRIMARY", isGhost = false, label: _label, error, isError = false, isDisabled = false, isReadOnly = false, isRequired = false, fillWidth = false, ariaLabel, id, "aria-describedby": ariaDescribedBy, "aria-labelledby": ariaLabelledBy, "aria-label": ariaLabelAttribute, className, style, ...rest } = sliderProps;
175
+ const min = Number.isFinite(minProp) ? minProp : 0;
176
+ const max = Number.isFinite(maxProp) ? Math.max(maxProp, min) : Math.max(100, min);
177
+ const step = Number.isFinite(stepProp) && stepProp > 0 ? stepProp : 1;
178
+ const precision = Math.max(decimalsOf(step), decimalsOf(min));
179
+ /** Snaps to `step` from `min`, clamps to `[min, max]`, and drops float noise. */
180
+ const snap = (raw) => {
181
+ const stepped = min + Math.round((raw - min) / step) * step;
182
+ return Number(Math.min(max, Math.max(min, stepped)).toFixed(precision));
183
+ };
184
+ const { field, controlId, describedBy, isInvalid, hasName } = useFieldWiring({
185
+ id,
186
+ ariaLabel,
187
+ ariaLabelAttribute,
188
+ ariaLabelledBy,
189
+ ariaDescribedBy,
190
+ error,
191
+ isError,
192
+ isRequired
193
+ });
194
+ const [raw, setRaw] = useControlledState({
195
+ value,
196
+ defaultValue: defaultValue ?? (isRange ? [min, max] : min),
113
197
  onChange
114
- ]);
115
- const handleInputChange = useCallback((e) => {
116
- handleChange(parseFloat(e.target.value));
117
- }, [handleChange]);
118
- const handleMouseDown = useCallback((e) => {
119
- if (isDisabled) return;
120
- beginInteraction();
121
- setIsDragging(true);
122
- const handleMouseMove = (moveEvent) => {
123
- if (!sliderRef.current) return;
124
- const rect = sliderRef.current.getBoundingClientRect();
125
- const x = moveEvent.clientX - rect.left;
126
- handleChange(min + Math.max(0, Math.min(100, x / rect.width * 100)) / 100 * (max - min));
127
- };
128
- const handleMouseUp = () => {
129
- setIsDragging(false);
130
- endInteraction();
131
- document.removeEventListener("mousemove", handleMouseMove);
132
- document.removeEventListener("mouseup", handleMouseUp);
133
- };
134
- document.addEventListener("mousemove", handleMouseMove);
135
- document.addEventListener("mouseup", handleMouseUp);
136
- handleMouseMove(e.nativeEvent);
137
- }, [
138
- beginInteraction,
139
- endInteraction,
140
- isDisabled,
141
- min,
142
- max,
143
- handleChange
144
- ]);
145
- return /* @__PURE__ */ jsxs(FlexWrapper, {
146
- direction: FlexDirection.COLUMN,
147
- gap: 12,
148
- width,
149
- fillWidth,
150
- children: [label && /* @__PURE__ */ jsxs(FlexWrapper, {
151
- alignItems: AlignItems.CENTER,
152
- justifyContent: JustifyContent.SPACE_BETWEEN,
153
- fillWidth: true,
154
- children: [/* @__PURE__ */ jsx(InputLabel, {
155
- label,
156
- labelTooltip
157
- }), /* @__PURE__ */ jsx(Text, {
158
- size: getInputTextSize(size),
159
- children: value
160
- })]
161
- }), /* @__PURE__ */ jsxs(SliderWrapper, {
162
- ref: sliderRef,
163
- $isDisabled: isDisabled,
198
+ });
199
+ const drawn = (typeof raw === "number" ? [raw] : raw).map((item) => snap(item)).sort((a, b) => a - b);
200
+ const values = isRange ? [drawn[0] ?? min, drawn[drawn.length - 1] ?? max] : [drawn[0] ?? min];
201
+ const valuesRef = useRef(values);
202
+ valuesRef.current = values;
203
+ const toPublic = (list) => isRange ? [list[0] ?? min, list[1] ?? max] : list[0] ?? min;
204
+ const isEditable = !isDisabled && !isReadOnly;
205
+ const trackRef = useRef(null);
206
+ const thumbRefs = useRef([null, null]);
207
+ const [dragging, setDragging] = useState(null);
208
+ const draggingRef = useRef(null);
209
+ const isTieRef = useRef(false);
210
+ const [tooltipRequests, setTooltipRequests] = useState([false, false]);
211
+ /** The range a thumb may move in: range thumbs never cross. */
212
+ const boundsOf = (index, list = valuesRef.current) => {
213
+ if (!isRange) return [min, max];
214
+ return index === 0 ? [min, list[1] ?? max] : [list[0] ?? min, max];
215
+ };
216
+ /** Sets one thumb (snapped and bounded) and reports it when it changed. Returns whether it did. */
217
+ const setThumb = (index, next) => {
218
+ const list = valuesRef.current;
219
+ const [low, high] = boundsOf(index, list);
220
+ const bounded = Math.min(high, Math.max(low, snap(next)));
221
+ if (bounded === list[index]) return false;
222
+ const updated = [...list];
223
+ updated[index] = bounded;
224
+ valuesRef.current = updated;
225
+ setRaw(toPublic(updated));
226
+ return true;
227
+ };
228
+ const endGesture = () => {
229
+ onChangeEnd?.(toPublic(valuesRef.current));
230
+ };
231
+ /** The value under a pointer x, from the track box (minus half the thumb at each end). */
232
+ const valueAt = (clientX) => {
233
+ const track = trackRef.current;
234
+ if (track === null) return min;
235
+ const box = track.getBoundingClientRect();
236
+ const thumb = thumbRefs.current[0]?.offsetWidth ?? 0;
237
+ const span = box.width - thumb;
238
+ const fraction = span <= 0 ? 0 : (clientX - box.left - thumb / 2) / span;
239
+ return min + Math.min(1, Math.max(0, fraction)) * (max - min);
240
+ };
241
+ const handlePointerDown = (event) => {
242
+ if (!isEditable || event.button !== 0) return;
243
+ const target = valueAt(event.clientX);
244
+ const list = valuesRef.current;
245
+ let index = 0;
246
+ if (isRange) {
247
+ const low = list[0] ?? min;
248
+ const high = list[1] ?? max;
249
+ const toLow = Math.abs(target - low);
250
+ const toHigh = Math.abs(target - high);
251
+ index = toLow < toHigh ? 0 : toHigh < toLow ? 1 : target < low ? 0 : 1;
252
+ isTieRef.current = low === high && snap(target) === low;
253
+ }
254
+ setThumb(index, target);
255
+ event.currentTarget.setPointerCapture(event.pointerId);
256
+ draggingRef.current = index;
257
+ setDragging(index);
258
+ };
259
+ /**
260
+ * A press on a thumb focuses it natively (a mouse focus, so no ring). A press elsewhere on the
261
+ * track would focus the body: it is prevented, and the thumb it moved is focused instead.
262
+ */
263
+ const handleMouseDown = (event) => {
264
+ if (!isEditable || event.button !== 0) return;
265
+ const index = draggingRef.current;
266
+ if (index === null) return;
267
+ const thumb = thumbRefs.current[index];
268
+ if (thumb?.contains(event.target)) return;
269
+ event.preventDefault();
270
+ thumb?.focus({ preventScroll: true });
271
+ };
272
+ const handlePointerMove = (event) => {
273
+ let index = draggingRef.current;
274
+ if (index === null) return;
275
+ const next = valueAt(event.clientX);
276
+ if (isTieRef.current) {
277
+ const meeting = valuesRef.current[0] ?? min;
278
+ if (snap(next) === meeting) return;
279
+ isTieRef.current = false;
280
+ index = next < meeting ? 0 : 1;
281
+ draggingRef.current = index;
282
+ setDragging(index);
283
+ const thumb = thumbRefs.current[index];
284
+ if (thumb !== null && thumb !== void 0 && thumb !== thumb.ownerDocument.activeElement) thumb.focus({ preventScroll: true });
285
+ }
286
+ setThumb(index, next);
287
+ };
288
+ const handlePointerEnd = () => {
289
+ if (draggingRef.current === null) return;
290
+ draggingRef.current = null;
291
+ isTieRef.current = false;
292
+ setDragging(null);
293
+ endGesture();
294
+ };
295
+ const handleKeyDown = (index) => (event) => {
296
+ if (!isEditable) return;
297
+ const current = valuesRef.current[index] ?? min;
298
+ const [low, high] = boundsOf(index);
299
+ const page = Math.max(step, (max - min) / 10);
300
+ let next;
301
+ switch (event.key) {
302
+ case "ArrowRight":
303
+ case "ArrowUp":
304
+ next = current + step;
305
+ break;
306
+ case "ArrowLeft":
307
+ case "ArrowDown":
308
+ next = current - step;
309
+ break;
310
+ case "PageUp":
311
+ next = current + page;
312
+ break;
313
+ case "PageDown":
314
+ next = current - page;
315
+ break;
316
+ case "Home":
317
+ next = low;
318
+ break;
319
+ case "End":
320
+ next = high;
321
+ break;
322
+ default: return;
323
+ }
324
+ event.preventDefault();
325
+ if (setThumb(index, next)) endGesture();
326
+ };
327
+ const setTooltipRequest = (index) => (isOpen) => {
328
+ setTooltipRequests((previous) => {
329
+ const next = [previous[0], previous[1]];
330
+ next[index] = isOpen;
331
+ return next;
332
+ });
333
+ };
334
+ const labelledBy = isFilled(ariaLabelledBy) ? ariaLabelledBy : field?.labelId;
335
+ const name = isFilled(ariaLabelAttribute) ? ariaLabelAttribute : ariaLabel;
336
+ useDevWarning(!hasName, "[@galaxy-io/dls] SliderInput has no accessible name. Pass `label`, wrap it in a labelled `Field`, or set `ariaLabel`.");
337
+ const span = max - min;
338
+ const fractionOf = (number) => span === 0 ? 0 : (number - min) / span;
339
+ const low = values[0] ?? min;
340
+ const high = values[values.length - 1] ?? max;
341
+ const inRangeMarks = (marks ?? []).filter((mark) => mark.value >= min && mark.value <= max);
342
+ const hasMarkLabels = inRangeMarks.some((mark) => isFilled(mark.label));
343
+ const isOnFill = (mark) => isRange ? mark >= low && mark <= high : mark <= high;
344
+ const renderThumb = (index) => {
345
+ const thumbValue = values[index] ?? min;
346
+ const [thumbMin, thumbMax] = boundsOf(index, values);
347
+ const thumb = /* @__PURE__ */ jsx(Thumb, {
348
+ ref: (element) => {
349
+ thumbRefs.current[index] = element;
350
+ },
351
+ role: "slider",
352
+ tabIndex: isDisabled ? -1 : 0,
353
+ ...isRange ? { "aria-label": SLIDER_INPUT_RANGE_THUMB_NAMES[index] } : {
354
+ id: controlId,
355
+ ...labelledBy === void 0 ? {} : { "aria-labelledby": labelledBy },
356
+ ...isFilled(name) ? { "aria-label": name } : {}
357
+ },
358
+ "aria-valuemin": thumbMin,
359
+ "aria-valuemax": thumbMax,
360
+ "aria-valuenow": thumbValue,
361
+ "aria-valuetext": formatValue(thumbValue),
362
+ "aria-orientation": "horizontal",
363
+ "aria-describedby": describedBy,
364
+ "aria-invalid": isInvalid ? true : void 0,
365
+ "aria-readonly": isReadOnly ? true : void 0,
366
+ "aria-disabled": isDisabled ? true : void 0,
367
+ onKeyDown: handleKeyDown(index),
368
+ className: cx(isRange && index === 0 ? THUMB_LOW_CSS : THUMB_HIGH_CSS, dragging === index && DRAGGING_CSS)
369
+ }, index);
370
+ if (!hasValueTooltip) return thumb;
371
+ return /* @__PURE__ */ jsx(Tooltip, {
372
+ body: formatValue(thumbValue),
373
+ placement: Placement.TOP,
374
+ isOpen: dragging === index || tooltipRequests[index] === true,
375
+ onOpenChange: setTooltipRequest(index),
376
+ "aria-hidden": true,
377
+ children: thumb
378
+ }, index);
379
+ };
380
+ return /* @__PURE__ */ jsxs(Slider, {
381
+ ref: forwardedRef,
382
+ ...isRange ? {
383
+ role: "group",
384
+ id: controlId,
385
+ ...labelledBy === void 0 ? {} : { "aria-labelledby": labelledBy },
386
+ ...isFilled(name) ? { "aria-label": name } : {}
387
+ } : {},
388
+ ...rest,
389
+ className: cx(SLIDER_INPUT_SIZE_TO_CSS_MAP[size], isEditable && !isInvalid && HOVER_CSS, isInvalid && !isDisabled && ERROR_CSS, isDisabled && DISABLED_CSS, isReadOnly && !isDisabled && READ_ONLY_CSS, fillWidth && FILL_WIDTH_CSS, isRoot ? className : void 0),
390
+ style: {
391
+ "--gx-slider-low": fractionOf(low),
392
+ "--gx-slider-high": fractionOf(high),
393
+ ...isRoot ? style : void 0
394
+ },
395
+ children: [/* @__PURE__ */ jsxs(Track, {
396
+ ref: trackRef,
397
+ onPointerDown: handlePointerDown,
164
398
  onMouseDown: handleMouseDown,
399
+ onPointerMove: handlePointerMove,
400
+ onPointerUp: handlePointerEnd,
401
+ onPointerCancel: handlePointerEnd,
402
+ onLostPointerCapture: handlePointerEnd,
165
403
  children: [
166
- /* @__PURE__ */ jsx(SliderTrack, {
167
- $variant: variant,
168
- $size: size,
169
- $isDisabled: isDisabled,
170
- children: /* @__PURE__ */ jsx(SliderFill, {
171
- $percentage: percentage,
172
- $isDisabled: isDisabled,
173
- style: { width: `${percentage}%` }
174
- })
175
- }),
176
- /* @__PURE__ */ jsx(SliderHandle, {
177
- $percentage: percentage,
178
- $size: size,
179
- $isDisabled: isDisabled,
180
- $isDragging: isDragging
181
- }),
182
- /* @__PURE__ */ jsx(HiddenInput, {
183
- type: "range",
184
- min,
185
- max,
186
- step,
187
- value,
188
- onChange: handleInputChange,
189
- onMouseDown: beginInteraction,
190
- onMouseUp: endInteraction,
191
- onTouchStart: beginInteraction,
192
- onTouchEnd: endInteraction,
193
- onKeyDown: beginInteraction,
194
- onKeyUp: endInteraction,
195
- onBlur: endInteraction,
196
- disabled: isDisabled,
197
- "aria-label": label || "Slider"
198
- })
404
+ /* @__PURE__ */ jsx(Rail, { className: isGhost ? GHOST_CSS : SLIDER_INPUT_VARIANT_TO_CSS_MAP[variant] }),
405
+ /* @__PURE__ */ jsx(Fill, { className: cx(isRange && FILL_RANGE_CSS) }),
406
+ inRangeMarks.map((mark) => /* @__PURE__ */ jsx(Tick, {
407
+ "aria-hidden": true,
408
+ className: cx(isOnFill(mark.value) && TICK_FILLED_CSS),
409
+ style: { "--gx-slider-mark": fractionOf(mark.value) }
410
+ }, mark.value)),
411
+ values.map((_, index) => renderThumb(index))
199
412
  ]
413
+ }), hasMarkLabels && /* @__PURE__ */ jsx(MarkLabels, {
414
+ "aria-hidden": true,
415
+ children: inRangeMarks.map((mark) => isFilled(mark.label) ? /* @__PURE__ */ jsx(MarkLabel, {
416
+ style: { "--gx-slider-mark": fractionOf(mark.value) },
417
+ children: /* @__PURE__ */ jsx(Text, {
418
+ as: "span",
419
+ size: SLIDER_INPUT_SIZE_TO_MARK_TEXT_SIZE_MAP[size],
420
+ variant: isDisabled ? TextVariant.DISABLED : TextVariant.TERTIARY,
421
+ isTabular: true,
422
+ children: mark.label
423
+ })
424
+ }, mark.value) : null)
200
425
  })]
201
426
  });
202
- };
427
+ }
428
+ /** A number, or a `[low, high]` range, set by dragging thumbs along a rail. */
429
+ var SliderInput = forwardRef(function SliderInput(props, ref) {
430
+ const { label, error, isRequired = false, size = "MEDIUM", fillWidth = false } = props;
431
+ const { id, className, style } = props;
432
+ const ownField = useOwnField({
433
+ componentName: "SliderInput",
434
+ label,
435
+ error,
436
+ isRequired,
437
+ size: SLIDER_INPUT_SIZE_TO_FIELD_SIZE_MAP[size],
438
+ id,
439
+ className,
440
+ style,
441
+ rootClassName: fillWidth && FILL_WIDTH_CSS
442
+ });
443
+ if (ownField !== null) return /* @__PURE__ */ jsx(Field, {
444
+ ...ownField,
445
+ children: /* @__PURE__ */ jsx(SliderBody, {
446
+ sliderProps: props,
447
+ forwardedRef: ref,
448
+ isRoot: false
449
+ })
450
+ });
451
+ return /* @__PURE__ */ jsx(SliderBody, {
452
+ sliderProps: props,
453
+ forwardedRef: ref,
454
+ isRoot: true
455
+ });
456
+ });
457
+ SliderInput.displayName = "SliderInput";
203
458
  //#endregion
204
- export { SliderInput as default };
459
+ export { SliderInputSize, SliderInputVariant, SliderInput as default };