pixelize-design-library 2.4.2-beta.3 → 2.4.2-beta.4

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 (111) hide show
  1. package/dist/Components/Accordion/Accordion.js +2 -2
  2. package/dist/Components/Button/Button.styles.js +4 -3
  3. package/dist/Components/ButtonGroupIcon/ButtonGroupIcon.js +5 -5
  4. package/dist/Components/Common/fieldStyles.js +1 -1
  5. package/dist/Components/CopyButton/CopyButton.js +1 -1
  6. package/dist/Components/CustomModulesTable/EditModuleModal.js +1 -1
  7. package/dist/Components/DatePicker/CalendarPanel.js +1 -1
  8. package/dist/Components/DatePicker/RangeDatePicker.js +1 -1
  9. package/dist/Components/DatePicker/SingleDatePicker.js +1 -1
  10. package/dist/Components/DatePicker/TimeOnlyPicker.js +1 -1
  11. package/dist/Components/Dropdown/DropDown.js +3 -13
  12. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +1 -1
  13. package/dist/Components/FilePreview/FilePreview.js +1 -1
  14. package/dist/Components/FilterSidebar/FilterSidebar.js +2 -2
  15. package/dist/Components/Input/TextInput.styles.js +5 -1
  16. package/dist/Components/KanbanBoard/KanbanBoard.js +5 -45
  17. package/dist/Components/LimitReachedModal/LimitReachedModal.js +4 -5
  18. package/dist/Components/MultiSelect/MultiSelect.js +1 -1
  19. package/dist/Components/OrgSwitcher/OrgSwitcher.js +2 -2
  20. package/dist/Components/PinInput/PinInput.js +1 -1
  21. package/dist/Components/PlanPill/PlanPill.js +5 -5
  22. package/dist/Components/PlanPill/planPillGradient.d.ts +2 -14
  23. package/dist/Components/PlanPill/planPillGradient.js +3 -15
  24. package/dist/Components/ProductCard/ProductPrice.js +1 -1
  25. package/dist/Components/ProfileCard/ProfileCard.js +1 -1
  26. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +1 -1
  27. package/dist/Components/Reorder/Reorder.js +1 -1
  28. package/dist/Components/ScrollbarBox/ScrollbarBox.d.ts +13 -0
  29. package/dist/Components/ScrollbarBox/ScrollbarBox.js +11 -0
  30. package/dist/Components/SearchSelect/SearchSelect.js +3 -3
  31. package/dist/Components/Select/Select.styles.js +1 -1
  32. package/dist/Components/SelectSearch/SelectSearch.js +3 -3
  33. package/dist/Components/SelectV2/SelectV2.js +3 -10
  34. package/dist/Components/StageProgress/StageProgress.js +2 -9
  35. package/dist/Components/Table/Table.js +7 -20
  36. package/dist/Components/Table/components/TableBody.js +1 -1
  37. package/dist/Components/Table/components/TableHeader.js +1 -1
  38. package/dist/Components/Table/filters/ActiveFilters.js +2 -18
  39. package/dist/Components/Table/settings/ManageColumns.js +2 -16
  40. package/dist/Components/Table/settings/TableSettings.js +4 -10
  41. package/dist/Components/Timeline/Timeline.js +2 -2
  42. package/dist/Components/Toaster/Toaster.js +1 -1
  43. package/dist/Components/UpgradeButton/UpgradeButton.js +3 -3
  44. package/dist/Constants/Sidebar.js +3 -2
  45. package/dist/Theme/chakra/Menu.styles.d.ts +1 -0
  46. package/dist/Theme/chakra/Menu.styles.js +3 -0
  47. package/dist/Theme/chakra/componentStyles.d.ts +1 -0
  48. package/dist/Theme/chakra/createBrandTheme.js +3 -16
  49. package/dist/Theme/tokens/builders/gradientInk.d.ts +22 -0
  50. package/dist/Theme/tokens/builders/gradientInk.js +28 -0
  51. package/dist/Theme/tokens/builders/index.d.ts +2 -0
  52. package/dist/Theme/tokens/builders/index.js +2 -0
  53. package/dist/Theme/tokens/builders/outlineRung.d.ts +5 -0
  54. package/dist/Theme/tokens/builders/outlineRung.js +19 -0
  55. package/dist/Theme/tokens/builders/scrollbar.d.ts +12 -0
  56. package/dist/Theme/tokens/builders/scrollbar.js +57 -0
  57. package/dist/Theme/tokens/builders/surfaceRungs.d.ts +2 -0
  58. package/dist/Theme/tokens/builders/surfaceRungs.js +7 -2
  59. package/dist/esm/Components/Accordion/Accordion.js +2 -2
  60. package/dist/esm/Components/Button/Button.styles.js +5 -4
  61. package/dist/esm/Components/ButtonGroupIcon/ButtonGroupIcon.js +5 -5
  62. package/dist/esm/Components/Common/fieldStyles.js +1 -1
  63. package/dist/esm/Components/CopyButton/CopyButton.js +1 -1
  64. package/dist/esm/Components/CustomModulesTable/EditModuleModal.js +1 -1
  65. package/dist/esm/Components/DatePicker/CalendarPanel.js +1 -1
  66. package/dist/esm/Components/DatePicker/RangeDatePicker.js +1 -1
  67. package/dist/esm/Components/DatePicker/SingleDatePicker.js +1 -1
  68. package/dist/esm/Components/DatePicker/TimeOnlyPicker.js +1 -1
  69. package/dist/esm/Components/Dropdown/DropDown.js +3 -13
  70. package/dist/esm/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +1 -1
  71. package/dist/esm/Components/FilePreview/FilePreview.js +1 -1
  72. package/dist/esm/Components/FilterSidebar/FilterSidebar.js +2 -2
  73. package/dist/esm/Components/Input/TextInput.styles.js +5 -1
  74. package/dist/esm/Components/KanbanBoard/KanbanBoard.js +5 -45
  75. package/dist/esm/Components/LimitReachedModal/LimitReachedModal.js +4 -5
  76. package/dist/esm/Components/MultiSelect/MultiSelect.js +1 -1
  77. package/dist/esm/Components/OrgSwitcher/OrgSwitcher.js +2 -2
  78. package/dist/esm/Components/PinInput/PinInput.js +1 -1
  79. package/dist/esm/Components/PlanPill/PlanPill.js +6 -6
  80. package/dist/esm/Components/PlanPill/planPillGradient.js +3 -15
  81. package/dist/esm/Components/ProductCard/ProductPrice.js +1 -1
  82. package/dist/esm/Components/ProfileCard/ProfileCard.js +1 -1
  83. package/dist/esm/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +1 -1
  84. package/dist/esm/Components/Reorder/Reorder.js +1 -1
  85. package/dist/esm/Components/ScrollbarBox/ScrollbarBox.js +9 -0
  86. package/dist/esm/Components/SearchSelect/SearchSelect.js +3 -3
  87. package/dist/esm/Components/Select/Select.styles.js +1 -1
  88. package/dist/esm/Components/SelectSearch/SelectSearch.js +3 -3
  89. package/dist/esm/Components/SelectV2/SelectV2.js +3 -10
  90. package/dist/esm/Components/StageProgress/StageProgress.js +2 -9
  91. package/dist/esm/Components/Table/Table.js +7 -20
  92. package/dist/esm/Components/Table/components/TableBody.js +1 -1
  93. package/dist/esm/Components/Table/components/TableHeader.js +1 -1
  94. package/dist/esm/Components/Table/filters/ActiveFilters.js +2 -18
  95. package/dist/esm/Components/Table/settings/ManageColumns.js +2 -16
  96. package/dist/esm/Components/Table/settings/TableSettings.js +4 -10
  97. package/dist/esm/Components/Timeline/Timeline.js +2 -2
  98. package/dist/esm/Components/Toaster/Toaster.js +1 -1
  99. package/dist/esm/Components/UpgradeButton/UpgradeButton.js +3 -3
  100. package/dist/esm/Constants/Sidebar.js +3 -2
  101. package/dist/esm/Theme/chakra/Menu.styles.js +3 -0
  102. package/dist/esm/Theme/chakra/createBrandTheme.js +3 -16
  103. package/dist/esm/Theme/tokens/builders/gradientInk.js +22 -0
  104. package/dist/esm/Theme/tokens/builders/index.js +2 -0
  105. package/dist/esm/Theme/tokens/builders/outlineRung.js +18 -0
  106. package/dist/esm/Theme/tokens/builders/scrollbar.js +52 -0
  107. package/dist/esm/Theme/tokens/builders/surfaceRungs.js +7 -2
  108. package/dist/esm/index.js +3 -1
  109. package/dist/index.d.ts +5 -1
  110. package/dist/index.js +9 -3
  111. package/package.json +1 -1
@@ -10,13 +10,13 @@ const accordionColors_1 = require("./accordionColors");
10
10
  const Accordion = ({ allowMultiple, allowToggle, index, onChange, reduceMotion, items, ...rest }) => {
11
11
  const { colors } = (0, useCustomTheme_1.useCustomTheme)();
12
12
  const isDark = (0, accentText_1.isDarkCanvas)(colors.backgroundColor.main);
13
- const border = colors.boxborder[300];
13
+ const border = colors.boxborder[200];
14
14
  const headingColor = colors.text[800];
15
15
  const bodyColor = colors.text[600];
16
16
  const { expandedBg, softHover } = (0, react_1.useMemo)(() => (0, accordionColors_1.getAccordionHoverColors)(colors, isDark), [colors, isDark]);
17
17
  return ((0, jsx_runtime_1.jsx)(react_2.Accordion, { allowMultiple: allowMultiple, allowToggle: allowToggle, index: index, onChange: onChange, reduceMotion: reduceMotion, ...rest, children: items.map((item, idx) => {
18
18
  var _a;
19
- return ((0, jsx_runtime_1.jsx)(react_2.AccordionItem, { border: `0.063rem solid ${border}`, borderRadius: "xl", bg: colors.background[50], mb: 3, overflow: "hidden", transition: "border-color 0.15s ease, box-shadow 0.15s ease", _last: { mb: 0 }, _hover: { borderColor: colors.boxborder[400] }, ...item.itemProps, sx: (_a = item.customStyles) === null || _a === void 0 ? void 0 : _a.itemStyle, children: ({ isExpanded }) => {
19
+ return ((0, jsx_runtime_1.jsx)(react_2.AccordionItem, { border: `0.063rem solid ${border}`, borderRadius: "xl", bg: colors.background[50], mb: 3, overflow: "hidden", transition: "border-color 0.15s ease, box-shadow 0.15s ease", _last: { mb: 0 }, _hover: { borderColor: colors.boxborder[200] }, ...item.itemProps, sx: (_a = item.customStyles) === null || _a === void 0 ? void 0 : _a.itemStyle, children: ({ isExpanded }) => {
20
20
  var _a, _b, _c;
21
21
  return ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("h2", { children: (0, jsx_runtime_1.jsxs)(react_2.AccordionButton, { px: 4, py: 3, gap: 3, fontSize: "0.875rem", fontWeight: 600, color: headingColor, bg: isExpanded ? expandedBg : "transparent", transition: "background 0.15s ease", _hover: { bg: isExpanded ? expandedBg : softHover }, _focusVisible: {
22
22
  boxShadow: "none",
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Button = void 0;
4
4
  const accentText_1 = require("../../Theme/tokens/builders/accentText");
5
+ const gradientInk_1 = require("../../Theme/tokens/builders/gradientInk");
5
6
  /**
6
7
  * Outline/ghost/link text sits ON the canvas, so it needs a rung that stays readable there —
7
8
  * `[500]` is pinned dark enough to carry a white label on the solid variant and measures only
@@ -141,11 +142,11 @@ exports.Button = {
141
142
  // Theme-based two-tone gradient: each theme defines its own `gradient` {from,to} pair.
142
143
  // Ignores colorScheme; hover/active shift brightness so it works for any pair.
143
144
  gradient: ({ theme }) => {
144
- const g = theme.colors.gradient;
145
- const bg = `linear-gradient(135deg, ${g.from} 0%, ${g.to} 100%)`;
145
+ const g = (0, gradientInk_1.resolveGradient)(theme.colors.gradient, theme.colors.white, theme.colors.black);
146
+ const bg = (0, gradientInk_1.gradientCss)(g);
146
147
  return {
147
148
  bgImage: bg,
148
- color: (0, accentText_1.onGradient)(g.from, g.to, theme.colors.white, theme.colors.black),
149
+ color: g.ink,
149
150
  border: "none",
150
151
  _hover: {
151
152
  bgImage: bg,
@@ -5,7 +5,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("react");
6
6
  const react_2 = require("@chakra-ui/react");
7
7
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
8
- const accentText_1 = require("../../Theme/tokens/builders/accentText");
8
+ const gradientInk_1 = require("../../Theme/tokens/builders/gradientInk");
9
9
  const color_1 = require("../../Theme/tokens/builders/color");
10
10
  const rafThrottle_1 = require("../../Utils/rafThrottle");
11
11
  function ButtonGroupIcon({ leftIcon, rightIcon, onLeftIconClick, onRightIconClick, buttonText, onButtonClick, onButtongroupClick, size, variant, color, buttonGroupStyle, buttonGroupLeftIconStyle, buttonGroupRightIconStyle, buttonStyle, onBlurLeftIcon, onBlurRightIcon, dropdownOptions, // New prop for dropdown options
@@ -49,9 +49,9 @@ rightIconDropdown, menulistStyle, menuItemStyle, isLoading, divider = true, left
49
49
  // keep the segments transparent (so it doesn't restart per button/icon), with a
50
50
  // translucent-white hover overlay for per-segment feedback.
51
51
  const isGradient = variant === "gradient";
52
- const gradientStops = theme.colors.gradient;
53
- const gradientBg = `linear-gradient(135deg, ${gradientStops.from} 0%, ${gradientStops.to} 100%)`;
54
- const gradientInk = (0, accentText_1.onGradient)(gradientStops.from, gradientStops.to, theme.colors.white, theme.colors.black);
52
+ const gradientStops = (0, gradientInk_1.resolveGradient)(theme.colors.gradient, theme.colors.white, theme.colors.black);
53
+ const gradientBg = (0, gradientInk_1.gradientCss)(gradientStops);
54
+ const gradientInk = gradientStops.ink;
55
55
  const whiteRgb = (0, color_1.hexToRgb)(theme.colors.white);
56
56
  const whiteOverlay = (alpha) => `rgba(${whiteRgb.r}, ${whiteRgb.g}, ${whiteRgb.b}, ${alpha})`;
57
57
  const gradientItemSx = isGradient
@@ -90,7 +90,7 @@ rightIconDropdown, menulistStyle, menuItemStyle, isLoading, divider = true, left
90
90
  mx: 0,
91
91
  borderRadius: "none",
92
92
  borderBottom: "1px solid",
93
- borderColor: theme.colors.boxborder[300],
93
+ borderColor: theme.colors.boxborder[200],
94
94
  }
95
95
  : {}),
96
96
  _hover: { bg: theme.colors.primary[50], color: theme.colors.primary[700] },
@@ -14,7 +14,7 @@ exports.FIELD_TRANSITION = "border-color 0.2s, box-shadow 0.2s";
14
14
  const getFieldStateStyles = (theme, { error = false, focused = false } = {}) => {
15
15
  // [800], not [500]: WCAG 1.4.11 needs >=3.0 for a control boundary against any named surface
16
16
  // up to `muted` (lightest); [500] fails there, [800] clears all with margin.
17
- const idleBorder = theme.colors.boxborder[800];
17
+ const idleBorder = theme.colors.boxborder[500];
18
18
  const primary = theme.colors.primary[500];
19
19
  const errorColor = theme.colors.semanticText.error;
20
20
  const ringPrimary = theme.colors.boxShadow.primary;
@@ -39,7 +39,7 @@ const CopyButton = ({ value, variant = "icon", label = "Copy", copiedLabel = "Co
39
39
  if (variant === "button") {
40
40
  return ((0, jsx_runtime_1.jsxs)(react_2.Flex, { as: "button", align: "center", gap: "6px", px: "12px", py: "6px", borderRadius: "lg", border: "1px solid",
41
41
  // [800], not [500]: a real control boundary needs >=3:1 on every surface up to `muted`.
42
- borderColor: copied ? success : theme.colors.boxborder[800], bg: "transparent", color: copied ? success : theme.colors.gray[700], fontSize: "14px", fontWeight: 500, transition: "all 0.15s ease", _hover: { borderColor: accent, color: accent }, onClick: handleCopy, children: [copied ? (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: iconSize }) : (0, jsx_runtime_1.jsx)(lucide_react_1.Copy, { size: iconSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { children: copied ? copiedLabel : label })] }));
42
+ borderColor: copied ? success : theme.colors.boxborder[500], bg: "transparent", color: copied ? success : theme.colors.gray[700], fontSize: "14px", fontWeight: 500, transition: "all 0.15s ease", _hover: { borderColor: accent, color: accent }, onClick: handleCopy, children: [copied ? (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: iconSize }) : (0, jsx_runtime_1.jsx)(lucide_react_1.Copy, { size: iconSize }), (0, jsx_runtime_1.jsx)(react_2.Text, { children: copied ? copiedLabel : label })] }));
43
43
  }
44
44
  return ((0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: copied ? copiedLabel : tooltip, placement: "top", children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": tooltip, size: size, variant: "ghost", onClick: handleCopy, color: copied ? success : theme.colors.gray[500], _hover: { color: accent, bg: theme.colors.primary[50] }, icon: copied ? (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: iconSize }) : (0, jsx_runtime_1.jsx)(lucide_react_1.Copy, { size: iconSize }) }) }));
45
45
  };
@@ -19,6 +19,6 @@ const EditModuleModal = ({ isOpen, onClose, initialName, isLoading, onSubmit, la
19
19
  // [200] is the decorative divider rung (~1.2:1, correct for the ModalHeader border
20
20
  // above) — a real control's resting outline needs 1.4.11's 3:1, which is what every
21
21
  // other input in this library (TextInput, NumberInput, DatePicker) reads from [800].
22
- borderColor: colors.boxborder[800], mb: 5 }), (0, jsx_runtime_1.jsxs)(react_2.HStack, { justifyContent: "flex-end", spacing: 3, children: [(0, jsx_runtime_1.jsx)(Button_1.default, { label: labels.cancel, onClick: onClose, variant: "outline", colorScheme: "gray", size: "sm" }), (0, jsx_runtime_1.jsx)(Button_1.default, { label: labels.update, onClick: () => onSubmit(name.trim()), colorScheme: "primary", size: "sm", isLoading: isLoading, isDisabled: !name.trim() })] })] })] })] }));
22
+ borderColor: colors.boxborder[500], mb: 5 }), (0, jsx_runtime_1.jsxs)(react_2.HStack, { justifyContent: "flex-end", spacing: 3, children: [(0, jsx_runtime_1.jsx)(Button_1.default, { label: labels.cancel, onClick: onClose, variant: "outline", colorScheme: "gray", size: "sm" }), (0, jsx_runtime_1.jsx)(Button_1.default, { label: labels.update, onClick: () => onSubmit(name.trim()), colorScheme: "primary", size: "sm", isLoading: isLoading, isDisabled: !name.trim() })] })] })] })] }));
23
23
  };
24
24
  exports.default = EditModuleModal;
@@ -26,7 +26,7 @@ const CalendarPanel = ({ currentMonth, setCurrentMonth, today, isRange, tempDate
26
26
  const hasRange = !!(rangeStart && rangeEnd && !isSameDay(rangeStart, rangeEnd));
27
27
  const selectStyles = {
28
28
  border: "1px solid",
29
- // boxborder[500] is the control-outline rung the sibling pickers already use; boxborder[300]
29
+ // boxborder[500] is the control-outline rung the sibling pickers already use; boxborder[200]
30
30
  // is decorative and measured 1.85:1 on the dark canvas — the select read as borderless.
31
31
  borderColor: theme.colors.boxborder[500],
32
32
  borderRadius: "md",
@@ -207,7 +207,7 @@ const RangeDatePicker = (props) => {
207
207
  return;
208
208
  }
209
209
  setTempRangeEnd(setTimeFrom(endTimeBaseDate, t));
210
- }, dateFormat: timePickerFormat, disabled: disabled || !tempRangeEnd, size: sizeKey }))] })] })), (0, jsx_runtime_1.jsxs)(react_2.Box, { display: "flex", justifyContent: "space-between", alignItems: "center", mt: 3, pt: 3, borderTop: "1px solid", borderColor: theme.colors.boxborder[300], children: [(0, jsx_runtime_1.jsx)(Button_1.default, { size: "sm", variant: "ghost", colorScheme: "gray", onClick: handleClear, children: "Clear" }), (0, jsx_runtime_1.jsx)(Button_1.default, { size: "sm", variant: "gradient", onClick: requestClose, children: "Apply" })] })] }) })] }), error && errorMessage && (0, jsx_runtime_1.jsx)(ErrorMessage_1.default, { errorMessage: errorMessage }), helperText && !error && (0, jsx_runtime_1.jsx)(HelperText_1.default, { helperText: helperText })] }));
210
+ }, dateFormat: timePickerFormat, disabled: disabled || !tempRangeEnd, size: sizeKey }))] })] })), (0, jsx_runtime_1.jsxs)(react_2.Box, { display: "flex", justifyContent: "space-between", alignItems: "center", mt: 3, pt: 3, borderTop: "1px solid", borderColor: theme.colors.boxborder[200], children: [(0, jsx_runtime_1.jsx)(Button_1.default, { size: "sm", variant: "ghost", colorScheme: "gray", onClick: handleClear, children: "Clear" }), (0, jsx_runtime_1.jsx)(Button_1.default, { size: "sm", variant: "gradient", onClick: requestClose, children: "Apply" })] })] }) })] }), error && errorMessage && (0, jsx_runtime_1.jsx)(ErrorMessage_1.default, { errorMessage: errorMessage }), helperText && !error && (0, jsx_runtime_1.jsx)(HelperText_1.default, { helperText: helperText })] }));
211
211
  };
212
212
  exports.RangeDatePicker = RangeDatePicker;
213
213
  exports.default = exports.RangeDatePicker;
@@ -970,7 +970,7 @@ const SingleDatePicker = (props) => {
970
970
  setTempDate(updatedDate);
971
971
  setInputValue((0, date_fns_1.format)(updatedDate, resolvedDateFormat));
972
972
  setIsTyping(false);
973
- }, disabled: disabled })) })), (0, jsx_runtime_1.jsxs)(react_2.Box, { display: "flex", justifyContent: "space-between", alignItems: "center", mt: 3, pt: 3, borderTop: "1px solid", borderColor: theme.colors.boxborder[300], children: [(0, jsx_runtime_1.jsx)(Button_1.default, { size: "sm", variant: "ghost", colorScheme: "gray", onClick: () => {
973
+ }, disabled: disabled })) })), (0, jsx_runtime_1.jsxs)(react_2.Box, { display: "flex", justifyContent: "space-between", alignItems: "center", mt: 3, pt: 3, borderTop: "1px solid", borderColor: theme.colors.boxborder[200], children: [(0, jsx_runtime_1.jsx)(Button_1.default, { size: "sm", variant: "ghost", colorScheme: "gray", onClick: () => {
974
974
  setTempDate(null);
975
975
  requestClose(null);
976
976
  }, children: "Clear" }), (0, jsx_runtime_1.jsx)(Button_1.default, { size: "sm", variant: "gradient", onClick: () => requestClose(), children: "Apply" })] })] }) })] }), error && errorMessage && (0, jsx_runtime_1.jsx)(ErrorMessage_1.default, { errorMessage: errorMessage }), helperText && !error && (0, jsx_runtime_1.jsx)(HelperText_1.default, { helperText: helperText })] }));
@@ -79,7 +79,7 @@ const TimeOnlyPicker = (props) => {
79
79
  onOpen();
80
80
  }, error: error, size: sizeKey }) }) }) }), (0, jsx_runtime_1.jsx)(react_2.PopoverContent, { width: "auto", p: 4, ref: popoverRef, boxShadow: "lg", bg: theme.colors.background[50], children: (0, jsx_runtime_1.jsxs)(react_2.PopoverBody, { children: [(0, jsx_runtime_1.jsx)(TimePicker_1.default, { date: resolvedTempDate, dateFormat: dateFormat, onChange: (updatedDate) => {
81
81
  handleTimePickerChange(updatedDate);
82
- } }), (0, jsx_runtime_1.jsxs)(react_2.Box, { display: "flex", justifyContent: "space-between", mt: 4, pt: 4, borderTop: "1px solid", borderColor: theme.colors.boxborder[300], children: [(0, jsx_runtime_1.jsx)(react_2.Button, { size: "sm", variant: "ghost", onClick: handleClear, children: "Clear" }), (0, jsx_runtime_1.jsx)(react_2.Button, { size: "sm", colorScheme: "primary", onClick: handleOk, children: "OK" })] })] }) })] }), error && errorMessage && (0, jsx_runtime_1.jsx)(ErrorMessage_1.default, { errorMessage: errorMessage }), helperText && !error && (0, jsx_runtime_1.jsx)(HelperText_1.default, { helperText: helperText })] }));
82
+ } }), (0, jsx_runtime_1.jsxs)(react_2.Box, { display: "flex", justifyContent: "space-between", mt: 4, pt: 4, borderTop: "1px solid", borderColor: theme.colors.boxborder[200], children: [(0, jsx_runtime_1.jsx)(react_2.Button, { size: "sm", variant: "ghost", onClick: handleClear, children: "Clear" }), (0, jsx_runtime_1.jsx)(react_2.Button, { size: "sm", colorScheme: "primary", onClick: handleOk, children: "OK" })] })] }) })] }), error && errorMessage && (0, jsx_runtime_1.jsx)(ErrorMessage_1.default, { errorMessage: errorMessage }), helperText && !error && (0, jsx_runtime_1.jsx)(HelperText_1.default, { helperText: helperText })] }));
83
83
  };
84
84
  exports.TimeOnlyPicker = TimeOnlyPicker;
85
85
  exports.default = exports.TimeOnlyPicker;
@@ -5,6 +5,7 @@ const react_1 = require("react");
5
5
  const react_2 = require("@chakra-ui/react");
6
6
  const framer_motion_1 = require("framer-motion");
7
7
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
8
+ const scrollbar_1 = require("../../Theme/tokens/builders/scrollbar");
8
9
  const lucide_react_1 = require("lucide-react");
9
10
  const rafThrottle_1 = require("../../Utils/rafThrottle");
10
11
  const MotionBox = (0, framer_motion_1.motion)((0, react_1.forwardRef)((props, ref) => ((0, jsx_runtime_1.jsx)(react_2.Box, { ref: ref, ...props }))));
@@ -213,18 +214,7 @@ const Dropdown = (0, react_1.forwardRef)(({ dropDownButtonStyle, ButtonText, opt
213
214
  };
214
215
  const DropdownContentRender = () => {
215
216
  var _a;
216
- return ((0, jsx_runtime_1.jsx)(react_2.List, { id: menuId, role: "menu", onKeyDown: handleMenuKeyDown, bg: theme.colors.background[50], border: `0.063rem solid ${theme.colors.boxborder[200]}`, borderRadius: "xl", boxShadow: (_a = theme.shadows) === null || _a === void 0 ? void 0 : _a.lg, py: 1.5, mt: "0.375rem", minWidth: s.minW, maxH: "18rem", overflowY: "auto", overflowX: "hidden", sx: {
217
- scrollbarWidth: "thin",
218
- scrollbarColor: `${theme.colors.gray[300]} transparent`,
219
- "&::-webkit-scrollbar": { width: "6px" },
220
- "&::-webkit-scrollbar-thumb": {
221
- background: theme.colors.gray[300],
222
- borderRadius: "base",
223
- },
224
- "&::-webkit-scrollbar-thumb:hover": {
225
- background: theme.colors.gray[400],
226
- },
227
- }, style: ListStyle, children: options.map((option, index) => ((0, jsx_runtime_1.jsxs)(react_2.ListItem, { ref: (node) => {
217
+ return ((0, jsx_runtime_1.jsx)(react_2.List, { id: menuId, role: "menu", onKeyDown: handleMenuKeyDown, bg: theme.colors.background[50], border: `0.063rem solid ${theme.colors.boxborder[200]}`, borderRadius: "xl", boxShadow: (_a = theme.shadows) === null || _a === void 0 ? void 0 : _a.lg, py: 1.5, mt: "0.375rem", minWidth: s.minW, maxH: "18rem", overflowY: "auto", overflowX: "hidden", sx: (0, scrollbar_1.scrollbarStyles)(theme.colors, "overlay"), style: ListStyle, children: options.map((option, index) => ((0, jsx_runtime_1.jsxs)(react_2.ListItem, { ref: (node) => {
228
218
  itemRefs.current[index] = node;
229
219
  }, role: "menuitem", tabIndex: index === activeIndex ? 0 : -1, onClick: () => {
230
220
  handleListItemClick(option.id, option.label);
@@ -236,7 +226,7 @@ const Dropdown = (0, react_1.forwardRef)(({ dropDownButtonStyle, ButtonText, opt
236
226
  bg: theme.colors.primary.opacity[8],
237
227
  color: theme.colors.accentText,
238
228
  }, borderBottom: divider
239
- ? `0.063rem solid ${theme.colors.boxborder[100]}`
229
+ ? `0.063rem solid ${theme.colors.boxborder[200]}`
240
230
  : undefined, sx: { "&:last-child": { borderBottom: "none" } }, style: ItemStyle, fontWeight: 500, children: [(option === null || option === void 0 ? void 0 : option.image) && ((0, jsx_runtime_1.jsx)(react_2.Box, { as: option.image, boxSize: s.img, flexShrink: 0, color: theme.colors.textMuted, style: ImageStyle })), (0, jsx_runtime_1.jsx)(react_2.Box, { as: "span", fontSize: s.fontSize, isTruncated: true,
241
231
  // fontWeight={400}
242
232
  style: LabelStyle, children: option.label })] }, option.id))) }));
@@ -11,7 +11,7 @@ function VerifyEmailOtp({ resendMail, onChange, onComplete, placeholder = "", pi
11
11
  // [800], not [300]: WCAG 1.4.11 needs >=3.0 for a control boundary against any
12
12
  // named surface up to `muted` (lightest); [300] fails there, [800] clears all
13
13
  // with margin.
14
- borderColor: theme.colors.boxborder[800], backgroundColor: theme.colors.background[200], _focus: {
14
+ borderColor: theme.colors.boxborder[500], backgroundColor: theme.colors.background[200], _focus: {
15
15
  borderColor: theme.colors.primary[500],
16
16
  boxShadow: `0 0 0 0.063rem ${theme.colors.primary[500]}`,
17
17
  } }, index))) }) }), (0, jsx_runtime_1.jsx)(react_1.Flex, { justify: "center", children: (0, jsx_runtime_1.jsxs)(react_1.Text, { fontSize: "sm", color: theme.colors.gray[600], children: ["Didn\u2019t receive the code?", " ", (0, jsx_runtime_1.jsx)(react_1.Button, { variant: "link", color: theme.colors.accentText, fontWeight: "semibold", onClick: resendMail, children: "Resend Code" })] }) })] }));
@@ -70,7 +70,7 @@ const FilePreview = ({ isOpen, onClose, fileUrl, fileName, fileType, hideDownloa
70
70
  , {
71
71
  // Chakra's default Modal drives its bg off `--modal-bg`, which flips to
72
72
  // `colors.gray.700` under `_dark` — a light grey in our derived dark palettes.
73
- bg: theme.colors.background[50], borderRadius: "2xl", overflow: "hidden", initial: { opacity: 0, scale: 0.96, y: 8 }, animate: { opacity: 1, scale: 1, y: 0 }, transition: { duration: 0.2, ease: "easeOut" }, children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", justify: "space-between", px: 4, py: 3, borderBottom: "1px solid", borderColor: theme.colors.boxborder[100], children: [(0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: fileName || "File", placement: "bottom", children: (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: "sm", fontWeight: 600, maxW: "60%", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", children: fileName || "Preview" }) }), (0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", gap: 1, children: [kind === "image" && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: "Zoom out", placement: "bottom", children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": "Zoom out", size: "sm", variant: "ghost", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Minus, { size: 16 }), onClick: () => setZoom((z) => Math.max(0.25, z - 0.25)) }) }), (0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: "Zoom in", placement: "bottom", children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": "Zoom in", size: "sm", variant: "ghost", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 16 }), onClick: () => setZoom((z) => Math.min(4, z + 0.25)) }) }), (0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: "Rotate", placement: "bottom", children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": "Rotate", size: "sm", variant: "ghost", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.RotateCw, { size: 16 }), onClick: () => setRotation((r) => (r + 90) % 360) }) })] })), !hideDownload && ((0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: "Download", placement: "bottom", children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": "Download", size: "sm", variant: "ghost", color: theme.colors.semanticText.success, icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Download, { size: 18 }), onClick: () => downloadFile(fileUrl, fileName) }) })), (0, jsx_runtime_1.jsx)(react_2.ModalCloseButton, { position: "static" })] })] }), (0, jsx_runtime_1.jsx)(react_2.ModalBody, { p: 5, children: renderBody() })] })] }));
73
+ bg: theme.colors.background[50], borderRadius: "2xl", overflow: "hidden", initial: { opacity: 0, scale: 0.96, y: 8 }, animate: { opacity: 1, scale: 1, y: 0 }, transition: { duration: 0.2, ease: "easeOut" }, children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", justify: "space-between", px: 4, py: 3, borderBottom: "1px solid", borderColor: theme.colors.boxborder[200], children: [(0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: fileName || "File", placement: "bottom", children: (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: "sm", fontWeight: 600, maxW: "60%", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", children: fileName || "Preview" }) }), (0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", gap: 1, children: [kind === "image" && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: "Zoom out", placement: "bottom", children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": "Zoom out", size: "sm", variant: "ghost", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Minus, { size: 16 }), onClick: () => setZoom((z) => Math.max(0.25, z - 0.25)) }) }), (0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: "Zoom in", placement: "bottom", children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": "Zoom in", size: "sm", variant: "ghost", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 16 }), onClick: () => setZoom((z) => Math.min(4, z + 0.25)) }) }), (0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: "Rotate", placement: "bottom", children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": "Rotate", size: "sm", variant: "ghost", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.RotateCw, { size: 16 }), onClick: () => setRotation((r) => (r + 90) % 360) }) })] })), !hideDownload && ((0, jsx_runtime_1.jsx)(ToolTip_1.default, { label: "Download", placement: "bottom", children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": "Download", size: "sm", variant: "ghost", color: theme.colors.semanticText.success, icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Download, { size: 18 }), onClick: () => downloadFile(fileUrl, fileName) }) })), (0, jsx_runtime_1.jsx)(react_2.ModalCloseButton, { position: "static" })] })] }), (0, jsx_runtime_1.jsx)(react_2.ModalBody, { p: 5, children: renderBody() })] })] }));
74
74
  };
75
75
  exports.FilePreview = FilePreview;
76
76
  /** Thumbnail with a hover "preview" affordance that opens {@link FilePreview}. */
@@ -175,10 +175,10 @@ panelPadding = 3, clearAllButton = true, onClearAllHandler,
175
175
  const starColor = (0, accentText_1.accentTextOnCanvas)(theme.colors.orange, isRowSelected ? theme.colors.red[50] : theme.colors.background[50]);
176
176
  return Array.from({ length: 5 }, (_, i) => ((0, jsx_runtime_1.jsx)(react_2.Box, { children: (0, jsx_runtime_1.jsx)(lucide_react_1.Star, { size: 16, color: starColor, fill: i < r ? starColor : "none" }) }, `star-${r}-${i}`)));
177
177
  })() }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: "sm", color: theme.colors.text[500], children: "& Up" })] }) }, `rating-${r}`))) })) : null, section.searchable && ((0, jsx_runtime_1.jsx)(react_2.Input, { size: "xs", h: "26px", fontSize: "xs", placeholder: `Search ${section.label}...`, borderRadius: "md", bg: theme.colors.gray[50], border: "1px solid",
178
- // boxborder[800], not raw gray[200]: WCAG 1.4.11 needs >=3.0 for a control
178
+ // boxborder[500], not raw gray[200]: WCAG 1.4.11 needs >=3.0 for a control
179
179
  // boundary against any named surface up to `muted` (lightest); gray[200] fails
180
180
  // there in dark mode.
181
- borderColor: theme.colors.boxborder[800], _focus: { borderColor: theme.colors.red[400], boxShadow: "none" }, value: searchTerms[section.id] || "", onChange: (e) => {
181
+ borderColor: theme.colors.boxborder[500], _focus: { borderColor: theme.colors.red[400], boxShadow: "none" }, value: searchTerms[section.id] || "", onChange: (e) => {
182
182
  const v = e.target.value;
183
183
  setSearchTerms((prev) => ({ ...prev, [section.id]: v }));
184
184
  if (v)
@@ -1,6 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Input = void 0;
4
+ const outlineRung_1 = require("../../Theme/tokens/builders/outlineRung");
5
+ const surfaceRungs_1 = require("../../Theme/tokens/builders/surfaceRungs");
4
6
  exports.Input = {
5
7
  baseStyle: {
6
8
  field: {
@@ -51,8 +53,10 @@ exports.Input = {
51
53
  bg: theme.colors.gray[50],
52
54
  border: "0.063rem solid",
53
55
  borderColor,
56
+ // `textMuted` is body copy, so a hint read as a filled value (6.59:1).
57
+ // Settled against the field's own bg to just clear of AA.
54
58
  _placeholder: {
55
- color: theme.colors.textMuted,
59
+ color: (0, outlineRung_1.softenToContrast)(theme.colors.placeholder[500], theme.colors.gray[50], surfaceRungs_1.PLACEHOLDER_TEXT),
56
60
  },
57
61
  _hover: {
58
62
  borderColor: primary,
@@ -43,6 +43,7 @@ const dnd_1 = require("@hello-pangea/dnd");
43
43
  const lucide_react_1 = require("lucide-react");
44
44
  const react_window_1 = require("react-window");
45
45
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
46
+ const scrollbar_1 = require("../../Theme/tokens/builders/scrollbar");
46
47
  const usePreferences_1 = require("../../Hooks/usePreferences");
47
48
  const AccountCard_1 = __importDefault(require("./AccountCard"));
48
49
  const HeaderActions_1 = __importDefault(require("../Header/HeaderActions"));
@@ -402,37 +403,15 @@ const KanbanBoard = ({ data, customColumns, customizeColumn, onDrag, onDelete, o
402
403
  : colors.boxborder[200]}`, transition: "background 0.15s ease, border-color 0.15s ease, width 0.2s ease", display: "flex", flexDirection: "column", flexShrink: 0, overflow: isColCollapsed ? "visible" : "hidden", height: `${containerHeight - 60}px`, onMouseEnter: () => setHoveredColumn(colId), onMouseLeave: () => setHoveredColumn(null), children: [isColCollapsed ? ((0, jsx_runtime_1.jsxs)(react_2.Flex, { direction: "column", align: "stretch", flex: "1", width: "100%", minH: 0, overflow: "visible", position: "relative", children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { as: "header", direction: "column", align: "center", flexShrink: 0, width: "100%", py: 3, px: 1, gap: 3, borderTop: "0.25rem solid", borderTopColor: (_a = column.color) !== null && _a !== void 0 ? _a : colors.primary[500], bg: colors.background[100], position: "relative", zIndex: 1, children: [enableColumnReorder && columnDragHandleProps ? ((0, jsx_runtime_1.jsx)(react_2.Flex, { align: "center", justify: "center", flexShrink: 0, cursor: "grab", ...columnDragHandleProps, children: (0, jsx_runtime_1.jsx)(react_2.Box, { as: lucide_react_1.GripVertical, size: 14, color: colors.textMuted }) })) : null, enableColumnCollapse && ((0, jsx_runtime_1.jsx)(react_2.Flex, { flexShrink: 0, w: "100%", justify: "center", bg: colors.background[100], position: "relative", zIndex: 3, children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": "Expand column", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronRight, { size: 14 }), variant: "ghost", size: "xs", minW: "1.5rem", h: "1.75rem", onClick: () => toggleColumnCollapsed(colId) }) })), (0, jsx_runtime_1.jsx)(react_2.Text, { as: "span", fontWeight: "700", fontSize: "0.75rem", color: colors.text[700], sx: {
403
404
  writingMode: "vertical-rl",
404
405
  textOrientation: "mixed",
405
- }, maxH: `${Math.max(120, containerHeight - 200)}px`, overflow: "hidden", lineHeight: "1.2", title: column.title, children: column.title }), (0, jsx_runtime_1.jsx)(react_2.Badge, { minW: "1.25rem", h: "1.25rem", borderRadius: "full", border: "1px solid", borderColor: colors.boxborder[200], display: "flex", backgroundColor: colors.background[100], alignItems: "center", justifyContent: "center", color: colors.text[900], fontWeight: 600, fontSize: "10px", children: (_b = column === null || column === void 0 ? void 0 : column.items) === null || _b === void 0 ? void 0 : _b.length })] }), column.customNode ? ((0, jsx_runtime_1.jsx)(react_2.Box, { flexShrink: 0, minH: COLLAPSED_CUSTOM_NODE_TOP_RESERVE, w: "100%", bg: colors.background[100], "aria-hidden": true })) : null, column.customNode ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "section", "aria-label": "Column summary", flex: "1", minH: 0, w: "100%", overflow: "visible", py: 2, display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "flex-start", bg: colors.background[100], position: "relative", zIndex: 2, children: (0, jsx_runtime_1.jsx)(react_2.Box, { position: "relative", transform: "rotate(90deg)", transformOrigin: "center center", marginTop: '1rem', children: (0, jsx_runtime_1.jsx)(react_2.VStack, { align: "stretch", spacing: 1, minW: "max-content", fontSize: "xs", color: colors.text[600], children: column.customNode() }) }) })) : ((0, jsx_runtime_1.jsx)(react_2.Box, { flex: "1", minH: 0 }))] })) : ((0, jsx_runtime_1.jsxs)(react_2.Flex, { width: "100%", h: !isColCollapsed && !!((_c = column.customNode) === null || _c === void 0 ? void 0 : _c.call(column)) ? "auto" : "2.75rem", align: !isColCollapsed && !!((_d = column.customNode) === null || _d === void 0 ? void 0 : _d.call(column)) ? "flex-start" : "center", px: 3, py: 2, flexShrink: 0, justifyContent: "space-between", position: "relative", gap: 2, borderBottom: `0.063rem solid ${colors.boxborder[100]}`, children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { direction: "column", gap: 1, minW: 0, flex: "1", children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", gap: 2, minW: 0, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { boxSize: "0.625rem", borderRadius: "full", bg: (_e = column.color) !== null && _e !== void 0 ? _e : colors.primary[500], flexShrink: 0 }), enableColumnReorder && columnDragHandleProps ? ((0, jsx_runtime_1.jsx)(react_2.Flex, { align: "center", justify: "center", flexShrink: 0, cursor: "grab", ...columnDragHandleProps, children: (0, jsx_runtime_1.jsx)(react_2.Box, { as: lucide_react_1.GripVertical, size: 14, color: colors.textMuted }) })) : null, (0, jsx_runtime_1.jsx)(react_2.Text, { as: "span", fontWeight: "600", fontSize: "0.875rem", color: colors.text[700], noOfLines: 1, minW: 0, children: (0, jsx_runtime_1.jsx)(OverflowTooltipText_1.default, { placement: "top", children: column.title }) })] }), column.customNode ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "section", "aria-label": "Column summary", width: "100%", flexShrink: 0, fontSize: "xs", color: colors.text[600], children: (_f = column.customNode) === null || _f === void 0 ? void 0 : _f.call(column) })) : null] }), (0, jsx_runtime_1.jsxs)(react_2.Box, { display: "flex", alignItems: "center", gap: 2, children: [(0, jsx_runtime_1.jsx)(react_2.Badge, { minW: "1.5rem", h: "1.5rem", px: 2, borderRadius: "full", backgroundColor: colors.gray[100], display: "flex", alignItems: "center", justifyContent: "center", color: colors.text[700], fontWeight: 600, fontSize: "0.625rem", children: (_g = column === null || column === void 0 ? void 0 : column.items) === null || _g === void 0 ? void 0 : _g.length }), enableColumnCollapse && ((0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": "Collapse column", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronLeft, { size: 14 }), variant: "ghost", size: "xs", minW: "1.5rem", h: "1.75rem", flexShrink: 0, onClick: () => toggleColumnCollapsed(colId) })), canDelete &&
406
+ }, maxH: `${Math.max(120, containerHeight - 200)}px`, overflow: "hidden", lineHeight: "1.2", title: column.title, children: column.title }), (0, jsx_runtime_1.jsx)(react_2.Badge, { minW: "1.25rem", h: "1.25rem", borderRadius: "full", border: "1px solid", borderColor: colors.boxborder[200], display: "flex", backgroundColor: colors.background[100], alignItems: "center", justifyContent: "center", color: colors.text[900], fontWeight: 600, fontSize: "10px", children: (_b = column === null || column === void 0 ? void 0 : column.items) === null || _b === void 0 ? void 0 : _b.length })] }), column.customNode ? ((0, jsx_runtime_1.jsx)(react_2.Box, { flexShrink: 0, minH: COLLAPSED_CUSTOM_NODE_TOP_RESERVE, w: "100%", bg: colors.background[100], "aria-hidden": true })) : null, column.customNode ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "section", "aria-label": "Column summary", flex: "1", minH: 0, w: "100%", overflow: "visible", py: 2, display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "flex-start", bg: colors.background[100], position: "relative", zIndex: 2, children: (0, jsx_runtime_1.jsx)(react_2.Box, { position: "relative", transform: "rotate(90deg)", transformOrigin: "center center", marginTop: '1rem', children: (0, jsx_runtime_1.jsx)(react_2.VStack, { align: "stretch", spacing: 1, minW: "max-content", fontSize: "xs", color: colors.text[600], children: column.customNode() }) }) })) : ((0, jsx_runtime_1.jsx)(react_2.Box, { flex: "1", minH: 0 }))] })) : ((0, jsx_runtime_1.jsxs)(react_2.Flex, { width: "100%", h: !isColCollapsed && !!((_c = column.customNode) === null || _c === void 0 ? void 0 : _c.call(column)) ? "auto" : "2.75rem", align: !isColCollapsed && !!((_d = column.customNode) === null || _d === void 0 ? void 0 : _d.call(column)) ? "flex-start" : "center", px: 3, py: 2, flexShrink: 0, justifyContent: "space-between", position: "relative", gap: 2, borderBottom: `0.063rem solid ${colors.boxborder[200]}`, children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { direction: "column", gap: 1, minW: 0, flex: "1", children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", gap: 2, minW: 0, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { boxSize: "0.625rem", borderRadius: "full", bg: (_e = column.color) !== null && _e !== void 0 ? _e : colors.primary[500], flexShrink: 0 }), enableColumnReorder && columnDragHandleProps ? ((0, jsx_runtime_1.jsx)(react_2.Flex, { align: "center", justify: "center", flexShrink: 0, cursor: "grab", ...columnDragHandleProps, children: (0, jsx_runtime_1.jsx)(react_2.Box, { as: lucide_react_1.GripVertical, size: 14, color: colors.textMuted }) })) : null, (0, jsx_runtime_1.jsx)(react_2.Text, { as: "span", fontWeight: "600", fontSize: "0.875rem", color: colors.text[700], noOfLines: 1, minW: 0, children: (0, jsx_runtime_1.jsx)(OverflowTooltipText_1.default, { placement: "top", children: column.title }) })] }), column.customNode ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "section", "aria-label": "Column summary", width: "100%", flexShrink: 0, fontSize: "xs", color: colors.text[600], children: (_f = column.customNode) === null || _f === void 0 ? void 0 : _f.call(column) })) : null] }), (0, jsx_runtime_1.jsxs)(react_2.Box, { display: "flex", alignItems: "center", gap: 2, children: [(0, jsx_runtime_1.jsx)(react_2.Badge, { minW: "1.5rem", h: "1.5rem", px: 2, borderRadius: "full", backgroundColor: colors.gray[100], display: "flex", alignItems: "center", justifyContent: "center", color: colors.text[700], fontWeight: 600, fontSize: "0.625rem", children: (_g = column === null || column === void 0 ? void 0 : column.items) === null || _g === void 0 ? void 0 : _g.length }), enableColumnCollapse && ((0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": "Collapse column", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.ChevronLeft, { size: 14 }), variant: "ghost", size: "xs", minW: "1.5rem", h: "1.75rem", flexShrink: 0, onClick: () => toggleColumnCollapsed(colId) })), canDelete &&
406
407
  hoveredColumn === colId &&
407
408
  column.items.length > 0 && ((0, jsx_runtime_1.jsx)(react_2.Box, { as: lucide_react_1.Trash2, size: 16, cursor: "pointer", color: colors.text[600], _hover: { color: colors.semanticText.error }, onClick: () => handleColumnDelete(colId), transition: "color 0.2s ease", flexShrink: 0 })), !(canDelete &&
408
409
  hoveredColumn === colId &&
409
410
  column.items.length > 0) && (0, jsx_runtime_1.jsx)(react_2.Box, { width: "16px", height: "16px", flexShrink: 0 })] })] })), !isColCollapsed && ((0, jsx_runtime_1.jsxs)(react_2.Box, { px: 2, flex: "1", overflowY: "auto", width: "100%", sx: {
411
+ ...(0, scrollbar_1.scrollbarStyles)(colors),
410
412
  overflowY: "auto",
411
413
  overflowX: "hidden",
412
- scrollbarWidth: "thin",
413
- scrollbarColor: `${colors.gray[300]} transparent`,
414
- "&::-webkit-scrollbar": {
415
- width: "6px !important",
416
- height: "6px !important",
417
- },
418
- "&::-webkit-scrollbar-track": {
419
- background: colors.gray[100],
420
- borderRadius: "base",
421
- marginTop: "4px",
422
- marginBottom: "4px",
423
- },
424
- "&::-webkit-scrollbar-thumb": {
425
- background: colors.gray[300],
426
- borderRadius: "base",
427
- border: "1px solid",
428
- borderColor: colors.gray[100],
429
- },
430
- "&::-webkit-scrollbar-thumb:hover": {
431
- background: colors.gray[400],
432
- },
433
- "&": {
434
- scrollbarGutter: "stable both-edges",
435
- },
414
+ "&": { scrollbarGutter: "stable both-edges" },
436
415
  cursor: canDrag ? "grab" : "not-allowed",
437
416
  }, children: [(noItems === null || noItems === void 0 ? void 0 : noItems.isVisible) && column.items.length === 0 && ((0, jsx_runtime_1.jsx)(NoItemsTemplate, { column: column, noItems: noItems, colors: colors })), virtualization ? ((0, jsx_runtime_1.jsx)(react_window_1.VariableSizeList, { ref: (el) => {
438
417
  if (el)
@@ -447,26 +426,7 @@ const KanbanBoard = ({ data, customColumns, customizeColumn, onDrag, onDelete, o
447
426
  return null;
448
427
  const showAddColumn = Boolean(customizeColumn === null || customizeColumn === void 0 ? void 0 : customizeColumn.isVisible);
449
428
  const hasAnyColumns = Object.keys(columns).length > 0;
450
- const flexScrollSx = {
451
- "&::-webkit-scrollbar": {
452
- height: "6px",
453
- },
454
- "&::-webkit-scrollbar-track": {
455
- background: colors.gray[100],
456
- borderRadius: "base",
457
- margin: "0 4px",
458
- },
459
- "&::-webkit-scrollbar-thumb": {
460
- background: colors.gray[400],
461
- borderRadius: "base",
462
- border: `1px solid ${colors.gray[100]}`,
463
- },
464
- "&::-webkit-scrollbar-thumb:hover": {
465
- background: colors.gray[500],
466
- },
467
- scrollbarWidth: "thin",
468
- scrollbarColor: `${colors.gray[400]} ${colors.gray[100]}`,
469
- };
429
+ const flexScrollSx = (0, scrollbar_1.scrollbarStyles)(colors);
470
430
  const addColumnBox = !isBoardLoading && showAddColumn && hasAnyColumns && ((0, jsx_runtime_1.jsx)(react_2.Box, { width: columnWidth, borderRadius: "lg", border: `0.125rem dashed ${colors.boxborder[500]}`, bg: colors.background[100], flexShrink: 0, height: `${containerHeight - 60}px`, display: "flex", alignItems: "center", justifyContent: "center", cursor: "pointer", _hover: { borderColor: colors.primary[500] }, onClick: () => { var _a; return (_a = customizeColumn === null || customizeColumn === void 0 ? void 0 : customizeColumn.onAddColumn) === null || _a === void 0 ? void 0 : _a.call(customizeColumn); }, children: (0, jsx_runtime_1.jsxs)(react_2.Flex, { direction: "column", align: "center", gap: 2, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { as: lucide_react_1.Plus, size: 20, color: colors.text[700] }), (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: "sm", color: colors.text[600], children: (customizeColumn === null || customizeColumn === void 0 ? void 0 : customizeColumn.buttonText) || "Add column" })] }) }));
471
431
  const columnsList = Object.entries(columns).map(([colId, column], colIndex) => {
472
432
  const isColCollapsed = enableColumnCollapse && Boolean(collapsedColumns[colId]);
@@ -9,7 +9,7 @@ const lucide_react_1 = require("lucide-react");
9
9
  const Button_1 = __importDefault(require("../Button/Button"));
10
10
  const UpgradeButton_1 = __importDefault(require("../UpgradeButton/UpgradeButton"));
11
11
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
12
- const accentText_1 = require("../../Theme/tokens/builders/accentText");
12
+ const gradientInk_1 = require("../../Theme/tokens/builders/gradientInk");
13
13
  const limitReachedCopy_1 = require("./limitReachedCopy");
14
14
  const KIND_ICON = {
15
15
  record: lucide_react_1.Crown,
@@ -24,10 +24,9 @@ const LimitReachedModal = ({ isOpen, onClose, kind, limit = null, used = null, c
24
24
  const copy = (0, limitReachedCopy_1.resolveLimitCopy)(kind, canManageBilling);
25
25
  const usage = (0, limitReachedCopy_1.formatLimitUsage)(kind, used, limit);
26
26
  const KindIcon = KIND_ICON[kind];
27
- const gradient = colors.gradient;
28
- // Header banner uses the brand gradient (not a fixed blue/purple) so it reads correctly
29
- // across all 9 brand themes, with ink picked for AA against whichever stop is lighter.
30
- const ink = (0, accentText_1.onGradient)(gradient.from, gradient.to, colors.white, colors.black);
27
+ // Header banner uses the brand gradient so it reads correctly across all 9 brands.
28
+ const gradient = (0, gradientInk_1.resolveGradient)(colors.gradient, colors.white, colors.black);
29
+ const ink = gradient.ink;
31
30
  return ((0, jsx_runtime_1.jsxs)(react_1.Modal, { isOpen: isOpen, onClose: onClose, isCentered: true, size: "lg", motionPreset: "slideInBottom", children: [(0, jsx_runtime_1.jsx)(react_1.ModalOverlay, { backdropFilter: "blur(5px)" }), (0, jsx_runtime_1.jsxs)(react_1.ModalContent, { borderRadius: "xl", overflow: "hidden", boxShadow: "2xl", mx: 4, children: [(0, jsx_runtime_1.jsxs)(react_1.Box, { bgGradient: `linear(to-r, ${gradient.from}, ${gradient.to})`, color: ink, children: [(0, jsx_runtime_1.jsx)(react_1.ModalHeader, { pb: 4, children: (0, jsx_runtime_1.jsxs)(react_1.Flex, { align: "center", children: [(0, jsx_runtime_1.jsx)(react_1.Icon, { as: KindIcon, boxSize: "24px", mr: "12px" }), (0, jsx_runtime_1.jsx)(react_1.Text, { fontSize: "xl", fontWeight: "bold", children: title !== null && title !== void 0 ? title : copy.title })] }) }), (0, jsx_runtime_1.jsx)(react_1.ModalCloseButton, { "aria-label": "Dismiss", color: ink, _hover: { opacity: 0.7 } })] }), (0, jsx_runtime_1.jsxs)(react_1.ModalBody, { py: 6, children: [(0, jsx_runtime_1.jsx)(react_1.Text, { textAlign: "center", fontSize: "md", fontWeight: 600, color: colors.text[700], children: message !== null && message !== void 0 ? message : copy.message }), usage && ((0, jsx_runtime_1.jsx)(react_1.Text, { textAlign: "center", fontSize: "sm", color: colors.textMuted, mt: 2, children: usage })), features && features.length > 0 && ((0, jsx_runtime_1.jsx)(react_1.List, { spacing: 2, mt: 5, children: features.map((feature) => ((0, jsx_runtime_1.jsxs)(react_1.ListItem, { display: "flex", alignItems: "center", fontSize: "sm", color: colors.text[600], children: [(0, jsx_runtime_1.jsx)(react_1.ListIcon, { as: lucide_react_1.CheckCircle, color: colors.semanticText.success }), feature] }, feature))) }))] }), (0, jsx_runtime_1.jsx)(react_1.Divider, {}), (0, jsx_runtime_1.jsx)(react_1.ModalFooter, { children: (0, jsx_runtime_1.jsxs)(react_1.HStack, { spacing: 3, children: [(0, jsx_runtime_1.jsx)(Button_1.default, { label: canManageBilling ? "Maybe later" : "Close", variant: "outline", colorScheme: "gray", size: "md", onClick: onClose }), canManageBilling && ((0, jsx_runtime_1.jsx)(UpgradeButton_1.default, { label: "Upgrade plan", size: "md", onClick: () => onUpgrade === null || onUpgrade === void 0 ? void 0 : onUpgrade() }))] }) })] })] }));
32
31
  };
33
32
  exports.default = LimitReachedModal;
@@ -61,7 +61,7 @@ function MultiSelect({ value, onValueChange, width = "100%", label = "label", is
61
61
  // surface up to `muted` (lightest); [500] fails there, [800] clears all with margin.
62
62
  borderColor: error || localError
63
63
  ? theme.colors.semanticText.error
64
- : theme.colors.boxborder[800], borderRadius: "lg", bg: theme.colors.gray[50], minH: s.minH, transition: "border-color 0.2s, box-shadow 0.2s", _focusWithin: {
64
+ : theme.colors.boxborder[500], borderRadius: "lg", bg: theme.colors.gray[50], minH: s.minH, transition: "border-color 0.2s, box-shadow 0.2s", _focusWithin: {
65
65
  borderColor: error || localError
66
66
  ? theme.colors.semanticText.error
67
67
  : theme.colors.primary[500],
@@ -65,11 +65,11 @@ const OrgSwitcher = ({ organizations, value, onChange, isLoading = false, isSear
65
65
  focusOption(filtered.length - 1);
66
66
  }
67
67
  }, [activeIndex, filtered.length, focusOption]);
68
- // boxborder[800], not raw gray[200]: this styles a real `<button>` (Flex as="button" below),
68
+ // boxborder[500], not raw gray[200]: this styles a real `<button>` (Flex as="button" below),
69
69
  // so its border is a control boundary — WCAG 1.4.11 needs >=3.0 against any named surface up
70
70
  // to `muted` (lightest); gray[200] fails there in dark mode.
71
71
  const triggerStyles = triggerVariant === "outline"
72
- ? { border: "1px solid", borderColor: theme.colors.boxborder[800], bg: theme.colors.background[50] }
72
+ ? { border: "1px solid", borderColor: theme.colors.boxborder[500], bg: theme.colors.background[50] }
73
73
  : triggerVariant === "subtle"
74
74
  ? { bg: theme.colors.gray[50] }
75
75
  : { bg: "transparent" };
@@ -11,7 +11,7 @@ function PinInputs({ otp, mask, defaultValue, placeholder, manageFocus, errorBor
11
11
  // [800], not [300]/[700]: WCAG 1.4.11 needs >=3.0 for a control boundary, measured
12
12
  // against the parent surface — up to `muted` (lightest). [700] fails there (2.41-2.72);
13
13
  // [800] clears all named surfaces with margin (3.44-3.90).
14
- borderColor: theme.colors.boxborder[800], _focus: {
14
+ borderColor: theme.colors.boxborder[500], _focus: {
15
15
  borderColor: theme.colors.primary[500],
16
16
  boxShadow: `0 0 0 0.063rem ${theme.colors.primary[500]}`,
17
17
  } }, index))) }) })] }));
@@ -4,7 +4,7 @@ const jsx_runtime_1 = require("react/jsx-runtime");
4
4
  const react_1 = require("@chakra-ui/react");
5
5
  const lucide_react_1 = require("lucide-react");
6
6
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
7
- const accentText_1 = require("../../Theme/tokens/builders/accentText");
7
+ const gradientInk_1 = require("../../Theme/tokens/builders/gradientInk");
8
8
  const planPillGradient_1 = require("./planPillGradient");
9
9
  const TONE_ICON = {
10
10
  normal: lucide_react_1.Sparkles,
@@ -15,15 +15,15 @@ const PlanPill = ({ label, mobileLabel, status, tone = "normal", icon, gradient,
15
15
  const theme = (0, useCustomTheme_1.useCustomTheme)();
16
16
  const c = theme.colors;
17
17
  const toneGradient = {
18
- normal: (0, planPillGradient_1.inkSafeGradient)(c.gradient),
18
+ normal: c.gradient,
19
19
  warning: (0, planPillGradient_1.statusGradient)(c.semantic.warning),
20
20
  danger: (0, planPillGradient_1.statusGradient)(c.semantic.error),
21
21
  };
22
- const resolved = (0, planPillGradient_1.inkSafeGradient)(gradient !== null && gradient !== void 0 ? gradient : toneGradient[tone]);
23
- const ink = (0, accentText_1.onGradient)(resolved.from, resolved.to, c.white, c.black);
22
+ const resolved = (0, gradientInk_1.resolveGradient)(gradient !== null && gradient !== void 0 ? gradient : toneGradient[tone], c.white, c.black);
23
+ const ink = resolved.ink;
24
24
  const Icon = icon === undefined ? TONE_ICON[tone] : icon;
25
25
  const hasMobile = !!mobileLabel && mobileLabel !== label;
26
- return ((0, jsx_runtime_1.jsxs)(react_1.Box, { as: "button", type: "button", "aria-label": ariaLabel || (status ? `${label} — ${status}` : label), onClick: onClick, display: "inline-flex", alignItems: "center", gap: "7px", pl: "12px", pr: status ? "5px" : "12px", py: "3px", bgImage: `linear-gradient(135deg, ${resolved.from} 0%, ${resolved.to} 100%)`, color: ink, borderRadius: "full", whiteSpace: "nowrap", cursor: "pointer", transition: "transform 0.2s ease, box-shadow 0.2s ease", _hover: {
26
+ return ((0, jsx_runtime_1.jsxs)(react_1.Box, { as: "button", type: "button", "aria-label": ariaLabel || (status ? `${label} — ${status}` : label), onClick: onClick, display: "inline-flex", alignItems: "center", gap: "7px", pl: "12px", pr: status ? "5px" : "12px", py: "3px", bgImage: (0, gradientInk_1.gradientCss)(resolved), color: ink, borderRadius: "full", whiteSpace: "nowrap", cursor: "pointer", transition: "transform 0.2s ease, box-shadow 0.2s ease", _hover: {
27
27
  transform: "translateY(-1px)",
28
28
  boxShadow: `0 6px 18px ${resolved.from}59`,
29
29
  }, _focusVisible: {
@@ -5,20 +5,8 @@ export type Gradient = {
5
5
  };
6
6
  export declare const STATUS_INK = "#ffffff";
7
7
  /**
8
- * The plan badge's `normal` tone is a single fixed accent not brand-driven, and
9
- * not mode-dependent.
10
- *
11
- * Its tone carries meaning (normal / warning / danger), and a brand gradient can
12
- * collide with that: rosewood's `#c74962 → #ea0727` is red, so a healthy plan
13
- * rendered as if it had expired. Greyscale brands failed the other way, sinking
14
- * the badge into the header chrome.
15
- *
16
- * One accent for both color modes is deliberate: a lighter dark-mode variant was
17
- * tried and flipped `onGradient`'s ink to black, which read as a washed-out candy
18
- * pill on dark chrome. These stops keep white ink in both modes, so the badge looks
19
- * like the same component everywhere. Verified at AA (>= 4.5:1) on both stops.
20
- *
21
- * Consumers who genuinely want another colour still pass `gradient`.
8
+ * Opt-in accent for consumers who want a fixed badge colour instead of the brand `gradient`.
9
+ * One hue, like every brand gradient — a second hue reads as a status change, not a style.
22
10
  */
23
11
  export declare const ACCENT_GRADIENT: Gradient;
24
12
  /**
@@ -5,22 +5,10 @@ const statusTone_1 = require("../../Theme/tokens/builders/statusTone");
5
5
  const color_1 = require("../../Theme/tokens/builders/color");
6
6
  exports.STATUS_INK = "#ffffff";
7
7
  /**
8
- * The plan badge's `normal` tone is a single fixed accent not brand-driven, and
9
- * not mode-dependent.
10
- *
11
- * Its tone carries meaning (normal / warning / danger), and a brand gradient can
12
- * collide with that: rosewood's `#c74962 → #ea0727` is red, so a healthy plan
13
- * rendered as if it had expired. Greyscale brands failed the other way, sinking
14
- * the badge into the header chrome.
15
- *
16
- * One accent for both color modes is deliberate: a lighter dark-mode variant was
17
- * tried and flipped `onGradient`'s ink to black, which read as a washed-out candy
18
- * pill on dark chrome. These stops keep white ink in both modes, so the badge looks
19
- * like the same component everywhere. Verified at AA (>= 4.5:1) on both stops.
20
- *
21
- * Consumers who genuinely want another colour still pass `gradient`.
8
+ * Opt-in accent for consumers who want a fixed badge colour instead of the brand `gradient`.
9
+ * One hue, like every brand gradient — a second hue reads as a status change, not a style.
22
10
  */
23
- exports.ACCENT_GRADIENT = { from: "#8B3FC8", to: "#df187a" };
11
+ exports.ACCENT_GRADIENT = { from: "#8b3fc8", to: "#762d9d" };
24
12
  /**
25
13
  * Sinks both stops until WHITE ink clears AA, keeping each stop's hue. Any mid-tone gradient —
26
14
  * a brand `gradient` token, a status scale — otherwise flips `onGradient` to black ink, so the
@@ -109,7 +109,7 @@ const ProductPrice = ({ options, size, onSelect, rightSlot }) => {
109
109
  }, templateColumns: { base: '1fr auto', md: '1fr auto' },
110
110
  // columnGap={{ base: 2, md: 3 }}
111
111
  // rowGap={{ base: 1.5, md: 2 }}
112
- alignItems: "center", children: [(0, jsx_runtime_1.jsx)(react_2.HStack, { gridColumn: 1, gridRow: 1, spacing: 2, align: "center", minW: 0, mb: 0, children: (0, jsx_runtime_1.jsx)(react_2.Box, { flex: "1", minW: 0, children: (0, jsx_runtime_1.jsx)(OverflowTooltipText_1.default, { placement: "top", maxWidth: "100%", fontSize: { base: "xs", md: "sm" }, fontWeight: "medium", whiteSpace: "nowrap", children: option.label }) }) }), (0, jsx_runtime_1.jsx)(react_2.Box, { gridColumn: 1, gridRow: 2, mt: 0, textAlign: "left", children: (0, jsx_runtime_1.jsxs)(react_2.HStack, { spacing: 2, align: "center", children: [option.offer > 0 && ((0, jsx_runtime_1.jsx)(react_2.Badge, { bg: theme.colors.green[100], color: (0, accentText_1.accentTextOnCanvas)(theme.colors.green, theme.colors.green[100]), borderRadius: "md", px: { base: 0, md: 0.5 }, py: { base: 0, md: 0.25 }, fontWeight: "bold", fontSize: "10px", flexShrink: 0, children: isMobile ? `${option.offer}%` : `${option.offer}% OFF` })), (0, jsx_runtime_1.jsxs)(react_2.Text, { fontSize: "sm", fontWeight: "bold", color: (0, accentText_1.accentTextOnCanvas)(theme.colors.red, isSelected ? theme.colors.red[50] : theme.colors.background[50]), whiteSpace: "nowrap", children: ["\u20B9", discounted] }), option.offer > 0 && ((0, jsx_runtime_1.jsxs)(react_2.Text, { fontSize: "xs", color: theme.colors.textMuted, textDecoration: "line-through", whiteSpace: "nowrap", children: ["\u20B9", option.price] }))] }) }), (0, jsx_runtime_1.jsx)(react_2.Box, { gridColumn: 2, gridRow: 1, ml: { base: 0, md: 0 }, justifySelf: "end", w: { base: "0.625rem", md: "0.75rem" }, h: { base: "0.625rem", md: "0.75rem" }, minW: { base: "0.625rem", md: "0.75rem" }, borderRadius: "full", border: "0.125rem solid", borderColor: isSelected ? theme.colors.red[500] : theme.colors.boxborder[800], bg: theme.colors.background[50], display: "flex", alignItems: "center", justifyContent: "center", boxShadow: "none", children: isSelected && ((0, jsx_runtime_1.jsx)(react_2.Box, { w: { base: "0.25rem", md: "0.3125rem" }, h: { base: "0.25rem", md: "0.3125rem" }, bg: theme.colors.red[500], borderRadius: "full" })) })] }, option.var_id));
112
+ alignItems: "center", children: [(0, jsx_runtime_1.jsx)(react_2.HStack, { gridColumn: 1, gridRow: 1, spacing: 2, align: "center", minW: 0, mb: 0, children: (0, jsx_runtime_1.jsx)(react_2.Box, { flex: "1", minW: 0, children: (0, jsx_runtime_1.jsx)(OverflowTooltipText_1.default, { placement: "top", maxWidth: "100%", fontSize: { base: "xs", md: "sm" }, fontWeight: "medium", whiteSpace: "nowrap", children: option.label }) }) }), (0, jsx_runtime_1.jsx)(react_2.Box, { gridColumn: 1, gridRow: 2, mt: 0, textAlign: "left", children: (0, jsx_runtime_1.jsxs)(react_2.HStack, { spacing: 2, align: "center", children: [option.offer > 0 && ((0, jsx_runtime_1.jsx)(react_2.Badge, { bg: theme.colors.green[100], color: (0, accentText_1.accentTextOnCanvas)(theme.colors.green, theme.colors.green[100]), borderRadius: "md", px: { base: 0, md: 0.5 }, py: { base: 0, md: 0.25 }, fontWeight: "bold", fontSize: "10px", flexShrink: 0, children: isMobile ? `${option.offer}%` : `${option.offer}% OFF` })), (0, jsx_runtime_1.jsxs)(react_2.Text, { fontSize: "sm", fontWeight: "bold", color: (0, accentText_1.accentTextOnCanvas)(theme.colors.red, isSelected ? theme.colors.red[50] : theme.colors.background[50]), whiteSpace: "nowrap", children: ["\u20B9", discounted] }), option.offer > 0 && ((0, jsx_runtime_1.jsxs)(react_2.Text, { fontSize: "xs", color: theme.colors.textMuted, textDecoration: "line-through", whiteSpace: "nowrap", children: ["\u20B9", option.price] }))] }) }), (0, jsx_runtime_1.jsx)(react_2.Box, { gridColumn: 2, gridRow: 1, ml: { base: 0, md: 0 }, justifySelf: "end", w: { base: "0.625rem", md: "0.75rem" }, h: { base: "0.625rem", md: "0.75rem" }, minW: { base: "0.625rem", md: "0.75rem" }, borderRadius: "full", border: "0.125rem solid", borderColor: isSelected ? theme.colors.red[500] : theme.colors.boxborder[500], bg: theme.colors.background[50], display: "flex", alignItems: "center", justifyContent: "center", boxShadow: "none", children: isSelected && ((0, jsx_runtime_1.jsx)(react_2.Box, { w: { base: "0.25rem", md: "0.3125rem" }, h: { base: "0.25rem", md: "0.3125rem" }, bg: theme.colors.red[500], borderRadius: "full" })) })] }, option.var_id));
113
113
  }) }) })), (0, jsx_runtime_1.jsxs)(react_2.Flex, { mt: 2, w: "full", gap: 3, direction: { base: "column", md: "row" }, align: { base: "flex-start", md: "center" }, justify: { base: "flex-start", md: rightSlot ? "space-between" : "flex-start" }, children: [(0, jsx_runtime_1.jsxs)(react_2.Box, { display: "flex", alignItems: "center", fontSize: cfg.price, gap: 2, minW: 0, children: [selected.offer > 0 && ((0, jsx_runtime_1.jsxs)(react_2.Text, { color: theme.colors.textMuted, textDecoration: "line-through", children: ["\u20B9", selected.price] })), (0, jsx_runtime_1.jsxs)(react_2.Text, { color: (0, accentText_1.accentTextOnCanvas)(theme.colors.red, theme.colors.backgroundColor.main), fontWeight: "semibold", children: ["\u20B9", getDiscountedPrice(selected)] })] }), rightSlot && ((0, jsx_runtime_1.jsx)(react_2.Box, { flexShrink: 0, mt: { base: 2, md: 0 }, children: rightSlot }))] })] }));
114
114
  };
115
115
  exports.default = ProductPrice;
@@ -23,7 +23,7 @@ const ProfileCardFooter = ({ children, }) => {
23
23
  exports.ProfileCardFooter = ProfileCardFooter;
24
24
  function ProfileCard({ maxW, align, variant, direction, justify, children, size, color, overflow, dividercolor, dividersize = "0.5px", dividervariant = "solid", CardStyle, CardHeaderStyle, CardBodyStyle, borderTopColor, borderLeftColor, }) {
25
25
  const { colors } = (0, useCustomTheme_1.useCustomTheme)();
26
- const resolvedDividerColor = dividercolor !== null && dividercolor !== void 0 ? dividercolor : colors.border[400];
26
+ const resolvedDividerColor = dividercolor !== null && dividercolor !== void 0 ? dividercolor : colors.border[200];
27
27
  const accentBorder = `2px solid ${colors.primary[500]}`;
28
28
  const isReactElement = (child) => {
29
29
  return child !== null && typeof child === "object" && "type" in child;
@@ -38,7 +38,7 @@ function ProfilePhotoViewer({ photoUrl, onPhotoChange, imageWidth = "100px", ima
38
38
  // [800], not [300]: the edit IconButton's border is a control boundary — WCAG 1.4.11 needs
39
39
  // >=3.0 against any named surface up to `muted` (lightest); [300] fails there, [800] clears
40
40
  // all with margin.
41
- const border = c.boxborder[800];
41
+ const border = c.boxborder[500];
42
42
  // Shared modern frame for whichever media we render (photo / pdf / fallback).
43
43
  const mediaFrame = {
44
44
  boxSize: imageWidth,
@@ -17,7 +17,7 @@ const ReorderList = ({ label = "", items, onReorder, showRemoveIcon = false, onR
17
17
  };
18
18
  return ((0, jsx_runtime_1.jsxs)(react_1.Box, { borderWidth: "0.063rem", borderRadius: "md", px: 3, py: 2, bg: colors.background[50], children: [(0, jsx_runtime_1.jsxs)(react_1.Box, { display: "flex", alignItems: "center", gap: 2, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.BetweenHorizonalStart, {}), (0, jsx_runtime_1.jsx)(react_1.Text, { fontFamily: "open-sans, sans-serif", fontWeight: 600, fontSize: 14, lineHeight: "100%", letterSpacing: "4%", textTransform: "uppercase", py: 4, children: label })] }), (0, jsx_runtime_1.jsx)(react_1.Divider, {}), (0, jsx_runtime_1.jsx)("br", {}), (0, jsx_runtime_1.jsx)(dnd_1.DragDropContext, { onDragEnd: handleDragEnd, children: (0, jsx_runtime_1.jsx)(dnd_1.Droppable, { droppableId: "item-list", direction: "horizontal", children: (provided) => ((0, jsx_runtime_1.jsxs)(react_1.HStack, { ref: provided.innerRef, ...provided.droppableProps, spacing: 4, overflowX: "auto", children: [items.map((item, index) => ((0, jsx_runtime_1.jsx)(dnd_1.Draggable, { draggableId: item.id, index: index, children: (provided) => {
19
19
  var _a;
20
- return ((0, jsx_runtime_1.jsxs)(react_1.Box, { ref: provided.innerRef, ...provided.draggableProps, ...provided.dragHandleProps, position: "relative", border: "0.063rem solid", borderColor: colors.boxborder[300], borderRadius: "md", overflow: "hidden", children: [(0, jsx_runtime_1.jsx)(react_1.Image, { src: item.previewUrl, alt: (_a = item.name) !== null && _a !== void 0 ? _a : `item-${index}`, boxSize: "7.5rem", objectFit: "cover" }), (0, jsx_runtime_1.jsx)(react_1.IconButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.GripVertical, { size: 16, color: colors.textMuted }), "aria-label": "Drag", size: "sm", position: "absolute", top: 1, left: 1, variant: "ghost" }), (0, jsx_runtime_1.jsx)(react_1.Badge, { position: "absolute", colorScheme: "gray", variant: "solid", bottom: 1, right: 1, children: index + 1 }), showRemoveIcon && ((0, jsx_runtime_1.jsx)(react_1.IconButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { size: 16, color: colors.semanticText.error }), "aria-label": "Remove", size: "sm", position: "absolute", top: 1, right: 1, variant: "ghost", onClick: () => onRemove === null || onRemove === void 0 ? void 0 : onRemove(item.id) }))] }));
20
+ return ((0, jsx_runtime_1.jsxs)(react_1.Box, { ref: provided.innerRef, ...provided.draggableProps, ...provided.dragHandleProps, position: "relative", border: "0.063rem solid", borderColor: colors.boxborder[200], borderRadius: "md", overflow: "hidden", children: [(0, jsx_runtime_1.jsx)(react_1.Image, { src: item.previewUrl, alt: (_a = item.name) !== null && _a !== void 0 ? _a : `item-${index}`, boxSize: "7.5rem", objectFit: "cover" }), (0, jsx_runtime_1.jsx)(react_1.IconButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.GripVertical, { size: 16, color: colors.textMuted }), "aria-label": "Drag", size: "sm", position: "absolute", top: 1, left: 1, variant: "ghost" }), (0, jsx_runtime_1.jsx)(react_1.Badge, { position: "absolute", colorScheme: "gray", variant: "solid", bottom: 1, right: 1, children: index + 1 }), showRemoveIcon && ((0, jsx_runtime_1.jsx)(react_1.IconButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { size: 16, color: colors.semanticText.error }), "aria-label": "Remove", size: "sm", position: "absolute", top: 1, right: 1, variant: "ghost", onClick: () => onRemove === null || onRemove === void 0 ? void 0 : onRemove(item.id) }))] }));
21
21
  } }, item.id))), provided.placeholder] })) }) })] }));
22
22
  };
23
23
  exports.default = ReorderList;
@@ -0,0 +1,13 @@
1
+ import React, { ReactNode } from "react";
2
+ import { ScrollbarVariant } from "../../Theme/tokens/builders/scrollbar";
3
+ export interface ScrollbarBoxProps {
4
+ children: ReactNode;
5
+ height?: string;
6
+ maxHeight?: string;
7
+ overflowX?: string;
8
+ overflowY?: string;
9
+ variant?: ScrollbarVariant;
10
+ scrollContainerRef?: React.Ref<HTMLDivElement> | null;
11
+ }
12
+ declare const ScrollbarBox: React.FC<ScrollbarBoxProps>;
13
+ export default ScrollbarBox;