@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,51 +1,40 @@
1
- import type { ChartLegendItem } from "./types";
2
- interface ChartLegendProps {
1
+ import { type ReactNode } from "react";
2
+ import { type ChartLegendItem, ChartLegendPlacement, ChartMarkState } 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
+ /** RIGHT: the column is `extent` tall with its entries centered; off, it hugs the entries (a Reset follows them). @default true */
23
+ isFixedExtent?: boolean;
24
+ /** An entry's emphasis: the hovered entry, else whether the selection covers its series. */
25
+ getEntryState: (key: string) => ChartMarkState;
26
+ /** The entry's series is pinned on its own: its toggle reads pressed. */
27
+ isEntryPinned?: (key: string) => boolean;
28
+ /** Filterable charts: keep a slot after the entries for the filter chip. @default false */
29
+ hasFilterSlot?: boolean;
30
+ /** The filter chip, or `null` while nothing is pinned (the slot keeps its space). */
31
+ filter?: ReactNode;
32
+ /** Click on an entry (filterable charts); supplying it makes each inline entry a toggle button. */
33
+ onItemClick?: ((key: string, isAdditive: boolean) => void) | undefined;
34
+ /** Pointer entered an entry. */
35
+ onItemEnter: (key: string) => void;
36
+ /** Pointer left an entry. */
37
+ onItemLeave: () => void;
30
38
  }
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;
39
+ /** @internal The chart legend. */
40
+ export declare function ChartLegend({ items, placement, swatch, inset, extent, isFixedExtent, hasFilterSlot, filter, getEntryState, isEntryPinned, onItemClick, onItemEnter, onItemLeave, }: ChartLegendProps): ReactNode;
@@ -1,46 +1,171 @@
1
+ import { useIsomorphicLayoutEffect } from "../hooks/useIsomorphicLayoutEffect.js";
2
+ import { Placement } from "../theme/enums.js";
1
3
  import Text, { TextSize, TextVariant } from "../text/Text.js";
2
- import Tooltip, { TooltipPosition, TooltipVariant } from "../tooltip/Tooltip.js";
3
- import Circle from "../shapes/Circle.js";
4
- import { ChartMarkState } from "./types.js";
5
- import { ChartLegendItemButton, ChartLegendItemStatic, ChartLegendMeasure, ChartLegendMeasureClip, ChartLegendOverflowList, ChartLegendRow } from "./ChartPrimitives.js";
6
- import { useCallback, useLayoutEffect, useRef, useState } from "react";
4
+ import Flex, { AlignItems } from "../layout/Flex.js";
5
+ import Tooltip from "../tooltip/Tooltip.js";
6
+ import { ChartLegendPlacement, ChartMarkState, ChartPalette } from "./types.js";
7
+ import { CHART_MARK_STATE_TO_CSS_MAP } from "./ChartPrimitives.js";
8
+ import "./constants.js";
9
+ import { isAdditiveEvent } from "./chartSelection.js";
10
+ import Circle, { CircleSize, CircleVariant } from "../shapes/Circle.js";
11
+ import Square, { SquareSize, SquareVariant } from "../shapes/Square.js";
12
+ import { CHART_PALETTE_TO_COLOR_MAP } from "./chartPalette.js";
13
+ /* empty css */
14
+ import { styled } from "@linaria/react";
15
+ import { useCallback, useRef, useState } from "react";
7
16
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
17
+ import { cx } from "@linaria/core";
8
18
  //#region src/charts/ChartLegend.tsx
9
19
  /**
10
- * Legend for the chart components.
20
+ * @internal The chart legend: one line beneath the plot (`BOTTOM`) or one column beside it
21
+ * (`RIGHT`). Entries that do not fit collapse behind a "+N more" button whose `Tooltip` lists
22
+ * them. The fit is measured, not guessed: a hidden copy of every entry is laid out unconstrained
23
+ * and the visible count is however many real sizes fit beside the trigger.
11
24
  *
12
- * Hovering or focusing an entry isolates its series; leaving releases it.
13
- *
14
- * The legend never outgrows the plot. A horizontal legend holds exactly one
15
- * line of the plot's width; a side-placed legend holds one column of the
16
- * plot's height. Entries that would not fit collapse behind a "+N more"
17
- * trigger whose tooltip lists them — still hoverable, so a collapsed series
18
- * isolates exactly like a visible one. The fit is measured, not guessed: a
19
- * hidden copy of every entry is laid out unconstrained, and the visible count
20
- * is however many real sizes fit beside the trigger.
21
- *
22
- * Deliberately *not* a visibility toggle: hiding a series would have to rescale
23
- * the value axis to stay honest — otherwise the remaining bars sit mysteriously
24
- * short — and that belongs with the geometry layer rather than bolted on here.
25
- * Isolation only changes opacity, so the domain is untouched and the numbers
26
- * keep meaning what they did.
25
+ * Entries are list items. Hovering one previews its series (a pointer enhancement; keyboard users
26
+ * hear every series in the announcement). On a filterable chart each entry is also a toggle button
27
+ * (`aria-pressed`): a click pins its series, ⌘ / Ctrl / Shift-click adds or removes it. Entries
28
+ * collapsed behind "+N more" stay hover-only (a tooltip holds no controls). A filterable chart's
29
+ * legend ends in a slot for its filter chip, right after the last entry (under the column when
30
+ * RIGHT): the slot always keeps its height, and a bottom legend always keeps room for the chip's
31
+ * width, so pinning never moves an entry. Spacing is
32
+ * padding on each entry (trailing in a row, split above and below in a column so the column
33
+ * centers), not a flex gap, so sweeping across entries never drops the isolation. Isolation changes opacity only; it never rescales the axis.
27
34
  */
28
- var ChartLegend = ({ items, inset, hoveredKey = null, vertical = false, verticalExtent, maxItems, onItemEnter, onItemLeave }) => {
29
- const rowRef = useRef(null);
35
+ /** @internal Swatch shape: a dot for line series, a square for filled series. */
36
+ var ChartLegendSwatch = /* @__PURE__ */ function(ChartLegendSwatch) {
37
+ /** `Circle SMALL`: line series. */
38
+ ChartLegendSwatch["CIRCLE"] = "CIRCLE";
39
+ /** `Square SMALL`: area, bar, arc and heatmap series. */
40
+ ChartLegendSwatch["SQUARE"] = "SQUARE";
41
+ return ChartLegendSwatch;
42
+ }({});
43
+ /**
44
+ * A swatch takes its slot's mark color (`CHART_PALETTE_TO_COLOR_MAP`) through `currentColor`, so
45
+ * the legend always matches the marks (the hue slots that stand in for the old neutrals included).
46
+ */
47
+ var SwatchColor = /*#__PURE__*/ styled("span")({
48
+ name: "SwatchColor",
49
+ class: "gx-ChartLegend-SwatchColor-s1bx0eug",
50
+ propsAsIs: false
51
+ });
52
+ /** The legend box. `position: relative` anchors the measure layer. */
53
+ var Root = /*#__PURE__*/ styled("div")({
54
+ name: "Root",
55
+ class: "gx-ChartLegend-r1c62hgg",
56
+ propsAsIs: false
57
+ });
58
+ /** The visible list. Never wraps: the fit computation guarantees one line (or column). */
59
+ var List = /*#__PURE__*/ styled("ul")({
60
+ name: "List",
61
+ class: "gx-ChartLegend-List-l1lgbp5d",
62
+ propsAsIs: false
63
+ });
64
+ /** Legend placement → list layout. BOTTOM aligns the first entry with the plot's left edge. */
65
+ var CHART_LEGEND_PLACEMENT_TO_LIST_CSS_MAP = {
66
+ [ChartLegendPlacement.BOTTOM]: "gx-ChartLegend-ChartLegendPlacement_BOTTOM-c681qv5",
67
+ [ChartLegendPlacement.RIGHT]: "gx-ChartLegend-ChartLegendPlacement_RIGHT-c1l24ron"
68
+ };
69
+ /** Zero-size clip that stops the measure layer's max-content box from adding page overflow. */
70
+ var MeasureClip = /*#__PURE__*/ styled("div")({
71
+ name: "MeasureClip",
72
+ class: "gx-ChartLegend-MeasureClip-m4cjheg",
73
+ propsAsIs: false
74
+ });
75
+ /** Invisible copy of every entry plus the widest trigger, laid out unconstrained. */
76
+ var Measure = /*#__PURE__*/ styled("div")({
77
+ name: "Measure",
78
+ class: "gx-ChartLegend-Measure-m1byi1w",
79
+ propsAsIs: false
80
+ });
81
+ var MEASURE_PLACEMENT_TO_CSS_MAP = {
82
+ [ChartLegendPlacement.BOTTOM]: "gx-ChartLegend-ChartLegendPlacement_BOTTOM-cixvbm6",
83
+ [ChartLegendPlacement.RIGHT]: "gx-ChartLegend-ChartLegendPlacement_RIGHT-c1ehakcs"
84
+ };
85
+ /** The filter chips' slot: one or two chips, truncating at its cap, never taller than the row it sets. */
86
+ var FilterSlot = /*#__PURE__*/ styled("li")({
87
+ name: "FilterSlot",
88
+ class: "gx-ChartLegend-FilterSlot-fsomlsk",
89
+ propsAsIs: false
90
+ });
91
+ /** BOTTOM: a 20px row the chip fits; RIGHT: the chip under the column, 8px below the last entry. */
92
+ var FILTER_SLOT_PLACEMENT_TO_CSS_MAP = {
93
+ [ChartLegendPlacement.BOTTOM]: "gx-ChartLegend-ChartLegendPlacement_BOTTOM-cdc52xq",
94
+ [ChartLegendPlacement.RIGHT]: "gx-ChartLegend-ChartLegendPlacement_RIGHT-cme95dp"
95
+ };
96
+ /** An entry never shrinks below its content; the fit decides what shows. */
97
+ var ENTRY_CSS = "gx-ChartLegend-ENTRY_CSS-e1lt2566";
98
+ /** A filterable entry's toggle: the swatch and label as one button, ring on keyboard focus. */
99
+ var ENTRY_BUTTON_CSS = "gx-ChartLegend-ENTRY_BUTTON_CSS-e1btzd6s";
100
+ /** The "+N more" trigger: a real button, Tab-reachable. */
101
+ var TRIGGER_CSS = "gx-ChartLegend-TRIGGER_CSS-t1hkz6fn";
102
+ /** The hidden entries, listed in the trigger's tooltip. */
103
+ var OverflowList = /*#__PURE__*/ styled("ul")({
104
+ name: "OverflowList",
105
+ class: "gx-ChartLegend-OverflowList-o1wv3pdp",
106
+ propsAsIs: false
107
+ });
108
+ function Swatch({ item, swatch }) {
109
+ return /* @__PURE__ */ jsx(SwatchColor, {
110
+ style: { "--gx-chart-mark-color": item.hex ?? CHART_PALETTE_TO_COLOR_MAP[item.palette ?? ChartPalette.TERTIARY] },
111
+ children: swatch === "CIRCLE" ? /* @__PURE__ */ jsx(Circle, {
112
+ size: CircleSize.SMALL,
113
+ variant: CircleVariant.INHERIT
114
+ }) : /* @__PURE__ */ jsx(Square, {
115
+ size: SquareSize.SMALL,
116
+ variant: SquareVariant.INHERIT
117
+ })
118
+ });
119
+ }
120
+ function Entry({ item, swatch, isVertical, state, as = "li", isPinned = false, onEnter, onLeave, onClick }) {
121
+ const content = /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Swatch, {
122
+ item,
123
+ swatch
124
+ }), /* @__PURE__ */ jsx(Text, {
125
+ size: TextSize.BODY_SM,
126
+ variant: isPinned ? TextVariant.PRIMARY : TextVariant.SECONDARY,
127
+ lineClamp: 1,
128
+ children: item.label
129
+ })] });
130
+ return /* @__PURE__ */ jsx(Flex, {
131
+ as,
132
+ alignItems: AlignItems.CENTER,
133
+ gap: 8,
134
+ padding: isVertical ? [4, 0] : [
135
+ 0,
136
+ 16,
137
+ 0,
138
+ 0
139
+ ],
140
+ className: cx(ENTRY_CSS, CHART_MARK_STATE_TO_CSS_MAP[state]),
141
+ ...onEnter && { onMouseEnter: onEnter },
142
+ ...onLeave && { onMouseLeave: onLeave },
143
+ children: onClick ? /* @__PURE__ */ jsx("button", {
144
+ type: "button",
145
+ "aria-pressed": isPinned,
146
+ className: ENTRY_BUTTON_CSS,
147
+ onClick: (event) => onClick(isAdditiveEvent(event)),
148
+ children: content
149
+ }) : content
150
+ });
151
+ }
152
+ /** @internal The chart legend. */
153
+ function ChartLegend({ items, placement, swatch, inset, extent = 0, isFixedExtent = true, hasFilterSlot = false, filter = null, getEntryState, isEntryPinned, onItemClick, onItemEnter, onItemLeave }) {
154
+ const listRef = useRef(null);
30
155
  const measureRef = useRef(null);
31
- /** How many entries fit inline. `null` until the first measurement lands. */
32
156
  const [fitCount, setFitCount] = useState(null);
157
+ const isVertical = placement === ChartLegendPlacement.RIGHT;
33
158
  const recompute = useCallback(() => {
34
- const row = rowRef.current;
159
+ const list = listRef.current;
35
160
  const measure = measureRef.current;
36
- if (!row || !measure) return;
161
+ if (!list || !measure) return;
37
162
  const rendered = Array.from(measure.children);
38
163
  const trigger = rendered.pop();
39
164
  if (!trigger) return;
40
- const available = vertical ? verticalExtent || Number.POSITIVE_INFINITY : row.clientWidth - inset;
41
- const sizeOf = (el) => {
42
- const rect = el.getBoundingClientRect();
43
- return Math.ceil(vertical ? rect.height : rect.width);
165
+ const available = isVertical ? extent || Number.POSITIVE_INFINITY : list.clientWidth - inset - (hasFilterSlot ? 240 : 0);
166
+ const sizeOf = (element) => {
167
+ const rect = element.getBoundingClientRect();
168
+ return Math.ceil(isVertical ? rect.height : rect.width);
44
169
  };
45
170
  const sizes = rendered.map(sizeOf);
46
171
  if (sizes.reduce((sum, size) => sum + size, 0) <= available) {
@@ -50,117 +175,110 @@ var ChartLegend = ({ items, inset, hoveredKey = null, vertical = false, vertical
50
175
  const triggerSize = sizeOf(trigger);
51
176
  let used = 0;
52
177
  let count = 0;
53
- for (const [i, size] of sizes.entries()) {
178
+ for (const [index, size] of sizes.entries()) {
54
179
  used += size;
55
180
  if (used + triggerSize > available) break;
56
- count = i + 1;
181
+ count = index + 1;
57
182
  }
58
183
  setFitCount(Math.max(1, count));
59
184
  }, [
185
+ isVertical,
186
+ extent,
60
187
  inset,
61
- vertical,
62
- verticalExtent
188
+ hasFilterSlot
63
189
  ]);
64
- useLayoutEffect(() => {
190
+ useIsomorphicLayoutEffect(() => {
65
191
  recompute();
66
- }, [
67
- recompute,
68
- items,
69
- maxItems
70
- ]);
71
- useLayoutEffect(() => {
72
- const row = rowRef.current;
73
- if (!row) return;
192
+ }, [recompute, items]);
193
+ useIsomorphicLayoutEffect(() => {
194
+ const list = listRef.current;
195
+ if (!list || typeof ResizeObserver === "undefined") return;
74
196
  const observer = new ResizeObserver(() => recompute());
75
- observer.observe(row);
197
+ observer.observe(list);
76
198
  return () => observer.disconnect();
77
199
  }, [recompute]);
78
200
  if (items.length === 0) return null;
79
- const isInteractive = Boolean(onItemEnter);
80
- const activeKey = hoveredKey;
81
- const renderItem = (item, verticalPadding) => {
82
- const state = activeKey === null || item.key === activeKey ? ChartMarkState.ACTIVE : ChartMarkState.MUTED;
83
- const content = /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx(Circle, {
84
- size: 8,
85
- hex: item.color
86
- }), /* @__PURE__ */ jsx(Text, {
87
- size: TextSize.BODY_SM,
88
- children: item.label
89
- })] });
90
- if (!isInteractive) return /* @__PURE__ */ jsx(ChartLegendItemStatic, {
91
- $vertical: verticalPadding,
92
- "data-state": state,
93
- children: content
94
- }, item.key);
95
- return /* @__PURE__ */ jsx(ChartLegendItemButton, {
96
- type: "button",
97
- $vertical: verticalPadding,
98
- "data-state": state,
99
- onMouseEnter: () => onItemEnter?.(item.key),
100
- onMouseLeave: () => onItemLeave?.(),
101
- onFocus: () => onItemEnter?.(item.key),
102
- onBlur: () => onItemLeave?.(),
103
- children: content
104
- }, item.key);
201
+ const inline = items.slice(0, fitCount ?? items.length);
202
+ const overflow = items.slice(inline.length);
203
+ const triggerState = overflow.some((item) => getEntryState(item.key) === ChartMarkState.ACTIVE) ? ChartMarkState.ACTIVE : ChartMarkState.MUTED;
204
+ const variables = {
205
+ "--gx-chart-legend-inset": `${inset}px`,
206
+ ...isVertical && extent > 0 && isFixedExtent && { "--gx-chart-legend-extent": `${extent}px` }
105
207
  };
106
- const capFromProp = maxItems === void 0 ? items.length : Math.max(1, maxItems);
107
- const capFromFit = fitCount === null ? items.length : fitCount;
108
- const inlineItems = items.slice(0, Math.min(capFromProp, capFromFit));
109
- const overflowItems = items.slice(inlineItems.length);
110
- /**
111
- * The trigger holds full strength while a *collapsed* series is engaged — the
112
- * one visual cue that the isolated series lives behind it — and recedes with
113
- * the other entries when a visible one is.
114
- */
115
- const isOverflowEngaged = activeKey !== null && overflowItems.some((item) => item.key === activeKey);
116
- const triggerState = activeKey === null || isOverflowEngaged ? ChartMarkState.ACTIVE : ChartMarkState.MUTED;
117
- return /* @__PURE__ */ jsxs(ChartLegendRow, {
118
- ref: rowRef,
119
- $inset: inset,
120
- $vertical: vertical,
121
- $extent: verticalExtent,
208
+ return /* @__PURE__ */ jsxs(Root, { children: [/* @__PURE__ */ jsx(MeasureClip, {
209
+ "aria-hidden": "true",
210
+ children: /* @__PURE__ */ jsxs(Measure, {
211
+ ref: measureRef,
212
+ className: MEASURE_PLACEMENT_TO_CSS_MAP[placement],
213
+ children: [items.map((item) => /* @__PURE__ */ jsx(Entry, {
214
+ as: "div",
215
+ item,
216
+ swatch,
217
+ isVertical,
218
+ state: ChartMarkState.ACTIVE
219
+ }, item.key)), /* @__PURE__ */ jsx(Flex, {
220
+ as: "div",
221
+ padding: isVertical ? [4, 0] : [
222
+ 0,
223
+ 16,
224
+ 0,
225
+ 0
226
+ ],
227
+ children: /* @__PURE__ */ jsx(Text, {
228
+ size: TextSize.BODY_SM,
229
+ variant: TextVariant.SECONDARY,
230
+ children: `+${items.length - 1} more`
231
+ })
232
+ })]
233
+ })
234
+ }), /* @__PURE__ */ jsxs(List, {
235
+ ref: listRef,
236
+ className: CHART_LEGEND_PLACEMENT_TO_LIST_CSS_MAP[placement],
237
+ style: variables,
122
238
  children: [
123
- /* @__PURE__ */ jsx(ChartLegendMeasureClip, { children: /* @__PURE__ */ jsxs(ChartLegendMeasure, {
124
- ref: measureRef,
125
- $vertical: vertical,
126
- "aria-hidden": "true",
127
- children: [items.map((item) => /* @__PURE__ */ jsxs(ChartLegendItemStatic, {
128
- $vertical: vertical,
129
- children: [/* @__PURE__ */ jsx(Circle, {
130
- size: 8,
131
- hex: item.color
132
- }), /* @__PURE__ */ jsx(Text, {
133
- size: TextSize.BODY_SM,
134
- children: item.label
135
- })]
136
- }, item.key)), /* @__PURE__ */ jsx(ChartLegendItemStatic, {
137
- $vertical: vertical,
138
- children: /* @__PURE__ */ jsx(Text, {
139
- size: TextSize.BODY_SM,
140
- variant: TextVariant.SECONDARY,
141
- children: `+${items.length - 1} more`
142
- })
143
- })]
144
- }) }),
145
- inlineItems.map((item) => renderItem(item, vertical)),
146
- overflowItems.length > 0 && /* @__PURE__ */ jsx(Tooltip, {
147
- isInteractive: true,
148
- position: vertical ? TooltipPosition.RIGHT : TooltipPosition.TOP,
149
- variant: TooltipVariant.TERTIARY,
150
- body: /* @__PURE__ */ jsx(ChartLegendOverflowList, { children: overflowItems.map((item) => renderItem(item, true)) }),
151
- children: /* @__PURE__ */ jsx(ChartLegendItemButton, {
152
- type: "button",
153
- $vertical: vertical,
154
- "data-state": triggerState,
155
- children: /* @__PURE__ */ jsx(Text, {
156
- size: TextSize.BODY_SM,
157
- variant: TextVariant.SECONDARY,
158
- children: `+${overflowItems.length} more`
239
+ inline.map((item) => /* @__PURE__ */ jsx(Entry, {
240
+ item,
241
+ swatch,
242
+ isVertical,
243
+ state: getEntryState(item.key),
244
+ isPinned: isEntryPinned?.(item.key) ?? false,
245
+ onEnter: () => onItemEnter(item.key),
246
+ onLeave: onItemLeave,
247
+ onClick: onItemClick && ((isAdditive) => onItemClick(item.key, isAdditive))
248
+ }, item.key)),
249
+ overflow.length > 0 && /* @__PURE__ */ jsx(Flex, {
250
+ as: "li",
251
+ alignItems: AlignItems.CENTER,
252
+ className: cx(ENTRY_CSS, CHART_MARK_STATE_TO_CSS_MAP[triggerState]),
253
+ children: /* @__PURE__ */ jsx(Tooltip, {
254
+ placement: isVertical ? Placement.RIGHT : Placement.TOP,
255
+ body: /* @__PURE__ */ jsx(OverflowList, { children: overflow.map((item) => /* @__PURE__ */ jsx(Entry, {
256
+ item,
257
+ swatch,
258
+ isVertical: true,
259
+ state: getEntryState(item.key),
260
+ isPinned: isEntryPinned?.(item.key) ?? false,
261
+ onEnter: () => onItemEnter(item.key),
262
+ onLeave: onItemLeave
263
+ }, item.key)) }),
264
+ children: /* @__PURE__ */ jsx("button", {
265
+ type: "button",
266
+ className: TRIGGER_CSS,
267
+ children: /* @__PURE__ */ jsx(Text, {
268
+ size: TextSize.BODY_SM,
269
+ variant: TextVariant.SECONDARY,
270
+ children: `+${overflow.length} more`
271
+ })
159
272
  })
160
273
  })
274
+ }),
275
+ hasFilterSlot && /* @__PURE__ */ jsx(FilterSlot, {
276
+ className: FILTER_SLOT_PLACEMENT_TO_CSS_MAP[placement],
277
+ "aria-hidden": filter === null || void 0,
278
+ children: filter
161
279
  })
162
280
  ]
163
- });
164
- };
281
+ })] });
282
+ }
165
283
  //#endregion
166
- export { ChartLegend as default };
284
+ export { ChartLegend, ChartLegendSwatch };
@@ -1,30 +1,14 @@
1
- import type { ChartMarkTarget } from "./types";
2
- import type { ChartInteraction } from "./useChartInteraction";
3
- /**
4
- * The mark hit layer: one transparent target per rendered mark, above the
5
- * category targets.
6
- *
7
- * Exists so a click can name a single segment — the red block of the 00:00 bar
8
- * — where the category layer beneath can only name the column. Rendered by the
9
- * charts that have marks worth distinguishing: BarChart does, LineChart has no
10
- * segments to hit, and PieChart's category targets already *are* its arcs.
11
- *
12
- * **Hover is not refined here.** Each target reports its own category on enter,
13
- * exactly as the band underneath would, so the tooltip reads the same index
14
- * whichever layer the pointer is over and holds still while crossing a stack.
15
- * The banded hover is deliberate — it makes a two-pixel segment as easy to
16
- * hover as a two-hundred-pixel one — and this layer only adds a finer *click*.
17
- *
18
- * Anything the marks do not cover falls through to the category target: the
19
- * gutters, the plot above a short bar, and the hairline gaps between stack
20
- * segments. That is the documented fallback, and it is why a segment too small
21
- * to hit still selects something sensible.
22
- */
23
- interface ChartMarkTargetsProps {
1
+ import { type ChartMarkTarget } from "./types.js";
2
+ /** @internal Props of `ChartMarkTargets`. */
3
+ export interface ChartMarkTargetsProps {
4
+ /** One target per mark. */
24
5
  targets: ChartMarkTarget[];
25
- interaction: ChartInteraction;
26
- /** Supplying this makes the marks clickable, cursor included. */
27
- onSelect?: (markIndex: number) => void;
6
+ /** Pointer entered a mark: engages its category. */
7
+ onEnter: (categoryIndex: number) => void;
8
+ /** Pointer left the target layers (moving between targets is not leaving). */
9
+ onLeave: () => void;
10
+ /** Click on a mark, by its index in `targets` (additive with ⌘ / Ctrl / Shift). */
11
+ onSelect: (markIndex: number, isAdditive: boolean) => void;
28
12
  }
29
- declare const ChartMarkTargets: ({ targets, interaction, onSelect }: ChartMarkTargetsProps) => import("react").JSX.Element;
30
- export default ChartMarkTargets;
13
+ /** @internal The mark hit layer. */
14
+ export declare function ChartMarkTargets({ targets, onEnter, onLeave, onSelect }: ChartMarkTargetsProps): import("react").JSX.Element;
@@ -1,24 +1,38 @@
1
1
  import { ChartTargetShape } from "./types.js";
2
- import { ChartHitTarget, ChartHitTargetPath } from "./ChartPrimitives.js";
3
- import { match } from "ts-pattern";
2
+ import { CHART_HIT_TARGET_CLICKABLE_CSS, CHART_HIT_TARGET_CSS, leaveUnlessTarget } from "./ChartPrimitives.js";
3
+ import { isAdditiveEvent } from "./chartSelection.js";
4
4
  import { Fragment, jsx } from "react/jsx-runtime";
5
+ import { cx } from "@linaria/core";
5
6
  //#region src/charts/ChartMarkTargets.tsx
6
- var ChartMarkTargets = ({ targets, interaction, onSelect }) => /* @__PURE__ */ jsx(Fragment, { children: targets.map((target, index) => {
7
- const shared = {
8
- onMouseEnter: () => interaction.onCategoryEnter(target.categoryIndex),
9
- onClick: onSelect === void 0 ? void 0 : () => onSelect(index),
10
- "data-clickable": onSelect === void 0 ? void 0 : "true"
11
- };
12
- return match(target).with({ shape: ChartTargetShape.RECT }, (rect) => /* @__PURE__ */ jsx(ChartHitTarget, {
13
- x: rect.x,
14
- y: rect.y,
15
- width: rect.width,
16
- height: rect.height,
17
- ...shared
18
- }, rect.key)).with({ shape: ChartTargetShape.PATH }, (path) => /* @__PURE__ */ jsx(ChartHitTargetPath, {
19
- d: path.d,
20
- ...shared
21
- }, path.key)).exhaustive();
22
- }) });
7
+ /**
8
+ * @internal The mark hit layer: one transparent target per rendered mark, above the category
9
+ * targets, so a click can name one segment where the band beneath names only its column. Hover is
10
+ * not refined: each target reports its own category on enter, exactly as the band would. Anything
11
+ * the marks do not cover falls through to the category target. Rendered only when the chart has
12
+ * a click handler (BarChart); LineChart has no per-category segment to hit.
13
+ */
14
+ /** @internal The mark hit layer. */
15
+ function ChartMarkTargets({ targets, onEnter, onLeave, onSelect }) {
16
+ const className = cx(CHART_HIT_TARGET_CSS, CHART_HIT_TARGET_CLICKABLE_CSS);
17
+ return /* @__PURE__ */ jsx(Fragment, { children: targets.map((target, index) => {
18
+ const handlers = {
19
+ onMouseEnter: () => onEnter(target.categoryIndex),
20
+ onMouseLeave: (event) => leaveUnlessTarget(event, onLeave),
21
+ onClick: (event) => onSelect(index, isAdditiveEvent(event))
22
+ };
23
+ return target.shape === ChartTargetShape.RECT ? /* @__PURE__ */ jsx("rect", {
24
+ x: target.x,
25
+ y: target.y,
26
+ width: Math.max(0, target.width),
27
+ height: Math.max(0, target.height),
28
+ className,
29
+ ...handlers
30
+ }, target.key) : /* @__PURE__ */ jsx("path", {
31
+ d: target.d,
32
+ className,
33
+ ...handlers
34
+ }, target.key);
35
+ }) });
36
+ }
23
37
  //#endregion
24
- export { ChartMarkTargets as default };
38
+ export { ChartMarkTargets };