@galaxy-io/dls 1.6.1 → 2.0.1

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 (540) 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 +160 -124
  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 +33 -20
  46. package/dist/charts/ChartFrame.d.ts +71 -116
  47. package/dist/charts/ChartFrame.js +306 -97
  48. package/dist/charts/ChartGroupProvider.d.ts +30 -41
  49. package/dist/charts/ChartGroupProvider.js +20 -7
  50. package/dist/charts/ChartLegend.d.ts +37 -48
  51. package/dist/charts/ChartLegend.js +243 -125
  52. package/dist/charts/ChartMarkTargets.d.ts +12 -28
  53. package/dist/charts/ChartMarkTargets.js +34 -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 +307 -0
  60. package/dist/charts/LineChart.d.ts +54 -47
  61. package/dist/charts/LineChart.js +174 -121
  62. package/dist/charts/PieChart.d.ts +32 -53
  63. package/dist/charts/PieChart.js +159 -136
  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/chartSelection.d.ts +15 -0
  79. package/dist/charts/chartSelection.js +22 -0
  80. package/dist/charts/constants.d.ts +100 -256
  81. package/dist/charts/constants.js +109 -275
  82. package/dist/charts/heatmapGeometry.d.ts +95 -0
  83. package/dist/charts/heatmapGeometry.js +155 -0
  84. package/dist/charts/lineChartGeometry.d.ts +108 -58
  85. package/dist/charts/lineChartGeometry.js +120 -78
  86. package/dist/charts/pieChartGeometry.d.ts +66 -40
  87. package/dist/charts/pieChartGeometry.js +68 -38
  88. package/dist/charts/types.d.ts +206 -466
  89. package/dist/charts/types.js +55 -144
  90. package/dist/charts/useCartesianChartLayout.d.ts +28 -59
  91. package/dist/charts/useCartesianChartLayout.js +47 -32
  92. package/dist/charts/useChartDimensions.d.ts +19 -40
  93. package/dist/charts/useChartDimensions.js +40 -56
  94. package/dist/charts/useChartFormatters.d.ts +6 -15
  95. package/dist/charts/useChartFormatters.js +4 -9
  96. package/dist/charts/useChartInteraction.d.ts +69 -116
  97. package/dist/charts/useChartInteraction.js +148 -78
  98. package/dist/charts/useChartTooltipPosition.d.ts +29 -39
  99. package/dist/charts/useChartTooltipPosition.js +14 -5
  100. package/dist/charts/useSeriesColorResolver.d.ts +11 -33
  101. package/dist/charts/useSeriesColorResolver.js +19 -12
  102. package/dist/chips/Chip.d.ts +155 -44
  103. package/dist/chips/Chip.js +329 -155
  104. package/dist/chips/ChipGroup.d.ts +53 -0
  105. package/dist/chips/ChipGroup.js +98 -0
  106. package/dist/drawer/Drawer.d.ts +83 -17
  107. package/dist/drawer/Drawer.js +399 -65
  108. package/dist/dropdown/Dropdown.d.ts +80 -63
  109. package/dist/dropdown/Dropdown.js +127 -129
  110. package/dist/editor/CodeEditor.d.ts +119 -40
  111. package/dist/editor/CodeEditor.js +490 -400
  112. package/dist/editor/CodeEditorReactWidget.d.ts +20 -17
  113. package/dist/editor/CodeEditorReactWidget.js +28 -21
  114. package/dist/feedback/Alert.d.ts +49 -0
  115. package/dist/feedback/Alert.js +172 -0
  116. package/dist/feedback/EmptyState.d.ts +39 -0
  117. package/dist/feedback/EmptyState.js +109 -0
  118. package/dist/feedback/ProgressBar.d.ts +125 -0
  119. package/dist/feedback/ProgressBar.js +183 -0
  120. package/dist/feedback/ProgressCircle.d.ts +99 -0
  121. package/dist/feedback/ProgressCircle.js +187 -0
  122. package/dist/feedback/Skeleton.d.ts +69 -0
  123. package/dist/feedback/Skeleton.js +130 -0
  124. package/dist/feedback/Spinner.d.ts +63 -0
  125. package/dist/feedback/Spinner.js +141 -0
  126. package/dist/fonts.css +70 -0
  127. package/dist/hooks/internal/useIsClient.d.ts +2 -0
  128. package/dist/hooks/internal/useIsClient.js +14 -0
  129. package/dist/hooks/useClipboard.d.ts +19 -0
  130. package/dist/hooks/useClipboard.js +45 -0
  131. package/dist/hooks/useControlledOpenState.d.ts +21 -0
  132. package/dist/hooks/useControlledOpenState.js +19 -0
  133. package/dist/hooks/useControlledState.d.ts +19 -0
  134. package/dist/hooks/useControlledState.js +22 -0
  135. package/dist/hooks/useDebouncedValue.d.ts +14 -0
  136. package/dist/hooks/useDebouncedValue.js +33 -0
  137. package/dist/hooks/useDisclosure.d.ts +26 -0
  138. package/dist/hooks/useDisclosure.js +36 -0
  139. package/dist/hooks/useDismiss.d.ts +23 -27
  140. package/dist/hooks/useDismiss.js +39 -27
  141. package/dist/hooks/useElementClientSize.d.ts +10 -10
  142. package/dist/hooks/useElementClientSize.js +8 -11
  143. package/dist/hooks/useElementWidth.d.ts +6 -13
  144. package/dist/hooks/useElementWidth.js +6 -14
  145. package/dist/hooks/useField.d.ts +47 -0
  146. package/dist/hooks/useField.js +40 -0
  147. package/dist/hooks/useHotkey.d.ts +77 -0
  148. package/dist/hooks/useHotkey.js +246 -0
  149. package/dist/hooks/useIsMac.d.ts +12 -0
  150. package/dist/hooks/useIsMac.js +27 -0
  151. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +17 -0
  152. package/dist/hooks/useIsomorphicLayoutEffect.js +20 -0
  153. package/dist/hooks/useLocalStorage.d.ts +28 -0
  154. package/dist/hooks/useLocalStorage.js +145 -0
  155. package/dist/hooks/useMediaQuery.d.ts +11 -0
  156. package/dist/hooks/useMediaQuery.js +23 -0
  157. package/dist/hooks/usePrefersReducedMotion.d.ts +12 -0
  158. package/dist/hooks/usePrefersReducedMotion.js +25 -0
  159. package/dist/hooks/useResize.d.ts +42 -62
  160. package/dist/hooks/useResize.js +43 -31
  161. package/dist/icons/Icon.d.ts +64 -37
  162. package/dist/icons/Icon.js +96 -37
  163. package/dist/icons/internal/IconSlot.d.ts +10 -0
  164. package/dist/icons/internal/IconSlot.js +32 -0
  165. package/dist/inputs/CheckboxGroup.d.ts +115 -0
  166. package/dist/inputs/CheckboxGroup.js +183 -0
  167. package/dist/inputs/CheckboxInput.d.ts +98 -28
  168. package/dist/inputs/CheckboxInput.js +218 -88
  169. package/dist/inputs/ColorInput.d.ts +115 -29
  170. package/dist/inputs/ColorInput.js +748 -326
  171. package/dist/inputs/CopyInput.d.ts +49 -20
  172. package/dist/inputs/CopyInput.js +57 -49
  173. package/dist/inputs/CronInput.d.ts +94 -0
  174. package/dist/inputs/CronInput.js +618 -0
  175. package/dist/inputs/DateInput.d.ts +175 -28
  176. package/dist/inputs/DateInput.js +1109 -451
  177. package/dist/inputs/DurationInput.d.ts +101 -0
  178. package/dist/inputs/DurationInput.js +441 -0
  179. package/dist/inputs/Field.d.ts +75 -0
  180. package/dist/inputs/Field.js +247 -0
  181. package/dist/inputs/Fieldset.d.ts +53 -0
  182. package/dist/inputs/Fieldset.js +149 -0
  183. package/dist/inputs/FileInput.d.ts +110 -0
  184. package/dist/inputs/FileInput.js +476 -0
  185. package/dist/inputs/Input.d.ts +148 -187
  186. package/dist/inputs/Input.js +339 -259
  187. package/dist/inputs/KeyValueInput.d.ts +120 -0
  188. package/dist/inputs/KeyValueInput.js +383 -0
  189. package/dist/inputs/MultiSelectInput.d.ts +165 -54
  190. package/dist/inputs/MultiSelectInput.js +175 -559
  191. package/dist/inputs/NumberInput.d.ts +65 -9
  192. package/dist/inputs/NumberInput.js +197 -40
  193. package/dist/inputs/PasswordInput.d.ts +17 -12
  194. package/dist/inputs/PasswordInput.js +33 -33
  195. package/dist/inputs/PinInput.d.ts +117 -0
  196. package/dist/inputs/PinInput.js +364 -0
  197. package/dist/inputs/RadioGroup.d.ts +115 -0
  198. package/dist/inputs/RadioGroup.js +179 -0
  199. package/dist/inputs/RadioInput.d.ts +87 -24
  200. package/dist/inputs/RadioInput.js +182 -95
  201. package/dist/inputs/SearchInput.d.ts +66 -0
  202. package/dist/inputs/SearchInput.js +156 -0
  203. package/dist/inputs/SelectInput.d.ts +195 -55
  204. package/dist/inputs/SelectInput.js +1308 -446
  205. package/dist/inputs/SliderInput.d.ts +150 -30
  206. package/dist/inputs/SliderInput.js +441 -186
  207. package/dist/inputs/SwitchInput.d.ts +109 -0
  208. package/dist/inputs/SwitchInput.js +248 -0
  209. package/dist/inputs/TagInput.d.ts +117 -0
  210. package/dist/inputs/TagInput.js +408 -0
  211. package/dist/inputs/TextAreaInput.d.ts +146 -44
  212. package/dist/inputs/TextAreaInput.js +298 -198
  213. package/dist/inputs/TextInput.d.ts +4 -13
  214. package/dist/inputs/TextInput.js +13 -48
  215. package/dist/inputs/ToggleInput.d.ts +120 -22
  216. package/dist/inputs/ToggleInput.js +262 -116
  217. package/dist/inputs/internal/bareField.d.ts +18 -0
  218. package/dist/inputs/internal/bareField.js +38 -0
  219. package/dist/inputs/internal/devWarn.d.ts +7 -0
  220. package/dist/inputs/internal/devWarn.js +30 -0
  221. package/dist/inputs/internal/fieldFrame.d.ts +34 -0
  222. package/dist/inputs/internal/fieldFrame.js +64 -0
  223. package/dist/inputs/internal/fieldWiring.d.ts +50 -0
  224. package/dist/inputs/internal/fieldWiring.js +38 -0
  225. package/dist/inputs/internal/innerButton.d.ts +2 -0
  226. package/dist/inputs/internal/innerButton.js +24 -0
  227. package/dist/inputs/internal/ownField.d.ts +45 -0
  228. package/dist/inputs/internal/ownField.js +58 -0
  229. package/dist/inputs/internal/predicates.d.ts +9 -0
  230. package/dist/inputs/internal/predicates.js +11 -0
  231. package/dist/inputs/internal/useComboboxPopover.d.ts +46 -0
  232. package/dist/inputs/internal/useComboboxPopover.js +92 -0
  233. package/dist/json/JsonViewer.d.ts +62 -0
  234. package/dist/json/JsonViewer.js +483 -0
  235. package/dist/layout/Box.d.ts +87 -0
  236. package/dist/layout/Box.js +109 -0
  237. package/dist/layout/Divider.d.ts +25 -0
  238. package/dist/layout/Divider.js +70 -0
  239. package/dist/layout/Flex.d.ts +139 -0
  240. package/dist/layout/Flex.js +165 -0
  241. package/dist/layout/FlexItem.d.ts +72 -0
  242. package/dist/layout/FlexItem.js +84 -0
  243. package/dist/layout/Grid.d.ts +140 -0
  244. package/dist/layout/Grid.js +178 -0
  245. package/dist/layout/Portal.d.ts +29 -0
  246. package/dist/layout/Portal.js +27 -0
  247. package/dist/layout/ResizablePanels.d.ts +88 -0
  248. package/dist/layout/ResizablePanels.js +198 -0
  249. package/dist/layout/ResizeHandle.d.ts +48 -0
  250. package/dist/layout/ResizeHandle.js +143 -0
  251. package/dist/layout/ScrollArea.d.ts +30 -0
  252. package/dist/layout/ScrollArea.js +138 -0
  253. package/dist/links/Link.d.ts +101 -1
  254. package/dist/links/Link.js +166 -4
  255. package/dist/lists/BulletedList.d.ts +25 -7
  256. package/dist/lists/BulletedList.js +72 -27
  257. package/dist/lists/DescriptionList.d.ts +91 -0
  258. package/dist/lists/DescriptionList.js +147 -0
  259. package/dist/menu/ContextMenu.d.ts +64 -0
  260. package/dist/menu/ContextMenu.js +34 -0
  261. package/dist/menu/Menu.d.ts +280 -0
  262. package/dist/menu/Menu.js +1003 -0
  263. package/dist/modal/ConfirmDialog.d.ts +55 -0
  264. package/dist/modal/ConfirmDialog.js +151 -0
  265. package/dist/modal/Modal.d.ts +64 -14
  266. package/dist/modal/Modal.js +189 -48
  267. package/dist/navigation/Breadcrumbs.d.ts +65 -0
  268. package/dist/navigation/Breadcrumbs.js +243 -0
  269. package/dist/navigation/CommandPalette.d.ts +83 -0
  270. package/dist/navigation/CommandPalette.js +509 -0
  271. package/dist/navigation/Pagination.d.ts +87 -0
  272. package/dist/navigation/Pagination.js +300 -0
  273. package/dist/navigation/SidebarNav.d.ts +107 -0
  274. package/dist/navigation/SidebarNav.js +341 -0
  275. package/dist/navigation/Stepper.d.ts +52 -0
  276. package/dist/navigation/Stepper.js +207 -0
  277. package/dist/navigation/Tabs.d.ts +113 -0
  278. package/dist/navigation/Tabs.js +543 -0
  279. package/dist/navigation/Topbar.d.ts +20 -0
  280. package/dist/navigation/Topbar.js +62 -0
  281. package/dist/overlay/OverlayProvider.d.ts +28 -32
  282. package/dist/overlay/OverlayProvider.js +42 -93
  283. package/dist/overlay/useOverlay.d.ts +88 -12
  284. package/dist/overlay/useOverlay.js +220 -43
  285. package/dist/overlays/Popover.d.ts +114 -0
  286. package/dist/overlays/Popover.js +389 -0
  287. package/dist/shapes/Circle.d.ts +84 -8
  288. package/dist/shapes/Circle.js +122 -20
  289. package/dist/shapes/Square.d.ts +84 -8
  290. package/dist/shapes/Square.js +123 -20
  291. package/dist/styles/mixins.d.ts +35 -0
  292. package/dist/styles/mixins.js +60 -0
  293. package/dist/styles.css +1 -202
  294. package/dist/table/InfiniteSpreadsheet.d.ts +140 -10
  295. package/dist/table/InfiniteSpreadsheet.js +762 -225
  296. package/dist/table/InfiniteTable.d.ts +116 -14
  297. package/dist/table/InfiniteTable.js +287 -429
  298. package/dist/table/SpreadsheetCellEditor.d.ts +54 -6
  299. package/dist/table/SpreadsheetCellEditor.js +163 -84
  300. package/dist/table/TableCore.d.ts +252 -0
  301. package/dist/table/TableCore.js +1082 -0
  302. package/dist/table/VirtualizedInfiniteTable.d.ts +104 -14
  303. package/dist/table/VirtualizedInfiniteTable.js +280 -219
  304. package/dist/table/types.d.ts +66 -244
  305. package/dist/table/types.js +0 -51
  306. package/dist/table/useInfiniteScrollSentinel.d.ts +25 -21
  307. package/dist/table/useInfiniteScrollSentinel.js +38 -30
  308. package/dist/table/useSpreadsheetCellNavigation.d.ts +44 -0
  309. package/dist/table/useSpreadsheetCellNavigation.js +141 -0
  310. package/dist/table/useTableColumnLayout.d.ts +90 -25
  311. package/dist/table/useTableColumnLayout.js +255 -50
  312. package/dist/table/useTableKeyboardNavigation.d.ts +32 -21
  313. package/dist/table/useTableKeyboardNavigation.js +95 -71
  314. package/dist/table/useTableRowSelection.d.ts +24 -25
  315. package/dist/table/useTableRowSelection.js +57 -84
  316. package/dist/table/useTableVirtualizer.d.ts +20 -0
  317. package/dist/table/useTableVirtualizer.js +48 -0
  318. package/dist/text/Bold.d.ts +5 -6
  319. package/dist/text/Bold.js +16 -15
  320. package/dist/text/Code.d.ts +5 -6
  321. package/dist/text/Code.js +16 -25
  322. package/dist/text/CodeBlock.d.ts +77 -0
  323. package/dist/text/CodeBlock.js +373 -0
  324. package/dist/text/EditableText.d.ts +55 -15
  325. package/dist/text/EditableText.js +153 -135
  326. package/dist/text/Ellipsis.d.ts +34 -8
  327. package/dist/text/Ellipsis.js +55 -23
  328. package/dist/text/Kbd.d.ts +72 -0
  329. package/dist/text/Kbd.js +284 -0
  330. package/dist/text/MarkdownText.d.ts +27 -10
  331. package/dist/text/MarkdownText.js +317 -300
  332. package/dist/text/RequiredMarker.d.ts +17 -5
  333. package/dist/text/RequiredMarker.js +34 -36
  334. package/dist/text/Selectable.d.ts +5 -6
  335. package/dist/text/Selectable.js +16 -13
  336. package/dist/text/Span.d.ts +82 -0
  337. package/dist/text/Span.js +115 -0
  338. package/dist/text/Text.d.ts +128 -41
  339. package/dist/text/Text.js +209 -76
  340. package/dist/theme/GalaxyProvider.d.ts +75 -0
  341. package/dist/theme/GalaxyProvider.js +223 -0
  342. package/dist/theme/ThemeSwitcher.d.ts +52 -0
  343. package/dist/theme/ThemeSwitcher.js +94 -0
  344. package/dist/theme/enums.d.ts +118 -0
  345. package/dist/theme/enums.js +144 -0
  346. package/dist/theme/tokens/dark.d.ts +2 -0
  347. package/dist/theme/tokens/dark.js +275 -0
  348. package/dist/theme/tokens/generate.d.ts +15 -0
  349. package/dist/theme/tokens/generate.js +47 -0
  350. package/dist/theme/tokens/light.d.ts +2 -0
  351. package/dist/theme/tokens/light.js +274 -0
  352. package/dist/theme/tokens/palette.d.ts +14 -0
  353. package/dist/theme/tokens/palette.js +153 -0
  354. package/dist/theme/tokens/scales.d.ts +26 -0
  355. package/dist/theme/tokens/scales.js +154 -0
  356. package/dist/theme/tokens/t.d.ts +3 -0
  357. package/dist/theme/tokens/t.js +25 -0
  358. package/dist/theme/tokens/types.d.ts +189 -0
  359. package/dist/theme/tokens/types.js +0 -0
  360. package/dist/theme/useGalaxyTheme.d.ts +46 -0
  361. package/dist/theme/useGalaxyTheme.js +36 -0
  362. package/dist/theme/useInverseScope.d.ts +18 -0
  363. package/dist/theme/useInverseScope.js +33 -0
  364. package/dist/three/GalaxyLogomark3D.d.ts +46 -0
  365. package/dist/three/GalaxyLogomark3D.js +134 -0
  366. package/dist/three/assets/galaxy-logomark.js +4 -0
  367. package/dist/three/galaxyLogomark3DScene.d.ts +27 -0
  368. package/dist/three/galaxyLogomark3DScene.js +165 -0
  369. package/dist/timeline/Timeline.d.ts +120 -0
  370. package/dist/timeline/Timeline.js +301 -0
  371. package/dist/toast/Toast.d.ts +43 -19
  372. package/dist/toast/Toast.js +130 -89
  373. package/dist/toast/ToastProvider.d.ts +23 -23
  374. package/dist/toast/ToastProvider.js +298 -101
  375. package/dist/toast/ToastViewport.d.ts +12 -0
  376. package/dist/toast/ToastViewport.js +210 -0
  377. package/dist/toast/useToast.d.ts +139 -5
  378. package/dist/toast/useToast.js +15 -13
  379. package/dist/tokens.css +654 -0
  380. package/dist/tooltip/Tooltip.d.ts +64 -44
  381. package/dist/tooltip/Tooltip.js +280 -73
  382. package/dist/tooltip/internal/LazyTooltip.d.ts +7 -0
  383. package/dist/tooltip/internal/LazyTooltip.js +53 -0
  384. package/dist/transform/Fade.d.ts +33 -11
  385. package/dist/transform/Fade.js +71 -19
  386. package/dist/transform/Flasher.d.ts +25 -0
  387. package/dist/transform/Flasher.js +39 -0
  388. package/dist/transform/Rotate.d.ts +24 -12
  389. package/dist/transform/Rotate.js +36 -22
  390. package/dist/transform/ScaleFade.d.ts +36 -11
  391. package/dist/transform/ScaleFade.js +86 -28
  392. package/dist/transform/internal/CollapseMotion.d.ts +10 -0
  393. package/dist/transform/internal/CollapseMotion.js +65 -0
  394. package/dist/tree/Tree.d.ts +85 -0
  395. package/dist/tree/Tree.js +387 -0
  396. package/dist/tree/treeRow.d.ts +39 -0
  397. package/dist/tree/treeRow.js +75 -0
  398. package/dist/utils/colors.d.ts +46 -13
  399. package/dist/utils/colors.js +92 -34
  400. package/dist/utils/css.d.ts +23 -0
  401. package/dist/utils/css.js +30 -0
  402. package/dist/utils/format.d.ts +58 -0
  403. package/dist/utils/format.js +220 -0
  404. package/dist/vite/index.d.ts +16 -0
  405. package/dist/vite/index.js +52 -0
  406. package/dist/widget/Widget.d.ts +164 -48
  407. package/dist/widget/Widget.js +335 -96
  408. package/dist/widget/WidgetGroup.d.ts +36 -0
  409. package/dist/widget/WidgetGroup.js +103 -0
  410. package/package.json +855 -157
  411. package/dist/accordion/Accordion.d.ts +0 -54
  412. package/dist/accordion/Accordion.js +0 -183
  413. package/dist/assets/components/GalaxyFilamentWordmarkDark.d.ts +0 -3
  414. package/dist/assets/components/GalaxyFilamentWordmarkDark.js +0 -14
  415. package/dist/assets/components/GalaxyFilamentWordmarkLight.d.ts +0 -3
  416. package/dist/assets/components/GalaxyFilamentWordmarkLight.js +0 -14
  417. package/dist/assets/components/GalaxyLogomarkDark.d.ts +0 -3
  418. package/dist/assets/components/GalaxyLogomarkDark.js +0 -11
  419. package/dist/assets/components/GalaxyLogomarkLight.d.ts +0 -3
  420. package/dist/assets/components/GalaxyLogomarkLight.js +0 -17
  421. package/dist/assets/components/GalaxyWordmarkDark.d.ts +0 -3
  422. package/dist/assets/components/GalaxyWordmarkDark.js +0 -15
  423. package/dist/assets/components/GalaxyWordmarkLight.d.ts +0 -3
  424. package/dist/assets/components/GalaxyWordmarkLight.js +0 -28
  425. package/dist/assets/models/galaxy-animation.js +0 -136666
  426. package/dist/assets/models/galaxy-logomark.js +0 -4
  427. package/dist/avatar/AvatarShimmer.d.ts +0 -30
  428. package/dist/avatar/AvatarShimmer.js +0 -22
  429. package/dist/backgrounds/CellGridBackground.d.ts +0 -24
  430. package/dist/backgrounds/CellGridBackground.js +0 -44
  431. package/dist/backgrounds/CrossGridBackground.d.ts +0 -26
  432. package/dist/backgrounds/CrossGridBackground.js +0 -49
  433. package/dist/backgrounds/DotGridBackground.d.ts +0 -24
  434. package/dist/backgrounds/DotGridBackground.js +0 -47
  435. package/dist/badge/Badge.d.ts +0 -42
  436. package/dist/badge/Badge.js +0 -99
  437. package/dist/charts/ChartEmptyState.d.ts +0 -17
  438. package/dist/charts/ChartEmptyState.js +0 -29
  439. package/dist/charts/ProgressBar.d.ts +0 -29
  440. package/dist/charts/ProgressBar.js +0 -65
  441. package/dist/charts/chartTheme.d.ts +0 -18
  442. package/dist/charts/chartTheme.js +0 -26
  443. package/dist/containers/FlexItem.d.ts +0 -50
  444. package/dist/containers/FlexItem.js +0 -91
  445. package/dist/containers/FlexWrapper.d.ts +0 -96
  446. package/dist/containers/FlexWrapper.js +0 -143
  447. package/dist/containers/GridWrapper.d.ts +0 -79
  448. package/dist/containers/GridWrapper.js +0 -125
  449. package/dist/containers/Spacing.d.ts +0 -23
  450. package/dist/containers/Spacing.js +0 -59
  451. package/dist/containers/Wrapper.d.ts +0 -26
  452. package/dist/containers/Wrapper.js +0 -54
  453. package/dist/dividers/HorizontalDivider.d.ts +0 -7
  454. package/dist/dividers/HorizontalDivider.js +0 -39
  455. package/dist/dividers/VerticalDivider.d.ts +0 -6
  456. package/dist/dividers/VerticalDivider.js +0 -21
  457. package/dist/icons/GalaxyFilamentWordmark.d.ts +0 -11
  458. package/dist/icons/GalaxyFilamentWordmark.js +0 -25
  459. package/dist/icons/GalaxyLogomark.d.ts +0 -13
  460. package/dist/icons/GalaxyLogomark.js +0 -27
  461. package/dist/icons/GalaxyLogomark3D.d.ts +0 -56
  462. package/dist/icons/GalaxyLogomark3D.js +0 -319
  463. package/dist/icons/GalaxyLogomarkAnimation.d.ts +0 -18
  464. package/dist/icons/GalaxyLogomarkAnimation.js +0 -48
  465. package/dist/icons/GalaxyWordmark.d.ts +0 -11
  466. package/dist/icons/GalaxyWordmark.js +0 -25
  467. package/dist/inputs/MultiTextInput.d.ts +0 -32
  468. package/dist/inputs/MultiTextInput.js +0 -180
  469. package/dist/inputs/SwitcherInput.d.ts +0 -30
  470. package/dist/inputs/SwitcherInput.js +0 -81
  471. package/dist/inputs/hooks.d.ts +0 -10
  472. package/dist/inputs/hooks.js +0 -22
  473. package/dist/overlay/constants.d.ts +0 -28
  474. package/dist/overlay/constants.js +0 -37
  475. package/dist/resizable/HorizontalResizeHandle.d.ts +0 -17
  476. package/dist/resizable/HorizontalResizeHandle.js +0 -38
  477. package/dist/resizable/VerticalResizeHandle.d.ts +0 -18
  478. package/dist/resizable/VerticalResizeHandle.js +0 -39
  479. package/dist/table/SpreadsheetCell.d.ts +0 -21
  480. package/dist/table/SpreadsheetCell.js +0 -71
  481. package/dist/table/SpreadsheetHeaderCell.d.ts +0 -23
  482. package/dist/table/SpreadsheetHeaderCell.js +0 -91
  483. package/dist/table/SpreadsheetMenuItem.d.ts +0 -14
  484. package/dist/table/SpreadsheetMenuItem.js +0 -33
  485. package/dist/table/SpreadsheetPrimitives.d.ts +0 -172
  486. package/dist/table/SpreadsheetPrimitives.js +0 -105
  487. package/dist/table/SpreadsheetRow.d.ts +0 -33
  488. package/dist/table/SpreadsheetRow.js +0 -73
  489. package/dist/table/SpreadsheetRowActionCell.d.ts +0 -14
  490. package/dist/table/SpreadsheetRowActionCell.js +0 -51
  491. package/dist/table/TableExpandCell.d.ts +0 -11
  492. package/dist/table/TableExpandCell.js +0 -24
  493. package/dist/table/TableExpandedRow.d.ts +0 -16
  494. package/dist/table/TableExpandedRow.js +0 -77
  495. package/dist/table/TableHeaderCellContent.d.ts +0 -30
  496. package/dist/table/TableHeaderCellContent.js +0 -48
  497. package/dist/table/TablePrimitives.d.ts +0 -313
  498. package/dist/table/TablePrimitives.js +0 -302
  499. package/dist/table/TableSelectCell.d.ts +0 -18
  500. package/dist/table/TableSelectCell.js +0 -27
  501. package/dist/table/TableStatusRow.d.ts +0 -18
  502. package/dist/table/TableStatusRow.js +0 -50
  503. package/dist/table/useSpreadsheetEditing.d.ts +0 -13
  504. package/dist/table/useSpreadsheetEditing.js +0 -41
  505. package/dist/table/useTableColumnResize.d.ts +0 -38
  506. package/dist/table/useTableColumnResize.js +0 -155
  507. package/dist/table/useTableRowExpansion.d.ts +0 -24
  508. package/dist/table/useTableRowExpansion.js +0 -62
  509. package/dist/table/utils.d.ts +0 -50
  510. package/dist/table/utils.js +0 -78
  511. package/dist/text/HotKeys.d.ts +0 -30
  512. package/dist/text/HotKeys.js +0 -74
  513. package/dist/text/Paragraph.d.ts +0 -33
  514. package/dist/text/Paragraph.js +0 -83
  515. package/dist/text/TextShimmer.d.ts +0 -14
  516. package/dist/text/TextShimmer.js +0 -34
  517. package/dist/theme/GalaxyTheme.d.ts +0 -67
  518. package/dist/theme/GalaxyTheme.js +0 -119
  519. package/dist/theme/constants.d.ts +0 -8
  520. package/dist/theme/constants.js +0 -38
  521. package/dist/theme/index.d.ts +0 -6
  522. package/dist/theme/index.js +0 -7
  523. package/dist/theme/types.d.ts +0 -195
  524. package/dist/theme/types.js +0 -10
  525. package/dist/theme/typography.d.ts +0 -2
  526. package/dist/theme/typography.js +0 -73
  527. package/dist/theme/variants/dark.d.ts +0 -2
  528. package/dist/theme/variants/dark.js +0 -125
  529. package/dist/theme/variants/light.d.ts +0 -2
  530. package/dist/theme/variants/light.js +0 -125
  531. package/dist/toast/ToastContainer.d.ts +0 -10
  532. package/dist/toast/ToastContainer.js +0 -31
  533. package/dist/toast/ToastWrapper.d.ts +0 -6
  534. package/dist/toast/ToastWrapper.js +0 -27
  535. package/dist/transform/Flash.d.ts +0 -7
  536. package/dist/transform/Flash.js +0 -18
  537. package/dist/transform/Spin.d.ts +0 -14
  538. package/dist/transform/Spin.js +0 -25
  539. package/dist/utils/linaria.d.ts +0 -1
  540. package/dist/utils/linaria.js +0 -8
@@ -1,129 +1,338 @@
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_FILTER_EXTENT, CHART_LEGEND_SIDE_GAP } from "./constants.js";
4
+ import Chip, { ChipSize } from "../chips/Chip.js";
5
+ import EmptyState, { EmptyStateSize } from "../feedback/EmptyState.js";
6
+ import { isAdditiveEvent } from "./chartSelection.js";
7
+ import { ChartCategoryTargets } from "./ChartCategoryTargets.js";
8
+ import { ChartLegend } from "./ChartLegend.js";
9
+ import { ChartMarkTargets } from "./ChartMarkTargets.js";
10
+ import { ChartTooltip } from "./ChartTooltip.js";
11
+ /* empty css */
12
+ import { styled } from "@linaria/react";
13
+ import { useCallback, useMemo, useState } from "react";
11
14
  import { jsx, jsxs } from "react/jsx-runtime";
15
+ import { cx } from "@linaria/core";
16
+ import { FunnelSimpleIcon } from "@phosphor-icons/react";
12
17
  //#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();
18
+ /**
19
+ * @internal The shell every chart renders into: the root (sizing, legend placement, passthrough),
20
+ * the measured plot box (one tab stop when interactive), the SVG and its inset translate, axes,
21
+ * marks, hit targets, the in-chart tooltip, the empty and loading overlays, the live region and
22
+ * the legend. On a filterable chart dismissible filter chips follow the legend entries while
23
+ * something is pinned. One pin shows a chip per part ("06:00" and "Failed" for one segment): a
24
+ * chip's × drops that part and keeps the other. Several pins collapse into one "3 filters" chip
25
+ * (the list in its tooltip) whose × clears them all. It knows nothing about scales or geometry: axes and marks arrive as nodes, and every
26
+ * coordinate handed to it is in plot space (the frame adds the insets once).
27
+ *
28
+ * Sizing: the root fills its parent (`width` / `height: 100%`); against a parent of indefinite
29
+ * height the percentage computes to `auto` and `aspect-ratio: var(--gx-chart-aspect-ratio)`
30
+ * applies, so a chart never needs a size prop and never collapses to 0×0.
31
+ */
32
+ var Root = /*#__PURE__*/ styled("div")({
33
+ name: "Root",
34
+ class: "gx-ChartFrame-rd05unv",
35
+ propsAsIs: false
36
+ });
37
+ /** @internal Legend placement → root layout. */
38
+ var CHART_LEGEND_PLACEMENT_TO_CSS_MAP = {
39
+ [ChartLegendPlacement.BOTTOM]: "gx-ChartFrame-ChartLegendPlacement_BOTTOM-c1m9ui7b",
40
+ [ChartLegendPlacement.RIGHT]: "gx-ChartFrame-ChartLegendPlacement_RIGHT-cq532vv"
41
+ };
42
+ /** The measured element; anchors the SVG, overlays and tooltip. */
43
+ var PlotBox = /*#__PURE__*/ styled("div")({
44
+ name: "PlotBox",
45
+ class: "gx-ChartFrame-PlotBox-pl7aabu",
46
+ propsAsIs: false
47
+ });
48
+ /** The plot box as one tab stop: the focus ring draws around the plot, not the whole chart. */
49
+ var PLOT_INTERACTIVE_CSS = "gx-ChartFrame-PLOT_INTERACTIVE_CSS-p27fgao";
50
+ var ChartSvg = /*#__PURE__*/ styled("svg")({
51
+ name: "ChartSvg",
52
+ class: "gx-ChartFrame-ChartSvg-c1n7y3iq",
53
+ propsAsIs: false
54
+ });
55
+ /** The empty-state overlay: over the plot box only, so the axes keep their size. */
56
+ var Overlay = /*#__PURE__*/ styled("div")({
57
+ name: "Overlay",
58
+ class: "gx-ChartFrame-Overlay-o1itt7vl",
59
+ propsAsIs: false
60
+ });
61
+ /** A standalone `Skeleton RECT` that takes the whole plot box. */
62
+ var LOADING_SKELETON_CSS = "gx-ChartFrame-LOADING_SKELETON_CSS-l1oi7u1q";
63
+ /**
64
+ * A chart's own legend (Heatmap's steps) with the filter chip after it. Both carry the legend's 8px
65
+ * top padding and center on each other, so the chip centers on the legend's text line.
66
+ */
67
+ var CustomLegendBar = /*#__PURE__*/ styled("div")({
68
+ name: "CustomLegendBar",
69
+ class: "gx-ChartFrame-CustomLegendBar-c1jrxj0u",
70
+ propsAsIs: false
71
+ });
72
+ /**
73
+ * The chips after a chart's own legend. Its height (the 8px top padding and a 20px chip) is kept
74
+ * while nothing is pinned, so the plot above never moves when a chip appears.
75
+ */
76
+ var CustomFilterSlot = /*#__PURE__*/ styled("div")({
77
+ name: "CustomFilterSlot",
78
+ class: "gx-ChartFrame-CustomFilterSlot-celuo85",
79
+ propsAsIs: false
80
+ });
81
+ var LiveRegion = /*#__PURE__*/ styled("div")({
82
+ name: "LiveRegion",
83
+ class: "gx-ChartFrame-LiveRegion-lvgwxyl",
84
+ propsAsIs: false
85
+ });
86
+ /** The default accessible name, phrased once so the charts cannot drift. */
87
+ function deriveAriaLabel(kind, categories, series) {
88
+ switch (kind) {
89
+ case ChartKind.LINE: return `Line chart, ${categories} categories, ${series} series`;
90
+ case ChartKind.AREA: return `Area chart, ${categories} categories, ${series} series`;
91
+ case ChartKind.BAR: return `Bar chart, ${categories} categories, ${series} series`;
92
+ case ChartKind.PIE: return `Pie chart, ${categories} slices`;
93
+ case ChartKind.HEATMAP: return `Heatmap, ${categories} cells`;
94
+ }
95
+ }
96
+ /** The live-region sentence for a category: "Q2. Revenue 1,200. Cost 800." */
97
+ function describeTooltip(model) {
98
+ if (model === null) return "";
99
+ if (model.rows.length === 0) return `${model.label}. No data.`;
100
+ const rows = model.rows.map((row) => `${row.label} ${row.value === null ? "no data" : row.formattedValue}.`);
101
+ return `${model.label}. ${rows.join(" ")}`;
102
+ }
103
+ var NAVIGATION_KEYS = new Set([
104
+ "ArrowRight",
105
+ "ArrowLeft",
106
+ "ArrowUp",
107
+ "ArrowDown",
108
+ "Home",
109
+ "End"
110
+ ]);
111
+ /** @internal The chart shell. */
112
+ 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, formatCategoryKey }) {
113
+ const { width, height, insets, isMeasured } = dimensions;
114
+ const [announcement, setAnnouncement] = useState("");
115
+ const { rootPassthrough, plotAria } = useMemo(() => {
116
+ const root = {};
117
+ const aria = {};
118
+ for (const [key, value] of Object.entries(rest)) if (key.startsWith("aria-")) aria[key] = value;
119
+ else root[key] = value;
120
+ return {
121
+ rootPassthrough: root,
122
+ plotAria: aria
123
+ };
124
+ }, [rest]);
125
+ const { "aria-label": passedAriaLabel, ...plotAriaRest } = plotAria;
126
+ const resolvedAriaLabel = ariaLabel ?? (typeof passedAriaLabel === "string" ? passedAriaLabel : void 0) ?? deriveAriaLabel(kind, categoryCount, legendItems.length);
127
+ const isInteractive = (hasTooltip || onCategorySelect !== void 0) && !isLoading && !isEmpty;
27
128
  const tooltipModel = useMemo(() => {
28
- if (noTooltip || !interaction.showTooltip || interaction.activeIndex === null) return null;
129
+ if (!hasTooltip || isLoading || !interaction.showTooltip || interaction.activeIndex === null) return null;
29
130
  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;
131
+ if (model === null || model.rows.length === 0 && renderTooltip !== void 0) return null;
132
+ return {
133
+ ...model,
134
+ anchorX: model.anchorX + insets.left,
135
+ anchorY: model.anchorY + insets.top
136
+ };
33
137
  }, [
34
- noTooltip,
35
- buildCategoryTooltip,
36
- interaction.activeIndex,
138
+ hasTooltip,
139
+ isLoading,
37
140
  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
141
+ interaction.activeIndex,
142
+ buildCategoryTooltip,
143
+ renderTooltip,
144
+ insets.left,
145
+ insets.top
58
146
  ]);
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,
147
+ const announce = useCallback((index) => {
148
+ if (index === null) setAnnouncement("");
149
+ else if (describeCategory) setAnnouncement(describeCategory(index));
150
+ else setAnnouncement(describeTooltip(buildCategoryTooltip(index)));
151
+ }, [buildCategoryTooltip, describeCategory]);
152
+ const handleKeyDown = (event) => {
153
+ if (event.target !== event.currentTarget) return;
154
+ if (NAVIGATION_KEYS.has(event.key)) {
155
+ const next = interaction.onKeyboardMove(event.key);
156
+ if (next === null) return;
157
+ event.preventDefault();
158
+ announce(next);
159
+ return;
160
+ }
161
+ if (event.key === "Enter" || event.key === " ") {
162
+ if (event.key === " ") event.preventDefault();
163
+ if (onCategorySelect && interaction.activeIndex !== null) {
164
+ event.preventDefault();
165
+ onCategorySelect(interaction.activeIndex, isAdditiveEvent(event));
166
+ }
167
+ return;
168
+ }
169
+ if (event.key !== "Escape") return;
170
+ if (interaction.activeIndex !== null) {
171
+ event.preventDefault();
172
+ event.stopPropagation();
173
+ interaction.onKeyboardClear();
174
+ setAnnouncement("");
175
+ } else if (interaction.isFilterable && interaction.hasSelection) {
176
+ event.preventDefault();
177
+ event.stopPropagation();
178
+ interaction.clearSelection();
179
+ setAnnouncement("Filter cleared.");
180
+ }
181
+ };
182
+ const handleLegendClick = (seriesKey, isAdditive) => interaction.toggleSelection({ seriesKey }, isAdditive);
183
+ const handleFilterDismiss = (rest) => {
184
+ if (rest === null) interaction.clearSelection();
185
+ else interaction.setSelection([rest]);
186
+ if (isInteractive) plotRef.current?.focus();
187
+ };
188
+ const handleFocus = (event) => {
189
+ if (event.target !== event.currentTarget) return;
190
+ let isKeyboardFocus = true;
191
+ try {
192
+ isKeyboardFocus = event.currentTarget.matches(":focus-visible");
193
+ } catch {}
194
+ if (isKeyboardFocus) announce(interaction.onKeyboardFocus());
195
+ };
196
+ const handleBlur = (event) => {
197
+ if (event.target !== event.currentTarget) return;
198
+ interaction.onKeyboardBlur();
199
+ };
200
+ const plotA11yProps = isInteractive ? {
201
+ tabIndex: 0,
202
+ role: "group",
203
+ "aria-roledescription": "chart",
204
+ "aria-label": resolvedAriaLabel,
205
+ onKeyDown: handleKeyDown,
206
+ onFocus: handleFocus,
207
+ onBlur: handleBlur
208
+ } : {
209
+ role: "img",
210
+ "aria-label": resolvedAriaLabel
211
+ };
212
+ const isSkeleton = isLoading && isEmpty;
213
+ const isSideLegend = legendPlacement === ChartLegendPlacement.RIGHT;
214
+ const categoryLabel = (key) => formatCategoryKey?.(key) ?? key;
215
+ const seriesLabel = (key) => legendItems.find((item) => item.key === key)?.label ?? key;
216
+ const describePin = (pin) => [pin.categoryKey === void 0 ? void 0 : categoryLabel(pin.categoryKey), pin.seriesKey === void 0 ? void 0 : seriesLabel(pin.seriesKey)].filter((part) => part !== void 0).join(" · ");
217
+ /** One chip per part of a single pin; one "N filters" chip for several. */
218
+ const filterChipParts = (() => {
219
+ const pins = interaction.selection;
220
+ const [pin] = pins;
221
+ if (!interaction.isFilterable || pin === void 0) return [];
222
+ if (pins.length > 1) return [{
223
+ key: "all",
224
+ label: `${pins.length} filters`,
225
+ rest: null
226
+ }];
227
+ const parts = [];
228
+ if (pin.categoryKey !== void 0) parts.push({
229
+ key: "category",
230
+ label: categoryLabel(pin.categoryKey),
231
+ rest: pin.seriesKey === void 0 ? null : { seriesKey: pin.seriesKey }
232
+ });
233
+ if (pin.seriesKey !== void 0) parts.push({
234
+ key: "series",
235
+ label: seriesLabel(pin.seriesKey),
236
+ rest: pin.categoryKey === void 0 ? null : { categoryKey: pin.categoryKey }
237
+ });
238
+ return parts;
239
+ })();
240
+ const filterChip = filterChipParts.length === 0 ? null : filterChipParts.map((part, index) => /* @__PURE__ */ jsx(Chip, {
241
+ size: ChipSize.SMALL,
242
+ ...index === 0 && { icon: FunnelSimpleIcon },
243
+ label: part.label,
244
+ tooltip: part.key === "all" ? interaction.selection.map(describePin).join(", ") : "",
245
+ onDismiss: () => handleFilterDismiss(part.rest)
246
+ }, part.key));
247
+ const legendNode = !hasLegend || isSkeleton ? null : legend ?? /* @__PURE__ */ jsx(ChartLegend, {
248
+ items: legendItems,
249
+ placement: legendPlacement,
250
+ swatch: legendSwatch,
251
+ inset: isSideLegend ? CHART_LEGEND_SIDE_GAP : insets.left,
252
+ extent: isSideLegend ? Math.max(0, height - (interaction.isFilterable ? CHART_LEGEND_FILTER_EXTENT : 0)) : 0,
253
+ isFixedExtent: !interaction.isFilterable,
254
+ hasFilterSlot: interaction.isFilterable,
255
+ filter: filterChip,
256
+ getEntryState: interaction.getSeriesState,
257
+ isEntryPinned: interaction.isSeriesPinned,
258
+ onItemClick: interaction.isFilterable ? handleLegendClick : void 0,
259
+ onItemEnter: interaction.onSeriesEnter,
260
+ onItemLeave: interaction.onSeriesLeave
261
+ });
262
+ const hasTargets = isMeasured && isInteractive && categoryTargets.length > 0;
263
+ const rootStyle = {
264
+ "--gx-chart-aspect-ratio": aspectRatio,
265
+ ...style
266
+ };
267
+ return /* @__PURE__ */ jsxs(Root, {
268
+ ...rootPassthrough,
269
+ ref: rootRef,
270
+ id,
271
+ "aria-busy": isLoading || void 0,
272
+ className: cx(CHART_LEGEND_PLACEMENT_TO_CSS_MAP[legendPlacement], className),
273
+ style: rootStyle,
274
+ children: [/* @__PURE__ */ jsxs(PlotBox, {
275
+ ...plotAriaRest,
276
+ ...plotA11yProps,
277
+ ref: plotRef,
278
+ className: cx(isInteractive && PLOT_INTERACTIVE_CSS, plotClassName),
72
279
  children: [
73
- isMeasured && /* @__PURE__ */ jsxs(ChartSvg, {
280
+ isMeasured && !isSkeleton && /* @__PURE__ */ jsx(ChartSvg, {
281
+ "aria-hidden": "true",
74
282
  width,
75
283
  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})`,
284
+ children: /* @__PURE__ */ jsxs("g", {
285
+ transform: `translate(${insets.left}, ${insets.top})`,
84
286
  children: [
85
287
  axes,
86
288
  /* @__PURE__ */ jsx("g", { children }),
87
- hasTargets && categoryTargets && /* @__PURE__ */ jsxs("g", {
88
- transform: categoryTargetsTransform,
89
- onMouseLeave: interaction.onCategoryLeave,
289
+ hasTargets && /* @__PURE__ */ jsxs("g", {
290
+ transform: targetsTransform,
90
291
  children: [/* @__PURE__ */ jsx(ChartCategoryTargets, {
91
292
  targets: categoryTargets,
92
- interaction,
293
+ onEnter: interaction.onCategoryEnter,
294
+ onLeave: interaction.onCategoryLeave,
93
295
  onSelect: onCategorySelect
94
296
  }), onMarkSelect && markTargets && markTargets.length > 0 && /* @__PURE__ */ jsx(ChartMarkTargets, {
95
297
  targets: markTargets,
96
- interaction,
298
+ onEnter: interaction.onCategoryEnter,
299
+ onLeave: interaction.onCategoryLeave,
97
300
  onSelect: onMarkSelect
98
301
  })]
99
302
  })
100
303
  ]
101
- })]
304
+ })
102
305
  }),
103
- isMeasured && plotOverlay,
104
- isMeasured && !noTooltip && /* @__PURE__ */ jsx(ChartTooltip, {
105
- model: positionedTooltip,
306
+ isMeasured && !isSkeleton && plotOverlay,
307
+ isMeasured && isEmpty && !isLoading && /* @__PURE__ */ jsx(Overlay, { children: /* @__PURE__ */ jsx(EmptyState, {
308
+ size: EmptyStateSize.SMALL,
309
+ header: placeholder,
310
+ role: "status"
311
+ }) }),
312
+ isSkeleton && /* @__PURE__ */ jsx(Skeleton, {
313
+ variant: SkeletonVariant.RECT,
314
+ className: LOADING_SKELETON_CSS
315
+ }),
316
+ isMeasured && hasTooltip && !isSkeleton && /* @__PURE__ */ jsx(ChartTooltip, {
317
+ model: tooltipModel,
106
318
  containerWidth: width,
107
319
  containerHeight: height,
108
320
  anchorHalfWidth,
109
- placeAwayFromX: placeAwayFromX === void 0 ? void 0 : placeAwayFromX + margin.left,
321
+ placeAwayFromX: placeAwayFromX === void 0 ? void 0 : placeAwayFromX + insets.left,
110
322
  verticalAlign,
111
- renderer: tooltipRenderer,
112
- maxItems: tooltipMaxItems
323
+ renderTooltip,
324
+ swatch: tooltipSwatch
113
325
  }),
114
- isMeasured && isEmpty && !isLoading && /* @__PURE__ */ jsx(ChartEmptyState, { content: contentWhenEmpty })
326
+ /* @__PURE__ */ jsx(LiveRegion, {
327
+ "aria-live": "polite",
328
+ children: announcement
329
+ })
115
330
  ]
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
- })]
331
+ }), legendNode !== null && (interaction.isFilterable && legend !== void 0 ? /* @__PURE__ */ jsxs(CustomLegendBar, { children: [legendNode, /* @__PURE__ */ jsx(CustomFilterSlot, {
332
+ "aria-hidden": filterChip === null || void 0,
333
+ children: filterChip
334
+ })] }) : legendNode)]
126
335
  });
127
- };
336
+ }
128
337
  //#endregion
129
- export { ChartFrame as default };
338
+ 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 };