@galaxy-io/dls 1.6.0 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (538) hide show
  1. package/README.md +47 -50
  2. package/biome/index.json +74 -0
  3. package/biome/plugins/no-hex-literal.grit +20 -0
  4. package/biome/plugins/no-inline-style.grit +13 -0
  5. package/biome/plugins/no-margin.grit +9 -0
  6. package/biome/plugins/warn/no-hex-literal.grit +23 -0
  7. package/biome/plugins/warn/no-inline-style.grit +13 -0
  8. package/biome/plugins/warn/no-margin.grit +9 -0
  9. package/dist/a11y/FocusScope.d.ts +44 -0
  10. package/dist/a11y/FocusScope.js +229 -0
  11. package/dist/a11y/VisuallyHidden.d.ts +21 -0
  12. package/dist/a11y/VisuallyHidden.js +30 -0
  13. package/dist/avatar/Avatar.d.ts +56 -14
  14. package/dist/avatar/Avatar.js +250 -96
  15. package/dist/avatar/AvatarGroup.d.ts +43 -0
  16. package/dist/avatar/AvatarGroup.js +153 -0
  17. package/dist/backgrounds/GridBackground.d.ts +48 -0
  18. package/dist/backgrounds/GridBackground.js +146 -0
  19. package/dist/beacons/Beacon.d.ts +86 -22
  20. package/dist/beacons/Beacon.js +170 -47
  21. package/dist/brand/GalaxyFilamentWordmark.d.ts +30 -0
  22. package/dist/brand/GalaxyFilamentWordmark.js +39 -0
  23. package/dist/brand/GalaxyLogomark.d.ts +26 -0
  24. package/dist/brand/GalaxyLogomark.js +41 -0
  25. package/dist/brand/GalaxyLogomarkAnimation.d.ts +36 -0
  26. package/dist/brand/GalaxyLogomarkAnimation.js +107 -0
  27. package/dist/brand/GalaxyWordmark.d.ts +30 -0
  28. package/dist/brand/GalaxyWordmark.js +63 -0
  29. package/dist/brand/assets/galaxy-logomark-animation.js +136678 -0
  30. package/dist/brand/brandMark.d.ts +26 -0
  31. package/dist/brand/brandMark.js +35 -0
  32. package/dist/buttons/Button.d.ts +148 -59
  33. package/dist/buttons/Button.js +437 -227
  34. package/dist/buttons/ButtonGroup.d.ts +38 -0
  35. package/dist/buttons/ButtonGroup.js +68 -0
  36. package/dist/buttons/CopyButton.d.ts +77 -0
  37. package/dist/buttons/CopyButton.js +65 -0
  38. package/dist/charts/AreaChart.d.ts +49 -0
  39. package/dist/charts/AreaChart.js +31 -0
  40. package/dist/charts/BarChart.d.ts +54 -67
  41. package/dist/charts/BarChart.js +136 -116
  42. package/dist/charts/ChartAxis.d.ts +35 -40
  43. package/dist/charts/ChartAxis.js +114 -90
  44. package/dist/charts/ChartCategoryTargets.d.ts +12 -26
  45. package/dist/charts/ChartCategoryTargets.js +32 -20
  46. package/dist/charts/ChartFrame.d.ts +69 -116
  47. package/dist/charts/ChartFrame.js +253 -119
  48. package/dist/charts/ChartGroupProvider.d.ts +30 -41
  49. package/dist/charts/ChartGroupProvider.js +20 -7
  50. package/dist/charts/ChartLegend.d.ts +27 -48
  51. package/dist/charts/ChartLegend.js +206 -125
  52. package/dist/charts/ChartMarkTargets.d.ts +12 -28
  53. package/dist/charts/ChartMarkTargets.js +33 -20
  54. package/dist/charts/ChartPrimitives.d.ts +50 -305
  55. package/dist/charts/ChartPrimitives.js +65 -413
  56. package/dist/charts/ChartTooltip.d.ts +20 -26
  57. package/dist/charts/ChartTooltip.js +77 -40
  58. package/dist/charts/Heatmap.d.ts +35 -0
  59. package/dist/charts/Heatmap.js +295 -0
  60. package/dist/charts/LineChart.d.ts +54 -47
  61. package/dist/charts/LineChart.js +159 -117
  62. package/dist/charts/PieChart.d.ts +32 -53
  63. package/dist/charts/PieChart.js +149 -135
  64. package/dist/charts/Sparkline.d.ts +107 -0
  65. package/dist/charts/Sparkline.js +244 -0
  66. package/dist/charts/StatChart.d.ts +37 -13
  67. package/dist/charts/StatChart.js +82 -35
  68. package/dist/charts/barChartGeometry.d.ts +138 -86
  69. package/dist/charts/barChartGeometry.js +122 -101
  70. package/dist/charts/barChartLegend.d.ts +14 -18
  71. package/dist/charts/barChartLegend.js +18 -13
  72. package/dist/charts/chartFormat.d.ts +12 -18
  73. package/dist/charts/chartFormat.js +20 -52
  74. package/dist/charts/chartPalette.d.ts +33 -0
  75. package/dist/charts/chartPalette.js +68 -0
  76. package/dist/charts/chartScales.d.ts +41 -108
  77. package/dist/charts/chartScales.js +62 -128
  78. package/dist/charts/constants.d.ts +96 -256
  79. package/dist/charts/constants.js +105 -275
  80. package/dist/charts/heatmapGeometry.d.ts +95 -0
  81. package/dist/charts/heatmapGeometry.js +155 -0
  82. package/dist/charts/lineChartGeometry.d.ts +108 -58
  83. package/dist/charts/lineChartGeometry.js +120 -78
  84. package/dist/charts/pieChartGeometry.d.ts +66 -40
  85. package/dist/charts/pieChartGeometry.js +68 -38
  86. package/dist/charts/types.d.ts +197 -466
  87. package/dist/charts/types.js +55 -144
  88. package/dist/charts/useCartesianChartLayout.d.ts +28 -59
  89. package/dist/charts/useCartesianChartLayout.js +47 -32
  90. package/dist/charts/useChartDimensions.d.ts +19 -40
  91. package/dist/charts/useChartDimensions.js +40 -56
  92. package/dist/charts/useChartFormatters.d.ts +6 -15
  93. package/dist/charts/useChartFormatters.js +4 -9
  94. package/dist/charts/useChartInteraction.d.ts +47 -116
  95. package/dist/charts/useChartInteraction.js +95 -71
  96. package/dist/charts/useChartTooltipPosition.d.ts +29 -39
  97. package/dist/charts/useChartTooltipPosition.js +14 -5
  98. package/dist/charts/useSeriesColorResolver.d.ts +11 -33
  99. package/dist/charts/useSeriesColorResolver.js +19 -12
  100. package/dist/chips/Chip.d.ts +155 -44
  101. package/dist/chips/Chip.js +329 -155
  102. package/dist/chips/ChipGroup.d.ts +53 -0
  103. package/dist/chips/ChipGroup.js +98 -0
  104. package/dist/drawer/Drawer.d.ts +81 -17
  105. package/dist/drawer/Drawer.js +370 -65
  106. package/dist/dropdown/Dropdown.d.ts +80 -63
  107. package/dist/dropdown/Dropdown.js +127 -129
  108. package/dist/editor/CodeEditor.d.ts +119 -40
  109. package/dist/editor/CodeEditor.js +490 -400
  110. package/dist/editor/CodeEditorReactWidget.d.ts +20 -17
  111. package/dist/editor/CodeEditorReactWidget.js +28 -21
  112. package/dist/feedback/Alert.d.ts +49 -0
  113. package/dist/feedback/Alert.js +172 -0
  114. package/dist/feedback/EmptyState.d.ts +39 -0
  115. package/dist/feedback/EmptyState.js +109 -0
  116. package/dist/feedback/ProgressBar.d.ts +125 -0
  117. package/dist/feedback/ProgressBar.js +183 -0
  118. package/dist/feedback/ProgressCircle.d.ts +99 -0
  119. package/dist/feedback/ProgressCircle.js +187 -0
  120. package/dist/feedback/Skeleton.d.ts +69 -0
  121. package/dist/feedback/Skeleton.js +130 -0
  122. package/dist/feedback/Spinner.d.ts +63 -0
  123. package/dist/feedback/Spinner.js +141 -0
  124. package/dist/fonts.css +70 -0
  125. package/dist/hooks/internal/useIsClient.d.ts +2 -0
  126. package/dist/hooks/internal/useIsClient.js +14 -0
  127. package/dist/hooks/useClipboard.d.ts +19 -0
  128. package/dist/hooks/useClipboard.js +45 -0
  129. package/dist/hooks/useControlledOpenState.d.ts +21 -0
  130. package/dist/hooks/useControlledOpenState.js +19 -0
  131. package/dist/hooks/useControlledState.d.ts +19 -0
  132. package/dist/hooks/useControlledState.js +22 -0
  133. package/dist/hooks/useDebouncedValue.d.ts +14 -0
  134. package/dist/hooks/useDebouncedValue.js +33 -0
  135. package/dist/hooks/useDisclosure.d.ts +26 -0
  136. package/dist/hooks/useDisclosure.js +36 -0
  137. package/dist/hooks/useDismiss.d.ts +23 -27
  138. package/dist/hooks/useDismiss.js +39 -27
  139. package/dist/hooks/useElementClientSize.d.ts +10 -10
  140. package/dist/hooks/useElementClientSize.js +8 -11
  141. package/dist/hooks/useElementWidth.d.ts +6 -13
  142. package/dist/hooks/useElementWidth.js +6 -14
  143. package/dist/hooks/useField.d.ts +47 -0
  144. package/dist/hooks/useField.js +40 -0
  145. package/dist/hooks/useHotkey.d.ts +77 -0
  146. package/dist/hooks/useHotkey.js +246 -0
  147. package/dist/hooks/useIsMac.d.ts +12 -0
  148. package/dist/hooks/useIsMac.js +27 -0
  149. package/dist/hooks/useIsomorphicLayoutEffect.d.ts +17 -0
  150. package/dist/hooks/useIsomorphicLayoutEffect.js +20 -0
  151. package/dist/hooks/useLocalStorage.d.ts +28 -0
  152. package/dist/hooks/useLocalStorage.js +145 -0
  153. package/dist/hooks/useMediaQuery.d.ts +11 -0
  154. package/dist/hooks/useMediaQuery.js +23 -0
  155. package/dist/hooks/usePrefersReducedMotion.d.ts +12 -0
  156. package/dist/hooks/usePrefersReducedMotion.js +25 -0
  157. package/dist/hooks/useResize.d.ts +42 -62
  158. package/dist/hooks/useResize.js +43 -31
  159. package/dist/icons/Icon.d.ts +64 -37
  160. package/dist/icons/Icon.js +96 -37
  161. package/dist/icons/internal/IconSlot.d.ts +10 -0
  162. package/dist/icons/internal/IconSlot.js +32 -0
  163. package/dist/inputs/CheckboxGroup.d.ts +115 -0
  164. package/dist/inputs/CheckboxGroup.js +183 -0
  165. package/dist/inputs/CheckboxInput.d.ts +98 -28
  166. package/dist/inputs/CheckboxInput.js +218 -88
  167. package/dist/inputs/ColorInput.d.ts +115 -29
  168. package/dist/inputs/ColorInput.js +748 -326
  169. package/dist/inputs/CopyInput.d.ts +49 -20
  170. package/dist/inputs/CopyInput.js +57 -49
  171. package/dist/inputs/CronInput.d.ts +94 -0
  172. package/dist/inputs/CronInput.js +618 -0
  173. package/dist/inputs/DateInput.d.ts +175 -28
  174. package/dist/inputs/DateInput.js +1109 -451
  175. package/dist/inputs/DurationInput.d.ts +101 -0
  176. package/dist/inputs/DurationInput.js +441 -0
  177. package/dist/inputs/Field.d.ts +75 -0
  178. package/dist/inputs/Field.js +247 -0
  179. package/dist/inputs/Fieldset.d.ts +53 -0
  180. package/dist/inputs/Fieldset.js +149 -0
  181. package/dist/inputs/FileInput.d.ts +110 -0
  182. package/dist/inputs/FileInput.js +476 -0
  183. package/dist/inputs/Input.d.ts +148 -187
  184. package/dist/inputs/Input.js +339 -259
  185. package/dist/inputs/KeyValueInput.d.ts +120 -0
  186. package/dist/inputs/KeyValueInput.js +383 -0
  187. package/dist/inputs/MultiSelectInput.d.ts +165 -54
  188. package/dist/inputs/MultiSelectInput.js +175 -559
  189. package/dist/inputs/NumberInput.d.ts +65 -9
  190. package/dist/inputs/NumberInput.js +197 -40
  191. package/dist/inputs/PasswordInput.d.ts +17 -12
  192. package/dist/inputs/PasswordInput.js +33 -33
  193. package/dist/inputs/PinInput.d.ts +117 -0
  194. package/dist/inputs/PinInput.js +364 -0
  195. package/dist/inputs/RadioGroup.d.ts +115 -0
  196. package/dist/inputs/RadioGroup.js +179 -0
  197. package/dist/inputs/RadioInput.d.ts +87 -24
  198. package/dist/inputs/RadioInput.js +182 -95
  199. package/dist/inputs/SearchInput.d.ts +66 -0
  200. package/dist/inputs/SearchInput.js +156 -0
  201. package/dist/inputs/SelectInput.d.ts +195 -55
  202. package/dist/inputs/SelectInput.js +1308 -446
  203. package/dist/inputs/SliderInput.d.ts +150 -30
  204. package/dist/inputs/SliderInput.js +441 -186
  205. package/dist/inputs/SwitchInput.d.ts +109 -0
  206. package/dist/inputs/SwitchInput.js +248 -0
  207. package/dist/inputs/TagInput.d.ts +117 -0
  208. package/dist/inputs/TagInput.js +408 -0
  209. package/dist/inputs/TextAreaInput.d.ts +146 -44
  210. package/dist/inputs/TextAreaInput.js +292 -198
  211. package/dist/inputs/TextInput.d.ts +4 -13
  212. package/dist/inputs/TextInput.js +13 -48
  213. package/dist/inputs/ToggleInput.d.ts +120 -22
  214. package/dist/inputs/ToggleInput.js +262 -116
  215. package/dist/inputs/internal/bareField.d.ts +18 -0
  216. package/dist/inputs/internal/bareField.js +38 -0
  217. package/dist/inputs/internal/devWarn.d.ts +7 -0
  218. package/dist/inputs/internal/devWarn.js +30 -0
  219. package/dist/inputs/internal/fieldFrame.d.ts +34 -0
  220. package/dist/inputs/internal/fieldFrame.js +64 -0
  221. package/dist/inputs/internal/fieldWiring.d.ts +50 -0
  222. package/dist/inputs/internal/fieldWiring.js +38 -0
  223. package/dist/inputs/internal/innerButton.d.ts +2 -0
  224. package/dist/inputs/internal/innerButton.js +24 -0
  225. package/dist/inputs/internal/ownField.d.ts +45 -0
  226. package/dist/inputs/internal/ownField.js +58 -0
  227. package/dist/inputs/internal/predicates.d.ts +9 -0
  228. package/dist/inputs/internal/predicates.js +11 -0
  229. package/dist/inputs/internal/useComboboxPopover.d.ts +46 -0
  230. package/dist/inputs/internal/useComboboxPopover.js +92 -0
  231. package/dist/json/JsonViewer.d.ts +62 -0
  232. package/dist/json/JsonViewer.js +483 -0
  233. package/dist/layout/Box.d.ts +87 -0
  234. package/dist/layout/Box.js +109 -0
  235. package/dist/layout/Divider.d.ts +25 -0
  236. package/dist/layout/Divider.js +70 -0
  237. package/dist/layout/Flex.d.ts +139 -0
  238. package/dist/layout/Flex.js +165 -0
  239. package/dist/layout/FlexItem.d.ts +72 -0
  240. package/dist/layout/FlexItem.js +84 -0
  241. package/dist/layout/Grid.d.ts +140 -0
  242. package/dist/layout/Grid.js +178 -0
  243. package/dist/layout/Portal.d.ts +29 -0
  244. package/dist/layout/Portal.js +27 -0
  245. package/dist/layout/ResizablePanels.d.ts +88 -0
  246. package/dist/layout/ResizablePanels.js +198 -0
  247. package/dist/layout/ResizeHandle.d.ts +48 -0
  248. package/dist/layout/ResizeHandle.js +143 -0
  249. package/dist/layout/ScrollArea.d.ts +30 -0
  250. package/dist/layout/ScrollArea.js +138 -0
  251. package/dist/links/Link.d.ts +101 -1
  252. package/dist/links/Link.js +166 -4
  253. package/dist/lists/BulletedList.d.ts +25 -7
  254. package/dist/lists/BulletedList.js +72 -27
  255. package/dist/lists/DescriptionList.d.ts +91 -0
  256. package/dist/lists/DescriptionList.js +147 -0
  257. package/dist/menu/ContextMenu.d.ts +64 -0
  258. package/dist/menu/ContextMenu.js +34 -0
  259. package/dist/menu/Menu.d.ts +280 -0
  260. package/dist/menu/Menu.js +1003 -0
  261. package/dist/modal/ConfirmDialog.d.ts +55 -0
  262. package/dist/modal/ConfirmDialog.js +151 -0
  263. package/dist/modal/Modal.d.ts +64 -14
  264. package/dist/modal/Modal.js +189 -48
  265. package/dist/navigation/Breadcrumbs.d.ts +65 -0
  266. package/dist/navigation/Breadcrumbs.js +243 -0
  267. package/dist/navigation/CommandPalette.d.ts +83 -0
  268. package/dist/navigation/CommandPalette.js +509 -0
  269. package/dist/navigation/Pagination.d.ts +87 -0
  270. package/dist/navigation/Pagination.js +300 -0
  271. package/dist/navigation/SidebarNav.d.ts +107 -0
  272. package/dist/navigation/SidebarNav.js +341 -0
  273. package/dist/navigation/Stepper.d.ts +52 -0
  274. package/dist/navigation/Stepper.js +207 -0
  275. package/dist/navigation/Tabs.d.ts +113 -0
  276. package/dist/navigation/Tabs.js +543 -0
  277. package/dist/navigation/Topbar.d.ts +20 -0
  278. package/dist/navigation/Topbar.js +62 -0
  279. package/dist/overlay/OverlayProvider.d.ts +28 -32
  280. package/dist/overlay/OverlayProvider.js +42 -93
  281. package/dist/overlay/useOverlay.d.ts +88 -12
  282. package/dist/overlay/useOverlay.js +220 -43
  283. package/dist/overlays/Popover.d.ts +114 -0
  284. package/dist/overlays/Popover.js +389 -0
  285. package/dist/shapes/Circle.d.ts +84 -8
  286. package/dist/shapes/Circle.js +122 -20
  287. package/dist/shapes/Square.d.ts +84 -8
  288. package/dist/shapes/Square.js +123 -20
  289. package/dist/styles/mixins.d.ts +35 -0
  290. package/dist/styles/mixins.js +60 -0
  291. package/dist/styles.css +1 -202
  292. package/dist/table/InfiniteSpreadsheet.d.ts +140 -10
  293. package/dist/table/InfiniteSpreadsheet.js +762 -225
  294. package/dist/table/InfiniteTable.d.ts +116 -14
  295. package/dist/table/InfiniteTable.js +287 -429
  296. package/dist/table/SpreadsheetCellEditor.d.ts +54 -6
  297. package/dist/table/SpreadsheetCellEditor.js +163 -84
  298. package/dist/table/TableCore.d.ts +252 -0
  299. package/dist/table/TableCore.js +1077 -0
  300. package/dist/table/VirtualizedInfiniteTable.d.ts +104 -14
  301. package/dist/table/VirtualizedInfiniteTable.js +280 -219
  302. package/dist/table/types.d.ts +66 -244
  303. package/dist/table/types.js +0 -51
  304. package/dist/table/useInfiniteScrollSentinel.d.ts +25 -21
  305. package/dist/table/useInfiniteScrollSentinel.js +38 -30
  306. package/dist/table/useSpreadsheetCellNavigation.d.ts +44 -0
  307. package/dist/table/useSpreadsheetCellNavigation.js +141 -0
  308. package/dist/table/useTableColumnLayout.d.ts +90 -25
  309. package/dist/table/useTableColumnLayout.js +255 -50
  310. package/dist/table/useTableKeyboardNavigation.d.ts +32 -21
  311. package/dist/table/useTableKeyboardNavigation.js +95 -71
  312. package/dist/table/useTableRowSelection.d.ts +24 -25
  313. package/dist/table/useTableRowSelection.js +57 -84
  314. package/dist/table/useTableVirtualizer.d.ts +20 -0
  315. package/dist/table/useTableVirtualizer.js +48 -0
  316. package/dist/text/Bold.d.ts +5 -6
  317. package/dist/text/Bold.js +16 -15
  318. package/dist/text/Code.d.ts +5 -6
  319. package/dist/text/Code.js +16 -25
  320. package/dist/text/CodeBlock.d.ts +77 -0
  321. package/dist/text/CodeBlock.js +373 -0
  322. package/dist/text/EditableText.d.ts +55 -15
  323. package/dist/text/EditableText.js +153 -135
  324. package/dist/text/Ellipsis.d.ts +34 -8
  325. package/dist/text/Ellipsis.js +55 -23
  326. package/dist/text/Kbd.d.ts +72 -0
  327. package/dist/text/Kbd.js +284 -0
  328. package/dist/text/MarkdownText.d.ts +27 -10
  329. package/dist/text/MarkdownText.js +317 -300
  330. package/dist/text/RequiredMarker.d.ts +17 -5
  331. package/dist/text/RequiredMarker.js +34 -36
  332. package/dist/text/Selectable.d.ts +5 -6
  333. package/dist/text/Selectable.js +16 -13
  334. package/dist/text/Span.d.ts +82 -0
  335. package/dist/text/Span.js +115 -0
  336. package/dist/text/Text.d.ts +128 -41
  337. package/dist/text/Text.js +209 -76
  338. package/dist/theme/GalaxyProvider.d.ts +75 -0
  339. package/dist/theme/GalaxyProvider.js +223 -0
  340. package/dist/theme/ThemeSwitcher.d.ts +52 -0
  341. package/dist/theme/ThemeSwitcher.js +94 -0
  342. package/dist/theme/enums.d.ts +118 -0
  343. package/dist/theme/enums.js +144 -0
  344. package/dist/theme/tokens/dark.d.ts +2 -0
  345. package/dist/theme/tokens/dark.js +275 -0
  346. package/dist/theme/tokens/generate.d.ts +15 -0
  347. package/dist/theme/tokens/generate.js +47 -0
  348. package/dist/theme/tokens/light.d.ts +2 -0
  349. package/dist/theme/tokens/light.js +274 -0
  350. package/dist/theme/tokens/palette.d.ts +14 -0
  351. package/dist/theme/tokens/palette.js +153 -0
  352. package/dist/theme/tokens/scales.d.ts +26 -0
  353. package/dist/theme/tokens/scales.js +154 -0
  354. package/dist/theme/tokens/t.d.ts +3 -0
  355. package/dist/theme/tokens/t.js +25 -0
  356. package/dist/theme/tokens/types.d.ts +189 -0
  357. package/dist/theme/tokens/types.js +0 -0
  358. package/dist/theme/useGalaxyTheme.d.ts +46 -0
  359. package/dist/theme/useGalaxyTheme.js +36 -0
  360. package/dist/theme/useInverseScope.d.ts +18 -0
  361. package/dist/theme/useInverseScope.js +33 -0
  362. package/dist/three/GalaxyLogomark3D.d.ts +46 -0
  363. package/dist/three/GalaxyLogomark3D.js +134 -0
  364. package/dist/three/assets/galaxy-logomark.js +4 -0
  365. package/dist/three/galaxyLogomark3DScene.d.ts +27 -0
  366. package/dist/three/galaxyLogomark3DScene.js +165 -0
  367. package/dist/timeline/Timeline.d.ts +99 -0
  368. package/dist/timeline/Timeline.js +269 -0
  369. package/dist/toast/Toast.d.ts +43 -19
  370. package/dist/toast/Toast.js +130 -89
  371. package/dist/toast/ToastProvider.d.ts +23 -23
  372. package/dist/toast/ToastProvider.js +298 -101
  373. package/dist/toast/ToastViewport.d.ts +12 -0
  374. package/dist/toast/ToastViewport.js +210 -0
  375. package/dist/toast/useToast.d.ts +139 -5
  376. package/dist/toast/useToast.js +15 -13
  377. package/dist/tokens.css +654 -0
  378. package/dist/tooltip/Tooltip.d.ts +64 -44
  379. package/dist/tooltip/Tooltip.js +280 -73
  380. package/dist/tooltip/internal/LazyTooltip.d.ts +7 -0
  381. package/dist/tooltip/internal/LazyTooltip.js +53 -0
  382. package/dist/transform/Fade.d.ts +33 -11
  383. package/dist/transform/Fade.js +71 -19
  384. package/dist/transform/Flasher.d.ts +25 -0
  385. package/dist/transform/Flasher.js +39 -0
  386. package/dist/transform/Rotate.d.ts +24 -12
  387. package/dist/transform/Rotate.js +36 -22
  388. package/dist/transform/ScaleFade.d.ts +36 -11
  389. package/dist/transform/ScaleFade.js +86 -28
  390. package/dist/transform/internal/CollapseMotion.d.ts +10 -0
  391. package/dist/transform/internal/CollapseMotion.js +65 -0
  392. package/dist/tree/Tree.d.ts +85 -0
  393. package/dist/tree/Tree.js +387 -0
  394. package/dist/tree/treeRow.d.ts +39 -0
  395. package/dist/tree/treeRow.js +75 -0
  396. package/dist/utils/colors.d.ts +46 -13
  397. package/dist/utils/colors.js +92 -34
  398. package/dist/utils/css.d.ts +23 -0
  399. package/dist/utils/css.js +30 -0
  400. package/dist/utils/format.d.ts +58 -0
  401. package/dist/utils/format.js +220 -0
  402. package/dist/vite/index.d.ts +16 -0
  403. package/dist/vite/index.js +52 -0
  404. package/dist/widget/Widget.d.ts +164 -48
  405. package/dist/widget/Widget.js +335 -96
  406. package/dist/widget/WidgetGroup.d.ts +36 -0
  407. package/dist/widget/WidgetGroup.js +103 -0
  408. package/package.json +851 -157
  409. package/dist/accordion/Accordion.d.ts +0 -54
  410. package/dist/accordion/Accordion.js +0 -183
  411. package/dist/assets/components/GalaxyFilamentWordmarkDark.d.ts +0 -3
  412. package/dist/assets/components/GalaxyFilamentWordmarkDark.js +0 -14
  413. package/dist/assets/components/GalaxyFilamentWordmarkLight.d.ts +0 -3
  414. package/dist/assets/components/GalaxyFilamentWordmarkLight.js +0 -14
  415. package/dist/assets/components/GalaxyLogomarkDark.d.ts +0 -3
  416. package/dist/assets/components/GalaxyLogomarkDark.js +0 -11
  417. package/dist/assets/components/GalaxyLogomarkLight.d.ts +0 -3
  418. package/dist/assets/components/GalaxyLogomarkLight.js +0 -17
  419. package/dist/assets/components/GalaxyWordmarkDark.d.ts +0 -3
  420. package/dist/assets/components/GalaxyWordmarkDark.js +0 -15
  421. package/dist/assets/components/GalaxyWordmarkLight.d.ts +0 -3
  422. package/dist/assets/components/GalaxyWordmarkLight.js +0 -28
  423. package/dist/assets/models/galaxy-animation.js +0 -136666
  424. package/dist/assets/models/galaxy-logomark.js +0 -4
  425. package/dist/avatar/AvatarShimmer.d.ts +0 -30
  426. package/dist/avatar/AvatarShimmer.js +0 -22
  427. package/dist/backgrounds/CellGridBackground.d.ts +0 -24
  428. package/dist/backgrounds/CellGridBackground.js +0 -44
  429. package/dist/backgrounds/CrossGridBackground.d.ts +0 -26
  430. package/dist/backgrounds/CrossGridBackground.js +0 -49
  431. package/dist/backgrounds/DotGridBackground.d.ts +0 -24
  432. package/dist/backgrounds/DotGridBackground.js +0 -47
  433. package/dist/badge/Badge.d.ts +0 -42
  434. package/dist/badge/Badge.js +0 -99
  435. package/dist/charts/ChartEmptyState.d.ts +0 -17
  436. package/dist/charts/ChartEmptyState.js +0 -29
  437. package/dist/charts/ProgressBar.d.ts +0 -29
  438. package/dist/charts/ProgressBar.js +0 -65
  439. package/dist/charts/chartTheme.d.ts +0 -18
  440. package/dist/charts/chartTheme.js +0 -26
  441. package/dist/containers/FlexItem.d.ts +0 -50
  442. package/dist/containers/FlexItem.js +0 -91
  443. package/dist/containers/FlexWrapper.d.ts +0 -96
  444. package/dist/containers/FlexWrapper.js +0 -143
  445. package/dist/containers/GridWrapper.d.ts +0 -79
  446. package/dist/containers/GridWrapper.js +0 -125
  447. package/dist/containers/Spacing.d.ts +0 -23
  448. package/dist/containers/Spacing.js +0 -59
  449. package/dist/containers/Wrapper.d.ts +0 -26
  450. package/dist/containers/Wrapper.js +0 -54
  451. package/dist/dividers/HorizontalDivider.d.ts +0 -7
  452. package/dist/dividers/HorizontalDivider.js +0 -39
  453. package/dist/dividers/VerticalDivider.d.ts +0 -6
  454. package/dist/dividers/VerticalDivider.js +0 -21
  455. package/dist/icons/GalaxyFilamentWordmark.d.ts +0 -11
  456. package/dist/icons/GalaxyFilamentWordmark.js +0 -25
  457. package/dist/icons/GalaxyLogomark.d.ts +0 -13
  458. package/dist/icons/GalaxyLogomark.js +0 -27
  459. package/dist/icons/GalaxyLogomark3D.d.ts +0 -56
  460. package/dist/icons/GalaxyLogomark3D.js +0 -319
  461. package/dist/icons/GalaxyLogomarkAnimation.d.ts +0 -18
  462. package/dist/icons/GalaxyLogomarkAnimation.js +0 -48
  463. package/dist/icons/GalaxyWordmark.d.ts +0 -11
  464. package/dist/icons/GalaxyWordmark.js +0 -25
  465. package/dist/inputs/MultiTextInput.d.ts +0 -32
  466. package/dist/inputs/MultiTextInput.js +0 -180
  467. package/dist/inputs/SwitcherInput.d.ts +0 -27
  468. package/dist/inputs/SwitcherInput.js +0 -64
  469. package/dist/inputs/hooks.d.ts +0 -10
  470. package/dist/inputs/hooks.js +0 -22
  471. package/dist/overlay/constants.d.ts +0 -28
  472. package/dist/overlay/constants.js +0 -37
  473. package/dist/resizable/HorizontalResizeHandle.d.ts +0 -17
  474. package/dist/resizable/HorizontalResizeHandle.js +0 -38
  475. package/dist/resizable/VerticalResizeHandle.d.ts +0 -18
  476. package/dist/resizable/VerticalResizeHandle.js +0 -39
  477. package/dist/table/SpreadsheetCell.d.ts +0 -21
  478. package/dist/table/SpreadsheetCell.js +0 -71
  479. package/dist/table/SpreadsheetHeaderCell.d.ts +0 -23
  480. package/dist/table/SpreadsheetHeaderCell.js +0 -91
  481. package/dist/table/SpreadsheetMenuItem.d.ts +0 -14
  482. package/dist/table/SpreadsheetMenuItem.js +0 -33
  483. package/dist/table/SpreadsheetPrimitives.d.ts +0 -172
  484. package/dist/table/SpreadsheetPrimitives.js +0 -105
  485. package/dist/table/SpreadsheetRow.d.ts +0 -33
  486. package/dist/table/SpreadsheetRow.js +0 -73
  487. package/dist/table/SpreadsheetRowActionCell.d.ts +0 -14
  488. package/dist/table/SpreadsheetRowActionCell.js +0 -51
  489. package/dist/table/TableExpandCell.d.ts +0 -11
  490. package/dist/table/TableExpandCell.js +0 -24
  491. package/dist/table/TableExpandedRow.d.ts +0 -16
  492. package/dist/table/TableExpandedRow.js +0 -77
  493. package/dist/table/TableHeaderCellContent.d.ts +0 -30
  494. package/dist/table/TableHeaderCellContent.js +0 -48
  495. package/dist/table/TablePrimitives.d.ts +0 -313
  496. package/dist/table/TablePrimitives.js +0 -302
  497. package/dist/table/TableSelectCell.d.ts +0 -18
  498. package/dist/table/TableSelectCell.js +0 -27
  499. package/dist/table/TableStatusRow.d.ts +0 -18
  500. package/dist/table/TableStatusRow.js +0 -50
  501. package/dist/table/useSpreadsheetEditing.d.ts +0 -13
  502. package/dist/table/useSpreadsheetEditing.js +0 -41
  503. package/dist/table/useTableColumnResize.d.ts +0 -38
  504. package/dist/table/useTableColumnResize.js +0 -155
  505. package/dist/table/useTableRowExpansion.d.ts +0 -24
  506. package/dist/table/useTableRowExpansion.js +0 -62
  507. package/dist/table/utils.d.ts +0 -50
  508. package/dist/table/utils.js +0 -78
  509. package/dist/text/HotKeys.d.ts +0 -30
  510. package/dist/text/HotKeys.js +0 -74
  511. package/dist/text/Paragraph.d.ts +0 -33
  512. package/dist/text/Paragraph.js +0 -83
  513. package/dist/text/TextShimmer.d.ts +0 -14
  514. package/dist/text/TextShimmer.js +0 -34
  515. package/dist/theme/GalaxyTheme.d.ts +0 -67
  516. package/dist/theme/GalaxyTheme.js +0 -119
  517. package/dist/theme/constants.d.ts +0 -8
  518. package/dist/theme/constants.js +0 -38
  519. package/dist/theme/index.d.ts +0 -6
  520. package/dist/theme/index.js +0 -7
  521. package/dist/theme/types.d.ts +0 -195
  522. package/dist/theme/types.js +0 -10
  523. package/dist/theme/typography.d.ts +0 -2
  524. package/dist/theme/typography.js +0 -73
  525. package/dist/theme/variants/dark.d.ts +0 -2
  526. package/dist/theme/variants/dark.js +0 -125
  527. package/dist/theme/variants/light.d.ts +0 -2
  528. package/dist/theme/variants/light.js +0 -125
  529. package/dist/toast/ToastContainer.d.ts +0 -10
  530. package/dist/toast/ToastContainer.js +0 -31
  531. package/dist/toast/ToastWrapper.d.ts +0 -6
  532. package/dist/toast/ToastWrapper.js +0 -27
  533. package/dist/transform/Flash.d.ts +0 -7
  534. package/dist/transform/Flash.js +0 -18
  535. package/dist/transform/Spin.d.ts +0 -14
  536. package/dist/transform/Spin.js +0 -25
  537. package/dist/utils/linaria.d.ts +0 -1
  538. package/dist/utils/linaria.js +0 -8
@@ -1,18 +1,60 @@
1
- export interface AvatarProps {
2
- /** Image URL. Falls back to the generated pattern when null or missing. */
1
+ import { type AriaAttributes, type CSSProperties } from "react";
2
+ import type { Hex, PaletteColor } from "../theme/tokens/types.js";
3
+ /** Canonical rungs; the diameter is the control height of the rung. */
4
+ export declare enum AvatarSize {
5
+ /** 20px (`size.control.xSmall`); initials `caption`. */
6
+ X_SMALL = "X_SMALL",
7
+ /** 24px (`size.control.small`); initials `body_sm`. */
8
+ SMALL = "SMALL",
9
+ /** 32px (`size.control.medium`); initials `body_md`. The default. */
10
+ MEDIUM = "MEDIUM",
11
+ /** 36px (`size.control.large`); initials `body_lg`. */
12
+ LARGE = "LARGE",
13
+ /** 40px (`size.control.xLarge`); initials `body_lg`. */
14
+ X_LARGE = "X_LARGE"
15
+ }
16
+ export interface AvatarProps extends AriaAttributes {
17
+ /** Name of the person or entity. It gives the initials fallback and the accessible name. */
18
+ name?: string;
19
+ /** Image URL. When it is missing, `null`, or fails to load, the fallback shows. */
3
20
  img?: string | null;
4
- /** Render the shimmer placeholder instead. */
5
- isLoading?: boolean;
6
- /** Square size in px. @default 16 */
7
- size?: number;
8
- /** Override the generated pattern's color. */
9
- hex?: string;
10
- /** Input to the generated pattern — same seed always yields the same avatar. */
21
+ /** Input to the generated dot pattern: the same seed always draws the same pattern. When set, the fallback is the pattern instead of the initials. */
11
22
  seed?: string;
23
+ /**
24
+ * Diameter: a control rung (20 / 24 / 32 / 36 / 40px), or a number of px for avatars off the
25
+ * scale. Prefer the rungs, and use even numbers so contents center on whole pixels.
26
+ * @default AvatarSize.MEDIUM
27
+ */
28
+ size?: AvatarSize | number;
29
+ /**
30
+ * Square with `radius.md` corners instead of round. Use it for entities (workspaces, projects, sources), not people.
31
+ * @default false
32
+ */
33
+ isSquare?: boolean;
34
+ /**
35
+ * Categorical palette family (`"blue"`, `"violet"`, …) that tints the fallback: the initials
36
+ * and pattern take `text.<family>`, the surface `background.<family>` with a `border.<family>`
37
+ * hairline. An image avatar is unaffected. Ignored with `hex`.
38
+ */
39
+ color?: PaletteColor;
40
+ /** Raw color for the fallback (pattern dots and initials). Discouraged: it does not follow the theme. Use it only for data-driven colors. Overrides `color`. */
41
+ hex?: Hex;
42
+ /**
43
+ * Shows a pulsing `Skeleton` in the avatar's exact shape and box instead of the avatar.
44
+ * @default false
45
+ */
46
+ isLoading?: boolean;
47
+ /** Accessible name, when it should differ from `name` (for example "Ada Lovelace, owner"). Without it and without `name`, the avatar is decorative (`aria-hidden`). */
48
+ ariaLabel?: string;
49
+ /** DOM id on the root `<span>`. */
50
+ id?: string;
51
+ /** Any `data-*` attribute, forwarded to the root `<span>`. */
52
+ [dataAttribute: `data-${string}`]: string | number | boolean | undefined;
53
+ /** Extra class on the root `<span>`. */
54
+ className?: string;
55
+ /** Inline style on the root `<span>`; only for setting CSS custom properties. Merged after `--gx-avatar-size` / `--gx-avatar-hex`. */
56
+ style?: CSSProperties;
12
57
  }
13
- /**
14
- * A user or entity avatar. Falls back to a dot pattern derived from `seed` when
15
- * there's no image, so the same user is always recognizable without one.
16
- */
17
- declare const Avatar: ({ img, isLoading, size, hex, seed }: AvatarProps) => import("react").JSX.Element;
58
+ /** A person or entity: image, initials or generated pattern, round or square. */
59
+ declare const Avatar: import("react").ForwardRefExoticComponent<AvatarProps & import("react").RefAttributes<HTMLSpanElement>>;
18
60
  export default Avatar;
@@ -1,45 +1,155 @@
1
- import { useGalaxyTheme, withTheme } from "../theme/GalaxyTheme.js";
2
- import { getDarkerHexColor, getLighterHexColor, getOpaqueHexColor } from "../utils/colors.js";
3
- import AvatarShimmer from "./AvatarShimmer.js";
1
+ import Skeleton, { SkeletonVariant } from "../feedback/Skeleton.js";
2
+ import Text, { TextSize, TextVariant, TextWeight } from "../text/Text.js";
3
+ import { CONTROL_SIZE } from "../theme/tokens/scales.js";
4
4
  /* empty css */
5
5
  import { styled } from "@linaria/react";
6
- import { useCallback, useMemo, useState } from "react";
6
+ import { forwardRef, useEffect, useMemo, useRef, useState } from "react";
7
7
  import { jsx } from "react/jsx-runtime";
8
+ import { cx } from "@linaria/core";
8
9
  //#region src/avatar/Avatar.tsx
9
- var _exp2 = () => ({ $size }) => $size;
10
- var _exp3 = () => ({ theme }) => theme.color.border.primary;
11
- var _exp4 = () => ({ theme }) => theme.color.background.secondary;
12
- var AvatarSurface = withTheme(/*#__PURE__*/ styled("div")({
13
- name: "AvatarSurface",
14
- class: "ave5wdp",
15
- propsAsIs: false,
16
- vars: {
17
- "ave5wdp-0": [_exp2(), "px"],
18
- "ave5wdp-1": [_exp3()],
19
- "ave5wdp-2": [_exp4()]
20
- }
21
- }));
22
- var AvatarImage = /*#__PURE__*/ styled("img")({
23
- name: "AvatarImage",
24
- class: "a3r0r1h",
10
+ /**
11
+ * The small picture that stands for one person or one entity beside its name. It shows `img` when
12
+ * there is one and it loads; otherwise a fallback: the initials of `name`, or the 1.x generated dot
13
+ * pattern derived from `seed`, so the same user or project always looks the same without an image.
14
+ * Round by default (people), square with `isSquare` (entities), with a `Skeleton` stand-in while
15
+ * `isLoading`.
16
+ *
17
+ * Color is CSS, not JS: the pattern's five tones are `currentColor` tones (`color-mix`,
18
+ * `fill-opacity`); a categorical `color` tints the fallback through `AVATAR_COLOR_TO_CSS_MAP`
19
+ * (`--gx-avatar-tint`, the surface fill and hairline) and `hex` is the `--gx-avatar-hex` custom
20
+ * property, so a theme switch needs no re-render and nothing reads the theme at runtime.
21
+ *
22
+ * Not a button (wrap it in one), not a stack (`AvatarGroup`), not a name label (put a `Text`
23
+ * beside it), not a generic image container.
24
+ */
25
+ /** Canonical rungs; the diameter is the control height of the rung. */
26
+ var AvatarSize = /* @__PURE__ */ function(AvatarSize) {
27
+ /** 20px (`size.control.xSmall`); initials `caption`. */
28
+ AvatarSize["X_SMALL"] = "X_SMALL";
29
+ /** 24px (`size.control.small`); initials `body_sm`. */
30
+ AvatarSize["SMALL"] = "SMALL";
31
+ /** 32px (`size.control.medium`); initials `body_md`. The default. */
32
+ AvatarSize["MEDIUM"] = "MEDIUM";
33
+ /** 36px (`size.control.large`); initials `body_lg`. */
34
+ AvatarSize["LARGE"] = "LARGE";
35
+ /** 40px (`size.control.xLarge`); initials `body_lg`. */
36
+ AvatarSize["X_LARGE"] = "X_LARGE";
37
+ return AvatarSize;
38
+ }({});
39
+ /**
40
+ * The avatar's box. Phrasing content, so it is valid inside `Text`, a `<button>` or a `<label>`.
41
+ * It does not clip; `Surface` clips.
42
+ */
43
+ var Root = /*#__PURE__*/ styled("span")({
44
+ name: "Root",
45
+ class: "gx-Avatar-rve5wdp",
25
46
  propsAsIs: false
26
47
  });
27
- var _exp6 = () => ({ $dotSize }) => $dotSize;
28
- var _exp7 = () => ({ $color }) => $color;
29
- var _exp8 = () => ({ $x }) => $x;
30
- var _exp9 = () => ({ $y }) => $y;
31
- var Dot = /*#__PURE__*/ styled("div")({
32
- name: "Dot",
33
- class: "d1n32hoy",
34
- propsAsIs: false,
35
- vars: {
36
- "d1n32hoy-0": [_exp6(), "px"],
37
- "d1n32hoy-1": [_exp7()],
38
- "d1n32hoy-2": [_exp8(), "px"],
39
- "d1n32hoy-3": [_exp9(), "px"]
40
- }
48
+ /** The neutral disc (or square) holding exactly one of the image, the initials or the pattern. */
49
+ var Surface = /*#__PURE__*/ styled("span")({
50
+ name: "Surface",
51
+ class: "gx-Avatar-Surface-s3r0r1h",
52
+ propsAsIs: false
41
53
  });
42
- var seededRandom = (seed) => {
54
+ var Image = /*#__PURE__*/ styled("img")({
55
+ name: "Image",
56
+ class: "gx-Avatar-Image-i1n32hoy",
57
+ propsAsIs: false
58
+ });
59
+ /** The generated pattern: one `viewBox` grid that scales to any diameter. Tinted by `hex` or `color`. */
60
+ var Pattern = /*#__PURE__*/ styled("svg")({
61
+ name: "Pattern",
62
+ class: "gx-Avatar-Pattern-p94shpk",
63
+ propsAsIs: false
64
+ });
65
+ /** Diameter per rung. */
66
+ var AVATAR_SIZE_TO_CSS_MAP = {
67
+ ["X_SMALL"]: "gx-Avatar-X_SMALL-xblj6sc",
68
+ ["SMALL"]: "gx-Avatar-SMALL-s116bpx4",
69
+ ["MEDIUM"]: "gx-Avatar-MEDIUM-m1ykihtn",
70
+ ["LARGE"]: "gx-Avatar-LARGE-l1vt38m2",
71
+ ["X_LARGE"]: "gx-Avatar-X_LARGE-xjtmhfq"
72
+ };
73
+ /** A px diameter, set as `--gx-avatar-size` in `style` (a continuous value). */
74
+ var PX_SIZE_CSS = "gx-Avatar-PX_SIZE_CSS-ptukwhw";
75
+ /** `isSquare`: control-radius corners at every size. */
76
+ var SQUARE_CSS = "gx-Avatar-SQUARE_CSS-sdv3w7l";
77
+ /** The initials' color, which the `INHERIT` text takes. Tinted by `hex` or `color`. */
78
+ var INITIALS_CSS = "gx-Avatar-INITIALS_CSS-i1c3dn12";
79
+ /** Categorical `color` on the fallback surface: the tint the initials and pattern read, the family's fill and hairline. */
80
+ var AVATAR_COLOR_TO_CSS_MAP = {
81
+ red: "gx-Avatar-red-r63z1lx",
82
+ orange: "gx-Avatar-orange-o1x7b2uf",
83
+ amber: "gx-Avatar-amber-az59h18",
84
+ yellow: "gx-Avatar-yellow-y1y5rsmb",
85
+ lime: "gx-Avatar-lime-lzxsfel",
86
+ green: "gx-Avatar-green-g414m3u",
87
+ emerald: "gx-Avatar-emerald-e1uew7pg",
88
+ teal: "gx-Avatar-teal-t6z9q1b",
89
+ cyan: "gx-Avatar-cyan-chef53l",
90
+ sky: "gx-Avatar-sky-s1o5jkv9",
91
+ blue: "gx-Avatar-blue-be52zro",
92
+ indigo: "gx-Avatar-indigo-i9qjv1q",
93
+ violet: "gx-Avatar-violet-v6zn1e0",
94
+ purple: "gx-Avatar-purple-pc3yopb",
95
+ fuchsia: "gx-Avatar-fuchsia-fzee674",
96
+ pink: "gx-Avatar-pink-p1f7v2mb",
97
+ rose: "gx-Avatar-rose-r87xw4u"
98
+ };
99
+ /**
100
+ * The pattern's five tones of `currentColor`, indexed by the PRNG (a palette index, not an enum
101
+ * axis). They replace the 1.x JS color math: base, lighter, darker, 30% and 15% opaque.
102
+ */
103
+ var PATTERN_TONE_CSS = [
104
+ "gx-Avatar-PATTERN_TONE_CSS-p17r187b",
105
+ "gx-Avatar-PATTERN_TONE_CSS-p9ksu8k",
106
+ "gx-Avatar-PATTERN_TONE_CSS-p1ql1bax",
107
+ "gx-Avatar-PATTERN_TONE_CSS-p12sxa1c",
108
+ "gx-Avatar-PATTERN_TONE_CSS-pq3238h"
109
+ ];
110
+ /** Initials text per rung (Constitution III-A.4): lines 12 / 16 / 16 / 20 / 20px, so whole-pixel offsets. */
111
+ var AVATAR_SIZE_TO_TEXT_SIZE_MAP = {
112
+ ["X_SMALL"]: TextSize.CAPTION,
113
+ ["SMALL"]: TextSize.BODY_SM,
114
+ ["MEDIUM"]: TextSize.BODY_MD,
115
+ ["LARGE"]: TextSize.BODY_LG,
116
+ ["X_LARGE"]: TextSize.BODY_LG
117
+ };
118
+ /** Rung diameters in px for JS logic, resolved from `CONTROL_SIZE` (the token source). */
119
+ var AVATAR_SIZE_TO_DIAMETER_PX_MAP = {
120
+ ["X_SMALL"]: Number.parseFloat(CONTROL_SIZE.xSmall),
121
+ ["SMALL"]: Number.parseFloat(CONTROL_SIZE.small),
122
+ ["MEDIUM"]: Number.parseFloat(CONTROL_SIZE.medium),
123
+ ["LARGE"]: Number.parseFloat(CONTROL_SIZE.large),
124
+ ["X_LARGE"]: Number.parseFloat(CONTROL_SIZE.xLarge)
125
+ };
126
+ /** Px diameter → initials text step: the largest step whose minimum is ≤ the diameter. */
127
+ var AVATAR_PX_TO_TEXT_SIZE_STEPS = [
128
+ [80, TextSize.HEADING_LG],
129
+ [64, TextSize.HEADING_MD],
130
+ [48, TextSize.HEADING_SM],
131
+ [36, TextSize.BODY_LG],
132
+ [32, TextSize.BODY_MD],
133
+ [24, TextSize.BODY_SM],
134
+ [0, TextSize.CAPTION]
135
+ ];
136
+ /** Diameter → pattern grid (the 1.x thresholds): ≤ 24px → 5, ≤ 48px → 7, larger → 9. */
137
+ var PATTERN_GRID_STEPS = [[24, 5], [48, 7]];
138
+ var PATTERN_GRID_MAX = 9;
139
+ /** Pattern dot radius in grid cells (dot = 0.6 of a cell, as in 1.x). */
140
+ var PATTERN_DOT_RADIUS = .3;
141
+ /** Number of pattern tones (`PATTERN_TONE_CSS`). */
142
+ var PATTERN_TONE_COUNT = 5;
143
+ /** The initials text step for a px diameter. */
144
+ function getTextSizeForPx(px) {
145
+ return AVATAR_PX_TO_TEXT_SIZE_STEPS.find(([min]) => min <= px)?.[1] ?? TextSize.CAPTION;
146
+ }
147
+ /** The pattern grid for a diameter. */
148
+ function getPatternGrid(px) {
149
+ return PATTERN_GRID_STEPS.find(([max]) => px <= max)?.[1] ?? PATTERN_GRID_MAX;
150
+ }
151
+ /** The 1.x seeded PRNG, verbatim: a 32-bit string hash feeding an LCG. */
152
+ function seededRandom(seed) {
43
153
  let hash = 0;
44
154
  for (let i = 0; i < seed.length; i++) {
45
155
  const char = seed.charCodeAt(i);
@@ -50,71 +160,115 @@ var seededRandom = (seed) => {
50
160
  hash = hash * 1103515245 + 12345 & 2147483647;
51
161
  return hash / 2147483647;
52
162
  };
53
- };
163
+ }
164
+ /** The 1.x pattern: tones for the left half, row by row, mirrored onto the right half. */
165
+ function getPatternCells(seedValue, grid) {
166
+ const random = seededRandom(seedValue);
167
+ const halfCols = Math.ceil(grid / 2);
168
+ const cells = [];
169
+ for (let row = 0; row < grid; row++) {
170
+ const tones = [];
171
+ for (let col = 0; col < halfCols; col++) tones.push(Math.floor(random() * PATTERN_TONE_COUNT));
172
+ for (let col = 0; col < grid; col++) {
173
+ const tone = col < halfCols ? tones[col] : tones[grid - 1 - col];
174
+ cells.push({
175
+ key: `${row}-${col}`,
176
+ row,
177
+ col,
178
+ tone: tone ?? 0
179
+ });
180
+ }
181
+ }
182
+ return cells;
183
+ }
54
184
  /**
55
- * A user or entity avatar. Falls back to a dot pattern derived from `seed` when
56
- * there's no image, so the same user is always recognizable without one.
185
+ * Initials from `name`: one part keeps one or two characters whole, otherwise its first; two or
186
+ * more parts give the first character of the first and of the last part. Code points, upper-cased.
57
187
  */
58
- var Avatar = ({ img, isLoading, size = 16, hex, seed }) => {
59
- const { theme } = useGalaxyTheme();
188
+ function getInitials(name) {
189
+ if (name === void 0) return "";
190
+ const parts = name.trim().split(/\s+/).filter((part) => part.length > 0);
191
+ const first = parts[0];
192
+ if (first === void 0) return "";
193
+ const firstChars = Array.from(first);
194
+ if (parts.length === 1) return (firstChars.length <= 2 ? first : firstChars[0] ?? "").toLocaleUpperCase();
195
+ const last = parts[parts.length - 1] ?? "";
196
+ return `${firstChars[0] ?? ""}${Array.from(last)[0] ?? ""}`.toLocaleUpperCase();
197
+ }
198
+ /** A person or entity: image, initials or generated pattern, round or square. */
199
+ var Avatar = forwardRef(function Avatar({ name, img, seed, size = "MEDIUM", isSquare = false, color, hex, isLoading = false, ariaLabel, id, className, style, ...rest }, ref) {
200
+ const imageRef = useRef(null);
60
201
  const [failedSrc, setFailedSrc] = useState(null);
61
- const handleError = useCallback(() => {
62
- setFailedSrc(img ?? null);
202
+ useEffect(() => {
203
+ const image = imageRef.current;
204
+ if (image?.complete && image.naturalWidth === 0 && img) setFailedSrc(img);
63
205
  }, [img]);
64
- const dots = useMemo(() => {
65
- const baseHex = hex ?? theme.color.text.tertiary;
66
- const colors = [
67
- baseHex,
68
- getLighterHexColor(baseHex, 30),
69
- getDarkerHexColor(baseHex, 25),
70
- getOpaqueHexColor(baseHex, .3),
71
- getOpaqueHexColor(baseHex, .15)
72
- ];
73
- const gridSize = size <= 24 ? 5 : size <= 48 ? 7 : 9;
74
- const step = size / gridSize;
75
- const dotSize = Math.round(step * .6);
76
- const random = seededRandom(seed ?? hex ?? "default");
77
- const halfCols = Math.ceil(gridSize / 2);
78
- const pattern = [];
79
- for (let row = 0; row < gridSize; row++) {
80
- pattern[row] = [];
81
- for (let col = 0; col < halfCols; col++) pattern[row][col] = { colorIndex: Math.floor(random() * colors.length) };
82
- for (let col = halfCols; col < gridSize; col++) pattern[row][col] = pattern[row][gridSize - 1 - col];
83
- }
84
- const dotPositions = [];
85
- for (let row = 0; row < gridSize; row++) for (let col = 0; col < gridSize; col++) {
86
- const x = col * step + (step - dotSize) / 2;
87
- const y = row * step + (step - dotSize) / 2;
88
- dotPositions.push({
89
- x,
90
- y,
91
- color: colors[pattern[row][col].colorIndex],
92
- key: `${row}-${col}`
93
- });
94
- }
95
- return {
96
- dotSize,
97
- dotPositions
98
- };
99
- }, [
100
- size,
101
- hex,
102
- seed,
103
- theme
104
- ]);
105
- return /* @__PURE__ */ jsx(AvatarSurface, {
106
- $size: size,
107
- children: isLoading ? /* @__PURE__ */ jsx(AvatarShimmer, { size }) : Boolean(img) && failedSrc !== img ? /* @__PURE__ */ jsx(AvatarImage, {
108
- src: img,
109
- alt: "Avatar",
110
- onError: handleError
111
- }) : dots.dotPositions.map(({ x, y, color, key }) => /* @__PURE__ */ jsx(Dot, {
112
- $dotSize: dots.dotSize,
113
- $x: x,
114
- $y: y,
115
- $color: color
206
+ const isPx = typeof size === "number";
207
+ const diameter = isPx ? size : AVATAR_SIZE_TO_DIAMETER_PX_MAP[size];
208
+ const textSize = isPx ? getTextSizeForPx(size) : AVATAR_SIZE_TO_TEXT_SIZE_MAP[size];
209
+ const imageSrc = typeof img === "string" && img.length > 0 && img !== failedSrc ? img : void 0;
210
+ const hasImage = imageSrc !== void 0;
211
+ const initials = getInitials(name);
212
+ const isInitials = !hasImage && seed === void 0 && initials.length > 0;
213
+ const tintCss = color !== void 0 && hex === void 0 && !hasImage ? AVATAR_COLOR_TO_CSS_MAP[color] : void 0;
214
+ const seedValue = seed ?? hex ?? "default";
215
+ const grid = getPatternGrid(diameter);
216
+ const cells = useMemo(() => getPatternCells(seedValue, grid), [seedValue, grid]);
217
+ const accessibleName = ariaLabel ?? name;
218
+ const accessibility = accessibleName !== void 0 && accessibleName.length > 0 ? {
219
+ role: "img",
220
+ "aria-label": accessibleName
221
+ } : { "aria-hidden": true };
222
+ const variables = {};
223
+ if (isPx) variables["--gx-avatar-size"] = `${size}px`;
224
+ if (hex !== void 0) variables["--gx-avatar-hex"] = hex;
225
+ let content;
226
+ if (imageSrc !== void 0) content = /* @__PURE__ */ jsx(Image, {
227
+ ref: imageRef,
228
+ src: imageSrc,
229
+ alt: "",
230
+ onError: () => setFailedSrc(imageSrc)
231
+ });
232
+ else if (isInitials) content = /* @__PURE__ */ jsx(Text, {
233
+ as: "span",
234
+ size: textSize,
235
+ weight: TextWeight.MEDIUM,
236
+ variant: TextVariant.INHERIT,
237
+ children: initials
238
+ });
239
+ else content = /* @__PURE__ */ jsx(Pattern, {
240
+ viewBox: `0 0 ${grid} ${grid}`,
241
+ "aria-hidden": "true",
242
+ focusable: "false",
243
+ children: cells.map(({ key, row, col, tone }) => /* @__PURE__ */ jsx("circle", {
244
+ cx: col + .5,
245
+ cy: row + .5,
246
+ r: PATTERN_DOT_RADIUS,
247
+ className: PATTERN_TONE_CSS[tone]
116
248
  }, key))
117
249
  });
118
- };
250
+ const root = /* @__PURE__ */ jsx(Root, {
251
+ ...accessibility,
252
+ ...rest,
253
+ ref,
254
+ id,
255
+ className: cx(isPx ? PX_SIZE_CSS : AVATAR_SIZE_TO_CSS_MAP[size], isSquare && SQUARE_CSS, className),
256
+ style: {
257
+ ...variables,
258
+ ...style
259
+ },
260
+ children: /* @__PURE__ */ jsx(Surface, {
261
+ className: cx(tintCss, isInitials && INITIALS_CSS),
262
+ children: content
263
+ })
264
+ });
265
+ if (!isLoading) return root;
266
+ return /* @__PURE__ */ jsx(Skeleton, {
267
+ variant: isSquare ? SkeletonVariant.RECT : SkeletonVariant.CIRCLE,
268
+ isLoading: true,
269
+ children: root
270
+ });
271
+ });
272
+ Avatar.displayName = "Avatar";
119
273
  //#endregion
120
- export { Avatar as default };
274
+ export { AvatarSize, Avatar as default };
@@ -0,0 +1,43 @@
1
+ import { type AriaAttributes, type CSSProperties, type ReactNode } from "react";
2
+ /** Canonical rungs; the diameter of every avatar in the group is the rung's control height. */
3
+ export declare enum AvatarGroupSize {
4
+ /** 20px avatars, 4px overlap (16px step). */
5
+ X_SMALL = "X_SMALL",
6
+ /** 24px avatars, 8px overlap (16px step). */
7
+ SMALL = "SMALL",
8
+ /** 32px avatars, 8px overlap (24px step). The default. */
9
+ MEDIUM = "MEDIUM",
10
+ /** 36px avatars, 12px overlap (24px step). */
11
+ LARGE = "LARGE",
12
+ /** 40px avatars, 12px overlap (28px step). */
13
+ X_LARGE = "X_LARGE"
14
+ }
15
+ export interface AvatarGroupProps extends AriaAttributes {
16
+ /** The `Avatar` elements, in display order. Each one's `size` and `isSquare` are replaced by the group's. Non-element children are ignored. */
17
+ children?: ReactNode;
18
+ /** Most avatars to show. When there are more, the first `max` show and a `+N` tile stands for the rest. Floored; values below 1 show 1. Unset shows all. */
19
+ max?: number;
20
+ /**
21
+ * Rung of every avatar and of the `+N` tile (20 / 24 / 32 / 36 / 40px). It also sets the overlap.
22
+ * @default AvatarGroupSize.MEDIUM
23
+ */
24
+ size?: AvatarGroupSize;
25
+ /**
26
+ * Square avatars and `+N` tile (`radius.md`), for groups of entities.
27
+ * @default false
28
+ */
29
+ isSquare?: boolean;
30
+ /** Accessible name of the group (for example "Workspace members"). */
31
+ ariaLabel?: string;
32
+ /** DOM id on the root `<span>`. */
33
+ id?: string;
34
+ /** Any `data-*` attribute, forwarded to the root `<span>`. */
35
+ [dataAttribute: `data-${string}`]: string | number | boolean | undefined;
36
+ /** Extra class on the root `<span>`. */
37
+ className?: string;
38
+ /** Inline style on the root `<span>`; only for setting CSS custom properties. */
39
+ style?: CSSProperties;
40
+ }
41
+ /** A row of overlapping avatars, at most `max` of them, ending in a `+N` tile for the rest. */
42
+ declare const AvatarGroup: import("react").ForwardRefExoticComponent<AvatarGroupProps & import("react").RefAttributes<HTMLSpanElement>>;
43
+ export default AvatarGroup;
@@ -0,0 +1,153 @@
1
+ import Text, { TextSize, TextVariant, TextWeight } from "../text/Text.js";
2
+ import { AvatarSize } from "./Avatar.js";
3
+ import Tooltip from "../tooltip/Tooltip.js";
4
+ /* empty css */
5
+ import { styled } from "@linaria/react";
6
+ import { Children, cloneElement, forwardRef, isValidElement } from "react";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ import { cx } from "@linaria/core";
9
+ //#region src/avatar/AvatarGroup.tsx
10
+ /**
11
+ * A set of people or entities as one compact, overlapping row of `Avatar`s (a facepile). Every
12
+ * avatar takes the group's `size` and `isSquare`, they overlap by a fixed step per rung, at most
13
+ * `max` show, and a `+N` tile stands for the rest. Hovering a named avatar shows its name; the `+N`
14
+ * tile lists the hidden names in a tooltip and is a tab stop when it has names to show.
15
+ *
16
+ * The overlap is layout, not margins or transforms: each item is `diameter − overlap` wide and the
17
+ * last one is `auto`, so every avatar overflows into the next item, later items paint over earlier
18
+ * ones in DOM order, and the root's box is exactly the visible row.
19
+ *
20
+ * Not a member list ("show all" belongs to the host or a Popover), not interactive beyond the `+N`
21
+ * tile's tooltip, and it does not fetch or sort members.
22
+ */
23
+ /** Canonical rungs; the diameter of every avatar in the group is the rung's control height. */
24
+ var AvatarGroupSize = /* @__PURE__ */ function(AvatarGroupSize) {
25
+ /** 20px avatars, 4px overlap (16px step). */
26
+ AvatarGroupSize["X_SMALL"] = "X_SMALL";
27
+ /** 24px avatars, 8px overlap (16px step). */
28
+ AvatarGroupSize["SMALL"] = "SMALL";
29
+ /** 32px avatars, 8px overlap (24px step). The default. */
30
+ AvatarGroupSize["MEDIUM"] = "MEDIUM";
31
+ /** 36px avatars, 12px overlap (24px step). */
32
+ AvatarGroupSize["LARGE"] = "LARGE";
33
+ /** 40px avatars, 12px overlap (28px step). */
34
+ AvatarGroupSize["X_LARGE"] = "X_LARGE";
35
+ return AvatarGroupSize;
36
+ }({});
37
+ /** The row. Phrasing content, so a group is valid inside a `<button>` or inline in a cell. */
38
+ var Root = /*#__PURE__*/ styled("span")({
39
+ name: "Root",
40
+ class: "gx-AvatarGroup-razfxgq",
41
+ propsAsIs: false
42
+ });
43
+ /**
44
+ * One shown avatar (or the `+N` tile), one step wide so its content overflows into the next item.
45
+ * `position: relative` puts every item in the positioned paint layer, so later items paint over
46
+ * earlier ones in DOM order whatever they hold (an avatar, a loading Skeleton, the tile).
47
+ */
48
+ var Item = /*#__PURE__*/ styled("span")({
49
+ name: "Item",
50
+ class: "gx-AvatarGroup-Item-iva7ybl",
51
+ propsAsIs: false
52
+ });
53
+ /** The `+N` tile, styled as an initials avatar; a long count widens it into a pill. */
54
+ var Overflow = /*#__PURE__*/ styled("span")({
55
+ name: "Overflow",
56
+ class: "gx-AvatarGroup-Overflow-oie8ywq",
57
+ propsAsIs: false
58
+ });
59
+ /** `isSquare`: the tile's corners match a square avatar. */
60
+ var SQUARE_CSS = "gx-AvatarGroup-SQUARE_CSS-sebt40z";
61
+ /** Diameter and step (diameter − overlap) per rung; every step is a whole number of pixels. */
62
+ var AVATAR_GROUP_SIZE_TO_CSS_MAP = {
63
+ ["X_SMALL"]: "gx-AvatarGroup-X_SMALL-x164dxk",
64
+ ["SMALL"]: "gx-AvatarGroup-SMALL-surveac",
65
+ ["MEDIUM"]: "gx-AvatarGroup-MEDIUM-m1wq31ro",
66
+ ["LARGE"]: "gx-AvatarGroup-LARGE-lslwrbi",
67
+ ["X_LARGE"]: "gx-AvatarGroup-X_LARGE-xdshhax"
68
+ };
69
+ /** Every avatar takes the group's rung. */
70
+ var AVATAR_GROUP_SIZE_TO_AVATAR_SIZE_MAP = {
71
+ ["X_SMALL"]: AvatarSize.X_SMALL,
72
+ ["SMALL"]: AvatarSize.SMALL,
73
+ ["MEDIUM"]: AvatarSize.MEDIUM,
74
+ ["LARGE"]: AvatarSize.LARGE,
75
+ ["X_LARGE"]: AvatarSize.X_LARGE
76
+ };
77
+ /** The `+N` label: the same rung text as an Avatar's initials. */
78
+ var AVATAR_GROUP_SIZE_TO_TEXT_SIZE_MAP = {
79
+ ["X_SMALL"]: TextSize.CAPTION,
80
+ ["SMALL"]: TextSize.BODY_SM,
81
+ ["MEDIUM"]: TextSize.BODY_MD,
82
+ ["LARGE"]: TextSize.BODY_LG,
83
+ ["X_LARGE"]: TextSize.BODY_LG
84
+ };
85
+ /** Names shown in the `+N` tooltip before it ends with "…" (the `aria-label` lists all). */
86
+ var OVERFLOW_TOOLTIP_NAME_LIMIT = 10;
87
+ /** A child's non-empty string `name`, or `undefined`. */
88
+ function getName(child) {
89
+ const { name } = child.props;
90
+ return typeof name === "string" && name.length > 0 ? name : void 0;
91
+ }
92
+ /** `max` normalized: floored, at least 1; unset or non-finite shows all. */
93
+ function toShownCount(max, total) {
94
+ if (max === void 0 || !Number.isFinite(max)) return total;
95
+ return Math.min(total, Math.max(1, Math.floor(max)));
96
+ }
97
+ /** A row of overlapping avatars, at most `max` of them, ending in a `+N` tile for the rest. */
98
+ var AvatarGroup = forwardRef(function AvatarGroup({ children, max, size = "MEDIUM", isSquare = false, ariaLabel, id, className, style, ...rest }, ref) {
99
+ const items = Children.toArray(children).filter(isValidElement);
100
+ const shownCount = toShownCount(max, items.length);
101
+ const shown = items.slice(0, shownCount);
102
+ const hidden = items.slice(shownCount);
103
+ const hiddenNames = hidden.map(getName).filter((name) => name !== void 0);
104
+ const avatarSize = AVATAR_GROUP_SIZE_TO_AVATAR_SIZE_MAP[size];
105
+ const groupAccessibility = { role: "group" };
106
+ if (ariaLabel !== void 0) groupAccessibility["aria-label"] = ariaLabel;
107
+ let overflow = null;
108
+ if (hidden.length > 0) {
109
+ const hasTooltip = hiddenNames.length > 0;
110
+ const tile = /* @__PURE__ */ jsx(Overflow, {
111
+ role: "img",
112
+ "aria-label": hasTooltip ? `+${hidden.length}: ${hiddenNames.join(", ")}` : `+${hidden.length}`,
113
+ ...hasTooltip ? { tabIndex: 0 } : {},
114
+ className: cx(isSquare && SQUARE_CSS),
115
+ children: /* @__PURE__ */ jsx(Text, {
116
+ as: "span",
117
+ size: AVATAR_GROUP_SIZE_TO_TEXT_SIZE_MAP[size],
118
+ weight: TextWeight.MEDIUM,
119
+ variant: TextVariant.SECONDARY,
120
+ children: `+${hidden.length}`
121
+ })
122
+ });
123
+ const summary = hiddenNames.slice(0, OVERFLOW_TOOLTIP_NAME_LIMIT).join(", ") + (hiddenNames.length > OVERFLOW_TOOLTIP_NAME_LIMIT ? ", …" : "");
124
+ overflow = /* @__PURE__ */ jsx(Item, { children: hasTooltip ? /* @__PURE__ */ jsx(Tooltip, {
125
+ body: summary,
126
+ "aria-hidden": true,
127
+ children: tile
128
+ }) : tile });
129
+ }
130
+ return /* @__PURE__ */ jsxs(Root, {
131
+ ...groupAccessibility,
132
+ ...rest,
133
+ ref,
134
+ id,
135
+ className: cx(AVATAR_GROUP_SIZE_TO_CSS_MAP[size], className),
136
+ style,
137
+ children: [shown.map((child, index) => {
138
+ const clone = cloneElement(child, {
139
+ size: avatarSize,
140
+ isSquare
141
+ });
142
+ const name = getName(child);
143
+ return /* @__PURE__ */ jsx(Item, { children: name === void 0 ? clone : /* @__PURE__ */ jsx(Tooltip, {
144
+ body: name,
145
+ "aria-hidden": true,
146
+ children: clone
147
+ }) }, child.key ?? index);
148
+ }), overflow]
149
+ });
150
+ });
151
+ AvatarGroup.displayName = "AvatarGroup";
152
+ //#endregion
153
+ export { AvatarGroupSize, AvatarGroup as default };