@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
@@ -1,129 +1,263 @@
1
+ import Skeleton, { SkeletonVariant } from "../feedback/Skeleton.js";
1
2
  import { ChartKind, ChartLegendPlacement } from "./types.js";
2
- import "./constants.js";
3
- import { ChartPlotBox, ChartRoot, ChartSvg } from "./ChartPrimitives.js";
4
- import ChartCategoryTargets from "./ChartCategoryTargets.js";
5
- import ChartEmptyState from "./ChartEmptyState.js";
6
- import ChartLegend from "./ChartLegend.js";
7
- import ChartMarkTargets from "./ChartMarkTargets.js";
8
- import ChartTooltip from "./ChartTooltip.js";
9
- import { match } from "ts-pattern";
10
- import { useId, useMemo } from "react";
3
+ import { CHART_LEGEND_SIDE_GAP } from "./constants.js";
4
+ import EmptyState, { EmptyStateSize } from "../feedback/EmptyState.js";
5
+ import { ChartCategoryTargets } from "./ChartCategoryTargets.js";
6
+ import { ChartLegend } from "./ChartLegend.js";
7
+ import { ChartMarkTargets } from "./ChartMarkTargets.js";
8
+ import { ChartTooltip } from "./ChartTooltip.js";
9
+ /* empty css */
10
+ import { styled } from "@linaria/react";
11
+ import { useCallback, useMemo, useState } from "react";
11
12
  import { jsx, jsxs } from "react/jsx-runtime";
13
+ import { cx } from "@linaria/core";
12
14
  //#region src/charts/ChartFrame.tsx
13
- var ChartFrame = ({ containerRef, dimensions, fillWidth, fillHeight, interaction, kind, categoryCount, ariaLabel, ariaDescription, axes, children, plotOverlay, noTooltip = false, buildCategoryTooltip, tooltipRenderer, tooltipMaxItems, categoryTargets, markTargets, categoryTargetsTransform, onCategorySelect, onMarkSelect, anchorHalfWidth, placeAwayFromX, verticalAlign, isEmpty, isLoading = false, contentWhenEmpty, showLegend = false, legendItems, legendMaxItems, legendPlacement = ChartLegendPlacement.BOTTOM, legendInset }) => {
14
- const { width, height, margin, isMeasured, reservedHeight, reservedAspectRatio } = dimensions;
15
- const generatedId = useId();
16
- const descriptionId = ariaDescription ? `${generatedId}-desc` : void 0;
17
- /**
18
- * Default accessible name, phrased here so the three charts cannot drift.
19
- *
20
- * Both counts describe what is *on screen*: `legendItems` rather than the
21
- * `series` record, because a stacked bar's legend names its components, not
22
- * its metrics — counting the record would announce "1 series" for a chart
23
- * showing three. The two charts previously counted different things for the
24
- * same situation, which is the drift this removes.
25
- */
26
- const resolvedAriaLabel = ariaLabel ?? match(kind).with(ChartKind.PIE, () => `Pie chart with ${categoryCount} slices`).with(ChartKind.BAR, () => `Bar chart with ${categoryCount} categories and ${legendItems.length} series`).with(ChartKind.LINE, () => `Line chart with ${categoryCount} categories and ${legendItems.length} series`).exhaustive();
15
+ /**
16
+ * @internal The shell every chart renders into: the root (sizing, legend placement, passthrough),
17
+ * the measured plot box (one tab stop when interactive), the SVG and its inset translate, axes,
18
+ * marks, hit targets, the in-chart tooltip, the empty and loading overlays, the live region and
19
+ * the legend. It knows nothing about scales or geometry: axes and marks arrive as nodes, and every
20
+ * coordinate handed to it is in plot space (the frame adds the insets once).
21
+ *
22
+ * Sizing: the root fills its parent (`width` / `height: 100%`); against a parent of indefinite
23
+ * height the percentage computes to `auto` and `aspect-ratio: var(--gx-chart-aspect-ratio)`
24
+ * applies, so a chart never needs a size prop and never collapses to 0×0.
25
+ */
26
+ var Root = /*#__PURE__*/ styled("div")({
27
+ name: "Root",
28
+ class: "gx-ChartFrame-rd05unv",
29
+ propsAsIs: false
30
+ });
31
+ /** @internal Legend placement → root layout. */
32
+ var CHART_LEGEND_PLACEMENT_TO_CSS_MAP = {
33
+ [ChartLegendPlacement.BOTTOM]: "gx-ChartFrame-ChartLegendPlacement_BOTTOM-c1m9ui7b",
34
+ [ChartLegendPlacement.RIGHT]: "gx-ChartFrame-ChartLegendPlacement_RIGHT-cq532vv"
35
+ };
36
+ /** The measured element; anchors the SVG, overlays and tooltip. */
37
+ var PlotBox = /*#__PURE__*/ styled("div")({
38
+ name: "PlotBox",
39
+ class: "gx-ChartFrame-PlotBox-pl7aabu",
40
+ propsAsIs: false
41
+ });
42
+ /** The plot box as one tab stop: the focus ring draws around the plot, not the whole chart. */
43
+ var PLOT_INTERACTIVE_CSS = "gx-ChartFrame-PLOT_INTERACTIVE_CSS-p27fgao";
44
+ var ChartSvg = /*#__PURE__*/ styled("svg")({
45
+ name: "ChartSvg",
46
+ class: "gx-ChartFrame-ChartSvg-c1n7y3iq",
47
+ propsAsIs: false
48
+ });
49
+ /** The empty-state overlay: over the plot box only, so the axes keep their size. */
50
+ var Overlay = /*#__PURE__*/ styled("div")({
51
+ name: "Overlay",
52
+ class: "gx-ChartFrame-Overlay-o1itt7vl",
53
+ propsAsIs: false
54
+ });
55
+ /** A standalone `Skeleton RECT` that takes the whole plot box. */
56
+ var LOADING_SKELETON_CSS = "gx-ChartFrame-LOADING_SKELETON_CSS-l1oi7u1q";
57
+ var LiveRegion = /*#__PURE__*/ styled("div")({
58
+ name: "LiveRegion",
59
+ class: "gx-ChartFrame-LiveRegion-l1jrxj0u",
60
+ propsAsIs: false
61
+ });
62
+ /** The default accessible name, phrased once so the charts cannot drift. */
63
+ function deriveAriaLabel(kind, categories, series) {
64
+ switch (kind) {
65
+ case ChartKind.LINE: return `Line chart, ${categories} categories, ${series} series`;
66
+ case ChartKind.AREA: return `Area chart, ${categories} categories, ${series} series`;
67
+ case ChartKind.BAR: return `Bar chart, ${categories} categories, ${series} series`;
68
+ case ChartKind.PIE: return `Pie chart, ${categories} slices`;
69
+ case ChartKind.HEATMAP: return `Heatmap, ${categories} cells`;
70
+ }
71
+ }
72
+ /** The live-region sentence for a category: "Q2. Revenue 1,200. Cost 800." */
73
+ function describeTooltip(model) {
74
+ if (model === null) return "";
75
+ if (model.rows.length === 0) return `${model.label}. No data.`;
76
+ const rows = model.rows.map((row) => `${row.label} ${row.value === null ? "no data" : row.formattedValue}.`);
77
+ return `${model.label}. ${rows.join(" ")}`;
78
+ }
79
+ var NAVIGATION_KEYS = new Set([
80
+ "ArrowRight",
81
+ "ArrowLeft",
82
+ "ArrowUp",
83
+ "ArrowDown",
84
+ "Home",
85
+ "End"
86
+ ]);
87
+ /** @internal The chart shell. */
88
+ function ChartFrame({ rootRef, plotRef, id, className, style, rest, dimensions, interaction, kind, categoryCount, ariaLabel, aspectRatio, axes, children, plotOverlay, plotClassName, describeCategory, hasTooltip, buildCategoryTooltip, renderTooltip, categoryTargets, markTargets, targetsTransform, onCategorySelect, onMarkSelect, anchorHalfWidth, placeAwayFromX, verticalAlign, isEmpty, isLoading, placeholder, hasLegend, legendItems, legendPlacement, legendSwatch, tooltipSwatch, legend }) {
89
+ const { width, height, insets, isMeasured } = dimensions;
90
+ const [announcement, setAnnouncement] = useState("");
91
+ const { rootPassthrough, plotAria } = useMemo(() => {
92
+ const root = {};
93
+ const aria = {};
94
+ for (const [key, value] of Object.entries(rest)) if (key.startsWith("aria-")) aria[key] = value;
95
+ else root[key] = value;
96
+ return {
97
+ rootPassthrough: root,
98
+ plotAria: aria
99
+ };
100
+ }, [rest]);
101
+ const { "aria-label": passedAriaLabel, ...plotAriaRest } = plotAria;
102
+ const resolvedAriaLabel = ariaLabel ?? (typeof passedAriaLabel === "string" ? passedAriaLabel : void 0) ?? deriveAriaLabel(kind, categoryCount, legendItems.length);
103
+ const isInteractive = (hasTooltip || onCategorySelect !== void 0) && !isLoading && !isEmpty;
27
104
  const tooltipModel = useMemo(() => {
28
- if (noTooltip || !interaction.showTooltip || interaction.activeIndex === null) return null;
105
+ if (!hasTooltip || isLoading || !interaction.showTooltip || interaction.activeIndex === null) return null;
29
106
  const model = buildCategoryTooltip(interaction.activeIndex);
30
- if (model === null) return null;
31
- if (model.rows.length === 0 && tooltipRenderer !== void 0) return null;
32
- return model;
107
+ if (model === null || model.rows.length === 0 && renderTooltip !== void 0) return null;
108
+ return {
109
+ ...model,
110
+ anchorX: model.anchorX + insets.left,
111
+ anchorY: model.anchorY + insets.top
112
+ };
33
113
  }, [
34
- noTooltip,
35
- buildCategoryTooltip,
36
- interaction.activeIndex,
114
+ hasTooltip,
115
+ isLoading,
37
116
  interaction.showTooltip,
38
- tooltipRenderer
39
- ]);
40
- /**
41
- * Plot space → container space, applied once, here.
42
- *
43
- * Memoized for correctness, not arithmetic cost. `ChartTooltip` retains the
44
- * last model by *identity* so it can keep its content while fading out, and
45
- * adjusts that state during render when the identity changes. A fresh object
46
- * on every parent render would therefore trigger an extra render pass on
47
- * every render — including every pointer move — without ever looping or
48
- * visibly breaking.
49
- */
50
- const positionedTooltip = useMemo(() => tooltipModel === null ? null : {
51
- ...tooltipModel,
52
- anchorX: tooltipModel.anchorX + margin.left,
53
- anchorY: tooltipModel.anchorY + margin.top
54
- }, [
55
- tooltipModel,
56
- margin.left,
57
- margin.top
117
+ interaction.activeIndex,
118
+ buildCategoryTooltip,
119
+ renderTooltip,
120
+ insets.left,
121
+ insets.top
58
122
  ]);
59
- const hasTargets = isMeasured && !noTooltip && !isLoading && !isEmpty && (categoryTargets?.length ?? 0) > 0;
60
- const legendRight = legendPlacement === ChartLegendPlacement.RIGHT;
61
- return /* @__PURE__ */ jsxs(ChartRoot, {
62
- $fillWidth: fillWidth,
63
- $fillHeight: fillHeight,
64
- $legendRight: legendRight,
65
- children: [/* @__PURE__ */ jsxs(ChartPlotBox, {
66
- ref: containerRef,
67
- $reservedHeight: reservedHeight,
68
- $reservedAspectRatio: reservedAspectRatio,
69
- $fillHeight: fillHeight,
70
- $legendRight: legendRight,
71
- $squareFromHeight: legendRight && fillWidth && reservedAspectRatio === void 0,
72
- children: [
73
- isMeasured && /* @__PURE__ */ jsxs(ChartSvg, {
74
- width,
75
- height,
76
- role: "img",
77
- "aria-label": resolvedAriaLabel,
78
- "aria-describedby": descriptionId,
79
- children: [ariaDescription && /* @__PURE__ */ jsx("desc", {
80
- id: descriptionId,
81
- children: ariaDescription
82
- }), /* @__PURE__ */ jsxs("g", {
83
- transform: `translate(${margin.left}, ${margin.top})`,
84
- children: [
85
- axes,
86
- /* @__PURE__ */ jsx("g", { children }),
87
- hasTargets && categoryTargets && /* @__PURE__ */ jsxs("g", {
88
- transform: categoryTargetsTransform,
89
- onMouseLeave: interaction.onCategoryLeave,
90
- children: [/* @__PURE__ */ jsx(ChartCategoryTargets, {
91
- targets: categoryTargets,
92
- interaction,
93
- onSelect: onCategorySelect
94
- }), onMarkSelect && markTargets && markTargets.length > 0 && /* @__PURE__ */ jsx(ChartMarkTargets, {
95
- targets: markTargets,
96
- interaction,
97
- onSelect: onMarkSelect
98
- })]
99
- })
100
- ]
101
- })]
102
- }),
103
- isMeasured && plotOverlay,
104
- isMeasured && !noTooltip && /* @__PURE__ */ jsx(ChartTooltip, {
105
- model: positionedTooltip,
106
- containerWidth: width,
107
- containerHeight: height,
108
- anchorHalfWidth,
109
- placeAwayFromX: placeAwayFromX === void 0 ? void 0 : placeAwayFromX + margin.left,
110
- verticalAlign,
111
- renderer: tooltipRenderer,
112
- maxItems: tooltipMaxItems
113
- }),
114
- isMeasured && isEmpty && !isLoading && /* @__PURE__ */ jsx(ChartEmptyState, { content: contentWhenEmpty })
115
- ]
116
- }), showLegend && /* @__PURE__ */ jsx(ChartLegend, {
117
- items: legendItems,
118
- inset: legendInset ?? (legendRight ? 16 : margin.left),
119
- vertical: legendRight,
120
- verticalExtent: legendRight ? height : void 0,
121
- maxItems: legendMaxItems,
122
- hoveredKey: interaction.hoveredSeriesKey,
123
- onItemEnter: interaction.onSeriesEnter,
124
- onItemLeave: interaction.onSeriesLeave
125
- })]
123
+ const announce = useCallback((index) => {
124
+ if (index === null) setAnnouncement("");
125
+ else if (describeCategory) setAnnouncement(describeCategory(index));
126
+ else setAnnouncement(describeTooltip(buildCategoryTooltip(index)));
127
+ }, [buildCategoryTooltip, describeCategory]);
128
+ const handleKeyDown = (event) => {
129
+ if (event.target !== event.currentTarget) return;
130
+ if (NAVIGATION_KEYS.has(event.key)) {
131
+ const next = interaction.onKeyboardMove(event.key);
132
+ if (next === null) return;
133
+ event.preventDefault();
134
+ announce(next);
135
+ return;
136
+ }
137
+ if (event.key === "Enter" || event.key === " ") {
138
+ if (event.key === " ") event.preventDefault();
139
+ if (onCategorySelect && interaction.activeIndex !== null) {
140
+ event.preventDefault();
141
+ onCategorySelect(interaction.activeIndex);
142
+ }
143
+ return;
144
+ }
145
+ if (event.key === "Escape" && interaction.activeIndex !== null) {
146
+ event.preventDefault();
147
+ event.stopPropagation();
148
+ interaction.onKeyboardClear();
149
+ setAnnouncement("");
150
+ }
151
+ };
152
+ const handleFocus = (event) => {
153
+ if (event.target !== event.currentTarget) return;
154
+ let isKeyboardFocus = true;
155
+ try {
156
+ isKeyboardFocus = event.currentTarget.matches(":focus-visible");
157
+ } catch {}
158
+ if (isKeyboardFocus) announce(interaction.onKeyboardFocus());
159
+ };
160
+ const handleBlur = (event) => {
161
+ if (event.target !== event.currentTarget) return;
162
+ interaction.onKeyboardBlur();
163
+ };
164
+ const plotA11yProps = isInteractive ? {
165
+ tabIndex: 0,
166
+ role: "group",
167
+ "aria-roledescription": "chart",
168
+ "aria-label": resolvedAriaLabel,
169
+ onKeyDown: handleKeyDown,
170
+ onFocus: handleFocus,
171
+ onBlur: handleBlur
172
+ } : {
173
+ role: "img",
174
+ "aria-label": resolvedAriaLabel
175
+ };
176
+ const isSkeleton = isLoading && isEmpty;
177
+ const hasTargets = isMeasured && isInteractive && categoryTargets.length > 0;
178
+ const rootStyle = {
179
+ "--gx-chart-aspect-ratio": aspectRatio,
180
+ ...style
181
+ };
182
+ return /* @__PURE__ */ jsxs(Root, {
183
+ ...rootPassthrough,
184
+ ref: rootRef,
185
+ id,
186
+ "aria-busy": isLoading || void 0,
187
+ className: cx(CHART_LEGEND_PLACEMENT_TO_CSS_MAP[legendPlacement], className),
188
+ style: rootStyle,
189
+ children: [
190
+ /* @__PURE__ */ jsxs(PlotBox, {
191
+ ...plotAriaRest,
192
+ ...plotA11yProps,
193
+ ref: plotRef,
194
+ className: cx(isInteractive && PLOT_INTERACTIVE_CSS, plotClassName),
195
+ children: [
196
+ isMeasured && !isSkeleton && /* @__PURE__ */ jsx(ChartSvg, {
197
+ "aria-hidden": "true",
198
+ width,
199
+ height,
200
+ children: /* @__PURE__ */ jsxs("g", {
201
+ transform: `translate(${insets.left}, ${insets.top})`,
202
+ children: [
203
+ axes,
204
+ /* @__PURE__ */ jsx("g", { children }),
205
+ hasTargets && /* @__PURE__ */ jsxs("g", {
206
+ transform: targetsTransform,
207
+ children: [/* @__PURE__ */ jsx(ChartCategoryTargets, {
208
+ targets: categoryTargets,
209
+ onEnter: interaction.onCategoryEnter,
210
+ onLeave: interaction.onCategoryLeave,
211
+ onSelect: onCategorySelect
212
+ }), onMarkSelect && markTargets && markTargets.length > 0 && /* @__PURE__ */ jsx(ChartMarkTargets, {
213
+ targets: markTargets,
214
+ onEnter: interaction.onCategoryEnter,
215
+ onLeave: interaction.onCategoryLeave,
216
+ onSelect: onMarkSelect
217
+ })]
218
+ })
219
+ ]
220
+ })
221
+ }),
222
+ isMeasured && !isSkeleton && plotOverlay,
223
+ isMeasured && isEmpty && !isLoading && /* @__PURE__ */ jsx(Overlay, { children: /* @__PURE__ */ jsx(EmptyState, {
224
+ size: EmptyStateSize.SMALL,
225
+ header: placeholder,
226
+ role: "status"
227
+ }) }),
228
+ isSkeleton && /* @__PURE__ */ jsx(Skeleton, {
229
+ variant: SkeletonVariant.RECT,
230
+ className: LOADING_SKELETON_CSS
231
+ }),
232
+ isMeasured && hasTooltip && !isSkeleton && /* @__PURE__ */ jsx(ChartTooltip, {
233
+ model: tooltipModel,
234
+ containerWidth: width,
235
+ containerHeight: height,
236
+ anchorHalfWidth,
237
+ placeAwayFromX: placeAwayFromX === void 0 ? void 0 : placeAwayFromX + insets.left,
238
+ verticalAlign,
239
+ renderTooltip,
240
+ swatch: tooltipSwatch
241
+ }),
242
+ /* @__PURE__ */ jsx(LiveRegion, {
243
+ "aria-live": "polite",
244
+ children: announcement
245
+ })
246
+ ]
247
+ }),
248
+ hasLegend && !isSkeleton && legend,
249
+ hasLegend && !isSkeleton && legend === void 0 && /* @__PURE__ */ jsx(ChartLegend, {
250
+ items: legendItems,
251
+ placement: legendPlacement,
252
+ swatch: legendSwatch,
253
+ inset: legendPlacement === ChartLegendPlacement.RIGHT ? CHART_LEGEND_SIDE_GAP : insets.left,
254
+ extent: legendPlacement === ChartLegendPlacement.RIGHT ? height : 0,
255
+ hoveredKey: interaction.hoveredSeriesKey,
256
+ onItemEnter: interaction.onSeriesEnter,
257
+ onItemLeave: interaction.onSeriesLeave
258
+ })
259
+ ]
126
260
  });
127
- };
261
+ }
128
262
  //#endregion
129
- export { ChartFrame as default };
263
+ export { ChartFrame };
@@ -1,57 +1,46 @@
1
- import { type PropsWithChildren } from "react";
2
1
  /**
3
- * The category one chart's pointer is currently over, broadcast to its
4
- * siblings.
2
+ * ChartGroupProvider links the cartesian charts inside it: hovering or arrowing to a category in
3
+ * one chart shows the same category in every sibling, matched by raw category label. It renders
4
+ * no DOM. Only `LineChart`, `AreaChart` and `BarChart` join; each syncs with its nearest provider,
5
+ * so a nested provider isolates a subset. Series (legend) hover stays local, and `PieChart` never
6
+ * syncs (it has no category axis).
7
+ *
8
+ * Plain context state is the right transport: entries change once per category crossed, not per
9
+ * pointer move, so a sweep across a chart re-renders the group a handful of times.
5
10
  */
11
+ import { type ReactNode } from "react";
12
+ /** @internal The category one chart is engaging (hover or keyboard), broadcast to its siblings. */
6
13
  export interface ChartGroupSyncEntry {
7
- /** `useId` of the chart whose pointer produced this entry. */
14
+ /** `useId` of the chart that produced this entry. */
8
15
  sourceId: string;
9
- /**
10
- * The raw category label under the pointer — never `labelFormatter` output,
11
- * so two charts formatting the same label differently still match.
12
- */
16
+ /** The raw category label, never `labelFormatter` output, so differently formatted charts still match. */
13
17
  categoryKey: string;
14
18
  }
19
+ /** @internal What the provider shares with its charts. */
15
20
  export interface ChartGroupContextValue {
21
+ /** The engaged category, or `null`. */
16
22
  activeEntry: ChartGroupSyncEntry | null;
23
+ /** Publishes an entry (deduplicated by value). */
17
24
  setActive: (entry: ChartGroupSyncEntry) => void;
18
- /** Clears only if the current entry belongs to `sourceId`. */
25
+ /** Clears the entry only if it belongs to `sourceId`. */
19
26
  clearActive: (sourceId: string) => void;
20
27
  /** Followers open their own tooltip at the synced category. */
21
- sharedTooltip: boolean;
28
+ shouldShareTooltip: boolean;
22
29
  }
30
+ /** @internal Read by the chart modules; apps never read it. */
23
31
  export declare const ChartGroupContext: import("react").Context<ChartGroupContextValue | null>;
24
- /**
25
- * Shares the hovered category between the cartesian charts inside it.
26
- *
27
- * Hovering a category in one chart shows the same category emphasized in every
28
- * sibling — matched by raw category label, so charts whose category sets only
29
- * partially overlap simply show nothing for the labels they lack. By default
30
- * the tooltip stays local to the chart under the pointer; siblings get the
31
- * quiet emphasis only (LineChart its cursor line and dots, BarChart its band
32
- * tint and gentle dim). `sharedTooltip` opts every synced chart into opening its
33
- * own tooltip at the shared category — the tooltip anchors to the category's
34
- * geometry, not the pointer, so a follower's opens exactly where a local
35
- * hover's would.
36
- *
37
- * Scope, deliberately narrow:
38
- * - Only the category axis syncs. Legend (series) hover stays local.
39
- * - PieChart never participates — it has no category axis.
40
- * - There is no per-chart opt-out prop. The opt-out is rendering the chart
41
- * outside the provider, and nesting a second provider isolates a subset —
42
- * charts sync with their nearest ancestor.
43
- *
44
- * Renders no DOM and holds no layout opinion — unlike `OverlayProvider` it is
45
- * not a page-root singleton, and several can coexist on a page.
46
- *
47
- * Plain context state is the right transport here: entries change at category
48
- * granularity (once per hit band crossed, not per mousemove), so a sweep
49
- * across a chart re-renders the group a handful of times. No subscription or
50
- * selector machinery is warranted.
51
- */
52
32
  export interface ChartGroupProviderProps {
53
- /** Every synced chart opens its own tooltip at the shared category. @default false */
54
- sharedTooltip?: boolean;
33
+ /**
34
+ * Every synced chart opens its own tooltip at the shared category. Off: siblings show only the quiet emphasis (cursor, band).
35
+ * @default false
36
+ */
37
+ shouldShareTooltip?: boolean;
38
+ /** The charts (and any layout around them). Only `LineChart`, `AreaChart` and `BarChart` join the sync; they sync with their nearest provider. */
39
+ children?: ReactNode;
40
+ }
41
+ /** Syncs the hovered or focused category across the cartesian charts inside it. */
42
+ declare function ChartGroupProvider({ shouldShareTooltip, children }: ChartGroupProviderProps): import("react").JSX.Element;
43
+ declare namespace ChartGroupProvider {
44
+ var displayName: string;
55
45
  }
56
- export declare const ChartGroupProvider: ({ sharedTooltip, children, }: PropsWithChildren<ChartGroupProviderProps>) => import("react").JSX.Element;
57
46
  export default ChartGroupProvider;
@@ -1,8 +1,20 @@
1
1
  import { createContext, useCallback, useMemo, useState } from "react";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  //#region src/charts/ChartGroupProvider.tsx
4
+ /**
5
+ * ChartGroupProvider links the cartesian charts inside it: hovering or arrowing to a category in
6
+ * one chart shows the same category in every sibling, matched by raw category label. It renders
7
+ * no DOM. Only `LineChart`, `AreaChart` and `BarChart` join; each syncs with its nearest provider,
8
+ * so a nested provider isolates a subset. Series (legend) hover stays local, and `PieChart` never
9
+ * syncs (it has no category axis).
10
+ *
11
+ * Plain context state is the right transport: entries change once per category crossed, not per
12
+ * pointer move, so a sweep across a chart re-renders the group a handful of times.
13
+ */
14
+ /** @internal Read by the chart modules; apps never read it. */
4
15
  var ChartGroupContext = createContext(null);
5
- var ChartGroupProvider = ({ sharedTooltip = false, children }) => {
16
+ /** Syncs the hovered or focused category across the cartesian charts inside it. */
17
+ function ChartGroupProvider({ shouldShareTooltip = false, children }) {
6
18
  const [activeEntry, setActiveEntry] = useState(null);
7
19
  const setActive = useCallback((entry) => {
8
20
  setActiveEntry((prev) => prev !== null && prev.sourceId === entry.sourceId && prev.categoryKey === entry.categoryKey ? prev : entry);
@@ -10,21 +22,22 @@ var ChartGroupProvider = ({ sharedTooltip = false, children }) => {
10
22
  const clearActive = useCallback((sourceId) => {
11
23
  setActiveEntry((prev) => prev !== null && prev.sourceId === sourceId ? null : prev);
12
24
  }, []);
13
- const contextValue = useMemo(() => ({
25
+ const value = useMemo(() => ({
14
26
  activeEntry,
15
27
  setActive,
16
28
  clearActive,
17
- sharedTooltip
29
+ shouldShareTooltip
18
30
  }), [
19
31
  activeEntry,
20
32
  setActive,
21
33
  clearActive,
22
- sharedTooltip
34
+ shouldShareTooltip
23
35
  ]);
24
36
  return /* @__PURE__ */ jsx(ChartGroupContext.Provider, {
25
- value: contextValue,
37
+ value,
26
38
  children
27
39
  });
28
- };
40
+ }
41
+ ChartGroupProvider.displayName = "ChartGroupProvider";
29
42
  //#endregion
30
- export { ChartGroupContext, ChartGroupProvider, ChartGroupProvider as default };
43
+ export { ChartGroupContext, ChartGroupProvider as default };
@@ -1,51 +1,30 @@
1
- import type { ChartLegendItem } from "./types";
2
- interface ChartLegendProps {
1
+ import { type ReactNode } from "react";
2
+ import { type ChartLegendItem, ChartLegendPlacement } from "./types.js";
3
+ /** @internal Swatch shape: a dot for line series, a square for filled series. */
4
+ export declare enum ChartLegendSwatch {
5
+ /** `Circle SMALL`: line series. */
6
+ CIRCLE = "CIRCLE",
7
+ /** `Square SMALL`: area, bar, arc and heatmap series. */
8
+ SQUARE = "SQUARE"
9
+ }
10
+ /** @internal Props of `ChartLegend`. */
11
+ export interface ChartLegendProps {
12
+ /** Entries in series order. */
3
13
  items: ChartLegendItem[];
4
- /** Left padding aligning the legend with the plot, not the axis gutter. */
14
+ /** Line (BOTTOM) or column (RIGHT). */
15
+ placement: ChartLegendPlacement;
16
+ /** Swatch shape. */
17
+ swatch: ChartLegendSwatch;
18
+ /** BOTTOM: left padding that aligns the legend with the plot. */
5
19
  inset: number;
6
- /** Series key currently hovered anywhere in the chart. */
7
- hoveredKey?: string | null;
8
- /** Stack entries in a column — the side-placed layout. */
9
- vertical?: boolean;
10
- /**
11
- * Plot box height in px — the vertical legend's fit extent. Height needs to
12
- * arrive as a number because, unlike width, a percentage of the root's
13
- * auto height is indefinite and computes to nothing. Absent (or 0, the
14
- * unmeasured plot) there is no height constraint and every entry renders.
15
- */
16
- verticalExtent?: number;
17
- /**
18
- * Stricter cap on inline entries, on top of the automatic fit. The legend
19
- * already collapses whatever won't fit inside the plot's extent — width for
20
- * the horizontal layout, height for the side-placed one — behind the
21
- * "+N more" trigger; this only lowers that number further.
22
- */
23
- maxItems?: number;
24
- /**
25
- * Supplying these makes the legend interactive. Omit them and it renders as
26
- * inert text, with no button semantics for a screen reader to announce.
27
- */
28
- onItemEnter?: (key: string) => void;
29
- onItemLeave?: () => void;
20
+ /** RIGHT: the plot height the column fits into (0 = unconstrained). */
21
+ extent?: number;
22
+ /** The series key being isolated. */
23
+ hoveredKey: string | null;
24
+ /** Pointer entered an entry. */
25
+ onItemEnter: (key: string) => void;
26
+ /** Pointer left an entry. */
27
+ onItemLeave: () => void;
30
28
  }
31
- /**
32
- * Legend for the chart components.
33
- *
34
- * Hovering or focusing an entry isolates its series; leaving releases it.
35
- *
36
- * The legend never outgrows the plot. A horizontal legend holds exactly one
37
- * line of the plot's width; a side-placed legend holds one column of the
38
- * plot's height. Entries that would not fit collapse behind a "+N more"
39
- * trigger whose tooltip lists them — still hoverable, so a collapsed series
40
- * isolates exactly like a visible one. The fit is measured, not guessed: a
41
- * hidden copy of every entry is laid out unconstrained, and the visible count
42
- * is however many real sizes fit beside the trigger.
43
- *
44
- * Deliberately *not* a visibility toggle: hiding a series would have to rescale
45
- * the value axis to stay honest — otherwise the remaining bars sit mysteriously
46
- * short — and that belongs with the geometry layer rather than bolted on here.
47
- * Isolation only changes opacity, so the domain is untouched and the numbers
48
- * keep meaning what they did.
49
- */
50
- declare const ChartLegend: ({ items, inset, hoveredKey, vertical, verticalExtent, maxItems, onItemEnter, onItemLeave, }: ChartLegendProps) => import("react").JSX.Element | null;
51
- export default ChartLegend;
29
+ /** @internal The chart legend. */
30
+ export declare function ChartLegend({ items, placement, swatch, inset, extent, hoveredKey, onItemEnter, onItemLeave, }: ChartLegendProps): ReactNode;