@galaxy-io/dls 1.6.1 → 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 -30
  468. package/dist/inputs/SwitcherInput.js +0 -81
  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,55 @@
1
+ /**
2
+ * Asks one yes/no question before an action runs ("Delete source?"). A preset over `Modal`
3
+ * (`ModalSize.SMALL`) with a fixed layout: the question as the title, an optional description, an
4
+ * optional type-to-confirm field, and two buttons, Cancel and the named action.
5
+ *
6
+ * `onConfirm` runs the action. When it returns a promise, the action button shows a spinner and the
7
+ * dialog stays open and blocking (Cancel disabled, no close button, Escape and the backdrop
8
+ * ignored) until it settles: it closes on resolve and stays open on reject, where the app shows
9
+ * `error`. `isDestructive` makes the action `ButtonVariant.ERROR`; `confirmValue` makes the user
10
+ * type a value before the action enables.
11
+ *
12
+ * Any other content makes it a `Modal`. No styles of its own; every surface is Modal's.
13
+ *
14
+ * SSR: Modal's (nothing renders on the server). Nothing at module scope.
15
+ */
16
+ import { type AriaAttributes, type CSSProperties, type ReactNode } from "react";
17
+ export interface ConfirmDialogProps extends AriaAttributes {
18
+ /** The question, as the dialog title: "Delete source?". Names the dialog. */
19
+ header: string;
20
+ /** What happens if the user confirms. A string renders as secondary `Text`; a node (a mono `Span`) renders inside the same `Text`. Describes the dialog. */
21
+ description?: ReactNode;
22
+ /** The confirm button's label. Name the action ("Delete source", "Run sync"), not "OK". */
23
+ label: string;
24
+ /** Runs the action. It may return a promise: while it is pending the dialog shows a spinner and cannot be dismissed; it closes on resolve and stays open on reject. */
25
+ onConfirm: () => void;
26
+ /**
27
+ * The action deletes or cannot be undone: the confirm button is `ButtonVariant.ERROR` instead of `PRIMARY`.
28
+ * @default false
29
+ */
30
+ isDestructive?: boolean;
31
+ /** Type-to-confirm. When set, the user must type this text exactly (surrounding spaces ignored) before the confirm button enables. */
32
+ confirmValue?: string;
33
+ /** A message under the description, for an action that failed. The app sets it, usually after `onConfirm` rejects. */
34
+ error?: string;
35
+ /** Controlled open state. When set, ConfirmDialog calls `onOpenChange` and lets the caller decide. */
36
+ isOpen?: boolean;
37
+ /**
38
+ * Initial open state while uncontrolled.
39
+ * @default false
40
+ */
41
+ defaultIsOpen?: boolean;
42
+ /** Called with `false` on Cancel, Escape, a backdrop click, the close button, and after `onConfirm` succeeds. */
43
+ onOpenChange?: (isOpen: boolean) => void;
44
+ /** DOM id on the dialog panel. */
45
+ id?: string;
46
+ /** Any `data-*` attribute, forwarded to the dialog panel. */
47
+ [dataAttribute: `data-${string}`]: string | number | boolean | undefined;
48
+ /** Extra class on the dialog panel. */
49
+ className?: string;
50
+ /** Inline style on the dialog panel; only for setting CSS custom properties. */
51
+ style?: CSSProperties;
52
+ }
53
+ /** A yes/no question before an action: title, description, optional type-to-confirm, Cancel + action. */
54
+ declare const ConfirmDialog: import("react").ForwardRefExoticComponent<ConfirmDialogProps & import("react").RefAttributes<HTMLDivElement>>;
55
+ export default ConfirmDialog;
@@ -0,0 +1,151 @@
1
+ import { FontFamily } from "../theme/enums.js";
2
+ import Text, { TextVariant } from "../text/Text.js";
3
+ import { useControlledOpenState } from "../hooks/useControlledOpenState.js";
4
+ import Flex, { FlexDirection } from "../layout/Flex.js";
5
+ import Button, { ButtonVariant } from "../buttons/Button.js";
6
+ import Span from "../text/Span.js";
7
+ import TextInput from "../inputs/TextInput.js";
8
+ import Modal, { ModalSize } from "./Modal.js";
9
+ import { forwardRef, useEffect, useId, useRef, useState } from "react";
10
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
11
+ //#region src/modal/ConfirmDialog.tsx
12
+ /**
13
+ * Asks one yes/no question before an action runs ("Delete source?"). A preset over `Modal`
14
+ * (`ModalSize.SMALL`) with a fixed layout: the question as the title, an optional description, an
15
+ * optional type-to-confirm field, and two buttons, Cancel and the named action.
16
+ *
17
+ * `onConfirm` runs the action. When it returns a promise, the action button shows a spinner and the
18
+ * dialog stays open and blocking (Cancel disabled, no close button, Escape and the backdrop
19
+ * ignored) until it settles: it closes on resolve and stays open on reject, where the app shows
20
+ * `error`. `isDestructive` makes the action `ButtonVariant.ERROR`; `confirmValue` makes the user
21
+ * type a value before the action enables.
22
+ *
23
+ * Any other content makes it a `Modal`. No styles of its own; every surface is Modal's.
24
+ *
25
+ * SSR: Modal's (nothing renders on the server). Nothing at module scope.
26
+ */
27
+ /** The fixed text of the dismiss button (as Modal's "Close"). */
28
+ var CANCEL_LABEL = "Cancel";
29
+ /** A value with a `then` method: what `await` would treat as a promise. */
30
+ var isThenable = (value) => typeof value === "object" && value !== null && typeof value.then === "function";
31
+ /** A yes/no question before an action: title, description, optional type-to-confirm, Cancel + action. */
32
+ var ConfirmDialog = forwardRef(function ConfirmDialog({ header, description, label, onConfirm, isDestructive = false, confirmValue, error, isOpen: isOpenProp, defaultIsOpen = false, onOpenChange, "aria-describedby": ariaDescribedBy, className, style, ...rest }, ref) {
33
+ const descriptionId = useId();
34
+ const promptId = useId();
35
+ const { isOpen, setOpen } = useControlledOpenState({
36
+ isOpen: isOpenProp,
37
+ defaultIsOpen,
38
+ onOpenChange
39
+ });
40
+ const [typed, setTyped] = useState("");
41
+ const [isPending, setIsPending] = useState(false);
42
+ const [wasOpen, setWasOpen] = useState(isOpen);
43
+ if (wasOpen !== isOpen) {
44
+ setWasOpen(isOpen);
45
+ if (isOpen) {
46
+ setTyped("");
47
+ setIsPending(false);
48
+ }
49
+ }
50
+ const isMountedRef = useRef(true);
51
+ useEffect(() => {
52
+ isMountedRef.current = true;
53
+ return () => {
54
+ isMountedRef.current = false;
55
+ };
56
+ }, []);
57
+ /** A pending action cannot be dismissed. */
58
+ const requestOpenChange = (next) => {
59
+ if (!next && isPending) return;
60
+ setOpen(next);
61
+ };
62
+ const isMatched = confirmValue === void 0 || typed.trim() === confirmValue.trim();
63
+ const confirm = () => {
64
+ if (!isMatched || isPending) return;
65
+ const result = onConfirm();
66
+ if (!isThenable(result)) {
67
+ setOpen(false);
68
+ return;
69
+ }
70
+ setIsPending(true);
71
+ result.then(() => {
72
+ if (!isMountedRef.current) return;
73
+ setIsPending(false);
74
+ setOpen(false);
75
+ }, () => {
76
+ if (!isMountedRef.current) return;
77
+ setIsPending(false);
78
+ });
79
+ };
80
+ const describedBy = ariaDescribedBy ?? (description === void 0 ? void 0 : descriptionId);
81
+ const hasBody = description !== void 0 || confirmValue !== void 0 || error !== void 0;
82
+ const footer = /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Button, {
83
+ label: CANCEL_LABEL,
84
+ variant: ButtonVariant.TERTIARY,
85
+ isDisabled: isPending,
86
+ onClick: () => requestOpenChange(false)
87
+ }), /* @__PURE__ */ jsx(Button, {
88
+ label,
89
+ variant: isDestructive ? ButtonVariant.ERROR : ButtonVariant.PRIMARY,
90
+ isLoading: isPending,
91
+ isDisabled: !isMatched,
92
+ onClick: confirm
93
+ })] });
94
+ return /* @__PURE__ */ jsx(Modal, {
95
+ ...rest,
96
+ ref,
97
+ size: ModalSize.SMALL,
98
+ isOpen,
99
+ onOpenChange: requestOpenChange,
100
+ isDismissable: !isPending,
101
+ header,
102
+ footer,
103
+ ...describedBy === void 0 ? {} : { "aria-describedby": describedBy },
104
+ ...className === void 0 ? {} : { className },
105
+ ...style === void 0 ? {} : { style },
106
+ children: hasBody ? /* @__PURE__ */ jsxs(Flex, {
107
+ direction: FlexDirection.COLUMN,
108
+ gap: 12,
109
+ children: [
110
+ description !== void 0 && /* @__PURE__ */ jsx(Text, {
111
+ id: descriptionId,
112
+ variant: TextVariant.SECONDARY,
113
+ children: description
114
+ }),
115
+ confirmValue !== void 0 && /* @__PURE__ */ jsxs(Flex, {
116
+ direction: FlexDirection.COLUMN,
117
+ gap: 8,
118
+ children: [/* @__PURE__ */ jsxs(Text, {
119
+ id: promptId,
120
+ children: [
121
+ "Type ",
122
+ /* @__PURE__ */ jsx(Span, {
123
+ family: FontFamily.MONO,
124
+ children: confirmValue
125
+ }),
126
+ " to confirm."
127
+ ]
128
+ }), /* @__PURE__ */ jsx(TextInput, {
129
+ value: typed,
130
+ onChange: setTyped,
131
+ onEnter: confirm,
132
+ placeholder: confirmValue,
133
+ isDisabled: isPending,
134
+ fillWidth: true,
135
+ "aria-labelledby": promptId
136
+ })]
137
+ }),
138
+ error !== void 0 && /* @__PURE__ */ jsx("div", {
139
+ role: "alert",
140
+ children: /* @__PURE__ */ jsx(Text, {
141
+ variant: TextVariant.ERROR,
142
+ children: error
143
+ })
144
+ })
145
+ ]
146
+ }) : void 0
147
+ });
148
+ });
149
+ ConfirmDialog.displayName = "ConfirmDialog";
150
+ //#endregion
151
+ export { ConfirmDialog as default };
@@ -1,15 +1,65 @@
1
- import { type PropsWithChildren } from "react";
2
- export interface ModalProps {
3
- /** Controlled visibility. The modal has no open state of its own. */
4
- open: boolean;
5
- /** Called on Escape and on backdrop click. */
6
- onClose: () => void;
7
- }
8
- /**
9
- * A centered dialog over a dimmed backdrop. Fully controlled — you own `open`.
10
- *
11
- * Stacking and Escape handling come from `OverlayProvider`, so only the topmost
12
- * overlay closes on Escape. Wrap your app in that provider.
13
- */
14
- declare const Modal: ({ open, onClose, children }: PropsWithChildren<ModalProps>) => import("react").ReactPortal;
1
+ import { type AriaAttributes, type CSSProperties, type ReactNode } from "react";
2
+ /** Panel width. Canonical rung names (Constitution V); the values are widths, not control heights. */
3
+ export declare enum ModalSize {
4
+ /** 400px: a question or a notice (`ConfirmDialog`). */
5
+ SMALL = "SMALL",
6
+ /** 560px: a short form. The default. */
7
+ MEDIUM = "MEDIUM",
8
+ /** 720px: a longer form or a preview. */
9
+ LARGE = "LARGE",
10
+ /** Fills the viewport less 32px on each side. */
11
+ X_LARGE = "X_LARGE"
12
+ }
13
+ /** Every Modal prop except the name pair (`header` / `ariaLabel`). */
14
+ interface ModalBaseProps extends AriaAttributes {
15
+ /** The body. It scrolls when the panel reaches the viewport height. A string or number renders as `Text`. */
16
+ children?: ReactNode;
17
+ /** The actions row, end-aligned with an 8px gap. Put the least destructive action first. */
18
+ footer?: ReactNode;
19
+ /**
20
+ * Panel width: 400 / 560 / 720px, or `X_LARGE` to fill the viewport less 32px on each side.
21
+ * @default ModalSize.MEDIUM
22
+ */
23
+ size?: ModalSize;
24
+ /**
25
+ * Escape, a backdrop click and the close button close the dialog. When `false` there is no close button, and only the app (usually a `footer` action) can close it.
26
+ * @default true
27
+ */
28
+ isDismissable?: boolean;
29
+ /** Controlled open state. When set, Modal calls `onOpenChange` and lets the caller decide. */
30
+ isOpen?: boolean;
31
+ /**
32
+ * Initial open state while uncontrolled.
33
+ * @default false
34
+ */
35
+ defaultIsOpen?: boolean;
36
+ /** Called with `false` on Escape, a backdrop click and the close button. */
37
+ onOpenChange?: (isOpen: boolean) => void;
38
+ /** DOM id on the panel (`role="dialog"`). @default a `useId()` value */
39
+ id?: string;
40
+ /** Any `data-*` attribute, forwarded to the panel. */
41
+ [dataAttribute: `data-${string}`]: string | number | boolean | undefined;
42
+ /** Extra class on the panel. */
43
+ className?: string;
44
+ /** Inline style on the panel; only for setting CSS custom properties. */
45
+ style?: CSSProperties;
46
+ }
47
+ /** A title row names the dialog. */
48
+ interface ModalTitledProps {
49
+ /** The title row. A string renders as an `h2` `Text` and names the dialog; a node renders as it is. Required unless `ariaLabel` is set. */
50
+ header: ReactNode;
51
+ /** Accessible name of the dialog. Required by type when there is no `header`. */
52
+ ariaLabel?: string;
53
+ }
54
+ /** No title row: the accessible name is required. */
55
+ interface ModalUntitledProps {
56
+ /** The title row. A string renders as an `h2` `Text` and names the dialog; a node renders as it is. Required unless `ariaLabel` is set. */
57
+ header?: undefined;
58
+ /** Accessible name of the dialog. Required by type when there is no `header`. */
59
+ ariaLabel: string;
60
+ }
61
+ /** Modal props. Without a `header`, `ariaLabel` is required by the type. */
62
+ export type ModalProps = ModalBaseProps & (ModalTitledProps | ModalUntitledProps);
63
+ /** A blocking dialog over a dimmed page: title row, scrolling body, actions row. */
64
+ declare const Modal: import("react").ForwardRefExoticComponent<ModalProps & import("react").RefAttributes<HTMLDivElement>>;
15
65
  export default Modal;
@@ -1,58 +1,199 @@
1
- import { OverlayLayer } from "../overlay/constants.js";
2
- import useOverlay from "../overlay/useOverlay.js";
3
- import { useDismiss } from "../hooks/useDismiss.js";
1
+ import FocusScope, { FocusScopeAutoFocus } from "../a11y/FocusScope.js";
2
+ import Text, { TextSize, TextWeight } from "../text/Text.js";
3
+ import { useControlledOpenState } from "../hooks/useControlledOpenState.js";
4
+ import Portal from "../layout/Portal.js";
5
+ import { OverlayLayer, useOverlay } from "../overlay/useOverlay.js";
6
+ import { OverlayNode } from "../overlay/OverlayProvider.js";
7
+ import ScaleFade from "../transform/ScaleFade.js";
8
+ import Button, { ButtonSize, ButtonVariant } from "../buttons/Button.js";
9
+ import Fade from "../transform/Fade.js";
4
10
  /* empty css */
5
11
  import { styled } from "@linaria/react";
6
- import { useCallback } from "react";
7
- import { jsx } from "react/jsx-runtime";
8
- import { createPortal } from "react-dom";
12
+ import { forwardRef, useId, useRef, useState } from "react";
13
+ import { jsx, jsxs } from "react/jsx-runtime";
14
+ import { cx } from "@linaria/core";
15
+ import { XIcon } from "@phosphor-icons/react";
9
16
  //#region src/modal/Modal.tsx
10
- var _exp = () => ({ isOpen }) => isOpen ? 1 : 0;
11
- var _exp2 = () => ({ isOpen }) => isOpen ? "visible" : "hidden";
12
- var StyledModalWrapper = /*#__PURE__*/ styled("div")({
13
- name: "StyledModalWrapper",
14
- class: "sepkv8n",
15
- propsAsIs: false,
16
- vars: {
17
- "sepkv8n-0": [_exp()],
18
- "sepkv8n-1": [_exp2()]
19
- }
17
+ /**
18
+ * The blocking dialog: a centered panel over a dimmed page holding one task the user must finish
19
+ * or dismiss before going back to the page. Modal draws the panel and its three regions (a title
20
+ * row, a scrolling body and an actions row), dims and locks the page behind it, traps focus inside
21
+ * and restores it on close, stacks above other overlays through the overlay stack, and animates in
22
+ * and out (`Fade` backdrop, `ScaleFade` panel). It has no trigger: the app opens it.
23
+ *
24
+ * A short yes/no question is `ConfirmDialog`; a panel beside the page is `Drawer`; an anchored
25
+ * panel is `Popover`.
26
+ *
27
+ * SSR: nothing renders on the server (closed by default, and `Portal` renders nothing there). The
28
+ * scroll lock is CSS keyed on the backdrop; nothing touches `window` or `document` at module scope.
29
+ */
30
+ /** Panel width. Canonical rung names (Constitution V); the values are widths, not control heights. */
31
+ var ModalSize = /* @__PURE__ */ function(ModalSize) {
32
+ /** 400px: a question or a notice (`ConfirmDialog`). */
33
+ ModalSize["SMALL"] = "SMALL";
34
+ /** 560px: a short form. The default. */
35
+ ModalSize["MEDIUM"] = "MEDIUM";
36
+ /** 720px: a longer form or a preview. */
37
+ ModalSize["LARGE"] = "LARGE";
38
+ /** Fills the viewport less 32px on each side. */
39
+ ModalSize["X_LARGE"] = "X_LARGE";
40
+ return ModalSize;
41
+ }({});
42
+ /** The close button's accessible name (fixed English, as Input's "Clear"). */
43
+ var CLOSE_LABEL = "Close";
44
+ /**
45
+ * Scroll lock: while any modal backdrop is mounted (open or exiting) the page does not scroll.
46
+ * `overflow: hidden` on `html` keeps the scroll position; the package reset hides scrollbars, so
47
+ * nothing shifts. Keyed on the backdrop's class, so it ends with the last backdrop.
48
+ */
49
+ var Backdrop = /*#__PURE__*/ styled("div")({
50
+ name: "Backdrop",
51
+ class: "gx-Modal-Backdrop-bepkv8n",
52
+ propsAsIs: false
20
53
  });
21
- var ModalWrapperContent = /*#__PURE__*/ styled("div")({
22
- name: "ModalWrapperContent",
23
- class: "m1l9qfn",
54
+ /** The backdrop's Fade root: positioned just under the panel. Sets no opacity or visibility. */
55
+ var BACKDROP_FRAME_CSS = "gx-Modal-BACKDROP_FRAME_CSS-b1jgo9vf";
56
+ /** Centers the panel; passes clicks around it through to the backdrop. */
57
+ var Positioner = /*#__PURE__*/ styled("div")({
58
+ name: "Positioner",
59
+ class: "gx-Modal-Positioner-ptpk8hn",
24
60
  propsAsIs: false
25
61
  });
26
- var ModalContentWrapper = /*#__PURE__*/ styled("div")({
27
- name: "ModalContentWrapper",
28
- class: "m1jgo9vf",
62
+ /** The panel's ScaleFade root: the flex chain that lets a tall body scroll. */
63
+ var FRAME_CSS = "gx-Modal-FRAME_CSS-fedvh3d";
64
+ var MODAL_SIZE_TO_CSS_MAP = {
65
+ ["SMALL"]: "gx-Modal-SMALL-s1jpkb4q",
66
+ ["MEDIUM"]: "gx-Modal-MEDIUM-mh1vj51",
67
+ ["LARGE"]: "gx-Modal-LARGE-l1th1b6t",
68
+ ["X_LARGE"]: "gx-Modal-X_LARGE-x1s4ejyc"
69
+ };
70
+ var FOCUS_SCOPE_CSS = "gx-Modal-FOCUS_SCOPE_CSS-f69bx3r";
71
+ var Panel = /*#__PURE__*/ styled("div")({
72
+ name: "Panel",
73
+ class: "gx-Modal-Panel-p14wx16q",
29
74
  propsAsIs: false
30
75
  });
31
- /**
32
- * A centered dialog over a dimmed backdrop. Fully controlled — you own `open`.
33
- *
34
- * Stacking and Escape handling come from `OverlayProvider`, so only the topmost
35
- * overlay closes on Escape. Wrap your app in that provider.
36
- */
37
- var Modal = ({ open, onClose, children }) => {
38
- const { zIndex, isTopmost } = useOverlay(onClose, open, { layer: OverlayLayer.MODAL });
39
- const handleContentClick = useCallback((e) => {
40
- e.stopPropagation();
41
- }, []);
42
- const dismissRef = useDismiss({
43
- onDismiss: onClose,
44
- enabled: open && isTopmost,
45
- enableClickOutside: false
76
+ var Header = /*#__PURE__*/ styled("div")({
77
+ name: "Header",
78
+ class: "gx-Modal-Header-h1w4b032",
79
+ propsAsIs: false
80
+ });
81
+ /** While the close button shows: a long title never runs under it. */
82
+ var HAS_CLOSE_CSS = "gx-Modal-HAS_CLOSE_CSS-hbri8ij";
83
+ /** A node `header`: takes the row and may shrink. */
84
+ var HeaderNode = /*#__PURE__*/ styled("div")({
85
+ name: "HeaderNode",
86
+ class: "gx-Modal-HeaderNode-hxdonbm",
87
+ propsAsIs: false
88
+ });
89
+ var Body = /*#__PURE__*/ styled("div")({
90
+ name: "Body",
91
+ class: "gx-Modal-Body-b1c1q51w",
92
+ propsAsIs: false
93
+ });
94
+ var Footer = /*#__PURE__*/ styled("div")({
95
+ name: "Footer",
96
+ class: "gx-Modal-Footer-f1aye683",
97
+ propsAsIs: false
98
+ });
99
+ var CloseSlot = /*#__PURE__*/ styled("span")({
100
+ name: "CloseSlot",
101
+ class: "gx-Modal-CloseSlot-c1uq3md9",
102
+ propsAsIs: false
103
+ });
104
+ /** A blocking dialog over a dimmed page: title row, scrolling body, actions row. */
105
+ var Modal = forwardRef(function Modal({ children, header, footer, size = "MEDIUM", isDismissable = true, isOpen: isOpenProp, defaultIsOpen = false, onOpenChange, ariaLabel, id, className, style, ...rest }, ref) {
106
+ const generatedId = useId();
107
+ const titleId = useId();
108
+ const { isOpen, setOpen } = useControlledOpenState({
109
+ isOpen: isOpenProp,
110
+ defaultIsOpen,
111
+ onOpenChange
46
112
  });
47
- return createPortal(open && /* @__PURE__ */ jsx(StyledModalWrapper, {
48
- isOpen: open,
49
- style: { zIndex },
50
- children: /* @__PURE__ */ jsx(ModalWrapperContent, { children: /* @__PURE__ */ jsx(ModalContentWrapper, {
51
- ref: dismissRef,
52
- onClick: handleContentClick,
53
- children
54
- }) })
55
- }), document.body);
56
- };
113
+ const close = () => setOpen(false);
114
+ const { zIndex, isTopmost, overlayId } = useOverlay({
115
+ isOpen,
116
+ layer: OverlayLayer.MODAL,
117
+ onEscape: isDismissable ? close : void 0
118
+ });
119
+ const [hasOpened, setHasOpened] = useState(isOpen);
120
+ if (isOpen && !hasOpened) setHasOpened(true);
121
+ const [isOpenOnFirstRender] = useState(isOpen);
122
+ const shouldAnimateOnMount = !isOpenOnFirstRender;
123
+ /** Whether the current press started on the backdrop while this modal was topmost. */
124
+ const isBackdropPressRef = useRef(false);
125
+ const handleBackdropPointerDown = (event) => {
126
+ isBackdropPressRef.current = event.target === event.currentTarget && isTopmost;
127
+ };
128
+ const handleBackdropClick = (_event) => {
129
+ const isBackdropPress = isBackdropPressRef.current;
130
+ isBackdropPressRef.current = false;
131
+ if (isBackdropPress && isDismissable) close();
132
+ };
133
+ if (!hasOpened) return null;
134
+ const hasHeaderRow = header !== void 0 || isDismissable;
135
+ const labelling = ariaLabel !== void 0 ? { "aria-label": ariaLabel } : rest["aria-labelledby"] !== void 0 || header === void 0 ? {} : { "aria-labelledby": titleId };
136
+ const zStyle = { "--gx-modal-z": zIndex };
137
+ return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsxs(OverlayNode, {
138
+ overlayId,
139
+ children: [/* @__PURE__ */ jsx(Fade, {
140
+ isOpen,
141
+ shouldAnimateOnMount,
142
+ className: BACKDROP_FRAME_CSS,
143
+ style: zStyle,
144
+ children: /* @__PURE__ */ jsx(Backdrop, {
145
+ "aria-hidden": true,
146
+ onPointerDown: handleBackdropPointerDown,
147
+ onClick: handleBackdropClick
148
+ })
149
+ }), /* @__PURE__ */ jsx(Positioner, {
150
+ style: zStyle,
151
+ children: /* @__PURE__ */ jsx(ScaleFade, {
152
+ isOpen,
153
+ shouldAnimateOnMount,
154
+ className: cx(FRAME_CSS, MODAL_SIZE_TO_CSS_MAP[size]),
155
+ children: /* @__PURE__ */ jsx(FocusScope, {
156
+ autoFocus: FocusScopeAutoFocus.FIRST,
157
+ className: FOCUS_SCOPE_CSS,
158
+ children: /* @__PURE__ */ jsxs(Panel, {
159
+ ...rest,
160
+ ...labelling,
161
+ ref,
162
+ id: id ?? generatedId,
163
+ role: "dialog",
164
+ "aria-modal": "true",
165
+ className,
166
+ style,
167
+ children: [
168
+ hasHeaderRow && /* @__PURE__ */ jsx(Header, {
169
+ className: cx(isDismissable && HAS_CLOSE_CSS),
170
+ children: typeof header === "string" ? /* @__PURE__ */ jsx(Text, {
171
+ as: "h2",
172
+ size: TextSize.BODY_LG,
173
+ weight: TextWeight.MEDIUM,
174
+ id: titleId,
175
+ children: header
176
+ }) : header !== void 0 ? /* @__PURE__ */ jsx(HeaderNode, {
177
+ id: titleId,
178
+ children: header
179
+ }) : null
180
+ }),
181
+ /* @__PURE__ */ jsx(Body, { children: typeof children === "string" || typeof children === "number" ? /* @__PURE__ */ jsx(Text, { children }) : children }),
182
+ footer !== void 0 && /* @__PURE__ */ jsx(Footer, { children: footer }),
183
+ isDismissable && /* @__PURE__ */ jsx(CloseSlot, { children: /* @__PURE__ */ jsx(Button, {
184
+ variant: ButtonVariant.TERTIARY,
185
+ size: ButtonSize.SMALL,
186
+ icon: XIcon,
187
+ ariaLabel: CLOSE_LABEL,
188
+ onClick: close
189
+ }) })
190
+ ]
191
+ })
192
+ })
193
+ })
194
+ })]
195
+ }) });
196
+ });
197
+ Modal.displayName = "Modal";
57
198
  //#endregion
58
- export { Modal as default };
199
+ export { ModalSize, Modal as default };
@@ -0,0 +1,65 @@
1
+ import { type Icon as PhosphorIcon } from "@phosphor-icons/react";
2
+ import { type AriaAttributes, type CSSProperties, type ElementType } from "react";
3
+ /** Canonical rungs, subset; only the text step applies (a crumb has no control height). */
4
+ export declare enum BreadcrumbsSize {
5
+ /** body_sm crumbs (12 / 16), 12px icons. Topbars and dense headers. */
6
+ SMALL = "SMALL",
7
+ /** body_md crumbs (13 / 16), 14px icons. The default. */
8
+ MEDIUM = "MEDIUM"
9
+ }
10
+ /** The mark drawn between crumbs. */
11
+ export declare enum BreadcrumbsSeparator {
12
+ /** A "/" in tertiary text. The default. */
13
+ SLASH = "SLASH",
14
+ /** A `CaretRightIcon` in the tertiary icon color. */
15
+ CARET = "CARET"
16
+ }
17
+ /** One crumb. */
18
+ export interface BreadcrumbItem {
19
+ /** Crumb text (a workspace, project or page name). Truncates when the trail is too wide. */
20
+ label: string;
21
+ /** Destination. Without it, a non-current crumb is plain text (a level with no page of its own). Ignored on the last item. */
22
+ href?: string;
23
+ /** Phosphor icon component before the label (`FolderIcon`, not `<FolderIcon />`). */
24
+ icon?: PhosphorIcon;
25
+ }
26
+ export interface BreadcrumbsProps extends AriaAttributes {
27
+ /** The trail from the top level down. The last item is the current page. */
28
+ items: BreadcrumbItem[];
29
+ /**
30
+ * The mark between crumbs: a slash or a right caret.
31
+ * @default BreadcrumbsSeparator.SLASH
32
+ */
33
+ separator?: BreadcrumbsSeparator;
34
+ /**
35
+ * Most crumbs shown before the middle collapses into a "…" menu: the first crumb, "…", then the last `maxItems − 2`. Values below 3 count as 3; `Infinity` never collapses.
36
+ * @default 4
37
+ */
38
+ maxItems?: number;
39
+ /**
40
+ * Text step: `SMALL` is `body_sm`, `MEDIUM` is `body_md`.
41
+ * @default BreadcrumbsSize.MEDIUM
42
+ */
43
+ size?: BreadcrumbsSize;
44
+ /**
45
+ * Router link component that renders every crumb link (and the overflow menu's links). It receives `href` and must forward its `ref`.
46
+ * @default "a"
47
+ */
48
+ as?: ElementType;
49
+ /**
50
+ * Accessible name of the `nav` landmark.
51
+ * @default Breadcrumb
52
+ */
53
+ ariaLabel?: string;
54
+ /** DOM id of the `nav`. */
55
+ id?: string;
56
+ /** Any `data-*` attribute, forwarded to the `nav`. */
57
+ [dataAttribute: `data-${string}`]: string | number | boolean | undefined;
58
+ /** Extra class on the `nav`. */
59
+ className?: string;
60
+ /** Inline style on the `nav`; only for setting CSS custom properties. */
61
+ style?: CSSProperties;
62
+ }
63
+ /** A trail of links up the app's hierarchy, ending at the current page. */
64
+ declare const Breadcrumbs: import("react").ForwardRefExoticComponent<BreadcrumbsProps & import("react").RefAttributes<HTMLElement>>;
65
+ export default Breadcrumbs;