@lablup/ui-common 0.1.0-alpha.9 → 0.2.0-alpha.15

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 (909) hide show
  1. package/NOTICE +62 -0
  2. package/README.md +490 -68
  3. package/astryx/components/AlertModal.doc.mjs +91 -0
  4. package/astryx/components/AlertModal.tsx +3 -0
  5. package/astryx/components/BoardItemTitle.doc.mjs +51 -0
  6. package/astryx/components/BoardItemTitle.tsx +3 -0
  7. package/astryx/components/BooleanToken.doc.mjs +57 -0
  8. package/astryx/components/BooleanToken.tsx +3 -0
  9. package/astryx/components/BulkEditFormItem.doc.mjs +68 -0
  10. package/astryx/components/BulkEditFormItem.tsx +3 -0
  11. package/astryx/components/BulkErrorModal.doc.mjs +75 -0
  12. package/astryx/components/BulkErrorModal.tsx +3 -0
  13. package/astryx/components/ColorPicker.doc.mjs +88 -0
  14. package/astryx/components/ColorPicker.tsx +3 -0
  15. package/astryx/components/ConfirmPopover.doc.mjs +99 -0
  16. package/astryx/components/ConfirmPopover.tsx +3 -0
  17. package/astryx/components/CountBadge.doc.mjs +93 -0
  18. package/astryx/components/CountBadge.tsx +3 -0
  19. package/astryx/components/CountdownBorder.doc.mjs +57 -0
  20. package/astryx/components/CountdownBorder.tsx +3 -0
  21. package/astryx/components/DataGrid.doc.mjs +166 -0
  22. package/astryx/components/DataGrid.tsx +3 -0
  23. package/astryx/components/DeleteConfirmModal.doc.mjs +163 -0
  24. package/astryx/components/DeleteConfirmModal.tsx +3 -0
  25. package/astryx/components/DividedRow.doc.mjs +85 -0
  26. package/astryx/components/DividedRow.tsx +3 -0
  27. package/astryx/components/DoubleBadge.doc.mjs +40 -0
  28. package/astryx/components/DoubleBadge.tsx +3 -0
  29. package/astryx/components/DoubleToken.doc.mjs +38 -0
  30. package/astryx/components/DoubleToken.tsx +3 -0
  31. package/astryx/components/Form.doc.mjs +113 -0
  32. package/astryx/components/Form.tsx +3 -0
  33. package/astryx/components/IconWithTooltip.doc.mjs +57 -0
  34. package/astryx/components/IconWithTooltip.tsx +3 -0
  35. package/astryx/components/ImageWithFallback.doc.mjs +47 -0
  36. package/astryx/components/ImageWithFallback.tsx +3 -0
  37. package/astryx/components/ListBanner.doc.mjs +50 -0
  38. package/astryx/components/ListBanner.tsx +3 -0
  39. package/astryx/components/Modal.doc.mjs +176 -0
  40. package/astryx/components/Modal.tsx +3 -0
  41. package/astryx/components/NotificationItem.doc.mjs +52 -0
  42. package/astryx/components/NotificationItem.tsx +3 -0
  43. package/astryx/components/NotificationStack.doc.mjs +66 -0
  44. package/astryx/components/NotificationStack.tsx +3 -0
  45. package/astryx/components/OverlayScrollbar.doc.mjs +49 -0
  46. package/astryx/components/OverlayScrollbar.tsx +3 -0
  47. package/astryx/components/PageHeader.doc.mjs +94 -0
  48. package/astryx/components/PageHeader.tsx +3 -0
  49. package/astryx/components/PagedSelector.doc.mjs +183 -0
  50. package/astryx/components/PagedSelector.tsx +3 -0
  51. package/astryx/components/ProgressWithLabel.doc.mjs +69 -0
  52. package/astryx/components/ProgressWithLabel.tsx +3 -0
  53. package/astryx/components/SelectionLabel.doc.mjs +55 -0
  54. package/astryx/components/SelectionLabel.tsx +3 -0
  55. package/astryx/components/Statistic.doc.mjs +84 -0
  56. package/astryx/components/Statistic.tsx +3 -0
  57. package/astryx/components/StepNumberInput.doc.mjs +102 -0
  58. package/astryx/components/StepNumberInput.tsx +3 -0
  59. package/astryx/components/TextHighlighter.doc.mjs +47 -0
  60. package/astryx/components/TextHighlighter.tsx +3 -0
  61. package/astryx/components/TokenList.doc.mjs +58 -0
  62. package/astryx/components/TokenList.tsx +3 -0
  63. package/astryx/components/TokenRow.doc.mjs +62 -0
  64. package/astryx/components/TokenRow.tsx +3 -0
  65. package/astryx/components/UncontrolledInput.doc.mjs +68 -0
  66. package/astryx/components/UncontrolledInput.tsx +3 -0
  67. package/astryx/components/UnitGrid.doc.mjs +107 -0
  68. package/astryx/components/UnitGrid.tsx +3 -0
  69. package/astryx/docs/ui-common.doc.mjs +112 -0
  70. package/astryx.integration.mjs +35 -0
  71. package/dist/assets/components/BoardItemTitle/BoardItemTitle.css +2 -0
  72. package/dist/assets/components/BulkErrorModal/BulkErrorModal.css +2 -0
  73. package/dist/assets/components/ColorPicker/ColorPicker.css +2 -0
  74. package/dist/assets/components/CountBadge/CountBadge.css +2 -0
  75. package/dist/assets/components/CountdownBorder/CountdownBorder.css +2 -0
  76. package/dist/assets/components/DataGrid/DataGrid.css +2 -0
  77. package/dist/assets/components/DeleteConfirmModal/DeleteConfirmModal.css +2 -0
  78. package/dist/assets/components/DigitPopIn/DigitPopIn.css +2 -0
  79. package/dist/assets/components/DividedRow/DividedRow.css +2 -0
  80. package/dist/assets/components/DoubleBadge/DoubleBadge.css +2 -0
  81. package/dist/assets/components/DoubleToken/DoubleToken.css +2 -0
  82. package/dist/assets/components/ErrorState/ErrorState.css +2 -1
  83. package/dist/assets/components/Form/FormItemVisual.css +2 -0
  84. package/dist/assets/components/IconWithTooltip/IconWithTooltip.css +2 -0
  85. package/dist/assets/components/ImageWithFallback/ImageWithFallback.css +2 -0
  86. package/dist/assets/components/ListBanner/ListBanner.css +2 -0
  87. package/dist/assets/components/Modal/Modal.css +2 -0
  88. package/dist/assets/components/NotificationItem/NotificationItem.css +2 -0
  89. package/dist/assets/components/NotificationStack/NotificationStack.css +2 -0
  90. package/dist/assets/components/OverlayScrollbar/OverlayScrollbar.css +2 -0
  91. package/dist/assets/components/PageHeader/PageHeader.css +2 -1
  92. package/dist/assets/components/PageLayout/PageLayout.css +2 -1
  93. package/dist/assets/components/PagedSelector/PagedSelector.css +2 -0
  94. package/dist/assets/components/ProgressWithLabel/ProgressWithLabel.css +2 -0
  95. package/dist/assets/components/Skeleton/SkeletonCard.css +2 -1
  96. package/dist/assets/components/Skeleton/SkeletonChart.css +2 -1
  97. package/dist/assets/components/Skeleton/SkeletonRow.css +2 -1
  98. package/dist/assets/components/Skeleton/SkeletonShape.css +2 -0
  99. package/dist/assets/components/Skeleton/SkeletonText.css +2 -1
  100. package/dist/assets/components/SmoothHeight/SmoothHeight.css +2 -1
  101. package/dist/assets/components/StatCard/StatCard.css +2 -1
  102. package/dist/assets/components/Statistic/Statistic.css +2 -0
  103. package/dist/assets/components/StepNumberInput/NumberStepper.css +2 -0
  104. package/dist/assets/components/TextHighlighter/TextHighlighter.css +2 -0
  105. package/dist/assets/components/TokenList/TokenList.css +2 -0
  106. package/dist/assets/components/TokenRow/TokenRow.css +2 -0
  107. package/dist/assets/components/UnitGrid/UnitGrid.css +2 -0
  108. package/dist/astryx/AppShell.d.ts +1 -0
  109. package/dist/astryx/AppShell.js +1 -0
  110. package/dist/astryx/AspectRatio.d.ts +1 -0
  111. package/dist/astryx/AspectRatio.js +1 -0
  112. package/dist/astryx/Avatar.d.ts +1 -0
  113. package/dist/astryx/Avatar.js +1 -0
  114. package/dist/astryx/AvatarGroup.d.ts +1 -0
  115. package/dist/astryx/AvatarGroup.js +1 -0
  116. package/dist/astryx/Badge.d.ts +1 -0
  117. package/dist/astryx/Badge.js +1 -0
  118. package/dist/astryx/Banner.d.ts +1 -0
  119. package/dist/astryx/Banner.js +1 -0
  120. package/dist/astryx/BaseProps.d.ts +1 -0
  121. package/dist/astryx/BaseProps.js +1 -0
  122. package/dist/astryx/Blockquote.d.ts +1 -0
  123. package/dist/astryx/Blockquote.js +1 -0
  124. package/dist/astryx/BottomSheet.d.ts +1 -0
  125. package/dist/astryx/BottomSheet.js +1 -0
  126. package/dist/astryx/Breadcrumbs.d.ts +1 -0
  127. package/dist/astryx/Breadcrumbs.js +1 -0
  128. package/dist/astryx/Button.d.ts +1 -0
  129. package/dist/astryx/Button.js +1 -0
  130. package/dist/astryx/ButtonGroup.d.ts +1 -0
  131. package/dist/astryx/ButtonGroup.js +1 -0
  132. package/dist/astryx/Calendar/utils.d.ts +1 -0
  133. package/dist/astryx/Calendar/utils.js +1 -0
  134. package/dist/astryx/Calendar.d.ts +1 -0
  135. package/dist/astryx/Calendar.js +1 -0
  136. package/dist/astryx/Card.d.ts +1 -0
  137. package/dist/astryx/Card.js +1 -0
  138. package/dist/astryx/Carousel.d.ts +1 -0
  139. package/dist/astryx/Carousel.js +1 -0
  140. package/dist/astryx/Center.d.ts +1 -0
  141. package/dist/astryx/Center.js +1 -0
  142. package/dist/astryx/Chat.d.ts +1 -0
  143. package/dist/astryx/Chat.js +1 -0
  144. package/dist/astryx/CheckboxInput.d.ts +1 -0
  145. package/dist/astryx/CheckboxInput.js +1 -0
  146. package/dist/astryx/CheckboxList.d.ts +1 -0
  147. package/dist/astryx/CheckboxList.js +1 -0
  148. package/dist/astryx/Citation.d.ts +1 -0
  149. package/dist/astryx/Citation.js +1 -0
  150. package/dist/astryx/ClickableCard.d.ts +1 -0
  151. package/dist/astryx/ClickableCard.js +1 -0
  152. package/dist/astryx/Code.d.ts +1 -0
  153. package/dist/astryx/Code.js +1 -0
  154. package/dist/astryx/CodeBlock.d.ts +1 -0
  155. package/dist/astryx/CodeBlock.js +1 -0
  156. package/dist/astryx/Collapsible.d.ts +1 -0
  157. package/dist/astryx/Collapsible.js +1 -0
  158. package/dist/astryx/CommandPalette.d.ts +1 -0
  159. package/dist/astryx/CommandPalette.js +1 -0
  160. package/dist/astryx/ContextMenu.d.ts +1 -0
  161. package/dist/astryx/ContextMenu.js +1 -0
  162. package/dist/astryx/DateInput.d.ts +1 -0
  163. package/dist/astryx/DateInput.js +1 -0
  164. package/dist/astryx/DateRangeInput.d.ts +1 -0
  165. package/dist/astryx/DateRangeInput.js +1 -0
  166. package/dist/astryx/DateTimeInput.d.ts +1 -0
  167. package/dist/astryx/DateTimeInput.js +1 -0
  168. package/dist/astryx/Divider.d.ts +1 -0
  169. package/dist/astryx/Divider.js +1 -0
  170. package/dist/astryx/DropdownMenu.d.ts +1 -0
  171. package/dist/astryx/DropdownMenu.js +1 -0
  172. package/dist/astryx/EmptyState.d.ts +1 -0
  173. package/dist/astryx/EmptyState.js +1 -0
  174. package/dist/astryx/Field.d.ts +1 -0
  175. package/dist/astryx/Field.js +1 -0
  176. package/dist/astryx/FieldStatus.d.ts +1 -0
  177. package/dist/astryx/FieldStatus.js +1 -0
  178. package/dist/astryx/FileInput.d.ts +1 -0
  179. package/dist/astryx/FileInput.js +1 -0
  180. package/dist/astryx/FormLayout.d.ts +1 -0
  181. package/dist/astryx/FormLayout.js +1 -0
  182. package/dist/astryx/Grid.d.ts +1 -0
  183. package/dist/astryx/Grid.js +1 -0
  184. package/dist/astryx/HStack.d.ts +1 -0
  185. package/dist/astryx/HStack.js +1 -0
  186. package/dist/astryx/Heading.d.ts +1 -0
  187. package/dist/astryx/Heading.js +1 -0
  188. package/dist/astryx/HoverCard.d.ts +1 -0
  189. package/dist/astryx/HoverCard.js +1 -0
  190. package/dist/astryx/Icon.d.ts +1 -0
  191. package/dist/astryx/Icon.js +1 -0
  192. package/dist/astryx/IconButton.d.ts +1 -0
  193. package/dist/astryx/IconButton.js +1 -0
  194. package/dist/astryx/Indicator.d.ts +1 -0
  195. package/dist/astryx/Indicator.js +1 -0
  196. package/dist/astryx/InputGroup.d.ts +1 -0
  197. package/dist/astryx/InputGroup.js +1 -0
  198. package/dist/astryx/InteractiveRoleContext.d.ts +1 -0
  199. package/dist/astryx/InteractiveRoleContext.js +1 -0
  200. package/dist/astryx/Item.d.ts +1 -0
  201. package/dist/astryx/Item.js +1 -0
  202. package/dist/astryx/Kbd.d.ts +1 -0
  203. package/dist/astryx/Kbd.js +1 -0
  204. package/dist/astryx/Layer.d.ts +1 -0
  205. package/dist/astryx/Layer.js +1 -0
  206. package/dist/astryx/Layout.d.ts +1 -0
  207. package/dist/astryx/Layout.js +1 -0
  208. package/dist/astryx/Lightbox.d.ts +1 -0
  209. package/dist/astryx/Lightbox.js +1 -0
  210. package/dist/astryx/Link.d.ts +1 -0
  211. package/dist/astryx/Link.js +1 -0
  212. package/dist/astryx/List.d.ts +1 -0
  213. package/dist/astryx/List.js +1 -0
  214. package/dist/astryx/Markdown/utils.d.ts +1 -0
  215. package/dist/astryx/Markdown/utils.js +1 -0
  216. package/dist/astryx/Markdown.d.ts +1 -0
  217. package/dist/astryx/Markdown.js +1 -0
  218. package/dist/astryx/MetadataList.d.ts +1 -0
  219. package/dist/astryx/MetadataList.js +1 -0
  220. package/dist/astryx/MobileNav.d.ts +1 -0
  221. package/dist/astryx/MobileNav.js +1 -0
  222. package/dist/astryx/MoreMenu.d.ts +1 -0
  223. package/dist/astryx/MoreMenu.js +1 -0
  224. package/dist/astryx/MultiSelector.d.ts +1 -0
  225. package/dist/astryx/MultiSelector.js +1 -0
  226. package/dist/astryx/NavIcon.d.ts +1 -0
  227. package/dist/astryx/NavIcon.js +1 -0
  228. package/dist/astryx/NavMenu.d.ts +1 -0
  229. package/dist/astryx/NavMenu.js +1 -0
  230. package/dist/astryx/NumberInput.d.ts +1 -0
  231. package/dist/astryx/NumberInput.js +1 -0
  232. package/dist/astryx/Outline.d.ts +1 -0
  233. package/dist/astryx/Outline.js +1 -0
  234. package/dist/astryx/OverflowList.d.ts +1 -0
  235. package/dist/astryx/OverflowList.js +1 -0
  236. package/dist/astryx/Overlay.d.ts +1 -0
  237. package/dist/astryx/Overlay.js +1 -0
  238. package/dist/astryx/Pagination.d.ts +1 -0
  239. package/dist/astryx/Pagination.js +1 -0
  240. package/dist/astryx/Popover.d.ts +1 -0
  241. package/dist/astryx/Popover.js +1 -0
  242. package/dist/astryx/PowerSearch/utils.d.ts +1 -0
  243. package/dist/astryx/PowerSearch/utils.js +1 -0
  244. package/dist/astryx/PowerSearch.d.ts +1 -0
  245. package/dist/astryx/PowerSearch.js +1 -0
  246. package/dist/astryx/ProgressBar.d.ts +1 -0
  247. package/dist/astryx/ProgressBar.js +1 -0
  248. package/dist/astryx/RadioList.d.ts +1 -0
  249. package/dist/astryx/RadioList.js +1 -0
  250. package/dist/astryx/Resizable/utils.d.ts +1 -0
  251. package/dist/astryx/Resizable/utils.js +1 -0
  252. package/dist/astryx/Resizable.d.ts +1 -0
  253. package/dist/astryx/Resizable.js +1 -0
  254. package/dist/astryx/ScrollableArea.d.ts +1 -0
  255. package/dist/astryx/ScrollableArea.js +1 -0
  256. package/dist/astryx/Section.d.ts +1 -0
  257. package/dist/astryx/Section.js +1 -0
  258. package/dist/astryx/SegmentedControl.d.ts +1 -0
  259. package/dist/astryx/SegmentedControl.js +1 -0
  260. package/dist/astryx/SelectableCard.d.ts +1 -0
  261. package/dist/astryx/SelectableCard.js +1 -0
  262. package/dist/astryx/Selector/utils.d.ts +1 -0
  263. package/dist/astryx/Selector/utils.js +1 -0
  264. package/dist/astryx/Selector.d.ts +1 -0
  265. package/dist/astryx/Selector.js +1 -0
  266. package/dist/astryx/SideNav.d.ts +1 -0
  267. package/dist/astryx/SideNav.js +1 -0
  268. package/dist/astryx/SizeContext.d.ts +1 -0
  269. package/dist/astryx/SizeContext.js +1 -0
  270. package/dist/astryx/Skeleton.d.ts +1 -0
  271. package/dist/astryx/Skeleton.js +1 -0
  272. package/dist/astryx/Slider.d.ts +1 -0
  273. package/dist/astryx/Slider.js +1 -0
  274. package/dist/astryx/Spinner.d.ts +1 -0
  275. package/dist/astryx/Spinner.js +1 -0
  276. package/dist/astryx/Stack.d.ts +1 -0
  277. package/dist/astryx/Stack.js +1 -0
  278. package/dist/astryx/StatusDot.d.ts +1 -0
  279. package/dist/astryx/StatusDot.js +1 -0
  280. package/dist/astryx/Stepper.d.ts +1 -0
  281. package/dist/astryx/Stepper.js +1 -0
  282. package/dist/astryx/Switch.d.ts +1 -0
  283. package/dist/astryx/Switch.js +1 -0
  284. package/dist/astryx/TabList.d.ts +1 -0
  285. package/dist/astryx/TabList.js +1 -0
  286. package/dist/astryx/Table/utils.d.ts +1 -0
  287. package/dist/astryx/Table/utils.js +1 -0
  288. package/dist/astryx/Table.d.ts +1 -0
  289. package/dist/astryx/Table.js +1 -0
  290. package/dist/astryx/Text.d.ts +1 -0
  291. package/dist/astryx/Text.js +1 -0
  292. package/dist/astryx/TextArea.d.ts +1 -0
  293. package/dist/astryx/TextArea.js +1 -0
  294. package/dist/astryx/TextInput.d.ts +1 -0
  295. package/dist/astryx/TextInput.js +1 -0
  296. package/dist/astryx/Thumbnail.d.ts +1 -0
  297. package/dist/astryx/Thumbnail.js +1 -0
  298. package/dist/astryx/TimeInput.d.ts +1 -0
  299. package/dist/astryx/TimeInput.js +1 -0
  300. package/dist/astryx/Timestamp.d.ts +1 -0
  301. package/dist/astryx/Timestamp.js +1 -0
  302. package/dist/astryx/Toast.d.ts +1 -0
  303. package/dist/astryx/Toast.js +1 -0
  304. package/dist/astryx/ToggleButton.d.ts +1 -0
  305. package/dist/astryx/ToggleButton.js +1 -0
  306. package/dist/astryx/Token.d.ts +1 -0
  307. package/dist/astryx/Token.js +1 -0
  308. package/dist/astryx/Tokenizer.d.ts +1 -0
  309. package/dist/astryx/Tokenizer.js +1 -0
  310. package/dist/astryx/Toolbar.d.ts +1 -0
  311. package/dist/astryx/Toolbar.js +1 -0
  312. package/dist/astryx/Tooltip.d.ts +1 -0
  313. package/dist/astryx/Tooltip.js +1 -0
  314. package/dist/astryx/TopNav.d.ts +1 -0
  315. package/dist/astryx/TopNav.js +1 -0
  316. package/dist/astryx/TreeList.d.ts +1 -0
  317. package/dist/astryx/TreeList.js +1 -0
  318. package/dist/astryx/Typeahead/utils.d.ts +1 -0
  319. package/dist/astryx/Typeahead/utils.js +1 -0
  320. package/dist/astryx/Typeahead.d.ts +1 -0
  321. package/dist/astryx/Typeahead.js +1 -0
  322. package/dist/astryx/VStack.d.ts +1 -0
  323. package/dist/astryx/VStack.js +1 -0
  324. package/dist/astryx/VisuallyHidden.d.ts +1 -0
  325. package/dist/astryx/VisuallyHidden.js +1 -0
  326. package/dist/astryx/astryx.css +3 -0
  327. package/dist/astryx/hooks.d.ts +1 -0
  328. package/dist/astryx/hooks.js +1 -0
  329. package/dist/astryx/i18n.d.ts +1 -0
  330. package/dist/astryx/i18n.js +1 -0
  331. package/dist/astryx/lab/lab.css +3 -0
  332. package/dist/astryx/lab.d.ts +6 -0
  333. package/dist/astryx/lab.js +6 -0
  334. package/dist/astryx/naming.d.ts +1 -0
  335. package/dist/astryx/naming.js +1 -0
  336. package/dist/astryx/reset.css +3 -0
  337. package/dist/astryx/tailwind-theme.css +3 -0
  338. package/dist/astryx/theme/neutral/built.d.ts +1 -0
  339. package/dist/astryx/theme/neutral/built.js +1 -0
  340. package/dist/astryx/theme/neutral/theme.css +3 -0
  341. package/dist/astryx/theme/neutral.d.ts +1 -0
  342. package/dist/astryx/theme/neutral.js +1 -0
  343. package/dist/astryx/theme/syntax.d.ts +1 -0
  344. package/dist/astryx/theme/syntax.js +1 -0
  345. package/dist/astryx/theme/tokens.d.ts +1 -0
  346. package/dist/astryx/theme/tokens.js +1 -0
  347. package/dist/astryx/theme/tokens.stylex.d.ts +1 -0
  348. package/dist/astryx/theme/tokens.stylex.js +1 -0
  349. package/dist/astryx/theme.d.ts +1 -0
  350. package/dist/astryx/theme.js +1 -0
  351. package/dist/astryx/utils.d.ts +1 -0
  352. package/dist/astryx/utils.js +1 -0
  353. package/dist/components/AlertModal/AlertModal.d.ts +14 -0
  354. package/dist/components/AlertModal/AlertModal.js +56 -0
  355. package/dist/components/AlertModal/AlertModal.js.map +1 -0
  356. package/dist/components/AlertModal/index.d.ts +2 -0
  357. package/dist/components/AlertModal/index.js +2 -0
  358. package/dist/components/BoardItemTitle/BoardItemTitle.d.ts +15 -0
  359. package/dist/components/BoardItemTitle/BoardItemTitle2.js +42 -0
  360. package/dist/components/BoardItemTitle/BoardItemTitle2.js.map +1 -0
  361. package/dist/components/BoardItemTitle/index.d.ts +2 -0
  362. package/dist/components/BoardItemTitle/index.js +2 -0
  363. package/dist/components/BooleanToken/BooleanToken.d.ts +15 -0
  364. package/dist/components/BooleanToken/BooleanToken.js +19 -0
  365. package/dist/components/BooleanToken/BooleanToken.js.map +1 -0
  366. package/dist/components/BooleanToken/BooleanToken.messages.d.ts +10 -0
  367. package/dist/components/BooleanToken/BooleanToken.messages.js +16 -0
  368. package/dist/components/BooleanToken/BooleanToken.messages.js.map +1 -0
  369. package/dist/components/BooleanToken/index.d.ts +2 -0
  370. package/dist/components/BooleanToken/index.js +2 -0
  371. package/dist/components/BulkEditFormItem/BulkEditFormItem.d.ts +24 -0
  372. package/dist/components/BulkEditFormItem/BulkEditFormItem.js +93 -0
  373. package/dist/components/BulkEditFormItem/BulkEditFormItem.js.map +1 -0
  374. package/dist/components/BulkEditFormItem/BulkEditFormItem.messages.d.ts +14 -0
  375. package/dist/components/BulkEditFormItem/BulkEditFormItem.messages.js +20 -0
  376. package/dist/components/BulkEditFormItem/BulkEditFormItem.messages.js.map +1 -0
  377. package/dist/components/BulkEditFormItem/index.d.ts +2 -0
  378. package/dist/components/BulkEditFormItem/index.js +2 -0
  379. package/dist/components/BulkErrorModal/BulkErrorModal.d.ts +23 -0
  380. package/dist/components/BulkErrorModal/BulkErrorModal.messages.d.ts +10 -0
  381. package/dist/components/BulkErrorModal/BulkErrorModal.messages.js +16 -0
  382. package/dist/components/BulkErrorModal/BulkErrorModal.messages.js.map +1 -0
  383. package/dist/components/BulkErrorModal/BulkErrorModal2.js +55 -0
  384. package/dist/components/BulkErrorModal/BulkErrorModal2.js.map +1 -0
  385. package/dist/components/BulkErrorModal/index.d.ts +2 -0
  386. package/dist/components/BulkErrorModal/index.js +2 -0
  387. package/dist/components/ColorPicker/ColorPicker.d.ts +43 -0
  388. package/dist/components/ColorPicker/ColorPicker.messages.d.ts +18 -0
  389. package/dist/components/ColorPicker/ColorPicker.messages.js +24 -0
  390. package/dist/components/ColorPicker/ColorPicker.messages.js.map +1 -0
  391. package/dist/components/ColorPicker/ColorPicker2.js +117 -0
  392. package/dist/components/ColorPicker/ColorPicker2.js.map +1 -0
  393. package/dist/components/ColorPicker/index.d.ts +2 -0
  394. package/dist/components/ColorPicker/index.js +2 -0
  395. package/dist/components/ConfirmPopover/ConfirmPopover.d.ts +35 -0
  396. package/dist/components/ConfirmPopover/ConfirmPopover.js +75 -0
  397. package/dist/components/ConfirmPopover/ConfirmPopover.js.map +1 -0
  398. package/dist/components/ConfirmPopover/index.d.ts +2 -0
  399. package/dist/components/ConfirmPopover/index.js +2 -0
  400. package/dist/components/CountBadge/CountBadge.d.ts +24 -0
  401. package/dist/components/CountBadge/CountBadge2.js +35 -0
  402. package/dist/components/CountBadge/CountBadge2.js.map +1 -0
  403. package/dist/components/CountBadge/index.d.ts +2 -0
  404. package/dist/components/CountBadge/index.js +2 -0
  405. package/dist/components/CountdownBorder/CountdownBorder.d.ts +22 -0
  406. package/dist/components/CountdownBorder/CountdownBorder2.js +63 -0
  407. package/dist/components/CountdownBorder/CountdownBorder2.js.map +1 -0
  408. package/dist/components/CountdownBorder/index.d.ts +2 -0
  409. package/dist/components/CountdownBorder/index.js +2 -0
  410. package/dist/components/DataGrid/DataGrid.d.ts +212 -0
  411. package/dist/components/DataGrid/DataGrid.messages.d.ts +70 -0
  412. package/dist/components/DataGrid/DataGrid.messages.js +76 -0
  413. package/dist/components/DataGrid/DataGrid.messages.js.map +1 -0
  414. package/dist/components/DataGrid/DataGrid2.js +447 -0
  415. package/dist/components/DataGrid/DataGrid2.js.map +1 -0
  416. package/dist/components/DataGrid/DataGridExportModal.d.ts +30 -0
  417. package/dist/components/DataGrid/DataGridExportModal.js +125 -0
  418. package/dist/components/DataGrid/DataGridExportModal.js.map +1 -0
  419. package/dist/components/DataGrid/DataGridSettingsModal.d.ts +36 -0
  420. package/dist/components/DataGrid/DataGridSettingsModal.js +177 -0
  421. package/dist/components/DataGrid/DataGridSettingsModal.js.map +1 -0
  422. package/dist/components/DataGrid/index.d.ts +6 -0
  423. package/dist/components/DataGrid/index.js +4 -0
  424. package/dist/components/DataGrid/nodeToPlainText.d.ts +6 -0
  425. package/dist/components/DataGrid/nodeToPlainText.js +9 -0
  426. package/dist/components/DataGrid/nodeToPlainText.js.map +1 -0
  427. package/dist/components/DeleteConfirmModal/DeleteConfirmModal.d.ts +78 -0
  428. package/dist/components/DeleteConfirmModal/DeleteConfirmModal.messages.d.ts +30 -0
  429. package/dist/components/DeleteConfirmModal/DeleteConfirmModal.messages.js +36 -0
  430. package/dist/components/DeleteConfirmModal/DeleteConfirmModal.messages.js.map +1 -0
  431. package/dist/components/DeleteConfirmModal/DeleteConfirmModal2.js +102 -0
  432. package/dist/components/DeleteConfirmModal/DeleteConfirmModal2.js.map +1 -0
  433. package/dist/components/DeleteConfirmModal/index.d.ts +2 -0
  434. package/dist/components/DeleteConfirmModal/index.js +2 -0
  435. package/dist/components/DigitPopIn/DigitPopIn.d.ts +8 -0
  436. package/dist/components/DigitPopIn/DigitPopIn2.js +30 -0
  437. package/dist/components/DigitPopIn/DigitPopIn2.js.map +1 -0
  438. package/dist/components/DigitPopIn/index.d.ts +2 -0
  439. package/dist/components/DigitPopIn/index.js +2 -0
  440. package/dist/components/DividedRow/DividedRow.d.ts +27 -0
  441. package/dist/components/DividedRow/DividedRow2.js +63 -0
  442. package/dist/components/DividedRow/DividedRow2.js.map +1 -0
  443. package/dist/components/DividedRow/index.d.ts +2 -0
  444. package/dist/components/DividedRow/index.js +2 -0
  445. package/dist/components/DoubleBadge/DoubleBadge.d.ts +14 -0
  446. package/dist/components/DoubleBadge/DoubleBadge2.js +28 -0
  447. package/dist/components/DoubleBadge/DoubleBadge2.js.map +1 -0
  448. package/dist/components/DoubleBadge/index.d.ts +2 -0
  449. package/dist/components/DoubleBadge/index.js +2 -0
  450. package/dist/components/DoubleToken/DoubleToken.d.ts +24 -0
  451. package/dist/components/DoubleToken/DoubleToken2.js +38 -0
  452. package/dist/components/DoubleToken/DoubleToken2.js.map +1 -0
  453. package/dist/components/DoubleToken/index.d.ts +2 -0
  454. package/dist/components/DoubleToken/index.js +2 -0
  455. package/dist/components/ErrorState/ErrorState.d.ts +7 -16
  456. package/dist/components/ErrorState/ErrorState2.js +33 -33
  457. package/dist/components/ErrorState/ErrorState2.js.map +1 -1
  458. package/dist/components/Form/ErrorList.d.ts +13 -0
  459. package/dist/components/Form/ErrorList.js +21 -0
  460. package/dist/components/Form/ErrorList.js.map +1 -0
  461. package/dist/components/Form/Field.d.ts +88 -0
  462. package/dist/components/Form/Field.js +212 -0
  463. package/dist/components/Form/Field.js.map +1 -0
  464. package/dist/components/Form/Form.d.ts +70 -0
  465. package/dist/components/Form/Form.js +130 -0
  466. package/dist/components/Form/Form.js.map +1 -0
  467. package/dist/components/Form/Form.messages.d.ts +96 -0
  468. package/dist/components/Form/Form.messages.js +96 -0
  469. package/dist/components/Form/Form.messages.js.map +1 -0
  470. package/dist/components/Form/FormConfigProvider.d.ts +20 -0
  471. package/dist/components/Form/FormConfigProvider.js +31 -0
  472. package/dist/components/Form/FormConfigProvider.js.map +1 -0
  473. package/dist/components/Form/FormItem.d.ts +56 -0
  474. package/dist/components/Form/FormItem.js +164 -0
  475. package/dist/components/Form/FormItem.js.map +1 -0
  476. package/dist/components/Form/FormItemVisual.d.ts +56 -0
  477. package/dist/components/Form/FormItemVisual2.js +117 -0
  478. package/dist/components/Form/FormItemVisual2.js.map +1 -0
  479. package/dist/components/Form/FormStore.d.ts +109 -0
  480. package/dist/components/Form/FormStore.js +494 -0
  481. package/dist/components/Form/FormStore.js.map +1 -0
  482. package/dist/components/Form/List.d.ts +22 -0
  483. package/dist/components/Form/List.js +65 -0
  484. package/dist/components/Form/List.js.map +1 -0
  485. package/dist/components/Form/context.d.ts +91 -0
  486. package/dist/components/Form/context.js +34 -0
  487. package/dist/components/Form/context.js.map +1 -0
  488. package/dist/components/Form/feedbackIcons.d.ts +13 -0
  489. package/dist/components/Form/feedbackIcons.js +45 -0
  490. package/dist/components/Form/feedbackIcons.js.map +1 -0
  491. package/dist/components/Form/index.d.ts +30 -0
  492. package/dist/components/Form/index.js +18 -0
  493. package/dist/components/Form/index.js.map +1 -0
  494. package/dist/components/Form/interface.d.ts +212 -0
  495. package/dist/components/Form/isEqual.d.ts +1 -0
  496. package/dist/components/Form/isEqual.js +61 -0
  497. package/dist/components/Form/isEqual.js.map +1 -0
  498. package/dist/components/Form/messages.d.ts +15 -0
  499. package/dist/components/Form/messages.js +52 -0
  500. package/dist/components/Form/messages.js.map +1 -0
  501. package/dist/components/Form/namePath.d.ts +78 -0
  502. package/dist/components/Form/namePath.js +120 -0
  503. package/dist/components/Form/namePath.js.map +1 -0
  504. package/dist/components/Form/useWatch.d.ts +11 -0
  505. package/dist/components/Form/useWatch.js +43 -0
  506. package/dist/components/Form/useWatch.js.map +1 -0
  507. package/dist/components/Form/validate.d.ts +16 -0
  508. package/dist/components/Form/validate.js +214 -0
  509. package/dist/components/Form/validate.js.map +1 -0
  510. package/dist/components/IconWithTooltip/IconWithTooltip.d.ts +19 -0
  511. package/dist/components/IconWithTooltip/IconWithTooltip2.js +38 -0
  512. package/dist/components/IconWithTooltip/IconWithTooltip2.js.map +1 -0
  513. package/dist/components/IconWithTooltip/accessibleLabel.d.ts +2 -0
  514. package/dist/components/IconWithTooltip/accessibleLabel.js +33 -0
  515. package/dist/components/IconWithTooltip/accessibleLabel.js.map +1 -0
  516. package/dist/components/IconWithTooltip/index.d.ts +2 -0
  517. package/dist/components/IconWithTooltip/index.js +2 -0
  518. package/dist/components/ImageWithFallback/ImageWithFallback.d.ts +11 -0
  519. package/dist/components/ImageWithFallback/ImageWithFallback2.js +28 -0
  520. package/dist/components/ImageWithFallback/ImageWithFallback2.js.map +1 -0
  521. package/dist/components/ImageWithFallback/index.d.ts +2 -0
  522. package/dist/components/ImageWithFallback/index.js +2 -0
  523. package/dist/components/ListBanner/ListBanner.d.ts +17 -0
  524. package/dist/components/ListBanner/ListBanner2.js +27 -0
  525. package/dist/components/ListBanner/ListBanner2.js.map +1 -0
  526. package/dist/components/ListBanner/index.d.ts +2 -0
  527. package/dist/components/ListBanner/index.js +2 -0
  528. package/dist/components/Modal/Modal.d.ts +65 -0
  529. package/dist/components/Modal/Modal2.js +226 -0
  530. package/dist/components/Modal/Modal2.js.map +1 -0
  531. package/dist/components/Modal/index.d.ts +15 -0
  532. package/dist/components/Modal/index.js +4 -0
  533. package/dist/components/Modal/modalStack.d.ts +64 -0
  534. package/dist/components/Modal/modalStack.js +81 -0
  535. package/dist/components/Modal/modalStack.js.map +1 -0
  536. package/dist/components/NotificationItem/NotificationItem.d.ts +14 -0
  537. package/dist/components/NotificationItem/NotificationItem2.js +40 -0
  538. package/dist/components/NotificationItem/NotificationItem2.js.map +1 -0
  539. package/dist/components/NotificationItem/index.d.ts +2 -0
  540. package/dist/components/NotificationItem/index.js +2 -0
  541. package/dist/components/NotificationStack/NotificationStack.d.ts +56 -0
  542. package/dist/components/NotificationStack/NotificationStack.messages.d.ts +6 -0
  543. package/dist/components/NotificationStack/NotificationStack.messages.js +10 -0
  544. package/dist/components/NotificationStack/NotificationStack.messages.js.map +1 -0
  545. package/dist/components/NotificationStack/NotificationStack2.js +154 -0
  546. package/dist/components/NotificationStack/NotificationStack2.js.map +1 -0
  547. package/dist/components/NotificationStack/index.d.ts +2 -0
  548. package/dist/components/NotificationStack/index.js +2 -0
  549. package/dist/components/OverlayScrollbar/OverlayScrollbar.d.ts +13 -0
  550. package/dist/components/OverlayScrollbar/OverlayScrollbar2.js +69 -0
  551. package/dist/components/OverlayScrollbar/OverlayScrollbar2.js.map +1 -0
  552. package/dist/components/OverlayScrollbar/index.d.ts +2 -0
  553. package/dist/components/OverlayScrollbar/index.js +2 -0
  554. package/dist/components/PageHeader/PageHeader.d.ts +24 -8
  555. package/dist/components/PageHeader/PageHeader.messages.d.ts +6 -0
  556. package/dist/components/PageHeader/PageHeader.messages.js +10 -0
  557. package/dist/components/PageHeader/PageHeader.messages.js.map +1 -0
  558. package/dist/components/PageHeader/PageHeader2.js +57 -30
  559. package/dist/components/PageHeader/PageHeader2.js.map +1 -1
  560. package/dist/components/PageLayout/PageLayout2.js +2 -2
  561. package/dist/components/PageLayout/PageLayout2.js.map +1 -1
  562. package/dist/components/PagedSelector/PagedSelector.d.ts +107 -0
  563. package/dist/components/PagedSelector/PagedSelector.messages.d.ts +30 -0
  564. package/dist/components/PagedSelector/PagedSelector.messages.js +36 -0
  565. package/dist/components/PagedSelector/PagedSelector.messages.js.map +1 -0
  566. package/dist/components/PagedSelector/PagedSelector2.js +220 -0
  567. package/dist/components/PagedSelector/PagedSelector2.js.map +1 -0
  568. package/dist/components/PagedSelector/PanelSearchInput.d.ts +22 -0
  569. package/dist/components/PagedSelector/PanelSearchInput.js +95 -0
  570. package/dist/components/PagedSelector/PanelSearchInput.js.map +1 -0
  571. package/dist/components/PagedSelector/index.d.ts +2 -0
  572. package/dist/components/PagedSelector/index.js +2 -0
  573. package/dist/components/ProgressWithLabel/ProgressWithLabel.d.ts +26 -0
  574. package/dist/components/ProgressWithLabel/ProgressWithLabel2.js +44 -0
  575. package/dist/components/ProgressWithLabel/ProgressWithLabel2.js.map +1 -0
  576. package/dist/components/ProgressWithLabel/index.d.ts +2 -0
  577. package/dist/components/ProgressWithLabel/index.js +2 -0
  578. package/dist/components/SelectionLabel/SelectionLabel.d.ts +23 -0
  579. package/dist/components/SelectionLabel/SelectionLabel.js +29 -0
  580. package/dist/components/SelectionLabel/SelectionLabel.js.map +1 -0
  581. package/dist/components/SelectionLabel/SelectionLabel.messages.d.ts +10 -0
  582. package/dist/components/SelectionLabel/SelectionLabel.messages.js +16 -0
  583. package/dist/components/SelectionLabel/SelectionLabel.messages.js.map +1 -0
  584. package/dist/components/SelectionLabel/index.d.ts +2 -0
  585. package/dist/components/SelectionLabel/index.js +2 -0
  586. package/dist/components/Skeleton/Skeleton.messages.d.ts +18 -0
  587. package/dist/components/Skeleton/Skeleton.messages.js +24 -0
  588. package/dist/components/Skeleton/Skeleton.messages.js.map +1 -0
  589. package/dist/components/Skeleton/SkeletonCard.d.ts +4 -9
  590. package/dist/components/Skeleton/SkeletonCard2.js +53 -53
  591. package/dist/components/Skeleton/SkeletonCard2.js.map +1 -1
  592. package/dist/components/Skeleton/SkeletonChart.d.ts +5 -11
  593. package/dist/components/Skeleton/SkeletonChart2.js +51 -45
  594. package/dist/components/Skeleton/SkeletonChart2.js.map +1 -1
  595. package/dist/components/Skeleton/SkeletonRow.d.ts +5 -10
  596. package/dist/components/Skeleton/SkeletonRow2.js +35 -34
  597. package/dist/components/Skeleton/SkeletonRow2.js.map +1 -1
  598. package/dist/components/Skeleton/SkeletonShape.d.ts +10 -0
  599. package/dist/components/Skeleton/SkeletonShape2.js +23 -0
  600. package/dist/components/Skeleton/SkeletonShape2.js.map +1 -0
  601. package/dist/components/Skeleton/SkeletonText.d.ts +4 -9
  602. package/dist/components/Skeleton/SkeletonText2.js +22 -17
  603. package/dist/components/Skeleton/SkeletonText2.js.map +1 -1
  604. package/dist/components/Skeleton/index.d.ts +3 -5
  605. package/dist/components/Skeleton/index.js +4 -5
  606. package/dist/components/SmoothHeight/SmoothHeight2.js +2 -2
  607. package/dist/components/SmoothHeight/SmoothHeight2.js.map +1 -1
  608. package/dist/components/StatCard/StatCard.d.ts +28 -16
  609. package/dist/components/StatCard/StatCard2.js +96 -89
  610. package/dist/components/StatCard/StatCard2.js.map +1 -1
  611. package/dist/components/StatCard/index.d.ts +1 -1
  612. package/dist/components/Statistic/Statistic.d.ts +30 -0
  613. package/dist/components/Statistic/Statistic.messages.d.ts +6 -0
  614. package/dist/components/Statistic/Statistic.messages.js +10 -0
  615. package/dist/components/Statistic/Statistic.messages.js.map +1 -0
  616. package/dist/components/Statistic/Statistic2.js +75 -0
  617. package/dist/components/Statistic/Statistic2.js.map +1 -0
  618. package/dist/components/Statistic/index.d.ts +2 -0
  619. package/dist/components/Statistic/index.js +2 -0
  620. package/dist/components/StepNumberInput/NumberStepper.d.ts +29 -0
  621. package/dist/components/StepNumberInput/NumberStepper.messages.d.ts +10 -0
  622. package/dist/components/StepNumberInput/NumberStepper.messages.js +16 -0
  623. package/dist/components/StepNumberInput/NumberStepper.messages.js.map +1 -0
  624. package/dist/components/StepNumberInput/NumberStepper2.js +50 -0
  625. package/dist/components/StepNumberInput/NumberStepper2.js.map +1 -0
  626. package/dist/components/StepNumberInput/StepNumberInput.d.ts +33 -0
  627. package/dist/components/StepNumberInput/StepNumberInput.js +48 -0
  628. package/dist/components/StepNumberInput/StepNumberInput.js.map +1 -0
  629. package/dist/components/StepNumberInput/index.d.ts +4 -0
  630. package/dist/components/StepNumberInput/index.js +3 -0
  631. package/dist/components/TextHighlighter/TextHighlighter.d.ts +14 -0
  632. package/dist/components/TextHighlighter/TextHighlighter2.js +29 -0
  633. package/dist/components/TextHighlighter/TextHighlighter2.js.map +1 -0
  634. package/dist/components/TextHighlighter/index.d.ts +2 -0
  635. package/dist/components/TextHighlighter/index.js +2 -0
  636. package/dist/components/TokenList/TokenList.d.ts +18 -0
  637. package/dist/components/TokenList/TokenList2.js +55 -0
  638. package/dist/components/TokenList/TokenList2.js.map +1 -0
  639. package/dist/components/TokenList/index.d.ts +2 -0
  640. package/dist/components/TokenList/index.js +2 -0
  641. package/dist/components/TokenRow/TokenRow.d.ts +27 -0
  642. package/dist/components/TokenRow/TokenRow.messages.d.ts +6 -0
  643. package/dist/components/TokenRow/TokenRow.messages.js +10 -0
  644. package/dist/components/TokenRow/TokenRow.messages.js.map +1 -0
  645. package/dist/components/TokenRow/TokenRow2.js +29 -0
  646. package/dist/components/TokenRow/TokenRow2.js.map +1 -0
  647. package/dist/components/TokenRow/index.d.ts +2 -0
  648. package/dist/components/TokenRow/index.js +2 -0
  649. package/dist/components/UncontrolledInput/UncontrolledInput.d.ts +29 -0
  650. package/dist/components/UncontrolledInput/UncontrolledInput.js +49 -0
  651. package/dist/components/UncontrolledInput/UncontrolledInput.js.map +1 -0
  652. package/dist/components/UncontrolledInput/UncontrolledInput.messages.d.ts +6 -0
  653. package/dist/components/UncontrolledInput/UncontrolledInput.messages.js +10 -0
  654. package/dist/components/UncontrolledInput/UncontrolledInput.messages.js.map +1 -0
  655. package/dist/components/UncontrolledInput/index.d.ts +2 -0
  656. package/dist/components/UncontrolledInput/index.js +2 -0
  657. package/dist/components/UnitGrid/UnitGrid.d.ts +56 -0
  658. package/dist/components/UnitGrid/UnitGrid.geometry.d.ts +102 -0
  659. package/dist/components/UnitGrid/UnitGrid.geometry.js +172 -0
  660. package/dist/components/UnitGrid/UnitGrid.geometry.js.map +1 -0
  661. package/dist/components/UnitGrid/UnitGrid.messages.d.ts +14 -0
  662. package/dist/components/UnitGrid/UnitGrid.messages.js +20 -0
  663. package/dist/components/UnitGrid/UnitGrid.messages.js.map +1 -0
  664. package/dist/components/UnitGrid/UnitGrid2.js +393 -0
  665. package/dist/components/UnitGrid/UnitGrid2.js.map +1 -0
  666. package/dist/components/UnitGrid/UnitGridSkeleton.d.ts +9 -0
  667. package/dist/components/UnitGrid/UnitGridSkeleton.js +73 -0
  668. package/dist/components/UnitGrid/UnitGridSkeleton.js.map +1 -0
  669. package/dist/components/UnitGrid/index.d.ts +4 -0
  670. package/dist/components/UnitGrid/index.js +3 -0
  671. package/dist/forks/ComplexSelector/ComplexSelector.d.ts +144 -0
  672. package/dist/forks/ComplexSelector/ComplexSelector.js +157 -0
  673. package/dist/forks/ComplexSelector/ComplexSelector.js.map +1 -0
  674. package/dist/forks/ComplexSelector/ComplexSelector.styles.d.ts +125 -0
  675. package/dist/forks/ComplexSelector/ComplexSelector.styles.js +129 -0
  676. package/dist/forks/ComplexSelector/ComplexSelector.styles.js.map +1 -0
  677. package/dist/forks/ComplexSelector/index.d.ts +7 -0
  678. package/dist/forks/ComplexSelector/index.js +2 -0
  679. package/dist/forks/Drawer/Drawer.d.ts +98 -0
  680. package/dist/forks/Drawer/Drawer.js +94 -0
  681. package/dist/forks/Drawer/Drawer.js.map +1 -0
  682. package/dist/forks/Drawer/Drawer.styles.d.ts +99 -0
  683. package/dist/forks/Drawer/Drawer.styles.js +94 -0
  684. package/dist/forks/Drawer/Drawer.styles.js.map +1 -0
  685. package/dist/forks/Drawer/index.d.ts +6 -0
  686. package/dist/forks/Drawer/index.js +2 -0
  687. package/dist/forks/Drawer/useDrawerDialogPresence.d.ts +19 -0
  688. package/dist/forks/Drawer/useDrawerDialogPresence.js +62 -0
  689. package/dist/forks/Drawer/useDrawerDialogPresence.js.map +1 -0
  690. package/dist/forks/Tour/Tour.d.ts +58 -0
  691. package/dist/forks/Tour/Tour.js +55 -0
  692. package/dist/forks/Tour/Tour.js.map +1 -0
  693. package/dist/forks/Tour/TourContext.d.ts +37 -0
  694. package/dist/forks/Tour/TourContext.js +8 -0
  695. package/dist/forks/Tour/TourContext.js.map +1 -0
  696. package/dist/forks/Tour/TourStep.d.ts +43 -0
  697. package/dist/forks/Tour/TourStep.js +134 -0
  698. package/dist/forks/Tour/TourStep.js.map +1 -0
  699. package/dist/forks/Tour/TourStep.styles.d.ts +23 -0
  700. package/dist/forks/Tour/TourStep.styles.js +28 -0
  701. package/dist/forks/Tour/TourStep.styles.js.map +1 -0
  702. package/dist/forks/Tour/index.d.ts +11 -0
  703. package/dist/forks/Tour/index.js +4 -0
  704. package/dist/forks/Tour/useTour.d.ts +26 -0
  705. package/dist/forks/Tour/useTour.js +20 -0
  706. package/dist/forks/Tour/useTour.js.map +1 -0
  707. package/dist/forks/compiled.d.ts +5 -0
  708. package/dist/forks/compiled.js +8 -0
  709. package/dist/forks/compiled.js.map +1 -0
  710. package/dist/i18n/catalog.d.ts +12 -0
  711. package/dist/i18n/catalog.js +46 -0
  712. package/dist/i18n/catalog.js.map +1 -0
  713. package/dist/i18n/common.messages.d.ts +31 -0
  714. package/dist/i18n/common.messages.js +32 -0
  715. package/dist/i18n/common.messages.js.map +1 -0
  716. package/dist/i18n/index.d.ts +21 -0
  717. package/dist/i18n/index.js +3 -0
  718. package/dist/i18n/locales/de-DE.js +331 -0
  719. package/dist/i18n/locales/de-DE.js.map +1 -0
  720. package/dist/i18n/locales/el-GR.js +331 -0
  721. package/dist/i18n/locales/el-GR.js.map +1 -0
  722. package/dist/i18n/locales/es-ES.js +331 -0
  723. package/dist/i18n/locales/es-ES.js.map +1 -0
  724. package/dist/i18n/locales/fi-FI.js +331 -0
  725. package/dist/i18n/locales/fi-FI.js.map +1 -0
  726. package/dist/i18n/locales/fr-FR.js +331 -0
  727. package/dist/i18n/locales/fr-FR.js.map +1 -0
  728. package/dist/i18n/locales/id-ID.js +331 -0
  729. package/dist/i18n/locales/id-ID.js.map +1 -0
  730. package/dist/i18n/locales/it-IT.js +331 -0
  731. package/dist/i18n/locales/it-IT.js.map +1 -0
  732. package/dist/i18n/locales/ja-JP.js +351 -0
  733. package/dist/i18n/locales/ja-JP.js.map +1 -0
  734. package/dist/i18n/locales/ko-KR.js +351 -0
  735. package/dist/i18n/locales/ko-KR.js.map +1 -0
  736. package/dist/i18n/locales/mn-MN.js +327 -0
  737. package/dist/i18n/locales/mn-MN.js.map +1 -0
  738. package/dist/i18n/locales/ms-MY.js +331 -0
  739. package/dist/i18n/locales/ms-MY.js.map +1 -0
  740. package/dist/i18n/locales/pl-PL.js +331 -0
  741. package/dist/i18n/locales/pl-PL.js.map +1 -0
  742. package/dist/i18n/locales/pt-BR.js +331 -0
  743. package/dist/i18n/locales/pt-BR.js.map +1 -0
  744. package/dist/i18n/locales/pt-PT.js +331 -0
  745. package/dist/i18n/locales/pt-PT.js.map +1 -0
  746. package/dist/i18n/locales/ru-RU.js +331 -0
  747. package/dist/i18n/locales/ru-RU.js.map +1 -0
  748. package/dist/i18n/locales/th-TH.js +331 -0
  749. package/dist/i18n/locales/th-TH.js.map +1 -0
  750. package/dist/i18n/locales/tr-TR.js +331 -0
  751. package/dist/i18n/locales/tr-TR.js.map +1 -0
  752. package/dist/i18n/locales/vi-VN.js +331 -0
  753. package/dist/i18n/locales/vi-VN.js.map +1 -0
  754. package/dist/i18n/locales/zh-CN.js +331 -0
  755. package/dist/i18n/locales/zh-CN.js.map +1 -0
  756. package/dist/i18n/locales/zh-TW.js +331 -0
  757. package/dist/i18n/locales/zh-TW.js.map +1 -0
  758. package/dist/i18n/messages.d.ts +13 -0
  759. package/dist/i18n/messages.js +63 -0
  760. package/dist/i18n/messages.js.map +1 -0
  761. package/dist/i18n/translateWithNodes.d.ts +3 -0
  762. package/dist/i18n/translateWithNodes.js +14 -0
  763. package/dist/i18n/translateWithNodes.js.map +1 -0
  764. package/dist/i18n/useUicTranslator.d.ts +5 -0
  765. package/dist/i18n/useUicTranslator.js +38 -0
  766. package/dist/i18n/useUicTranslator.js.map +1 -0
  767. package/dist/index.d.ts +101 -27
  768. package/dist/index.js +63 -23
  769. package/dist/instance.d.ts +31 -0
  770. package/dist/instance.js +33 -0
  771. package/dist/instance.js.map +1 -0
  772. package/dist/legacy-tokens.css +177 -0
  773. package/dist/locales/af-ZA.json +954 -0
  774. package/dist/locales/ar-SA.json +994 -0
  775. package/dist/locales/ca-ES.json +970 -0
  776. package/dist/locales/cs-CZ.json +986 -0
  777. package/dist/locales/da-DK.json +962 -0
  778. package/dist/locales/de-DE.json +962 -0
  779. package/dist/locales/el-GR.json +986 -0
  780. package/dist/locales/en.json +1482 -0
  781. package/dist/locales/es-ES.json +974 -0
  782. package/dist/locales/fi-FI.json +986 -0
  783. package/dist/locales/fr-FR.json +950 -0
  784. package/dist/locales/he-IL.json +986 -0
  785. package/dist/locales/hu-HU.json +986 -0
  786. package/dist/locales/it-IT.json +974 -0
  787. package/dist/locales/ja-JP.json +994 -0
  788. package/dist/locales/ko-KR.json +986 -0
  789. package/dist/locales/nl-NL.json +950 -0
  790. package/dist/locales/no-NO.json +974 -0
  791. package/dist/locales/pl-PL.json +978 -0
  792. package/dist/locales/pseudo.json +1112 -0
  793. package/dist/locales/pt-BR.json +978 -0
  794. package/dist/locales/pt-PT.json +978 -0
  795. package/dist/locales/ro-RO.json +978 -0
  796. package/dist/locales/ru-RU.json +986 -0
  797. package/dist/locales/sr-SP.json +986 -0
  798. package/dist/locales/sv-SE.json +982 -0
  799. package/dist/locales/tr-TR.json +986 -0
  800. package/dist/locales/uk-UA.json +986 -0
  801. package/dist/locales/vi-VN.json +982 -0
  802. package/dist/locales/zh-CN.json +994 -0
  803. package/dist/locales/zh-TW.json +994 -0
  804. package/dist/styles/base.css +24 -2
  805. package/dist/styles/themes/orange-dark.css +4 -0
  806. package/dist/styles/themes/orange-light.css +4 -0
  807. package/dist/theme/lablup/built/lablup.d.ts +13 -0
  808. package/dist/theme/lablup/built/lablup.js +567 -0
  809. package/dist/theme/lablup/built/lablup.variants.d.ts +16 -0
  810. package/dist/theme/lablup/built/theme.css +716 -0
  811. package/dist/theme/lablup/index.d.ts +9 -0
  812. package/dist/theme/lablup/index.js +2 -0
  813. package/dist/theme/lablup/lablupTheme.d.ts +10 -0
  814. package/dist/theme/lablup/lablupTheme.js +21 -0
  815. package/dist/theme/lablup/lablupTheme.js.map +1 -0
  816. package/dist/ui-common-locales/de-DE.json +326 -0
  817. package/dist/ui-common-locales/el-GR.json +326 -0
  818. package/dist/ui-common-locales/en.json +346 -0
  819. package/dist/ui-common-locales/es-ES.json +326 -0
  820. package/dist/ui-common-locales/fi-FI.json +326 -0
  821. package/dist/ui-common-locales/fr-FR.json +326 -0
  822. package/dist/ui-common-locales/id-ID.json +326 -0
  823. package/dist/ui-common-locales/it-IT.json +326 -0
  824. package/dist/ui-common-locales/ja-JP.json +346 -0
  825. package/dist/ui-common-locales/ko-KR.json +346 -0
  826. package/dist/ui-common-locales/mn-MN.json +322 -0
  827. package/dist/ui-common-locales/ms-MY.json +326 -0
  828. package/dist/ui-common-locales/pl-PL.json +326 -0
  829. package/dist/ui-common-locales/pt-BR.json +326 -0
  830. package/dist/ui-common-locales/pt-PT.json +326 -0
  831. package/dist/ui-common-locales/ru-RU.json +326 -0
  832. package/dist/ui-common-locales/th-TH.json +326 -0
  833. package/dist/ui-common-locales/tr-TR.json +326 -0
  834. package/dist/ui-common-locales/vi-VN.json +326 -0
  835. package/dist/ui-common-locales/zh-CN.json +326 -0
  836. package/dist/ui-common-locales/zh-TW.json +326 -0
  837. package/dist/ui-common.css +51 -0
  838. package/exports.customs.json +62 -0
  839. package/exports.exclude.json +47 -0
  840. package/package.json +565 -21
  841. package/dist/assets/components/Badge/Badge.css +0 -1
  842. package/dist/assets/components/BaseCard/BaseCard.css +0 -1
  843. package/dist/assets/components/Button/Button.css +0 -1
  844. package/dist/assets/components/DataTable/DataTable.css +0 -1
  845. package/dist/assets/components/Drawer/Drawer.css +0 -1
  846. package/dist/assets/components/EmptyState/EmptyState.css +0 -1
  847. package/dist/assets/components/ProgressBar/ProgressBar.css +0 -1
  848. package/dist/assets/components/Skeleton/Skeleton.css +0 -1
  849. package/dist/assets/components/StatusTag/StatusTag.css +0 -1
  850. package/dist/assets/components/Tabs/Tabs.css +0 -1
  851. package/dist/assets/components/Tooltip/Tooltip.css +0 -1
  852. package/dist/components/Badge/Badge.d.ts +0 -7
  853. package/dist/components/Badge/Badge2.js +0 -20
  854. package/dist/components/Badge/Badge2.js.map +0 -1
  855. package/dist/components/Badge/index.d.ts +0 -2
  856. package/dist/components/Badge/index.js +0 -2
  857. package/dist/components/BaseCard/BaseCard.d.ts +0 -57
  858. package/dist/components/BaseCard/BaseCard2.js +0 -37
  859. package/dist/components/BaseCard/BaseCard2.js.map +0 -1
  860. package/dist/components/BaseCard/index.d.ts +0 -2
  861. package/dist/components/BaseCard/index.js +0 -2
  862. package/dist/components/Button/Button.d.ts +0 -54
  863. package/dist/components/Button/Button2.js +0 -75
  864. package/dist/components/Button/Button2.js.map +0 -1
  865. package/dist/components/Button/index.d.ts +0 -5
  866. package/dist/components/Button/index.js +0 -2
  867. package/dist/components/DataTable/DataTable.d.ts +0 -144
  868. package/dist/components/DataTable/DataTable2.js +0 -244
  869. package/dist/components/DataTable/DataTable2.js.map +0 -1
  870. package/dist/components/DataTable/index.d.ts +0 -2
  871. package/dist/components/DataTable/index.js +0 -2
  872. package/dist/components/Drawer/Drawer.d.ts +0 -25
  873. package/dist/components/Drawer/Drawer2.js +0 -107
  874. package/dist/components/Drawer/Drawer2.js.map +0 -1
  875. package/dist/components/Drawer/index.d.ts +0 -2
  876. package/dist/components/Drawer/index.js +0 -2
  877. package/dist/components/EmptyState/EmptyState.d.ts +0 -52
  878. package/dist/components/EmptyState/EmptyState.example.d.ts +0 -8
  879. package/dist/components/EmptyState/EmptyState2.js +0 -62
  880. package/dist/components/EmptyState/EmptyState2.js.map +0 -1
  881. package/dist/components/EmptyState/index.d.ts +0 -10
  882. package/dist/components/EmptyState/index.js +0 -2
  883. package/dist/components/ProgressBar/ProgressBar.d.ts +0 -22
  884. package/dist/components/ProgressBar/ProgressBar2.js +0 -37
  885. package/dist/components/ProgressBar/ProgressBar2.js.map +0 -1
  886. package/dist/components/ProgressBar/index.d.ts +0 -2
  887. package/dist/components/ProgressBar/index.js +0 -2
  888. package/dist/components/Skeleton/Skeleton.d.ts +0 -25
  889. package/dist/components/Skeleton/Skeleton2.js +0 -27
  890. package/dist/components/Skeleton/Skeleton2.js.map +0 -1
  891. package/dist/components/StatusTag/StatusTag.d.ts +0 -38
  892. package/dist/components/StatusTag/StatusTag2.js +0 -45
  893. package/dist/components/StatusTag/StatusTag2.js.map +0 -1
  894. package/dist/components/StatusTag/index.d.ts +0 -2
  895. package/dist/components/StatusTag/index.js +0 -2
  896. package/dist/components/Tabs/Tabs.d.ts +0 -94
  897. package/dist/components/Tabs/Tabs2.js +0 -412
  898. package/dist/components/Tabs/Tabs2.js.map +0 -1
  899. package/dist/components/Tabs/index.d.ts +0 -2
  900. package/dist/components/Tabs/index.js +0 -2
  901. package/dist/components/Tooltip/Tooltip.d.ts +0 -16
  902. package/dist/components/Tooltip/Tooltip2.js +0 -68
  903. package/dist/components/Tooltip/Tooltip2.js.map +0 -1
  904. package/dist/components/Tooltip/index.d.ts +0 -2
  905. package/dist/components/Tooltip/index.js +0 -2
  906. package/dist/hooks/index.js +0 -2
  907. package/dist/icons/AlertCircleIcon.d.ts +0 -11
  908. package/dist/icons/AlertCircleIcon.js +0 -26
  909. package/dist/icons/AlertCircleIcon.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataGrid2.js","names":[],"sources":["../../../src/components/DataGrid/DataGrid.tsx"],"sourcesContent":["/**\n * DataGrid\n *\n * Astryx `Table` with the pieces a list page needs around it: a page bar with\n * a range line, client or server sorting, row selection by key, resizable\n * and pinnable columns, expandable rows, per-user column settings (visibility,\n * order, width) and a CSV export picker.\n *\n * Rows are sliced to the page unless `pagination.totalItems` says the caller\n * already sliced them. Sorting is client-side for columns with `compare`,\n * otherwise it only reports `onSortChange`. Column settings live in one\n * overrides record (`hidden`, `order`, `width` per column key) that a product\n * persists as it likes.\n *\n * Plugin order matters: Astryx runs columnSettings, sort, selection, then\n * unknown names in insertion order. `resize` / `sticky` / `scrollX` /\n * `scrollY` / `cellRow` / `expansion` read the final column list, and\n * `scrollY` runs before `cellRow` so a column's `getCellProps` wins.\n *\n * @example\n * <DataGrid\n * data={users}\n * idKey=\"id\"\n * columns={[\n * { key: \"name\", header: \"Name\", renderCell: (u) => u.name, sortKey: \"name\" },\n * { key: \"email\", header: \"Email\", renderCell: (u) => u.email },\n * ]}\n * sort={sort}\n * onSortChange={setSort}\n * pagination={{ page, pageSize, totalItems, onChange: setPage }}\n * />\n */\nimport {\n isValidElement,\n type Key,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type ReactElement,\n type ReactNode,\n type TdHTMLAttributes,\n} from \"react\";\nimport { EmptyState } from \"@astryxdesign/core/EmptyState\";\nimport { Button } from \"@astryxdesign/core/Button\";\nimport { Icon } from \"@astryxdesign/core/Icon\";\nimport { IconButton } from \"@astryxdesign/core/IconButton\";\nimport { Pagination, type PaginationProps } from \"@astryxdesign/core/Pagination\";\nimport { HStack, VStack } from \"@astryxdesign/core/Stack\";\nimport {\n Table,\n pixel,\n proportional,\n useTableColumnResize,\n useTableColumnSettings,\n useTableSelection,\n useTableSortable,\n useTableStickyColumns,\n type TableColumn,\n type TablePlugin,\n type TableProps,\n type TableSortState,\n} from \"@astryxdesign/core/Table\";\nimport { Text } from \"@astryxdesign/core/Text\";\nimport { ChevronDown, ChevronRight, FileDown, Inbox, Settings } from \"lucide-react\";\n\nimport { useUicTranslator } from \"../../i18n/useUicTranslator\";\nimport {\n DataGridExportModal,\n type DataGridExportModalProps,\n} from \"./DataGridExportModal\";\nimport {\n DataGridSettingsModal,\n type DataGridSettingsModalProps,\n type DataGridSettingsResult,\n} from \"./DataGridSettingsModal\";\nimport { nodeToPlainText } from \"./nodeToPlainText\";\nimport \"./DataGrid.css\";\n\n/** A row identity, as `idKey` returns it. */\nexport type DataGridKey = Key;\n\nexport type DataGridSortDirection = \"ascending\" | \"descending\";\n\n/** The active sort: one column, by its `sortKey`. */\nexport interface DataGridSort {\n sortKey: string;\n direction: DataGridSortDirection;\n}\n\nexport interface DataGridColumn<T> {\n /** Stable identity: column settings, widths and pinning use it. */\n key: string;\n /** Header content. It is clipped to the column width. */\n header?: ReactNode;\n /** Caption above the header, for a column that belongs to a group. */\n groupHeader?: ReactNode;\n /**\n * Plain-text name in the settings and export dialogs. Default: the text of\n * `groupHeader` and `header` joined with \" / \", else the key.\n */\n label?: string;\n /** Cell content. `index` is the row's position on the current page. */\n renderCell?: (item: T, index: number) => ReactNode;\n /** Width in pixels. A resized width replaces it. Without one the column flexes. */\n width?: number;\n /** Lower bound, in pixels, of a flexing column. */\n minWidth?: number;\n align?: \"start\" | \"center\" | \"end\";\n /** Makes the column sortable. The sort state names it by this key. */\n sortKey?: string;\n /**\n * Sorts the rows on the client when this column is sorted. Compare in\n * ascending order; the grid reverses the result for descending.\n */\n compare?: (a: T, b: T, direction: DataGridSortDirection) => number;\n /**\n * Pins the column to an edge. Only the contiguous run of pinned columns at\n * each edge of the displayed order is pinned.\n */\n pin?: \"start\" | \"end\";\n /** Column settings cannot hide it. */\n isAlwaysVisible?: boolean;\n /** Hidden until the user shows it in the column settings. */\n isHiddenByDefault?: boolean;\n /** Fields this column exports as. Without them it cannot be exported. */\n exportKeys?: ReadonlyArray<string>;\n /** Extra attributes for this column's body cells. */\n getCellProps?: (item: T, index: number) => TdHTMLAttributes<HTMLTableCellElement>;\n}\n\n/** Per-column settings a user changed, keyed by column key. */\nexport interface DataGridColumnOverride {\n hidden?: boolean;\n /** Display position. Lower comes first. Set only after a reorder. */\n order?: number;\n /** Resized width in pixels. */\n width?: number;\n}\n\nexport type DataGridColumnOverrides = Record<string, DataGridColumnOverride>;\n\nexport interface DataGridColumnSettings {\n /** Controlled overrides. */\n overrides?: DataGridColumnOverrides;\n /** Initial overrides when uncontrolled; always merged under `overrides`. */\n defaultOverrides?: DataGridColumnOverrides;\n onOverridesChange?: (overrides: DataGridColumnOverrides) => void;\n /** Whether the settings dialog lets the user reorder columns. Default: true */\n isReorderable?: boolean;\n /** Strings of the settings dialog. */\n modalProps?: Pick<\n DataGridSettingsModalProps,\n \"title\" | \"subtitle\" | \"searchLabel\" | \"noMatchText\" | \"applyLabel\" | \"cancelLabel\"\n >;\n}\n\nexport interface DataGridCsvExport {\n /** Export keys the backend can produce. Columns asking for others are disabled. */\n supportedKeys: ReadonlyArray<string>;\n /** Runs the export with the chosen keys. The dialog closes when it resolves. */\n onExport: (keys: string[]) => Promise<void>;\n /** A warning above the column list, e.g. that the export is truncated. */\n notice?: ReactNode;\n /** Strings of the export dialog. */\n modalProps?: Pick<\n DataGridExportModalProps,\n \"title\" | \"subtitle\" | \"searchLabel\" | \"noMatchText\" | \"exportLabel\" | \"cancelLabel\"\n >;\n}\n\nexport interface DataGridSelection<T> {\n /** The selected row keys. Selection is controlled. */\n selectedKeys?: ReadonlyArray<DataGridKey>;\n onChange?: (keys: string[], items: T[]) => void;\n /** Whether a row's checkbox is enabled. Select-all leaves a disabled row as it is. */\n getIsItemEnabled?: (item: T) => boolean;\n /** Accessible name of a row's checkbox. Default: the row key. */\n getRowLabel?: (item: T) => string;\n /** Select-all keeps keys of rows on other pages. Default: false */\n isPreservingOtherPages?: boolean;\n}\n\nexport interface DataGridExpansion<T> {\n renderExpandedRow: (item: T, index: number) => ReactNode;\n getIsRowExpandable?: (item: T) => boolean;\n /** Controlled expanded row keys. */\n expandedKeys?: ReadonlyArray<DataGridKey>;\n defaultExpandedKeys?: ReadonlyArray<DataGridKey>;\n onExpandedKeysChange?: (keys: ReadonlyArray<DataGridKey>) => void;\n /** Header content of the expand-button column. */\n columnHeader?: ReactNode;\n /** Width in pixels of the expand-button column. */\n columnWidth?: number;\n}\n\nexport interface DataGridPagination extends Omit<\n PaginationProps,\n | \"page\"\n | \"totalItems\"\n | \"onChange\"\n | \"onPageSizeChange\"\n | \"label\"\n | \"ref\"\n | \"totalPages\"\n | \"hasMore\"\n> {\n /** Controlled page, 1-based. */\n page?: number;\n defaultPage?: number;\n defaultPageSize?: number;\n /**\n * Total row count. Without it the grid pages `data` itself; a total larger\n * than `data` declares the rows already sliced to the page.\n */\n totalItems?: number;\n onChange?: (page: number, pageSize: number) => void;\n /** Whether the bar offers a page-size choice. Default: true */\n hasPageSizeSelector?: boolean;\n /** Hides the page bar while every row fits on one page. Default: false */\n isHiddenOnSinglePage?: boolean;\n /** Content at the end of the bar. */\n endContent?: ReactNode;\n}\n\ntype AnyRow = Record<string, unknown>;\n\nexport interface DataGridProps<T extends object = AnyRow> extends Omit<\n TableProps<AnyRow>,\n | \"data\"\n | \"columns\"\n | \"idKey\"\n | \"rowIndexStart\"\n | \"rowCount\"\n | \"children\"\n | \"scrollWrapper\"\n | \"ref\"\n | \"emptyState\"\n | \"className\"\n | \"style\"\n | \"plugins\"\n | \"onChange\"\n> {\n data?: ReadonlyArray<T>;\n columns?: ReadonlyArray<DataGridColumn<T>>;\n /**\n * Row identity: a field name or a function. A missing field falls back to\n * the row's `key`, then its `id`, then its position.\n */\n idKey?: string | ((item: T) => DataGridKey);\n /** Dims the rows and blocks input while data is refetched. */\n isLoading?: boolean;\n /** Drag-to-resize column borders. Default: true */\n isResizable?: boolean;\n /** Controlled sort; `null` for none. */\n sort?: DataGridSort | null;\n defaultSort?: DataGridSort | null;\n onSortChange?: (sort: DataGridSort | null) => void;\n selection?: DataGridSelection<T>;\n /** The page bar. `false` shows every row and no bar. */\n pagination?: false | DataGridPagination;\n /** Enables the column settings button and persists resized widths. */\n columnSettings?: DataGridColumnSettings;\n /** Enables the CSV export button. */\n csvExport?: DataGridCsvExport;\n expansion?: DataGridExpansion<T>;\n /**\n * Shown in place of the rows when there are none. A string gets the default\n * icon and layout, a node is rendered as is, `false` shows nothing. Default:\n * the catalog's `uic.DataGrid.noData`.\n */\n emptyState?: ReactNode | false;\n /** Extra attributes for a body row. */\n getRowProps?: (\n item: T,\n index: number | undefined,\n ) => HTMLAttributes<HTMLTableRowElement>;\n /**\n * Scrolls horizontally with the table at this width (at least the\n * container's). Columns without a width then size to their content.\n */\n scrollWidth?: number | string;\n /** Caps the rows' height and makes the header sticky. */\n maxHeight?: number | string;\n /** Hides the header row, and with it sorting and select-all. */\n isHeaderHidden?: boolean;\n /** Accessible name of the expand buttons. Default: the catalog's `uic.DataGrid.expandRow` */\n expandRowLabel?: string;\n /** Shown when the page lies past the last one. Default: the catalog's `uic.DataGrid.invalidPage` */\n invalidPageText?: string;\n /** Default: the catalog's `uic.DataGrid.goToFirstPage` */\n goToFirstPageLabel?: string;\n /** Accessible name of the page navigation. Default: the catalog's `uic.DataGrid.pagination` */\n paginationLabel?: string;\n /** The range line beside the page navigation. Default: the catalog's `uic.DataGrid.range` */\n renderRange?: (range: { start: number; end: number; total: number }) => ReactNode;\n /** Default: the catalog's `uic.DataGrid.settings` */\n settingsLabel?: string;\n /** Default: the catalog's `uic.DataGrid.exportCsv` */\n exportLabel?: string;\n className?: string;\n style?: CSSProperties;\n}\n\nconst EXPAND_COLUMN_KEY = \"__uic_expand__\";\n/** Key of the checkbox column Astryx's selection plugin injects; not exported by Astryx. */\nconst SELECTION_COLUMN_KEY = \"__xds_selection\";\n/**\n * Measured column widths, in pixels. Selection: Astryx's 24px first-column\n * inset + the 20px checkbox + an 8px trailing pad (the plugin's own 36 lets\n * the checkbox overhang its cell). Expand: the same inset + the 24px button +\n * 8px, or an 8px lead-in instead of the inset behind a selection column.\n */\nconst SELECTION_COLUMN_WIDTH = 52;\nconst EXPAND_COLUMN_WIDTH_FIRST = 56;\nconst EXPAND_COLUMN_WIDTH_AFTER_SELECTION = 40;\nconst MIN_COLUMN_WIDTH = 60;\nconst DETAIL_ROW_MARKER = \"__uic_detail_for__\";\nconst DEFAULT_PAGE_SIZE = 10;\nconst DEFAULT_PAGE_SIZE_OPTIONS = [10, 20, 50];\n\nconst EMPTY_STATE_ICON = <Icon icon={Inbox} size=\"lg\" color=\"secondary\" />;\n\nconst X_HEADER_RELEASE: CSSProperties = { width: \"auto\", maxWidth: \"none\" };\nconst X_BODY_RELEASE: CSSProperties = { maxWidth: \"none\" };\n// Inline beats the sticky-header rule's z 2 for pinned header cells.\nconst Y_PINNED_HEADER_STACK: CSSProperties = { zIndex: 3 };\n\nconst isDetailRow = (item: unknown): item is AnyRow =>\n !!item && typeof item === \"object\" && DETAIL_ROW_MARKER in item;\n\nconst toCssLength = (value: number | string): string =>\n typeof value === \"number\" ? `${value}px` : value;\n\nfunction mergeCellStyle<P extends { htmlProps: { style?: CSSProperties } }>(\n props: P,\n extra: CSSProperties,\n): P {\n return {\n ...props,\n htmlProps: {\n ...props.htmlProps,\n style: props.htmlProps.style ? { ...props.htmlProps.style, ...extra } : extra,\n },\n };\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\n/** The label a column carries in the settings and export dialogs. */\nexport function dataGridColumnLabel<T>(column: DataGridColumn<T>): string {\n if (column.label) return column.label;\n const own = nodeToPlainText(column.header).trim();\n const group = nodeToPlainText(column.groupHeader).trim();\n const label = group && own ? `${group} / ${own}` : own || group;\n return label || column.key;\n}\n\n/** Whether a column shows, given the user's overrides. */\n/**\n * The overrides record a settings dialog result writes. `defaultOverrides`\n * stays merged under it key by key, and a key it holds replaces the default's\n * entry whole. So a column is left out only while its default (natural, then\n * `defaultOverrides`) already renders what the user chose, and an entry that\n * is written states everything that differs from the natural column:\n * otherwise re-showing a column the defaults hide, or restoring the natural\n * order over a reordering default, would bring the default back.\n *\n * @internal Exported for tests.\n */\nexport function dataGridSettingsToOverrides({\n columns,\n result,\n defaultOverrides = {},\n overrides,\n isReorderable,\n}: {\n columns: ReadonlyArray<Pick<DataGridColumn<never>, \"key\" | \"isHiddenByDefault\">>;\n result: DataGridSettingsResult;\n defaultOverrides?: DataGridColumnOverrides;\n /** The overrides in effect, defaults merged; their widths are kept. */\n overrides: DataGridColumnOverrides;\n isReorderable: boolean;\n}): DataGridColumnOverrides {\n const naturalOrder = columns.map((column) => column.key);\n // A default order is only undone by stating every column's position.\n const writesOrder =\n isReorderable &&\n (result.columnOrder.length !== naturalOrder.length ||\n result.columnOrder.some((key, index) => key !== naturalOrder[index]) ||\n columns.some((column) => defaultOverrides[column.key]?.order !== undefined));\n const next: DataGridColumnOverrides = {};\n for (const column of columns) {\n const fallback = defaultOverrides[column.key];\n const naturalHidden = !!column.isHiddenByDefault;\n const defaultHidden = fallback?.hidden ?? naturalHidden;\n const hidden = !result.selectedColumnKeys.includes(column.key);\n const override: DataGridColumnOverride = {};\n if (hidden !== naturalHidden || hidden !== defaultHidden) override.hidden = hidden;\n if (writesOrder) {\n const orderIndex = result.columnOrder.indexOf(column.key);\n if (orderIndex !== -1) override.order = orderIndex;\n }\n // A settings change must not reset resized widths.\n const width = overrides[column.key]?.width;\n if (typeof width === \"number\") override.width = width;\n const matchesDefault =\n hidden === defaultHidden &&\n override.order === fallback?.order &&\n override.width === fallback?.width;\n if (!matchesDefault && Object.keys(override).length > 0)\n next[column.key] = override;\n }\n return next;\n}\n\nexport function isDataGridColumnVisible<T>(\n column: Pick<DataGridColumn<T>, \"key\" | \"isAlwaysVisible\" | \"isHiddenByDefault\">,\n overrides?: DataGridColumnOverrides,\n): boolean {\n if (column.isAlwaysVisible) return true;\n const hidden = overrides?.[column.key]?.hidden;\n return hidden !== undefined ? !hidden : !column.isHiddenByDefault;\n}\n\n/** Controlled when `value` is not undefined; the setter writes state only when uncontrolled. */\nfunction useControllableState<V>(value: V | undefined, initial: () => V) {\n const [state, setState] = useState<V>(initial);\n const isControlled = value !== undefined;\n const current = isControlled ? value : state;\n const set = (next: V) => {\n if (!isControlled) setState(next);\n };\n return [current, set] as const;\n}\n\nexport function DataGrid<T extends object = AnyRow>({\n data,\n columns = [],\n idKey = \"id\",\n isLoading = false,\n isResizable = true,\n sort: sortProp,\n defaultSort,\n onSortChange,\n selection,\n pagination,\n columnSettings,\n csvExport,\n expansion,\n emptyState,\n getRowProps,\n scrollWidth,\n maxHeight,\n isHeaderHidden = false,\n expandRowLabel,\n invalidPageText,\n goToFirstPageLabel,\n paginationLabel,\n renderRange,\n settingsLabel,\n exportLabel,\n density = \"compact\",\n dividers = \"rows\",\n hasHover = true,\n textOverflow = \"truncate\",\n className,\n style,\n ...tableProps\n}: DataGridProps<T>): ReactElement {\n const t = useUicTranslator();\n\n const isScrollX = scrollWidth !== undefined;\n const isScrollY = maxHeight !== undefined;\n\n const [isSettingsOpen, setIsSettingsOpen] = useState(false);\n const [isExportOpen, setIsExportOpen] = useState(false);\n\n /* ---- column overrides (visibility / order / width) ------------------- */\n\n const [storedOverrides, setStoredOverrides] = useState<DataGridColumnOverrides>(\n () => columnSettings?.defaultOverrides ?? {},\n );\n const isOverridesControlled = columnSettings?.overrides !== undefined;\n const ownOverrides = isOverridesControlled\n ? (columnSettings?.overrides ?? {})\n : storedOverrides;\n const setOverrides = (next: DataGridColumnOverrides) => {\n if (!isOverridesControlled) setStoredOverrides(next);\n columnSettings?.onOverridesChange?.(next);\n };\n const overrides: DataGridColumnOverrides = {\n ...(columnSettings?.defaultOverrides ?? {}),\n ...ownOverrides,\n };\n const isReorderable = !!columnSettings && columnSettings.isReorderable !== false;\n\n /* ---- resized widths ---------------------------------------------------- */\n\n // With columnSettings a width rides in the overrides record, so a resize\n // persists like a visibility change; without it the width is local state.\n const [localWidths, setLocalWidths] = useState<Record<string, number>>({});\n const columnWidths: Record<string, number> = {};\n if (columnSettings) {\n for (const [key, override] of Object.entries(overrides)) {\n if (typeof override?.width === \"number\") columnWidths[key] = override.width;\n }\n } else {\n Object.assign(columnWidths, localWidths);\n }\n\n const handleResizeEnd = (updates: Record<string, number>) => {\n if (!columnSettings) {\n setLocalWidths((prev) => ({ ...prev, ...updates }));\n return;\n }\n const next: DataGridColumnOverrides = { ...ownOverrides };\n for (const [key, width] of Object.entries(updates)) {\n if (key === EXPAND_COLUMN_KEY) continue;\n next[key] = { ...next[key], width };\n }\n setOverrides(next);\n };\n\n /* ---- row keys ---------------------------------------------------------- */\n\n const getRowKey = (item: T): string => {\n if (typeof idKey === \"function\") return String(idKey(item));\n const row = item as AnyRow;\n const direct = row[idKey];\n if (direct != null) return String(direct);\n const fallback = row.key ?? row.id;\n if (fallback != null) return String(fallback);\n return `__row_${data ? data.indexOf(item) : -1}`;\n };\n\n /* ---- sort -------------------------------------------------------------- */\n\n const [activeSort, setActiveSort] = useControllableState<DataGridSort | null>(\n sortProp,\n () => defaultSort ?? null,\n );\n\n const sortedRows = ((): T[] => {\n const source = data ? [...data] : [];\n if (!activeSort) return source;\n const compare = columns.find(\n (column) => column.sortKey === activeSort.sortKey && column.compare,\n )?.compare;\n if (!compare) return source;\n const { direction } = activeSort;\n return source.sort((a, b) =>\n direction === \"descending\" ? -compare(a, b, direction) : compare(a, b, direction),\n );\n })();\n\n /* ---- pagination -------------------------------------------------------- */\n\n const pager = pagination === false ? undefined : (pagination ?? {});\n const [currentPage, setCurrentPage] = useControllableState<number>(\n pager?.page,\n () => pager?.defaultPage ?? 1,\n );\n const [pageSize, setPageSize] = useControllableState<number>(\n pager?.pageSize,\n () => pager?.defaultPageSize ?? DEFAULT_PAGE_SIZE,\n );\n\n // Astryx's Pagination answers a page-size pick with onPageSizeChange(size)\n // and then onChange(1) in the same event, still closing over the old size.\n // Forwarding the second call would undo the pick on a controlled grid, so it\n // is dropped; a microtask clears the flag.\n const isPageSizeChangingRef = useRef(false);\n\n const total = pager?.totalItems ?? sortedRows.length;\n const lastPage = Math.max(1, Math.ceil(total / pageSize));\n const activePage = clamp(currentPage, 1, lastPage);\n const isPageOutOfRange =\n !!pager && total > 0 && (currentPage < 1 || currentPage > lastPage);\n // A total above the rows in hand means they are already one page.\n const isServerSliced = total > sortedRows.length;\n const pagedRows =\n pager && !isServerSliced && sortedRows.length > pageSize\n ? sortedRows.slice((activePage - 1) * pageSize, activePage * pageSize)\n : sortedRows;\n const rows = isPageOutOfRange ? [] : pagedRows;\n\n /* ---- expansion --------------------------------------------------------- */\n\n const [storedExpandedKeys, setStoredExpandedKeys] = useState<DataGridKey[]>(() => [\n ...(expansion?.defaultExpandedKeys ?? []),\n ]);\n const expandedKeys = expansion?.expandedKeys ?? storedExpandedKeys;\n const expandedKeySet = new Set(expandedKeys.map(String));\n const hasExpansion = !!expansion;\n const expandColumnWidth =\n expansion?.columnWidth ??\n (selection ? EXPAND_COLUMN_WIDTH_AFTER_SELECTION : EXPAND_COLUMN_WIDTH_FIRST);\n const detailInsetStart = (selection ? SELECTION_COLUMN_WIDTH : 0) + expandColumnWidth;\n\n const toggleExpanded = (key: string) => {\n const next = expandedKeySet.has(key)\n ? expandedKeys.filter((k) => String(k) !== key)\n : [...expandedKeys, key];\n if (!expansion?.expandedKeys) setStoredExpandedKeys(next);\n expansion?.onExpandedKeysChange?.(next);\n };\n\n const rowIndexByKey = new Map<string, number>();\n rows.forEach((item, index) => rowIndexByKey.set(getRowKey(item), index));\n\n // Each expanded row is followed by a marker row the expansion plugin turns\n // into one full-width cell.\n const tableData: AnyRow[] = [];\n for (const item of rows) {\n tableData.push(item as AnyRow);\n if (!hasExpansion) continue;\n const key = getRowKey(item);\n if (expandedKeySet.has(key) && (expansion?.getIsRowExpandable?.(item) ?? true)) {\n tableData.push({ [DETAIL_ROW_MARKER]: key, id: `${key}__detail` });\n }\n }\n\n // From every row, not the page: selection resolves keys on other pages too.\n const itemByKey = new Map<string, T>();\n sortedRows.forEach((item) => itemByKey.set(getRowKey(item), item));\n\n /* ---- Astryx columns ---------------------------------------------------- */\n\n const tableColumns: TableColumn<AnyRow>[] = [];\n if (hasExpansion) {\n tableColumns.push({\n key: EXPAND_COLUMN_KEY,\n header: expansion?.columnHeader ?? \"\",\n width: pixel(expandColumnWidth),\n resizable: false,\n renderCell: (row) => {\n if (isDetailRow(row)) return null;\n const item = row as T;\n if (!(expansion?.getIsRowExpandable?.(item) ?? true)) return null;\n const key = getRowKey(item);\n return (\n <IconButton\n label={expandRowLabel ?? t(\"uic.DataGrid.expandRow\")}\n icon={expandedKeySet.has(key) ? <ChevronDown /> : <ChevronRight />}\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => toggleExpanded(key)}\n />\n );\n },\n });\n }\n\n for (const column of columns) {\n const width = columnWidths[column.key] ?? column.width;\n const header = (\n <span className=\"uic-data-grid__clip\">\n {column.groupHeader == null ? (\n column.header\n ) : (\n <VStack gap={0} align=\"start\">\n <Text type=\"supporting\" color=\"secondary\">\n {column.groupHeader}\n </Text>\n <span>{column.header}</span>\n </VStack>\n )}\n </span>\n );\n tableColumns.push({\n key: column.key,\n header,\n align: column.align === \"start\" ? undefined : column.align,\n sortable: column.sortKey ? { sortKey: column.sortKey } : false,\n resizable: isResizable,\n // In scroll-x mode a width-less column takes no width, so its content sizes it.\n width:\n width != null\n ? pixel(width)\n : isScrollX\n ? undefined\n : proportional(\n 1,\n typeof column.minWidth === \"number\"\n ? { minWidth: column.minWidth }\n : undefined,\n ),\n renderCell: (row) => {\n if (isDetailRow(row)) return null;\n const item = row as T;\n const content = column.renderCell\n ? column.renderCell(item, rowIndexByKey.get(getRowKey(item)) ?? 0)\n : defaultCell(row[column.key]);\n if (textOverflow !== \"truncate\" || content == null) return content;\n return <span className=\"uic-data-grid__clip\">{content}</span>;\n },\n });\n }\n\n /* ---- visibility + order ------------------------------------------------ */\n\n const visibleColumns = columnSettings\n ? columns.filter((column) => isDataGridColumnVisible(column, overrides))\n : [...columns];\n const orderedColumns = isReorderable\n ? visibleColumns\n .map((column, index) => ({ column, index }))\n .sort(\n (a, b) =>\n (overrides[a.column.key]?.order ?? Number.MAX_SAFE_INTEGER) -\n (overrides[b.column.key]?.order ?? Number.MAX_SAFE_INTEGER) ||\n a.index - b.index,\n )\n .map(({ column }) => column)\n : visibleColumns;\n const activeColumnKeys = [\n ...(hasExpansion ? [EXPAND_COLUMN_KEY] : []),\n ...orderedColumns.map((column) => column.key),\n ];\n\n const columnSettingsPlugin = useTableColumnSettings<AnyRow>({\n columns: [\n ...(hasExpansion\n ? [{ key: EXPAND_COLUMN_KEY, label: \"\", isAlwaysVisible: true }]\n : []),\n ...columns.map((column) => ({\n key: column.key,\n label: dataGridColumnLabel(column),\n isAlwaysVisible: !!column.isAlwaysVisible,\n })),\n ],\n activeColumnKeys,\n // The settings dialog owns the write path (it keeps `order` and `width`).\n onChangeActiveColumnKeys: () => {},\n });\n\n /* ---- pinning ----------------------------------------------------------- */\n\n const startKeys: string[] = [];\n for (const column of orderedColumns) {\n if (column.pin === \"start\") startKeys.push(column.key);\n else break;\n }\n const endKeys: string[] = [];\n for (const column of [...orderedColumns].reverse()) {\n if (column.pin === \"end\") endKeys.unshift(column.key);\n else break;\n }\n const stickyConfig = {\n startKeys:\n startKeys.length === 0\n ? undefined\n : [\n ...(selection ? [SELECTION_COLUMN_KEY] : []),\n ...(hasExpansion ? [EXPAND_COLUMN_KEY] : []),\n ...startKeys,\n ],\n endKeys: endKeys.length === 0 ? undefined : endKeys,\n };\n const stickyPlugin = useTableStickyColumns<AnyRow>(\n stickyConfig.startKeys || stickyConfig.endKeys ? stickyConfig : {},\n );\n\n /* ---- per-cell / per-row attributes -------------------------------------- */\n\n const columnByKey = new Map(columns.map((column) => [column.key, column]));\n\n const cellRowPlugin: TablePlugin<AnyRow> = {\n transformBodyCell: (props, column, row) => {\n if (isDetailRow(row)) return props;\n const item = row as T;\n const extra = columnByKey\n .get(column.key)\n ?.getCellProps?.(item, rowIndexByKey.get(getRowKey(item)) ?? 0);\n if (!extra) return props;\n return {\n ...props,\n htmlProps: {\n ...props.htmlProps,\n ...extra,\n style: { ...props.htmlProps.style, ...extra.style },\n },\n };\n },\n transformBodyRow: (props, row) => {\n if (!getRowProps || isDetailRow(row)) return props;\n const item = row as T;\n const extra = getRowProps(item, rowIndexByKey.get(getRowKey(item)));\n if (!extra) return props;\n return {\n ...props,\n htmlProps: {\n ...props.htmlProps,\n ...extra,\n style: { ...props.htmlProps.style, ...extra.style },\n },\n };\n },\n };\n\n // Astryx clips cells with `max-width: 0`; scroll-x releases width-less columns only.\n const scrollXPlugin: TablePlugin<AnyRow> = {\n transformHeaderCell: (props, column) =>\n column.width != null ? props : mergeCellStyle(props, X_HEADER_RELEASE),\n transformBodyCell: (props, column) =>\n column.width != null ? props : mergeCellStyle(props, X_BODY_RELEASE),\n };\n\n const pinnedKeys = new Set([\n ...(stickyConfig.startKeys ?? []),\n ...(stickyConfig.endKeys ?? []),\n ]);\n const scrollYPlugin: TablePlugin<AnyRow> = {\n transformHeaderCell: (props, column) =>\n pinnedKeys.has(column.key) ? mergeCellStyle(props, Y_PINNED_HEADER_STACK) : props,\n };\n\n /* ---- sorting ----------------------------------------------------------- */\n\n const sortState: TableSortState = activeSort\n ? [{ sortKey: activeSort.sortKey, direction: activeSort.direction }]\n : [];\n\n const sortPlugin = useTableSortable<AnyRow>({\n sort: sortState,\n allowUnsortedState: true,\n onSortChange: (next) => {\n const first = next[0];\n const nextSort: DataGridSort | null = first\n ? { sortKey: first.sortKey, direction: first.direction }\n : null;\n setActiveSort(nextSort);\n onSortChange?.(nextSort);\n },\n });\n\n /* ---- selection --------------------------------------------------------- */\n\n const selectedKeySet = new Set((selection?.selectedKeys ?? []).map(String));\n const emitSelection = (keys: string[]) => {\n const items = keys\n .map((key) => itemByKey.get(key))\n .filter((item) => item !== undefined);\n selection?.onChange?.(keys, items);\n };\n const isRowSelected = (item: T) => selectedKeySet.has(getRowKey(item));\n const isRowEnabled = (item: T) => selection?.getIsItemEnabled?.(item) ?? true;\n // Select-all acts on the enabled rows only; a disabled row keeps its state.\n const enabledRows = rows.filter(isRowEnabled);\n\n const selectionPlugin = useTableSelection<AnyRow>({\n getIsItemSelectable: (row) => !isDetailRow(row),\n getIsItemSelected: (row) => !isDetailRow(row) && isRowSelected(row as T),\n getIsItemEnabled: (row) => !isDetailRow(row) && isRowEnabled(row as T),\n getRowLabel: (row) =>\n isDetailRow(row)\n ? \"\"\n : (selection?.getRowLabel?.(row as T) ?? getRowKey(row as T)),\n getIsAllSelected: () => enabledRows.length > 0 && enabledRows.every(isRowSelected),\n getIsIndeterminate: () =>\n enabledRows.some(isRowSelected) && !enabledRows.every(isRowSelected),\n onSelectItem: ({ item, isSelected }) => {\n if (isDetailRow(item)) return;\n const key = getRowKey(item as T);\n const next = new Set(selectedKeySet);\n if (isSelected) next.add(key);\n else next.delete(key);\n emitSelection([...next]);\n },\n onSelectAll: ({ isAllSelected }) => {\n const next = new Set(selection?.isPreservingOtherPages ? selectedKeySet : []);\n for (const item of rows) {\n const key = getRowKey(item);\n const isSelected = isRowEnabled(item) ? isAllSelected : isRowSelected(item);\n if (isSelected) next.add(key);\n else next.delete(key);\n }\n emitSelection([...next]);\n },\n });\n\n const selectionWidthPlugin: TablePlugin<AnyRow> = {\n transformColumns: (cols) =>\n cols.map((column) =>\n column.key === SELECTION_COLUMN_KEY\n ? { ...column, width: pixel(SELECTION_COLUMN_WIDTH) }\n : column,\n ),\n };\n\n /* ---- resize ------------------------------------------------------------ */\n\n const resizePlugin = useTableColumnResize<AnyRow>({\n columns: tableColumns,\n columnWidths,\n minWidth: MIN_COLUMN_WIDTH,\n onColumnResizeEnd: handleResizeEnd,\n });\n\n /* ---- expansion --------------------------------------------------------- */\n\n const renderedColumnCount = activeColumnKeys.length + (selection ? 1 : 0);\n const expansionPlugin: TablePlugin<AnyRow> = {\n transformBodyRow: (props, row) => {\n if (!isDetailRow(row)) return props;\n const parentKey = String(row[DETAIL_ROW_MARKER]);\n const item = itemByKey.get(parentKey);\n if (!item) return props;\n return {\n ...props,\n children: (\n <td\n colSpan={renderedColumnCount}\n className=\"uic-data-grid__detail\"\n style={{ paddingInlineStart: detailInsetStart }}\n >\n {expansion?.renderExpandedRow(item, rowIndexByKey.get(parentKey) ?? 0)}\n </td>\n ),\n };\n },\n };\n\n const plugins: Record<string, TablePlugin<AnyRow>> = {\n columnSettings: columnSettingsPlugin,\n sort: sortPlugin,\n };\n if (selection) {\n plugins.selection = selectionPlugin;\n plugins.selectionWidth = selectionWidthPlugin;\n }\n if (isResizable) plugins.resize = resizePlugin;\n plugins.sticky = stickyPlugin;\n if (isScrollX) plugins.scrollX = scrollXPlugin;\n // Without pinned columns the sticky header is pure CSS.\n if (isScrollY && pinnedKeys.size > 0) plugins.scrollY = scrollYPlugin;\n plugins.cellRow = cellRowPlugin;\n if (hasExpansion) plugins.expansion = expansionPlugin;\n\n /* ---- bottom bar -------------------------------------------------------- */\n\n const {\n page: _page,\n defaultPage: _defaultPage,\n defaultPageSize: _defaultPageSize,\n totalItems: _totalItems,\n onChange: _onChange,\n hasPageSizeSelector = true,\n isHiddenOnSinglePage = false,\n endContent,\n pageSizeOptions,\n size: pagerSize = \"sm\",\n ...paginationRest\n } = pager ?? {};\n\n const rangeStart = total === 0 ? 0 : (activePage - 1) * pageSize + 1;\n const rangeEnd = Math.min(activePage * pageSize, total);\n const isPagerVisible = !!pager && !(isHiddenOnSinglePage && total <= pageSize);\n const hasBottomBar = isPagerVisible || !!columnSettings || !!csvExport;\n\n const emptyStateNode = isPageOutOfRange ? (\n // The way back outranks any empty state the caller gave.\n <EmptyState\n isCompact\n icon={EMPTY_STATE_ICON}\n title={invalidPageText ?? t(\"uic.DataGrid.invalidPage\")}\n actions={\n <Button\n variant=\"primary\"\n label={goToFirstPageLabel ?? t(\"uic.DataGrid.goToFirstPage\")}\n onClick={() => {\n setCurrentPage(1);\n pager?.onChange?.(1, pageSize);\n }}\n />\n }\n />\n ) : emptyState === false ? (\n false\n ) : emptyState == null || typeof emptyState === \"string\" ? (\n <EmptyState\n isCompact\n icon={EMPTY_STATE_ICON}\n title={emptyState ?? t(\"uic.DataGrid.noData\")}\n />\n ) : (\n emptyState\n );\n\n const applySettings = (result: DataGridSettingsResult) => {\n setIsSettingsOpen(false);\n setOverrides(\n dataGridSettingsToOverrides({\n columns,\n result,\n defaultOverrides: columnSettings?.defaultOverrides,\n overrides,\n isReorderable,\n }),\n );\n };\n\n return (\n <div\n className={[\"uic-data-grid\", className].filter(Boolean).join(\" \")}\n style={style}\n >\n <div\n aria-busy={isLoading || undefined}\n className={[\n \"uic-data-grid__body\",\n isLoading && \"uic-data-grid__body--loading\",\n isHeaderHidden && \"uic-data-grid__body--no-header\",\n dividers !== \"grid\" && \"uic-data-grid__body--header-split\",\n isScrollX && \"uic-data-grid__body--scroll-x\",\n isScrollY && \"uic-data-grid__body--scroll-y\",\n ]\n .filter(Boolean)\n .join(\" \")}\n style={\n {\n ...(isScrollX\n ? { \"--data-grid-scroll-width\": toCssLength(scrollWidth) }\n : null),\n ...(isScrollY\n ? { \"--data-grid-max-height\": toCssLength(maxHeight) }\n : null),\n } as CSSProperties\n }\n >\n <Table<AnyRow>\n {...tableProps}\n data={tableData}\n columns={tableColumns}\n idKey={(row: AnyRow) =>\n isDetailRow(row)\n ? `${String(row[DETAIL_ROW_MARKER])}__detail`\n : getRowKey(row as T)\n }\n density={density}\n dividers={dividers}\n hasHover={hasHover}\n textOverflow={textOverflow}\n emptyState={emptyStateNode}\n rowCount={total || undefined}\n rowIndexStart={pager ? (activePage - 1) * pageSize + 1 : undefined}\n plugins={plugins}\n />\n </div>\n\n {hasBottomBar ? (\n <HStack justify=\"end\" align=\"center\" gap={2} className=\"uic-data-grid__footer\">\n {isPagerVisible ? (\n <>\n <Text type=\"supporting\" color=\"secondary\">\n {renderRange\n ? renderRange({ start: rangeStart, end: rangeEnd, total })\n : t(\"uic.DataGrid.range\", {\n start: rangeStart,\n end: rangeEnd,\n total,\n })}\n </Text>\n <Pagination\n variant=\"pages\"\n {...paginationRest}\n page={activePage}\n pageSize={pageSize}\n totalItems={total}\n // Astryx shows the size choice exactly when options are passed.\n pageSizeOptions={\n hasPageSizeSelector\n ? (pageSizeOptions ?? DEFAULT_PAGE_SIZE_OPTIONS)\n : undefined\n }\n size={pagerSize}\n label={paginationLabel ?? t(\"uic.DataGrid.pagination\")}\n onChange={(page) => {\n if (isPageSizeChangingRef.current) return;\n setCurrentPage(page);\n pager?.onChange?.(page, pageSize);\n }}\n onPageSizeChange={(nextSize) => {\n isPageSizeChangingRef.current = true;\n queueMicrotask(() => {\n isPageSizeChangingRef.current = false;\n });\n setCurrentPage(1);\n setPageSize(nextSize);\n pager?.onChange?.(1, nextSize);\n }}\n />\n </>\n ) : null}\n {columnSettings ? (\n <IconButton\n label={settingsLabel ?? t(\"uic.DataGrid.settings\")}\n icon={<Settings />}\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsSettingsOpen(true)}\n />\n ) : null}\n {csvExport ? (\n <IconButton\n label={exportLabel ?? t(\"uic.DataGrid.exportCsv\")}\n icon={<FileDown />}\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setIsExportOpen(true)}\n />\n ) : null}\n {pager ? endContent : null}\n </HStack>\n ) : null}\n\n {columnSettings ? (\n <DataGridSettingsModal\n {...columnSettings.modalProps}\n isOpen={isSettingsOpen}\n onOpenChange={setIsSettingsOpen}\n columns={columns.map((column) => ({\n key: column.key,\n label: dataGridColumnLabel(column),\n isAlwaysVisible: !!column.isAlwaysVisible,\n }))}\n visibleColumnKeys={orderedColumns.map((column) => column.key)}\n isReorderable={isReorderable}\n onApply={applySettings}\n />\n ) : null}\n\n {csvExport ? (\n <DataGridExportModal\n {...csvExport.modalProps}\n isOpen={isExportOpen}\n onOpenChange={setIsExportOpen}\n columns={columns.map((column) => ({\n key: column.key,\n label: dataGridColumnLabel(column),\n exportKeys: column.exportKeys ?? [],\n }))}\n supportedKeys={csvExport.supportedKeys}\n notice={csvExport.notice}\n onExport={async (keys) => {\n await csvExport.onExport(keys);\n setIsExportOpen(false);\n }}\n />\n ) : null}\n </div>\n );\n}\n\nfunction defaultCell(value: unknown): ReactNode {\n if (value == null || value === \"\") return null;\n if (isValidElement(value)) return value;\n return String(value);\n}\n"],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { ReactElement, ReactNode } from 'react';
2
+ import { ModalProps } from '../Modal/Modal';
3
+ export interface DataGridExportColumn {
4
+ key: string;
5
+ label: string;
6
+ /** Fields the column exports as. None: the column cannot be exported. */
7
+ exportKeys: ReadonlyArray<string>;
8
+ }
9
+ export interface DataGridExportModalProps extends Pick<ModalProps, "isOpen" | "onOpenChange" | "afterOpenChange"> {
10
+ columns: ReadonlyArray<DataGridExportColumn>;
11
+ /** Export keys that can be produced. */
12
+ supportedKeys: ReadonlyArray<string>;
13
+ /** Runs the export. The Export button stays pending until it settles. */
14
+ onExport: (keys: string[]) => Promise<void> | void;
15
+ /** A warning above the list, e.g. that the export is truncated. */
16
+ notice?: ReactNode;
17
+ /** Default: the catalog's `uic.DataGrid.exportCsv` */
18
+ title?: string;
19
+ /** Default: the catalog's `uic.DataGrid.selectColumns` */
20
+ subtitle?: string;
21
+ /** Label and placeholder of the search field. Default: the catalog's `uic.DataGrid.searchColumns` */
22
+ searchLabel?: string;
23
+ /** Shown when no column matches the search. Default: the catalog's `uic.DataGrid.searchColumns` */
24
+ noMatchText?: ReactNode;
25
+ /** Default: the catalog's `uic.DataGrid.export` */
26
+ exportLabel?: string;
27
+ /** Default: the catalog's `uic.common.cancel` */
28
+ cancelLabel?: string;
29
+ }
30
+ export declare function DataGridExportModal({ isOpen, onOpenChange, afterOpenChange, ...bodyProps }: DataGridExportModalProps): ReactElement;
@@ -0,0 +1,125 @@
1
+ import { useUicTranslator as e } from "../../i18n/useUicTranslator.js";
2
+ import { Modal as t } from "../Modal/Modal2.js";
3
+ /* empty css */
4
+ import { useState as n } from "react";
5
+ import { Button as r } from "@astryxdesign/core/Button";
6
+ import { Layout as i, LayoutContent as a, LayoutFooter as o } from "@astryxdesign/core/Layout";
7
+ import { HStack as s, VStack as c } from "@astryxdesign/core/Stack";
8
+ import { Text as l } from "@astryxdesign/core/Text";
9
+ import { DialogHeader as u } from "@astryxdesign/core/Dialog";
10
+ import { jsx as d, jsxs as f } from "react/jsx-runtime";
11
+ import { TextInput as p } from "@astryxdesign/core/TextInput";
12
+ import { Banner as m } from "@astryxdesign/core/Banner";
13
+ import { CheckboxInput as h } from "@astryxdesign/core/CheckboxInput";
14
+ //#region src/components/DataGrid/DataGridExportModal.tsx
15
+ var g = 500, _ = "330px", v = (e) => [...e].sort().join(",");
16
+ function y({ columns: t, supportedKeys: g, onExport: y, onOpenChange: b, notice: x, title: S, subtitle: C, searchLabel: w, noMatchText: T, exportLabel: E, cancelLabel: D }) {
17
+ let O = e(), k = t.map((e) => ({
18
+ key: e.key,
19
+ label: e.label,
20
+ exportKeys: e.exportKeys,
21
+ isSelectable: e.exportKeys.length > 0 && e.exportKeys.every((e) => g.includes(e))
22
+ })), A = /* @__PURE__ */ new Map();
23
+ for (let e of k) {
24
+ if (e.exportKeys.length === 0 || !e.isSelectable) continue;
25
+ let t = v(e.exportKeys);
26
+ A.set(t, [...A.get(t) ?? [], e.key]);
27
+ }
28
+ let j = (e) => e.exportKeys.length === 0 ? [e.key] : A.get(v(e.exportKeys)) ?? [e.key], [M, N] = n(() => new Set(k.filter((e) => e.isSelectable).map((e) => e.key))), [P, F] = n(""), I = P ? k.filter((e) => e.label.toLowerCase().includes(P.toLowerCase())) : k, L = w ?? O("uic.DataGrid.searchColumns"), R = () => b?.(!1), z = (e, t) => {
29
+ N((n) => {
30
+ let r = new Set(n);
31
+ for (let n of j(e)) t ? r.add(n) : r.delete(n);
32
+ return r;
33
+ });
34
+ };
35
+ return /* @__PURE__ */ d(i, {
36
+ header: /* @__PURE__ */ d(u, {
37
+ title: S ?? O("uic.DataGrid.exportCsv"),
38
+ subtitle: C ?? O("uic.DataGrid.selectColumns"),
39
+ onOpenChange: (e) => {
40
+ e || R();
41
+ }
42
+ }),
43
+ content: /* @__PURE__ */ d(a, { children: /* @__PURE__ */ f(c, {
44
+ gap: 2,
45
+ align: "stretch",
46
+ children: [
47
+ x ? /* @__PURE__ */ d(m, {
48
+ status: "warning",
49
+ title: x,
50
+ "data-testid": "uic-data-grid-export-notice"
51
+ }) : null,
52
+ /* @__PURE__ */ d(p, {
53
+ label: L,
54
+ isLabelHidden: !0,
55
+ placeholder: L,
56
+ value: P,
57
+ onChange: (e) => F(e ?? ""),
58
+ size: "sm"
59
+ }),
60
+ /* @__PURE__ */ d("div", {
61
+ className: "uic-data-grid-dialog__list",
62
+ style: { "--data-grid-dialog-list-height": _ },
63
+ children: /* @__PURE__ */ f(c, {
64
+ gap: 0,
65
+ align: "stretch",
66
+ children: [I.map((e) => /* @__PURE__ */ d("div", {
67
+ className: "uic-data-grid-dialog__option",
68
+ children: /* @__PURE__ */ d(h, {
69
+ label: e.label || e.key,
70
+ size: "sm",
71
+ value: M.has(e.key),
72
+ isDisabled: !e.isSelectable,
73
+ onChange: (t) => z(e, t)
74
+ })
75
+ }, e.key)), I.length === 0 ? /* @__PURE__ */ d(l, {
76
+ type: "supporting",
77
+ color: "secondary",
78
+ children: T ?? L
79
+ }) : null]
80
+ })
81
+ })
82
+ ]
83
+ }) }),
84
+ footer: /* @__PURE__ */ d(o, {
85
+ hasDivider: !0,
86
+ children: /* @__PURE__ */ f(s, {
87
+ justify: "end",
88
+ gap: 2,
89
+ align: "center",
90
+ children: [/* @__PURE__ */ d(r, {
91
+ label: D ?? O("uic.common.cancel"),
92
+ variant: "secondary",
93
+ onClick: R
94
+ }), /* @__PURE__ */ d(r, {
95
+ label: E ?? O("uic.DataGrid.export"),
96
+ variant: "primary",
97
+ clickAction: async () => {
98
+ let e = k.filter((e) => M.has(e.key)).flatMap((e) => e.exportKeys);
99
+ await y([...new Set(e)]);
100
+ }
101
+ })]
102
+ })
103
+ }),
104
+ className: "uic-data-grid-dialog"
105
+ });
106
+ }
107
+ function b({ isOpen: e, onOpenChange: n, afterOpenChange: r, ...i }) {
108
+ return /* @__PURE__ */ d(t, {
109
+ isOpen: e,
110
+ onOpenChange: n,
111
+ afterOpenChange: r,
112
+ width: g,
113
+ purpose: "form",
114
+ unmountOnClose: !0,
115
+ children: /* @__PURE__ */ d(y, {
116
+ ...i,
117
+ onOpenChange: n
118
+ })
119
+ });
120
+ }
121
+ //#endregion
122
+ export { b as DataGridExportModal };
123
+
124
+ //# sourceMappingURL=DataGridExportModal.js.map
125
+ import "../../assets/components/DataGrid/DataGrid.css";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataGridExportModal.js","names":[],"sources":["../../../src/components/DataGrid/DataGridExportModal.tsx"],"sourcesContent":["/**\n * DataGridExportModal\n *\n * Picks the columns a CSV export includes: a searchable list of checkboxes,\n * all exportable columns checked on open. A column whose export keys are not\n * all in `supportedKeys` is shown disabled, so the user sees why it is\n * missing. Columns that export the same set of keys toggle together; the\n * emitted keys must not depend on which of two equivalent rows was clicked.\n *\n * Export awaits `onExport` with the chosen keys, deduplicated. It does not\n * close the dialog.\n *\n * @example\n * <DataGridExportModal\n * isOpen={isOpen}\n * onOpenChange={setIsOpen}\n * columns={[{ key: \"name\", label: \"Name\", exportKeys: [\"name\"] }]}\n * supportedKeys={[\"name\"]}\n * onExport={async (keys) => {\n * await download(keys);\n * setIsOpen(false);\n * }}\n * />\n */\nimport { useState, type CSSProperties, type ReactElement, type ReactNode } from \"react\";\nimport { Banner } from \"@astryxdesign/core/Banner\";\nimport { Button } from \"@astryxdesign/core/Button\";\nimport { CheckboxInput } from \"@astryxdesign/core/CheckboxInput\";\nimport { DialogHeader } from \"@astryxdesign/core/Dialog\";\nimport { Layout, LayoutContent, LayoutFooter } from \"@astryxdesign/core/Layout\";\nimport { HStack, VStack } from \"@astryxdesign/core/Stack\";\nimport { Text } from \"@astryxdesign/core/Text\";\nimport { TextInput } from \"@astryxdesign/core/TextInput\";\n\nimport { useUicTranslator } from \"../../i18n/useUicTranslator\";\nimport { Modal, type ModalProps } from \"../Modal/Modal\";\nimport \"./DataGrid.css\";\n\nexport interface DataGridExportColumn {\n key: string;\n label: string;\n /** Fields the column exports as. None: the column cannot be exported. */\n exportKeys: ReadonlyArray<string>;\n}\n\nexport interface DataGridExportModalProps extends Pick<\n ModalProps,\n \"isOpen\" | \"onOpenChange\" | \"afterOpenChange\"\n> {\n columns: ReadonlyArray<DataGridExportColumn>;\n /** Export keys that can be produced. */\n supportedKeys: ReadonlyArray<string>;\n /** Runs the export. The Export button stays pending until it settles. */\n onExport: (keys: string[]) => Promise<void> | void;\n /** A warning above the list, e.g. that the export is truncated. */\n notice?: ReactNode;\n /** Default: the catalog's `uic.DataGrid.exportCsv` */\n title?: string;\n /** Default: the catalog's `uic.DataGrid.selectColumns` */\n subtitle?: string;\n /** Label and placeholder of the search field. Default: the catalog's `uic.DataGrid.searchColumns` */\n searchLabel?: string;\n /** Shown when no column matches the search. Default: the catalog's `uic.DataGrid.searchColumns` */\n noMatchText?: ReactNode;\n /** Default: the catalog's `uic.DataGrid.export` */\n exportLabel?: string;\n /** Default: the catalog's `uic.common.cancel` */\n cancelLabel?: string;\n}\n\nconst WIDTH = 500;\nconst LIST_HEIGHT = \"330px\";\n\ninterface Option {\n key: string;\n label: string;\n exportKeys: ReadonlyArray<string>;\n isSelectable: boolean;\n}\n\nconst groupIdOf = (keys: ReadonlyArray<string>) => [...keys].sort().join(\",\");\n\nfunction ExportBody({\n columns,\n supportedKeys,\n onExport,\n onOpenChange,\n notice,\n title,\n subtitle,\n searchLabel,\n noMatchText,\n exportLabel,\n cancelLabel,\n}: Omit<DataGridExportModalProps, \"isOpen\" | \"afterOpenChange\">) {\n const t = useUicTranslator();\n const options: Option[] = columns.map((column) => ({\n key: column.key,\n label: column.label,\n exportKeys: column.exportKeys,\n isSelectable:\n column.exportKeys.length > 0 &&\n column.exportKeys.every((key) => supportedKeys.includes(key)),\n }));\n\n const membersByGroup = new Map<string, string[]>();\n for (const option of options) {\n if (option.exportKeys.length === 0 || !option.isSelectable) continue;\n const groupId = groupIdOf(option.exportKeys);\n membersByGroup.set(groupId, [...(membersByGroup.get(groupId) ?? []), option.key]);\n }\n const membersOf = (option: Option) =>\n option.exportKeys.length === 0\n ? [option.key]\n : (membersByGroup.get(groupIdOf(option.exportKeys)) ?? [option.key]);\n\n const [selectedKeys, setSelectedKeys] = useState<Set<string>>(\n () =>\n new Set(\n options.filter((option) => option.isSelectable).map((option) => option.key),\n ),\n );\n const [search, setSearch] = useState(\"\");\n\n const shownOptions = search\n ? options.filter((option) =>\n option.label.toLowerCase().includes(search.toLowerCase()),\n )\n : options;\n const searchText = searchLabel ?? t(\"uic.DataGrid.searchColumns\");\n const close = () => onOpenChange?.(false);\n\n const toggle = (option: Option, checked: boolean) => {\n setSelectedKeys((prev) => {\n const next = new Set(prev);\n for (const key of membersOf(option)) {\n if (checked) next.add(key);\n else next.delete(key);\n }\n return next;\n });\n };\n\n return (\n <Layout\n header={\n <DialogHeader\n title={title ?? t(\"uic.DataGrid.exportCsv\")}\n subtitle={subtitle ?? t(\"uic.DataGrid.selectColumns\")}\n onOpenChange={(next) => {\n if (!next) close();\n }}\n />\n }\n content={\n <LayoutContent>\n <VStack gap={2} align=\"stretch\">\n {notice ? (\n <Banner\n status=\"warning\"\n title={notice}\n data-testid=\"uic-data-grid-export-notice\"\n />\n ) : null}\n <TextInput\n label={searchText}\n isLabelHidden\n placeholder={searchText}\n value={search}\n onChange={(value) => setSearch(value ?? \"\")}\n size=\"sm\"\n />\n <div\n className=\"uic-data-grid-dialog__list\"\n style={{ \"--data-grid-dialog-list-height\": LIST_HEIGHT } as CSSProperties}\n >\n <VStack gap={0} align=\"stretch\">\n {shownOptions.map((option) => (\n <div key={option.key} className=\"uic-data-grid-dialog__option\">\n <CheckboxInput\n label={option.label || option.key}\n size=\"sm\"\n value={selectedKeys.has(option.key)}\n isDisabled={!option.isSelectable}\n onChange={(checked) => toggle(option, checked)}\n />\n </div>\n ))}\n {shownOptions.length === 0 ? (\n <Text type=\"supporting\" color=\"secondary\">\n {noMatchText ?? searchText}\n </Text>\n ) : null}\n </VStack>\n </div>\n </VStack>\n </LayoutContent>\n }\n footer={\n <LayoutFooter hasDivider>\n <HStack justify=\"end\" gap={2} align=\"center\">\n <Button\n label={cancelLabel ?? t(\"uic.common.cancel\")}\n variant=\"secondary\"\n onClick={close}\n />\n <Button\n label={exportLabel ?? t(\"uic.DataGrid.export\")}\n variant=\"primary\"\n clickAction={async () => {\n const keys = options\n .filter((option) => selectedKeys.has(option.key))\n .flatMap((option) => option.exportKeys);\n await onExport([...new Set(keys)]);\n }}\n />\n </HStack>\n </LayoutFooter>\n }\n className=\"uic-data-grid-dialog\"\n />\n );\n}\n\nexport function DataGridExportModal({\n isOpen,\n onOpenChange,\n afterOpenChange,\n ...bodyProps\n}: DataGridExportModalProps): ReactElement {\n return (\n <Modal\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n afterOpenChange={afterOpenChange}\n width={WIDTH}\n purpose=\"form\"\n unmountOnClose\n >\n <ExportBody {...bodyProps} onOpenChange={onOpenChange} />\n </Modal>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { ReactElement, ReactNode } from 'react';
2
+ import { ModalProps } from '../Modal/Modal';
3
+ export interface DataGridSettingsColumn {
4
+ key: string;
5
+ label: string;
6
+ /** Always shown; its checkbox is locked. */
7
+ isAlwaysVisible?: boolean;
8
+ }
9
+ export interface DataGridSettingsResult {
10
+ /** The checked keys, always-visible columns included. */
11
+ selectedColumnKeys: string[];
12
+ /** Every column key, in the order the user left them. */
13
+ columnOrder: string[];
14
+ }
15
+ export interface DataGridSettingsModalProps extends Pick<ModalProps, "isOpen" | "onOpenChange" | "afterOpenChange"> {
16
+ columns: ReadonlyArray<DataGridSettingsColumn>;
17
+ /** The keys shown now, in display order. */
18
+ visibleColumnKeys: ReadonlyArray<string>;
19
+ /** Whether rows can be dragged into a new order. Default: true */
20
+ isReorderable?: boolean;
21
+ /** Called with the new settings on Apply. It does not close the dialog. */
22
+ onApply: (result: DataGridSettingsResult) => void;
23
+ /** Default: the catalog's `uic.DataGrid.settings` */
24
+ title?: string;
25
+ /** Default: the catalog's `uic.DataGrid.selectColumns` */
26
+ subtitle?: string;
27
+ /** Label and placeholder of the search field. Default: the catalog's `uic.DataGrid.searchColumns` */
28
+ searchLabel?: string;
29
+ /** Shown when no column matches the search. Default: the catalog's `uic.DataGrid.searchColumns` */
30
+ noMatchText?: ReactNode;
31
+ /** Default: the catalog's `uic.common.apply` */
32
+ applyLabel?: string;
33
+ /** Default: the catalog's `uic.common.cancel` */
34
+ cancelLabel?: string;
35
+ }
36
+ export declare function DataGridSettingsModal({ isOpen, onOpenChange, afterOpenChange, isReorderable, ...bodyProps }: DataGridSettingsModalProps): ReactElement;
@@ -0,0 +1,177 @@
1
+ import { useUicTranslator as e } from "../../i18n/useUicTranslator.js";
2
+ import { Modal as t } from "../Modal/Modal2.js";
3
+ /* empty css */
4
+ import { useRef as n, useState as r } from "react";
5
+ import { Button as i } from "@astryxdesign/core/Button";
6
+ import { Layout as a, LayoutContent as o, LayoutFooter as s } from "@astryxdesign/core/Layout";
7
+ import { HStack as c, VStack as l } from "@astryxdesign/core/Stack";
8
+ import { Text as u } from "@astryxdesign/core/Text";
9
+ import { DialogHeader as d } from "@astryxdesign/core/Dialog";
10
+ import { jsx as f, jsxs as p } from "react/jsx-runtime";
11
+ import { TextInput as m } from "@astryxdesign/core/TextInput";
12
+ import { GripVertical as h } from "lucide-react";
13
+ import { CheckboxInput as g } from "@astryxdesign/core/CheckboxInput";
14
+ import { DndContext as _, KeyboardSensor as v, PointerSensor as y, useSensor as b, useSensors as x } from "@dnd-kit/core";
15
+ import { restrictToVerticalAxis as S } from "@dnd-kit/modifiers";
16
+ import { SortableContext as C, arrayMove as w, sortableKeyboardCoordinates as T, useSortable as E, verticalListSortingStrategy as ee } from "@dnd-kit/sortable";
17
+ import { CSS as D } from "@dnd-kit/utilities";
18
+ //#region src/components/DataGrid/DataGridSettingsModal.tsx
19
+ var O = 420, k = "360px";
20
+ function A({ id: e, isDragDisabled: t, handleLabel: n, children: r }) {
21
+ let { attributes: i, listeners: a, setNodeRef: o, transform: s, transition: c, isDragging: l } = E({
22
+ id: e,
23
+ disabled: t
24
+ });
25
+ return /* @__PURE__ */ p("div", {
26
+ ref: o,
27
+ className: "uic-data-grid-dialog__row",
28
+ style: {
29
+ transform: D.Transform.toString(s),
30
+ transition: c,
31
+ opacity: l ? .6 : 1
32
+ },
33
+ children: [t ? /* @__PURE__ */ f("span", { className: "uic-data-grid-dialog__handle-space" }) : /* @__PURE__ */ f("span", {
34
+ ...i,
35
+ ...a,
36
+ className: "uic-data-grid-dialog__handle",
37
+ "aria-label": n,
38
+ children: /* @__PURE__ */ f(h, {
39
+ size: 16,
40
+ "aria-hidden": !0
41
+ })
42
+ }), r]
43
+ });
44
+ }
45
+ function j({ columns: t, visibleColumnKeys: h, isReorderable: E, onApply: D, onOpenChange: O, title: j, subtitle: M, searchLabel: N, noMatchText: P, applyLabel: F, cancelLabel: I }) {
46
+ let L = e(), [R, z] = r(() => {
47
+ let e = new Set(t.map((e) => e.key)), n = h.filter((t) => e.has(t)), r = t.map((e) => e.key).filter((e) => !n.includes(e));
48
+ return [...n, ...r];
49
+ }), [B, V] = r(() => [...h]), [H, U] = r(""), W = new Map(t.map((e) => [e.key, e])), G = R.filter((e) => {
50
+ let t = W.get(e);
51
+ return t ? !H || t.label.toLowerCase().includes(H.toLowerCase()) : !1;
52
+ }), K = !E || !!H, q = N ?? L("uic.DataGrid.searchColumns"), J = () => O?.(!1), Y = x(b(y), b(v, { coordinateGetter: T })), X = (e) => W.get(String(e))?.label || String(e), Z = (e) => ({
53
+ column: X(e),
54
+ position: R.indexOf(String(e)) + 1,
55
+ total: R.length
56
+ }), Q = n(null), te = {
57
+ onDragStart: ({ active: e }) => (Q.current = e.id, L("uic.DataGrid.reorderPickedUp", Z(e.id))),
58
+ onDragOver: ({ active: e, over: t }) => {
59
+ if (!(!t || t.id === Q.current)) return Q.current = t.id, L("uic.DataGrid.reorderMoved", {
60
+ ...Z(t.id),
61
+ column: X(e.id)
62
+ });
63
+ },
64
+ onDragEnd: ({ active: e, over: t }) => L("uic.DataGrid.reorderDropped", {
65
+ ...Z(t?.id ?? e.id),
66
+ column: X(e.id)
67
+ }),
68
+ onDragCancel: ({ active: e }) => L("uic.DataGrid.reorderCancelled", Z(e.id))
69
+ }, ne = ({ active: e, over: t }) => {
70
+ if (!t || e.id === t.id) return;
71
+ let n = R.indexOf(String(e.id)), r = R.indexOf(String(t.id));
72
+ n !== -1 && r !== -1 && z(w(R, n, r));
73
+ }, $ = /* @__PURE__ */ p(l, {
74
+ gap: 0,
75
+ align: "stretch",
76
+ children: [G.map((e) => {
77
+ let t = W.get(e);
78
+ return t ? /* @__PURE__ */ f(A, {
79
+ id: e,
80
+ isDragDisabled: K,
81
+ handleLabel: L("uic.DataGrid.reorderColumn", { column: t.label || e }),
82
+ children: /* @__PURE__ */ f(g, {
83
+ label: t.label || e,
84
+ size: "sm",
85
+ value: B.includes(e) || !!t.isAlwaysVisible,
86
+ isDisabled: !!t.isAlwaysVisible,
87
+ onChange: (t) => V((n) => t ? n.includes(e) ? n : [...n, e] : n.filter((t) => t !== e))
88
+ })
89
+ }, e) : null;
90
+ }), G.length === 0 ? /* @__PURE__ */ f(u, {
91
+ type: "supporting",
92
+ color: "secondary",
93
+ children: P ?? q
94
+ }) : null]
95
+ });
96
+ return /* @__PURE__ */ f(a, {
97
+ header: /* @__PURE__ */ f(d, {
98
+ title: j ?? L("uic.DataGrid.settings"),
99
+ subtitle: M ?? L("uic.DataGrid.selectColumns"),
100
+ onOpenChange: (e) => {
101
+ e || J();
102
+ }
103
+ }),
104
+ content: /* @__PURE__ */ f(o, { children: /* @__PURE__ */ p(l, {
105
+ gap: 2,
106
+ align: "stretch",
107
+ children: [/* @__PURE__ */ f(m, {
108
+ label: q,
109
+ isLabelHidden: !0,
110
+ placeholder: q,
111
+ value: H,
112
+ onChange: (e) => U(e ?? "")
113
+ }), /* @__PURE__ */ f("div", {
114
+ className: "uic-data-grid-dialog__list",
115
+ style: { "--data-grid-dialog-list-height": k },
116
+ children: K ? $ : /* @__PURE__ */ f(_, {
117
+ sensors: Y,
118
+ modifiers: [S],
119
+ accessibility: {
120
+ announcements: te,
121
+ screenReaderInstructions: { draggable: L("uic.DataGrid.reorderInstructions") }
122
+ },
123
+ onDragEnd: ne,
124
+ children: /* @__PURE__ */ f(C, {
125
+ items: G,
126
+ strategy: ee,
127
+ children: $
128
+ })
129
+ })
130
+ })]
131
+ }) }),
132
+ footer: /* @__PURE__ */ f(s, {
133
+ hasDivider: !0,
134
+ children: /* @__PURE__ */ p(c, {
135
+ justify: "end",
136
+ gap: 2,
137
+ align: "center",
138
+ children: [/* @__PURE__ */ f(i, {
139
+ label: I ?? L("uic.common.cancel"),
140
+ variant: "secondary",
141
+ onClick: J
142
+ }), /* @__PURE__ */ f(i, {
143
+ label: F ?? L("uic.common.apply"),
144
+ variant: "primary",
145
+ onClick: () => {
146
+ let e = t.filter((e) => e.isAlwaysVisible).map((e) => e.key);
147
+ D({
148
+ selectedColumnKeys: [...B, ...e.filter((e) => !B.includes(e))],
149
+ columnOrder: R
150
+ });
151
+ }
152
+ })]
153
+ })
154
+ }),
155
+ className: "uic-data-grid-dialog"
156
+ });
157
+ }
158
+ function M({ isOpen: e, onOpenChange: n, afterOpenChange: r, isReorderable: i = !0, ...a }) {
159
+ return /* @__PURE__ */ f(t, {
160
+ isOpen: e,
161
+ onOpenChange: n,
162
+ afterOpenChange: r,
163
+ width: O,
164
+ purpose: "form",
165
+ unmountOnClose: !0,
166
+ children: /* @__PURE__ */ f(j, {
167
+ ...a,
168
+ onOpenChange: n,
169
+ isReorderable: i
170
+ })
171
+ });
172
+ }
173
+ //#endregion
174
+ export { M as DataGridSettingsModal };
175
+
176
+ //# sourceMappingURL=DataGridSettingsModal.js.map
177
+ import "../../assets/components/DataGrid/DataGrid.css";
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DataGridSettingsModal.js","names":[],"sources":["../../../src/components/DataGrid/DataGridSettingsModal.tsx"],"sourcesContent":["/**\n * DataGridSettingsModal\n *\n * Chooses which columns a grid shows, and in what order: a searchable list of\n * checkboxes with drag handles (pointer, or keyboard: Space, arrow keys,\n * Space). Columns marked `isAlwaysVisible` stay checked.\n * Dragging is off while a search narrows the list. The working set is fresh\n * on every open; Apply reports it and does not close the dialog.\n *\n * @example\n * <DataGridSettingsModal\n * isOpen={isOpen}\n * onOpenChange={setIsOpen}\n * columns={[{ key: \"name\", label: \"Name\", isAlwaysVisible: true }, { key: \"email\", label: \"Email\" }]}\n * visibleColumnKeys={[\"name\"]}\n * onApply={(result) => {\n * save(result);\n * setIsOpen(false);\n * }}\n * />\n */\nimport {\n useRef,\n useState,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport {\n DndContext,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n type Announcements,\n type DragEndEvent,\n type UniqueIdentifier,\n} from \"@dnd-kit/core\";\nimport { restrictToVerticalAxis } from \"@dnd-kit/modifiers\";\nimport {\n SortableContext,\n arrayMove,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from \"@dnd-kit/sortable\";\nimport { CSS } from \"@dnd-kit/utilities\";\nimport { Button } from \"@astryxdesign/core/Button\";\nimport { CheckboxInput } from \"@astryxdesign/core/CheckboxInput\";\nimport { DialogHeader } from \"@astryxdesign/core/Dialog\";\nimport { Layout, LayoutContent, LayoutFooter } from \"@astryxdesign/core/Layout\";\nimport { HStack, VStack } from \"@astryxdesign/core/Stack\";\nimport { Text } from \"@astryxdesign/core/Text\";\nimport { TextInput } from \"@astryxdesign/core/TextInput\";\nimport { GripVertical } from \"lucide-react\";\n\nimport { useUicTranslator } from \"../../i18n/useUicTranslator\";\nimport { Modal, type ModalProps } from \"../Modal/Modal\";\nimport \"./DataGrid.css\";\n\nexport interface DataGridSettingsColumn {\n key: string;\n label: string;\n /** Always shown; its checkbox is locked. */\n isAlwaysVisible?: boolean;\n}\n\nexport interface DataGridSettingsResult {\n /** The checked keys, always-visible columns included. */\n selectedColumnKeys: string[];\n /** Every column key, in the order the user left them. */\n columnOrder: string[];\n}\n\nexport interface DataGridSettingsModalProps extends Pick<\n ModalProps,\n \"isOpen\" | \"onOpenChange\" | \"afterOpenChange\"\n> {\n columns: ReadonlyArray<DataGridSettingsColumn>;\n /** The keys shown now, in display order. */\n visibleColumnKeys: ReadonlyArray<string>;\n /** Whether rows can be dragged into a new order. Default: true */\n isReorderable?: boolean;\n /** Called with the new settings on Apply. It does not close the dialog. */\n onApply: (result: DataGridSettingsResult) => void;\n /** Default: the catalog's `uic.DataGrid.settings` */\n title?: string;\n /** Default: the catalog's `uic.DataGrid.selectColumns` */\n subtitle?: string;\n /** Label and placeholder of the search field. Default: the catalog's `uic.DataGrid.searchColumns` */\n searchLabel?: string;\n /** Shown when no column matches the search. Default: the catalog's `uic.DataGrid.searchColumns` */\n noMatchText?: ReactNode;\n /** Default: the catalog's `uic.common.apply` */\n applyLabel?: string;\n /** Default: the catalog's `uic.common.cancel` */\n cancelLabel?: string;\n}\n\nconst WIDTH = 420;\nconst LIST_HEIGHT = \"360px\";\n\nfunction SortableRow({\n id,\n isDragDisabled,\n handleLabel,\n children,\n}: {\n id: string;\n isDragDisabled: boolean;\n handleLabel: string;\n children: ReactNode;\n}) {\n const { attributes, listeners, setNodeRef, transform, transition, isDragging } =\n useSortable({ id, disabled: isDragDisabled });\n return (\n <div\n ref={setNodeRef}\n className=\"uic-data-grid-dialog__row\"\n style={{\n transform: CSS.Transform.toString(transform),\n transition,\n opacity: isDragging ? 0.6 : 1,\n }}\n >\n {isDragDisabled ? (\n <span className=\"uic-data-grid-dialog__handle-space\" />\n ) : (\n <span\n {...attributes}\n {...listeners}\n className=\"uic-data-grid-dialog__handle\"\n aria-label={handleLabel}\n >\n <GripVertical size={16} aria-hidden />\n </span>\n )}\n {children}\n </div>\n );\n}\n\nfunction SettingsBody({\n columns,\n visibleColumnKeys,\n isReorderable,\n onApply,\n onOpenChange,\n title,\n subtitle,\n searchLabel,\n noMatchText,\n applyLabel,\n cancelLabel,\n}: Omit<DataGridSettingsModalProps, \"isOpen\" | \"afterOpenChange\"> & {\n isReorderable: boolean;\n}) {\n const t = useUicTranslator();\n const [order, setOrder] = useState<string[]>(() => {\n const known = new Set(columns.map((column) => column.key));\n const visible = visibleColumnKeys.filter((key) => known.has(key));\n const rest = columns\n .map((column) => column.key)\n .filter((key) => !visible.includes(key));\n return [...visible, ...rest];\n });\n const [selected, setSelected] = useState<string[]>(() => [...visibleColumnKeys]);\n const [search, setSearch] = useState(\"\");\n\n const columnByKey = new Map(columns.map((column) => [column.key, column]));\n const shownKeys = order.filter((key) => {\n const column = columnByKey.get(key);\n if (!column) return false;\n return !search || column.label.toLowerCase().includes(search.toLowerCase());\n });\n const isDragDisabled = !isReorderable || !!search;\n const searchText = searchLabel ?? t(\"uic.DataGrid.searchColumns\");\n const close = () => onOpenChange?.(false);\n\n const sensors = useSensors(\n useSensor(PointerSensor),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),\n );\n const labelOf = (key: UniqueIdentifier) => {\n const column = columnByKey.get(String(key));\n return column?.label || String(key);\n };\n const positionOf = (key: UniqueIdentifier) => ({\n column: labelOf(key),\n position: order.indexOf(String(key)) + 1,\n total: order.length,\n });\n // dnd-kit reports the picked-up row as \"over\" itself right after pick-up;\n // announcing only a change of position keeps the pick-up message.\n const lastOverRef = useRef<UniqueIdentifier | null>(null);\n const announcements: Announcements = {\n onDragStart: ({ active }) => {\n lastOverRef.current = active.id;\n return t(\"uic.DataGrid.reorderPickedUp\", positionOf(active.id));\n },\n onDragOver: ({ active, over }) => {\n if (!over || over.id === lastOverRef.current) return undefined;\n lastOverRef.current = over.id;\n return t(\"uic.DataGrid.reorderMoved\", {\n ...positionOf(over.id),\n column: labelOf(active.id),\n });\n },\n onDragEnd: ({ active, over }) =>\n t(\"uic.DataGrid.reorderDropped\", {\n ...positionOf(over?.id ?? active.id),\n column: labelOf(active.id),\n }),\n onDragCancel: ({ active }) =>\n t(\"uic.DataGrid.reorderCancelled\", positionOf(active.id)),\n };\n\n const onDragEnd = ({ active, over }: DragEndEvent) => {\n if (!over || active.id === over.id) return;\n const from = order.indexOf(String(active.id));\n const to = order.indexOf(String(over.id));\n if (from === -1 || to === -1) return;\n setOrder(arrayMove(order, from, to));\n };\n\n const list = (\n <VStack gap={0} align=\"stretch\">\n {shownKeys.map((key) => {\n const column = columnByKey.get(key);\n if (!column) return null;\n return (\n <SortableRow\n key={key}\n id={key}\n isDragDisabled={isDragDisabled}\n handleLabel={t(\"uic.DataGrid.reorderColumn\", {\n column: column.label || key,\n })}\n >\n <CheckboxInput\n label={column.label || key}\n size=\"sm\"\n value={selected.includes(key) || !!column.isAlwaysVisible}\n isDisabled={!!column.isAlwaysVisible}\n onChange={(checked) =>\n setSelected((prev) =>\n checked\n ? prev.includes(key)\n ? prev\n : [...prev, key]\n : prev.filter((k) => k !== key),\n )\n }\n />\n </SortableRow>\n );\n })}\n {shownKeys.length === 0 ? (\n <Text type=\"supporting\" color=\"secondary\">\n {noMatchText ?? searchText}\n </Text>\n ) : null}\n </VStack>\n );\n\n return (\n <Layout\n header={\n <DialogHeader\n title={title ?? t(\"uic.DataGrid.settings\")}\n subtitle={subtitle ?? t(\"uic.DataGrid.selectColumns\")}\n onOpenChange={(next) => {\n if (!next) close();\n }}\n />\n }\n content={\n <LayoutContent>\n <VStack gap={2} align=\"stretch\">\n <TextInput\n label={searchText}\n isLabelHidden\n placeholder={searchText}\n value={search}\n onChange={(value) => setSearch(value ?? \"\")}\n />\n <div\n className=\"uic-data-grid-dialog__list\"\n style={{ \"--data-grid-dialog-list-height\": LIST_HEIGHT } as CSSProperties}\n >\n {isDragDisabled ? (\n list\n ) : (\n <DndContext\n sensors={sensors}\n modifiers={[restrictToVerticalAxis]}\n accessibility={{\n announcements,\n screenReaderInstructions: {\n draggable: t(\"uic.DataGrid.reorderInstructions\"),\n },\n }}\n onDragEnd={onDragEnd}\n >\n <SortableContext\n items={shownKeys}\n strategy={verticalListSortingStrategy}\n >\n {list}\n </SortableContext>\n </DndContext>\n )}\n </div>\n </VStack>\n </LayoutContent>\n }\n footer={\n <LayoutFooter hasDivider>\n <HStack justify=\"end\" gap={2} align=\"center\">\n <Button\n label={cancelLabel ?? t(\"uic.common.cancel\")}\n variant=\"secondary\"\n onClick={close}\n />\n <Button\n label={applyLabel ?? t(\"uic.common.apply\")}\n variant=\"primary\"\n onClick={() => {\n const required = columns\n .filter((column) => column.isAlwaysVisible)\n .map((column) => column.key);\n onApply({\n selectedColumnKeys: [\n ...selected,\n ...required.filter((key) => !selected.includes(key)),\n ],\n columnOrder: order,\n });\n }}\n />\n </HStack>\n </LayoutFooter>\n }\n className=\"uic-data-grid-dialog\"\n />\n );\n}\n\nexport function DataGridSettingsModal({\n isOpen,\n onOpenChange,\n afterOpenChange,\n isReorderable = true,\n ...bodyProps\n}: DataGridSettingsModalProps): ReactElement {\n return (\n <Modal\n isOpen={isOpen}\n onOpenChange={onOpenChange}\n afterOpenChange={afterOpenChange}\n width={WIDTH}\n purpose=\"form\"\n unmountOnClose\n >\n <SettingsBody\n {...bodyProps}\n onOpenChange={onOpenChange}\n isReorderable={isReorderable}\n />\n </Modal>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export { DataGrid, dataGridColumnLabel, isDataGridColumnVisible } from './DataGrid';
2
+ export type { DataGridColumn, DataGridColumnOverride, DataGridColumnOverrides, DataGridColumnSettings, DataGridCsvExport, DataGridExpansion, DataGridKey, DataGridPagination, DataGridProps, DataGridSelection, DataGridSort, DataGridSortDirection, } from './DataGrid';
3
+ export { DataGridSettingsModal } from './DataGridSettingsModal';
4
+ export type { DataGridSettingsColumn, DataGridSettingsModalProps, DataGridSettingsResult, } from './DataGridSettingsModal';
5
+ export { DataGridExportModal } from './DataGridExportModal';
6
+ export type { DataGridExportColumn, DataGridExportModalProps, } from './DataGridExportModal';
@@ -0,0 +1,4 @@
1
+ import { DataGridExportModal as e } from "./DataGridExportModal.js";
2
+ import { DataGridSettingsModal as t } from "./DataGridSettingsModal.js";
3
+ import { DataGrid as n, dataGridColumnLabel as r, isDataGridColumnVisible as i } from "./DataGrid2.js";
4
+ export { n as DataGrid, e as DataGridExportModal, t as DataGridSettingsModal, r as dataGridColumnLabel, i as isDataGridColumnVisible };
@@ -0,0 +1,6 @@
1
+ import { ReactNode } from 'react';
2
+ /**
3
+ * The text of a node: strings and numbers, through elements, fragments and
4
+ * arrays. A textless node (an icon) gives "".
5
+ */
6
+ export declare function nodeToPlainText(node: ReactNode): string;
@@ -0,0 +1,9 @@
1
+ import { isValidElement as e } from "react";
2
+ //#region src/components/DataGrid/nodeToPlainText.ts
3
+ function t(n) {
4
+ return n == null || typeof n == "boolean" ? "" : typeof n == "string" ? n : typeof n == "number" ? String(n) : Array.isArray(n) ? n.map(t).join("") : e(n) ? t(n.props.children) : "";
5
+ }
6
+ //#endregion
7
+ export { t as nodeToPlainText };
8
+
9
+ //# sourceMappingURL=nodeToPlainText.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeToPlainText.js","names":[],"sources":["../../../src/components/DataGrid/nodeToPlainText.ts"],"sourcesContent":["import { isValidElement, type ReactNode } from \"react\";\n\n/**\n * The text of a node: strings and numbers, through elements, fragments and\n * arrays. A textless node (an icon) gives \"\".\n */\nexport function nodeToPlainText(node: ReactNode): string {\n if (node == null || typeof node === \"boolean\") return \"\";\n if (typeof node === \"string\") return node;\n if (typeof node === \"number\") return String(node);\n if (Array.isArray(node)) return node.map(nodeToPlainText).join(\"\");\n if (isValidElement(node)) {\n return nodeToPlainText((node.props as { children?: ReactNode }).children);\n }\n return \"\";\n}\n"],"mappings":";;AAMA,SAAgB,EAAgB,GAAyB;CAQvD,OAPI,KAAQ,QAAQ,OAAO,KAAS,YAAkB,KAClD,OAAO,KAAS,WAAiB,IACjC,OAAO,KAAS,WAAiB,OAAO,CAAI,IAC5C,MAAM,QAAQ,CAAI,IAAU,EAAK,IAAI,CAAe,CAAC,CAAC,KAAK,EAAE,IAC7D,EAAe,CAAI,IACd,EAAiB,EAAK,MAAmC,QAAQ,IAEnE;AACT"}