@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
@@ -0,0 +1,62 @@
1
+ import Text, { TextWeight } from "../text/Text.js";
2
+ /* empty css */
3
+ import { styled } from "@linaria/react";
4
+ import { forwardRef } from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ //#region src/navigation/Topbar.tsx
7
+ /**
8
+ * The 48px bar across the top of a page: where you are on the left, what you can do on the right.
9
+ * A `<header>` with a bottom hairline and three slots in a row: `leading` (a sidebar toggle, a
10
+ * back button, a brand mark), the main content (`children`: breadcrumbs or the page title) and
11
+ * `actions` at the end (search, the assistant, the account). It owns the height, the rule, the
12
+ * spacing and the left / right split; everything inside is composed from other components. It
13
+ * does not stick, route or collapse. In an app frame it sits above the page's scrolling region.
14
+ *
15
+ * Outside `main`, `article`, `aside`, `nav` and `section` the `<header>` is the page's `banner`
16
+ * landmark, so use one Topbar per page. New in 2.0 (from the rafa prototype).
17
+ */
18
+ /** The bar: 48px, a bottom hairline, `background.base` (the top of the page, not chrome). */
19
+ var Root = /*#__PURE__*/ styled("header")({
20
+ name: "Root",
21
+ class: "gx-Topbar-r1xyq67l",
22
+ propsAsIs: false
23
+ });
24
+ var Leading = /*#__PURE__*/ styled("div")({
25
+ name: "Leading",
26
+ class: "gx-Topbar-Leading-ly1m7jx",
27
+ propsAsIs: false
28
+ });
29
+ /** Grows to push `actions` to the end; clips a trail that does not fit instead of pushing them out. */
30
+ var Content = /*#__PURE__*/ styled("div")({
31
+ name: "Content",
32
+ class: "gx-Topbar-Content-cmm5l4g",
33
+ propsAsIs: false
34
+ });
35
+ var Actions = /*#__PURE__*/ styled("div")({
36
+ name: "Actions",
37
+ class: "gx-Topbar-Actions-acmt9iy",
38
+ propsAsIs: false
39
+ });
40
+ /** The page bar: `leading`, the title or breadcrumbs, and `actions` at the end. */
41
+ var Topbar = forwardRef(function Topbar({ children, leading, actions, className, style, ...rest }, ref) {
42
+ return /* @__PURE__ */ jsxs(Root, {
43
+ ...rest,
44
+ ref,
45
+ className,
46
+ style,
47
+ children: [
48
+ leading && /* @__PURE__ */ jsx(Leading, { children: leading }),
49
+ /* @__PURE__ */ jsx(Content, { children: typeof children === "string" ? /* @__PURE__ */ jsx(Text, {
50
+ as: "span",
51
+ weight: TextWeight.MEDIUM,
52
+ lineClamp: 1,
53
+ shouldTooltipOnOverflow: true,
54
+ children
55
+ }) : children }),
56
+ actions && /* @__PURE__ */ jsx(Actions, { children: actions })
57
+ ]
58
+ });
59
+ });
60
+ Topbar.displayName = "Topbar";
61
+ //#endregion
62
+ export { Topbar as default };
@@ -1,37 +1,33 @@
1
- import { type PropsWithChildren } from "react";
2
- import { OverlayLayer } from "./constants";
3
- /** One registered overlay in the stack. */
4
- export interface OverlayEntry {
5
- id: string;
6
- onDismiss: () => void;
7
- layer: OverlayLayer;
8
- dismissOnOverlayClick: boolean;
9
- zIndex: number;
1
+ /**
2
+ * The root of the overlay stack: one store per app and one Escape listener that reaches only the
3
+ * topmost registered overlay. `GalaxyProvider` mounts it, so apps never do; mount it yourself only
4
+ * in a React root that has no `GalaxyProvider`. A nested `OverlayProvider` (a scoped
5
+ * `GalaxyProvider`) reuses the outer stack.
6
+ *
7
+ * `OverlayNode` marks the subtree of an open overlay, so overlays opened inside it stack above it.
8
+ *
9
+ * Both render no element. SSR: the listener attaches in an effect; nothing touches `document` at
10
+ * module scope.
11
+ */
12
+ import { type ReactNode } from "react";
13
+ export interface OverlayProviderProps {
14
+ /** The app. Mounted by `GalaxyProvider`; mount it yourself only in a React root that has no `GalaxyProvider`. */
15
+ children: ReactNode;
10
16
  }
11
- /** Options for `useOverlay`'s third argument. */
12
- export interface OverlayRegisterOptions {
13
- /** Stacking tier. Modals always sit above drawers. @default OverlayLayer.MODAL */
14
- layer?: OverlayLayer;
15
- /** Call `onDismiss` when the shared backdrop is clicked. */
16
- dismissOnOverlayClick?: boolean;
17
+ export interface OverlayNodeProps {
18
+ /** The `overlayId` from this overlay's `useOverlay`. Overlays rendered inside stack above this one. */
19
+ overlayId: string;
20
+ /** The overlay's content (inside its `Portal`). */
21
+ children: ReactNode;
17
22
  }
18
- export interface OverlayInfo {
19
- zIndex: number;
20
- isTopmost: boolean;
23
+ /** Holds the overlay stack and routes Escape to the topmost overlay. */
24
+ declare function OverlayProvider({ children }: OverlayProviderProps): import("react").JSX.Element;
25
+ declare namespace OverlayProvider {
26
+ var displayName: string;
21
27
  }
22
- export interface OverlayContextValue {
23
- register: (id: string, onDismiss: () => void, options?: OverlayRegisterOptions) => void;
24
- unregister: (id: string) => void;
25
- overlays: OverlayEntry[];
28
+ /** Marks an open overlay's content, so overlays opened inside it stack above it. */
29
+ export declare function OverlayNode({ overlayId, children }: OverlayNodeProps): import("react").JSX.Element;
30
+ export declare namespace OverlayNode {
31
+ var displayName: string;
26
32
  }
27
- export declare const OverlayContext: import("react").Context<OverlayContextValue | null>;
28
- /**
29
- * Coordinates every `Modal` and `Drawer` on the page. Mount it once near the
30
- * root, above anything that opens an overlay.
31
- *
32
- * Renders one shared backdrop for the whole stack and routes Escape to the
33
- * topmost overlay only, so nesting a modal over a drawer behaves.
34
- */
35
- export declare const OverlayProvider: ({ children }: PropsWithChildren) => import("react").JSX.Element;
36
33
  export default OverlayProvider;
37
- export { getOverlayZIndex, OVERLAY_LAYER_PRIORITY, OVERLAY_Z_INDEX, OVERLAY_Z_INDEX_BASE, OVERLAY_Z_INDEX_STEP, OverlayLayer, } from "./constants";
@@ -1,99 +1,48 @@
1
- import { withTheme } from "../theme/GalaxyTheme.js";
2
- import { OVERLAY_LAYER_PRIORITY, OVERLAY_Z_INDEX, OVERLAY_Z_INDEX_BASE, OVERLAY_Z_INDEX_STEP, OverlayLayer, getOverlayZIndex } from "./constants.js";
3
- /* empty css */
4
- import { styled } from "@linaria/react";
5
- import { createContext, useCallback, useMemo, useRef, useState } from "react";
6
- import { jsx, jsxs } from "react/jsx-runtime";
7
- import { createPortal } from "react-dom";
1
+ import { OverlayParentContext, OverlayStoreContext, createOverlayStore, isOverlayEscape } from "./useOverlay.js";
2
+ import { useContext, useEffect, useState } from "react";
3
+ import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
8
4
  //#region src/overlay/OverlayProvider.tsx
9
- var OverlayContext = createContext(null);
10
- var _exp = () => ({ theme }) => theme.color.opacity.bw48;
11
- var _exp2 = () => ({ isVisible }) => isVisible ? "blur(4px)" : "blur(0px)";
12
- var _exp3 = () => ({ isVisible }) => isVisible ? 1 : 0;
13
- var _exp4 = () => ({ isVisible }) => isVisible ? "visible" : "hidden";
14
- var _exp5 = () => ({ isVisible }) => isVisible ? "backdrop-filter 0.2s ease-out, opacity 0.2s ease-out" : "none";
15
- var _exp6 = () => ({ $zIndex }) => $zIndex;
16
- var _exp7 = () => ({ isVisible }) => isVisible ? "auto" : "none";
17
- var SharedOverlay = withTheme(/*#__PURE__*/ styled("div")({
18
- name: "SharedOverlay",
19
- class: "s1hpu3t7",
20
- propsAsIs: false,
21
- vars: {
22
- "s1hpu3t7-0": [_exp()],
23
- "s1hpu3t7-1": [_exp2()],
24
- "s1hpu3t7-2": [_exp3()],
25
- "s1hpu3t7-3": [_exp4()],
26
- "s1hpu3t7-4": [_exp5()],
27
- "s1hpu3t7-5": [_exp6()],
28
- "s1hpu3t7-6": [_exp7()]
29
- }
30
- }));
31
5
  /**
32
- * Coordinates every `Modal` and `Drawer` on the page. Mount it once near the
33
- * root, above anything that opens an overlay.
6
+ * The root of the overlay stack: one store per app and one Escape listener that reaches only the
7
+ * topmost registered overlay. `GalaxyProvider` mounts it, so apps never do; mount it yourself only
8
+ * in a React root that has no `GalaxyProvider`. A nested `OverlayProvider` (a scoped
9
+ * `GalaxyProvider`) reuses the outer stack.
34
10
  *
35
- * Renders one shared backdrop for the whole stack and routes Escape to the
36
- * topmost overlay only, so nesting a modal over a drawer behaves.
11
+ * `OverlayNode` marks the subtree of an open overlay, so overlays opened inside it stack above it.
12
+ *
13
+ * Both render no element. SSR: the listener attaches in an effect; nothing touches `document` at
14
+ * module scope.
37
15
  */
38
- var OverlayProvider = ({ children }) => {
39
- const [overlays, setOverlays] = useState([]);
40
- const zIndexCounterRef = useRef(0);
41
- const register = useCallback((id, onDismiss, options) => {
42
- const layer = options?.layer ?? OverlayLayer.DRAWER;
43
- const dismissOnOverlayClick = options?.dismissOnOverlayClick ?? true;
44
- setOverlays((prev) => {
45
- const existingIndex = prev.findIndex((entry) => entry.id === id);
46
- if (existingIndex === -1) {
47
- const zIndex = OVERLAY_Z_INDEX_BASE + zIndexCounterRef.current * 10;
48
- zIndexCounterRef.current += 1;
49
- return [...prev, {
50
- id,
51
- onDismiss,
52
- layer,
53
- dismissOnOverlayClick,
54
- zIndex
55
- }];
56
- }
57
- const next = [...prev];
58
- next[existingIndex] = {
59
- ...prev[existingIndex],
60
- onDismiss,
61
- layer,
62
- dismissOnOverlayClick
63
- };
64
- return next;
65
- });
66
- }, []);
67
- const unregister = useCallback((id) => {
68
- setOverlays((prev) => prev.filter((entry) => entry.id !== id));
69
- }, []);
70
- const topmost = useMemo(() => {
71
- if (overlays.length === 0) return null;
72
- return overlays.reduce((top, entry) => entry.zIndex > top.zIndex ? entry : top, overlays[0]);
73
- }, [overlays]);
74
- const handleOverlayClick = useCallback(() => {
75
- if (!topmost || !topmost.dismissOnOverlayClick) return;
76
- topmost.onDismiss();
77
- }, [topmost]);
78
- const contextValue = useMemo(() => ({
79
- register,
80
- unregister,
81
- overlays
82
- }), [
83
- register,
84
- unregister,
85
- overlays
86
- ]);
87
- const isVisible = !!topmost;
88
- const backdropZIndex = topmost ? topmost.zIndex - 1 : OVERLAY_Z_INDEX_BASE - 1;
89
- return /* @__PURE__ */ jsxs(OverlayContext.Provider, {
90
- value: contextValue,
91
- children: [children, createPortal(/* @__PURE__ */ jsx(SharedOverlay, {
92
- isVisible,
93
- $zIndex: backdropZIndex,
94
- onClick: handleOverlayClick
95
- }), document.body)]
16
+ /** Holds the overlay stack and routes Escape to the topmost overlay. */
17
+ function OverlayProvider({ children }) {
18
+ const outerStore = useContext(OverlayStoreContext);
19
+ const [ownStore] = useState(() => outerStore === null ? createOverlayStore() : null);
20
+ useEffect(() => {
21
+ if (ownStore === null) return;
22
+ const handleKeyDown = (event) => {
23
+ if (!isOverlayEscape(event)) return;
24
+ const onEscapeRef = ownStore.getTopmostEscape();
25
+ if (onEscapeRef === null) return;
26
+ event.preventDefault();
27
+ onEscapeRef.current?.();
28
+ };
29
+ document.addEventListener("keydown", handleKeyDown);
30
+ return () => document.removeEventListener("keydown", handleKeyDown);
31
+ }, [ownStore]);
32
+ if (ownStore === null) return /* @__PURE__ */ jsx(Fragment$1, { children });
33
+ return /* @__PURE__ */ jsx(OverlayStoreContext.Provider, {
34
+ value: ownStore,
35
+ children
36
+ });
37
+ }
38
+ OverlayProvider.displayName = "OverlayProvider";
39
+ /** Marks an open overlay's content, so overlays opened inside it stack above it. */
40
+ function OverlayNode({ overlayId, children }) {
41
+ return /* @__PURE__ */ jsx(OverlayParentContext.Provider, {
42
+ value: overlayId,
43
+ children
96
44
  });
97
- };
45
+ }
46
+ OverlayNode.displayName = "OverlayNode";
98
47
  //#endregion
99
- export { OVERLAY_LAYER_PRIORITY, OVERLAY_Z_INDEX, OVERLAY_Z_INDEX_BASE, OVERLAY_Z_INDEX_STEP, OverlayContext, OverlayLayer, OverlayProvider, OverlayProvider as default, getOverlayZIndex };
48
+ export { OverlayNode, OverlayProvider as default };
@@ -1,18 +1,94 @@
1
- import { type OverlayRegisterOptions } from "./OverlayProvider";
2
- export interface UseOverlayReturn {
3
- /** The z-index to render this overlay at. Assigned by its position in the stack. */
1
+ /**
2
+ * The stacking and Escape coordinator for everything that floats above the page. An overlay calls
3
+ * `useOverlay` while it is open: the hook registers it in one stack per app (held by
4
+ * `OverlayProvider`, which `GalaxyProvider` mounts) and returns the `zIndex` to render at and
5
+ * whether it is the topmost. The root routes Escape to the topmost overlay only.
6
+ *
7
+ * Order: by layer (`z.dropdown` < `z.drawer` < `z.modal` < `z.tooltip`), then by nesting (an
8
+ * overlay rendered inside another's `OverlayNode` sits above it, in at least its layer), then by
9
+ * the order they opened.
10
+ *
11
+ * The stack renders nothing, moves no focus, draws no backdrop and handles no pointer events.
12
+ *
13
+ * SSR: nothing here touches `window` or `document` at module scope. Registration runs in a layout
14
+ * effect on the client; the server snapshot is the closed state.
15
+ */
16
+ import { type MutableRefObject } from "react";
17
+ /** The `z` layer an overlay belongs to. Layers never interleave: a higher layer is always above a lower one. */
18
+ export declare enum OverlayLayer {
19
+ /** Anchored panels: Popover, Dropdown, Menu, ContextMenu, SelectInput, DateInput, ColorInput (`z.dropdown`, 1000). */
20
+ DROPDOWN = "DROPDOWN",
21
+ /** Drawers (`z.drawer`, 1100). */
22
+ DRAWER = "DRAWER",
23
+ /** Modals, ConfirmDialog, CommandPalette (`z.modal`, 1200). */
24
+ MODAL = "MODAL",
25
+ /** Tooltips (`z.tooltip`, 1400). */
26
+ TOOLTIP = "TOOLTIP"
27
+ }
28
+ /** Options for `useOverlay`. */
29
+ export interface UseOverlayOptions {
30
+ /** Whether the overlay is open. It is in the stack while `true`. Pass the overlay's own open state. */
31
+ isOpen: boolean;
32
+ /** Which `z` layer it belongs to. Modals always sit above drawers, drawers above dropdowns, tooltips above everything. */
33
+ layer: OverlayLayer;
34
+ /** Called when Escape is pressed while this overlay is the topmost. When omitted, Escape does nothing while it is topmost and does not reach the overlays below. */
35
+ onEscape?: (() => void) | undefined;
36
+ }
37
+ /** What `useOverlay` returns. */
38
+ export interface UseOverlayResult {
39
+ /** The z-index to render at: its layer's base plus its rank in that layer. While closed (or before registration), the base of its own layer. */
4
40
  zIndex: number;
5
- /** True when nothing is stacked above. Only the topmost overlay should act on Escape. */
41
+ /** `true` while it is the highest overlay in the stack. `false` while closed. */
6
42
  isTopmost: boolean;
43
+ /** This overlay's id in the stack (a `useId()` value). Pass it to `OverlayNode` around the overlay's content. */
44
+ overlayId: string;
7
45
  }
46
+ /** One registered overlay's place in the stack. Identity is stable until a value changes. */
47
+ interface OverlaySnapshot {
48
+ zIndex: number;
49
+ isTopmost: boolean;
50
+ }
51
+ /**
52
+ * The per-root stack. Plain JS, created in `OverlayProvider`'s state (never at module scope).
53
+ * @internal Shared with `OverlayProvider`; not part of the public API.
54
+ */
55
+ export interface OverlayStore {
56
+ register: (id: string, layer: OverlayLayer, parentId: string | null, onEscapeRef: MutableRefObject<(() => void) | undefined>) => void;
57
+ update: (id: string, layer: OverlayLayer, parentId: string | null) => void;
58
+ unregister: (id: string) => void;
59
+ subscribe: (listener: () => void) => () => void;
60
+ getSnapshot: (id: string) => OverlaySnapshot | null;
61
+ /** The topmost entry's Escape callback holder, or `null` while the stack is empty. */
62
+ getTopmostEscape: () => MutableRefObject<(() => void) | undefined> | null;
63
+ }
64
+ /**
65
+ * Creates one stack.
66
+ * @internal Used by `OverlayProvider`.
67
+ */
68
+ export declare function createOverlayStore(): OverlayStore;
69
+ /**
70
+ * The enclosing root's stack, or `null` outside any `OverlayProvider`.
71
+ * @internal Provided by `OverlayProvider`.
72
+ */
73
+ export declare const OverlayStoreContext: import("react").Context<OverlayStore | null>;
74
+ /**
75
+ * The `overlayId` of the nearest enclosing `OverlayNode`, or `null`.
76
+ * @internal Provided by `OverlayNode`.
77
+ */
78
+ export declare const OverlayParentContext: import("react").Context<string | null>;
79
+ /**
80
+ * Whether an Escape keydown should reach an overlay: not already handled, not mid IME
81
+ * composition, not a key repeat (holding Escape closes one layer, not all of them).
82
+ * @internal Shared with `OverlayProvider`.
83
+ */
84
+ export declare function isOverlayEscape(event: KeyboardEvent): boolean;
8
85
  /**
9
- * Registers an overlay in the global stack and returns its z-index and whether
10
- * it's on top. `Modal` and `Drawer` use it internally — reach for it only when
11
- * building your own overlay that must interleave correctly with theirs.
86
+ * Registers an overlay in the app's stack while `isOpen`, and returns its `zIndex`, whether it is
87
+ * the topmost, and the `overlayId` to pass to `OverlayNode`.
12
88
  *
13
- * Registration follows `enabled`, so pass your `open` flag straight through.
14
- * Falls back to a computed top-of-stack z-index when there's no
15
- * `OverlayProvider`, so it degrades rather than throwing.
89
+ * @example
90
+ * const { zIndex, overlayId } = useOverlay({ isOpen, layer: OverlayLayer.DROPDOWN, onEscape: () => setIsOpen(false) });
91
+ * <Portal><OverlayNode overlayId={overlayId}><Panel style={{ "--gx-popover-z": zIndex }}>…</Panel></OverlayNode></Portal>
16
92
  */
17
- export declare const useOverlay: (onDismiss: () => void, enabled: boolean, options?: OverlayRegisterOptions) => UseOverlayReturn;
18
- export default useOverlay;
93
+ export declare function useOverlay({ isOpen, layer, onEscape }: UseOverlayOptions): UseOverlayResult;
94
+ export {};
@@ -1,55 +1,232 @@
1
- import { OVERLAY_Z_INDEX_BASE } from "./constants.js";
2
- import { OverlayContext } from "./OverlayProvider.js";
3
- import { useContext, useEffect, useId } from "react";
1
+ import { useIsomorphicLayoutEffect } from "../hooks/useIsomorphicLayoutEffect.js";
2
+ import { Z } from "../theme/tokens/scales.js";
3
+ import { createContext, useContext, useEffect, useId, useRef, useSyncExternalStore } from "react";
4
4
  //#region src/overlay/useOverlay.ts
5
5
  /**
6
- * Registers an overlay in the global stack and returns its z-index and whether
7
- * it's on top. `Modal` and `Drawer` use it internally — reach for it only when
8
- * building your own overlay that must interleave correctly with theirs.
6
+ * The stacking and Escape coordinator for everything that floats above the page. An overlay calls
7
+ * `useOverlay` while it is open: the hook registers it in one stack per app (held by
8
+ * `OverlayProvider`, which `GalaxyProvider` mounts) and returns the `zIndex` to render at and
9
+ * whether it is the topmost. The root routes Escape to the topmost overlay only.
9
10
  *
10
- * Registration follows `enabled`, so pass your `open` flag straight through.
11
- * Falls back to a computed top-of-stack z-index when there's no
12
- * `OverlayProvider`, so it degrades rather than throwing.
11
+ * Order: by layer (`z.dropdown` < `z.drawer` < `z.modal` < `z.tooltip`), then by nesting (an
12
+ * overlay rendered inside another's `OverlayNode` sits above it, in at least its layer), then by
13
+ * the order they opened.
14
+ *
15
+ * The stack renders nothing, moves no focus, draws no backdrop and handles no pointer events.
16
+ *
17
+ * SSR: nothing here touches `window` or `document` at module scope. Registration runs in a layout
18
+ * effect on the client; the server snapshot is the closed state.
13
19
  */
14
- var useOverlay = (onDismiss, enabled, options) => {
15
- const context = useContext(OverlayContext);
16
- const id = useId();
17
- const layer = options?.layer;
18
- const dismissOnOverlayClick = options?.dismissOnOverlayClick;
19
- const register = context?.register;
20
- const unregister = context?.unregister;
21
- useEffect(() => {
22
- if (!register || !unregister) return;
23
- if (enabled) register(id, onDismiss, {
24
- layer,
25
- dismissOnOverlayClick
26
- });
27
- else unregister(id);
28
- return () => {
29
- unregister(id);
20
+ /** The `z` layer an overlay belongs to. Layers never interleave: a higher layer is always above a lower one. */
21
+ var OverlayLayer = /* @__PURE__ */ function(OverlayLayer) {
22
+ /** Anchored panels: Popover, Dropdown, Menu, ContextMenu, SelectInput, DateInput, ColorInput (`z.dropdown`, 1000). */
23
+ OverlayLayer["DROPDOWN"] = "DROPDOWN";
24
+ /** Drawers (`z.drawer`, 1100). */
25
+ OverlayLayer["DRAWER"] = "DRAWER";
26
+ /** Modals, ConfirmDialog, CommandPalette (`z.modal`, 1200). */
27
+ OverlayLayer["MODAL"] = "MODAL";
28
+ /** Tooltips (`z.tooltip`, 1400). */
29
+ OverlayLayer["TOOLTIP"] = "TOOLTIP";
30
+ return OverlayLayer;
31
+ }({});
32
+ /** Layer → its base z-index, read as numbers from the `z` scale (logic, not CSS). */
33
+ var OVERLAY_LAYER_TO_Z_MAP = {
34
+ ["DROPDOWN"]: Z.dropdown,
35
+ ["DRAWER"]: Z.drawer,
36
+ ["MODAL"]: Z.modal,
37
+ ["TOOLTIP"]: Z.tooltip
38
+ };
39
+ /** The highest rank within a layer. The `z` steps are 100 apart, so layers never interleave. */
40
+ var OVERLAY_MAX_RANK = 99;
41
+ /**
42
+ * Creates one stack.
43
+ * @internal Used by `OverlayProvider`.
44
+ */
45
+ function createOverlayStore() {
46
+ const entries = /* @__PURE__ */ new Map();
47
+ const listeners = /* @__PURE__ */ new Set();
48
+ let snapshots = /* @__PURE__ */ new Map();
49
+ let topmostId = null;
50
+ let sequenceCounter = 0;
51
+ /** Effective layer, sort key and depth, following registered parents (memoized per pass). */
52
+ const computeOrder = () => {
53
+ const memo = /* @__PURE__ */ new Map();
54
+ const resolve = (id, entry) => {
55
+ const cached = memo.get(id);
56
+ if (cached !== void 0) return cached;
57
+ const ownZ = OVERLAY_LAYER_TO_Z_MAP[entry.layer];
58
+ const parent = entry.parentId === null ? void 0 : entries.get(entry.parentId);
59
+ let order;
60
+ if (entry.parentId !== null && parent !== void 0) {
61
+ const parentOrder = resolve(entry.parentId, parent);
62
+ order = {
63
+ id,
64
+ layerZ: Math.max(ownZ, parentOrder.layerZ),
65
+ key: Math.max(entry.sequence, parentOrder.key),
66
+ depth: parentOrder.depth + 1,
67
+ sequence: entry.sequence
68
+ };
69
+ } else order = {
70
+ id,
71
+ layerZ: ownZ,
72
+ key: entry.sequence,
73
+ depth: 0,
74
+ sequence: entry.sequence
75
+ };
76
+ memo.set(id, order);
77
+ return order;
30
78
  };
79
+ for (const [id, entry] of entries) resolve(id, entry);
80
+ return [...memo.values()].sort((a, b) => a.layerZ - b.layerZ || a.key - b.key || a.depth - b.depth || a.sequence - b.sequence);
81
+ };
82
+ /** Recomputes every snapshot, keeps unchanged ones by identity, and notifies on any change. */
83
+ const recompute = () => {
84
+ const sorted = computeOrder();
85
+ const next = /* @__PURE__ */ new Map();
86
+ const last = sorted[sorted.length - 1];
87
+ topmostId = last === void 0 ? null : last.id;
88
+ let rank = 0;
89
+ let previousLayerZ = null;
90
+ for (const order of sorted) {
91
+ rank = order.layerZ === previousLayerZ ? rank + 1 : 0;
92
+ previousLayerZ = order.layerZ;
93
+ const zIndex = order.layerZ + Math.min(rank, OVERLAY_MAX_RANK);
94
+ const isTopmost = order.id === topmostId;
95
+ const previous = snapshots.get(order.id);
96
+ next.set(order.id, previous !== void 0 && previous.zIndex === zIndex && previous.isTopmost === isTopmost ? previous : {
97
+ zIndex,
98
+ isTopmost
99
+ });
100
+ }
101
+ snapshots = next;
102
+ for (const listener of listeners) listener();
103
+ };
104
+ return {
105
+ register(id, layer, parentId, onEscapeRef) {
106
+ sequenceCounter += 1;
107
+ entries.set(id, {
108
+ layer,
109
+ parentId,
110
+ sequence: sequenceCounter,
111
+ onEscapeRef
112
+ });
113
+ recompute();
114
+ },
115
+ update(id, layer, parentId) {
116
+ const entry = entries.get(id);
117
+ if (entry === void 0 || entry.layer === layer && entry.parentId === parentId) return;
118
+ entries.set(id, {
119
+ ...entry,
120
+ layer,
121
+ parentId
122
+ });
123
+ recompute();
124
+ },
125
+ unregister(id) {
126
+ if (!entries.delete(id)) return;
127
+ recompute();
128
+ },
129
+ subscribe(listener) {
130
+ listeners.add(listener);
131
+ return () => {
132
+ listeners.delete(listener);
133
+ };
134
+ },
135
+ getSnapshot(id) {
136
+ return snapshots.get(id) ?? null;
137
+ },
138
+ getTopmostEscape() {
139
+ if (topmostId === null) return null;
140
+ return entries.get(topmostId)?.onEscapeRef ?? null;
141
+ }
142
+ };
143
+ }
144
+ /**
145
+ * The enclosing root's stack, or `null` outside any `OverlayProvider`.
146
+ * @internal Provided by `OverlayProvider`.
147
+ */
148
+ var OverlayStoreContext = createContext(null);
149
+ /**
150
+ * The `overlayId` of the nearest enclosing `OverlayNode`, or `null`.
151
+ * @internal Provided by `OverlayNode`.
152
+ */
153
+ var OverlayParentContext = createContext(null);
154
+ /**
155
+ * Whether an Escape keydown should reach an overlay: not already handled, not mid IME
156
+ * composition, not a key repeat (holding Escape closes one layer, not all of them).
157
+ * @internal Shared with `OverlayProvider`.
158
+ */
159
+ function isOverlayEscape(event) {
160
+ return event.key === "Escape" && !event.defaultPrevented && !event.isComposing && !event.repeat;
161
+ }
162
+ /** No root: there is nothing to subscribe to. */
163
+ var subscribeToNothing = () => () => {};
164
+ var getNoSnapshot = () => null;
165
+ /**
166
+ * Registers an overlay in the app's stack while `isOpen`, and returns its `zIndex`, whether it is
167
+ * the topmost, and the `overlayId` to pass to `OverlayNode`.
168
+ *
169
+ * @example
170
+ * const { zIndex, overlayId } = useOverlay({ isOpen, layer: OverlayLayer.DROPDOWN, onEscape: () => setIsOpen(false) });
171
+ * <Portal><OverlayNode overlayId={overlayId}><Panel style={{ "--gx-popover-z": zIndex }}>…</Panel></OverlayNode></Portal>
172
+ */
173
+ function useOverlay({ isOpen, layer, onEscape }) {
174
+ const store = useContext(OverlayStoreContext);
175
+ const parentId = useContext(OverlayParentContext);
176
+ const overlayId = useId();
177
+ const onEscapeRef = useRef(onEscape);
178
+ onEscapeRef.current = onEscape;
179
+ const placementRef = useRef({
180
+ layer,
181
+ parentId
182
+ });
183
+ placementRef.current = {
184
+ layer,
185
+ parentId
186
+ };
187
+ useIsomorphicLayoutEffect(() => {
188
+ if (store === null || !isOpen) return;
189
+ store.register(overlayId, placementRef.current.layer, placementRef.current.parentId, onEscapeRef);
190
+ return () => store.unregister(overlayId);
191
+ }, [
192
+ store,
193
+ isOpen,
194
+ overlayId
195
+ ]);
196
+ useIsomorphicLayoutEffect(() => {
197
+ if (store === null || !isOpen) return;
198
+ store.update(overlayId, layer, parentId);
31
199
  }, [
32
- id,
33
- onDismiss,
34
- enabled,
200
+ store,
201
+ isOpen,
202
+ overlayId,
35
203
  layer,
36
- dismissOnOverlayClick,
37
- register,
38
- unregister
204
+ parentId
39
205
  ]);
40
- const overlays = context?.overlays ?? [];
41
- const entry = overlays.find((e) => e.id === id);
42
- if (entry) {
43
- const maxZIndex = Math.max(...overlays.map((o) => o.zIndex));
44
- return {
45
- zIndex: entry.zIndex,
46
- isTopmost: entry.zIndex === maxZIndex
206
+ useEffect(() => {
207
+ if (store !== null || !isOpen) return;
208
+ const handleKeyDown = (event) => {
209
+ if (isOverlayEscape(event)) onEscapeRef.current?.();
47
210
  };
48
- }
211
+ document.addEventListener("keydown", handleKeyDown);
212
+ return () => document.removeEventListener("keydown", handleKeyDown);
213
+ }, [store, isOpen]);
214
+ const snapshot = useSyncExternalStore(store === null ? subscribeToNothing : store.subscribe, () => store === null ? null : store.getSnapshot(overlayId), getNoSnapshot);
215
+ if (store === null) return {
216
+ zIndex: OVERLAY_LAYER_TO_Z_MAP[layer],
217
+ isTopmost: isOpen,
218
+ overlayId
219
+ };
220
+ if (snapshot === null || !isOpen) return {
221
+ zIndex: OVERLAY_LAYER_TO_Z_MAP[layer],
222
+ isTopmost: false,
223
+ overlayId
224
+ };
49
225
  return {
50
- zIndex: (overlays.length > 0 ? Math.max(...overlays.map((o) => o.zIndex)) : OVERLAY_Z_INDEX_BASE - 10) + 10,
51
- isTopmost: true
226
+ zIndex: snapshot.zIndex,
227
+ isTopmost: snapshot.isTopmost,
228
+ overlayId
52
229
  };
53
- };
230
+ }
54
231
  //#endregion
55
- export { useOverlay as default, useOverlay };
232
+ export { OverlayLayer, OverlayParentContext, OverlayStoreContext, createOverlayStore, isOverlayEscape, useOverlay };