pixelize-design-library 2.4.2-beta.2 → 2.4.2-beta.21

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 (195) hide show
  1. package/dist/Components/Accordion/Accordion.js +2 -2
  2. package/dist/Components/Button/Button.d.ts +2 -2
  3. package/dist/Components/Button/Button.js +3 -3
  4. package/dist/Components/Button/Button.styles.js +4 -3
  5. package/dist/Components/Button/ButtonProps.d.ts +6 -1
  6. package/dist/Components/ButtonGroupIcon/ButtonGroupIcon.js +6 -6
  7. package/dist/Components/Card/Card.d.ts +1 -1
  8. package/dist/Components/Card/Card.js +2 -2
  9. package/dist/Components/Card/CardProps.d.ts +0 -1
  10. package/dist/Components/Checkbox/Checkbox.js +1 -1
  11. package/dist/Components/Checkbox/Checkbox.styles.js +2 -0
  12. package/dist/Components/Common/fieldStyles.js +1 -1
  13. package/dist/Components/CopyButton/CopyButton.js +1 -1
  14. package/dist/Components/CustomModulesTable/EditModuleModal.js +1 -1
  15. package/dist/Components/DatePicker/CalendarPanel.js +1 -1
  16. package/dist/Components/DatePicker/RangeDatePicker.js +2 -2
  17. package/dist/Components/DatePicker/SingleDatePicker.js +2 -2
  18. package/dist/Components/DatePicker/TimeOnlyPicker.js +1 -1
  19. package/dist/Components/Dropdown/DropDown.js +3 -13
  20. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +1 -1
  21. package/dist/Components/FilePreview/FilePreview.js +1 -1
  22. package/dist/Components/FileUpload/FileUpload.js +3 -2
  23. package/dist/Components/FileUpload/FileUploadProps.d.ts +2 -1
  24. package/dist/Components/FileUpload/constants.js +1 -0
  25. package/dist/Components/FilterSidebar/FilterSidebar.js +4 -4
  26. package/dist/Components/Form/FormWrapper.js +1 -1
  27. package/dist/Components/Input/TextInput.styles.js +6 -4
  28. package/dist/Components/InputTextArea/InputTextArea.style.js +5 -4
  29. package/dist/Components/KanbanBoard/KanbanBoard.js +5 -45
  30. package/dist/Components/LimitReachedModal/LimitReachedModal.js +4 -5
  31. package/dist/Components/MultiSelect/MultiSelect.js +1 -1
  32. package/dist/Components/NavigationBar/NavigationBar.js +3 -3
  33. package/dist/Components/NoteTextArea/NoteTextArea.js +5 -3
  34. package/dist/Components/NumberInput/NumberInput.styles.js +5 -4
  35. package/dist/Components/OrgSwitcher/OrgSwitcher.js +2 -2
  36. package/dist/Components/PinInput/PinInput.js +1 -1
  37. package/dist/Components/PlanPill/PlanPill.js +5 -5
  38. package/dist/Components/PlanPill/planPillGradient.d.ts +2 -14
  39. package/dist/Components/PlanPill/planPillGradient.js +3 -15
  40. package/dist/Components/Primitives/Primitives.d.ts +6 -0
  41. package/dist/Components/Primitives/Primitives.js +113 -0
  42. package/dist/Components/ProductCard/ProductPrice.js +1 -1
  43. package/dist/Components/ProfileCard/ProfileCard.js +1 -1
  44. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +1 -1
  45. package/dist/Components/RadioButton/RadioButton.js +1 -1
  46. package/dist/Components/Reorder/Reorder.js +1 -1
  47. package/dist/Components/ScrollbarBox/ScrollbarBox.d.ts +13 -0
  48. package/dist/Components/ScrollbarBox/ScrollbarBox.js +11 -0
  49. package/dist/Components/SearchSelect/SearchSelect.js +5 -4
  50. package/dist/Components/Select/Select.styles.js +3 -2
  51. package/dist/Components/SelectSearch/SelectSearch.js +3 -3
  52. package/dist/Components/SelectV2/SelectV2.js +5 -11
  53. package/dist/Components/SideBar/SecondaryBar.js +1 -1
  54. package/dist/Components/StageProgress/StageProgress.js +2 -9
  55. package/dist/Components/Table/Table.d.ts +1 -1
  56. package/dist/Components/Table/Table.js +17 -24
  57. package/dist/Components/Table/TableProps.d.ts +4 -0
  58. package/dist/Components/Table/components/TableActions.js +2 -2
  59. package/dist/Components/Table/components/TableBody.js +41 -12
  60. package/dist/Components/Table/components/TableGroupRow.js +1 -1
  61. package/dist/Components/Table/components/TableHeader.js +21 -8
  62. package/dist/Components/Table/components/TableSearch.js +1 -1
  63. package/dist/Components/Table/filters/ActiveFilters.js +2 -18
  64. package/dist/Components/Table/settings/ManageColumns.js +3 -17
  65. package/dist/Components/Table/settings/TableSettings.js +5 -11
  66. package/dist/Components/Table/variants/TableVariantContext.d.ts +4 -0
  67. package/dist/Components/Table/variants/TableVariantContext.js +17 -0
  68. package/dist/Components/Table/variants/classic.d.ts +6 -0
  69. package/dist/Components/Table/variants/classic.js +47 -0
  70. package/dist/Components/Table/variants/index.d.ts +7 -0
  71. package/dist/Components/Table/variants/index.js +27 -0
  72. package/dist/Components/Table/variants/pillInk.d.ts +6 -0
  73. package/dist/Components/Table/variants/pillInk.js +21 -0
  74. package/dist/Components/Table/variants/studio.d.ts +6 -0
  75. package/dist/Components/Table/variants/studio.js +50 -0
  76. package/dist/Components/Table/variants/tokens.d.ts +49 -0
  77. package/dist/Components/Table/variants/tokens.js +2 -0
  78. package/dist/Components/Timeline/Timeline.js +2 -2
  79. package/dist/Components/Toaster/Toaster.js +1 -1
  80. package/dist/Components/Trail/TrailWorks.js +1 -1
  81. package/dist/Components/UpgradeButton/UpgradeButton.js +3 -3
  82. package/dist/Constants/Sidebar.js +3 -2
  83. package/dist/Theme/chakra/Menu.styles.d.ts +9 -6
  84. package/dist/Theme/chakra/Menu.styles.js +11 -5
  85. package/dist/Theme/chakra/Popover.styles.d.ts +6 -3
  86. package/dist/Theme/chakra/Popover.styles.js +11 -6
  87. package/dist/Theme/chakra/Switch.styles.d.ts +1 -1
  88. package/dist/Theme/chakra/Switch.styles.js +7 -9
  89. package/dist/Theme/chakra/componentStyles.d.ts +15 -9
  90. package/dist/Theme/chakra/createBrandTheme.js +3 -16
  91. package/dist/Theme/provider/PixelizeThemeProvider.js +18 -20
  92. package/dist/Theme/provider/ThemeSwitcher.js +13 -20
  93. package/dist/Theme/tokens/brands/lavender/palette.light.js +2 -6
  94. package/dist/Theme/tokens/brands/slate/palette.light.js +1 -5
  95. package/dist/Theme/tokens/builders/chartColorsFromTheme.js +1 -1
  96. package/dist/Theme/tokens/builders/gradientInk.d.ts +22 -0
  97. package/dist/Theme/tokens/builders/gradientInk.js +28 -0
  98. package/dist/Theme/tokens/builders/index.d.ts +3 -0
  99. package/dist/Theme/tokens/builders/index.js +3 -0
  100. package/dist/Theme/tokens/builders/outlineRung.d.ts +32 -3
  101. package/dist/Theme/tokens/builders/outlineRung.js +74 -5
  102. package/dist/Theme/tokens/builders/placeholderInk.d.ts +19 -0
  103. package/dist/Theme/tokens/builders/placeholderInk.js +35 -0
  104. package/dist/Theme/tokens/builders/resolvedRungs.d.ts +5 -1
  105. package/dist/Theme/tokens/builders/resolvedRungs.js +7 -2
  106. package/dist/Theme/tokens/builders/scrollbar.d.ts +12 -0
  107. package/dist/Theme/tokens/builders/scrollbar.js +57 -0
  108. package/dist/Theme/tokens/builders/surfaceRungs.d.ts +5 -0
  109. package/dist/Theme/tokens/builders/surfaceRungs.js +20 -5
  110. package/dist/esm/Components/Accordion/Accordion.js +2 -2
  111. package/dist/esm/Components/Button/Button.js +4 -4
  112. package/dist/esm/Components/Button/Button.styles.js +5 -4
  113. package/dist/esm/Components/ButtonGroupIcon/ButtonGroupIcon.js +6 -6
  114. package/dist/esm/Components/Card/Card.js +2 -2
  115. package/dist/esm/Components/Checkbox/Checkbox.js +1 -1
  116. package/dist/esm/Components/Checkbox/Checkbox.styles.js +2 -0
  117. package/dist/esm/Components/Common/fieldStyles.js +1 -1
  118. package/dist/esm/Components/CopyButton/CopyButton.js +1 -1
  119. package/dist/esm/Components/CustomModulesTable/EditModuleModal.js +1 -1
  120. package/dist/esm/Components/DatePicker/CalendarPanel.js +1 -1
  121. package/dist/esm/Components/DatePicker/RangeDatePicker.js +2 -2
  122. package/dist/esm/Components/DatePicker/SingleDatePicker.js +2 -2
  123. package/dist/esm/Components/DatePicker/TimeOnlyPicker.js +1 -1
  124. package/dist/esm/Components/Dropdown/DropDown.js +3 -13
  125. package/dist/esm/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +1 -1
  126. package/dist/esm/Components/FilePreview/FilePreview.js +1 -1
  127. package/dist/esm/Components/FileUpload/FileUpload.js +4 -3
  128. package/dist/esm/Components/FileUpload/constants.js +1 -0
  129. package/dist/esm/Components/FilterSidebar/FilterSidebar.js +4 -4
  130. package/dist/esm/Components/Form/FormWrapper.js +1 -1
  131. package/dist/esm/Components/Input/TextInput.styles.js +6 -4
  132. package/dist/esm/Components/InputTextArea/InputTextArea.style.js +5 -4
  133. package/dist/esm/Components/KanbanBoard/KanbanBoard.js +5 -45
  134. package/dist/esm/Components/LimitReachedModal/LimitReachedModal.js +4 -5
  135. package/dist/esm/Components/MultiSelect/MultiSelect.js +1 -1
  136. package/dist/esm/Components/NavigationBar/NavigationBar.js +3 -3
  137. package/dist/esm/Components/NoteTextArea/NoteTextArea.js +5 -3
  138. package/dist/esm/Components/NumberInput/NumberInput.styles.js +5 -4
  139. package/dist/esm/Components/OrgSwitcher/OrgSwitcher.js +2 -2
  140. package/dist/esm/Components/PinInput/PinInput.js +1 -1
  141. package/dist/esm/Components/PlanPill/PlanPill.js +6 -6
  142. package/dist/esm/Components/PlanPill/planPillGradient.js +3 -15
  143. package/dist/esm/Components/Primitives/Primitives.js +6 -0
  144. package/dist/esm/Components/ProductCard/ProductPrice.js +1 -1
  145. package/dist/esm/Components/ProfileCard/ProfileCard.js +1 -1
  146. package/dist/esm/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +1 -1
  147. package/dist/esm/Components/RadioButton/RadioButton.js +1 -1
  148. package/dist/esm/Components/Reorder/Reorder.js +1 -1
  149. package/dist/esm/Components/ScrollbarBox/ScrollbarBox.js +9 -0
  150. package/dist/esm/Components/SearchSelect/SearchSelect.js +5 -4
  151. package/dist/esm/Components/Select/Select.styles.js +3 -2
  152. package/dist/esm/Components/SelectSearch/SelectSearch.js +3 -3
  153. package/dist/esm/Components/SelectV2/SelectV2.js +5 -11
  154. package/dist/esm/Components/SideBar/SecondaryBar.js +1 -1
  155. package/dist/esm/Components/StageProgress/StageProgress.js +2 -9
  156. package/dist/esm/Components/Table/Table.js +17 -24
  157. package/dist/esm/Components/Table/components/TableActions.js +2 -2
  158. package/dist/esm/Components/Table/components/TableBody.js +42 -13
  159. package/dist/esm/Components/Table/components/TableGroupRow.js +1 -1
  160. package/dist/esm/Components/Table/components/TableHeader.js +21 -8
  161. package/dist/esm/Components/Table/components/TableSearch.js +1 -1
  162. package/dist/esm/Components/Table/filters/ActiveFilters.js +2 -18
  163. package/dist/esm/Components/Table/settings/ManageColumns.js +3 -17
  164. package/dist/esm/Components/Table/settings/TableSettings.js +5 -11
  165. package/dist/esm/Components/Table/variants/TableVariantContext.js +13 -0
  166. package/dist/esm/Components/Table/variants/classic.js +43 -0
  167. package/dist/esm/Components/Table/variants/index.js +9 -0
  168. package/dist/esm/Components/Table/variants/pillInk.js +18 -0
  169. package/dist/esm/Components/Table/variants/studio.js +46 -0
  170. package/dist/esm/Components/Table/variants/tokens.js +1 -0
  171. package/dist/esm/Components/Timeline/Timeline.js +2 -2
  172. package/dist/esm/Components/Toaster/Toaster.js +1 -1
  173. package/dist/esm/Components/Trail/TrailWorks.js +1 -1
  174. package/dist/esm/Components/UpgradeButton/UpgradeButton.js +3 -3
  175. package/dist/esm/Constants/Sidebar.js +3 -2
  176. package/dist/esm/Theme/chakra/Menu.styles.js +11 -5
  177. package/dist/esm/Theme/chakra/Popover.styles.js +11 -6
  178. package/dist/esm/Theme/chakra/Switch.styles.js +7 -9
  179. package/dist/esm/Theme/chakra/createBrandTheme.js +3 -16
  180. package/dist/esm/Theme/provider/PixelizeThemeProvider.js +18 -20
  181. package/dist/esm/Theme/provider/ThemeSwitcher.js +13 -20
  182. package/dist/esm/Theme/tokens/brands/lavender/palette.light.js +2 -6
  183. package/dist/esm/Theme/tokens/brands/slate/palette.light.js +1 -5
  184. package/dist/esm/Theme/tokens/builders/chartColorsFromTheme.js +1 -1
  185. package/dist/esm/Theme/tokens/builders/gradientInk.js +22 -0
  186. package/dist/esm/Theme/tokens/builders/index.js +3 -0
  187. package/dist/esm/Theme/tokens/builders/outlineRung.js +70 -4
  188. package/dist/esm/Theme/tokens/builders/placeholderInk.js +29 -0
  189. package/dist/esm/Theme/tokens/builders/resolvedRungs.js +7 -2
  190. package/dist/esm/Theme/tokens/builders/scrollbar.js +52 -0
  191. package/dist/esm/Theme/tokens/builders/surfaceRungs.js +20 -5
  192. package/dist/esm/index.js +6 -1
  193. package/dist/index.d.ts +11 -2
  194. package/dist/index.js +21 -3
  195. package/package.json +4 -2
@@ -43,6 +43,7 @@ const lucide_react_1 = require("lucide-react");
43
43
  const FormLabel_1 = require("../Common/FormLabel");
44
44
  const Tag_1 = __importDefault(require("../Tag/Tag"));
45
45
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
46
+ const placeholderInk_1 = require("../../Theme/tokens/builders/placeholderInk");
46
47
  const ErrorMessage_1 = __importDefault(require("../Common/ErrorMessage"));
47
48
  const HelperText_1 = __importDefault(require("../Common/HelperText"));
48
49
  const ToolTip_1 = __importDefault(require("../ToolTip/ToolTip"));
@@ -487,7 +488,7 @@ const SearchSelect = ({ id, label, options, onSelect, onSearch, isOptionLoading
487
488
  var _a, _b, _c, _d, _e;
488
489
  const insideLabel = (_a = insideSelect.value) === null || _a === void 0 ? void 0 : _a.label;
489
490
  const insidePlaceholder = (_b = insideSelect.placeholder) !== null && _b !== void 0 ? _b : "Select";
490
- return ((0, jsx_runtime_1.jsxs)(react_2.Box, { position: "relative", ref: customSelectRef, flexShrink: 0, ml: s.insideSelectMarginLeft, h: "-webkit-fill-available", borderRight: "0.063rem solid", borderColor: theme.colors.boxborder[300], bg: customSelectOpen
491
+ return ((0, jsx_runtime_1.jsxs)(react_2.Box, { position: "relative", ref: customSelectRef, flexShrink: 0, ml: s.insideSelectMarginLeft, h: "-webkit-fill-available", borderRight: "0.063rem solid", borderColor: theme.colors.boxborder[200], bg: customSelectOpen
491
492
  ? theme.colors.primary.opacity[8]
492
493
  : theme.colors.background[400], borderLeftRadius: "md", borderRightRadius: 0, transition: "background 0.15s ease, box-shadow 0.15s ease", boxShadow: customSelectOpen
493
494
  ? `inset 0 0 0 0.063rem ${theme.colors.primary[500]}`
@@ -495,7 +496,7 @@ const SearchSelect = ({ id, label, options, onSelect, onSearch, isOptionLoading
495
496
  e.stopPropagation();
496
497
  setIsOpen(false);
497
498
  setCustomSelectOpen((prev) => !prev);
498
- }, children: [(0, jsx_runtime_1.jsxs)(react_2.Box, { minW: "4.5rem", cursor: "pointer", display: "flex", justifyContent: "space-between", alignItems: "center", gap: 1, width: insideSelect.width, height: insideSelectBoxHeight, pl: "0.5rem", pr: "0.375rem", children: [insideLabel ? ((0, jsx_runtime_1.jsx)(SelectTruncatedLabel_1.default, { label: insideLabel, maxWidth: insideSelect.width || "6rem", fontSize: s.fieldFontSize })) : ((0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: s.fieldFontSize, fontWeight: 500, color: theme.colors.placeholder[500], isTruncated: true, maxW: insideSelect.width || "6rem", children: insidePlaceholder })), (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-flex", flexShrink: 0, color: customSelectOpen ? theme.colors.accentText : theme.colors.textMuted, transition: "transform 0.2s ease, color 0.15s ease", transform: customSelectOpen ? "rotate(180deg)" : "rotate(0deg)", children: (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { size: s.chevronSize }) })] }), customSelectOpen && ((0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsx)(react_2.Box, { ref: setInsideSelectMenuRef, id: "custom-select-portal", position: "fixed", top: `${customSelectPos.top}px`, left: `${customSelectPos.left}px`, zIndex: 1510, bg: theme.colors.background[50], border: "0.063rem solid", borderColor: theme.colors.boxborder[200], borderRadius: "lg", boxShadow: (_d = (_c = theme.shadows) === null || _c === void 0 ? void 0 : _c.md) !== null && _d !== void 0 ? _d : "md", minW: `${customSelectPos.width}px`, maxW: "20rem", py: 1, overflow: "hidden", children: (_e = insideSelect.option) === null || _e === void 0 ? void 0 : _e.map((item) => {
499
+ }, children: [(0, jsx_runtime_1.jsxs)(react_2.Box, { minW: "4.5rem", cursor: "pointer", display: "flex", justifyContent: "space-between", alignItems: "center", gap: 1, width: insideSelect.width, height: insideSelectBoxHeight, pl: "0.5rem", pr: "0.375rem", children: [insideLabel ? ((0, jsx_runtime_1.jsx)(SelectTruncatedLabel_1.default, { label: insideLabel, maxWidth: insideSelect.width || "6rem", fontSize: s.fieldFontSize })) : ((0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: s.fieldFontSize, fontWeight: 500, color: (0, placeholderInk_1.placeholderInk)(theme.colors), isTruncated: true, maxW: insideSelect.width || "6rem", children: insidePlaceholder })), (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-flex", flexShrink: 0, color: customSelectOpen ? theme.colors.accentText : theme.colors.textMuted, transition: "transform 0.2s ease, color 0.15s ease", transform: customSelectOpen ? "rotate(180deg)" : "rotate(0deg)", children: (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { size: s.chevronSize }) })] }), customSelectOpen && ((0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsx)(react_2.Box, { ref: setInsideSelectMenuRef, id: "custom-select-portal", position: "fixed", top: `${customSelectPos.top}px`, left: `${customSelectPos.left}px`, zIndex: 1510, bg: theme.colors.background[50], border: "0.063rem solid", borderColor: theme.colors.boxborder[200], borderRadius: "lg", boxShadow: (_d = (_c = theme.shadows) === null || _c === void 0 ? void 0 : _c.md) !== null && _d !== void 0 ? _d : "md", minW: `${customSelectPos.width}px`, maxW: "20rem", py: 1, overflow: "hidden", children: (_e = insideSelect.option) === null || _e === void 0 ? void 0 : _e.map((item) => {
499
500
  var _a;
500
501
  const selected = ((_a = insideSelect.value) === null || _a === void 0 ? void 0 : _a.id) === item.id;
501
502
  return ((0, jsx_runtime_1.jsxs)(react_2.Box, { display: "flex", alignItems: "center", justifyContent: "space-between", gap: 2, minH: s.optionRowMinH, py: s.optionRowPy, px: "0.75rem", fontSize: s.dropdownTextFontSize, fontWeight: selected ? 600 : 500, color: selected
@@ -544,10 +545,10 @@ const SearchSelect = ({ id, label, options, onSelect, onSearch, isOptionLoading
544
545
  setCustomSelectOpen(false);
545
546
  return !prev;
546
547
  });
547
- }, "aria-label": "toggle-dropdown", display: "flex", alignItems: "center", children: isOpen ? ((0, jsx_runtime_1.jsx)(lucide_react_1.ChevronUp, { size: s.chevronSize })) : ((0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { size: s.chevronSize })) }))] })] }) }), isOpen && ((0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsxs)(react_2.Box, { ref: setDropdownMenuRef, id: listboxId, role: "listbox", "aria-multiselectable": isMultiple || undefined, position: "fixed", top: `${dropdownPos.top}px`, left: `${dropdownPos.left}px`, width: `${dropdownPos.width}px`, zIndex: 1500, maxH: "20rem", borderWidth: 1, borderColor: theme.colors.boxborder[200], borderRadius: "sm", bg: theme.colors.background[50], boxShadow: "md", display: "flex", flexDirection: "column", children: [isMultiple && isSelectAll && ((0, jsx_runtime_1.jsxs)(react_2.Box, { py: s.optionRowPy, px: 3, cursor: "pointer", onClick: handleSelectAll, display: "flex", alignItems: "center", gap: 2, borderBottom: `0.063rem solid ${theme.colors.boxborder[100]}`, children: [(0, jsx_runtime_1.jsx)(Checkbox_1.default, { isChecked: allFilteredSelected, sx: { pointerEvents: "none" }, size: s.checkboxSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: s.dropdownTextFontSize, children: allFilteredSelected ? "Unselect All" : "Select All" })] })), (0, jsx_runtime_1.jsx)(react_2.Box, { flex: "1", overflowY: "auto", onScroll: handleScroll, maxH: "15rem", borderBottom: "0.063rem solid", borderColor: theme.colors.boxborder[200], children: isOptionLoading && filteredOptions.length === 0 ? ((0, jsx_runtime_1.jsxs)(react_2.Box, { py: s.optionRowPy, px: 3, display: "flex", alignItems: "center", gap: 2, minH: s.optionRowMinH, children: [(0, jsx_runtime_1.jsx)(react_2.Spinner, { size: s.spinnerSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: s.dropdownTextFontSize, children: loadingText })] })) : !isOptionLoading && filteredOptions.length === 0 ? ((0, jsx_runtime_1.jsx)(react_2.Text, { p: 3, fontSize: s.dropdownTextFontSize, color: theme.colors.textMuted, children: "No results found" })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [filteredOptions.map((option, index) => ((0, jsx_runtime_1.jsxs)(react_2.Box, { id: getOptionId(index), role: "option", "aria-selected": isSelected(option.id), py: s.optionRowPy, px: 3, minH: s.optionRowMinH, cursor: "pointer", bg: index === activeIndex
548
+ }, "aria-label": "toggle-dropdown", display: "flex", alignItems: "center", children: isOpen ? ((0, jsx_runtime_1.jsx)(lucide_react_1.ChevronUp, { size: s.chevronSize })) : ((0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { size: s.chevronSize })) }))] })] }) }), isOpen && ((0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsxs)(react_2.Box, { ref: setDropdownMenuRef, id: listboxId, role: "listbox", "aria-multiselectable": isMultiple || undefined, position: "fixed", top: `${dropdownPos.top}px`, left: `${dropdownPos.left}px`, width: `${dropdownPos.width}px`, zIndex: 1500, maxH: "20rem", borderWidth: 1, borderColor: theme.colors.boxborder[200], borderRadius: "sm", bg: theme.colors.background[50], boxShadow: "md", display: "flex", flexDirection: "column", children: [isMultiple && isSelectAll && ((0, jsx_runtime_1.jsxs)(react_2.Box, { py: s.optionRowPy, px: 3, cursor: "pointer", onClick: handleSelectAll, display: "flex", alignItems: "center", gap: 2, borderBottom: `0.063rem solid ${theme.colors.boxborder[200]}`, children: [(0, jsx_runtime_1.jsx)(Checkbox_1.default, { isChecked: allFilteredSelected, sx: { pointerEvents: "none" }, size: s.checkboxSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: s.dropdownTextFontSize, children: allFilteredSelected ? "Unselect All" : "Select All" })] })), (0, jsx_runtime_1.jsx)(react_2.Box, { flex: "1", overflowY: "auto", onScroll: handleScroll, maxH: "15rem", borderBottom: "0.063rem solid", borderColor: theme.colors.boxborder[200], children: isOptionLoading && filteredOptions.length === 0 ? ((0, jsx_runtime_1.jsxs)(react_2.Box, { py: s.optionRowPy, px: 3, display: "flex", alignItems: "center", gap: 2, minH: s.optionRowMinH, children: [(0, jsx_runtime_1.jsx)(react_2.Spinner, { size: s.spinnerSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: s.dropdownTextFontSize, children: loadingText })] })) : !isOptionLoading && filteredOptions.length === 0 ? ((0, jsx_runtime_1.jsx)(react_2.Text, { p: 3, fontSize: s.dropdownTextFontSize, color: theme.colors.textMuted, children: "No results found" })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [filteredOptions.map((option, index) => ((0, jsx_runtime_1.jsxs)(react_2.Box, { id: getOptionId(index), role: "option", "aria-selected": isSelected(option.id), py: s.optionRowPy, px: 3, minH: s.optionRowMinH, cursor: "pointer", bg: index === activeIndex
548
549
  ? theme.colors.primary.opacity[8]
549
550
  : isSelected(option.id)
550
551
  ? theme.colors.gray[100]
551
- : "transparent", _hover: { bg: theme.colors.gray[50] }, onClick: () => handleSelect(option), onMouseEnter: () => setActiveIndex(index), display: "flex", alignItems: "center", gap: 2, borderBottom: `0.063rem solid ${theme.colors.boxborder[100]}`, children: [isMultiple && ((0, jsx_runtime_1.jsx)(Checkbox_1.default, { isChecked: isSelected(option.id), sx: { pointerEvents: "none" }, size: s.checkboxSize })), option.view ? ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: option.view })) : ((0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: s.dropdownTextFontSize, children: option.label }))] }, option.id))), ((pagination === null || pagination === void 0 ? void 0 : pagination.scrollLoading) || (isOptionLoading && filteredOptions.length > 0)) && ((0, jsx_runtime_1.jsxs)(react_2.Box, { py: s.optionRowPy, px: 3, display: "flex", alignItems: "center", justifyContent: "center", gap: 2, minH: s.optionRowMinH, children: [(0, jsx_runtime_1.jsx)(react_2.Spinner, { size: s.spinnerSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: s.dropdownTextFontSize, children: loadingText })] }))] })) }), (addNew === null || addNew === void 0 ? void 0 : addNew.enabled) && ((0, jsx_runtime_1.jsxs)(react_2.Box, { py: s.optionRowPy, px: 3, borderTop: "0.063rem solid", borderColor: theme.colors.boxborder[200], bg: theme.colors.background[50], display: "flex", alignItems: "center", gap: 2, minH: s.optionRowMinH, cursor: "pointer", onClick: addNew.onClick, _hover: { bg: theme.colors.gray[50] }, children: [addNew.icon || (0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: s.addNewIconSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: s.dropdownTextFontSize, children: addNew.text || "Add New" })] }))] }) })), helperText && !error && (0, jsx_runtime_1.jsx)(HelperText_1.default, { helperText: helperText }), error && (0, jsx_runtime_1.jsx)(ErrorMessage_1.default, { errorMessage: errorMessage })] }));
552
+ : "transparent", _hover: { bg: theme.colors.gray[50] }, onClick: () => handleSelect(option), onMouseEnter: () => setActiveIndex(index), display: "flex", alignItems: "center", gap: 2, borderBottom: `0.063rem solid ${theme.colors.boxborder[200]}`, children: [isMultiple && ((0, jsx_runtime_1.jsx)(Checkbox_1.default, { isChecked: isSelected(option.id), sx: { pointerEvents: "none" }, size: s.checkboxSize })), option.view ? ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: option.view })) : ((0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: s.dropdownTextFontSize, children: option.label }))] }, option.id))), ((pagination === null || pagination === void 0 ? void 0 : pagination.scrollLoading) || (isOptionLoading && filteredOptions.length > 0)) && ((0, jsx_runtime_1.jsxs)(react_2.Box, { py: s.optionRowPy, px: 3, display: "flex", alignItems: "center", justifyContent: "center", gap: 2, minH: s.optionRowMinH, children: [(0, jsx_runtime_1.jsx)(react_2.Spinner, { size: s.spinnerSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: s.dropdownTextFontSize, children: loadingText })] }))] })) }), (addNew === null || addNew === void 0 ? void 0 : addNew.enabled) && ((0, jsx_runtime_1.jsxs)(react_2.Box, { py: s.optionRowPy, px: 3, borderTop: "0.063rem solid", borderColor: theme.colors.boxborder[200], bg: theme.colors.background[50], display: "flex", alignItems: "center", gap: 2, minH: s.optionRowMinH, cursor: "pointer", onClick: addNew.onClick, _hover: { bg: theme.colors.gray[50] }, children: [addNew.icon || (0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: s.addNewIconSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: s.dropdownTextFontSize, children: addNew.text || "Add New" })] }))] }) })), helperText && !error && (0, jsx_runtime_1.jsx)(HelperText_1.default, { helperText: helperText }), error && (0, jsx_runtime_1.jsx)(ErrorMessage_1.default, { errorMessage: errorMessage })] }));
552
553
  };
553
554
  exports.default = SearchSelect;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Select = void 0;
4
+ const placeholderInk_1 = require("../../Theme/tokens/builders/placeholderInk");
4
5
  exports.Select = {
5
6
  baseStyle: ({ theme }) => ({
6
7
  field: {
@@ -19,7 +20,7 @@ exports.Select = {
19
20
  width: "100%", // full container width
20
21
  maxWidth: "100%",
21
22
  _placeholder: {
22
- fontStyle: "italic",
23
+ color: (0, placeholderInk_1.placeholderInk)(theme.colors),
23
24
  whiteSpace: "nowrap",
24
25
  overflow: "hidden",
25
26
  textOverflow: "ellipsis",
@@ -63,7 +64,7 @@ exports.Select = {
63
64
  // [800], not [500]/[700]: WCAG 1.4.11 needs >=3.0 for a control boundary, measured
64
65
  // against the parent surface — up to `muted` (lightest). [700] fails there (2.41-2.72);
65
66
  // [800] clears all named surfaces with margin (3.44-3.90).
66
- const borderColor = theme.colors.boxborder[800];
67
+ const borderColor = theme.colors.boxborder[500];
67
68
  const shadowPrimary = theme.colors.boxShadow.primary;
68
69
  const shadowError = theme.colors.boxShadow.error;
69
70
  const primary = theme.colors.primary[500];
@@ -36,7 +36,7 @@ BottomIcon = false, BottomText, handleBottomClick, BottomTextColor, isColorOptio
36
36
  const errorBorder = `2px solid ${theme.colors.semanticText.error}`;
37
37
  // [800], not [500]: WCAG 1.4.11 needs >=3.0 for a control boundary against any named surface
38
38
  // up to `muted` (lightest); [500] fails there, [800] clears all with margin.
39
- const defaultBorderThin = `1px solid ${theme.colors.boxborder[800]}`;
39
+ const defaultBorderThin = `1px solid ${theme.colors.boxborder[500]}`;
40
40
  const [selectedOptions, setSelectedOptions] = (0, react_1.useState)(initialSelectedOption ? [initialSelectedOption] : []);
41
41
  const [inputValue, setInputValue] = (0, react_1.useState)(searchQuery);
42
42
  const [isOpen, setIsOpen] = (0, react_1.useState)(false);
@@ -252,7 +252,7 @@ BottomIcon = false, BottomText, handleBottomClick, BottomTextColor, isColorOptio
252
252
  return;
253
253
  }
254
254
  setIsOpen(true);
255
- }, onChange: (e) => handleInputChange(e.target.value), placeholder: placeholder, onKeyDown: handleKeyDown, id: id, name: name, role: "combobox", "aria-autocomplete": "list", "aria-haspopup": "listbox", "aria-expanded": isOpen, "aria-controls": listboxId, cursor: "pointer", borderColor: theme.colors.boxborder[800], transition: "border-color 0.2s, box-shadow 0.2s", _hover: {
255
+ }, onChange: (e) => handleInputChange(e.target.value), placeholder: placeholder, onKeyDown: handleKeyDown, id: id, name: name, role: "combobox", "aria-autocomplete": "list", "aria-haspopup": "listbox", "aria-expanded": isOpen, "aria-controls": listboxId, cursor: "pointer", borderColor: theme.colors.boxborder[500], transition: "border-color 0.2s, box-shadow 0.2s", _hover: {
256
256
  borderColor: error
257
257
  ? theme.colors.semanticText.error
258
258
  : theme.colors.primary[500],
@@ -270,7 +270,7 @@ BottomIcon = false, BottomText, handleBottomClick, BottomTextColor, isColorOptio
270
270
  fontSize: 15,
271
271
  letterSpacing: 0.7,
272
272
  border: error ? errorBorder : defaultBorderThin,
273
- } }), rightIcon && ((0, jsx_runtime_1.jsx)(react_2.InputRightElement, { pointerEvents: "none", children: rightIcon, style: { ...rightElementStyle } }))] }), isOpen && ((0, jsx_runtime_1.jsxs)(react_2.Box, { ref: dropdownRef, marginTop: "5px", position: "absolute", top: position === "below" ? "100%" : "auto", bottom: position === "above" ? "100%" : "auto", left: 0, right: 0, border: "1px solid", borderColor: theme.colors.boxborder[300], borderRadius: "md", bg: theme.colors.background[50], maxHeight: "150px", overflowY: "auto", zIndex: 10, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { id: listboxId, role: "listbox", "aria-label": label !== null && label !== void 0 ? label : placeholder, onKeyDown: handleListKeyDown, children: (0, jsx_runtime_1.jsx)(RenderOptions, { isOptionLoading: isOptionLoading, filteredOptions: filteredOptions, loadingText: loadingText, handleOptionClick: handleOptionClick, isProfile: isProfile, isColorOptions: isColorOptions, isOptionSelected: isOptionSelected, activeIndex: activeIndex, optionRefs: optionRefs }) }), (0, jsx_runtime_1.jsx)("hr", {}), isBottomIcon && ((0, jsx_runtime_1.jsxs)(react_2.Box, { position: "sticky", bottom: 0, background: theme.colors.background[50], display: "flex", alignItems: "center", pl: "1rem", cursor: "pointer", onClick: handleBottomClick, borderColor: theme.colors.boxborder[300], zIndex: 1, borderTop: `1px solid ${theme.colors.border[500]}`, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { children: BottomIcon ? BottomIcon : (0, jsx_runtime_1.jsx)(lucide_react_1.PlusIcon, { size: "1rem" }) }), (0, jsx_runtime_1.jsx)(react_2.Box, { fontSize: "0.875rem", color: BottomTextColor
273
+ } }), rightIcon && ((0, jsx_runtime_1.jsx)(react_2.InputRightElement, { pointerEvents: "none", children: rightIcon, style: { ...rightElementStyle } }))] }), isOpen && ((0, jsx_runtime_1.jsxs)(react_2.Box, { ref: dropdownRef, marginTop: "5px", position: "absolute", top: position === "below" ? "100%" : "auto", bottom: position === "above" ? "100%" : "auto", left: 0, right: 0, border: "1px solid", borderColor: theme.colors.boxborder[200], borderRadius: "md", bg: theme.colors.background[50], maxHeight: "150px", overflowY: "auto", zIndex: 10, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { id: listboxId, role: "listbox", "aria-label": label !== null && label !== void 0 ? label : placeholder, onKeyDown: handleListKeyDown, children: (0, jsx_runtime_1.jsx)(RenderOptions, { isOptionLoading: isOptionLoading, filteredOptions: filteredOptions, loadingText: loadingText, handleOptionClick: handleOptionClick, isProfile: isProfile, isColorOptions: isColorOptions, isOptionSelected: isOptionSelected, activeIndex: activeIndex, optionRefs: optionRefs }) }), (0, jsx_runtime_1.jsx)("hr", {}), isBottomIcon && ((0, jsx_runtime_1.jsxs)(react_2.Box, { position: "sticky", bottom: 0, background: theme.colors.background[50], display: "flex", alignItems: "center", pl: "1rem", cursor: "pointer", onClick: handleBottomClick, borderColor: theme.colors.boxborder[200], zIndex: 1, borderTop: `1px solid ${theme.colors.boxborder[200]}`, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { children: BottomIcon ? BottomIcon : (0, jsx_runtime_1.jsx)(lucide_react_1.PlusIcon, { size: "1rem" }) }), (0, jsx_runtime_1.jsx)(react_2.Box, { fontSize: "0.875rem", color: BottomTextColor
274
274
  ? BottomTextColor
275
275
  : theme.colors.accentText, padding: "8px 8px", children: BottomText || "Add New" })] }))] })), error && (0, jsx_runtime_1.jsx)(ErrorMessage_1.default, { errorMessage: errorMessage })] }) }) }));
276
276
  }
@@ -42,6 +42,8 @@ const react_1 = __importStar(require("react"));
42
42
  const react_2 = require("@chakra-ui/react");
43
43
  const lucide_react_1 = require("lucide-react");
44
44
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
45
+ const placeholderInk_1 = require("../../Theme/tokens/builders/placeholderInk");
46
+ const scrollbar_1 = require("../../Theme/tokens/builders/scrollbar");
45
47
  const fieldStyles_1 = require("../Common/fieldStyles");
46
48
  const FormLabel_1 = require("../Common/FormLabel");
47
49
  const ErrorMessage_1 = __importDefault(require("../Common/ErrorMessage"));
@@ -61,7 +63,7 @@ const OptionRow = react_1.default.memo(function OptionRow({ option, index, listb
61
63
  : theme.colors.text[700], bg: isActive ? theme.colors.primary.opacity[8] : "transparent", transition: "background 0.12s ease, color 0.12s ease", children: [isMulti ? ((0, jsx_runtime_1.jsx)(react_2.Checkbox, { isChecked: isSelected, isDisabled: option.isDisabled, pointerEvents: "none", tabIndex: -1 })) : null, renderOption ? ((0, jsx_runtime_1.jsx)(react_2.Box, { flex: 1, minW: 0, children: renderOption(option, { isSelected, isActive }) })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [option.icon ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-flex", flexShrink: 0, children: option.icon })) : null, (0, jsx_runtime_1.jsxs)(react_2.Box, { flex: 1, minW: 0, isTruncated: true, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", isTruncated: true, children: option.label }), option.description ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "block", fontSize: "0.75rem", fontWeight: 400, color: theme.colors.textMuted, isTruncated: true, children: option.description })) : null] })] }))] }));
62
64
  });
63
65
  function SelectV2(props) {
64
- var _a, _b, _c;
66
+ var _a, _b;
65
67
  const { options = [], placeholder = "Select Option", label, error = false, errorMessage, helperText, isDisabled = false, isRequired = false, size = "md", isSearchable = true, width, formControlStyle, onBlur, onFocus, renderOption, renderValue, maxMenuHeight = "16rem", defaultOpen = false, "data-testid": dataTestId, "aria-label": ariaLabel, } = props;
66
68
  const theme = (0, useCustomTheme_1.useCustomTheme)();
67
69
  const { isOpen, onOpen, onClose } = (0, react_2.useDisclosure)({ defaultIsOpen: defaultOpen });
@@ -231,15 +233,7 @@ function SelectV2(props) {
231
233
  const triggerId = `selectv2-trigger-${instanceId}`;
232
234
  const activeOption = filteredOptions[activeIndex];
233
235
  const activeDescendantId = activeOption ? optionDomId(listboxId, activeOption.id) : undefined;
234
- const listScrollStyles = (0, react_1.useMemo)(() => ({
235
- scrollbarWidth: "thin",
236
- scrollbarColor: `${theme.colors.gray[300]} transparent`,
237
- "&::-webkit-scrollbar": { width: "6px" },
238
- "&::-webkit-scrollbar-thumb": {
239
- background: theme.colors.gray[300],
240
- borderRadius: "base",
241
- },
242
- }), [theme]);
236
+ const listScrollStyles = (0, react_1.useMemo)(() => (0, scrollbar_1.scrollbarStyles)(theme.colors, "overlay"), [theme]);
243
237
  const defaultTriggerContent = () => {
244
238
  var _a;
245
239
  if (props.isMulti) {
@@ -254,7 +248,7 @@ function SelectV2(props) {
254
248
  return selectedOptions[0] ? selectedOptions[0].label : placeholder;
255
249
  };
256
250
  const triggerIcon = !props.isMulti && ((_b = selectedOptions[0]) === null || _b === void 0 ? void 0 : _b.icon) ? selectedOptions[0].icon : null;
257
- return ((0, jsx_runtime_1.jsxs)(react_2.FormControl, { isInvalid: error, isDisabled: isDisabled, style: formControlStyle, width: width, children: [label && ((0, jsx_runtime_1.jsx)(FormLabel_1.TextLabel, { label: label, id: triggerId, isRequired: isRequired })), (0, jsx_runtime_1.jsxs)(react_2.Popover, { isOpen: isOpen, onClose: () => resetAndClose(), placement: "bottom-start", matchWidth: true, autoFocus: false, returnFocusOnClose: false, gutter: 4, children: [(0, jsx_runtime_1.jsx)(react_2.PopoverAnchor, { children: (0, jsx_runtime_1.jsxs)(react_2.Box, { as: "button", type: "button", id: triggerId, ref: triggerRef, role: "combobox", "aria-haspopup": "listbox", "aria-expanded": isOpen, "aria-controls": listboxId, "aria-activedescendant": activeDescendantId, "aria-disabled": isDisabled, "aria-label": ariaLabel, disabled: isDisabled, onClick: handleOpen, onKeyDown: handleTriggerKeyDown, display: "flex", alignItems: "center", justifyContent: "space-between", width: "100%", h: s.h, px: s.px, fontSize: s.fontSize, fontWeight: 500, textAlign: "left", cursor: isDisabled ? "not-allowed" : "pointer", opacity: isDisabled ? 0.4 : 1, color: selectedOptions.length ? theme.colors.text[900] : theme.colors.placeholder[500], "data-testid": dataTestId, ...fieldStyles, children: [(0, jsx_runtime_1.jsxs)(react_2.Box, { as: "span", display: "inline-flex", alignItems: "center", gap: 1.5, minW: 0, isTruncated: true, children: [triggerIcon ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-flex", flexShrink: 0, children: triggerIcon })) : null, (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", isTruncated: true, fontStyle: selectedOptions.length ? "normal" : "italic", children: renderValue ? renderValue(selectedOptions) : defaultTriggerContent() })] }), (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-flex", flexShrink: 0, ml: 2, transition: "transform 0.2s ease", transform: isOpen ? "rotate(180deg)" : "rotate(0deg)", color: theme.colors.textMuted, children: (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { size: 16 }) })] }) }), (0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsxs)(react_2.PopoverContent, { width: "100%", borderRadius: "xl", border: `0.063rem solid ${theme.colors.boxborder[200]}`, boxShadow: (_c = theme.shadows) === null || _c === void 0 ? void 0 : _c.lg, overflow: "hidden", onKeyDown: handleListKeyDown, children: [isSearchable && ((0, jsx_runtime_1.jsx)(react_2.Box, { p: 2, borderBottom: `0.063rem solid ${theme.colors.boxborder[100]}`, children: (0, jsx_runtime_1.jsx)(react_2.Input, { ref: filterInputRef, size: "sm", placeholder: "Type to filter...", value: filterText, onChange: (event) => {
251
+ return ((0, jsx_runtime_1.jsxs)(react_2.FormControl, { isInvalid: error, isDisabled: isDisabled, style: formControlStyle, width: width, children: [label && ((0, jsx_runtime_1.jsx)(FormLabel_1.TextLabel, { label: label, id: triggerId, isRequired: isRequired })), (0, jsx_runtime_1.jsxs)(react_2.Popover, { isOpen: isOpen, onClose: () => resetAndClose(), placement: "bottom-start", matchWidth: true, autoFocus: false, returnFocusOnClose: false, gutter: 4, children: [(0, jsx_runtime_1.jsx)(react_2.PopoverAnchor, { children: (0, jsx_runtime_1.jsxs)(react_2.Box, { as: "button", type: "button", id: triggerId, ref: triggerRef, role: "combobox", "aria-haspopup": "listbox", "aria-expanded": isOpen, "aria-controls": listboxId, "aria-activedescendant": activeDescendantId, "aria-disabled": isDisabled, "aria-label": ariaLabel, disabled: isDisabled, onClick: handleOpen, onKeyDown: handleTriggerKeyDown, display: "flex", alignItems: "center", justifyContent: "space-between", width: "100%", h: s.h, px: s.px, fontSize: s.fontSize, fontWeight: 500, textAlign: "left", cursor: isDisabled ? "not-allowed" : "pointer", opacity: isDisabled ? 0.4 : 1, color: selectedOptions.length ? theme.colors.text[900] : (0, placeholderInk_1.placeholderInk)(theme.colors), "data-testid": dataTestId, ...fieldStyles, children: [(0, jsx_runtime_1.jsxs)(react_2.Box, { as: "span", display: "inline-flex", alignItems: "center", gap: 1.5, minW: 0, isTruncated: true, children: [triggerIcon ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-flex", flexShrink: 0, children: triggerIcon })) : null, (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", isTruncated: true, children: renderValue ? renderValue(selectedOptions) : defaultTriggerContent() })] }), (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", display: "inline-flex", flexShrink: 0, ml: 2, transition: "transform 0.2s ease", transform: isOpen ? "rotate(180deg)" : "rotate(0deg)", color: theme.colors.textMuted, children: (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { size: 16 }) })] }) }), (0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsxs)(react_2.PopoverContent, { width: "100%", borderRadius: "xl", boxShadow: theme.shadows.lg, overflow: "hidden", onKeyDown: handleListKeyDown, children: [isSearchable && ((0, jsx_runtime_1.jsx)(react_2.Box, { p: 2, borderBottom: `0.063rem solid ${theme.colors.boxborder[200]}`, children: (0, jsx_runtime_1.jsx)(react_2.Input, { ref: filterInputRef, size: "sm", placeholder: "Type to filter...", value: filterText, onChange: (event) => {
258
252
  setFilterText(event.target.value);
259
253
  setActiveIndex(0);
260
254
  }, "aria-activedescendant": activeDescendantId, "aria-label": "Filter options" }) })), (0, jsx_runtime_1.jsxs)(react_2.Box, { id: listboxId, ref: listRef, role: "listbox", "aria-multiselectable": props.isMulti || undefined, maxH: maxMenuHeight, overflowY: "auto", py: 1, sx: listScrollStyles, children: [filteredOptions.length === 0 && ((0, jsx_runtime_1.jsx)(react_2.Box, { px: 3, py: 2, fontSize: "0.8125rem", color: theme.colors.textMuted, children: "No Options" })), filteredOptions.map((option, index) => {
@@ -36,7 +36,7 @@ const CollapsedItem = ({ item, isActive, itemFontSize, onItemClick }) => {
36
36
  e.preventDefault();
37
37
  if (!item.disabled)
38
38
  onItemClick === null || onItemClick === void 0 ? void 0 : onItemClick(item);
39
- }, bg: isActive ? "whiteAlpha.300" : "transparent", transition: "background 0.12s", children: (0, jsx_runtime_1.jsxs)(react_2.Box, { position: "relative", display: "flex", alignItems: "center", children: [(0, jsx_runtime_1.jsx)(react_2.Icon, { as: item.icon, fontSize: "1rem", color: isActive ? activeAccent.icon : "whiteAlpha.600", _groupHover: isActive ? undefined : { color: "whiteAlpha.800" }, transition: "color 0.12s" }), badgeVal != null && ((0, jsx_runtime_1.jsx)(react_2.Box, { position: "absolute", top: "0", right: "0", w: "0.375rem", h: "0.375rem", borderRadius: "full", bg: theme.colors.red[400] }))] }) }) }), (0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsx)(react_2.PopoverContent, { borderRadius: "lg", bg: theme.colors.sidebar.elevated, boxShadow: "lg", minW: "10rem", maxW: "14rem", py: "0.125rem", ml: "-0.5rem", cursor: item.disabled ? "not-allowed" : "pointer", zIndex: 1500, color: "white", border: 'none', children: (0, jsx_runtime_1.jsx)(react_2.PopoverBody, { p: "0.75rem", children: (0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", gap: "0.5rem", justify: "space-between", children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", gap: "0.5rem", flex: "1", minW: 0, children: [(0, jsx_runtime_1.jsx)(react_2.Icon, { as: item.icon, fontSize: "1rem", flexShrink: 0 }), (0, jsx_runtime_1.jsx)(OverflowTooltipText_1.default, { placement: "right", maxWidth: "100%", fontSize: itemFontSize, fontWeight: "medium", as: "p", children: item.title })] }), badgeVal != null && ((0, jsx_runtime_1.jsx)(react_2.Badge, { colorScheme: colorScheme, fontSize: "0.625rem", variant: variant, borderRadius: radius, children: badgeVal }))] }) }) }) })] }));
39
+ }, bg: isActive ? "whiteAlpha.300" : "transparent", transition: "background 0.12s", children: (0, jsx_runtime_1.jsxs)(react_2.Box, { position: "relative", display: "flex", alignItems: "center", children: [(0, jsx_runtime_1.jsx)(react_2.Icon, { as: item.icon, fontSize: "1rem", color: isActive ? activeAccent.icon : "whiteAlpha.600", _groupHover: isActive ? undefined : { color: "whiteAlpha.800" }, transition: "color 0.12s" }), badgeVal != null && ((0, jsx_runtime_1.jsx)(react_2.Box, { position: "absolute", top: "0", right: "0", w: "0.375rem", h: "0.375rem", borderRadius: "full", bg: theme.colors.red[400] }))] }) }) }), (0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsx)(react_2.PopoverContent, { borderRadius: "lg", bg: theme.colors.sidebar.elevated, boxShadow: "lg", minW: "10rem", maxW: "14rem", py: "0.125rem", ml: "-0.5rem", cursor: item.disabled ? "not-allowed" : "pointer", zIndex: 1500, color: theme.colors.white, border: 'none', children: (0, jsx_runtime_1.jsx)(react_2.PopoverBody, { p: "0.75rem", children: (0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", gap: "0.5rem", justify: "space-between", children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", gap: "0.5rem", flex: "1", minW: 0, children: [(0, jsx_runtime_1.jsx)(react_2.Icon, { as: item.icon, fontSize: "1rem", flexShrink: 0 }), (0, jsx_runtime_1.jsx)(OverflowTooltipText_1.default, { placement: "right", maxWidth: "100%", fontSize: itemFontSize, fontWeight: "medium", as: "p", children: item.title })] }), badgeVal != null && ((0, jsx_runtime_1.jsx)(react_2.Badge, { colorScheme: colorScheme, fontSize: "0.625rem", variant: variant, borderRadius: radius, children: badgeVal }))] }) }) }) })] }));
40
40
  };
41
41
  const ExpandedItem = ({ item, isActive, itemFontSize, onItemClick }) => {
42
42
  var _a;
@@ -6,16 +6,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const jsx_runtime_1 = require("react/jsx-runtime");
7
7
  const react_1 = require("@chakra-ui/react");
8
8
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
9
+ const scrollbar_1 = require("../../Theme/tokens/builders/scrollbar");
9
10
  const StageItem_1 = __importDefault(require("./StageItem"));
10
11
  const StepperStage_1 = __importDefault(require("./StepperStage"));
11
- const scrollSxFor = (thumb) => ({
12
- "&::-webkit-scrollbar": { height: "4px" },
13
- "&::-webkit-scrollbar-thumb": {
14
- borderRadius: "full",
15
- backgroundColor: thumb,
16
- },
17
- "&::-webkit-scrollbar-track": { background: "transparent" },
18
- });
19
12
  // Gap between items per variant (chevron interlocks via negative margin).
20
13
  const gapFor = {
21
14
  chevron: "0",
@@ -40,7 +33,7 @@ const StageProgress = ({ stages, variant = "chevron", value, onChange, size = "m
40
33
  const total = stages.length;
41
34
  return ((0, jsx_runtime_1.jsx)(react_1.Box, { display: "flex", alignItems: variant === "stepper" ? "flex-start" : "stretch", gap: gapFor[variant], overflowX: "hidden", p: "0.1rem", sx: {
42
35
  "&:hover": { overflowX: "auto" },
43
- ...scrollSxFor(theme.colors.gray[300]),
36
+ ...(0, scrollbar_1.scrollbarStyles)(theme.colors, "overlay"),
44
37
  }, children: stages.map((stage, index) => {
45
38
  const state = stateFor(index);
46
39
  if (variant === "stepper") {
@@ -1,2 +1,2 @@
1
1
  import { TableProps } from "./TableProps";
2
- export default function Table({ data, columns, onSelection, isLoading, isCheckbox, headerBgColor, freezedBgColor, freezedTextColor, tableBorderColor, noBorders, isPagination, onRowClick, selections, isActionFreeze, preferences, paginationMode, infiniteScroll, hasMore, isLoadingMore, groupLoadMore, loadMoreText, loadMorePosition, loadMoreChunkSize, noOfRowsPerPage, totalRecords, onPagination, isTableSettings, headerActions, onGlobalSearch, onNoOfRowsPerPageChange, paginationSelectOptions, tableMaxHeight, minVisibleRows, maxVisibleRows, autoFitViewport, tableSettings, filterSidebar, loadingSkeletonRows, defaultVisibleColumns, density, stripe, groupColors, onAddItem, emptyState, onRefresh, }: TableProps): import("react/jsx-runtime").JSX.Element;
2
+ export default function Table({ data, columns, onSelection, isLoading, isCheckbox, headerBgColor, freezedBgColor, freezedTextColor, tableBorderColor, noBorders, isPagination, onRowClick, selections, isActionFreeze, preferences, paginationMode, infiniteScroll, hasMore, isLoadingMore, groupLoadMore, loadMoreText, loadMorePosition, loadMoreChunkSize, noOfRowsPerPage, totalRecords, onPagination, isTableSettings, headerActions, onGlobalSearch, onNoOfRowsPerPageChange, paginationSelectOptions, tableMaxHeight, minVisibleRows, maxVisibleRows, autoFitViewport, tableSettings, filterSidebar, loadingSkeletonRows, defaultVisibleColumns, density, variant, stripe, groupColors, onAddItem, emptyState, onRefresh, }: TableProps): import("react/jsx-runtime").JSX.Element;
@@ -10,10 +10,14 @@ const react_2 = require("@chakra-ui/react");
10
10
  const react_3 = require("@chakra-ui/react");
11
11
  const framer_motion_1 = require("framer-motion");
12
12
  const LeftFilterPane_1 = __importDefault(require("./filters/LeftFilterPane"));
13
+ const variants_1 = require("./variants");
14
+ const TableVariantContext_1 = require("./variants/TableVariantContext");
15
+ const accentText_1 = require("../../Theme/tokens/builders/accentText");
13
16
  const Pagination_1 = __importDefault(require("./components/Pagination"));
14
17
  const TableHeader_1 = __importDefault(require("./components/TableHeader"));
15
18
  const TableBody_1 = __importDefault(require("./components/TableBody"));
16
19
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
20
+ const scrollbar_1 = require("../../Theme/tokens/builders/scrollbar");
17
21
  const useTable_1 = __importDefault(require("./hooks/useTable"));
18
22
  const table_1 = require("../../Utils/table");
19
23
  const usePreferences_1 = require("../../Hooks/usePreferences");
@@ -33,11 +37,12 @@ function Table({ data, columns, onSelection, isLoading, isCheckbox = false, head
33
37
  name: "",
34
38
  page: "",
35
39
  orgId: "",
36
- }, 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", stripe, groupColors, onAddItem, emptyState, onRefresh,
40
+ }, 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, groupColors, onAddItem, emptyState, onRefresh,
37
41
  // onColumnFilter
38
42
  }) {
39
43
  var _a, _b, _c, _d;
40
44
  const theme = (0, useCustomTheme_1.useCustomTheme)();
45
+ const variantTokens = (0, react_1.useMemo)(() => variants_1.TABLE_VARIANTS[variant](theme.colors, (0, accentText_1.isDarkCanvas)(theme.colors.backgroundColor.main)), [variant, theme.colors]);
41
46
  const [columnsSearch, setColumnsSearch] = (0, react_1.useState)({});
42
47
  const tableContainerRef = (0, react_1.useRef)(null);
43
48
  const { isOpen: isFilterModalOpen, onOpen: onFilterModalOpen, onClose: onFilterModalClose } = (0, react_2.useDisclosure)();
@@ -356,12 +361,14 @@ function Table({ data, columns, onSelection, isLoading, isCheckbox = false, head
356
361
  return acc + (Array.isArray(items) ? items.length : 0);
357
362
  }, 0);
358
363
  }, [filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.selected]);
359
- return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("style", { children: `
364
+ return ((0, jsx_runtime_1.jsxs)(TableVariantContext_1.TableVariantProvider, { value: variantTokens, children: [(0, jsx_runtime_1.jsx)("style", { children: `
360
365
  @keyframes pixelize-table-spin {
361
366
  from { transform: rotate(0deg); }
362
367
  to { transform: rotate(360deg); }
363
368
  }
364
- ` }), (0, jsx_runtime_1.jsxs)(react_2.Box, { bg: theme.colors.background[50], border: `0.063rem solid ${theme.colors.border[500]}`, borderRadius: "base", 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.background[50], 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: (_c = filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.sidebarOptions) !== null && _c !== void 0 ? _c : [], 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, { 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: "1px solid", borderColor: theme.colors.border[500], style: { height: controlsHeight + tableMaxH }, minHeight: (filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.isFilterSidebar) ? "32rem" : "auto", children: (0, jsx_runtime_1.jsx)(LeftFilterPane_1.default, { height: controlsHeight + tableMaxH, 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: 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: controlsHeight, gap: 3, flexWrap: "nowrap", bg: theme.colors.background[50], borderBottom: `0.063rem solid ${theme.colors.border[500]}`, children: [filterSidebar && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(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_3.Icon, { as: lucide_react_1.Filter, transform: "scaleX(-1)", cursor: "pointer", boxSize: 4, color: sidebarActiveCount > 0 ? theme.colors.accentText : theme.colors.text[500], onClick: filterMode === "modal" ? onFilterModalOpen : filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.filterSidebarToggle, _hover: {
369
+ ` }), (0, jsx_runtime_1.jsxs)(react_2.Box, { bg: theme.colors.background[50], border: `0.063rem solid ${theme.colors.boxborder[200]}`, borderRadius: "base",
370
+ // Square children poked past the rounded border, leaving a gap at each corner.
371
+ 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.background[50], 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: (_c = filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.sidebarOptions) !== null && _c !== void 0 ? _c : [], 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: controlsHeight + tableMaxH }, minHeight: (filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.isFilterSidebar) ? "32rem" : "auto", children: (0, jsx_runtime_1.jsx)(LeftFilterPane_1.default, { height: controlsHeight + tableMaxH, 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: 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: controlsHeight, gap: 3, flexWrap: "nowrap", bg: theme.colors.background[50], borderBottom: `0.063rem solid ${theme.colors.boxborder[200]}`, children: [filterSidebar && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(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_3.Icon, { as: lucide_react_1.Filter, transform: "scaleX(-1)", cursor: "pointer", boxSize: 4, color: sidebarActiveCount > 0 ? theme.colors.accentText : theme.colors.text[500], onClick: filterMode === "modal" ? onFilterModalOpen : filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.filterSidebarToggle, _hover: {
365
372
  color: theme.colors.accentText,
366
373
  } }), sidebarActiveCount > 0 && ((0, jsx_runtime_1.jsx)(react_2.Box, { position: "absolute", top: "-6px", right: "-10px", bg: theme.colors.primary[500], color: theme.colors.onPrimary, borderRadius: "full", p: "1px", cursor: "pointer", onClick: (e) => {
367
374
  var _a;
@@ -392,29 +399,15 @@ function Table({ data, columns, onSelection, isLoading, isCheckbox = false, head
392
399
  }, children: (0, jsx_runtime_1.jsx)(lucide_react_1.RefreshCw, { size: 16 }) }) })] })), headerActions && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(Divider_1.default, {}), (0, jsx_runtime_1.jsx)(HeaderActions_1.default, { actions: headerActions, selections: selection })] })), (0, jsx_runtime_1.jsx)(ActiveFilters_1.default, { columns: columnsList, columnsSearch: columnsSearch, setColumnsSearch: setColumnsSearch }), (0, jsx_runtime_1.jsxs)(react_2.Box, { ml: "auto", display: "flex", alignItems: "center", gap: 2, children: [groupLoadMoreActive && loadMorePosition === "top" && (groupLoadMoreCaption || canGroupLoadMore) && ((0, jsx_runtime_1.jsxs)(react_2.Box, { display: "flex", alignItems: "center", gap: 2, flex: "0 0 auto", children: [groupLoadMoreCaption && ((0, jsx_runtime_1.jsx)(react_2.Box, { fontSize: "0.75rem", color: theme.colors.text[500], whiteSpace: "nowrap", 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 }))] })), (isPagination || isServerPagination) && !isGrouped && !canInfinite && !isCompactHeader && ((0, jsx_runtime_1.jsx)("div", { children: (0, jsx_runtime_1.jsx)(Pagination_1.default, { columns: columns, currentPage: currentPage, setCurrentPage: setCurrentPage, rowsPerPage: rowsPerPage, pages: pages, paginationText: tablePaginationText, handlePageSizeChange: handlePageSizeChange, dataLength: tableData.length, isServerPagination: isServerPagination, paginationSelectOptions: paginationSelectOptions, isVisiblity: true }) })), (isPagination || isServerPagination) && !isGrouped && !canInfinite && isCompactHeader && tableData.length > 0 && ((0, jsx_runtime_1.jsxs)(react_2.Popover, { isOpen: isPaginationPopoverOpen, onClose: () => setIsPaginationPopoverOpen(false), placement: "bottom-end", children: [(0, jsx_runtime_1.jsx)(react_2.PopoverTrigger, { children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": "Pagination", size: "sm", variant: "ghost", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.EllipsisVertical, { size: 18 }), color: theme.colors.text[500], _hover: {
393
400
  color: theme.colors.accentText,
394
401
  }, onClick: () => setIsPaginationPopoverOpen((open) => !open) }) }), (0, jsx_runtime_1.jsx)(react_2.Portal, { children: (0, jsx_runtime_1.jsx)(react_2.PopoverContent, { maxW: "22rem", p: 2, zIndex: 1600, bg: theme.colors.background[50], boxShadow: "lg", children: (0, jsx_runtime_1.jsx)(react_2.PopoverBody, { p: 0, children: (0, jsx_runtime_1.jsx)(Pagination_1.default, { columns: columns, currentPage: currentPage, setCurrentPage: setCurrentPage, rowsPerPage: rowsPerPage, pages: pages, paginationText: tablePaginationText, handlePageSizeChange: handlePageSizeChange, dataLength: tableData.length, isServerPagination: isServerPagination, paginationSelectOptions: paginationSelectOptions, isVisiblity: true }) }) }) })] }))] })] }), (0, jsx_runtime_1.jsxs)(react_2.TableContainer, { ref: tableContainerRef, position: "relative", h: isTableLoading ? tableMaxH : undefined, maxH: !isTableLoading ? tableMaxH : undefined, pb: isTableLoading ? 0 : compactScrollbarPadding, overflowY: isCompactRows ? "hidden" : "auto", overflowX: "auto", sx: {
402
+ ...(0, scrollbar_1.scrollbarStyles)(theme.colors),
403
+ // Compact rows hide the horizontal bar until hover to keep the row height.
395
404
  '&::-webkit-scrollbar': {
396
- width: '6px',
397
- height: isCompactRows ? '0px' : '6px',
398
- },
399
- '&:hover::-webkit-scrollbar': {
400
- height: '6px',
401
- },
402
- '&::-webkit-scrollbar-track': {
403
- background: theme.colors.gray[100],
404
- borderRadius: 'base',
405
- },
406
- '&::-webkit-scrollbar-thumb': {
407
- background: theme.colors.gray[400],
408
- borderRadius: 'base',
409
- },
410
- '&::-webkit-scrollbar-thumb:hover': {
411
- background: theme.colors.gray[500],
405
+ width: scrollbar_1.SCROLLBAR_WIDTH,
406
+ height: isCompactRows ? '0px' : scrollbar_1.SCROLLBAR_WIDTH,
412
407
  },
408
+ '&:hover::-webkit-scrollbar': { height: scrollbar_1.SCROLLBAR_WIDTH },
413
409
  scrollbarWidth: isCompactRows ? 'none' : 'thin',
414
- '&:hover': {
415
- scrollbarWidth: 'thin',
416
- },
417
- scrollbarColor: `${theme.colors.gray[400]} ${theme.colors.gray[100]}`,
410
+ '&:hover': { scrollbarWidth: 'thin' },
418
411
  }, children: [(0, jsx_runtime_1.jsxs)(react_3.Table, { variant: "simple", size: "sm", minW: "100%", role: "grid", "aria-rowcount": isGrouped ? undefined : _filteredData.length + 1, className: "table_wrapper", sx: {
419
412
  width: "100%",
420
413
  // `separate` (not `collapse`) so sticky header cells paint an opaque
@@ -432,5 +425,5 @@ function Table({ data, columns, onSelection, isLoading, isCheckbox = false, head
432
425
  backgroundColor: "transparent",
433
426
  zIndex: 999,
434
427
  },
435
- }, children: [(0, jsx_runtime_1.jsx)(react_3.Thead, { position: "sticky", top: 0, zIndex: 4, bg: theme.colors.table.hover[200], children: (0, jsx_runtime_1.jsx)(TableHeader_1.default, { columns: columnsList, isCheckbox: isCheckbox, headerBgColor: headerBgColor !== null && headerBgColor !== void 0 ? headerBgColor : theme.colors.backgroundColor.muted, freezedBgColor: freezedBgColor !== null && freezedBgColor !== void 0 ? freezedBgColor : theme.colors.backgroundColor.secondary, freezedTextColor: freezedTextColor !== null && freezedTextColor !== void 0 ? freezedTextColor : theme.colors.text[500], handleSort: handleSort, headerRefs: headerRefs, columnWidths: columnWidths, columnsSort: columnsSort, noBorders: noBorders, handleCheckbox: handleCheckbox, isLoading: isTableLoading, checked: headerChecked, isContent: isContent, isLink: isLink, 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, endRow: endRow, scrollContainerRef: tableContainerRef, isCheckbox: isCheckbox, columnWidths: columnWidths, 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, 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.border[500]}`, 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 }))] }))] })] })] })] }));
428
+ }, 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, headerBgColor: headerBgColor !== null && headerBgColor !== void 0 ? headerBgColor : theme.colors.backgroundColor.muted, freezedBgColor: freezedBgColor !== null && freezedBgColor !== void 0 ? freezedBgColor : theme.colors.backgroundColor.secondary, freezedTextColor: freezedTextColor !== null && freezedTextColor !== void 0 ? freezedTextColor : theme.colors.text[500], handleSort: handleSort, headerRefs: headerRefs, columnWidths: columnWidths, columnsSort: columnsSort, noBorders: noBorders, handleCheckbox: handleCheckbox, isLoading: isTableLoading, checked: headerChecked, isContent: isContent, isLink: isLink, 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, endRow: endRow, scrollContainerRef: tableContainerRef, isCheckbox: isCheckbox, columnWidths: columnWidths, 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, 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 }))] }))] })] })] })] }));
436
429
  }
@@ -1,7 +1,9 @@
1
1
  import { Dispatch, MutableRefObject, ReactNode, SetStateAction } from "react";
2
2
  import { FilterSidebarProps } from "../FilterSidebar/FilterSidebar";
3
3
  import type { FilterValues } from "./filterTypes";
4
+ import type { TableVariant } from "./variants/tokens";
4
5
  export type { FilterValues } from "./filterTypes";
6
+ export type { TableVariant, TableVariantTokens } from "./variants/tokens";
5
7
  /** Dynamic row shape (cells, styles, callbacks). */
6
8
  export type DataObject = Record<string, unknown>;
7
9
  export type TableDensity = "compact" | "normal" | "comfortable";
@@ -16,6 +18,8 @@ export type TableProps = {
16
18
  groupColors?: Record<string | number, string>;
17
19
  onAddItem?: (groupValue: string | number) => void;
18
20
  density?: TableDensity;
21
+ /** Visual preset. Defaults to `classic` — the table exactly as it shipped. */
22
+ variant?: TableVariant;
19
23
  stripe?: boolean;
20
24
  emptyState?: TableEmptyState | ReactNode;
21
25
  handleExportChange?: (value: string) => void | undefined;
@@ -72,11 +72,11 @@ const TableActions = react_1.default.memo(({ row }) => {
72
72
  // ✅ if row itself is missing, render nothing
73
73
  if (!row)
74
74
  return null;
75
- return ((0, jsx_runtime_1.jsx)(react_2.Popover, { placement: "bottom-start", isOpen: isOpen, onClose: handleClose, closeOnBlur: false, children: (0, jsx_runtime_1.jsxs)("div", { ref: ref, children: [(0, jsx_runtime_1.jsx)(react_2.PopoverTrigger, { children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": "Actions", 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.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.background[50], 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.border[500]}`, borderRadius: 0, gap: 2, onClick: () => {
75
+ return ((0, jsx_runtime_1.jsx)(react_2.Popover, { placement: "bottom-start", isOpen: isOpen, onClose: handleClose, closeOnBlur: false, children: (0, jsx_runtime_1.jsxs)("div", { ref: ref, children: [(0, jsx_runtime_1.jsx)(react_2.PopoverTrigger, { children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": "Actions", 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.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.background[50], 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: () => {
76
76
  var _a;
77
77
  (_a = row.onLink) === null || _a === void 0 ? void 0 : _a.call(row, row);
78
78
  handleClose();
79
- }, 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.border[500]}`, borderRadius: 0, onClick: () => {
79
+ }, 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: () => {
80
80
  var _a;
81
81
  (_a = row.onEdit) === null || _a === void 0 ? void 0 : _a.call(row, row);
82
82
  handleClose();
@@ -44,10 +44,11 @@ const useCustomTheme_1 = require("../../../Theme/useCustomTheme");
44
44
  const accentText_1 = require("../../../Theme/tokens/builders/accentText");
45
45
  const TableLoading_1 = require("./TableLoading");
46
46
  const TableActions_1 = __importDefault(require("./TableActions"));
47
- const tableRowHoverStyle_1 = require("./tableRowHoverStyle");
48
47
  const lucide_react_1 = require("lucide-react");
49
48
  const Checkbox_1 = __importDefault(require("../../Checkbox/Checkbox"));
50
49
  const TableGroupRow_1 = __importDefault(require("./TableGroupRow"));
50
+ const TableVariantContext_1 = require("../variants/TableVariantContext");
51
+ const pillInk_1 = require("../variants/pillInk");
51
52
  // Density → row height (px) + cell vertical padding. The padding (not just the
52
53
  // min-height) is what drives perceived row size, so compact tightens both.
53
54
  const DENSITY_CONFIG = {
@@ -63,6 +64,9 @@ const getRowContent = (row) => typeof row.content === "function"
63
64
  // the label is centered in whichever of white/black clears AA against that fill —
64
65
  // the fill can be a consumer hex we can't know in advance is light or dark.
65
66
  const StatusCell = ({ value, onSolid }) => ((0, jsx_runtime_1.jsx)(react_1.Box, { display: "flex", alignItems: "center", justifyContent: "center", w: "100%", h: "100%", px: "0.5rem", fontSize: "0.75rem", fontWeight: 600, color: onSolid, textAlign: "center", whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis", children: value }));
67
+ // Studio's status cell: a contained chip on the tone's soft rung. Same tone pair
68
+ // the group header already uses, so an override hex behaves identically in both.
69
+ const StatusPill = ({ value, soft, ink, radius, }) => ((0, jsx_runtime_1.jsx)(react_1.Box, { display: "inline-flex", alignItems: "center", maxW: "100%", px: "0.5rem", py: "0.125rem", borderRadius: radius, bg: soft, color: ink, fontSize: "0.75rem", fontWeight: 600, whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis", children: value }));
66
70
  const EMPTY_HOVER = {};
67
71
  const TableRow = react_2.default.memo(({ row, rowIndex, isChecked, isExpanded, isContent, isLink, isCheckbox, isLoading, isActionFreeze, columns, leftOffsets, noBorders, freezedBgColor, freezedTextColor, theme, borderStyle, selectedBg, selectedFrozenBg, hoverStyle, rowHeight, cellPy, palette, accentColor, ariaRowIndex, handleCheckbox, onRowClick, toggleRowExpansion, onMeasure, }) => {
68
72
  // Measured-height virtualization: report this row's real height (main + any
@@ -101,15 +105,38 @@ const TableRow = react_2.default.memo(({ row, rowIndex, isChecked, isExpanded, i
101
105
  onRowClick(row, { label: header.label, id: header.id });
102
106
  }
103
107
  }, [row, onRowClick]);
108
+ const variant = (0, TableVariantContext_1.useTableVariant)();
104
109
  const firstDataColIndex = columns.findIndex((c) => !c.isHidden);
105
110
  const accentSx = accentColor ? `inset 3px 0 0 ${accentColor}` : undefined;
111
+ // A selected row earns the leading bar only where a group accent isn't already
112
+ // claiming that edge — the group's identity is the scarcer signal.
113
+ const leadSx = variant.row.showSelectedBar && isChecked && !accentColor
114
+ ? `inset 3px 0 0 ${variant.row.selectedBarColor}`
115
+ : accentSx;
116
+ const restsOnIndex = variant.slot.rest === "index";
117
+ const rowSx = {
118
+ ...(variant.row.hoverScope === "row"
119
+ ? { "&:hover > td[data-hoverable='true']": { backgroundColor: variant.row.hoverBg } }
120
+ : {}),
121
+ // opacity, not display: a hidden-by-display checkbox leaves the a11y tree and
122
+ // cannot be tabbed to, so `:focus-within` would never fire to bring it back.
123
+ ...(restsOnIndex
124
+ ? {
125
+ "& .table-slot-box": { opacity: isChecked ? 1 : 0 },
126
+ "& .table-slot-index": { opacity: isChecked ? 0 : 1 },
127
+ "&:hover .table-slot-box, &:focus-within .table-slot-box": { opacity: 1 },
128
+ "&:hover .table-slot-index, &:focus-within .table-slot-index": { opacity: 0 },
129
+ }
130
+ : {}),
131
+ };
106
132
  // Pinned/frozen columns get a tinted, opaque background so the frozen pane reads
107
133
  // as one piece with its header (and so sticky cells cover scrolling content).
108
134
  const frozenCellBg = freezedBgColor !== null && freezedBgColor !== void 0 ? freezedBgColor : theme.colors.table.hover[100];
109
135
  const cellStyles = row.cellStyle;
110
136
  const rowStyle = row.rowStyle;
137
+ const chromeHoverable = rowStyle ? "false" : "true";
111
138
  const rowContent = getRowContent(row);
112
- return ((0, jsx_runtime_1.jsxs)(react_2.default.Fragment, { children: [(0, jsx_runtime_1.jsxs)(react_1.Tr, { ref: mainRowRef, "aria-rowindex": ariaRowIndex, opacity: isLoading ? 0.4 : 1, pointerEvents: isLoading ? "none" : "auto", transition: "opacity 0.2s", children: [isContent && ((0, jsx_runtime_1.jsx)(react_1.Td, { w: "6", p: 0, fontSize: 14, background: isChecked ? selectedFrozenBg : frozenCellBg, color: freezedTextColor, position: "sticky", borderBottom: borderStyle, boxShadow: accentSx, boxSizing: "border-box", left: "0px", zIndex: 1, className: "columns sticky-columns", children: !!(row === null || row === void 0 ? void 0 : row.content) && ((0, jsx_runtime_1.jsx)(react_1.IconButton, { "aria-label": isExpanded ? "Collapse row" : "Expand row", color: theme.colors.textMuted, icon: isExpanded ? ((0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { fontSize: 16 })) : ((0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRight, { fontSize: 16 })), _hover: { transform: "scale(1.1)" }, size: "sm", onClick: () => toggleRowExpansion(rowIndex), variant: "ghost" })) })), isCheckbox && ((0, jsx_runtime_1.jsx)(react_1.Td, { w: "6", fontSize: 14, fontWeight: 600, color: theme.colors.background[50], textTransform: "capitalize", background: isChecked ? selectedFrozenBg : frozenCellBg, position: "sticky", borderBottom: borderStyle, boxShadow: !isContent ? accentSx : undefined, boxSizing: "border-box", left: "0px", zIndex: 1, className: "columns sticky-columns", children: (0, jsx_runtime_1.jsx)(Checkbox_1.default, { "aria-label": `Select row ${rowIndex + 1}`, onChange: () => handleCheckbox(getRowId(row)), isChecked: isChecked }) })), columns.map((header, headerIndex) => {
139
+ return ((0, jsx_runtime_1.jsxs)(react_2.default.Fragment, { children: [(0, jsx_runtime_1.jsxs)(react_1.Tr, { ref: mainRowRef, "aria-rowindex": ariaRowIndex, opacity: isLoading ? 0.4 : 1, pointerEvents: isLoading ? "none" : "auto", transition: "opacity 0.2s", sx: rowSx, children: [isContent && ((0, jsx_runtime_1.jsx)(react_1.Td, { w: "6", p: 0, fontSize: 14, background: isChecked ? selectedFrozenBg : frozenCellBg, color: freezedTextColor, position: "sticky", borderBottom: borderStyle, boxShadow: leadSx, boxSizing: "border-box", "data-hoverable": chromeHoverable, left: "0px", zIndex: 1, className: "columns sticky-columns", children: !!(row === null || row === void 0 ? void 0 : row.content) && ((0, jsx_runtime_1.jsx)(react_1.IconButton, { "aria-label": isExpanded ? "Collapse row" : "Expand row", color: theme.colors.textMuted, icon: isExpanded ? ((0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { fontSize: 16 })) : ((0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRight, { fontSize: 16 })), _hover: { transform: "scale(1.1)" }, size: "sm", onClick: () => toggleRowExpansion(rowIndex), variant: "ghost" })) })), isCheckbox && ((0, jsx_runtime_1.jsx)(react_1.Td, { 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: theme.colors.background[50], textTransform: "capitalize", background: isChecked ? selectedFrozenBg : frozenCellBg, position: "sticky", borderBottom: borderStyle, boxShadow: !isContent ? leadSx : undefined, "data-hoverable": chromeHoverable, boxSizing: "border-box", left: "0px", zIndex: 1, className: "columns sticky-columns", children: (0, jsx_runtime_1.jsxs)(react_1.Box, { display: restsOnIndex ? "grid" : undefined, placeItems: "center", children: [restsOnIndex && ((0, jsx_runtime_1.jsx)(react_1.Box, { as: "span", className: "table-slot-index", gridArea: "1 / 1", color: variant.slot.indexInk, fontSize: "0.6875rem", fontWeight: 500, transition: "opacity 0.15s ease-in-out", sx: { fontVariantNumeric: "tabular-nums" }, children: rowIndex + 1 })), (0, jsx_runtime_1.jsx)(react_1.Box, { as: "span", className: restsOnIndex ? "table-slot-box" : undefined, gridArea: restsOnIndex ? "1 / 1" : undefined, display: "flex", alignItems: "center", justifyContent: "center", transition: "opacity 0.15s ease-in-out", children: (0, jsx_runtime_1.jsx)(Checkbox_1.default, { "aria-label": `Select row ${rowIndex + 1}`, onChange: () => handleCheckbox(getRowId(row)), isChecked: isChecked }) })] }) })), columns.map((header, headerIndex) => {
113
140
  var _a, _b, _c;
114
141
  if (header.isHidden)
115
142
  return null;
@@ -124,13 +151,15 @@ const TableRow = react_2.default.memo(({ row, rowIndex, isChecked, isExpanded, i
124
151
  const statusOnSolid = statusColor
125
152
  ? (_c = statusColor.onSolid) !== null && _c !== void 0 ? _c : (0, accentText_1.onFilled)(statusColor.solid, theme.colors.white, theme.colors.black)
126
153
  : undefined;
127
- return ((0, jsx_runtime_1.jsx)(react_1.Td, { maxWidth: 500, minWidth: 120, height: `${rowHeight}px`, py: isStatus && statusColor ? 0 : cellPy, px: isStatus && statusColor ? 0 : undefined, onClick: () => handleCellClick(header), fontSize: 14, fontWeight: 400, position: isFrozen ? "sticky" : undefined, left: isFrozen ? leftOffsets[headerIndex] : undefined, zIndex: isFrozen ? 1 : 0, background: isStatus && statusColor ? statusColor.solid : isChecked ? (isFrozen ? selectedFrozenBg : selectedBg) : isFrozen ? frozenCellBg : theme.colors.background[50], textOverflow: "ellipsis", boxShadow: isFirstDataCell ? accentSx : undefined, borderBottom: noBorders
154
+ const isBleed = variant.cells.statusFill === "bleed" && !!statusColor;
155
+ const canHover = !isBleed && !((cellStyles === null || cellStyles === void 0 ? void 0 : cellStyles[header.id]) || rowStyle);
156
+ return ((0, jsx_runtime_1.jsx)(react_1.Td, { maxWidth: 500, minWidth: 120, height: `${rowHeight}px`, py: isBleed ? 0 : cellPy, px: isBleed ? 0 : undefined, onClick: () => handleCellClick(header), fontSize: 14, fontWeight: 400, position: isFrozen ? "sticky" : undefined, left: isFrozen ? leftOffsets[headerIndex] : undefined, zIndex: isFrozen ? 1 : 0, background: isBleed ? statusColor.solid : isChecked ? (isFrozen ? selectedFrozenBg : selectedBg) : isFrozen ? frozenCellBg : theme.colors.background[50], textOverflow: "ellipsis", boxShadow: isFirstDataCell ? leadSx : undefined, borderBottom: noBorders
128
157
  ? "none"
129
- : `0.063rem solid ${theme.colors.boxborder[isFrozen || isChecked ? 300 : 200]}`, className: `columns ${isFrozen ? "sticky-columns" : "scrollable-columns"}`, boxSizing: "border-box", color: isStatus && statusColor ? statusOnSolid : theme.colors.text[500], _hover: isStatus && statusColor
158
+ : `0.063rem solid ${isFrozen || isChecked
159
+ ? variant.row.frozenRuleColor
160
+ : variant.row.ruleColor}`, className: `columns ${isFrozen ? "sticky-columns" : "scrollable-columns"}`, boxSizing: "border-box", color: isBleed ? statusOnSolid : variant.cells.ink, "data-hoverable": canHover ? "true" : "false", _hover: variant.row.hoverScope === "row" || !canHover
130
161
  ? EMPTY_HOVER
131
- : (cellStyles === null || cellStyles === void 0 ? void 0 : cellStyles[header.id]) || rowStyle
132
- ? EMPTY_HOVER
133
- : hoverStyle, children: isStatus && statusColor ? ((0, jsx_runtime_1.jsx)(StatusCell, { value: (0, table_1.normalizeTableCellValue)(row[header.id]), onSolid: statusOnSolid })) : ((0, jsx_runtime_1.jsx)(react_1.Box, { display: "block", overflow: "hidden", whiteSpace: "normal", overflowWrap: "break-word", children: (0, table_1.normalizeTableCellValue)(header.node ? header.node(row) : row[header.id]) })) }, headerIndex + 1));
162
+ : hoverStyle, children: isBleed ? ((0, jsx_runtime_1.jsx)(StatusCell, { value: (0, table_1.normalizeTableCellValue)(row[header.id]), onSolid: statusOnSolid })) : isStatus && statusColor ? ((0, jsx_runtime_1.jsx)(StatusPill, { value: (0, table_1.normalizeTableCellValue)(row[header.id]), soft: statusColor.soft, ink: (0, pillInk_1.resolvePillInk)(statusColor.text, statusColor.soft, theme.colors.background[50]), radius: variant.cells.pillRadius })) : ((0, jsx_runtime_1.jsx)(react_1.Box, { display: "block", overflow: "hidden", whiteSpace: "normal", overflowWrap: "break-word", children: (0, table_1.normalizeTableCellValue)(header.node ? header.node(row) : row[header.id]) })) }, headerIndex + 1));
134
163
  }), isLink && ((0, jsx_runtime_1.jsx)(react_1.Td, { w: 2, p: 0, fontSize: 14, background: isChecked ? (isActionFreeze ? selectedFrozenBg : selectedBg) : isActionFreeze ? frozenCellBg : theme.colors.background[50], color: freezedTextColor, position: isActionFreeze ? "sticky" : "relative", borderBottom: borderStyle, boxSizing: "border-box", right: 0, zIndex: 1, className: `columns sticky-columns${isActionFreeze ? "-right" : ""}`, children: (row.onLink || row.onEdit || row.onDelete) ? ((0, jsx_runtime_1.jsx)(TableActions_1.default, { row: row })) : null }))] }), rowContent && isExpanded && ((0, jsx_runtime_1.jsx)(react_1.Tr, { ref: expandedRowRef, children: (0, jsx_runtime_1.jsx)(react_1.Td, { colSpan: columns.length +
135
164
  (isCheckbox ? 1 : 0) +
136
165
  (isContent ? 1 : 0) +
@@ -139,6 +168,7 @@ const TableRow = react_2.default.memo(({ row, rowIndex, isChecked, isExpanded, i
139
168
  const TableBody = ({ data, isCheckbox, columns, startRow, columnWidths, freezedBgColor, freezedTextColor, noBorders, handleCheckbox, selections, isLoading, onRowClick, isContent, isLink, isActionFreeze, loadingSkeletonRows, scrollContainerRef, density, accentColors, groups, onAddItem, emptyState, }) => {
140
169
  var _a, _b, _c;
141
170
  const theme = (0, useCustomTheme_1.useCustomTheme)();
171
+ const variant = (0, TableVariantContext_1.useTableVariant)();
142
172
  const [expandedRows, setExpandedRows] = (0, react_2.useState)(new Set());
143
173
  const [collapsedGroups, setCollapsedGroups] = (0, react_2.useState)(new Set());
144
174
  const toggleGroup = (0, react_2.useCallback)((value) => {
@@ -284,17 +314,16 @@ const TableBody = ({ data, isCheckbox, columns, startRow, columnWidths, freezedB
284
314
  const checkboxOffset = isCheckbox ? 50 : 0;
285
315
  return columnWidths.map((_, idx) => columnWidths.slice(0, idx).reduce((sum, w) => sum + w, 0) + checkboxOffset);
286
316
  }, [columnWidths, isCheckbox]);
287
- const borderStyle = (0, react_2.useMemo)(() => noBorders ? "none" : `0.063rem solid ${theme.colors.border[500]}`, [noBorders, theme.colors.border]);
317
+ const borderStyle = (0, react_2.useMemo)(() => noBorders ? "none" : `0.063rem solid ${variant.row.ruleColor}`, [noBorders, variant.row.ruleColor]);
288
318
  // Selected-row tint applied per-cell (NOT a blanket `& td` override) so status
289
319
  // cells keep their solid color + white text instead of white-on-tint.
290
- const selectedBg = theme.colors.primary.opacity[16];
320
+ const selectedBg = variant.row.selectedBg;
291
321
  // Sticky/frozen cells overlay scrolling content, so their selected background
292
322
  // must be OPAQUE — paint the (translucent) tint over an opaque base.
293
323
  const selectedFrozenBg = `linear-gradient(0deg, ${selectedBg}, ${selectedBg}), ${theme.colors.background[50]}`;
294
324
  // Dark mode lifts the hover fill to `table.hover[500]`; `[300]` sits ~1.2:1 from the canvas.
295
325
  // No ink flip needed — see `tableRowHoverStyle.ts`.
296
- const isDark = (0, accentText_1.isDarkCanvas)(theme.colors.backgroundColor.main);
297
- const hoverStyle = (0, react_2.useMemo)(() => (0, tableRowHoverStyle_1.getTableRowHoverStyle)(theme.colors, isDark), [theme.colors, isDark]);
326
+ const hoverStyle = (0, react_2.useMemo)(() => ({ backgroundColor: variant.row.hoverBg }), [variant.row.hoverBg]);
298
327
  // Flatten groups → one sequence of header/row items so it can be windowed.
299
328
  // Independent of scrollTop, so scrolling reuses it instead of re-flattening.
300
329
  const groupItems = (0, react_2.useMemo)(() => {
@@ -323,7 +352,7 @@ const TableBody = ({ data, isCheckbox, columns, startRow, columnWidths, freezedB
323
352
  return { heights, offsets, totalH: acc };
324
353
  }, [groupItems, groupVirtualize, rowHeight, GROUP_HEADER_H]);
325
354
  if (isLoading && data.length === 0) {
326
- return ((0, jsx_runtime_1.jsx)(TableLoading_1.TableBodyLoading, { noOfColumns: totalVisibleColumns, borderColor: theme.colors.boxborder[300], rowsCount: typeof loadingSkeletonRows === "number" ? loadingSkeletonRows : 4 }));
355
+ return ((0, jsx_runtime_1.jsx)(TableLoading_1.TableBodyLoading, { noOfColumns: totalVisibleColumns, borderColor: theme.colors.boxborder[200], rowsCount: typeof loadingSkeletonRows === "number" ? loadingSkeletonRows : 4 }));
327
356
  }
328
357
  if (!isLoading && data.length === 0) {
329
358
  const isStructured = emptyState && typeof emptyState === "object" && !react_2.default.isValidElement(emptyState);
@@ -8,7 +8,7 @@ const useCustomTheme_1 = require("../../../Theme/useCustomTheme");
8
8
  /** Monday-style colored, collapsible group header row. */
9
9
  const TableGroupRow = ({ label, value, count, color, collapsed, colSpan, ariaRowIndex, onToggle, onAddItem, }) => {
10
10
  const theme = (0, useCustomTheme_1.useCustomTheme)();
11
- return ((0, jsx_runtime_1.jsx)(react_1.Tr, { "aria-rowindex": ariaRowIndex, children: (0, jsx_runtime_1.jsx)(react_1.Td, { colSpan: colSpan, p: 0, border: "none", children: (0, jsx_runtime_1.jsxs)(react_1.Flex, { align: "center", gap: 2, px: 3, py: 2, bg: color.soft, boxShadow: `inset 4px 0 0 ${color.solid}`, borderBottom: `0.063rem solid ${theme.colors.border[500]}`, children: [(0, jsx_runtime_1.jsx)(react_1.IconButton, { "aria-label": collapsed ? "Expand group" : "Collapse group", size: "xs", variant: "ghost", color: color.text, onClick: onToggle, icon: collapsed ? (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRight, { size: 16 }) : (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { size: 16 }) }), (0, jsx_runtime_1.jsx)(react_1.Text, { fontSize: "0.8125rem", fontWeight: 700, color: color.text, isTruncated: true, maxW: "20rem", children: label }), (0, jsx_runtime_1.jsx)(react_1.Box, { as: "span", fontSize: "0.6875rem", fontWeight: 600, color: color.text, bg: theme.colors.background[50], borderRadius: "full", px: "0.5rem", py: "0.0625rem", children: count }), onAddItem && ((0, jsx_runtime_1.jsxs)(react_1.Flex, { as: "button", type: "button", align: "center", gap: 1, ml: "auto", px: 2, py: 1, borderRadius: "md", fontSize: "0.75rem", fontWeight: 500, color: theme.colors.text[500], _hover: { bg: theme.colors.background[50], color: color.text }, onClick: () => onAddItem(value), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 14 }), " Add item"] }))] }) }) }));
11
+ return ((0, jsx_runtime_1.jsx)(react_1.Tr, { "aria-rowindex": ariaRowIndex, children: (0, jsx_runtime_1.jsx)(react_1.Td, { colSpan: colSpan, p: 0, border: "none", children: (0, jsx_runtime_1.jsxs)(react_1.Flex, { align: "center", gap: 2, px: 3, py: 2, bg: color.soft, boxShadow: `inset 4px 0 0 ${color.solid}`, borderBottom: `0.063rem solid ${theme.colors.boxborder[200]}`, children: [(0, jsx_runtime_1.jsx)(react_1.IconButton, { "aria-label": collapsed ? "Expand group" : "Collapse group", size: "xs", variant: "ghost", color: color.text, onClick: onToggle, icon: collapsed ? (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRight, { size: 16 }) : (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronDown, { size: 16 }) }), (0, jsx_runtime_1.jsx)(react_1.Text, { fontSize: "0.8125rem", fontWeight: 700, color: color.text, isTruncated: true, maxW: "20rem", children: label }), (0, jsx_runtime_1.jsx)(react_1.Box, { as: "span", fontSize: "0.6875rem", fontWeight: 600, color: color.text, bg: theme.colors.background[50], borderRadius: "full", px: "0.5rem", py: "0.0625rem", children: count }), onAddItem && ((0, jsx_runtime_1.jsxs)(react_1.Flex, { as: "button", type: "button", align: "center", gap: 1, ml: "auto", px: 2, py: 1, borderRadius: "md", fontSize: "0.75rem", fontWeight: 500, color: theme.colors.text[500], _hover: { bg: theme.colors.background[50], color: color.text }, onClick: () => onAddItem(value), children: [(0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 14 }), " Add item"] }))] }) }) }));
12
12
  };
13
13
  exports.TableGroupRow = TableGroupRow;
14
14
  exports.default = exports.TableGroupRow;