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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/COMPONENT-GOTCHAS.md +26 -3
  3. package/DESIGN-GUIDE.md +1 -0
  4. package/dist/Components/Button/Button.styles.js +7 -2
  5. package/dist/Components/Dropdown/DropDown.js +2 -9
  6. package/dist/Components/FilePreview/FilePreview.js +2 -1
  7. package/dist/Components/FileUploader/FileUploader.js +4 -0
  8. package/dist/Components/FileUploader/FileUploaderProps.d.ts +1 -1
  9. package/dist/Components/Input/TextInput.styles.js +10 -6
  10. package/dist/Components/KanbanBoard/KanbanBoard.js +6 -5
  11. package/dist/Components/NavigationBar/NavigationBar.js +2 -1
  12. package/dist/Components/OrgSwitcher/OrgSwitcher.js +2 -4
  13. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +6 -5
  14. package/dist/Components/ScrollToTop/ScrollToTop.js +4 -3
  15. package/dist/Components/SearchSelect/SearchSelect.js +4 -16
  16. package/dist/Components/Select/SelectPopup.js +1 -3
  17. package/dist/Components/Select/optionRowInk.d.ts +12 -0
  18. package/dist/Components/Select/optionRowInk.js +10 -1
  19. package/dist/Components/SelectSearch/SelectSearch.js +1 -10
  20. package/dist/Components/Table/Table.js +3 -2
  21. package/dist/Components/Table/TableProps.d.ts +1 -1
  22. package/dist/Components/Table/components/TableBody.js +9 -1
  23. package/dist/Components/Table/components/TableHeader.js +7 -2
  24. package/dist/Components/Table/components/TableLoading.d.ts +4 -1
  25. package/dist/Components/Table/components/TableLoading.js +6 -5
  26. package/dist/Components/Table/filters/CompactSelect.js +1 -10
  27. package/dist/Components/Table/variants/TableVariantContext.d.ts +1 -1
  28. package/dist/Components/Table/variants/TableVariantContext.js +3 -3
  29. package/dist/Components/WorkspaceWindow/WorkspaceTrayPreview.js +4 -0
  30. package/dist/Components/WorkspaceWindow/WorkspaceWindow.d.ts +2 -2
  31. package/dist/Components/WorkspaceWindow/WorkspaceWindow.js +25 -18
  32. package/dist/Components/WorkspaceWindow/WorkspaceWindowProps.d.ts +38 -2
  33. package/dist/Theme/chakra/Menu.styles.d.ts +8 -0
  34. package/dist/Theme/chakra/Menu.styles.js +7 -0
  35. package/dist/Theme/chakra/componentStyles.d.ts +8 -0
  36. package/dist/Theme/chakra/componentStyles.js +2 -2
  37. package/dist/Theme/tokens/builders/accentText.d.ts +2 -0
  38. package/dist/Theme/tokens/builders/accentText.js +7 -1
  39. package/dist/Theme/tokens/builders/filledSurface.d.ts +5 -1
  40. package/dist/Theme/tokens/builders/filledSurface.js +17 -4
  41. package/dist/Theme/tokens/builders/planeStep.d.ts +1 -0
  42. package/dist/Theme/tokens/builders/planeStep.js +5 -4
  43. package/dist/Utils/table.js +2 -2
  44. package/dist/esm/Components/Button/Button.styles.js +8 -3
  45. package/dist/esm/Components/Dropdown/DropDown.js +2 -9
  46. package/dist/esm/Components/FilePreview/FilePreview.js +3 -2
  47. package/dist/esm/Components/FileUploader/FileUploader.js +4 -0
  48. package/dist/esm/Components/Input/TextInput.styles.js +10 -6
  49. package/dist/esm/Components/KanbanBoard/KanbanBoard.js +6 -5
  50. package/dist/esm/Components/NavigationBar/NavigationBar.js +2 -1
  51. package/dist/esm/Components/OrgSwitcher/OrgSwitcher.js +2 -4
  52. package/dist/esm/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +7 -6
  53. package/dist/esm/Components/ScrollToTop/ScrollToTop.js +5 -4
  54. package/dist/esm/Components/SearchSelect/SearchSelect.js +6 -18
  55. package/dist/esm/Components/Select/SelectPopup.js +2 -4
  56. package/dist/esm/Components/Select/optionRowInk.js +7 -0
  57. package/dist/esm/Components/SelectSearch/SelectSearch.js +2 -11
  58. package/dist/esm/Components/Table/Table.js +4 -3
  59. package/dist/esm/Components/Table/components/TableBody.js +10 -2
  60. package/dist/esm/Components/Table/components/TableHeader.js +9 -4
  61. package/dist/esm/Components/Table/components/TableLoading.js +5 -4
  62. package/dist/esm/Components/Table/filters/CompactSelect.js +2 -11
  63. package/dist/esm/Components/Table/variants/TableVariantContext.js +3 -3
  64. package/dist/esm/Components/WorkspaceWindow/WorkspaceTrayPreview.js +4 -0
  65. package/dist/esm/Components/WorkspaceWindow/WorkspaceWindow.js +26 -19
  66. package/dist/esm/Theme/chakra/Menu.styles.js +7 -0
  67. package/dist/esm/Theme/chakra/componentStyles.js +2 -2
  68. package/dist/esm/Theme/tokens/builders/accentText.js +5 -0
  69. package/dist/esm/Theme/tokens/builders/filledSurface.js +18 -5
  70. package/dist/esm/Theme/tokens/builders/planeStep.js +3 -3
  71. package/dist/esm/Utils/table.js +2 -2
  72. package/dist/esm/index.js +4 -4
  73. package/dist/index.d.ts +5 -5
  74. package/dist/index.js +11 -6
  75. package/package.json +1 -1
@@ -8,7 +8,7 @@ import { TABLE_VARIANTS } from "./variants/index.js";
8
8
  import { TableVariantProvider } from "./variants/TableVariantContext.js";
9
9
  import { isDarkCanvas } from "../../Theme/tokens/builders/accentText.js";
10
10
  import { cardRule } from "../../Theme/tokens/builders/planeStep.js";
11
- import { labelOnFill, solidFillRung, resolveFilledSurface } from "../../Theme/tokens/builders/filledSurface.js";
11
+ import { resolveFilledSurface } from "../../Theme/tokens/builders/filledSurface.js";
12
12
  import Pagination from "./components/Pagination.js";
13
13
  import TableHeader from "./components/TableHeader.js";
14
14
  import TableBody from "./components/TableBody.js";
@@ -43,11 +43,12 @@ export default function Table({ data, columns, onSelection, isLoading, isCheckbo
43
43
  name: "",
44
44
  page: "",
45
45
  orgId: "",
46
- }, paginationMode = "client", infiniteScroll = false, hasMore, isLoadingMore = false, groupLoadMore = false, loadMoreText = "Load more", loadMorePosition = "top", loadMoreChunkSize, noOfRowsPerPage = 50, totalRecords = 0, onPagination, isTableSettings = false, headerActions, onGlobalSearch, onNoOfRowsPerPageChange, paginationSelectOptions, tableMaxHeight, minVisibleRows, maxVisibleRows, autoFitViewport, tableSettings, filterSidebar, loadingSkeletonRows, defaultVisibleColumns, density = "normal", variant = "classic", stripe = false, renderRowDetail, expandedRows, onExpandedRowsChange, groupColors, onAddItem, emptyState, onRefresh, isGlobalSearch = true, }) {
46
+ }, paginationMode = "client", infiniteScroll = false, hasMore, isLoadingMore = false, groupLoadMore = false, loadMoreText = "Load more", loadMorePosition = "top", loadMoreChunkSize, noOfRowsPerPage = 50, totalRecords = 0, onPagination, isTableSettings = false, headerActions, onGlobalSearch, onNoOfRowsPerPageChange, paginationSelectOptions, tableMaxHeight, minVisibleRows, maxVisibleRows, autoFitViewport, tableSettings, filterSidebar, loadingSkeletonRows, defaultVisibleColumns, density = "normal", variant = "studio", stripe = false, renderRowDetail, expandedRows, onExpandedRowsChange, groupColors, onAddItem, emptyState, onRefresh, isGlobalSearch = true, }) {
47
47
  var _a, _b, _c, _d, _e;
48
48
  const theme = useCustomTheme();
49
49
  const prefersReducedMotion = usePrefersReducedMotion();
50
50
  const clearFiltersTone = useMemo(() => resolveFilledSurface(theme.colors.semantic.error, theme.colors), [theme.colors]);
51
+ const clearBadge = useMemo(() => resolveFilledSurface(theme.colors.primary, theme.colors), [theme.colors]);
51
52
  const variantTokens = useMemo(() => TABLE_VARIANTS[variant](theme.colors, isDarkCanvas(theme.colors.backgroundColor.main)), [variant, theme.colors]);
52
53
  const [columnsSearch, setColumnsSearch] = useState({});
53
54
  const detailIdPrefix = useId();
@@ -391,7 +392,7 @@ export default function Table({ data, columns, onSelection, isLoading, isCheckbo
391
392
  ? isFilterModalOpen
392
393
  : !!(filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.isFilterSidebar), display: "inline-flex", alignItems: "center", justifyContent: "center", p: 0, bg: "transparent", border: "none", borderRadius: "md", cursor: "pointer", onClick: filterMode === "modal" ? onFilterModalOpen : filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.filterSidebarToggle, _hover: {
393
394
  color: theme.colors.accentText,
394
- }, sx: focusVisibleStyles(theme.colors), children: _jsx(Icon, { as: Filter, transform: "scaleX(-1)", boxSize: 4, color: sidebarActiveCount > 0 ? theme.colors.accentText : theme.colors.text[500] }) }), sidebarActiveCount > 0 && (_jsx(Box, { as: "button", type: "button", "aria-label": "Clear filters", position: "absolute", top: "-6px", right: "-10px", bg: theme.colors.primary[solidFillRung(theme.colors.primary, theme.colors.white)], color: labelOnFill(theme.colors.primary[solidFillRung(theme.colors.primary, theme.colors.white)], theme.colors.white, theme.colors.black), border: "none", borderRadius: "full", p: "1px", cursor: "pointer", onClick: (e) => {
395
+ }, sx: focusVisibleStyles(theme.colors), children: _jsx(Icon, { as: Filter, transform: "scaleX(-1)", boxSize: 4, color: sidebarActiveCount > 0 ? theme.colors.accentText : theme.colors.text[500] }) }), sidebarActiveCount > 0 && (_jsx(Box, { as: "button", type: "button", "aria-label": "Clear filters", position: "absolute", top: "-6px", right: "-10px", bg: clearBadge.fill, color: clearBadge.color, border: "none", borderRadius: "full", p: "1px", cursor: "pointer", onClick: (e) => {
395
396
  var _a;
396
397
  e.stopPropagation();
397
398
  if (filterSidebar === null || filterSidebar === void 0 ? void 0 : filterSidebar.onClearAllHandler) {
@@ -4,7 +4,7 @@ import React, { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useSta
4
4
  import { flushSync } from "react-dom";
5
5
  import { normalizeTableCellValue, buildTablePalette, pickTableColor } from "../../../Utils/table.js";
6
6
  import { useCustomTheme } from "../../../Theme/useCustomTheme.js";
7
- import { TableBodyLoading } from "./TableLoading.js";
7
+ import { LOADING_PLACEHOLDER_COLUMNS, TableBodyLoading } from "./TableLoading.js";
8
8
  import TableActions from "./TableActions.js";
9
9
  import { ChevronDown, ChevronRight } from "lucide-react";
10
10
  import CheckBox from "../../Checkbox/Checkbox.js";
@@ -384,7 +384,15 @@ const TableBody = ({ data, isCheckbox, columns, startRow, rowsPerPage, columnWid
384
384
  });
385
385
  }, [data]);
386
386
  if (isLoading && data.length === 0) {
387
- return (_jsx(TableBodyLoading, { noOfColumns: totalVisibleColumns, borderColor: theme.colors.boxborder[200], rowsCount: typeof loadingSkeletonRows === "number" ? loadingSkeletonRows : 4, rowHeight: rowHeight }));
387
+ const dataColumns = columns.filter((o) => !o.isHidden).length;
388
+ const cells = [
389
+ ...(isContent ? ["blank"] : []),
390
+ ...(isCheckbox ? ["checkbox"] : []),
391
+ ...(rowDetail ? ["blank"] : []),
392
+ ...Array.from({ length: dataColumns || LOADING_PLACEHOLDER_COLUMNS }, () => "bar"),
393
+ ...(isLink ? ["blank"] : []),
394
+ ];
395
+ return (_jsx(TableBodyLoading, { noOfColumns: cells.length, cells: cells, borderColor: variant.row.ruleColor, rowsCount: typeof loadingSkeletonRows === "number" ? loadingSkeletonRows : 4, rowHeight: rowHeight }));
388
396
  }
389
397
  if (!isLoading && data.length === 0) {
390
398
  return (_jsx(Tr, { backgroundColor: theme.colors.background[50], children: _jsx(Td, { colSpan: totalVisibleColumns, p: 0, border: "none", children: _jsx(TableEmpty, { emptyState: emptyState }) }) }));
@@ -1,5 +1,5 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Spinner, Th, Tr } from "@chakra-ui/react";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { Box, Skeleton, Spinner, Th, Tr } from "@chakra-ui/react";
3
3
  import { memo, useState } from "react";
4
4
  import { calculateLeftOffset } from "../../../Utils/table.js";
5
5
  import { useCustomTheme } from "../../../Theme/useCustomTheme.js";
@@ -13,11 +13,12 @@ import { transitionFor } from "../../../Theme/tokens/primitives/motion.js";
13
13
  import { reducedMotionSx } from "../../../Theme/chakra/motion.js";
14
14
  import { focusVisibleRing } from "../../../Theme/chakra/focusRing.styles.js";
15
15
  import { DETAIL_SLOT_PX, RowDetailHeaderCell } from "./rowDetail.js";
16
+ import { LOADING_PLACEHOLDER_COLUMNS } from "./TableLoading.js";
16
17
  const LABEL_JUSTIFY = { start: "space-between", center: "center", end: "flex-start" };
17
18
  const TableHeader = ({ columns, isCheckbox, handleSort, headerRefs, columnWidths, slotRef, slotWidth, columnsSort, freezedTextColor, noBorders, handleCheckbox, checked, isLoading, isContent, isLink, hasDetail = false, isActionFreeze, setColumnsSearch, columnsSearch, isSelecting, }) => {
18
19
  const [openFilterId, setOpenFilterId] = useState(null);
19
20
  const variant = useTableVariant();
20
- return (_jsxs(Tr, { pr: 0, "aria-rowindex": 1, children: [isContent && _jsx(ContentSpacerCell, { noBorders: noBorders }), isCheckbox && (_jsx(SelectAllCell, { slotRef: slotRef, freezedTextColor: freezedTextColor, noBorders: noBorders, isSelecting: isSelecting, isLoading: isLoading, checked: checked, handleCheckbox: handleCheckbox })), hasDetail && (_jsx(RowDetailHeaderCell, { left: isCheckbox ? slotWidth : 0, bg: variant.header.bg, ruleColor: variant.header.ruleColor, noBorders: noBorders })), columns.map((header, index) => {
21
+ return (_jsxs(Tr, { pr: 0, "aria-rowindex": 1, children: [isContent && _jsx(ContentSpacerCell, { noBorders: noBorders }), isCheckbox && (_jsx(SelectAllCell, { slotRef: slotRef, freezedTextColor: freezedTextColor, noBorders: noBorders, isSelecting: isSelecting, isLoading: isLoading, checked: checked, handleCheckbox: handleCheckbox })), hasDetail && (_jsx(RowDetailHeaderCell, { left: isCheckbox ? slotWidth : 0, bg: variant.header.bg, ruleColor: variant.header.ruleColor, noBorders: noBorders })), isLoading && !columns.some((header) => !(header === null || header === void 0 ? void 0 : header.isHidden)) && (_jsx(LoadingHeaderCells, { noBorders: noBorders })), columns.map((header, index) => {
21
22
  if (header === null || header === void 0 ? void 0 : header.isHidden)
22
23
  return null;
23
24
  return (_jsx(ColumnHeader, { header: header, index: index, columnWidths: columnWidths, slotWidth: slotWidth, detailWidth: hasDetail ? DETAIL_SLOT_PX : 0, handleSort: handleSort, isCheckbox: isCheckbox, noBorders: noBorders, columnsSort: columnsSort, headerRefs: headerRefs, columnsSearch: columnsSearch, setColumnsSearch: setColumnsSearch, openFilterId: openFilterId, setOpenFilterId: setOpenFilterId }, columnLabelText(header)));
@@ -27,8 +28,12 @@ export default memo(TableHeader);
27
28
  const SelectAllCell = memo(({ slotRef, freezedTextColor, noBorders, isSelecting, isLoading, checked, handleCheckbox, }) => {
28
29
  const theme = useCustomTheme();
29
30
  const variant = useTableVariant();
30
- return (_jsx(Th, { ref: slotRef, scope: "col", w: variant.slot.width, minW: variant.slot.width, px: variant.slot.centered ? 0 : undefined, textAlign: variant.slot.centered ? "center" : undefined, fontSize: 14, fontWeight: 600, color: freezedTextColor, textTransform: "capitalize", backgroundColor: variant.header.bg, position: "sticky", className: `columns sticky-columns`, left: "0px", zIndex: 9, borderBottom: noBorders ? "none" : `0.063rem solid ${variant.header.ruleColor}`, children: _jsx(Box, { display: "flex", alignItems: "center", justifyContent: "center", children: isSelecting ? (_jsx(Spinner, { size: "sm", color: theme.colors.accentText })) : (_jsx(CheckBox, { "aria-label": "Select all rows", variant: "outline", onChange: () => handleCheckbox(0), isChecked: isLoading ? false : checked === true, isIndeterminate: checked === "indeterminate" })) }) }));
31
+ return (_jsx(Th, { ref: slotRef, scope: "col", w: variant.slot.width, minW: variant.slot.width, px: variant.slot.centered ? 0 : undefined, textAlign: variant.slot.centered ? "center" : undefined, fontSize: 14, fontWeight: 600, color: freezedTextColor, textTransform: "capitalize", backgroundColor: variant.header.bg, position: "sticky", className: `columns sticky-columns`, left: "0px", zIndex: 9, borderBottom: noBorders ? "none" : `0.063rem solid ${variant.header.ruleColor}`, children: _jsx(Box, { display: "flex", alignItems: "center", justifyContent: "center", children: isSelecting ? (_jsx(Spinner, { size: "sm", color: theme.colors.accentText })) : (_jsx(CheckBox, { "aria-label": "Select all rows", variant: "outline", onChange: () => handleCheckbox(0), isChecked: isLoading ? false : checked === true, isDisabled: isLoading, isIndeterminate: checked === "indeterminate" })) }) }));
31
32
  });
33
+ const LoadingHeaderCells = ({ noBorders }) => {
34
+ const variant = useTableVariant();
35
+ return (_jsx(_Fragment, { children: Array.from({ length: LOADING_PLACEHOLDER_COLUMNS }, (_, i) => (_jsx(Th, { scope: "col", "aria-hidden": "true", px: 3, backgroundColor: variant.header.bg, borderBottom: noBorders ? "none" : `0.063rem solid ${variant.header.ruleColor}`, children: _jsx(Skeleton, { height: "0.75rem", width: i % 2 ? "50%" : "70%", borderRadius: "full", variant: "shine" }) }, i))) }));
36
+ };
32
37
  const ContentSpacerCell = memo(({ noBorders }) => {
33
38
  const variant = useTableVariant();
34
39
  return (_jsx(Th, { scope: "col", w: 6, minW: "35px", p: 0, backgroundColor: variant.header.bg, borderBottom: noBorders ? "none" : `0.063rem solid ${variant.header.ruleColor}`, position: "sticky", className: `columns sticky-columns`, left: "0px", zIndex: 1 }));
@@ -4,8 +4,9 @@ const TableLoading = () => {
4
4
  return (_jsx(Box, { overflowX: "auto", p: 4, children: _jsxs(Table, { variant: "simple", width: "full", children: [_jsx(Thead, { children: _jsxs(Tr, { children: [_jsx(Th, { p: 2, children: _jsx(Skeleton, { height: "20px" }) }), _jsx(Th, { p: 2, children: _jsx(Skeleton, { height: "20px" }) }), _jsx(Th, { p: 2, children: _jsx(Skeleton, { height: "20px" }) }), _jsx(Th, { p: 2, children: _jsx(Skeleton, { height: "20px" }) })] }) }), _jsx(Tbody, { children: Array.from({ length: 5 }).map((_, rowIndex) => (_jsxs(Tr, { children: [_jsx(Td, { p: 2, children: _jsx(SkeletonText, { noOfLines: 1, skeletonHeight: "2" }) }), _jsx(Td, { p: 2, children: _jsx(SkeletonText, { noOfLines: 1, skeletonHeight: "2" }) }), _jsx(Td, { p: 2, children: _jsx(SkeletonText, { noOfLines: 1, skeletonHeight: "2" }) }), _jsx(Td, { p: 2, children: _jsx(SkeletonText, { noOfLines: 1, skeletonHeight: "2" }) })] }, rowIndex))) })] }) }));
5
5
  };
6
6
  export default TableLoading;
7
- export const TableBodyLoading = ({ noOfColumns, borderColor, rowsCount = 4, rowHeight = 45, }) => {
8
- return (_jsx(_Fragment, { children: Array.from({ length: rowsCount }).map((_, index) => {
9
- return (_jsx(Tr, { children: _jsx(Td, { colSpan: noOfColumns, textAlign: "center", border: `1px solid ${borderColor}`, px: 2, pt: 2, pb: 0, height: `${rowHeight}px`, boxSizing: "border-box", children: _jsx(Skeleton, { height: "15px", variant: "shine" }) }) }, index));
10
- }) }));
7
+ export const LOADING_PLACEHOLDER_COLUMNS = 4;
8
+ const BAR_WIDTHS = ["72%", "58%", "84%", "46%", "66%", "78%"];
9
+ export const TableBodyLoading = ({ noOfColumns, cells, borderColor, rowsCount = 4, rowHeight = 45, }) => {
10
+ const layout = cells !== null && cells !== void 0 ? cells : Array.from({ length: noOfColumns }, () => "bar");
11
+ return (_jsx(_Fragment, { children: Array.from({ length: rowsCount }).map((_, row) => (_jsx(Tr, { "aria-hidden": "true", children: layout.map((kind, col) => (_jsxs(Td, { px: kind === "checkbox" ? 0 : 3, py: 0, height: `${rowHeight}px`, boxSizing: "border-box", border: "none", borderBottom: `0.0625rem solid ${borderColor}`, textAlign: kind === "checkbox" ? "center" : undefined, children: [kind === "checkbox" && (_jsx(Skeleton, { boxSize: "1rem", borderRadius: "sm", variant: "shine", display: "inline-block", verticalAlign: "middle" })), kind === "bar" && (_jsx(Skeleton, { height: "0.75rem", width: BAR_WIDTHS[(row * 3 + col) % BAR_WIDTHS.length], borderRadius: "full", variant: "shine" }))] }, col))) }, row))) }));
11
12
  };
@@ -6,7 +6,7 @@ import { useCustomTheme } from "../../../Theme/useCustomTheme.js";
6
6
  import { raisedRule } from "../../../Theme/tokens/builders/surfaceRaised.js";
7
7
  import { listRowBackgrounds } from "../../../Theme/tokens/builders/rowStates.js";
8
8
  import { optionRowSpec, OPTION_ROW_RADIUS } from "../../../Theme/tokens/primitives/optionRowSizes.js";
9
- import { optionRowInk, optionRowWeight } from "../../Select/optionRowInk.js";
9
+ import { optionRowCursorSx, optionRowInk, optionRowWeight } from "../../Select/optionRowInk.js";
10
10
  import { useExclusiveOverlay } from "../../../Hooks/useExclusiveOverlay.js";
11
11
  const CompactSelect = ({ options, value, placeholder = "Select", height = "22px", onSelect, size = "xs" }) => {
12
12
  const theme = useCustomTheme();
@@ -58,18 +58,9 @@ const CompactSelect = ({ options, value, placeholder = "Select", height = "22px"
58
58
  }, sx: { fontSize: "0.75rem", height: "22px" } }), _jsxs(Box, { role: "listbox", "aria-label": placeholder, maxH: "12rem", overflowY: "auto", borderTop: "1px solid", borderColor: raisedRule(theme.colors), onKeyDown: handleListKeyDown, children: [filtered.map((opt, i) => {
59
59
  const selected = (value === null || value === void 0 ? void 0 : value.id) === opt.id;
60
60
  const isActive = i === activeIndex;
61
- const rowBg = selected
62
- ? isActive
63
- ? rowBackgrounds.selectedActive
64
- : rowBackgrounds.selected
65
- : isActive
66
- ? rowBackgrounds.active
67
- : theme.colors.transparent;
68
61
  return (_jsxs(Box, { as: "button", type: "button", role: "option", "aria-selected": selected, tabIndex: isActive ? 0 : -1, ref: (el) => {
69
62
  optionRefs.current[i] = el;
70
- }, w: `calc(100% - 2 * ${spec.mx})`, minH: spec.minH, textAlign: "left", border: "none", fontFamily: "inherit", display: "flex", alignItems: "center", gap: spec.gap, mx: spec.mx, px: spec.px, py: spec.py, borderRadius: OPTION_ROW_RADIUS, cursor: "pointer", color: optionRowInk(theme.colors, selected), fontSize: spec.fontSize, fontWeight: optionRowWeight(selected), _hover: {
71
- bg: selected ? rowBackgrounds.selectedActive : rowBackgrounds.active,
72
- }, bg: rowBg, onClick: () => {
63
+ }, w: `calc(100% - 2 * ${spec.mx})`, minH: spec.minH, textAlign: "left", border: "none", fontFamily: "inherit", display: "flex", alignItems: "center", gap: spec.gap, mx: spec.mx, px: spec.px, py: spec.py, borderRadius: OPTION_ROW_RADIUS, cursor: "pointer", color: optionRowInk(theme.colors, selected), fontSize: spec.fontSize, fontWeight: optionRowWeight(selected), bg: "transparent", ...optionRowCursorSx(rowBackgrounds), onClick: () => {
73
64
  onSelect === null || onSelect === void 0 ? void 0 : onSelect(opt);
74
65
  setIsOpen(false);
75
66
  setQuery("");
@@ -1,13 +1,13 @@
1
1
  import { createContext, useContext, useMemo } from "react";
2
2
  import { useCustomTheme } from "../../../Theme/useCustomTheme.js";
3
3
  import { isDarkCanvas } from "../../../Theme/tokens/builders/accentText.js";
4
- import { classicPreset } from "./classic.js";
4
+ import { studioPreset } from "./studio.js";
5
5
  const TableVariantContext = createContext(null);
6
6
  export const TableVariantProvider = TableVariantContext.Provider;
7
- /** No provider means the table as it always was — the default is a variant, not a gap. */
7
+ /** No provider means the default variant — studio, the same preset `Table` falls back to. */
8
8
  export function useTableVariant() {
9
9
  const provided = useContext(TableVariantContext);
10
10
  const theme = useCustomTheme();
11
11
  const isDark = isDarkCanvas(theme.colors.backgroundColor.main);
12
- return useMemo(() => provided !== null && provided !== void 0 ? provided : classicPreset(theme.colors, isDark), [provided, theme.colors, isDark]);
12
+ return useMemo(() => provided !== null && provided !== void 0 ? provided : studioPreset(theme.colors, isDark), [provided, theme.colors, isDark]);
13
13
  }
@@ -15,7 +15,11 @@ export default function WorkspaceTrayPreview({ children, preview, enabled = true
15
15
  const [open, setOpen] = useState(false);
16
16
  const openTimer = useRef(null);
17
17
  const closeTimer = useRef(null);
18
+ const openRef = useRef(false);
18
19
  const setOpenState = useCallback((next) => {
20
+ if (openRef.current === next)
21
+ return;
22
+ openRef.current = next;
19
23
  setOpen(next);
20
24
  onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(next);
21
25
  }, [onOpenChange]);
@@ -1,11 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Box, Flex, HStack, IconButton, Modal, ModalContent, ModalOverlay, Text, useModalContext, } from "@chakra-ui/react";
2
+ import { Box, Flex, HStack, IconButton, Modal, ModalContent, ModalOverlay, Portal, Text, useModalContext, } from "@chakra-ui/react";
3
3
  import { useEffect } from "react";
4
4
  import { ExternalLink, Minus, X } from "lucide-react";
5
5
  import { useCustomTheme } from "../../Theme/useCustomTheme.js";
6
6
  import zIndices from "../../Theme/tokens/primitives/zIndices.js";
7
7
  import { accentTextOnCanvas } from "../../Theme/tokens/builders/accentText.js";
8
- // NOTE: no maximize/restore toggle (removed by product decision) — onMedium/onMaximize kept optional for back-compat.
8
+ // NOTE: no maximize/restore toggle (removed by product decision); onMedium/onMaximize stay as deprecated no-ops.
9
9
  const WINDOW_SIZE = { maxW: "88rem", h: "92vh" };
10
10
  const WindowTitle = ({ testId, color, children }) => {
11
11
  const { headerId, setHeaderMounted } = useModalContext();
@@ -16,7 +16,8 @@ const WindowTitle = ({ testId, color, children }) => {
16
16
  return (_jsx(Text, { id: headerId, fontSize: "sm", fontWeight: 600, color: color, noOfLines: 1, "data-testid": `${testId}-title`, children: children }));
17
17
  };
18
18
  // Presentational floating "workspace window" (Jira-style dialog), headless — the parent owns window state.
19
- export default function WorkspaceWindow({ title, state, children, onMinimize, onClose, onOpenFullPage, onOverlayClick, headerActions, testId = "workspace-window", }) {
19
+ export default function WorkspaceWindow({ title, state, children, onMinimize, onClose, onOpenFullPage, onOverlayClick, headerActions, labels, finalFocusRef, testId = "workspace-window", }) {
20
+ var _a, _b, _c;
20
21
  // Must run before the early return: a minimized render would otherwise skip the hook
21
22
  // and change hook order when the window reopens.
22
23
  const theme = useCustomTheme();
@@ -26,28 +27,34 @@ export default function WorkspaceWindow({ title, state, children, onMinimize, on
26
27
  return (_jsxs(Modal, { isOpen: true, onClose: () => onClose === null || onClose === void 0 ? void 0 : onClose(), size: "full", isCentered: true, scrollBehavior: "inside",
27
28
  // Don't discard unsaved work on an accidental overlay click / Esc — the
28
29
  // parent decides via the explicit Close control.
29
- closeOnOverlayClick: false, closeOnEsc: false, children: [_jsx(ModalOverlay, { backdropFilter: "blur(3px)" }), _jsx(ModalContent, { bg: "transparent", boxShadow: "none", m: 0, display: "flex", alignItems: "center", justifyContent: "center",
30
+ closeOnOverlayClick: false, closeOnEsc: false, finalFocusRef: finalFocusRef, children: [_jsx(ModalOverlay, { backdropFilter: "blur(3px)" }), _jsx(ModalContent, { bg: "transparent", boxShadow: "none", m: 0, display: "flex", alignItems: "center", justifyContent: "center",
30
31
  // NOTE: size="full" blocks Chakra's own closeOnOverlayClick — detect the outside click ourselves instead.
31
32
  onMouseDown: (e) => {
32
33
  if (e.target === e.currentTarget)
33
34
  onOverlayClick === null || onOverlayClick === void 0 ? void 0 : onOverlayClick();
34
- }, "data-testid": `${testId}-backdrop`, children: _jsxs(Box, { bg: theme.colors.surfaceRaised, borderRadius: "xl", boxShadow: "2xl", overflow: "hidden", w: "100%", maxW: size.maxW, h: size.h, display: "flex", flexDirection: "column", "data-testid": testId, "data-window-state": state, children: [_jsxs(Flex, { align: "center", justify: "space-between", px: 3, py: 2, borderBottomWidth: "1px", borderColor: theme.colors.boxborder[200], bg: theme.colors.background[100], flexShrink: 0, children: [_jsx(WindowTitle, { testId: testId, color: theme.colors.text[700], children: title }), _jsxs(HStack, { spacing: 1, children: [headerActions, onOpenFullPage ? (_jsx(IconButton, { "aria-label": "Open full page", size: "xs", variant: "ghost", icon: _jsx(ExternalLink, { size: 14 }), onClick: onOpenFullPage, "data-testid": `${testId}-fullpage` })) : null, onMinimize ? (_jsx(IconButton, { "aria-label": "Minimize", size: "xs", variant: "ghost", icon: _jsx(Minus, { size: 15 }), onClick: onMinimize, "data-testid": `${testId}-minimize` })) : null, onClose ? (_jsx(IconButton, { "aria-label": "Close", size: "xs", variant: "ghost", colorScheme: "red", icon: _jsx(X, { size: 15 }), onClick: onClose, "data-testid": `${testId}-close` })) : null] })] }), _jsx(Box, { flex: "1", overflow: "auto", px: { base: 3, md: 5 }, py: 4, children: children })] }) })] }));
35
+ }, "data-testid": `${testId}-backdrop`, children: _jsxs(Box, { bg: theme.colors.surfaceRaised, borderRadius: "xl", boxShadow: "2xl", overflow: "hidden", w: "100%", maxW: size.maxW, h: size.h, display: "flex", flexDirection: "column", "data-testid": testId, "data-window-state": state, children: [_jsxs(Flex, { align: "center", justify: "space-between", px: 3, py: 2, borderBottomWidth: "1px", borderColor: theme.colors.boxborder[200], bg: theme.colors.background[100], flexShrink: 0, children: [_jsx(WindowTitle, { testId: testId, color: theme.colors.text[700], children: title }), _jsxs(HStack, { spacing: 1, children: [headerActions, onOpenFullPage ? (_jsx(IconButton, { "aria-label": (_a = labels === null || labels === void 0 ? void 0 : labels.openFullPage) !== null && _a !== void 0 ? _a : "Open full page", size: "xs", variant: "ghost", icon: _jsx(ExternalLink, { size: 14 }), onClick: onOpenFullPage, "data-testid": `${testId}-fullpage` })) : null, onMinimize ? (_jsx(IconButton, { "aria-label": (_b = labels === null || labels === void 0 ? void 0 : labels.minimize) !== null && _b !== void 0 ? _b : "Minimize", size: "xs", variant: "ghost", icon: _jsx(Minus, { size: 15 }), onClick: onMinimize, "data-testid": `${testId}-minimize` })) : null, onClose ? (_jsx(IconButton, { "aria-label": (_c = labels === null || labels === void 0 ? void 0 : labels.close) !== null && _c !== void 0 ? _c : "Close", size: "xs", variant: "ghost", colorScheme: "red", icon: _jsx(X, { size: 15 }), onClick: onClose, "data-testid": `${testId}-close` })) : null] })] }), _jsx(Box, { flex: "1", overflow: "auto", px: { base: 3, md: 5 }, py: 4, children: children })] }) })] }));
35
36
  }
36
- // Bottom tray of restore pills for minimized WorkspaceWindows — presentational, parent supplies handlers.
37
- export function WorkspaceTray({ items, onRestore, onClose, testId = "workspace-tray", renderItem, }) {
37
+ const cssLength = (value) => (typeof value === "number" ? `${value}px` : value);
38
+ // Portalled above modal overlays; aria-live keeps Chakra's modal aria-hidden off it, data-no-focus-lock keeps the focus trap off it.
39
+ export function WorkspaceTray({ items, onRestore, onClose, testId = "workspace-tray", placement = "bottom-end", offset, closeLabel, dirtyLabel = "Unsaved changes", label = "Minimized windows", renderItem, }) {
40
+ var _a, _b;
38
41
  const theme = useCustomTheme();
39
42
  if (!items.length)
40
43
  return null;
41
- return (
42
- // NOTE: floating bottom-right cluster (Gmail/Jira pattern), not a docked bar — needs no reserved page gutter.
43
- _jsx(Flex, { position: "fixed", bottom: 4, right: 4, zIndex: zIndices.modal, direction: "row-reverse", wrap: "wrap-reverse", justify: "flex-start", gap: 2, maxW: { base: "calc(100vw - 2rem)", md: "36rem" }, "data-testid": testId, children: items.map((item) => {
44
- const api = {
45
- restore: () => onRestore === null || onRestore === void 0 ? void 0 : onRestore(item.id),
46
- close: () => onClose === null || onClose === void 0 ? void 0 : onClose(item.id),
47
- };
48
- if (renderItem) {
49
- return _jsx(Box, { children: renderItem(item, api) }, item.id);
50
- }
51
- return (_jsxs(HStack, { spacing: 1, pl: 3, pr: 1, py: 1, borderRadius: "full", bg: theme.colors.primary[100], color: accentTextOnCanvas(theme.colors.primary, theme.colors.primary[100]), boxShadow: "md", borderWidth: "1px", borderColor: theme.colors.primary[200], "data-testid": `${testId}-pill`, children: [_jsx(Box, { as: "button", type: "button", fontSize: "sm", onClick: api.restore, "data-testid": `${testId}-restore`, maxW: "16rem", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", children: item.title }), onClose ? (_jsx(IconButton, { "aria-label": "Close", size: "xs", variant: "ghost", borderRadius: "full", minW: "auto", h: "auto", p: 1, color: "inherit", icon: _jsx(X, { size: 13 }), onClick: api.close, "data-testid": `${testId}-close` })) : null] }, item.id));
52
- }) }));
44
+ const atEnd = placement === "bottom-end";
45
+ const inset = {
46
+ bottom: cssLength((_a = offset === null || offset === void 0 ? void 0 : offset.y) !== null && _a !== void 0 ? _a : "1rem"),
47
+ [atEnd ? "right" : "left"]: cssLength((_b = offset === null || offset === void 0 ? void 0 : offset.x) !== null && _b !== void 0 ? _b : "1rem"),
48
+ };
49
+ const ink = accentTextOnCanvas(theme.colors.primary, theme.colors.primary[100]);
50
+ return (_jsx(Portal, { children: _jsx(Flex, { role: "region", "aria-label": label, "aria-live": "polite", "data-no-focus-lock": "true", position: "fixed", ...inset, zIndex: zIndices.modal + 1, direction: atEnd ? "row-reverse" : "row", wrap: "wrap-reverse", justify: "flex-start", gap: 2, maxW: { base: "calc(100vw - 2rem)", md: "36rem" }, "data-testid": testId, children: items.map((item) => {
51
+ const api = {
52
+ restore: () => onRestore === null || onRestore === void 0 ? void 0 : onRestore(item.id),
53
+ close: () => onClose === null || onClose === void 0 ? void 0 : onClose(item.id),
54
+ };
55
+ if (renderItem) {
56
+ return _jsx(Box, { children: renderItem(item, api) }, item.id);
57
+ }
58
+ return (_jsxs(HStack, { spacing: 1, pl: 3, pr: 1, py: 1, borderRadius: "full", bg: theme.colors.primary[100], color: ink, boxShadow: "md", borderWidth: "1px", borderColor: theme.colors.primary[200], "data-testid": `${testId}-pill`, children: [item.isDirty ? (_jsx(Box, { role: "img", "aria-label": dirtyLabel, boxSize: "0.5rem", borderRadius: "full", bg: "currentColor", flexShrink: 0, "data-testid": `${testId}-dirty` })) : null, _jsxs(Box, { as: "button", type: "button", fontSize: "sm", onClick: api.restore, "data-testid": `${testId}-restore`, maxW: "16rem", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", children: [item.title, item.subtitle ? (_jsx(Box, { as: "span", fontWeight: 400, ml: 1.5, children: item.subtitle })) : null] }), onClose ? (_jsx(IconButton, { "aria-label": closeLabel ? closeLabel(item) : "Close", size: "xs", variant: "ghost", borderRadius: "full", minW: "auto", h: "auto", p: 1, color: "inherit", icon: _jsx(X, { size: 13 }), onClick: api.close, "data-testid": `${testId}-close` })) : null] }, item.id));
59
+ }) }) }));
53
60
  }
@@ -1,6 +1,7 @@
1
1
  import { createMultiStyleConfigHelpers, cssVar } from "@chakra-ui/react";
2
2
  import { menuAnatomy } from "@chakra-ui/anatomy";
3
3
  import { listRowBackgrounds } from "../tokens/builders/rowStates.js";
4
+ import { optionRowInk, optionRowWeight } from "../../Components/Select/optionRowInk.js";
4
5
  import { OPTION_ROW_SIZES, OPTION_ROW_RADIUS } from "../tokens/primitives/optionRowSizes.js";
5
6
  import { paletteOf } from "./paletteFromTheme.js";
6
7
  import { POPUP_SURFACE } from "./overlay.styles.js";
@@ -25,6 +26,7 @@ const baseStyle = definePartsStyle(({ theme }) => {
25
26
  ...POPUP_SURFACE,
26
27
  },
27
28
  item: {
29
+ color: optionRowInk(colors, false),
28
30
  minH: itemRowSpec.minH,
29
31
  px: itemRowSpec.px,
30
32
  py: itemRowSpec.py,
@@ -37,6 +39,11 @@ const baseStyle = definePartsStyle(({ theme }) => {
37
39
  _hover: { [$itemBg.variable]: hoverBg, bg: $itemBg.reference },
38
40
  _active: { [$itemBg.variable]: activeBg, bg: $itemBg.reference },
39
41
  _expanded: { [$itemBg.variable]: hoverBg, bg: $itemBg.reference },
42
+ "&[aria-checked=true]": {
43
+ color: optionRowInk(colors, true),
44
+ fontWeight: optionRowWeight(true),
45
+ "& .chakra-menu__icon-wrapper": { color: colors.accentText },
46
+ },
40
47
  },
41
48
  };
42
49
  });
@@ -23,7 +23,7 @@ import { Card } from "./Card.styles.js";
23
23
  // NOTE: guards untethemed scales (blackAlpha/whiteAlpha) whose rgba() rungs would throw in hexToRgb.
24
24
  const isHexColor = (color) => typeof color === "string" && /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(color);
25
25
  const solidFillStyle = (palette, swatch) => {
26
- const rung = solidFillRung(swatch, palette.white);
26
+ const rung = solidFillRung(swatch, palette.white, palette.backgroundColor.main);
27
27
  const bg = swatch[rung];
28
28
  return {
29
29
  bg,
@@ -158,7 +158,7 @@ const Radio = {
158
158
  baseStyle: ({ theme, colorScheme }) => {
159
159
  const palette = paletteOf(theme);
160
160
  const swatch = scaleFor(palette, colorScheme);
161
- const fill = swatch[solidFillRung(swatch, palette.white)];
161
+ const fill = swatch[solidFillRung(swatch, palette.white, palette.backgroundColor.main)];
162
162
  const dot = labelOnFill(fill, palette.white, palette.black);
163
163
  const hoverFill = resolveHoverTint(fill, fill);
164
164
  return {
@@ -19,6 +19,11 @@ const DARK_CANVAS_LUMINANCE = 0.2;
19
19
  export const isDarkCanvas = (canvas) => relativeLuminance(canvas) < DARK_CANVAS_LUMINANCE;
20
20
  // NOTE: held to AA in both modes now — some brands' light [500] no longer passes through untouched.
21
21
  export const accentTextOnCanvas = (scale, canvas) => pickAccentText(scale, canvas);
22
+ /** Accent ink for chrome that can land on any plane (canvas, card, overlay): the first rung clearing AA on all. */
23
+ export const accentTextOnPlanes = (scale, planes) => {
24
+ const found = SEARCH_ORDER.find((rung) => planes.every((plane) => contrastRatio(scale[rung], plane) >= AA_NORMAL_TEXT));
25
+ return scale[found !== null && found !== void 0 ? found : SEARCH_ORDER[SEARCH_ORDER.length - 1]];
26
+ };
22
27
  // NOTE: white/black must be the mode-stable absolutes, not an adaptive token — always clears AA.
23
28
  export const onFilled = (fill, white, black) => contrastRatio(white, fill) >= AA_NORMAL_TEXT ? white : black;
24
29
  // NOTE: resolves against whichever gradient stop is lighter — the harder case for ink to clear.
@@ -1,6 +1,6 @@
1
1
  import { contrastRatio } from "./color.js";
2
2
  import { AA_NORMAL_TEXT, isDarkCanvas, onFilled } from "./accentText.js";
3
- import { AA_NON_TEXT } from "./outlineRung.js";
3
+ import { AA_NON_TEXT, CHROME_BORDER } from "./outlineRung.js";
4
4
  import { memoize, scaleKey } from "./memo.js";
5
5
  const RUNGS = [50, 100, 200, 300, 400, 500, 600, 700, 800, 900];
6
6
  // NOTE: "darker than [500]" is [600]/[700] in light but [400]/[300] in dark, since dark ramps run dark -> light.
@@ -40,15 +40,28 @@ const steppedRung = (base, canvas, step) => {
40
40
  const dir = isDarkCanvas(canvas) ? -100 : 100;
41
41
  return Math.min(900, Math.max(50, base + dir * step));
42
42
  };
43
- /** Hover (step 0) or active (step 1) fill rung, one step darker than `solidFillRung`. */
43
+ const steppedTowardBase = (from, base) => RUNGS[RUNGS.indexOf(from) + (from > base ? -1 : 1)];
44
+ /**
45
+ * Hover (step 0) or active (step 1) fill rung, one step darker than `solidFillRung`. A step may not
46
+ * flip the label's side of AA (zinc dark: near-white fill, black ink) or fall below `CHROME_BORDER`
47
+ * against the canvas (a pressed warning solid used to reach 1.00:1 on the card).
48
+ */
44
49
  export const darkerFillRung = (scale, canvas, white, step) => {
45
50
  const base = solidFillRung(scale, white, canvas);
51
+ const wantsWhite = contrastRatio(white, scale[base]) >= AA_NORMAL_TEXT;
52
+ const holds = (rung) => contrastRatio(scale[rung], canvas) >= CHROME_BORDER &&
53
+ (contrastRatio(white, scale[rung]) >= AA_NORMAL_TEXT) === wantsWhite;
54
+ let rung;
46
55
  if (base === 500) {
47
56
  const mode = isDarkCanvas(canvas) ? "dark" : "light";
48
- return FILL_STEP_RUNGS[mode][step];
57
+ rung = FILL_STEP_RUNGS[mode][step];
49
58
  }
50
- const stepped = steppedRung(base, canvas, step === 0 ? 1 : 2);
51
- return stepped;
59
+ else {
60
+ rung = steppedRung(base, canvas, step === 0 ? 1 : 2);
61
+ }
62
+ while (rung !== base && !holds(rung))
63
+ rung = steppedTowardBase(rung, base);
64
+ return rung;
52
65
  };
53
66
  /** Label ink for a specific fill swatch — always `onFilled`, exported for style configs. */
54
67
  export const labelOnFill = (fill, white, black) => onFilled(fill, white, black);
@@ -7,8 +7,8 @@ export const bandOn = (fill, plane) => holds(fill, plane, MIN_PERCEPTIBLE_STEP)
7
7
  export const recessOn = (fill, plane) => holds(fill, plane, MIN_PERCEPTIBLE_STEP)
8
8
  ? fill
9
9
  : lift(DEFAULT_BLACK, plane, MIN_PERCEPTIBLE_STEP);
10
- export const cardRule = (colors) => {
10
+ export const ruleOn = (colors, plane) => {
11
11
  const rule = colors.boxborder[200];
12
- const card = colors.background[50];
13
- return holds(rule, card, CHROME_RULE) ? rule : liftToContrast(rule, card, CHROME_RULE);
12
+ return holds(rule, plane, CHROME_RULE) ? rule : liftToContrast(rule, plane, CHROME_RULE);
14
13
  };
14
+ export const cardRule = (colors) => ruleOn(colors, colors.background[50]);
@@ -66,7 +66,7 @@ export function buildSemanticStatusPalette(toneByValue, theme) {
66
66
  return Object.fromEntries(Object.entries(toneByValue).map(([value, key]) => {
67
67
  const scale = scales[key];
68
68
  const tone = resolveSoftTone(c, scale);
69
- const solidRung = solidFillRung(scale, c.white);
69
+ const solidRung = solidFillRung(scale, c.white, c.backgroundColor.main);
70
70
  const solid = scale[solidRung];
71
71
  return [
72
72
  value,
@@ -108,7 +108,7 @@ export function buildTablePalette(theme) {
108
108
  ];
109
109
  return scales.map((scale) => {
110
110
  const tone = resolveSoftTone(c, scale);
111
- const solidRung = solidFillRung(scale, c.white);
111
+ const solidRung = solidFillRung(scale, c.white, c.backgroundColor.main);
112
112
  const solid = scale[solidRung];
113
113
  return {
114
114
  solid,
package/dist/esm/index.js CHANGED
@@ -149,12 +149,12 @@ export { useChartTheme } from "./Theme/useChartTheme.js";
149
149
  // custom components against `ColorScale`/`PaletteProps` tokens can reuse the same logic instead
150
150
  // of re-deriving contrast math themselves.
151
151
  export { statusGradient, inkSafeGradient, chipFill, chipBorder, ACCENT_GRADIENT, STATUS_INK, } from "./Components/PlanPill/planPillGradient.js";
152
- export { isDarkCanvas, onFilled, onGradient, accentTextOnCanvas, pickAccentText, AA_NORMAL_TEXT, DARK_CANVAS_LUMINANCE, } from "./Theme/tokens/builders/accentText.js";
152
+ export { isDarkCanvas, onFilled, onGradient, accentTextOnCanvas, accentTextOnPlanes, pickAccentText, AA_NORMAL_TEXT, DARK_CANVAS_LUMINANCE, } from "./Theme/tokens/builders/accentText.js";
153
153
  // Filled-surface helpers — use whenever you paint a `bg` from a ColorScale (buttons, badges,
154
154
  // chips, alerts). Never pair `scale[500]` with `onFilled` or `colors.white` by hand.
155
155
  export { solidFillRung, darkerFillRung, labelOnFill, resolveFilledSurface, } from "./Theme/tokens/builders/filledSurface.js";
156
156
  // Ink for a custom option row (a `SearchSelect` `option.view` or `Select` `renderOption` node).
157
- export { optionRowInk, optionRowWeight, optionRowDescriptionInk, } from "./Components/Select/optionRowInk.js";
157
+ export { optionRowInk, optionRowWeight, optionRowDescriptionInk, optionRowFill, optionRowCursorSx, } from "./Components/Select/optionRowInk.js";
158
158
  // Pure color math backing the helpers above (and `buildDarkPalette`) — no Chakra/React/DOM
159
159
  // dependency, safe for the mobile port. `relativeLuminance`/`contrastRatio` are the WCAG 2.1
160
160
  // primitives; `compositeOver` flattens a translucent color onto a backdrop first (an alpha
@@ -170,7 +170,7 @@ export { scrollbarStyles, globalScrollbarStyles, SCROLLBAR_WIDTH, } from "./Them
170
170
  export { placeholderInk, placeholderInkOn, fieldSurfaces } from "./Theme/tokens/builders/placeholderInk.js";
171
171
  export { resolveGradient, gradientCss, inkSafeGradient as inkSafeGradientToken, } from "./Theme/tokens/builders/gradientInk.js";
172
172
  export { CONTROL_SIZES, CONTROL_SIZE_NAMES, DEFAULT_CONTROL_SIZE, isControlSize, } from "./Theme/tokens/primitives/controlSizes.js";
173
- export { MOTION_MS, MOTION_EASE, MOTION_EASE_OUT, MOTION_EASE_IN, MOTION_BEZIER, MOTION_LOOP_MS, transitionFor, motionTransition, } from "./Theme/tokens/primitives/motion.js";
173
+ export { MOTION_MS, MOTION_EASE, MOTION_EASE_OUT, MOTION_EASE_IN, MOTION_BEZIER, MOTION_LOOP_MS, MOTION_PRESS_SCALE, transitionFor, motionTransition, } from "./Theme/tokens/primitives/motion.js";
174
174
  export { RADIUS_ROLE } from "./Theme/tokens/primitives/radii.js";
175
175
  export { BORDER_WIDTHS } from "./Theme/tokens/primitives/borderWidths.js";
176
176
  export { DISABLED_OPACITY } from "./Theme/tokens/primitives/states.js";
@@ -180,7 +180,7 @@ export { TONES, isTone, toneToColorScheme, toneToSemantic, toneScale, toneInk, r
180
180
  export { overlayScrim, SCRIM_OPACITY } from "./Theme/tokens/builders/scrim.js";
181
181
  export { tooltipSurface } from "./Theme/tokens/builders/tooltipSurface.js";
182
182
  export { buildSurfaceRaised, raisedRule, RAISED_OVERLAY } from "./Theme/tokens/builders/surfaceRaised.js";
183
- export { bandOn, recessOn, cardRule } from "./Theme/tokens/builders/planeStep.js";
183
+ export { bandOn, recessOn, cardRule, ruleOn } from "./Theme/tokens/builders/planeStep.js";
184
184
  export { overlayScrimStyles, OVERLAY_BLUR } from "./Theme/chakra/overlay.styles.js";
185
185
  export { usePrefersReducedMotion, reducedMotionSx, REDUCED_MOTION_QUERY, MOTION_KEEP_CLASS, } from "./Theme/chakra/motion.js";
186
186
  export { useFieldIds } from "./Components/Common/useFieldIds.js";
package/dist/index.d.ts CHANGED
@@ -99,7 +99,7 @@ import OrganizationDetails from "./Components/OrganizationDetails/OrganizationDe
99
99
  export { Accordion, AlertDialog, ApexBarChart, ApexPieChart, ApexPolarChart, ApexLineChart, ApexAreaChart, ApexRadialChart, Breadcrumbs, Button, ButtonGroupIcon, Card, Checkbox, ContactForm, DatePicker, Drawer, DrawerHeader, DrawerBody, DrawerFooter, Dropdown, Editor, EmptyState, WorkspaceWindow, WorkspaceTray, WorkspaceTrayPreview, FieldSelectModal, FilePreview, FilePreviewTrigger, FileUpload, FileUploader, FilterSidebar, FormWrapper, LazyWrapper, MoreItems, PdfViewer, ScrollToTop, CopyButton, StageProgress, StageItem, OrgSwitcher, AppSwitcher, LimitReachedModal, UpgradeButton, PlanPill, PlanBadge, formatPlanElapsed, formatPlanExpiry, formatPlanRemaining, resolvePlanBadge, splitMonthsAndDays, UserDetails, RolesPermission, CustomModulesTable, SignInActivityTable, OrganizationDetails, Header, HeaderActions, InputTextArea, InputSwitch, KanbanBoard, KanbanActions, Loading, Modal, ModalHeader, ModalBody, ModalFooter, NavigationBar, Notification, NoteTextArea, MultiSelect, NumberInput, PaymentCard, PhoneNumberInput, PinInput, ProductCard, ProductDetails, ProfileCard, ProfileCardHeader, ProfileCardBody, ProfileCardFooter, ProfilePhotoViewer, ProgressBar, RadioButton, RadioButtonGroup, Reorder, Search, Select, SelectV2, SearchSelect, SelectSearch, SideBar, Slider, ScrollbarBox, Skeletons, Switch, ToggleSwitch, SegmentedControl, Table, TableToggle, Tag, TextInput, Timeline, Toaster, ToolTip, OverflowToolTip, useToaster, VerifyEmailOtp, useSidebarPrefs, useIsTruncated, useCustomTheme, ThemesList, debounce, isAllowedReturnUrl, resolveReturnUrl, createAccountHandoff, };
100
100
  export default withTheme;
101
101
  export type { UserDetailsProps, UserDetailsLabels, UserListItem, SelectedUserDetail, UserDetailRow, RoleOption, AddUserFormValues, ChangeRoleSubmitPayload, } from "./Components/UserDetails/UserDetailsProps";
102
- export type { WorkspaceWindowProps, WorkspaceWindowState, WorkspaceTrayProps, WorkspaceTrayItem, WorkspaceTrayPreviewProps, } from "./Components/WorkspaceWindow/WorkspaceWindowProps";
102
+ export type { WorkspaceWindowProps, WorkspaceWindowLabels, WorkspaceWindowState, WorkspaceTrayProps, WorkspaceTrayItem, WorkspaceTrayPreviewProps, } from "./Components/WorkspaceWindow/WorkspaceWindowProps";
103
103
  export type { RolesPermissionProps, RolesPermissionLabels, RolesPermissionView, RolesPermissionMode, Permission, PermissionKey, RoleData, } from "./Components/RolesPermission/RolesPermissionProps";
104
104
  export type { CustomModulesTableProps, CustomModulesTableLabels, ModuleItem, UpdateModulePayload, } from "./Components/CustomModulesTable/CustomModulesTableProps";
105
105
  export type { SignInActivityTableProps, SignInActivityLabels, SignInDevice, } from "./Components/SignInActivityTable/SignInActivityTableProps";
@@ -131,10 +131,10 @@ export { useChartTheme } from "./Theme/useChartTheme";
131
131
  export type { RechartsAxisTheme, RechartsChartTheme, RechartsGridTheme, RechartsLegendTheme, RechartsTooltipTheme, } from "./Theme/useChartTheme";
132
132
  export type { ColorMode, ResolvedColorMode, ThemeName, PaletteProps, ColorScale, BrandScale, SemanticColors, NamedSurfaces, FocusRingTokens, } from "./Theme/tokens/types";
133
133
  export { statusGradient, inkSafeGradient, chipFill, chipBorder, ACCENT_GRADIENT, STATUS_INK, } from "./Components/PlanPill/planPillGradient";
134
- export { isDarkCanvas, onFilled, onGradient, accentTextOnCanvas, pickAccentText, AA_NORMAL_TEXT, DARK_CANVAS_LUMINANCE, } from "./Theme/tokens/builders/accentText";
134
+ export { isDarkCanvas, onFilled, onGradient, accentTextOnCanvas, accentTextOnPlanes, pickAccentText, AA_NORMAL_TEXT, DARK_CANVAS_LUMINANCE, } from "./Theme/tokens/builders/accentText";
135
135
  export { solidFillRung, darkerFillRung, labelOnFill, resolveFilledSurface, } from "./Theme/tokens/builders/filledSurface";
136
136
  export type { FilledSurface } from "./Theme/tokens/builders/filledSurface";
137
- export { optionRowInk, optionRowWeight, optionRowDescriptionInk, } from "./Components/Select/optionRowInk";
137
+ export { optionRowInk, optionRowWeight, optionRowDescriptionInk, optionRowFill, optionRowCursorSx, } from "./Components/Select/optionRowInk";
138
138
  export { hexToRgb, hexToRgba, compositeOver, rgbToHex, rgbToHsl, hslToRgb, hexToHsl, hslToHex, withLightness, mix, relativeLuminance, contrastRatio, } from "./Theme/tokens/builders/color";
139
139
  export type { Rgb, Hsl } from "./Theme/tokens/builders/color";
140
140
  export type { SelectV2Props, SelectV2Size, OptionProp as SelectV2Option } from "./Components/SelectV2/SelectV2Props";
@@ -194,7 +194,7 @@ export { resolveGradient, gradientCss, inkSafeGradient as inkSafeGradientToken,
194
194
  export type { Gradient, ResolvedGradient, } from "./Theme/tokens/builders/gradientInk";
195
195
  export { CONTROL_SIZES, CONTROL_SIZE_NAMES, DEFAULT_CONTROL_SIZE, isControlSize, } from "./Theme/tokens/primitives/controlSizes";
196
196
  export type { ControlSize, ControlSizeSpec } from "./Theme/tokens/primitives/controlSizes";
197
- export { MOTION_MS, MOTION_EASE, MOTION_EASE_OUT, MOTION_EASE_IN, MOTION_BEZIER, MOTION_LOOP_MS, transitionFor, motionTransition, } from "./Theme/tokens/primitives/motion";
197
+ export { MOTION_MS, MOTION_EASE, MOTION_EASE_OUT, MOTION_EASE_IN, MOTION_BEZIER, MOTION_LOOP_MS, MOTION_PRESS_SCALE, transitionFor, motionTransition, } from "./Theme/tokens/primitives/motion";
198
198
  export type { MotionSpeed, MotionCurve } from "./Theme/tokens/primitives/motion";
199
199
  export { RADIUS_ROLE } from "./Theme/tokens/primitives/radii";
200
200
  export type { RadiusRole } from "./Theme/tokens/primitives/radii";
@@ -208,7 +208,7 @@ export type { Tone, ToneColorScheme } from "./Theme/tokens/builders/tone";
208
208
  export { overlayScrim, SCRIM_OPACITY } from "./Theme/tokens/builders/scrim";
209
209
  export { tooltipSurface } from "./Theme/tokens/builders/tooltipSurface";
210
210
  export { buildSurfaceRaised, raisedRule, RAISED_OVERLAY } from "./Theme/tokens/builders/surfaceRaised";
211
- export { bandOn, recessOn, cardRule } from "./Theme/tokens/builders/planeStep";
211
+ export { bandOn, recessOn, cardRule, ruleOn } from "./Theme/tokens/builders/planeStep";
212
212
  export { overlayScrimStyles, OVERLAY_BLUR } from "./Theme/chakra/overlay.styles";
213
213
  export { usePrefersReducedMotion, reducedMotionSx, REDUCED_MOTION_QUERY, MOTION_KEEP_CLASS, } from "./Theme/chakra/motion";
214
214
  export type { ReducedMotionScope } from "./Theme/chakra/motion";
package/dist/index.js CHANGED
@@ -43,12 +43,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
43
43
  exports.splitMonthsAndDays = exports.resolvePlanBadge = exports.formatPlanRemaining = exports.formatPlanExpiry = exports.formatPlanElapsed = exports.PlanBadge = exports.PlanPill = exports.UpgradeButton = exports.LimitReachedModal = exports.AppSwitcher = exports.OrgSwitcher = exports.StageItem = exports.StageProgress = exports.CopyButton = exports.ScrollToTop = exports.PdfViewer = exports.MoreItems = exports.LazyWrapper = exports.FormWrapper = exports.FilterSidebar = exports.FileUploader = exports.FileUpload = exports.FilePreviewTrigger = exports.FilePreview = exports.FieldSelectModal = exports.WorkspaceTrayPreview = exports.WorkspaceTray = exports.WorkspaceWindow = exports.EmptyState = exports.Editor = exports.Dropdown = exports.DrawerFooter = exports.DrawerBody = exports.DrawerHeader = exports.Drawer = exports.DatePicker = exports.ContactForm = exports.Checkbox = exports.Card = exports.ButtonGroupIcon = exports.Button = exports.Breadcrumbs = exports.ApexRadialChart = exports.ApexAreaChart = exports.ApexLineChart = exports.ApexPolarChart = exports.ApexPieChart = exports.ApexBarChart = exports.AlertDialog = exports.Accordion = void 0;
44
44
  exports.Tag = exports.TableToggle = exports.Table = exports.SegmentedControl = exports.ToggleSwitch = exports.Switch = exports.Skeletons = exports.ScrollbarBox = exports.Slider = exports.SideBar = exports.SelectSearch = exports.SearchSelect = exports.SelectV2 = exports.Select = exports.Search = exports.Reorder = exports.RadioButtonGroup = exports.RadioButton = exports.ProgressBar = exports.ProfilePhotoViewer = exports.ProfileCardFooter = exports.ProfileCardBody = exports.ProfileCardHeader = exports.ProfileCard = exports.ProductDetails = exports.ProductCard = exports.PinInput = exports.PhoneNumberInput = exports.PaymentCard = exports.NumberInput = exports.MultiSelect = exports.NoteTextArea = exports.Notification = exports.NavigationBar = exports.ModalFooter = exports.ModalBody = exports.ModalHeader = exports.Modal = exports.Loading = exports.KanbanActions = exports.KanbanBoard = exports.InputSwitch = exports.InputTextArea = exports.HeaderActions = exports.Header = exports.OrganizationDetails = exports.SignInActivityTable = exports.CustomModulesTable = exports.RolesPermission = exports.UserDetails = void 0;
45
45
  exports.setRef = exports.mergeRefs = exports.resolveStatusTone = exports.resolveAvatarFill = exports.meetsBodyText = exports.avatarFillFor = exports.AVATAR_SEEDS = exports.FOCUS_RING_WIDTH = exports.FOCUS_HALO_WIDTH = exports.FOCUS_VISIBLE_OVER_STATE = exports.focusVisibleStyles = exports.focusVisibleRing = exports.focusRingShadow = exports.withFocusRing = exports.settleBetween = exports.buildFocusRing = exports.listRowBackgrounds = exports.withOutlineRung = exports.liftToContrast = exports.AA_NON_TEXT = exports.buildDarkPalette = exports.themeNames = exports.palettes = exports.darkPalettes = exports.lightPalettes = exports.brandThemes = exports.AppearanceSettings = exports.useFontSizeSync = exports.resolveFontSize = exports.isFontSize = exports.FONT_SIZE_OPTIONS = exports.DEFAULT_FONT_SIZE = exports.ThemeSwitcher = exports.useThemeMode = exports.PixelizeThemeProvider = exports.createAccountHandoff = exports.resolveReturnUrl = exports.isAllowedReturnUrl = exports.debounce = exports.ThemesList = exports.useCustomTheme = exports.useIsTruncated = exports.useSidebarPrefs = exports.VerifyEmailOtp = exports.useToaster = exports.OverflowToolTip = exports.ToolTip = exports.Toaster = exports.Timeline = exports.TextInput = void 0;
46
- exports.appInitials = exports.describeDayStates = exports.resolveDayStateVisual = exports.isDayStateKey = exports.CALENDAR_DAY_CLASS = exports.DAY_STATE_KEYS = exports.contrastRatio = exports.relativeLuminance = exports.mix = exports.withLightness = exports.hslToHex = exports.hexToHsl = exports.hslToRgb = exports.rgbToHsl = exports.rgbToHex = exports.compositeOver = exports.hexToRgba = exports.hexToRgb = exports.optionRowDescriptionInk = exports.optionRowWeight = exports.optionRowInk = exports.resolveFilledSurface = exports.labelOnFill = exports.darkerFillRung = exports.solidFillRung = exports.DARK_CANVAS_LUMINANCE = exports.AA_NORMAL_TEXT = exports.pickAccentText = exports.accentTextOnCanvas = exports.onGradient = exports.onFilled = exports.isDarkCanvas = exports.STATUS_INK = exports.ACCENT_GRADIENT = exports.chipBorder = exports.chipFill = exports.inkSafeGradient = exports.statusGradient = exports.useChartTheme = exports.labelOnSeries = exports.getDefaultSeriesColors = exports.getCategoricalSeriesColors = exports.chartMode = exports.chartInk = exports.chartAxisLabelColor = exports.CATEGORICAL_SERIES = exports.useDebouncedValue = exports.useDebouncedCallback = exports.toWords = exports.rafThrottle = void 0;
47
- exports.OVERLAY_BLUR = exports.overlayScrimStyles = exports.cardRule = exports.recessOn = exports.bandOn = exports.RAISED_OVERLAY = exports.raisedRule = exports.buildSurfaceRaised = exports.tooltipSurface = exports.SCRIM_OPACITY = exports.overlayScrim = exports.resolveSoftTone = exports.toneInk = exports.toneScale = exports.toneToSemantic = exports.toneToColorScheme = exports.isTone = exports.TONES = exports.shadowsFor = exports.TEXT_STYLES = exports.NUMERIC_TEXT = exports.DISABLED_OPACITY = exports.BORDER_WIDTHS = exports.RADIUS_ROLE = exports.motionTransition = exports.transitionFor = exports.MOTION_LOOP_MS = exports.MOTION_BEZIER = exports.MOTION_EASE_IN = exports.MOTION_EASE_OUT = exports.MOTION_EASE = exports.MOTION_MS = exports.isControlSize = exports.DEFAULT_CONTROL_SIZE = exports.CONTROL_SIZE_NAMES = exports.CONTROL_SIZES = exports.inkSafeGradientToken = exports.gradientCss = exports.resolveGradient = exports.fieldSurfaces = exports.placeholderInkOn = exports.placeholderInk = exports.SCROLLBAR_WIDTH = exports.globalScrollbarStyles = exports.scrollbarStyles = exports.useAppSwitcherShortcut = exports.buildSuiteApps = exports.formatShortcut = exports.matchesShortcut = exports.filterApps = void 0;
48
- exports.formatRelativeTime = exports.formatCount = exports.groupConsecutive = exports.sectionizeByDay = exports.NotificationItem = exports.NotificationList = exports.NotificationPanel = exports.NotificationBell = exports.ConfirmDialog = exports.TabPanel = exports.TabPanels = exports.Tab = exports.TabList = exports.Tabs = exports.Accordian = exports.AudioRecorder = exports.CalendarGrid = exports.SectionRail = exports.BulkSelectionBar = exports.SaveBar = exports.FeedbackForm = exports.PersonChip = exports.initialsFor = exports.avatarScaleKeyFor = exports.resolveAvatarColorway = exports.AvatarGroup = exports.Avatar = exports.SettingsSection = exports.SettingRow = exports.FilterBar = exports.DescriptionList = exports.Spinner = exports.Backdrop = exports.QueryStateBoundary = exports.ErrorState = exports.FormDrawer = exports.CircularProgress = exports.StatusTag = exports.StatCard = exports.PageHeader = exports.fieldMessageStyles = exports.fieldLabelStyles = exports.controlSizeStyles = exports.fieldControlStyles = exports.FieldMessage = exports.useFieldIds = exports.MOTION_KEEP_CLASS = exports.REDUCED_MOTION_QUERY = exports.reducedMotionSx = exports.usePrefersReducedMotion = void 0;
49
- exports.ProductBadges = exports.StockStatus = exports.PriceBlock = exports.Rating = exports.SEEK_STEP_SECONDS = exports.PLAYBACK_SPEEDS = exports.ZOOM_STEP = exports.MAX_ZOOM = exports.MIN_ZOOM = exports.resolveMediaUrl = exports.fileKind = exports.countMedia = exports.planPreview = exports.buildFileItems = exports.buildMediaItems = exports.MediaStatusPanel = exports.MediaScrubber = exports.defaultMediaAudioPlayerLabels = exports.MediaAudioPlayer = exports.defaultMediaViewerLabels = exports.defaultMediaDocumentStageLabels = exports.MediaDocumentStage = exports.defaultMediaVideoPlayerLabels = exports.MediaVideoPlayer = exports.defaultMediaImageViewerLabels = exports.MediaImageViewer = exports.useFileViewer = exports.MediaViewer = exports.RangeSlider = exports.getApiErrorStatus = exports.getApiErrorMessage = exports.defaultValidationMessages = exports.validateYoutubeUrl = exports.validateVideoFile = exports.validateVideoFileType = exports.validateFile = exports.validateFileSize = exports.validateFileType = exports.validatePositiveNumber = exports.validateRequired = exports.validatePassword = exports.validateEmail = exports.EMAIL_REGEX = exports.createEnumLabelResolver = exports.humanize = exports.clearChunkReloadGuard = exports.isChunkLoadError = exports.installPreloadErrorReload = exports.lazyWithRetry = exports.useAnchoredPanelHeight = void 0;
50
- exports.WizardDialog = exports.flattenScreens = exports.searchLauncherSections = exports.searchLauncher = exports.NewTabLink = exports.PinToggle = exports.NavLauncher = exports.LauncherTrigger = exports.KbdShortcut = exports.Kbd = exports.QuickAddSheet = exports.ProductCardSkeleton = exports.ProductCardGrid = exports.unitPrice = exports.discountAmount = exports.discountPercent = exports.formatPrice = exports.firstAvailableSelection = exports.priceRange = exports.remainingStock = exports.isOptionAvailable = exports.findVariant = exports.selectionComplete = exports.stockState = exports.LOW_STOCK_THRESHOLD = exports.defaultMediaLightboxLabels = exports.defaultMediaGalleryLabels = exports.MediaLightbox = exports.MediaGallery = exports.PaymentOptionGroup = exports.PaymentOption = exports.AddressCardGroup = exports.AddressCard = exports.DetailSections = exports.ReviewList = exports.ReviewSummary = exports.SpecTable = exports.OffersList = exports.TrustBadges = exports.PincodeChecker = exports.StickyBuyBar = exports.BagBar = exports.OrderStatusTimeline = exports.CouponField = exports.OrderSummary = exports.CartItem = exports.QuantityStepper = exports.VariantSelector = exports.OptionChip = exports.WishlistToggle = void 0;
51
- exports.TagInput = exports.TimePicker = exports.DEFAULT_DATE_FALLBACK = exports.formatDateRange = exports.formatDateTime = exports.formatDate = exports.SkipLink = exports.VisuallyHidden = exports.FormField = exports.IconButton = exports.ChoiceCardGroup = exports.ChoiceCard = exports.defaultPaginationLabels = exports.Pagination = exports.firstInvalidStep = exports.wizardTransition = exports.Wizard = void 0;
46
+ exports.isDayStateKey = exports.CALENDAR_DAY_CLASS = exports.DAY_STATE_KEYS = exports.contrastRatio = exports.relativeLuminance = exports.mix = exports.withLightness = exports.hslToHex = exports.hexToHsl = exports.hslToRgb = exports.rgbToHsl = exports.rgbToHex = exports.compositeOver = exports.hexToRgba = exports.hexToRgb = exports.optionRowCursorSx = exports.optionRowFill = exports.optionRowDescriptionInk = exports.optionRowWeight = exports.optionRowInk = exports.resolveFilledSurface = exports.labelOnFill = exports.darkerFillRung = exports.solidFillRung = exports.DARK_CANVAS_LUMINANCE = exports.AA_NORMAL_TEXT = exports.pickAccentText = exports.accentTextOnPlanes = exports.accentTextOnCanvas = exports.onGradient = exports.onFilled = exports.isDarkCanvas = exports.STATUS_INK = exports.ACCENT_GRADIENT = exports.chipBorder = exports.chipFill = exports.inkSafeGradient = exports.statusGradient = exports.useChartTheme = exports.labelOnSeries = exports.getDefaultSeriesColors = exports.getCategoricalSeriesColors = exports.chartMode = exports.chartInk = exports.chartAxisLabelColor = exports.CATEGORICAL_SERIES = exports.useDebouncedValue = exports.useDebouncedCallback = exports.toWords = exports.rafThrottle = void 0;
47
+ exports.bandOn = exports.RAISED_OVERLAY = exports.raisedRule = exports.buildSurfaceRaised = exports.tooltipSurface = exports.SCRIM_OPACITY = exports.overlayScrim = exports.resolveSoftTone = exports.toneInk = exports.toneScale = exports.toneToSemantic = exports.toneToColorScheme = exports.isTone = exports.TONES = exports.shadowsFor = exports.TEXT_STYLES = exports.NUMERIC_TEXT = exports.DISABLED_OPACITY = exports.BORDER_WIDTHS = exports.RADIUS_ROLE = exports.motionTransition = exports.transitionFor = exports.MOTION_PRESS_SCALE = exports.MOTION_LOOP_MS = exports.MOTION_BEZIER = exports.MOTION_EASE_IN = exports.MOTION_EASE_OUT = exports.MOTION_EASE = exports.MOTION_MS = exports.isControlSize = exports.DEFAULT_CONTROL_SIZE = exports.CONTROL_SIZE_NAMES = exports.CONTROL_SIZES = exports.inkSafeGradientToken = exports.gradientCss = exports.resolveGradient = exports.fieldSurfaces = exports.placeholderInkOn = exports.placeholderInk = exports.SCROLLBAR_WIDTH = exports.globalScrollbarStyles = exports.scrollbarStyles = exports.useAppSwitcherShortcut = exports.buildSuiteApps = exports.formatShortcut = exports.matchesShortcut = exports.filterApps = exports.appInitials = exports.describeDayStates = exports.resolveDayStateVisual = void 0;
48
+ exports.NotificationList = exports.NotificationPanel = exports.NotificationBell = exports.ConfirmDialog = exports.TabPanel = exports.TabPanels = exports.Tab = exports.TabList = exports.Tabs = exports.Accordian = exports.AudioRecorder = exports.CalendarGrid = exports.SectionRail = exports.BulkSelectionBar = exports.SaveBar = exports.FeedbackForm = exports.PersonChip = exports.initialsFor = exports.avatarScaleKeyFor = exports.resolveAvatarColorway = exports.AvatarGroup = exports.Avatar = exports.SettingsSection = exports.SettingRow = exports.FilterBar = exports.DescriptionList = exports.Spinner = exports.Backdrop = exports.QueryStateBoundary = exports.ErrorState = exports.FormDrawer = exports.CircularProgress = exports.StatusTag = exports.StatCard = exports.PageHeader = exports.fieldMessageStyles = exports.fieldLabelStyles = exports.controlSizeStyles = exports.fieldControlStyles = exports.FieldMessage = exports.useFieldIds = exports.MOTION_KEEP_CLASS = exports.REDUCED_MOTION_QUERY = exports.reducedMotionSx = exports.usePrefersReducedMotion = exports.OVERLAY_BLUR = exports.overlayScrimStyles = exports.ruleOn = exports.cardRule = exports.recessOn = void 0;
49
+ exports.PLAYBACK_SPEEDS = exports.ZOOM_STEP = exports.MAX_ZOOM = exports.MIN_ZOOM = exports.resolveMediaUrl = exports.fileKind = exports.countMedia = exports.planPreview = exports.buildFileItems = exports.buildMediaItems = exports.MediaStatusPanel = exports.MediaScrubber = exports.defaultMediaAudioPlayerLabels = exports.MediaAudioPlayer = exports.defaultMediaViewerLabels = exports.defaultMediaDocumentStageLabels = exports.MediaDocumentStage = exports.defaultMediaVideoPlayerLabels = exports.MediaVideoPlayer = exports.defaultMediaImageViewerLabels = exports.MediaImageViewer = exports.useFileViewer = exports.MediaViewer = exports.RangeSlider = exports.getApiErrorStatus = exports.getApiErrorMessage = exports.defaultValidationMessages = exports.validateYoutubeUrl = exports.validateVideoFile = exports.validateVideoFileType = exports.validateFile = exports.validateFileSize = exports.validateFileType = exports.validatePositiveNumber = exports.validateRequired = exports.validatePassword = exports.validateEmail = exports.EMAIL_REGEX = exports.createEnumLabelResolver = exports.humanize = exports.clearChunkReloadGuard = exports.isChunkLoadError = exports.installPreloadErrorReload = exports.lazyWithRetry = exports.useAnchoredPanelHeight = exports.formatRelativeTime = exports.formatCount = exports.groupConsecutive = exports.sectionizeByDay = exports.NotificationItem = void 0;
50
+ exports.PinToggle = exports.NavLauncher = exports.LauncherTrigger = exports.KbdShortcut = exports.Kbd = exports.QuickAddSheet = exports.ProductCardSkeleton = exports.ProductCardGrid = exports.unitPrice = exports.discountAmount = exports.discountPercent = exports.formatPrice = exports.firstAvailableSelection = exports.priceRange = exports.remainingStock = exports.isOptionAvailable = exports.findVariant = exports.selectionComplete = exports.stockState = exports.LOW_STOCK_THRESHOLD = exports.defaultMediaLightboxLabels = exports.defaultMediaGalleryLabels = exports.MediaLightbox = exports.MediaGallery = exports.PaymentOptionGroup = exports.PaymentOption = exports.AddressCardGroup = exports.AddressCard = exports.DetailSections = exports.ReviewList = exports.ReviewSummary = exports.SpecTable = exports.OffersList = exports.TrustBadges = exports.PincodeChecker = exports.StickyBuyBar = exports.BagBar = exports.OrderStatusTimeline = exports.CouponField = exports.OrderSummary = exports.CartItem = exports.QuantityStepper = exports.VariantSelector = exports.OptionChip = exports.WishlistToggle = exports.ProductBadges = exports.StockStatus = exports.PriceBlock = exports.Rating = exports.SEEK_STEP_SECONDS = void 0;
51
+ exports.TagInput = exports.TimePicker = exports.DEFAULT_DATE_FALLBACK = exports.formatDateRange = exports.formatDateTime = exports.formatDate = exports.SkipLink = exports.VisuallyHidden = exports.FormField = exports.IconButton = exports.ChoiceCardGroup = exports.ChoiceCard = exports.defaultPaginationLabels = exports.Pagination = exports.firstInvalidStep = exports.wizardTransition = exports.Wizard = exports.WizardDialog = exports.flattenScreens = exports.searchLauncherSections = exports.searchLauncher = exports.NewTabLink = void 0;
52
52
  const Accordion_1 = __importDefault(require("./Components/Accordion/Accordion"));
53
53
  exports.Accordion = Accordion_1.default;
54
54
  const AlertDialog_1 = __importDefault(require("./Components/AlertDialog/AlertDialog"));
@@ -361,6 +361,7 @@ Object.defineProperty(exports, "isDarkCanvas", { enumerable: true, get: function
361
361
  Object.defineProperty(exports, "onFilled", { enumerable: true, get: function () { return accentText_1.onFilled; } });
362
362
  Object.defineProperty(exports, "onGradient", { enumerable: true, get: function () { return accentText_1.onGradient; } });
363
363
  Object.defineProperty(exports, "accentTextOnCanvas", { enumerable: true, get: function () { return accentText_1.accentTextOnCanvas; } });
364
+ Object.defineProperty(exports, "accentTextOnPlanes", { enumerable: true, get: function () { return accentText_1.accentTextOnPlanes; } });
364
365
  Object.defineProperty(exports, "pickAccentText", { enumerable: true, get: function () { return accentText_1.pickAccentText; } });
365
366
  Object.defineProperty(exports, "AA_NORMAL_TEXT", { enumerable: true, get: function () { return accentText_1.AA_NORMAL_TEXT; } });
366
367
  Object.defineProperty(exports, "DARK_CANVAS_LUMINANCE", { enumerable: true, get: function () { return accentText_1.DARK_CANVAS_LUMINANCE; } });
@@ -376,6 +377,8 @@ var optionRowInk_1 = require("./Components/Select/optionRowInk");
376
377
  Object.defineProperty(exports, "optionRowInk", { enumerable: true, get: function () { return optionRowInk_1.optionRowInk; } });
377
378
  Object.defineProperty(exports, "optionRowWeight", { enumerable: true, get: function () { return optionRowInk_1.optionRowWeight; } });
378
379
  Object.defineProperty(exports, "optionRowDescriptionInk", { enumerable: true, get: function () { return optionRowInk_1.optionRowDescriptionInk; } });
380
+ Object.defineProperty(exports, "optionRowFill", { enumerable: true, get: function () { return optionRowInk_1.optionRowFill; } });
381
+ Object.defineProperty(exports, "optionRowCursorSx", { enumerable: true, get: function () { return optionRowInk_1.optionRowCursorSx; } });
379
382
  // Pure color math backing the helpers above (and `buildDarkPalette`) — no Chakra/React/DOM
380
383
  // dependency, safe for the mobile port. `relativeLuminance`/`contrastRatio` are the WCAG 2.1
381
384
  // primitives; `compositeOver` flattens a translucent color onto a backdrop first (an alpha
@@ -434,6 +437,7 @@ Object.defineProperty(exports, "MOTION_EASE_OUT", { enumerable: true, get: funct
434
437
  Object.defineProperty(exports, "MOTION_EASE_IN", { enumerable: true, get: function () { return motion_1.MOTION_EASE_IN; } });
435
438
  Object.defineProperty(exports, "MOTION_BEZIER", { enumerable: true, get: function () { return motion_1.MOTION_BEZIER; } });
436
439
  Object.defineProperty(exports, "MOTION_LOOP_MS", { enumerable: true, get: function () { return motion_1.MOTION_LOOP_MS; } });
440
+ Object.defineProperty(exports, "MOTION_PRESS_SCALE", { enumerable: true, get: function () { return motion_1.MOTION_PRESS_SCALE; } });
437
441
  Object.defineProperty(exports, "transitionFor", { enumerable: true, get: function () { return motion_1.transitionFor; } });
438
442
  Object.defineProperty(exports, "motionTransition", { enumerable: true, get: function () { return motion_1.motionTransition; } });
439
443
  var radii_1 = require("./Theme/tokens/primitives/radii");
@@ -468,6 +472,7 @@ var planeStep_1 = require("./Theme/tokens/builders/planeStep");
468
472
  Object.defineProperty(exports, "bandOn", { enumerable: true, get: function () { return planeStep_1.bandOn; } });
469
473
  Object.defineProperty(exports, "recessOn", { enumerable: true, get: function () { return planeStep_1.recessOn; } });
470
474
  Object.defineProperty(exports, "cardRule", { enumerable: true, get: function () { return planeStep_1.cardRule; } });
475
+ Object.defineProperty(exports, "ruleOn", { enumerable: true, get: function () { return planeStep_1.ruleOn; } });
471
476
  var overlay_styles_1 = require("./Theme/chakra/overlay.styles");
472
477
  Object.defineProperty(exports, "overlayScrimStyles", { enumerable: true, get: function () { return overlay_styles_1.overlayScrimStyles; } });
473
478
  Object.defineProperty(exports, "OVERLAY_BLUR", { enumerable: true, get: function () { return overlay_styles_1.OVERLAY_BLUR; } });