pixelize-design-library 2.4.2-beta.62 → 2.4.2-beta.64

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 (207) hide show
  1. package/CHANGELOG.md +122 -2
  2. package/COMPONENT-GOTCHAS.md +51 -9
  3. package/DESIGN-GUIDE.md +13 -5
  4. package/dist/Components/Button/Button.styles.js +58 -23
  5. package/dist/Components/Card/CardProps.d.ts +2 -2
  6. package/dist/Components/ConfirmDialog/ConfirmDialog.js +2 -1
  7. package/dist/Components/CustomModulesTable/CustomModulesTable.js +6 -4
  8. package/dist/Components/CustomModulesTable/EditModuleModal.js +2 -1
  9. package/dist/Components/DatePicker/RangeDatePicker.js +2 -1
  10. package/dist/Components/DatePicker/SingleDatePicker.js +2 -1
  11. package/dist/Components/DatePicker/TimeOnlyPicker.js +2 -1
  12. package/dist/Components/DatePicker/dayStates.js +2 -1
  13. package/dist/Components/Drawer/Drawer.js +2 -1
  14. package/dist/Components/Dropdown/DropDown.js +4 -10
  15. package/dist/Components/FilePreview/FilePreview.js +2 -1
  16. package/dist/Components/FileUpload/FileUpload.js +9 -2
  17. package/dist/Components/FileUploader/FileUploader.js +4 -0
  18. package/dist/Components/FileUploader/FileUploaderProps.d.ts +1 -1
  19. package/dist/Components/FilterSidebar/FilterSidebar.js +7 -4
  20. package/dist/Components/Input/TextInput.styles.js +10 -6
  21. package/dist/Components/KanbanBoard/AccountCard.js +4 -2
  22. package/dist/Components/KanbanBoard/KanbanBoard.js +6 -5
  23. package/dist/Components/NavigationBar/NavigationBar.js +5 -3
  24. package/dist/Components/Notification/Notification.js +4 -3
  25. package/dist/Components/NotificationBell/NotificationPanel.js +4 -3
  26. package/dist/Components/OrgSwitcher/OrgSwitcher.js +2 -4
  27. package/dist/Components/OrganizationDetails/CreateOrgModal.js +2 -1
  28. package/dist/Components/OrganizationDetails/OrganizationDetails.js +5 -3
  29. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +12 -7
  30. package/dist/Components/ScrollToTop/ScrollToTop.js +4 -3
  31. package/dist/Components/SearchSelect/SearchSelect.js +44 -35
  32. package/dist/Components/SearchSelect/searchSelectNav.d.ts +13 -0
  33. package/dist/Components/SearchSelect/searchSelectNav.js +40 -0
  34. package/dist/Components/Select/SelectPopup.js +3 -4
  35. package/dist/Components/Select/optionRowInk.d.ts +12 -0
  36. package/dist/Components/Select/optionRowInk.js +10 -1
  37. package/dist/Components/SelectSearch/SelectSearch.js +3 -11
  38. package/dist/Components/SettingRow/SettingRow.js +2 -1
  39. package/dist/Components/SettingRow/SettingsSection.js +2 -1
  40. package/dist/Components/SideBar/SecondaryBar.js +4 -3
  41. package/dist/Components/SideBar/SideBar.js +16 -13
  42. package/dist/Components/SideBar/SideBarProps.d.ts +1 -1
  43. package/dist/Components/SideBar/components/MenuItemBox.js +7 -4
  44. package/dist/Components/SideBar/components/MenuPopoverContent.js +2 -1
  45. package/dist/Components/SideBar/components/OtherApps.js +2 -1
  46. package/dist/Components/SideBar/components/PinnedSection.js +7 -4
  47. package/dist/Components/SideBar/sidebarMotion.d.ts +2 -0
  48. package/dist/Components/SideBar/sidebarMotion.js +6 -0
  49. package/dist/Components/SignInActivityTable/SignInActivityTable.js +6 -4
  50. package/dist/Components/StageProgress/StageItem.js +5 -2
  51. package/dist/Components/StageProgress/StepperStage.js +2 -2
  52. package/dist/Components/StatCard/StatCard.js +2 -1
  53. package/dist/Components/Table/Table.js +9 -4
  54. package/dist/Components/Table/TableProps.d.ts +1 -1
  55. package/dist/Components/Table/components/TableActions.js +3 -2
  56. package/dist/Components/Table/components/TableBody.js +9 -1
  57. package/dist/Components/Table/components/TableHeader.js +7 -2
  58. package/dist/Components/Table/components/TableLoading.d.ts +4 -1
  59. package/dist/Components/Table/components/TableLoading.js +6 -5
  60. package/dist/Components/Table/filters/CompactSelect.js +3 -11
  61. package/dist/Components/Table/settings/TableSettings.js +7 -2
  62. package/dist/Components/Table/variants/TableVariantContext.d.ts +1 -1
  63. package/dist/Components/Table/variants/TableVariantContext.js +3 -3
  64. package/dist/Components/Table/variants/classic.js +3 -2
  65. package/dist/Components/Timeline/Timeline.js +11 -4
  66. package/dist/Components/Toaster/Toaster.js +19 -8
  67. package/dist/Components/Toggle/TableToggle.js +5 -2
  68. package/dist/Components/UserDetails/AddUserModal.js +2 -1
  69. package/dist/Components/UserDetails/ChangeRoleModal.js +2 -1
  70. package/dist/Components/UserDetails/UserDetails.js +3 -1
  71. package/dist/Components/WorkspaceWindow/WorkspaceTrayPreview.js +4 -0
  72. package/dist/Components/WorkspaceWindow/WorkspaceWindow.d.ts +2 -2
  73. package/dist/Components/WorkspaceWindow/WorkspaceWindow.js +25 -18
  74. package/dist/Components/WorkspaceWindow/WorkspaceWindowProps.d.ts +38 -2
  75. package/dist/Theme/chakra/Card.styles.d.ts +7 -1
  76. package/dist/Theme/chakra/Card.styles.js +4 -1
  77. package/dist/Theme/chakra/Menu.styles.d.ts +11 -5
  78. package/dist/Theme/chakra/Menu.styles.js +10 -0
  79. package/dist/Theme/chakra/Popover.styles.d.ts +2 -11
  80. package/dist/Theme/chakra/Popover.styles.js +2 -0
  81. package/dist/Theme/chakra/common.web.d.ts +4 -0
  82. package/dist/Theme/chakra/componentStyles.d.ts +19 -3
  83. package/dist/Theme/chakra/componentStyles.js +12 -8
  84. package/dist/Theme/chakra/motion.d.ts +1 -0
  85. package/dist/Theme/chakra/motion.js +2 -1
  86. package/dist/Theme/chakra/overlay.styles.d.ts +5 -0
  87. package/dist/Theme/chakra/overlay.styles.js +4 -1
  88. package/dist/Theme/themeProps.d.ts +4 -0
  89. package/dist/Theme/tokens/brands/index.d.ts +1 -0
  90. package/dist/Theme/tokens/brands/index.js +17 -1
  91. package/dist/Theme/tokens/brands/radiant/palette.light.js +15 -0
  92. package/dist/Theme/tokens/brands/rosewood/palette.light.js +10 -10
  93. package/dist/Theme/tokens/brands/zinc/palette.dark.d.ts +7 -29
  94. package/dist/Theme/tokens/brands/zinc/palette.dark.js +3 -35
  95. package/dist/Theme/tokens/builders/accentText.d.ts +2 -0
  96. package/dist/Theme/tokens/builders/accentText.js +7 -1
  97. package/dist/Theme/tokens/builders/buildDarkPalette.d.ts +6 -1
  98. package/dist/Theme/tokens/builders/buildDarkPalette.js +37 -8
  99. package/dist/Theme/tokens/builders/filledSurface.d.ts +5 -1
  100. package/dist/Theme/tokens/builders/filledSurface.js +17 -4
  101. package/dist/Theme/tokens/builders/mutedText.d.ts +1 -1
  102. package/dist/Theme/tokens/builders/mutedText.js +13 -3
  103. package/dist/Theme/tokens/builders/planeStep.d.ts +5 -0
  104. package/dist/Theme/tokens/builders/planeStep.js +21 -0
  105. package/dist/Theme/tokens/builders/planes.d.ts +4 -0
  106. package/dist/Theme/tokens/builders/planes.js +33 -0
  107. package/dist/Theme/tokens/builders/skeletonShimmer.d.ts +9 -0
  108. package/dist/Theme/tokens/builders/skeletonShimmer.js +25 -0
  109. package/dist/Theme/tokens/builders/surfaceRaised.d.ts +3 -1
  110. package/dist/Theme/tokens/builders/surfaceRaised.js +18 -8
  111. package/dist/Theme/tokens/builders/surfaceRungs.js +3 -1
  112. package/dist/Theme/tokens/primitives/index.d.ts +2 -2
  113. package/dist/Theme/tokens/primitives/index.js +4 -1
  114. package/dist/Theme/tokens/primitives/motion.d.ts +1 -0
  115. package/dist/Theme/tokens/primitives/motion.js +2 -1
  116. package/dist/Theme/tokens/primitives/shadows.d.ts +16 -0
  117. package/dist/Theme/tokens/primitives/shadows.js +56 -6
  118. package/dist/Theme/tokens/primitives/typography.js +1 -1
  119. package/dist/Utils/table.js +2 -2
  120. package/dist/esm/Components/Button/Button.styles.js +62 -27
  121. package/dist/esm/Components/ConfirmDialog/ConfirmDialog.js +2 -1
  122. package/dist/esm/Components/CustomModulesTable/CustomModulesTable.js +6 -4
  123. package/dist/esm/Components/CustomModulesTable/EditModuleModal.js +2 -1
  124. package/dist/esm/Components/DatePicker/RangeDatePicker.js +2 -1
  125. package/dist/esm/Components/DatePicker/SingleDatePicker.js +2 -1
  126. package/dist/esm/Components/DatePicker/TimeOnlyPicker.js +2 -1
  127. package/dist/esm/Components/DatePicker/dayStates.js +2 -1
  128. package/dist/esm/Components/Drawer/Drawer.js +2 -1
  129. package/dist/esm/Components/Dropdown/DropDown.js +4 -10
  130. package/dist/esm/Components/FilePreview/FilePreview.js +3 -2
  131. package/dist/esm/Components/FileUpload/FileUpload.js +10 -3
  132. package/dist/esm/Components/FileUploader/FileUploader.js +4 -0
  133. package/dist/esm/Components/FilterSidebar/FilterSidebar.js +7 -4
  134. package/dist/esm/Components/Input/TextInput.styles.js +10 -6
  135. package/dist/esm/Components/KanbanBoard/AccountCard.js +4 -2
  136. package/dist/esm/Components/KanbanBoard/KanbanBoard.js +6 -5
  137. package/dist/esm/Components/NavigationBar/NavigationBar.js +5 -3
  138. package/dist/esm/Components/Notification/Notification.js +4 -3
  139. package/dist/esm/Components/NotificationBell/NotificationPanel.js +4 -3
  140. package/dist/esm/Components/OrgSwitcher/OrgSwitcher.js +2 -4
  141. package/dist/esm/Components/OrganizationDetails/CreateOrgModal.js +2 -1
  142. package/dist/esm/Components/OrganizationDetails/OrganizationDetails.js +5 -3
  143. package/dist/esm/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +13 -8
  144. package/dist/esm/Components/ScrollToTop/ScrollToTop.js +5 -4
  145. package/dist/esm/Components/SearchSelect/SearchSelect.js +46 -37
  146. package/dist/esm/Components/SearchSelect/searchSelectNav.js +32 -0
  147. package/dist/esm/Components/Select/SelectPopup.js +4 -5
  148. package/dist/esm/Components/Select/optionRowInk.js +7 -0
  149. package/dist/esm/Components/SelectSearch/SelectSearch.js +4 -12
  150. package/dist/esm/Components/SettingRow/SettingRow.js +2 -1
  151. package/dist/esm/Components/SettingRow/SettingsSection.js +2 -1
  152. package/dist/esm/Components/SideBar/SecondaryBar.js +4 -3
  153. package/dist/esm/Components/SideBar/SideBar.js +17 -14
  154. package/dist/esm/Components/SideBar/components/MenuItemBox.js +7 -4
  155. package/dist/esm/Components/SideBar/components/MenuPopoverContent.js +2 -1
  156. package/dist/esm/Components/SideBar/components/OtherApps.js +2 -1
  157. package/dist/esm/Components/SideBar/components/PinnedSection.js +7 -4
  158. package/dist/esm/Components/SideBar/sidebarMotion.js +3 -0
  159. package/dist/esm/Components/SignInActivityTable/SignInActivityTable.js +6 -4
  160. package/dist/esm/Components/StageProgress/StageItem.js +5 -2
  161. package/dist/esm/Components/StageProgress/StepperStage.js +2 -2
  162. package/dist/esm/Components/StatCard/StatCard.js +2 -1
  163. package/dist/esm/Components/Table/Table.js +12 -7
  164. package/dist/esm/Components/Table/components/TableActions.js +3 -2
  165. package/dist/esm/Components/Table/components/TableBody.js +10 -2
  166. package/dist/esm/Components/Table/components/TableHeader.js +9 -4
  167. package/dist/esm/Components/Table/components/TableLoading.js +5 -4
  168. package/dist/esm/Components/Table/filters/CompactSelect.js +4 -12
  169. package/dist/esm/Components/Table/settings/TableSettings.js +8 -3
  170. package/dist/esm/Components/Table/variants/TableVariantContext.js +3 -3
  171. package/dist/esm/Components/Table/variants/classic.js +3 -2
  172. package/dist/esm/Components/Timeline/Timeline.js +11 -4
  173. package/dist/esm/Components/Toaster/Toaster.js +20 -9
  174. package/dist/esm/Components/Toggle/TableToggle.js +5 -2
  175. package/dist/esm/Components/UserDetails/AddUserModal.js +2 -1
  176. package/dist/esm/Components/UserDetails/ChangeRoleModal.js +2 -1
  177. package/dist/esm/Components/UserDetails/UserDetails.js +3 -1
  178. package/dist/esm/Components/WorkspaceWindow/WorkspaceTrayPreview.js +4 -0
  179. package/dist/esm/Components/WorkspaceWindow/WorkspaceWindow.js +26 -19
  180. package/dist/esm/Theme/chakra/Card.styles.js +4 -1
  181. package/dist/esm/Theme/chakra/Menu.styles.js +10 -0
  182. package/dist/esm/Theme/chakra/Popover.styles.js +2 -0
  183. package/dist/esm/Theme/chakra/componentStyles.js +12 -8
  184. package/dist/esm/Theme/chakra/motion.js +1 -0
  185. package/dist/esm/Theme/chakra/overlay.styles.js +3 -0
  186. package/dist/esm/Theme/tokens/brands/index.js +16 -0
  187. package/dist/esm/Theme/tokens/brands/radiant/palette.light.js +15 -0
  188. package/dist/esm/Theme/tokens/brands/rosewood/palette.light.js +10 -10
  189. package/dist/esm/Theme/tokens/brands/zinc/palette.dark.js +3 -35
  190. package/dist/esm/Theme/tokens/builders/accentText.js +5 -0
  191. package/dist/esm/Theme/tokens/builders/buildDarkPalette.js +38 -9
  192. package/dist/esm/Theme/tokens/builders/filledSurface.js +18 -5
  193. package/dist/esm/Theme/tokens/builders/mutedText.js +12 -2
  194. package/dist/esm/Theme/tokens/builders/planeStep.js +14 -0
  195. package/dist/esm/Theme/tokens/builders/planes.js +28 -0
  196. package/dist/esm/Theme/tokens/builders/skeletonShimmer.js +21 -0
  197. package/dist/esm/Theme/tokens/builders/surfaceRaised.js +16 -7
  198. package/dist/esm/Theme/tokens/builders/surfaceRungs.js +3 -1
  199. package/dist/esm/Theme/tokens/primitives/index.js +1 -1
  200. package/dist/esm/Theme/tokens/primitives/motion.js +1 -0
  201. package/dist/esm/Theme/tokens/primitives/shadows.js +54 -5
  202. package/dist/esm/Theme/tokens/primitives/typography.js +1 -1
  203. package/dist/esm/Utils/table.js +2 -2
  204. package/dist/esm/index.js +4 -3
  205. package/dist/index.d.ts +5 -4
  206. package/dist/index.js +15 -6
  207. package/package.json +1 -1
@@ -13,6 +13,7 @@ const LeftFilterPane_1 = __importDefault(require("./filters/LeftFilterPane"));
13
13
  const variants_1 = require("./variants");
14
14
  const TableVariantContext_1 = require("./variants/TableVariantContext");
15
15
  const accentText_1 = require("../../Theme/tokens/builders/accentText");
16
+ const planeStep_1 = require("../../Theme/tokens/builders/planeStep");
16
17
  const filledSurface_1 = require("../../Theme/tokens/builders/filledSurface");
17
18
  const Pagination_1 = __importDefault(require("./components/Pagination"));
18
19
  const TableHeader_1 = __importDefault(require("./components/TableHeader"));
@@ -38,6 +39,8 @@ const Button_1 = __importDefault(require("../Button/Button"));
38
39
  const ToolTip_1 = __importDefault(require("../ToolTip/ToolTip"));
39
40
  const lucide_react_1 = require("lucide-react");
40
41
  const MotionBox = (0, framer_motion_1.motion)(react_2.Box);
42
+ // NOTE: MOTION_EASE as framer bezier points; the motion tokens have no points form yet.
43
+ const PANE_EASE = [0.2, 0, 0, 1];
41
44
  /** Data table: virtualized-height rows, pagination, filters, selection, and an optional Monday-style grouped board. */
42
45
  function Table({ data, columns, onSelection, isLoading, isCheckbox = false, freezedBgColor, freezedTextColor, noBorders = false, isPagination = true, onRowClick, selections, isActionFreeze = true, preferences = {
43
46
  url: "",
@@ -46,10 +49,12 @@ function Table({ data, columns, onSelection, isLoading, isCheckbox = false, free
46
49
  name: "",
47
50
  page: "",
48
51
  orgId: "",
49
- }, paginationMode = "client", infiniteScroll = false, hasMore, isLoadingMore = false, groupLoadMore = false, loadMoreText = "Load more", loadMorePosition = "top", loadMoreChunkSize, noOfRowsPerPage = 50, totalRecords = 0, onPagination, isTableSettings = false, headerActions, onGlobalSearch, onNoOfRowsPerPageChange, paginationSelectOptions, tableMaxHeight, minVisibleRows, maxVisibleRows, autoFitViewport, tableSettings, filterSidebar, loadingSkeletonRows, defaultVisibleColumns, density = "normal", variant = "classic", stripe = false, renderRowDetail, expandedRows, onExpandedRowsChange, groupColors, onAddItem, emptyState, onRefresh, isGlobalSearch = true, }) {
52
+ }, paginationMode = "client", infiniteScroll = false, hasMore, isLoadingMore = false, groupLoadMore = false, loadMoreText = "Load more", loadMorePosition = "top", loadMoreChunkSize, noOfRowsPerPage = 50, totalRecords = 0, onPagination, isTableSettings = false, headerActions, onGlobalSearch, onNoOfRowsPerPageChange, paginationSelectOptions, tableMaxHeight, minVisibleRows, maxVisibleRows, autoFitViewport, tableSettings, filterSidebar, loadingSkeletonRows, defaultVisibleColumns, density = "normal", variant = "studio", stripe = false, renderRowDetail, expandedRows, onExpandedRowsChange, groupColors, onAddItem, emptyState, onRefresh, isGlobalSearch = true, }) {
50
53
  var _a, _b, _c, _d, _e;
51
54
  const theme = (0, useCustomTheme_1.useCustomTheme)();
55
+ const prefersReducedMotion = (0, motion_2.usePrefersReducedMotion)();
52
56
  const clearFiltersTone = (0, react_1.useMemo)(() => (0, filledSurface_1.resolveFilledSurface)(theme.colors.semantic.error, theme.colors), [theme.colors]);
57
+ const clearBadge = (0, react_1.useMemo)(() => (0, filledSurface_1.resolveFilledSurface)(theme.colors.primary, theme.colors), [theme.colors]);
53
58
  const variantTokens = (0, react_1.useMemo)(() => variants_1.TABLE_VARIANTS[variant](theme.colors, (0, accentText_1.isDarkCanvas)(theme.colors.backgroundColor.main)), [variant, theme.colors]);
54
59
  const [columnsSearch, setColumnsSearch] = (0, react_1.useState)({});
55
60
  const detailIdPrefix = (0, react_1.useId)();
@@ -388,12 +393,12 @@ function Table({ data, columns, onSelection, isLoading, isCheckbox = false, free
388
393
  from { transform: rotate(0deg); }
389
394
  to { transform: rotate(360deg); }
390
395
  }
391
- ` }), (0, jsx_runtime_1.jsxs)(react_2.Box, { bg: theme.colors.background[50], border: `0.063rem solid ${theme.colors.boxborder[200]}`, borderRadius: "xl", overflow: "hidden", children: [filterSidebar && filterMode === "modal" && ((0, jsx_runtime_1.jsxs)(react_2.Modal, { isOpen: isFilterModalOpen, onClose: onFilterModalClose, size: "4xl", scrollBehavior: "inside", children: [(0, jsx_runtime_1.jsx)(react_2.ModalOverlay, {}), (0, jsx_runtime_1.jsxs)(react_2.ModalContent, { bg: theme.colors.surfaceRaised, my: 0, top: "10%", position: "fixed", left: "auto", right: "auto", children: [(0, jsx_runtime_1.jsx)(react_2.ModalCloseButton, { size: "sm" }), (0, jsx_runtime_1.jsx)(react_2.ModalBody, { p: 0, children: (0, jsx_runtime_1.jsx)(LeftFilterPane_1.default, { theme: theme, sections: (_d = filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.sidebarOptions) !== null && _d !== void 0 ? _d : [], selected: filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.selected, onApply: (sel) => { var _a; (_a = filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.onApply) === null || _a === void 0 ? void 0 : _a.call(filterSidebar, sel); onFilterModalClose(); }, onClear: () => { var _a; (_a = filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.onClearAllHandler) === null || _a === void 0 ? void 0 : _a.call(filterSidebar); }, isApplyLoading: filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.isApplyLoading, filterMode: filterMode }) })] })] })), (0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "start", children: [filterMode === "sidebar" && ((0, jsx_runtime_1.jsx)(MotionBox, { "data-testid": "filter-sidebar-pane", initial: { width: 0 }, animate: { width: (filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.isFilterSidebar) ? 180 : 0 }, transition: { type: "tween", duration: 0.5 }, overflow: "hidden", flexShrink: 0, borderRight: (filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.isFilterSidebar) ? "1px solid" : "none", borderColor: theme.colors.boxborder[200], style: { height: rowMetrics_1.TOOLBAR_HEIGHT + formulaMaxH }, minHeight: (filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.isFilterSidebar) ? "32rem" : "auto", children: (0, jsx_runtime_1.jsx)(LeftFilterPane_1.default, { height: rowMetrics_1.TOOLBAR_HEIGHT + formulaMaxH, theme: theme, sections: (_e = filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.sidebarOptions) !== null && _e !== void 0 ? _e : [], selected: filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.selected, onApply: filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.onApply, onClear: filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.onClearAllHandler, isApplyLoading: filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.isApplyLoading, filterMode: filterMode }) })), (0, jsx_runtime_1.jsxs)(react_2.Box, { flex: "1", minW: 0, children: [(0, jsx_runtime_1.jsxs)(react_2.Box, { display: "flex", alignItems: "center", justifyContent: "space-between", px: 3, py: 0, height: `${rowMetrics_1.TOOLBAR_HEIGHT}px`, gap: 3, flexWrap: "nowrap", bg: theme.colors.background[50], borderBottom: `0.063rem solid ${theme.colors.boxborder[200]}`, children: [[
396
+ ` }), (0, jsx_runtime_1.jsxs)(react_2.Box, { bg: theme.colors.background[50], border: `0.063rem solid ${theme.colors.boxborder[200]}`, borderRadius: "xl", overflow: "hidden", children: [filterSidebar && filterMode === "modal" && ((0, jsx_runtime_1.jsxs)(react_2.Modal, { isOpen: isFilterModalOpen, onClose: onFilterModalClose, size: "4xl", scrollBehavior: "inside", children: [(0, jsx_runtime_1.jsx)(react_2.ModalOverlay, {}), (0, jsx_runtime_1.jsxs)(react_2.ModalContent, { bg: theme.colors.surfaceRaised, my: 0, top: "10%", position: "fixed", left: "auto", right: "auto", children: [(0, jsx_runtime_1.jsx)(react_2.ModalCloseButton, { size: "sm" }), (0, jsx_runtime_1.jsx)(react_2.ModalBody, { p: 0, children: (0, jsx_runtime_1.jsx)(LeftFilterPane_1.default, { theme: theme, sections: (_d = filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.sidebarOptions) !== null && _d !== void 0 ? _d : [], selected: filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.selected, onApply: (sel) => { var _a; (_a = filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.onApply) === null || _a === void 0 ? void 0 : _a.call(filterSidebar, sel); onFilterModalClose(); }, onClear: () => { var _a; (_a = filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.onClearAllHandler) === null || _a === void 0 ? void 0 : _a.call(filterSidebar); }, isApplyLoading: filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.isApplyLoading, filterMode: filterMode }) })] })] })), (0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "start", children: [filterMode === "sidebar" && ((0, jsx_runtime_1.jsx)(MotionBox, { "data-testid": "filter-sidebar-pane", initial: false, animate: { width: (filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.isFilterSidebar) ? 180 : 0 }, transition: { type: "tween", ease: PANE_EASE, duration: prefersReducedMotion ? 0 : motion_1.MOTION_MS.base / 1000 }, overflow: "hidden", flexShrink: 0, borderRight: (filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.isFilterSidebar) ? "1px solid" : "none", borderColor: (0, planeStep_1.cardRule)(theme.colors), style: { height: rowMetrics_1.TOOLBAR_HEIGHT + formulaMaxH }, minHeight: (filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.isFilterSidebar) ? "32rem" : "auto", children: (0, jsx_runtime_1.jsx)(LeftFilterPane_1.default, { height: rowMetrics_1.TOOLBAR_HEIGHT + formulaMaxH, theme: theme, sections: (_e = filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.sidebarOptions) !== null && _e !== void 0 ? _e : [], selected: filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.selected, onApply: filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.onApply, onClear: filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.onClearAllHandler, isApplyLoading: filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.isApplyLoading, filterMode: filterMode }) })), (0, jsx_runtime_1.jsxs)(react_2.Box, { flex: "1", minW: 0, children: [(0, jsx_runtime_1.jsxs)(react_2.Box, { display: "flex", alignItems: "center", justifyContent: "space-between", px: 3, py: 0, height: `${rowMetrics_1.TOOLBAR_HEIGHT}px`, gap: 3, flexWrap: "nowrap", bg: theme.colors.background[50], borderBottom: `0.063rem solid ${(0, planeStep_1.cardRule)(theme.colors)}`, children: [[
392
397
  filterSidebar && ((0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: "Filter", placement: "top", children: (0, jsx_runtime_1.jsxs)(react_2.Box, { position: "relative", display: "inline-block", children: [(0, jsx_runtime_1.jsx)(react_2.Box, { as: "button", type: "button", "aria-label": "Filter", "aria-haspopup": filterMode === "modal" ? "dialog" : undefined, "aria-expanded": filterMode === "modal"
393
398
  ? isFilterModalOpen
394
399
  : !!(filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.isFilterSidebar), display: "inline-flex", alignItems: "center", justifyContent: "center", p: 0, bg: "transparent", border: "none", borderRadius: "md", cursor: "pointer", onClick: filterMode === "modal" ? onFilterModalOpen : filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.filterSidebarToggle, _hover: {
395
400
  color: theme.colors.accentText,
396
- }, sx: (0, focusRing_styles_1.focusVisibleStyles)(theme.colors), children: (0, jsx_runtime_1.jsx)(react_3.Icon, { as: lucide_react_1.Filter, transform: "scaleX(-1)", boxSize: 4, color: sidebarActiveCount > 0 ? theme.colors.accentText : theme.colors.text[500] }) }), sidebarActiveCount > 0 && ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "button", type: "button", "aria-label": "Clear filters", position: "absolute", top: "-6px", right: "-10px", bg: theme.colors.primary[(0, filledSurface_1.solidFillRung)(theme.colors.primary, theme.colors.white)], color: (0, filledSurface_1.labelOnFill)(theme.colors.primary[(0, filledSurface_1.solidFillRung)(theme.colors.primary, theme.colors.white)], theme.colors.white, theme.colors.black), border: "none", borderRadius: "full", p: "1px", cursor: "pointer", onClick: (e) => {
401
+ }, sx: (0, focusRing_styles_1.focusVisibleStyles)(theme.colors), children: (0, jsx_runtime_1.jsx)(react_3.Icon, { as: lucide_react_1.Filter, transform: "scaleX(-1)", boxSize: 4, color: sidebarActiveCount > 0 ? theme.colors.accentText : theme.colors.text[500] }) }), sidebarActiveCount > 0 && ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "button", type: "button", "aria-label": "Clear filters", position: "absolute", top: "-6px", right: "-10px", bg: clearBadge.fill, color: clearBadge.color, border: "none", borderRadius: "full", p: "1px", cursor: "pointer", onClick: (e) => {
397
402
  var _a;
398
403
  e.stopPropagation();
399
404
  if (filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.onClearAllHandler) {
@@ -452,5 +457,5 @@ function Table({ data, columns, onSelection, isLoading, isCheckbox = false, free
452
457
  backgroundColor: "transparent",
453
458
  zIndex: 999,
454
459
  },
455
- }, children: [(0, jsx_runtime_1.jsx)(react_3.Thead, { position: "sticky", top: 0, zIndex: 4, bg: variantTokens.header.bg, children: (0, jsx_runtime_1.jsx)(TableHeader_1.default, { columns: columnsList, isCheckbox: isCheckbox, freezedTextColor: freezedTextColor !== null && freezedTextColor !== void 0 ? freezedTextColor : theme.colors.text[500], handleSort: handleSort, headerRefs: headerRefs, columnWidths: columnWidths, slotRef: slotRef, slotWidth: slotWidth, columnsSort: columnsSort, noBorders: noBorders, handleCheckbox: handleCheckbox, isLoading: isTableLoading, checked: headerChecked, isContent: isContent, isLink: isLink, hasDetail: !!rowDetail, isActionFreeze: isActionFreeze, setColumnsSearch: setColumnsSearch, columnsSearch: columnsSearch, isSelecting: isSelecting }) }), (0, jsx_runtime_1.jsx)(react_3.Tbody, { children: (0, jsx_runtime_1.jsx)(TableBody_1.default, { data: isGrouped ? groupedSource : _filteredData, groups: renderGroups, onAddItem: onAddItem, columns: columnsList, startRow: isGrouped ? 0 : startRow, rowsPerPage: rowsPerPage, scrollContainerRef: tableContainerRef, isCheckbox: isCheckbox, columnWidths: columnWidths, slotWidth: slotWidth, noBorders: noBorders, freezedBgColor: freezedBgColor !== null && freezedBgColor !== void 0 ? freezedBgColor : theme.colors.backgroundColor.secondary, freezedTextColor: freezedTextColor !== null && freezedTextColor !== void 0 ? freezedTextColor : theme.colors.text[500], handleCheckbox: handleCheckbox, selections: selection, isLoading: isTableLoading, loadingSkeletonRows: loadingSkeletonRows, onRowClick: onRowClick, isContent: isContent, isLink: isLink, rowDetail: rowDetail, expandedIds: expandedIds, isActionFreeze: isActionFreeze, density: densityState, stripe: stripe, emptyState: emptyState }) })] }), canInfinite && isLoadingMore && ((0, jsx_runtime_1.jsxs)(react_2.Flex, { justify: "center", align: "center", py: 3, gap: 2, children: [(0, jsx_runtime_1.jsx)(react_2.Spinner, { size: "sm", color: theme.colors.accentText }), (0, jsx_runtime_1.jsx)(react_2.Box, { fontSize: "0.75rem", color: theme.colors.text[500], children: "Loading more\u2026" })] }))] }), groupLoadMoreActive && loadMorePosition === "bottom" && (groupLoadMoreCaption || canGroupLoadMore) && ((0, jsx_runtime_1.jsxs)(react_2.Flex, { justify: "center", align: "center", gap: 3, py: 3, borderTop: `0.063rem solid ${theme.colors.boxborder[200]}`, children: [groupLoadMoreCaption && ((0, jsx_runtime_1.jsx)(react_2.Box, { fontSize: "0.75rem", color: theme.colors.text[500], children: groupLoadMoreCaption })), canGroupLoadMore && ((0, jsx_runtime_1.jsx)(Button_1.default, { size: "xs", variant: "outline", colorScheme: "gray", isLoading: isLoadingMore, loadingText: loadMoreText, onClick: handleGroupLoadMore, label: loadMoreText }))] }))] })] })] })] }));
460
+ }, children: [(0, jsx_runtime_1.jsx)(react_3.Thead, { position: "sticky", top: 0, zIndex: 4, bg: variantTokens.header.bg, children: (0, jsx_runtime_1.jsx)(TableHeader_1.default, { columns: columnsList, isCheckbox: isCheckbox, freezedTextColor: freezedTextColor !== null && freezedTextColor !== void 0 ? freezedTextColor : theme.colors.text[500], handleSort: handleSort, headerRefs: headerRefs, columnWidths: columnWidths, slotRef: slotRef, slotWidth: slotWidth, columnsSort: columnsSort, noBorders: noBorders, handleCheckbox: handleCheckbox, isLoading: isTableLoading, checked: headerChecked, isContent: isContent, isLink: isLink, hasDetail: !!rowDetail, isActionFreeze: isActionFreeze, setColumnsSearch: setColumnsSearch, columnsSearch: columnsSearch, isSelecting: isSelecting }) }), (0, jsx_runtime_1.jsx)(react_3.Tbody, { children: (0, jsx_runtime_1.jsx)(TableBody_1.default, { data: isGrouped ? groupedSource : _filteredData, groups: renderGroups, onAddItem: onAddItem, columns: columnsList, startRow: isGrouped ? 0 : startRow, rowsPerPage: rowsPerPage, scrollContainerRef: tableContainerRef, isCheckbox: isCheckbox, columnWidths: columnWidths, slotWidth: slotWidth, noBorders: noBorders, freezedBgColor: freezedBgColor !== null && freezedBgColor !== void 0 ? freezedBgColor : theme.colors.backgroundColor.secondary, freezedTextColor: freezedTextColor !== null && freezedTextColor !== void 0 ? freezedTextColor : theme.colors.text[500], handleCheckbox: handleCheckbox, selections: selection, isLoading: isTableLoading, loadingSkeletonRows: loadingSkeletonRows, onRowClick: onRowClick, isContent: isContent, isLink: isLink, rowDetail: rowDetail, expandedIds: expandedIds, isActionFreeze: isActionFreeze, density: densityState, stripe: stripe, emptyState: emptyState }) })] }), canInfinite && isLoadingMore && ((0, jsx_runtime_1.jsxs)(react_2.Flex, { justify: "center", align: "center", py: 3, gap: 2, children: [(0, jsx_runtime_1.jsx)(react_2.Spinner, { size: "sm", color: theme.colors.accentText }), (0, jsx_runtime_1.jsx)(react_2.Box, { fontSize: "0.75rem", color: theme.colors.text[500], children: "Loading more\u2026" })] }))] }), groupLoadMoreActive && loadMorePosition === "bottom" && (groupLoadMoreCaption || canGroupLoadMore) && ((0, jsx_runtime_1.jsxs)(react_2.Flex, { justify: "center", align: "center", gap: 3, py: 3, borderTop: `0.063rem solid ${(0, planeStep_1.cardRule)(theme.colors)}`, children: [groupLoadMoreCaption && ((0, jsx_runtime_1.jsx)(react_2.Box, { fontSize: "0.75rem", color: theme.colors.text[500], children: groupLoadMoreCaption })), canGroupLoadMore && ((0, jsx_runtime_1.jsx)(Button_1.default, { size: "xs", variant: "outline", colorScheme: "gray", isLoading: isLoadingMore, loadingText: loadMoreText, onClick: handleGroupLoadMore, label: loadMoreText }))] }))] })] })] })] }));
456
461
  }
@@ -26,7 +26,7 @@ export type TableProps = {
26
26
  onAddItem?: (groupValue: string | number) => void;
27
27
  /** Seeds the initial row height only — Table Settings > Density (or saved preferences.density) takes over after the first change. */
28
28
  density?: TableDensity;
29
- /** Visual preset. Defaults to `classic` — the table exactly as it shipped. */
29
+ /** Visual preset. Defaults to `studio`; pass `"classic"` for the banded header and per-column rules. */
30
30
  variant?: TableVariant;
31
31
  /** Content shown under a row when expanded; return null for rows with no detail and they get no chevron. Memoize it: an inline function re-renders every row. */
32
32
  renderRowDetail?: (row: DataObject) => ReactNode | null;
@@ -38,6 +38,7 @@ const react_1 = __importStar(require("react"));
38
38
  const react_2 = require("@chakra-ui/react");
39
39
  const lucide_react_1 = require("lucide-react");
40
40
  const useCustomTheme_1 = require("../../../Theme/useCustomTheme");
41
+ const surfaceRaised_1 = require("../../../Theme/tokens/builders/surfaceRaised");
41
42
  const assignRef = (ref, value) => {
42
43
  if (typeof ref === "function")
43
44
  ref(value);
@@ -88,11 +89,11 @@ const TableActions = react_1.default.memo(({ row }) => {
88
89
  // ✅ if row itself is missing, render nothing
89
90
  if (!row)
90
91
  return null;
91
- return ((0, jsx_runtime_1.jsxs)("div", { ref: ref, children: [(0, jsx_runtime_1.jsx)(react_2.IconButton, { ref: triggerRef, id: `popover-trigger-${popoverId}`, "aria-label": "Actions", "aria-haspopup": "dialog", "aria-expanded": isOpen, "aria-controls": `popover-content-${popoverId}`, color: theme.colors.text[900], icon: (0, jsx_runtime_1.jsx)(lucide_react_1.EllipsisVertical, { size: 17 }), size: "sm", p: 0, variant: "ghost", _hover: { transform: "scale(1.2)" }, onClick: () => (isOpen ? handleClose() : handleOpen()) }), isOpen && ((0, jsx_runtime_1.jsxs)(react_2.Popover, { id: popoverId, placement: "bottom-start", isOpen: true, onClose: handleClose, closeOnBlur: false, returnFocusOnClose: false, children: [(0, jsx_runtime_1.jsx)(react_2.PopoverAnchor, { children: (0, jsx_runtime_1.jsx)(TriggerAnchor, { target: triggerRef }) }), (0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsx)(react_2.PopoverContent, { w: "auto", minW: "100px", boxShadow: "lg", p: 0, zIndex: 999, bg: theme.colors.surfaceRaised, children: (0, jsx_runtime_1.jsx)(react_2.PopoverBody, { p: 0, m: 0, children: (0, jsx_runtime_1.jsxs)(react_2.VStack, { align: "stretch", spacing: 1, p: 0, m: 0, children: [row.onLink && ((0, jsx_runtime_1.jsxs)(react_2.Button, { size: "sm", variant: "ghost", justifyContent: "flex-start", borderBottom: `1px solid ${theme.colors.boxborder[200]}`, borderRadius: 0, gap: 2, onClick: () => {
92
+ return ((0, jsx_runtime_1.jsxs)("div", { ref: ref, children: [(0, jsx_runtime_1.jsx)(react_2.IconButton, { ref: triggerRef, id: `popover-trigger-${popoverId}`, "aria-label": "Actions", "aria-haspopup": "dialog", "aria-expanded": isOpen, "aria-controls": `popover-content-${popoverId}`, color: theme.colors.text[900], icon: (0, jsx_runtime_1.jsx)(lucide_react_1.EllipsisVertical, { size: 17 }), size: "sm", p: 0, variant: "ghost", _hover: { transform: "scale(1.2)" }, onClick: () => (isOpen ? handleClose() : handleOpen()) }), isOpen && ((0, jsx_runtime_1.jsxs)(react_2.Popover, { id: popoverId, placement: "bottom-start", isOpen: true, onClose: handleClose, closeOnBlur: false, returnFocusOnClose: false, children: [(0, jsx_runtime_1.jsx)(react_2.PopoverAnchor, { children: (0, jsx_runtime_1.jsx)(TriggerAnchor, { target: triggerRef }) }), (0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsx)(react_2.PopoverContent, { w: "auto", minW: "100px", boxShadow: "lg", p: 0, zIndex: 999, bg: theme.colors.surfaceRaised, children: (0, jsx_runtime_1.jsx)(react_2.PopoverBody, { p: 0, m: 0, children: (0, jsx_runtime_1.jsxs)(react_2.VStack, { align: "stretch", spacing: 1, p: 0, m: 0, children: [row.onLink && ((0, jsx_runtime_1.jsxs)(react_2.Button, { size: "sm", variant: "ghost", justifyContent: "flex-start", borderBottom: `1px solid ${(0, surfaceRaised_1.raisedRule)(theme.colors)}`, borderRadius: 0, gap: 2, onClick: () => {
92
93
  var _a;
93
94
  (_a = row.onLink) === null || _a === void 0 ? void 0 : _a.call(row, row);
94
95
  handleClose();
95
- }, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ExternalLink, { size: 17 }), " View"] })), row.onEdit && ((0, jsx_runtime_1.jsxs)(react_2.Button, { size: "sm", variant: "ghost", justifyContent: "flex-start", gap: 2, borderBottom: `1px solid ${theme.colors.boxborder[200]}`, borderRadius: 0, onClick: () => {
96
+ }, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.ExternalLink, { size: 17 }), " View"] })), row.onEdit && ((0, jsx_runtime_1.jsxs)(react_2.Button, { size: "sm", variant: "ghost", justifyContent: "flex-start", gap: 2, borderBottom: `1px solid ${(0, surfaceRaised_1.raisedRule)(theme.colors)}`, borderRadius: 0, onClick: () => {
96
97
  var _a;
97
98
  (_a = row.onEdit) === null || _a === void 0 ? void 0 : _a.call(row, row);
98
99
  handleClose();
@@ -424,7 +424,15 @@ const TableBody = ({ data, isCheckbox, columns, startRow, rowsPerPage, columnWid
424
424
  });
425
425
  }, [data]);
426
426
  if (isLoading && data.length === 0) {
427
- return ((0, jsx_runtime_1.jsx)(TableLoading_1.TableBodyLoading, { noOfColumns: totalVisibleColumns, borderColor: theme.colors.boxborder[200], rowsCount: typeof loadingSkeletonRows === "number" ? loadingSkeletonRows : 4, rowHeight: rowHeight }));
427
+ const dataColumns = columns.filter((o) => !o.isHidden).length;
428
+ const cells = [
429
+ ...(isContent ? ["blank"] : []),
430
+ ...(isCheckbox ? ["checkbox"] : []),
431
+ ...(rowDetail ? ["blank"] : []),
432
+ ...Array.from({ length: dataColumns || TableLoading_1.LOADING_PLACEHOLDER_COLUMNS }, () => "bar"),
433
+ ...(isLink ? ["blank"] : []),
434
+ ];
435
+ return ((0, jsx_runtime_1.jsx)(TableLoading_1.TableBodyLoading, { noOfColumns: cells.length, cells: cells, borderColor: variant.row.ruleColor, rowsCount: typeof loadingSkeletonRows === "number" ? loadingSkeletonRows : 4, rowHeight: rowHeight }));
428
436
  }
429
437
  if (!isLoading && data.length === 0) {
430
438
  return ((0, jsx_runtime_1.jsx)(react_1.Tr, { backgroundColor: theme.colors.background[50], children: (0, jsx_runtime_1.jsx)(react_1.Td, { colSpan: totalVisibleColumns, p: 0, border: "none", children: (0, jsx_runtime_1.jsx)(TableEmpty, { emptyState: emptyState }) }) }));
@@ -18,11 +18,12 @@ const motion_1 = require("../../../Theme/tokens/primitives/motion");
18
18
  const motion_2 = require("../../../Theme/chakra/motion");
19
19
  const focusRing_styles_1 = require("../../../Theme/chakra/focusRing.styles");
20
20
  const rowDetail_1 = require("./rowDetail");
21
+ const TableLoading_1 = require("./TableLoading");
21
22
  const LABEL_JUSTIFY = { start: "space-between", center: "center", end: "flex-start" };
22
23
  const TableHeader = ({ columns, isCheckbox, handleSort, headerRefs, columnWidths, slotRef, slotWidth, columnsSort, freezedTextColor, noBorders, handleCheckbox, checked, isLoading, isContent, isLink, hasDetail = false, isActionFreeze, setColumnsSearch, columnsSearch, isSelecting, }) => {
23
24
  const [openFilterId, setOpenFilterId] = (0, react_2.useState)(null);
24
25
  const variant = (0, TableVariantContext_1.useTableVariant)();
25
- return ((0, jsx_runtime_1.jsxs)(react_1.Tr, { pr: 0, "aria-rowindex": 1, children: [isContent && (0, jsx_runtime_1.jsx)(ContentSpacerCell, { noBorders: noBorders }), isCheckbox && ((0, jsx_runtime_1.jsx)(SelectAllCell, { slotRef: slotRef, freezedTextColor: freezedTextColor, noBorders: noBorders, isSelecting: isSelecting, isLoading: isLoading, checked: checked, handleCheckbox: handleCheckbox })), hasDetail && ((0, jsx_runtime_1.jsx)(rowDetail_1.RowDetailHeaderCell, { left: isCheckbox ? slotWidth : 0, bg: variant.header.bg, ruleColor: variant.header.ruleColor, noBorders: noBorders })), columns.map((header, index) => {
26
+ return ((0, jsx_runtime_1.jsxs)(react_1.Tr, { pr: 0, "aria-rowindex": 1, children: [isContent && (0, jsx_runtime_1.jsx)(ContentSpacerCell, { noBorders: noBorders }), isCheckbox && ((0, jsx_runtime_1.jsx)(SelectAllCell, { slotRef: slotRef, freezedTextColor: freezedTextColor, noBorders: noBorders, isSelecting: isSelecting, isLoading: isLoading, checked: checked, handleCheckbox: handleCheckbox })), hasDetail && ((0, jsx_runtime_1.jsx)(rowDetail_1.RowDetailHeaderCell, { left: isCheckbox ? slotWidth : 0, bg: variant.header.bg, ruleColor: variant.header.ruleColor, noBorders: noBorders })), isLoading && !columns.some((header) => !(header === null || header === void 0 ? void 0 : header.isHidden)) && ((0, jsx_runtime_1.jsx)(LoadingHeaderCells, { noBorders: noBorders })), columns.map((header, index) => {
26
27
  if (header === null || header === void 0 ? void 0 : header.isHidden)
27
28
  return null;
28
29
  return ((0, jsx_runtime_1.jsx)(ColumnHeader, { header: header, index: index, columnWidths: columnWidths, slotWidth: slotWidth, detailWidth: hasDetail ? rowDetail_1.DETAIL_SLOT_PX : 0, handleSort: handleSort, isCheckbox: isCheckbox, noBorders: noBorders, columnsSort: columnsSort, headerRefs: headerRefs, columnsSearch: columnsSearch, setColumnsSearch: setColumnsSearch, openFilterId: openFilterId, setOpenFilterId: setOpenFilterId }, (0, columnLabel_1.columnLabelText)(header)));
@@ -32,8 +33,12 @@ exports.default = (0, react_2.memo)(TableHeader);
32
33
  const SelectAllCell = (0, react_2.memo)(({ slotRef, freezedTextColor, noBorders, isSelecting, isLoading, checked, handleCheckbox, }) => {
33
34
  const theme = (0, useCustomTheme_1.useCustomTheme)();
34
35
  const variant = (0, TableVariantContext_1.useTableVariant)();
35
- return ((0, jsx_runtime_1.jsx)(react_1.Th, { ref: slotRef, scope: "col", w: variant.slot.width, minW: variant.slot.width, px: variant.slot.centered ? 0 : undefined, textAlign: variant.slot.centered ? "center" : undefined, fontSize: 14, fontWeight: 600, color: freezedTextColor, textTransform: "capitalize", backgroundColor: variant.header.bg, position: "sticky", className: `columns sticky-columns`, left: "0px", zIndex: 9, borderBottom: noBorders ? "none" : `0.063rem solid ${variant.header.ruleColor}`, children: (0, jsx_runtime_1.jsx)(react_1.Box, { display: "flex", alignItems: "center", justifyContent: "center", children: isSelecting ? ((0, jsx_runtime_1.jsx)(react_1.Spinner, { size: "sm", color: theme.colors.accentText })) : ((0, jsx_runtime_1.jsx)(Checkbox_1.default, { "aria-label": "Select all rows", variant: "outline", onChange: () => handleCheckbox(0), isChecked: isLoading ? false : checked === true, isIndeterminate: checked === "indeterminate" })) }) }));
36
+ return ((0, jsx_runtime_1.jsx)(react_1.Th, { ref: slotRef, scope: "col", w: variant.slot.width, minW: variant.slot.width, px: variant.slot.centered ? 0 : undefined, textAlign: variant.slot.centered ? "center" : undefined, fontSize: 14, fontWeight: 600, color: freezedTextColor, textTransform: "capitalize", backgroundColor: variant.header.bg, position: "sticky", className: `columns sticky-columns`, left: "0px", zIndex: 9, borderBottom: noBorders ? "none" : `0.063rem solid ${variant.header.ruleColor}`, children: (0, jsx_runtime_1.jsx)(react_1.Box, { display: "flex", alignItems: "center", justifyContent: "center", children: isSelecting ? ((0, jsx_runtime_1.jsx)(react_1.Spinner, { size: "sm", color: theme.colors.accentText })) : ((0, jsx_runtime_1.jsx)(Checkbox_1.default, { "aria-label": "Select all rows", variant: "outline", onChange: () => handleCheckbox(0), isChecked: isLoading ? false : checked === true, isDisabled: isLoading, isIndeterminate: checked === "indeterminate" })) }) }));
36
37
  });
38
+ const LoadingHeaderCells = ({ noBorders }) => {
39
+ const variant = (0, TableVariantContext_1.useTableVariant)();
40
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: Array.from({ length: TableLoading_1.LOADING_PLACEHOLDER_COLUMNS }, (_, i) => ((0, jsx_runtime_1.jsx)(react_1.Th, { scope: "col", "aria-hidden": "true", px: 3, backgroundColor: variant.header.bg, borderBottom: noBorders ? "none" : `0.063rem solid ${variant.header.ruleColor}`, children: (0, jsx_runtime_1.jsx)(react_1.Skeleton, { height: "0.75rem", width: i % 2 ? "50%" : "70%", borderRadius: "full", variant: "shine" }) }, i))) }));
41
+ };
37
42
  const ContentSpacerCell = (0, react_2.memo)(({ noBorders }) => {
38
43
  const variant = (0, TableVariantContext_1.useTableVariant)();
39
44
  return ((0, jsx_runtime_1.jsx)(react_1.Th, { scope: "col", w: 6, minW: "35px", p: 0, backgroundColor: variant.header.bg, borderBottom: noBorders ? "none" : `0.063rem solid ${variant.header.ruleColor}`, position: "sticky", className: `columns sticky-columns`, left: "0px", zIndex: 1 }));
@@ -1,7 +1,10 @@
1
1
  declare const TableLoading: () => import("react/jsx-runtime").JSX.Element;
2
2
  export default TableLoading;
3
- export declare const TableBodyLoading: ({ noOfColumns, borderColor, rowsCount, rowHeight, }: {
3
+ export declare const LOADING_PLACEHOLDER_COLUMNS = 4;
4
+ export type LoadingCell = "bar" | "checkbox" | "blank";
5
+ export declare const TableBodyLoading: ({ noOfColumns, cells, borderColor, rowsCount, rowHeight, }: {
4
6
  noOfColumns: number;
7
+ cells?: LoadingCell[];
5
8
  borderColor: string;
6
9
  rowsCount?: number;
7
10
  rowHeight?: number;
@@ -1,15 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TableBodyLoading = void 0;
3
+ exports.TableBodyLoading = exports.LOADING_PLACEHOLDER_COLUMNS = void 0;
4
4
  const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("@chakra-ui/react");
6
6
  const TableLoading = () => {
7
7
  return ((0, jsx_runtime_1.jsx)(react_1.Box, { overflowX: "auto", p: 4, children: (0, jsx_runtime_1.jsxs)(react_1.Table, { variant: "simple", width: "full", children: [(0, jsx_runtime_1.jsx)(react_1.Thead, { children: (0, jsx_runtime_1.jsxs)(react_1.Tr, { children: [(0, jsx_runtime_1.jsx)(react_1.Th, { p: 2, children: (0, jsx_runtime_1.jsx)(react_1.Skeleton, { height: "20px" }) }), (0, jsx_runtime_1.jsx)(react_1.Th, { p: 2, children: (0, jsx_runtime_1.jsx)(react_1.Skeleton, { height: "20px" }) }), (0, jsx_runtime_1.jsx)(react_1.Th, { p: 2, children: (0, jsx_runtime_1.jsx)(react_1.Skeleton, { height: "20px" }) }), (0, jsx_runtime_1.jsx)(react_1.Th, { p: 2, children: (0, jsx_runtime_1.jsx)(react_1.Skeleton, { height: "20px" }) })] }) }), (0, jsx_runtime_1.jsx)(react_1.Tbody, { children: Array.from({ length: 5 }).map((_, rowIndex) => ((0, jsx_runtime_1.jsxs)(react_1.Tr, { children: [(0, jsx_runtime_1.jsx)(react_1.Td, { p: 2, children: (0, jsx_runtime_1.jsx)(react_1.SkeletonText, { noOfLines: 1, skeletonHeight: "2" }) }), (0, jsx_runtime_1.jsx)(react_1.Td, { p: 2, children: (0, jsx_runtime_1.jsx)(react_1.SkeletonText, { noOfLines: 1, skeletonHeight: "2" }) }), (0, jsx_runtime_1.jsx)(react_1.Td, { p: 2, children: (0, jsx_runtime_1.jsx)(react_1.SkeletonText, { noOfLines: 1, skeletonHeight: "2" }) }), (0, jsx_runtime_1.jsx)(react_1.Td, { p: 2, children: (0, jsx_runtime_1.jsx)(react_1.SkeletonText, { noOfLines: 1, skeletonHeight: "2" }) })] }, rowIndex))) })] }) }));
8
8
  };
9
9
  exports.default = TableLoading;
10
- const TableBodyLoading = ({ noOfColumns, borderColor, rowsCount = 4, rowHeight = 45, }) => {
11
- return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: Array.from({ length: rowsCount }).map((_, index) => {
12
- return ((0, jsx_runtime_1.jsx)(react_1.Tr, { children: (0, jsx_runtime_1.jsx)(react_1.Td, { colSpan: noOfColumns, textAlign: "center", border: `1px solid ${borderColor}`, px: 2, pt: 2, pb: 0, height: `${rowHeight}px`, boxSizing: "border-box", children: (0, jsx_runtime_1.jsx)(react_1.Skeleton, { height: "15px", variant: "shine" }) }) }, index));
13
- }) }));
10
+ exports.LOADING_PLACEHOLDER_COLUMNS = 4;
11
+ const BAR_WIDTHS = ["72%", "58%", "84%", "46%", "66%", "78%"];
12
+ const TableBodyLoading = ({ noOfColumns, cells, borderColor, rowsCount = 4, rowHeight = 45, }) => {
13
+ const layout = cells !== null && cells !== void 0 ? cells : Array.from({ length: noOfColumns }, () => "bar");
14
+ return ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: Array.from({ length: rowsCount }).map((_, row) => ((0, jsx_runtime_1.jsx)(react_1.Tr, { "aria-hidden": "true", children: layout.map((kind, col) => ((0, jsx_runtime_1.jsxs)(react_1.Td, { px: kind === "checkbox" ? 0 : 3, py: 0, height: `${rowHeight}px`, boxSizing: "border-box", border: "none", borderBottom: `0.0625rem solid ${borderColor}`, textAlign: kind === "checkbox" ? "center" : undefined, children: [kind === "checkbox" && ((0, jsx_runtime_1.jsx)(react_1.Skeleton, { boxSize: "1rem", borderRadius: "sm", variant: "shine", display: "inline-block", verticalAlign: "middle" })), kind === "bar" && ((0, jsx_runtime_1.jsx)(react_1.Skeleton, { height: "0.75rem", width: BAR_WIDTHS[(row * 3 + col) % BAR_WIDTHS.length], borderRadius: "full", variant: "shine" }))] }, col))) }, row))) }));
14
15
  };
15
16
  exports.TableBodyLoading = TableBodyLoading;
@@ -5,6 +5,7 @@ const react_1 = require("react");
5
5
  const react_2 = require("@chakra-ui/react");
6
6
  const lucide_react_1 = require("lucide-react");
7
7
  const useCustomTheme_1 = require("../../../Theme/useCustomTheme");
8
+ const surfaceRaised_1 = require("../../../Theme/tokens/builders/surfaceRaised");
8
9
  const rowStates_1 = require("../../../Theme/tokens/builders/rowStates");
9
10
  const optionRowSizes_1 = require("../../../Theme/tokens/primitives/optionRowSizes");
10
11
  const optionRowInk_1 = require("../../Select/optionRowInk");
@@ -56,21 +57,12 @@ const CompactSelect = ({ options, value, placeholder = "Select", height = "22px"
56
57
  e.preventDefault();
57
58
  focusOption(0);
58
59
  }
59
- }, sx: { fontSize: "0.75rem", height: "22px" } }), (0, jsx_runtime_1.jsxs)(react_2.Box, { role: "listbox", "aria-label": placeholder, maxH: "12rem", overflowY: "auto", borderTop: "1px solid", borderColor: theme.colors.boxborder[200], onKeyDown: handleListKeyDown, children: [filtered.map((opt, i) => {
60
+ }, sx: { fontSize: "0.75rem", height: "22px" } }), (0, jsx_runtime_1.jsxs)(react_2.Box, { role: "listbox", "aria-label": placeholder, maxH: "12rem", overflowY: "auto", borderTop: "1px solid", borderColor: (0, surfaceRaised_1.raisedRule)(theme.colors), onKeyDown: handleListKeyDown, children: [filtered.map((opt, i) => {
60
61
  const selected = (value === null || value === void 0 ? void 0 : value.id) === opt.id;
61
62
  const isActive = i === activeIndex;
62
- const rowBg = selected
63
- ? isActive
64
- ? rowBackgrounds.selectedActive
65
- : rowBackgrounds.selected
66
- : isActive
67
- ? rowBackgrounds.active
68
- : theme.colors.transparent;
69
63
  return ((0, jsx_runtime_1.jsxs)(react_2.Box, { as: "button", type: "button", role: "option", "aria-selected": selected, tabIndex: isActive ? 0 : -1, ref: (el) => {
70
64
  optionRefs.current[i] = el;
71
- }, w: `calc(100% - 2 * ${spec.mx})`, minH: spec.minH, textAlign: "left", border: "none", fontFamily: "inherit", display: "flex", alignItems: "center", gap: spec.gap, mx: spec.mx, px: spec.px, py: spec.py, borderRadius: optionRowSizes_1.OPTION_ROW_RADIUS, cursor: "pointer", color: (0, optionRowInk_1.optionRowInk)(theme.colors, selected), fontSize: spec.fontSize, fontWeight: (0, optionRowInk_1.optionRowWeight)(selected), _hover: {
72
- bg: selected ? rowBackgrounds.selectedActive : rowBackgrounds.active,
73
- }, bg: rowBg, onClick: () => {
65
+ }, w: `calc(100% - 2 * ${spec.mx})`, minH: spec.minH, textAlign: "left", border: "none", fontFamily: "inherit", display: "flex", alignItems: "center", gap: spec.gap, mx: spec.mx, px: spec.px, py: spec.py, borderRadius: optionRowSizes_1.OPTION_ROW_RADIUS, cursor: "pointer", color: (0, optionRowInk_1.optionRowInk)(theme.colors, selected), fontSize: spec.fontSize, fontWeight: (0, optionRowInk_1.optionRowWeight)(selected), bg: "transparent", ...(0, optionRowInk_1.optionRowCursorSx)(rowBackgrounds), onClick: () => {
74
66
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(opt);
75
67
  setIsOpen(false);
76
68
  setQuery("");
@@ -10,13 +10,17 @@ const framer_motion_1 = require("framer-motion");
10
10
  const ManageColumns_1 = __importDefault(require("./ManageColumns"));
11
11
  const Button_1 = __importDefault(require("../../Button/Button"));
12
12
  const useCustomTheme_1 = require("../../../Theme/useCustomTheme");
13
+ const surfaceRaised_1 = require("../../../Theme/tokens/builders/surfaceRaised");
13
14
  const scrollbar_1 = require("../../../Theme/tokens/builders/scrollbar");
14
15
  const columnLabel_1 = require("../columnLabel");
15
16
  const lucide_react_1 = require("lucide-react");
16
17
  const ToolTip_1 = __importDefault(require("../../ToolTip/ToolTip"));
17
18
  const rowStates_1 = require("../../../Theme/tokens/builders/rowStates");
18
19
  const motion_1 = require("../../../Theme/tokens/primitives/motion");
20
+ const motion_2 = require("../../../Theme/chakra/motion");
19
21
  const MotionModalContent = (0, framer_motion_1.motion)(react_1.ModalContent);
22
+ const SHEET_ENTER = (0, motion_1.motionTransition)("enter", "out");
23
+ const SHEET_EXIT = (0, motion_1.motionTransition)("exit", "in");
20
24
  const DENSITY_OPTIONS = [
21
25
  { value: "compact", label: "Compact", desc: "Tight rows — fit more data on screen" },
22
26
  { value: "normal", label: "Normal", desc: "Balanced default spacing" },
@@ -24,6 +28,7 @@ const DENSITY_OPTIONS = [
24
28
  ];
25
29
  const TableSettings = ({ columns, onSave, density = "normal", onDensityChange, groupBy, }) => {
26
30
  const theme = (0, useCustomTheme_1.useCustomTheme)();
31
+ const sheetOffset = (0, motion_2.usePrefersReducedMotion)() ? 0 : "-100%";
27
32
  const rowBackgrounds = (0, react_2.useMemo)(() => (0, rowStates_1.listRowBackgrounds)(theme.colors), [theme.colors]);
28
33
  const childInputMethodsRef = (0, react_2.useRef)({});
29
34
  const [settingsOpen, setSettingsOpen] = (0, react_2.useState)(false);
@@ -57,7 +62,7 @@ const TableSettings = ({ columns, onSave, density = "normal", onDensityChange, g
57
62
  return ((0, jsx_runtime_1.jsxs)(react_1.Box, { children: [(0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: "Table Settings", placement: "top", children: (0, jsx_runtime_1.jsx)(react_1.IconButton, { "aria-label": "Table settings", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Settings, { size: "1.25rem" }), onClick: handleOpen, variant: "unstyled", minW: "auto", h: "auto", display: "flex", justifyContent: "flex-end", cursor: "pointer", transition: (0, motion_1.transitionFor)(["color", "transform"], "base"), color: theme.colors.text[500], _hover: {
58
63
  transform: "scale(1.1)",
59
64
  color: theme.colors.accentText
60
- } }) }), (0, jsx_runtime_1.jsxs)(react_1.Modal, { isOpen: settingsOpen, onClose: () => setSettingsOpen(false), size: { base: "full", md: "md" }, children: [(0, jsx_runtime_1.jsx)(react_1.ModalOverlay, {}), (0, jsx_runtime_1.jsxs)(MotionModalContent, { mt: "0", top: "0", left: { base: 0, md: "auto" }, right: { base: 0, md: "auto" }, position: "absolute", borderTopRadius: "none", initial: { y: "-100%", opacity: 0 }, animate: { y: 0, opacity: 1 }, exit: { y: "-100%", opacity: 0 }, transition: { duration: 0.4, ease: "easeOut" }, padding: "0", minW: { base: "auto", md: "620px" }, minH: { base: "auto", md: "520px" }, maxH: "90vh", display: "flex", flexDirection: "column", bg: theme.colors.surfaceRaised, overflow: "hidden", children: [(0, jsx_runtime_1.jsx)(react_1.ModalCloseButton, { top: 3, right: 3, zIndex: 2 }), (0, jsx_runtime_1.jsxs)(react_1.Tabs, { index: selectedIndex, onChange: setSelectedIndex, variant: "unstyled", display: "flex", flexDirection: "column", flex: "1", minH: 0, children: [(0, jsx_runtime_1.jsxs)(react_1.Box, { pt: 4, px: 4, children: [(0, jsx_runtime_1.jsx)(react_1.Text, { fontWeight: 600, fontSize: "md", mb: 3, children: "Table Settings" }), (0, jsx_runtime_1.jsxs)(react_1.TabList, { gap: 0, borderBottom: "1px solid", borderColor: theme.colors.boxborder[200], children: [(0, jsx_runtime_1.jsx)(react_1.Tab, { ...tabStyle, children: "Density" }), (0, jsx_runtime_1.jsx)(react_1.Tab, { ...tabStyle, children: "Manage Columns" }), (0, jsx_runtime_1.jsx)(react_1.Tab, { ...tabStyle, children: "Group" })] })] }), (0, jsx_runtime_1.jsx)(react_1.ModalBody, { px: 4, py: 3, flex: "1", overflowY: "auto", sx: (0, scrollbar_1.scrollbarStyles)(theme.colors), children: (0, jsx_runtime_1.jsxs)(react_1.TabPanels, { children: [(0, jsx_runtime_1.jsx)(react_1.TabPanel, { px: 0, py: 1, children: (0, jsx_runtime_1.jsx)(react_1.Flex, { direction: "column", gap: 2, children: DENSITY_OPTIONS.map((opt) => {
65
+ } }) }), (0, jsx_runtime_1.jsxs)(react_1.Modal, { isOpen: settingsOpen, onClose: () => setSettingsOpen(false), size: { base: "full", md: "md" }, children: [(0, jsx_runtime_1.jsx)(react_1.ModalOverlay, {}), (0, jsx_runtime_1.jsxs)(MotionModalContent, { mt: "0", top: "0", left: { base: 0, md: "auto" }, right: { base: 0, md: "auto" }, position: "absolute", borderTopRadius: "none", initial: { y: sheetOffset, opacity: 0 }, animate: { y: 0, opacity: 1 }, exit: { y: sheetOffset, opacity: 0, transition: SHEET_EXIT }, transition: SHEET_ENTER, padding: "0", minW: { base: "auto", md: "620px" }, minH: { base: "auto", md: "520px" }, maxH: "90vh", display: "flex", flexDirection: "column", bg: theme.colors.surfaceRaised, overflow: "hidden", children: [(0, jsx_runtime_1.jsx)(react_1.ModalCloseButton, { top: 3, right: 3, zIndex: 2 }), (0, jsx_runtime_1.jsxs)(react_1.Tabs, { index: selectedIndex, onChange: setSelectedIndex, variant: "unstyled", display: "flex", flexDirection: "column", flex: "1", minH: 0, children: [(0, jsx_runtime_1.jsxs)(react_1.Box, { pt: 4, px: 4, children: [(0, jsx_runtime_1.jsx)(react_1.Text, { fontWeight: 600, fontSize: "md", mb: 3, children: "Table Settings" }), (0, jsx_runtime_1.jsxs)(react_1.TabList, { gap: 0, borderBottom: "1px solid", borderColor: (0, surfaceRaised_1.raisedRule)(theme.colors), children: [(0, jsx_runtime_1.jsx)(react_1.Tab, { ...tabStyle, children: "Density" }), (0, jsx_runtime_1.jsx)(react_1.Tab, { ...tabStyle, children: "Manage Columns" }), (0, jsx_runtime_1.jsx)(react_1.Tab, { ...tabStyle, children: "Group" })] })] }), (0, jsx_runtime_1.jsx)(react_1.ModalBody, { px: 4, py: 3, flex: "1", overflowY: "auto", sx: (0, scrollbar_1.scrollbarStyles)(theme.colors), children: (0, jsx_runtime_1.jsxs)(react_1.TabPanels, { children: [(0, jsx_runtime_1.jsx)(react_1.TabPanel, { px: 0, py: 1, children: (0, jsx_runtime_1.jsx)(react_1.Flex, { direction: "column", gap: 2, children: DENSITY_OPTIONS.map((opt) => {
61
66
  const selected = density === opt.value;
62
67
  return ((0, jsx_runtime_1.jsxs)(react_1.Flex, { as: "button", type: "button", align: "center", gap: 3, px: 3, py: 2.5, borderRadius: "lg", border: "1px solid", borderColor: selected ? theme.colors.accentText : theme.colors.boxborder[200], bg: selected ? rowBackgrounds.selected : theme.colors.transparent, transition: (0, motion_1.transitionFor)(["background-color", "border-color"]), _hover: { borderColor: theme.colors.accentText }, onClick: () => onDensityChange === null || onDensityChange === void 0 ? void 0 : onDensityChange(opt.value), children: [(0, jsx_runtime_1.jsx)(react_1.Box, { boxSize: "1.1rem", borderRadius: "full", border: "2px solid", borderColor: selected ? theme.colors.accentText : theme.colors.boxborder[500], display: "flex", alignItems: "center", justifyContent: "center", flexShrink: 0, children: selected && (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: 11, color: theme.colors.accentText, strokeWidth: 3 }) }), (0, jsx_runtime_1.jsxs)(react_1.Box, { textAlign: "left", children: [(0, jsx_runtime_1.jsx)(react_1.Text, { fontSize: "13px", fontWeight: 600, color: theme.colors.text[700], children: opt.label }), (0, jsx_runtime_1.jsx)(react_1.Text, { fontSize: "11px", color: theme.colors.textMuted, children: opt.desc })] })] }, opt.value));
63
68
  }) }) }), (0, jsx_runtime_1.jsx)(react_1.TabPanel, { px: 0, py: 0, children: (0, jsx_runtime_1.jsx)(react_1.Box, { sx: {
@@ -78,6 +83,6 @@ const TableSettings = ({ columns, onSave, density = "normal", onDensityChange, g
78
83
  var _a;
79
84
  const selected = selectedGroup === opt.id;
80
85
  return ((0, jsx_runtime_1.jsxs)(react_1.Flex, { as: "button", type: "button", align: "center", gap: 3, px: 3, py: 2.5, borderRadius: "lg", border: "1px solid", borderColor: selected ? theme.colors.accentText : theme.colors.boxborder[200], bg: selected ? rowBackgrounds.selected : theme.colors.transparent, transition: (0, motion_1.transitionFor)(["background-color", "border-color"]), _hover: { borderColor: theme.colors.accentText }, onClick: () => setSelectedGroup(opt.id), children: [(0, jsx_runtime_1.jsx)(react_1.Box, { boxSize: "1.1rem", borderRadius: "full", border: "2px solid", borderColor: selected ? theme.colors.accentText : theme.colors.boxborder[500], display: "flex", alignItems: "center", justifyContent: "center", flexShrink: 0, children: selected && (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: 11, color: theme.colors.accentText, strokeWidth: 3 }) }), (0, jsx_runtime_1.jsx)(react_1.Text, { fontSize: "13px", fontWeight: 600, color: theme.colors.text[700], textAlign: "left", children: opt.label })] }, String((_a = opt.id) !== null && _a !== void 0 ? _a : "__none__")));
81
- }) })] })] }) })] }), (0, jsx_runtime_1.jsxs)(react_1.ModalFooter, { gap: "0.5rem", borderTop: "1px solid", borderColor: theme.colors.boxborder[200], pt: 3, pb: 3, px: 4, children: [(0, jsx_runtime_1.jsx)(Button_1.default, { label: "Close", size: "sm", onClick: () => setSettingsOpen(false), variant: "outline", colorScheme: "red" }), (0, jsx_runtime_1.jsx)(Button_1.default, { label: "Save", size: "sm", onClick: handleSave })] })] })] })] }));
86
+ }) })] })] }) })] }), (0, jsx_runtime_1.jsxs)(react_1.ModalFooter, { gap: "0.5rem", borderTop: "1px solid", borderColor: (0, surfaceRaised_1.raisedRule)(theme.colors), pt: 3, pb: 3, px: 4, children: [(0, jsx_runtime_1.jsx)(Button_1.default, { label: "Close", size: "sm", onClick: () => setSettingsOpen(false), variant: "outline", colorScheme: "red" }), (0, jsx_runtime_1.jsx)(Button_1.default, { label: "Save", size: "sm", onClick: handleSave })] })] })] })] }));
82
87
  };
83
88
  exports.default = TableSettings;
@@ -1,4 +1,4 @@
1
1
  import type { TableVariantTokens } from "./tokens";
2
2
  export declare const TableVariantProvider: import("react").Provider<TableVariantTokens | null>;
3
- /** No provider means the table as it always was — the default is a variant, not a gap. */
3
+ /** No provider means the default variant — studio, the same preset `Table` falls back to. */
4
4
  export declare function useTableVariant(): TableVariantTokens;
@@ -5,13 +5,13 @@ exports.useTableVariant = useTableVariant;
5
5
  const react_1 = require("react");
6
6
  const useCustomTheme_1 = require("../../../Theme/useCustomTheme");
7
7
  const accentText_1 = require("../../../Theme/tokens/builders/accentText");
8
- const classic_1 = require("./classic");
8
+ const studio_1 = require("./studio");
9
9
  const TableVariantContext = (0, react_1.createContext)(null);
10
10
  exports.TableVariantProvider = TableVariantContext.Provider;
11
- /** No provider means the table as it always was — the default is a variant, not a gap. */
11
+ /** No provider means the default variant — studio, the same preset `Table` falls back to. */
12
12
  function useTableVariant() {
13
13
  const provided = (0, react_1.useContext)(TableVariantContext);
14
14
  const theme = (0, useCustomTheme_1.useCustomTheme)();
15
15
  const isDark = (0, accentText_1.isDarkCanvas)(theme.colors.backgroundColor.main);
16
- return (0, react_1.useMemo)(() => provided !== null && provided !== void 0 ? provided : (0, classic_1.classicPreset)(theme.colors, isDark), [provided, theme.colors, isDark]);
16
+ return (0, react_1.useMemo)(() => provided !== null && provided !== void 0 ? provided : (0, studio_1.studioPreset)(theme.colors, isDark), [provided, theme.colors, isDark]);
17
17
  }
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.classicPreset = void 0;
4
4
  const accentText_1 = require("../../../Theme/tokens/builders/accentText");
5
+ const planeStep_1 = require("../../../Theme/tokens/builders/planeStep");
5
6
  const tableRowHoverStyle_1 = require("../components/tableRowHoverStyle");
6
7
  const stripe_1 = require("./stripe");
7
8
  /**
@@ -19,14 +20,14 @@ const classicPreset = (colors, isDark) => {
19
20
  textTransform: "capitalize",
20
21
  letterSpacing: "normal",
21
22
  height: "45px",
22
- ruleColor: colors.boxborder[200],
23
+ ruleColor: (0, planeStep_1.cardRule)(colors),
23
24
  showColumnRule: true,
24
25
  actions: "always",
25
26
  },
26
27
  row: {
27
28
  hoverBg: (0, tableRowHoverStyle_1.getTableRowHoverStyle)(colors, isDark).backgroundColor,
28
29
  hoverScope: "cell",
29
- ruleColor: colors.boxborder[200],
30
+ ruleColor: (0, planeStep_1.cardRule)(colors),
30
31
  frozenRuleColor: colors.boxborder[300],
31
32
  selectedBg: colors.primary.opacity[16],
32
33
  selectedBarColor: colors.primary[500],
@@ -9,6 +9,7 @@ const lucide_react_1 = require("lucide-react");
9
9
  const react_2 = __importDefault(require("react"));
10
10
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
11
11
  const accentText_1 = require("../../Theme/tokens/builders/accentText");
12
+ const planeStep_1 = require("../../Theme/tokens/builders/planeStep");
12
13
  const outlineRung_1 = require("../../Theme/tokens/builders/outlineRung");
13
14
  const motion_1 = require("../../Theme/tokens/primitives/motion");
14
15
  const borderWidths_1 = require("../../Theme/tokens/primitives/borderWidths");
@@ -157,12 +158,14 @@ const NoteItem = react_2.default.memo(function NoteItem({ note, event, index, co
157
158
  var _a, _b;
158
159
  const isEditing = activeEditNoteId === note.log_note_id;
159
160
  const isDeleting = deletingNoteId != null && deletingNoteId === note.log_note_id;
161
+ const noteChip = (0, planeStep_1.bandOn)(colors.primary[50], colors.gray[50]);
162
+ const noteChipInk = (0, accentText_1.accentTextOnCanvas)(colors.primary, noteChip);
160
163
  if (isEditing) {
161
164
  return ((0, jsx_runtime_1.jsx)(react_1.Box, { children: (0, jsx_runtime_1.jsx)(NoteTextArea_1.default, { isEditable: true, value: (_a = note.note) !== null && _a !== void 0 ? _a : "", title: (_b = note.title) !== null && _b !== void 0 ? _b : "", saveButtonLoading: editNoteLoading, handleSubmit: (n, t, f) => onEditNote === null || onEditNote === void 0 ? void 0 : onEditNote(note.log_note_id, n, t, f, event, index), handleCancel: () => setActiveEditNoteId(null) }) }));
162
165
  }
163
166
  return ((0, jsx_runtime_1.jsxs)(react_1.Box, { position: "relative", zIndex: 1, bg: colors.gray[50], border: `${borderWidths_1.BORDER_WIDTHS.hairline} solid ${colors.boxborder[200]}`, borderRadius: "lg", px: 2.5, py: 2, opacity: isDeleting ? 0.6 : 1, _hover: { ".timeline-note-actions": { opacity: 1 } }, _focusWithin: { ".timeline-note-actions": { opacity: 1 } }, children: [(0, jsx_runtime_1.jsxs)(react_1.Flex, { align: "center", gap: 1.5, mb: note.note ? 1 : 0, children: [(0, jsx_runtime_1.jsx)(react_1.Box, { as: "span", color: (0, accentText_1.accentTextOnCanvas)(colors.primary, colors.gray[50]), display: "inline-flex", children: (0, jsx_runtime_1.jsx)(lucide_react_1.StickyNote, { size: 12 }) }), note.title && ((0, jsx_runtime_1.jsx)(react_1.Text, { fontSize: typography_1.fontSizes["xs-minus"], fontWeight: 700, color: colors.text[800], noOfLines: 1, children: note.title })), (onEditNote || onDeleteNote) && ((0, jsx_runtime_1.jsx)(react_1.Flex, { className: "timeline-note-actions", align: "center", gap: 0.5, ml: "auto", flexShrink: 0, opacity: isDeleting ? 1 : 0, transition: REVEAL_TRANSITION, sx: (0, motion_2.reducedMotionSx)(), children: isDeleting ? ((0, jsx_runtime_1.jsx)(react_1.Spinner, { size: "xs", color: colors.textMuted })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [onEditNote && ((0, jsx_runtime_1.jsx)(react_1.Tooltip, { label: "Edit", placement: "top", hasArrow: true, children: (0, jsx_runtime_1.jsx)(react_1.Box, { as: "button", type: "button", "aria-label": "Edit note", sx: (0, focusRing_styles_1.focusVisibleStyles)(colors), display: "inline-flex", alignItems: "center", justifyContent: "center", p: 1, borderRadius: "md", color: colors.textMuted, bg: "transparent", cursor: "pointer", _hover: {
164
- bg: colors.primary[50],
165
- color: (0, accentText_1.accentTextOnCanvas)(colors.primary, colors.primary[50]),
167
+ bg: noteChip,
168
+ color: noteChipInk,
166
169
  }, onClick: (e) => {
167
170
  e.stopPropagation();
168
171
  setActiveEditNoteId(note.log_note_id);
@@ -172,7 +175,7 @@ const NoteItem = react_2.default.memo(function NoteItem({ note, event, index, co
172
175
  }, onClick: (e) => {
173
176
  e.stopPropagation();
174
177
  onDeleteNote === null || onDeleteNote === void 0 ? void 0 : onDeleteNote(note.log_note_id, event, index);
175
- }, children: (0, jsx_runtime_1.jsx)(lucide_react_1.Trash2, { size: 12 }) }) }))] })) }))] }), note.note && ((0, jsx_runtime_1.jsx)(react_1.Text, { fontSize: typography_1.fontSizes["xs-minus"], color: colors.text[700], whiteSpace: "pre-wrap", children: note.note })), note.attachments && note.attachments.length > 0 && ((0, jsx_runtime_1.jsx)(react_1.Flex, { wrap: "wrap", gap: 1.5, mt: 1.5, children: note.attachments.map((att, attIndex) => ((0, jsx_runtime_1.jsxs)(react_1.Flex, { as: "a", href: att.url, target: "_blank", rel: "noopener noreferrer", onClick: (e) => e.stopPropagation(), align: "center", gap: 1, px: 1.5, py: 0.5, borderRadius: "full", bg: colors.primary[50], color: (0, accentText_1.accentTextOnCanvas)(colors.primary, colors.primary[50]), fontSize: MIN_TEXT, maxW: "100%", _hover: { bg: colors.primary[100] }, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Paperclip, { size: 10 }), (0, jsx_runtime_1.jsx)(react_1.Box, { as: "span", noOfLines: 1, maxW: "9rem", children: att.name || "attachment" })] }, attIndex))) })), (note.created_by || note.created_at) && ((0, jsx_runtime_1.jsxs)(react_1.Text, { fontSize: MIN_TEXT, color: colors.textMuted, mt: 1, children: [note.created_by ? formatName(note.created_by) : "", note.created_by && note.created_at ? " · " : "", note.created_at ? formatTimestamp(note.created_at, "time") : ""] }))] }));
178
+ }, children: (0, jsx_runtime_1.jsx)(lucide_react_1.Trash2, { size: 12 }) }) }))] })) }))] }), note.note && ((0, jsx_runtime_1.jsx)(react_1.Text, { fontSize: typography_1.fontSizes["xs-minus"], color: colors.text[700], whiteSpace: "pre-wrap", children: note.note })), note.attachments && note.attachments.length > 0 && ((0, jsx_runtime_1.jsx)(react_1.Flex, { wrap: "wrap", gap: 1.5, mt: 1.5, children: note.attachments.map((att, attIndex) => ((0, jsx_runtime_1.jsxs)(react_1.Flex, { as: "a", href: att.url, target: "_blank", rel: "noopener noreferrer", onClick: (e) => e.stopPropagation(), align: "center", gap: 1, px: 1.5, py: 0.5, borderRadius: "full", bg: noteChip, color: noteChipInk, fontSize: MIN_TEXT, maxW: "100%", _hover: { bg: colors.primary[100] }, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Paperclip, { size: 10 }), (0, jsx_runtime_1.jsx)(react_1.Box, { as: "span", noOfLines: 1, maxW: "9rem", children: att.name || "attachment" })] }, attIndex))) })), (note.created_by || note.created_at) && ((0, jsx_runtime_1.jsxs)(react_1.Text, { fontSize: MIN_TEXT, color: colors.textMuted, mt: 1, children: [note.created_by ? formatName(note.created_by) : "", note.created_by && note.created_at ? " · " : "", note.created_at ? formatTimestamp(note.created_at, "time") : ""] }))] }));
176
179
  });
177
180
  // The colored event card (shared by both the desktop "tree" and mobile rail).
178
181
  // `accent` decides which edge carries the colored bar (pointing toward the spine).
@@ -182,6 +185,7 @@ const EventCard = react_2.default.memo(function EventCard({ event, index, accent
182
185
  const changes = (0, react_3.useMemo)(() => parseChanges(event.changes), [event.changes]);
183
186
  const clickable = typeof onEventClick === "function";
184
187
  const actor = formatName(event.action_by);
188
+ const addNoteHover = (0, planeStep_1.bandOn)(colors.primary[50], colors.background[50]);
185
189
  return ((0, jsx_runtime_1.jsxs)(react_1.Box, { _hover: { ".timeline-add-note": { opacity: 1 } }, _focusWithin: { ".timeline-add-note": { opacity: 1 } }, children: [(0, jsx_runtime_1.jsxs)(react_1.Box, { position: "relative", zIndex: 1, bg: colors.background[50], border: `${borderWidths_1.BORDER_WIDTHS.hairline} solid ${colors.boxborder[200]}`, borderInlineStartWidth: accent === "left" ? "0.1875rem" : undefined, borderInlineEndWidth: accent === "right" ? "0.1875rem" : undefined, borderInlineStartColor: accent === "left" ? scale[400] : undefined, borderInlineEndColor: accent === "right" ? scale[400] : undefined, borderRadius: "xl", px: 3.5, py: 2.5, ...(clickable && {
186
190
  transition: CARD_TRANSITION,
187
191
  _hover: {
@@ -194,7 +198,10 @@ const EventCard = react_2.default.memo(function EventCard({ event, index, accent
194
198
  e.stopPropagation();
195
199
  setActiveNoteEventIndex(isActiveNote ? null : index);
196
200
  }, position: "relative", zIndex: 1, opacity: isActiveNote ? 1 : 0, transition: REVEAL_TRANSITION, sx: { ...(0, focusRing_styles_1.focusVisibleStyles)(colors), ...(0, motion_2.reducedMotionSx)() }, px: 2, py: 1, borderRadius: "md", fontSize: typography_1.fontSizes.xs, fontWeight: 600, color: (0, accentText_1.accentTextOnCanvas)(colors.primary, colors.background[50]), bg: "transparent", cursor: "pointer", _hover: {
197
- bg: colors.primary[50],
201
+ bg: addNoteHover,
202
+ color: addNoteHover === colors.primary[50]
203
+ ? undefined
204
+ : (0, accentText_1.accentTextOnCanvas)(colors.primary, addNoteHover),
198
205
  }, children: isActiveNote ? "Hide note" : "Add note" }))] }), event.notes && event.notes.length > 0 && ((0, jsx_runtime_1.jsx)(react_1.Flex, { direction: "column", gap: 2, mt: 2, pt: 2, borderTop: `${borderWidths_1.BORDER_WIDTHS.hairline} solid ${colors.boxborder[200]}`, children: event.notes.map((note, noteIndex) => {
199
206
  var _a;
200
207
  return ((0, jsx_runtime_1.jsx)(NoteItem, { note: note, event: event, index: index, colors: colors, activeEditNoteId: activeEditNoteId, setActiveEditNoteId: setActiveEditNoteId, editNoteLoading: editNoteLoading, deletingNoteId: deletingNoteId, onEditNote: onEditNote, onDeleteNote: onDeleteNote }, (_a = note.log_note_id) !== null && _a !== void 0 ? _a : noteIndex));
@@ -17,6 +17,7 @@ const motion_1 = require("../../Theme/chakra/motion");
17
17
  const motion_2 = require("../../Theme/tokens/primitives/motion");
18
18
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
19
19
  const tone_1 = require("../../Theme/tokens/builders/tone");
20
+ const color_1 = require("../../Theme/tokens/builders/color");
20
21
  const ToasterContext = (0, react_1.createContext)(undefined);
21
22
  const shrink = (0, react_3.keyframes) `
22
23
  from { transform: scaleX(1); }
@@ -24,11 +25,13 @@ const shrink = (0, react_3.keyframes) `
24
25
  `;
25
26
  // One-shot ring pulse on the status icon — a subtle "just happened" beat.
26
27
  const iconPulse = (0, react_3.keyframes) `
27
- 0% { box-shadow: 0 0 0 0 var(--toast-pulse-color); }
28
- 70% { box-shadow: 0 0 0 0.5rem transparent; }
29
- 100% { box-shadow: 0 0 0 0 transparent; }
28
+ 0% { transform: scale(1); opacity: 1; }
29
+ 70% { transform: scale(1.5); opacity: 0; }
30
+ 100% { transform: scale(1.5); opacity: 0; }
30
31
  `;
31
32
  const MotionBox = (0, framer_motion_1.motion)(react_2.Box);
33
+ const TOAST_ENTER = (0, motion_2.motionTransition)("enter", "out");
34
+ const TOAST_EXIT = (0, motion_2.motionTransition)("exit", "in");
32
35
  // Presentational toast card — owns hover state so auto-dismiss pauses while the pointer is over it.
33
36
  function ToastCard({ onClose, title, description, actions, isClosable, duration, meta, colors: c, isUrgent, }) {
34
37
  const [paused, setPaused] = (0, react_1.useState)(false);
@@ -40,15 +43,23 @@ function ToastCard({ onClose, title, description, actions, isClosable, duration,
40
43
  , {
41
44
  // The single live-region root: an explicit aria-live here, on the card's own
42
45
  // root, keeps errors from being announced a second time by a duplicate wrapper.
43
- role: isUrgent ? "alert" : undefined, "aria-live": isUrgent ? "assertive" : undefined, initial: { opacity: 0, x: 24 }, animate: { opacity: 1, x: 0 }, exit: { opacity: 0, x: 24 }, transition: { duration: 0.24, ease: [0.22, 1, 0.36, 1] }, onHoverStart: () => setPaused(true), onHoverEnd: () => setPaused(false), position: "relative", bg: c.surfaceRaised, border: `0.0625rem solid ${c.boxborder[200]}`, boxShadow: "md", borderRadius: "xl", overflow: "hidden", minW: "22.5rem", maxW: "26rem", sx: {
46
+ role: isUrgent ? "alert" : undefined, "aria-live": isUrgent ? "assertive" : undefined, initial: { opacity: 0, x: 24 }, animate: { opacity: 1, x: 0 }, exit: { opacity: 0, x: 24, transition: TOAST_EXIT }, transition: TOAST_ENTER, onHoverStart: () => setPaused(true), onHoverEnd: () => setPaused(false), position: "relative", bg: c.surfaceRaised, border: `0.0625rem solid ${c.boxborder[200]}`, boxShadow: "md", borderRadius: "xl", overflow: "hidden", minW: "22.5rem", maxW: "26rem", sx: {
44
47
  isolation: "isolate",
45
48
  transition: (0, motion_2.transitionFor)(["box-shadow"]),
46
49
  _hover: { boxShadow: "lg" },
47
50
  ...(0, motion_1.reducedMotionSx)(),
48
- }, children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { p: 3.5, gap: 3, align: actions ? "flex-start" : "center", children: [(0, jsx_runtime_1.jsx)(react_2.Flex, { align: "center", justify: "center", boxSize: "2rem", minW: "2rem", borderRadius: "full", bg: tone.bg, color: tone.fg, sx: {
49
- ["--toast-pulse-color"]: tone.border,
50
- animation: `${iconPulse} 900ms ease-out 1`,
51
- ...(0, motion_1.reducedMotionSx)(),
51
+ }, children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { p: 3.5, gap: 3, align: actions ? "flex-start" : "center", children: [(0, jsx_runtime_1.jsx)(react_2.Flex, { align: "center", justify: "center", boxSize: "2rem", minW: "2rem", borderRadius: "full", position: "relative", bg: (0, color_1.compositeOver)(tone.bg, c.surfaceRaised), color: tone.fg, sx: {
52
+ "&::after": {
53
+ content: '""',
54
+ position: "absolute",
55
+ inset: 0,
56
+ borderRadius: "full",
57
+ bg: tone.border,
58
+ zIndex: -1,
59
+ opacity: 0,
60
+ animation: `${iconPulse} 900ms ease-out 1`,
61
+ ...(0, motion_1.reducedMotionSx)(),
62
+ },
52
63
  }, children: meta.icon }), (0, jsx_runtime_1.jsxs)(react_2.VisuallyHidden, { children: [meta.label, ":"] }), (0, jsx_runtime_1.jsxs)(react_2.Box, { flex: "1", minW: 0, children: [title && ((0, jsx_runtime_1.jsx)(react_2.Text, { fontWeight: 600, fontSize: "0.875rem", lineHeight: "1.3", color: c.text[800], children: title })), description && ((0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: "0.8125rem", lineHeight: "1.45", color: c.textMuted, mt: title ? "0.125rem" : 0, children: description })), actions && ((0, jsx_runtime_1.jsx)(react_2.Flex, { gap: 2, mt: 2.5, align: "center", wrap: "wrap", children: actions(onClose) }))] }), isClosable && ((0, jsx_runtime_1.jsx)(react_2.CloseButton, { onClick: onClose, size: "sm", color: c.textMuted, borderRadius: "md", alignSelf: "flex-start", _hover: {
53
64
  bg: c.gray[100],
54
65
  color: c.text[700],
@@ -13,9 +13,12 @@ const ToolTip_1 = __importDefault(require("../ToolTip/ToolTip"));
13
13
  const useSlidingPill_1 = require("../SegmentedControl/useSlidingPill");
14
14
  const controlSizes_1 = require("../../Theme/tokens/primitives/controlSizes");
15
15
  const borderWidths_1 = require("../../Theme/tokens/primitives/borderWidths");
16
+ const motion_1 = require("../../Theme/tokens/primitives/motion");
16
17
  const MODES = ["grid", "list"];
17
18
  const TRACK_HEIGHT = controlSizes_1.BUTTON_SIZES.sm.height;
18
19
  const SEGMENT_HEIGHT = `calc(${TRACK_HEIGHT} - 0.25rem)`;
20
+ const INK_TRANSITION = (0, motion_1.transitionFor)(["color"], "base");
21
+ const PILL_TRANSITION = (0, motion_1.transitionFor)(["transform", "width"], "base", "out");
19
22
  /** Two icon-only IconButtons (Grid/List), aria-pressed marks the active one; shares variant with SegmentedControl (see MODULE.md). */
20
23
  const TableToggle = ({ value, onChange, variant = "default" }) => {
21
24
  const theme = (0, useCustomTheme_1.useCustomTheme)();
@@ -76,10 +79,10 @@ const TableToggle = ({ value, onChange, variant = "default" }) => {
76
79
  ? colors.accentText
77
80
  : hoverInk,
78
81
  },
79
- transition: "color 0.2s ease-in-out",
82
+ transition: INK_TRANSITION,
80
83
  }),
81
84
  };
82
- return ((0, jsx_runtime_1.jsxs)(react_1.Box, { ref: trackRef, ...styles.container, children: [isBrandSlide && pill && ((0, jsx_runtime_1.jsx)(react_1.Box, { "aria-hidden": "true", position: "absolute", top: "0.125rem", left: 0, h: SEGMENT_HEIGHT, w: `${pill.width}px`, borderRadius: "lg", bg: brandFill.fill, boxShadow: `0 0.125rem 0.5rem ${colors.boxShadow.primary}`, transform: `translateX(${pill.left}px)`, transition: "transform 0.24s cubic-bezier(0.2, 0.8, 0.2, 1), width 0.24s cubic-bezier(0.2, 0.8, 0.2, 1)" })), isUnderlineSlide && pill && ((0, jsx_runtime_1.jsx)(react_1.Box, { "aria-hidden": "true", position: "absolute", bottom: `-${borderWidths_1.BORDER_WIDTHS.hairline}`, left: 0, h: "0.125rem", w: `${pill.width}px`, borderRadius: "full", bg: colors.primary[500], transform: `translateX(${pill.left}px)`, transition: "transform 0.24s cubic-bezier(0.2, 0.8, 0.2, 1), width 0.24s cubic-bezier(0.2, 0.8, 0.2, 1)" })), (0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: "Grid View", placement: "top", fontSize: "xs", hasArrow: true, children: (0, jsx_runtime_1.jsx)(react_1.IconButton, { ref: (node) => {
85
+ return ((0, jsx_runtime_1.jsxs)(react_1.Box, { ref: trackRef, ...styles.container, children: [isBrandSlide && pill && ((0, jsx_runtime_1.jsx)(react_1.Box, { "aria-hidden": "true", position: "absolute", top: "0.125rem", left: 0, h: SEGMENT_HEIGHT, w: `${pill.width}px`, borderRadius: "lg", bg: brandFill.fill, boxShadow: `0 0.125rem 0.5rem ${colors.boxShadow.primary}`, transform: `translateX(${pill.left}px)`, transition: PILL_TRANSITION })), isUnderlineSlide && pill && ((0, jsx_runtime_1.jsx)(react_1.Box, { "aria-hidden": "true", position: "absolute", bottom: `-${borderWidths_1.BORDER_WIDTHS.hairline}`, left: 0, h: "0.125rem", w: `${pill.width}px`, borderRadius: "full", bg: colors.primary[500], transform: `translateX(${pill.left}px)`, transition: PILL_TRANSITION })), (0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: "Grid View", placement: "top", fontSize: "xs", hasArrow: true, children: (0, jsx_runtime_1.jsx)(react_1.IconButton, { ref: (node) => {
83
86
  refs.current[0] = node;
84
87
  }, "aria-label": "Grid View", "aria-pressed": value === "grid", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Table2, { size: "1.25rem" }), variant: "ghost", onClick: () => onChange("grid"), ...styles.button("grid") }) }), (0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: "List View", placement: "top", fontSize: "xs", hasArrow: true, children: (0, jsx_runtime_1.jsx)(react_1.IconButton, { ref: (node) => {
85
88
  refs.current[1] = node;
@@ -7,6 +7,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
7
7
  const react_1 = require("react");
8
8
  const react_2 = require("@chakra-ui/react");
9
9
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
10
+ const surfaceRaised_1 = require("../../Theme/tokens/builders/surfaceRaised");
10
11
  const Button_1 = __importDefault(require("../Button/Button"));
11
12
  const TextInput_1 = __importDefault(require("../Input/TextInput"));
12
13
  const SearchSelect_1 = __importDefault(require("../SearchSelect/SearchSelect"));
@@ -80,7 +81,7 @@ const AddUserModal = ({ isOpen, onClose, roleOptions, isLoading, onSubmit, onAdd
80
81
  type: "email",
81
82
  },
82
83
  ];
83
- return ((0, jsx_runtime_1.jsxs)(react_2.Modal, { isOpen: isOpen, onClose: onClose, trapFocus: false, isCentered: true, children: [(0, jsx_runtime_1.jsx)(react_2.ModalOverlay, { backdropFilter: "blur(4px)" }), (0, jsx_runtime_1.jsxs)(react_2.ModalContent, { bg: colors.surfaceRaised, borderRadius: "xl", overflow: "hidden", children: [(0, jsx_runtime_1.jsxs)(react_2.ModalHeader, { borderBottom: "1px solid", borderColor: colors.boxborder[200], children: [labels.addNewUser, upgradeNotice] }), (0, jsx_runtime_1.jsx)(react_2.ModalCloseButton, {}), (0, jsx_runtime_1.jsx)(react_2.ModalBody, { py: 5, children: (0, jsx_runtime_1.jsxs)(react_2.VStack, { spacing: 4, align: "stretch", children: [textFields.map((field) => ((0, jsx_runtime_1.jsx)(react_2.FormControl, { isInvalid: !!errors[field.id], children: (0, jsx_runtime_1.jsx)(TextInput_1.default, { id: field.id, name: field.id, type: field.type, label: field.label, placeholder: field.placeholder, value: values[field.id], onChange: handleChange(field.id), isRequired: true, error: !!errors[field.id], errorMessage: errors[field.id], width: "100%" }) }, field.id))), (0, jsx_runtime_1.jsx)(react_2.FormControl, { isInvalid: !!errors.role, isRequired: true, children: (0, jsx_runtime_1.jsx)(SearchSelect_1.default, { label: labels.role, options: roleOptions.map((item) => ({
84
+ return ((0, jsx_runtime_1.jsxs)(react_2.Modal, { isOpen: isOpen, onClose: onClose, trapFocus: false, isCentered: true, children: [(0, jsx_runtime_1.jsx)(react_2.ModalOverlay, { backdropFilter: "blur(4px)" }), (0, jsx_runtime_1.jsxs)(react_2.ModalContent, { bg: colors.surfaceRaised, borderRadius: "xl", overflow: "hidden", children: [(0, jsx_runtime_1.jsxs)(react_2.ModalHeader, { borderBottom: "1px solid", borderColor: (0, surfaceRaised_1.raisedRule)(colors), children: [labels.addNewUser, upgradeNotice] }), (0, jsx_runtime_1.jsx)(react_2.ModalCloseButton, {}), (0, jsx_runtime_1.jsx)(react_2.ModalBody, { py: 5, children: (0, jsx_runtime_1.jsxs)(react_2.VStack, { spacing: 4, align: "stretch", children: [textFields.map((field) => ((0, jsx_runtime_1.jsx)(react_2.FormControl, { isInvalid: !!errors[field.id], children: (0, jsx_runtime_1.jsx)(TextInput_1.default, { id: field.id, name: field.id, type: field.type, label: field.label, placeholder: field.placeholder, value: values[field.id], onChange: handleChange(field.id), isRequired: true, error: !!errors[field.id], errorMessage: errors[field.id], width: "100%" }) }, field.id))), (0, jsx_runtime_1.jsx)(react_2.FormControl, { isInvalid: !!errors.role, isRequired: true, children: (0, jsx_runtime_1.jsx)(SearchSelect_1.default, { label: labels.role, options: roleOptions.map((item) => ({
84
85
  id: item.id,
85
86
  label: item.label,
86
87
  })), value: (_a = values.role) !== null && _a !== void 0 ? _a : undefined, onSelect: (option) => {
@@ -7,6 +7,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
7
7
  const react_1 = require("react");
8
8
  const react_2 = require("@chakra-ui/react");
9
9
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
10
+ const surfaceRaised_1 = require("../../Theme/tokens/builders/surfaceRaised");
10
11
  const Button_1 = __importDefault(require("../Button/Button"));
11
12
  const TextInput_1 = __importDefault(require("../Input/TextInput"));
12
13
  const SearchSelect_1 = __importDefault(require("../SearchSelect/SearchSelect"));
@@ -36,7 +37,7 @@ const ChangeRoleModal = ({ isOpen, onClose, userId, email, currentRole, roleOpti
36
37
  return;
37
38
  await (onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit({ userId, roleId: selectedRole.id }));
38
39
  };
39
- return ((0, jsx_runtime_1.jsxs)(react_2.Modal, { isOpen: isOpen, onClose: onClose, trapFocus: false, isCentered: true, children: [(0, jsx_runtime_1.jsx)(react_2.ModalOverlay, { backdropFilter: "blur(4px)" }), (0, jsx_runtime_1.jsxs)(react_2.ModalContent, { bg: colors.surfaceRaised, borderRadius: "xl", overflow: "hidden", children: [(0, jsx_runtime_1.jsx)(react_2.ModalHeader, { borderBottom: "1px solid", borderColor: colors.boxborder[200], children: labels.changeRoleTitle }), (0, jsx_runtime_1.jsx)(react_2.ModalCloseButton, {}), (0, jsx_runtime_1.jsx)(react_2.ModalBody, { py: 5, children: (0, jsx_runtime_1.jsxs)(react_2.VStack, { spacing: 4, align: "stretch", children: [(0, jsx_runtime_1.jsx)(TextInput_1.default, { label: labels.email, value: email !== null && email !== void 0 ? email : "", isDisabled: true, width: "100%" }), (0, jsx_runtime_1.jsx)(react_2.FormControl, { isInvalid: !!error, isRequired: true, children: (0, jsx_runtime_1.jsx)(SearchSelect_1.default, { label: labels.role, options: roleOptions.map((item) => ({
40
+ return ((0, jsx_runtime_1.jsxs)(react_2.Modal, { isOpen: isOpen, onClose: onClose, trapFocus: false, isCentered: true, children: [(0, jsx_runtime_1.jsx)(react_2.ModalOverlay, { backdropFilter: "blur(4px)" }), (0, jsx_runtime_1.jsxs)(react_2.ModalContent, { bg: colors.surfaceRaised, borderRadius: "xl", overflow: "hidden", children: [(0, jsx_runtime_1.jsx)(react_2.ModalHeader, { borderBottom: "1px solid", borderColor: (0, surfaceRaised_1.raisedRule)(colors), children: labels.changeRoleTitle }), (0, jsx_runtime_1.jsx)(react_2.ModalCloseButton, {}), (0, jsx_runtime_1.jsx)(react_2.ModalBody, { py: 5, children: (0, jsx_runtime_1.jsxs)(react_2.VStack, { spacing: 4, align: "stretch", children: [(0, jsx_runtime_1.jsx)(TextInput_1.default, { label: labels.email, value: email !== null && email !== void 0 ? email : "", isDisabled: true, width: "100%" }), (0, jsx_runtime_1.jsx)(react_2.FormControl, { isInvalid: !!error, isRequired: true, children: (0, jsx_runtime_1.jsx)(SearchSelect_1.default, { label: labels.role, options: roleOptions.map((item) => ({
40
41
  id: item.id,
41
42
  label: item.label,
42
43
  })), value: selectedRole !== null && selectedRole !== void 0 ? selectedRole : undefined, onSelect: (option) => {