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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (207) hide show
  1. package/CHANGELOG.md +122 -2
  2. package/COMPONENT-GOTCHAS.md +51 -9
  3. package/DESIGN-GUIDE.md +13 -5
  4. package/dist/Components/Button/Button.styles.js +58 -23
  5. package/dist/Components/Card/CardProps.d.ts +2 -2
  6. package/dist/Components/ConfirmDialog/ConfirmDialog.js +2 -1
  7. package/dist/Components/CustomModulesTable/CustomModulesTable.js +6 -4
  8. package/dist/Components/CustomModulesTable/EditModuleModal.js +2 -1
  9. package/dist/Components/DatePicker/RangeDatePicker.js +2 -1
  10. package/dist/Components/DatePicker/SingleDatePicker.js +2 -1
  11. package/dist/Components/DatePicker/TimeOnlyPicker.js +2 -1
  12. package/dist/Components/DatePicker/dayStates.js +2 -1
  13. package/dist/Components/Drawer/Drawer.js +2 -1
  14. package/dist/Components/Dropdown/DropDown.js +4 -10
  15. package/dist/Components/FilePreview/FilePreview.js +2 -1
  16. package/dist/Components/FileUpload/FileUpload.js +9 -2
  17. package/dist/Components/FileUploader/FileUploader.js +4 -0
  18. package/dist/Components/FileUploader/FileUploaderProps.d.ts +1 -1
  19. package/dist/Components/FilterSidebar/FilterSidebar.js +7 -4
  20. package/dist/Components/Input/TextInput.styles.js +10 -6
  21. package/dist/Components/KanbanBoard/AccountCard.js +4 -2
  22. package/dist/Components/KanbanBoard/KanbanBoard.js +6 -5
  23. package/dist/Components/NavigationBar/NavigationBar.js +5 -3
  24. package/dist/Components/Notification/Notification.js +4 -3
  25. package/dist/Components/NotificationBell/NotificationPanel.js +4 -3
  26. package/dist/Components/OrgSwitcher/OrgSwitcher.js +2 -4
  27. package/dist/Components/OrganizationDetails/CreateOrgModal.js +2 -1
  28. package/dist/Components/OrganizationDetails/OrganizationDetails.js +5 -3
  29. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +12 -7
  30. package/dist/Components/ScrollToTop/ScrollToTop.js +4 -3
  31. package/dist/Components/SearchSelect/SearchSelect.js +44 -35
  32. package/dist/Components/SearchSelect/searchSelectNav.d.ts +13 -0
  33. package/dist/Components/SearchSelect/searchSelectNav.js +40 -0
  34. package/dist/Components/Select/SelectPopup.js +3 -4
  35. package/dist/Components/Select/optionRowInk.d.ts +12 -0
  36. package/dist/Components/Select/optionRowInk.js +10 -1
  37. package/dist/Components/SelectSearch/SelectSearch.js +3 -11
  38. package/dist/Components/SettingRow/SettingRow.js +2 -1
  39. package/dist/Components/SettingRow/SettingsSection.js +2 -1
  40. package/dist/Components/SideBar/SecondaryBar.js +4 -3
  41. package/dist/Components/SideBar/SideBar.js +16 -13
  42. package/dist/Components/SideBar/SideBarProps.d.ts +1 -1
  43. package/dist/Components/SideBar/components/MenuItemBox.js +7 -4
  44. package/dist/Components/SideBar/components/MenuPopoverContent.js +2 -1
  45. package/dist/Components/SideBar/components/OtherApps.js +2 -1
  46. package/dist/Components/SideBar/components/PinnedSection.js +7 -4
  47. package/dist/Components/SideBar/sidebarMotion.d.ts +2 -0
  48. package/dist/Components/SideBar/sidebarMotion.js +6 -0
  49. package/dist/Components/SignInActivityTable/SignInActivityTable.js +6 -4
  50. package/dist/Components/StageProgress/StageItem.js +5 -2
  51. package/dist/Components/StageProgress/StepperStage.js +2 -2
  52. package/dist/Components/StatCard/StatCard.js +2 -1
  53. package/dist/Components/Table/Table.js +9 -4
  54. package/dist/Components/Table/TableProps.d.ts +1 -1
  55. package/dist/Components/Table/components/TableActions.js +3 -2
  56. package/dist/Components/Table/components/TableBody.js +9 -1
  57. package/dist/Components/Table/components/TableHeader.js +7 -2
  58. package/dist/Components/Table/components/TableLoading.d.ts +4 -1
  59. package/dist/Components/Table/components/TableLoading.js +6 -5
  60. package/dist/Components/Table/filters/CompactSelect.js +3 -11
  61. package/dist/Components/Table/settings/TableSettings.js +7 -2
  62. package/dist/Components/Table/variants/TableVariantContext.d.ts +1 -1
  63. package/dist/Components/Table/variants/TableVariantContext.js +3 -3
  64. package/dist/Components/Table/variants/classic.js +3 -2
  65. package/dist/Components/Timeline/Timeline.js +11 -4
  66. package/dist/Components/Toaster/Toaster.js +19 -8
  67. package/dist/Components/Toggle/TableToggle.js +5 -2
  68. package/dist/Components/UserDetails/AddUserModal.js +2 -1
  69. package/dist/Components/UserDetails/ChangeRoleModal.js +2 -1
  70. package/dist/Components/UserDetails/UserDetails.js +3 -1
  71. package/dist/Components/WorkspaceWindow/WorkspaceTrayPreview.js +4 -0
  72. package/dist/Components/WorkspaceWindow/WorkspaceWindow.d.ts +2 -2
  73. package/dist/Components/WorkspaceWindow/WorkspaceWindow.js +25 -18
  74. package/dist/Components/WorkspaceWindow/WorkspaceWindowProps.d.ts +38 -2
  75. package/dist/Theme/chakra/Card.styles.d.ts +7 -1
  76. package/dist/Theme/chakra/Card.styles.js +4 -1
  77. package/dist/Theme/chakra/Menu.styles.d.ts +11 -5
  78. package/dist/Theme/chakra/Menu.styles.js +10 -0
  79. package/dist/Theme/chakra/Popover.styles.d.ts +2 -11
  80. package/dist/Theme/chakra/Popover.styles.js +2 -0
  81. package/dist/Theme/chakra/common.web.d.ts +4 -0
  82. package/dist/Theme/chakra/componentStyles.d.ts +19 -3
  83. package/dist/Theme/chakra/componentStyles.js +12 -8
  84. package/dist/Theme/chakra/motion.d.ts +1 -0
  85. package/dist/Theme/chakra/motion.js +2 -1
  86. package/dist/Theme/chakra/overlay.styles.d.ts +5 -0
  87. package/dist/Theme/chakra/overlay.styles.js +4 -1
  88. package/dist/Theme/themeProps.d.ts +4 -0
  89. package/dist/Theme/tokens/brands/index.d.ts +1 -0
  90. package/dist/Theme/tokens/brands/index.js +17 -1
  91. package/dist/Theme/tokens/brands/radiant/palette.light.js +15 -0
  92. package/dist/Theme/tokens/brands/rosewood/palette.light.js +10 -10
  93. package/dist/Theme/tokens/brands/zinc/palette.dark.d.ts +7 -29
  94. package/dist/Theme/tokens/brands/zinc/palette.dark.js +3 -35
  95. package/dist/Theme/tokens/builders/accentText.d.ts +2 -0
  96. package/dist/Theme/tokens/builders/accentText.js +7 -1
  97. package/dist/Theme/tokens/builders/buildDarkPalette.d.ts +6 -1
  98. package/dist/Theme/tokens/builders/buildDarkPalette.js +37 -8
  99. package/dist/Theme/tokens/builders/filledSurface.d.ts +5 -1
  100. package/dist/Theme/tokens/builders/filledSurface.js +17 -4
  101. package/dist/Theme/tokens/builders/mutedText.d.ts +1 -1
  102. package/dist/Theme/tokens/builders/mutedText.js +13 -3
  103. package/dist/Theme/tokens/builders/planeStep.d.ts +5 -0
  104. package/dist/Theme/tokens/builders/planeStep.js +21 -0
  105. package/dist/Theme/tokens/builders/planes.d.ts +4 -0
  106. package/dist/Theme/tokens/builders/planes.js +33 -0
  107. package/dist/Theme/tokens/builders/skeletonShimmer.d.ts +9 -0
  108. package/dist/Theme/tokens/builders/skeletonShimmer.js +25 -0
  109. package/dist/Theme/tokens/builders/surfaceRaised.d.ts +3 -1
  110. package/dist/Theme/tokens/builders/surfaceRaised.js +18 -8
  111. package/dist/Theme/tokens/builders/surfaceRungs.js +3 -1
  112. package/dist/Theme/tokens/primitives/index.d.ts +2 -2
  113. package/dist/Theme/tokens/primitives/index.js +4 -1
  114. package/dist/Theme/tokens/primitives/motion.d.ts +1 -0
  115. package/dist/Theme/tokens/primitives/motion.js +2 -1
  116. package/dist/Theme/tokens/primitives/shadows.d.ts +16 -0
  117. package/dist/Theme/tokens/primitives/shadows.js +56 -6
  118. package/dist/Theme/tokens/primitives/typography.js +1 -1
  119. package/dist/Utils/table.js +2 -2
  120. package/dist/esm/Components/Button/Button.styles.js +62 -27
  121. package/dist/esm/Components/ConfirmDialog/ConfirmDialog.js +2 -1
  122. package/dist/esm/Components/CustomModulesTable/CustomModulesTable.js +6 -4
  123. package/dist/esm/Components/CustomModulesTable/EditModuleModal.js +2 -1
  124. package/dist/esm/Components/DatePicker/RangeDatePicker.js +2 -1
  125. package/dist/esm/Components/DatePicker/SingleDatePicker.js +2 -1
  126. package/dist/esm/Components/DatePicker/TimeOnlyPicker.js +2 -1
  127. package/dist/esm/Components/DatePicker/dayStates.js +2 -1
  128. package/dist/esm/Components/Drawer/Drawer.js +2 -1
  129. package/dist/esm/Components/Dropdown/DropDown.js +4 -10
  130. package/dist/esm/Components/FilePreview/FilePreview.js +3 -2
  131. package/dist/esm/Components/FileUpload/FileUpload.js +10 -3
  132. package/dist/esm/Components/FileUploader/FileUploader.js +4 -0
  133. package/dist/esm/Components/FilterSidebar/FilterSidebar.js +7 -4
  134. package/dist/esm/Components/Input/TextInput.styles.js +10 -6
  135. package/dist/esm/Components/KanbanBoard/AccountCard.js +4 -2
  136. package/dist/esm/Components/KanbanBoard/KanbanBoard.js +6 -5
  137. package/dist/esm/Components/NavigationBar/NavigationBar.js +5 -3
  138. package/dist/esm/Components/Notification/Notification.js +4 -3
  139. package/dist/esm/Components/NotificationBell/NotificationPanel.js +4 -3
  140. package/dist/esm/Components/OrgSwitcher/OrgSwitcher.js +2 -4
  141. package/dist/esm/Components/OrganizationDetails/CreateOrgModal.js +2 -1
  142. package/dist/esm/Components/OrganizationDetails/OrganizationDetails.js +5 -3
  143. package/dist/esm/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +13 -8
  144. package/dist/esm/Components/ScrollToTop/ScrollToTop.js +5 -4
  145. package/dist/esm/Components/SearchSelect/SearchSelect.js +46 -37
  146. package/dist/esm/Components/SearchSelect/searchSelectNav.js +32 -0
  147. package/dist/esm/Components/Select/SelectPopup.js +4 -5
  148. package/dist/esm/Components/Select/optionRowInk.js +7 -0
  149. package/dist/esm/Components/SelectSearch/SelectSearch.js +4 -12
  150. package/dist/esm/Components/SettingRow/SettingRow.js +2 -1
  151. package/dist/esm/Components/SettingRow/SettingsSection.js +2 -1
  152. package/dist/esm/Components/SideBar/SecondaryBar.js +4 -3
  153. package/dist/esm/Components/SideBar/SideBar.js +17 -14
  154. package/dist/esm/Components/SideBar/components/MenuItemBox.js +7 -4
  155. package/dist/esm/Components/SideBar/components/MenuPopoverContent.js +2 -1
  156. package/dist/esm/Components/SideBar/components/OtherApps.js +2 -1
  157. package/dist/esm/Components/SideBar/components/PinnedSection.js +7 -4
  158. package/dist/esm/Components/SideBar/sidebarMotion.js +3 -0
  159. package/dist/esm/Components/SignInActivityTable/SignInActivityTable.js +6 -4
  160. package/dist/esm/Components/StageProgress/StageItem.js +5 -2
  161. package/dist/esm/Components/StageProgress/StepperStage.js +2 -2
  162. package/dist/esm/Components/StatCard/StatCard.js +2 -1
  163. package/dist/esm/Components/Table/Table.js +12 -7
  164. package/dist/esm/Components/Table/components/TableActions.js +3 -2
  165. package/dist/esm/Components/Table/components/TableBody.js +10 -2
  166. package/dist/esm/Components/Table/components/TableHeader.js +9 -4
  167. package/dist/esm/Components/Table/components/TableLoading.js +5 -4
  168. package/dist/esm/Components/Table/filters/CompactSelect.js +4 -12
  169. package/dist/esm/Components/Table/settings/TableSettings.js +8 -3
  170. package/dist/esm/Components/Table/variants/TableVariantContext.js +3 -3
  171. package/dist/esm/Components/Table/variants/classic.js +3 -2
  172. package/dist/esm/Components/Timeline/Timeline.js +11 -4
  173. package/dist/esm/Components/Toaster/Toaster.js +20 -9
  174. package/dist/esm/Components/Toggle/TableToggle.js +5 -2
  175. package/dist/esm/Components/UserDetails/AddUserModal.js +2 -1
  176. package/dist/esm/Components/UserDetails/ChangeRoleModal.js +2 -1
  177. package/dist/esm/Components/UserDetails/UserDetails.js +3 -1
  178. package/dist/esm/Components/WorkspaceWindow/WorkspaceTrayPreview.js +4 -0
  179. package/dist/esm/Components/WorkspaceWindow/WorkspaceWindow.js +26 -19
  180. package/dist/esm/Theme/chakra/Card.styles.js +4 -1
  181. package/dist/esm/Theme/chakra/Menu.styles.js +10 -0
  182. package/dist/esm/Theme/chakra/Popover.styles.js +2 -0
  183. package/dist/esm/Theme/chakra/componentStyles.js +12 -8
  184. package/dist/esm/Theme/chakra/motion.js +1 -0
  185. package/dist/esm/Theme/chakra/overlay.styles.js +3 -0
  186. package/dist/esm/Theme/tokens/brands/index.js +16 -0
  187. package/dist/esm/Theme/tokens/brands/radiant/palette.light.js +15 -0
  188. package/dist/esm/Theme/tokens/brands/rosewood/palette.light.js +10 -10
  189. package/dist/esm/Theme/tokens/brands/zinc/palette.dark.js +3 -35
  190. package/dist/esm/Theme/tokens/builders/accentText.js +5 -0
  191. package/dist/esm/Theme/tokens/builders/buildDarkPalette.js +38 -9
  192. package/dist/esm/Theme/tokens/builders/filledSurface.js +18 -5
  193. package/dist/esm/Theme/tokens/builders/mutedText.js +12 -2
  194. package/dist/esm/Theme/tokens/builders/planeStep.js +14 -0
  195. package/dist/esm/Theme/tokens/builders/planes.js +28 -0
  196. package/dist/esm/Theme/tokens/builders/skeletonShimmer.js +21 -0
  197. package/dist/esm/Theme/tokens/builders/surfaceRaised.js +16 -7
  198. package/dist/esm/Theme/tokens/builders/surfaceRungs.js +3 -1
  199. package/dist/esm/Theme/tokens/primitives/index.js +1 -1
  200. package/dist/esm/Theme/tokens/primitives/motion.js +1 -0
  201. package/dist/esm/Theme/tokens/primitives/shadows.js +54 -5
  202. package/dist/esm/Theme/tokens/primitives/typography.js +1 -1
  203. package/dist/esm/Utils/table.js +2 -2
  204. package/dist/esm/index.js +4 -3
  205. package/dist/index.d.ts +5 -4
  206. package/dist/index.js +15 -6
  207. package/package.json +1 -1
@@ -44,6 +44,7 @@ const lucide_react_1 = require("lucide-react");
44
44
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
45
45
  const outlineRung_1 = require("../../Theme/tokens/builders/outlineRung");
46
46
  const accentText_1 = require("../../Theme/tokens/builders/accentText");
47
+ const planeStep_1 = require("../../Theme/tokens/builders/planeStep");
47
48
  const rowStates_1 = require("../../Theme/tokens/builders/rowStates");
48
49
  const focusRing_styles_1 = require("../../Theme/chakra/focusRing.styles");
49
50
  const EmptyState_1 = __importDefault(require("../EmptyState/EmptyState"));
@@ -98,6 +99,7 @@ const UserDetails = ({ users, selectedUser, selectedUserId, roleOptions = [], ca
98
99
  const [actionUserId, setActionUserId] = (0, react_1.useState)(null);
99
100
  const border = colors.boxborder[200];
100
101
  const surface = colors.background[50];
102
+ const detailTile = (0, planeStep_1.bandOn)(colors.primary[50], surface);
101
103
  const rowBackgrounds = (0, react_1.useMemo)(() => (0, rowStates_1.listRowBackgrounds)(colors), [colors]);
102
104
  const muted = colors.textMuted;
103
105
  const heading = colors.text[900];
@@ -138,7 +140,7 @@ const UserDetails = ({ users, selectedUser, selectedUserId, roleOptions = [], ca
138
140
  const Icon = (_a = detail.icon) !== null && _a !== void 0 ? _a : lucide_react_1.UserRound;
139
141
  return ((0, jsx_runtime_1.jsxs)(react_1.default.Fragment, { children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { gap: 3, px: 3, py: 2.5, _hover: {
140
142
  bg: (0, outlineRung_1.resolveHoverTint)(colors.gray[50], surface),
141
- }, alignItems: "center", transition: "background 0.15s ease", children: [(0, jsx_runtime_1.jsx)(react_2.Flex, { align: "center", justify: "center", boxSize: "30px", bg: colors.primary[50], borderRadius: "lg", color: (0, accentText_1.accentTextOnCanvas)(colors.primary, colors.primary[50]), flexShrink: 0, children: (0, jsx_runtime_1.jsx)(Icon, { size: 15 }) }), (0, jsx_runtime_1.jsx)(react_2.Box, { minWidth: "110px", children: (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: "xs", fontWeight: 600, color: muted, children: detail.label }) }), (0, jsx_runtime_1.jsx)(react_2.Box, { flex: 1, children: (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: "sm", color: heading, fontWeight: 500, children: detail.value }) })] }), index < selectedUser.details.length - 1 && ((0, jsx_runtime_1.jsx)(react_2.Divider, { borderColor: border }))] }, index));
143
+ }, alignItems: "center", transition: "background 0.15s ease", children: [(0, jsx_runtime_1.jsx)(react_2.Flex, { align: "center", justify: "center", boxSize: "30px", bg: detailTile, borderRadius: "lg", color: (0, accentText_1.accentTextOnCanvas)(colors.primary, detailTile), flexShrink: 0, children: (0, jsx_runtime_1.jsx)(Icon, { size: 15 }) }), (0, jsx_runtime_1.jsx)(react_2.Box, { minWidth: "110px", children: (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: "xs", fontWeight: 600, color: muted, children: detail.label }) }), (0, jsx_runtime_1.jsx)(react_2.Box, { flex: 1, children: (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: "sm", color: heading, fontWeight: 500, children: detail.value }) })] }), index < selectedUser.details.length - 1 && ((0, jsx_runtime_1.jsx)(react_2.Divider, { borderColor: border }))] }, index));
142
144
  }) })] })] })) : ((0, jsx_runtime_1.jsx)(EmptyState_1.default, { icon: lucide_react_1.UserRound, title: labels.selectTeamMember, description: labels.noUserSelected, minH: "300px" })) })] }), (0, jsx_runtime_1.jsx)(AddUserModal_1.default, { isOpen: isAddUserOpen, onClose: onAddUserClose, roleOptions: roleOptions, isLoading: isAddUserLoading, onSubmit: async (values) => {
143
145
  await (onAddUserSubmit === null || onAddUserSubmit === void 0 ? void 0 : onAddUserSubmit(values));
144
146
  onAddUserClose();
@@ -21,7 +21,11 @@ function WorkspaceTrayPreview({ children, preview, enabled = true, openDelayMs =
21
21
  const [open, setOpen] = (0, react_1.useState)(false);
22
22
  const openTimer = (0, react_1.useRef)(null);
23
23
  const closeTimer = (0, react_1.useRef)(null);
24
+ const openRef = (0, react_1.useRef)(false);
24
25
  const setOpenState = (0, react_1.useCallback)((next) => {
26
+ if (openRef.current === next)
27
+ return;
28
+ openRef.current = next;
25
29
  setOpen(next);
26
30
  onOpenChange === null || onOpenChange === void 0 ? void 0 : onOpenChange(next);
27
31
  }, [onOpenChange]);
@@ -1,3 +1,3 @@
1
1
  import type { WorkspaceTrayProps, WorkspaceWindowProps } from "./WorkspaceWindowProps";
2
- export default function WorkspaceWindow({ title, state, children, onMinimize, onClose, onOpenFullPage, onOverlayClick, headerActions, testId, }: WorkspaceWindowProps): import("react/jsx-runtime").JSX.Element | null;
3
- export declare function WorkspaceTray({ items, onRestore, onClose, testId, renderItem, }: WorkspaceTrayProps): import("react/jsx-runtime").JSX.Element | null;
2
+ export default function WorkspaceWindow({ title, state, children, onMinimize, onClose, onOpenFullPage, onOverlayClick, headerActions, labels, finalFocusRef, testId, }: WorkspaceWindowProps): import("react/jsx-runtime").JSX.Element | null;
3
+ export declare function WorkspaceTray({ items, onRestore, onClose, testId, placement, offset, closeLabel, dirtyLabel, label, renderItem, }: WorkspaceTrayProps): import("react/jsx-runtime").JSX.Element | null;
@@ -12,7 +12,7 @@ const lucide_react_1 = require("lucide-react");
12
12
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
13
13
  const zIndices_1 = __importDefault(require("../../Theme/tokens/primitives/zIndices"));
14
14
  const accentText_1 = require("../../Theme/tokens/builders/accentText");
15
- // NOTE: no maximize/restore toggle (removed by product decision) — onMedium/onMaximize kept optional for back-compat.
15
+ // NOTE: no maximize/restore toggle (removed by product decision); onMedium/onMaximize stay as deprecated no-ops.
16
16
  const WINDOW_SIZE = { maxW: "88rem", h: "92vh" };
17
17
  const WindowTitle = ({ testId, color, children }) => {
18
18
  const { headerId, setHeaderMounted } = (0, react_1.useModalContext)();
@@ -23,7 +23,8 @@ const WindowTitle = ({ testId, color, children }) => {
23
23
  return ((0, jsx_runtime_1.jsx)(react_1.Text, { id: headerId, fontSize: "sm", fontWeight: 600, color: color, noOfLines: 1, "data-testid": `${testId}-title`, children: children }));
24
24
  };
25
25
  // Presentational floating "workspace window" (Jira-style dialog), headless — the parent owns window state.
26
- function WorkspaceWindow({ title, state, children, onMinimize, onClose, onOpenFullPage, onOverlayClick, headerActions, testId = "workspace-window", }) {
26
+ function WorkspaceWindow({ title, state, children, onMinimize, onClose, onOpenFullPage, onOverlayClick, headerActions, labels, finalFocusRef, testId = "workspace-window", }) {
27
+ var _a, _b, _c;
27
28
  // Must run before the early return: a minimized render would otherwise skip the hook
28
29
  // and change hook order when the window reopens.
29
30
  const theme = (0, useCustomTheme_1.useCustomTheme)();
@@ -33,28 +34,34 @@ function WorkspaceWindow({ title, state, children, onMinimize, onClose, onOpenFu
33
34
  return ((0, jsx_runtime_1.jsxs)(react_1.Modal, { isOpen: true, onClose: () => onClose === null || onClose === void 0 ? void 0 : onClose(), size: "full", isCentered: true, scrollBehavior: "inside",
34
35
  // Don't discard unsaved work on an accidental overlay click / Esc — the
35
36
  // parent decides via the explicit Close control.
36
- closeOnOverlayClick: false, closeOnEsc: false, children: [(0, jsx_runtime_1.jsx)(react_1.ModalOverlay, { backdropFilter: "blur(3px)" }), (0, jsx_runtime_1.jsx)(react_1.ModalContent, { bg: "transparent", boxShadow: "none", m: 0, display: "flex", alignItems: "center", justifyContent: "center",
37
+ closeOnOverlayClick: false, closeOnEsc: false, finalFocusRef: finalFocusRef, children: [(0, jsx_runtime_1.jsx)(react_1.ModalOverlay, { backdropFilter: "blur(3px)" }), (0, jsx_runtime_1.jsx)(react_1.ModalContent, { bg: "transparent", boxShadow: "none", m: 0, display: "flex", alignItems: "center", justifyContent: "center",
37
38
  // NOTE: size="full" blocks Chakra's own closeOnOverlayClick — detect the outside click ourselves instead.
38
39
  onMouseDown: (e) => {
39
40
  if (e.target === e.currentTarget)
40
41
  onOverlayClick === null || onOverlayClick === void 0 ? void 0 : onOverlayClick();
41
- }, "data-testid": `${testId}-backdrop`, children: (0, jsx_runtime_1.jsxs)(react_1.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: [(0, jsx_runtime_1.jsxs)(react_1.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: [(0, jsx_runtime_1.jsx)(WindowTitle, { testId: testId, color: theme.colors.text[700], children: title }), (0, jsx_runtime_1.jsxs)(react_1.HStack, { spacing: 1, children: [headerActions, onOpenFullPage ? ((0, jsx_runtime_1.jsx)(react_1.IconButton, { "aria-label": "Open full page", size: "xs", variant: "ghost", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.ExternalLink, { size: 14 }), onClick: onOpenFullPage, "data-testid": `${testId}-fullpage` })) : null, onMinimize ? ((0, jsx_runtime_1.jsx)(react_1.IconButton, { "aria-label": "Minimize", size: "xs", variant: "ghost", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Minus, { size: 15 }), onClick: onMinimize, "data-testid": `${testId}-minimize` })) : null, onClose ? ((0, jsx_runtime_1.jsx)(react_1.IconButton, { "aria-label": "Close", size: "xs", variant: "ghost", colorScheme: "red", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { size: 15 }), onClick: onClose, "data-testid": `${testId}-close` })) : null] })] }), (0, jsx_runtime_1.jsx)(react_1.Box, { flex: "1", overflow: "auto", px: { base: 3, md: 5 }, py: 4, children: children })] }) })] }));
42
+ }, "data-testid": `${testId}-backdrop`, children: (0, jsx_runtime_1.jsxs)(react_1.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: [(0, jsx_runtime_1.jsxs)(react_1.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: [(0, jsx_runtime_1.jsx)(WindowTitle, { testId: testId, color: theme.colors.text[700], children: title }), (0, jsx_runtime_1.jsxs)(react_1.HStack, { spacing: 1, children: [headerActions, onOpenFullPage ? ((0, jsx_runtime_1.jsx)(react_1.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: (0, jsx_runtime_1.jsx)(lucide_react_1.ExternalLink, { size: 14 }), onClick: onOpenFullPage, "data-testid": `${testId}-fullpage` })) : null, onMinimize ? ((0, jsx_runtime_1.jsx)(react_1.IconButton, { "aria-label": (_b = labels === null || labels === void 0 ? void 0 : labels.minimize) !== null && _b !== void 0 ? _b : "Minimize", size: "xs", variant: "ghost", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Minus, { size: 15 }), onClick: onMinimize, "data-testid": `${testId}-minimize` })) : null, onClose ? ((0, jsx_runtime_1.jsx)(react_1.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: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { size: 15 }), onClick: onClose, "data-testid": `${testId}-close` })) : null] })] }), (0, jsx_runtime_1.jsx)(react_1.Box, { flex: "1", overflow: "auto", px: { base: 3, md: 5 }, py: 4, children: children })] }) })] }));
42
43
  }
43
- // Bottom tray of restore pills for minimized WorkspaceWindows — presentational, parent supplies handlers.
44
- function WorkspaceTray({ items, onRestore, onClose, testId = "workspace-tray", renderItem, }) {
44
+ const cssLength = (value) => (typeof value === "number" ? `${value}px` : value);
45
+ // Portalled above modal overlays; aria-live keeps Chakra's modal aria-hidden off it, data-no-focus-lock keeps the focus trap off it.
46
+ function WorkspaceTray({ items, onRestore, onClose, testId = "workspace-tray", placement = "bottom-end", offset, closeLabel, dirtyLabel = "Unsaved changes", label = "Minimized windows", renderItem, }) {
47
+ var _a, _b;
45
48
  const theme = (0, useCustomTheme_1.useCustomTheme)();
46
49
  if (!items.length)
47
50
  return null;
48
- return (
49
- // NOTE: floating bottom-right cluster (Gmail/Jira pattern), not a docked bar — needs no reserved page gutter.
50
- (0, jsx_runtime_1.jsx)(react_1.Flex, { position: "fixed", bottom: 4, right: 4, zIndex: zIndices_1.default.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) => {
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 (0, jsx_runtime_1.jsx)(react_1.Box, { children: renderItem(item, api) }, item.id);
57
- }
58
- return ((0, jsx_runtime_1.jsxs)(react_1.HStack, { spacing: 1, pl: 3, pr: 1, py: 1, borderRadius: "full", bg: theme.colors.primary[100], color: (0, accentText_1.accentTextOnCanvas)(theme.colors.primary, theme.colors.primary[100]), boxShadow: "md", borderWidth: "1px", borderColor: theme.colors.primary[200], "data-testid": `${testId}-pill`, children: [(0, jsx_runtime_1.jsx)(react_1.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 ? ((0, jsx_runtime_1.jsx)(react_1.IconButton, { "aria-label": "Close", size: "xs", variant: "ghost", borderRadius: "full", minW: "auto", h: "auto", p: 1, color: "inherit", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { size: 13 }), onClick: api.close, "data-testid": `${testId}-close` })) : null] }, item.id));
59
- }) }));
51
+ const atEnd = placement === "bottom-end";
52
+ const inset = {
53
+ bottom: cssLength((_a = offset === null || offset === void 0 ? void 0 : offset.y) !== null && _a !== void 0 ? _a : "1rem"),
54
+ [atEnd ? "right" : "left"]: cssLength((_b = offset === null || offset === void 0 ? void 0 : offset.x) !== null && _b !== void 0 ? _b : "1rem"),
55
+ };
56
+ const ink = (0, accentText_1.accentTextOnCanvas)(theme.colors.primary, theme.colors.primary[100]);
57
+ return ((0, jsx_runtime_1.jsx)(react_1.Portal, { children: (0, jsx_runtime_1.jsx)(react_1.Flex, { role: "region", "aria-label": label, "aria-live": "polite", "data-no-focus-lock": "true", position: "fixed", ...inset, zIndex: zIndices_1.default.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) => {
58
+ const api = {
59
+ restore: () => onRestore === null || onRestore === void 0 ? void 0 : onRestore(item.id),
60
+ close: () => onClose === null || onClose === void 0 ? void 0 : onClose(item.id),
61
+ };
62
+ if (renderItem) {
63
+ return (0, jsx_runtime_1.jsx)(react_1.Box, { children: renderItem(item, api) }, item.id);
64
+ }
65
+ return ((0, jsx_runtime_1.jsxs)(react_1.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 ? ((0, jsx_runtime_1.jsx)(react_1.Box, { role: "img", "aria-label": dirtyLabel, boxSize: "0.5rem", borderRadius: "full", bg: "currentColor", flexShrink: 0, "data-testid": `${testId}-dirty` })) : null, (0, jsx_runtime_1.jsxs)(react_1.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 ? ((0, jsx_runtime_1.jsx)(react_1.Box, { as: "span", fontWeight: 400, ml: 1.5, children: item.subtitle })) : null] }), onClose ? ((0, jsx_runtime_1.jsx)(react_1.IconButton, { "aria-label": closeLabel ? closeLabel(item) : "Close", size: "xs", variant: "ghost", borderRadius: "full", minW: "auto", h: "auto", p: 1, color: "inherit", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.X, { size: 13 }), onClick: api.close, "data-testid": `${testId}-close` })) : null] }, item.id));
66
+ }) }) }));
60
67
  }
@@ -1,4 +1,4 @@
1
- import type { ReactNode } from "react";
1
+ import type { ReactNode, RefObject } from "react";
2
2
  /**
3
3
  * Window state for a WorkspaceWindow.
4
4
  * - "medium": default centered dialog (Jira-style)
@@ -6,6 +6,15 @@ import type { ReactNode } from "react";
6
6
  * - "minimized": collapsed to a tray pill (rendered by WorkspaceTray, not the window)
7
7
  */
8
8
  export type WorkspaceWindowState = "medium" | "maximized" | "minimized";
9
+ /** Accessible names of the window's icon controls; omitted keys keep the English default. */
10
+ export interface WorkspaceWindowLabels {
11
+ /** Default "Minimize". */
12
+ minimize?: string;
13
+ /** Default "Close". */
14
+ close?: string;
15
+ /** Default "Open full page". */
16
+ openFullPage?: string;
17
+ }
9
18
  /** Props for one WorkspaceWindow instance; minimized windows render separately via WorkspaceTrayProps below. */
10
19
  export interface WorkspaceWindowProps {
11
20
  /** Title shown in the window's control bar. */
@@ -29,6 +38,13 @@ export interface WorkspaceWindowProps {
29
38
  * itself (e.g. minimize-on-backdrop-click) via this callback.
30
39
  */
31
40
  onOverlayClick?: () => void;
41
+ /** Translated names for the Minimize, Close and Open full page buttons. */
42
+ labels?: WorkspaceWindowLabels;
43
+ /**
44
+ * Where focus lands when the window closes or minimizes. Without it focus returns to whatever opened the
45
+ * window, which is gone once it was restored from the tray; point it at a stable element (e.g. the page's main region).
46
+ */
47
+ finalFocusRef?: RefObject<HTMLElement>;
32
48
  /** Extra controls rendered in the control bar, left of the window buttons. */
33
49
  headerActions?: ReactNode;
34
50
  /** data-testid for the window container. */
@@ -38,14 +54,34 @@ export interface WorkspaceWindowProps {
38
54
  export interface WorkspaceTrayItem {
39
55
  id: string;
40
56
  title: ReactNode;
57
+ /** Shows an unsaved-changes dot on the built-in pill; named for screen readers by the tray's `dirtyLabel`. */
58
+ isDirty?: boolean;
59
+ /** Secondary text after the title on the built-in pill, e.g. a record type or id. */
60
+ subtitle?: ReactNode;
41
61
  }
42
- /** Props for the bottom-right cluster of minimized-window pills; renders nothing when items is empty. */
62
+ /** Props for the cluster of minimized-window pills; renders nothing when items is empty. */
43
63
  export interface WorkspaceTrayProps {
44
64
  /** Minimized items rendered as restore pills along the bottom. */
45
65
  items: WorkspaceTrayItem[];
46
66
  onRestore?: (id: string) => void;
47
67
  onClose?: (id: string) => void;
48
68
  testId?: string;
69
+ /**
70
+ * Which bottom corner the tray sits in. Default "bottom-end". The tray is portalled above modals and stays
71
+ * reachable while a modal is open.
72
+ */
73
+ placement?: "bottom-end" | "bottom-start";
74
+ /** Distance from the viewport edges, to clear a sticky bar. Numbers are px, strings any CSS length. Default 1rem each. */
75
+ offset?: {
76
+ x?: number | string;
77
+ y?: number | string;
78
+ };
79
+ /** Accessible name for each pill's close button. Default "Close"; pass one that names the item for non-English or per-window labels. */
80
+ closeLabel?: (item: WorkspaceTrayItem) => string;
81
+ /** Accessible name of the unsaved dot on a pill with `isDirty`. Default "Unsaved changes". */
82
+ dirtyLabel?: string;
83
+ /** Accessible name of the tray region. Default "Minimized windows". */
84
+ label?: string;
49
85
  /**
50
86
  * Full override for a single item's pill markup — e.g. to wrap it in an
51
87
  * app-specific hover preview, or to show extra state (a dirty dot) the
@@ -67,10 +67,16 @@ export declare const Card: {
67
67
  [$shadow.variable]: string;
68
68
  };
69
69
  };
70
+ elevated: {
71
+ container: {
72
+ [$border.variable]: string;
73
+ [$shadow.variable]: string;
74
+ };
75
+ };
70
76
  } | undefined;
71
77
  defaultProps?: {
72
78
  size?: "sm" | "md" | "lg" | undefined;
73
- variant?: "outline" | undefined;
79
+ variant?: "elevated" | "outline" | undefined;
74
80
  colorScheme?: string | undefined;
75
81
  } | undefined;
76
82
  parts: ("header" | "container" | "body" | "footer")[];
@@ -39,10 +39,13 @@ const variants = {
39
39
  outline: definePartsStyle({
40
40
  container: { [$border.variable]: "1px", [$shadow.variable]: "none" },
41
41
  }),
42
+ elevated: definePartsStyle({
43
+ container: { [$border.variable]: "0", [$shadow.variable]: "shadows.card" },
44
+ }),
42
45
  };
43
46
  exports.Card = defineMultiStyleConfig({
44
47
  baseStyle,
45
48
  sizes,
46
49
  variants,
47
- defaultProps: { variant: "outline", size: "md" },
50
+ defaultProps: { variant: "elevated", size: "md" },
48
51
  });
@@ -1,8 +1,4 @@
1
1
  import type { StyleFunctionProps } from "@chakra-ui/react";
2
- declare const $bg: {
3
- variable: string;
4
- reference: string;
5
- };
6
2
  declare const $itemBg: {
7
3
  variable: string;
8
4
  reference: string;
@@ -10,7 +6,8 @@ declare const $itemBg: {
10
6
  export declare const Menu: {
11
7
  baseStyle?: (({ theme }: StyleFunctionProps) => {
12
8
  list: {
13
- [$bg.variable]: string;
9
+ borderRadius: "xl";
10
+ boxShadow: "md";
14
11
  bg: string;
15
12
  color: string;
16
13
  borderWidth: string;
@@ -18,10 +15,12 @@ export declare const Menu: {
18
15
  borderColor: string;
19
16
  };
20
17
  item: {
18
+ color: string;
21
19
  minH: string;
22
20
  px: string;
23
21
  py: string;
24
22
  mx: string;
23
+ width: string;
25
24
  fontSize: string;
26
25
  borderRadius: "md";
27
26
  bg: string;
@@ -41,6 +40,13 @@ export declare const Menu: {
41
40
  [$itemBg.variable]: string;
42
41
  bg: string;
43
42
  };
43
+ "&[aria-checked=true]": {
44
+ color: string;
45
+ fontWeight: number;
46
+ "& .chakra-menu__icon-wrapper": {
47
+ color: string;
48
+ };
49
+ };
44
50
  };
45
51
  }) | undefined;
46
52
  sizes?: {
@@ -4,8 +4,10 @@ exports.Menu = void 0;
4
4
  const react_1 = require("@chakra-ui/react");
5
5
  const anatomy_1 = require("@chakra-ui/anatomy");
6
6
  const rowStates_1 = require("../tokens/builders/rowStates");
7
+ const optionRowInk_1 = require("../../Components/Select/optionRowInk");
7
8
  const optionRowSizes_1 = require("../tokens/primitives/optionRowSizes");
8
9
  const paletteFromTheme_1 = require("./paletteFromTheme");
10
+ const overlay_styles_1 = require("./overlay.styles");
9
11
  const itemRowSpec = optionRowSizes_1.OPTION_ROW_SIZES.sm;
10
12
  const { defineMultiStyleConfig, definePartsStyle } = (0, react_1.createMultiStyleConfigHelpers)(anatomy_1.menuAnatomy.keys);
11
13
  const $bg = (0, react_1.cssVar)("menu-bg");
@@ -24,12 +26,15 @@ const baseStyle = definePartsStyle(({ theme }) => {
24
26
  borderWidth: "1px",
25
27
  borderStyle: "solid",
26
28
  borderColor: colors.boxborder[200],
29
+ ...overlay_styles_1.POPUP_SURFACE,
27
30
  },
28
31
  item: {
32
+ color: (0, optionRowInk_1.optionRowInk)(colors, false),
29
33
  minH: itemRowSpec.minH,
30
34
  px: itemRowSpec.px,
31
35
  py: itemRowSpec.py,
32
36
  mx: itemRowSpec.mx,
37
+ width: `calc(100% - 2 * ${itemRowSpec.mx})`,
33
38
  fontSize: itemRowSpec.fontSize,
34
39
  borderRadius: optionRowSizes_1.OPTION_ROW_RADIUS,
35
40
  bg: "transparent",
@@ -37,6 +42,11 @@ const baseStyle = definePartsStyle(({ theme }) => {
37
42
  _hover: { [$itemBg.variable]: hoverBg, bg: $itemBg.reference },
38
43
  _active: { [$itemBg.variable]: activeBg, bg: $itemBg.reference },
39
44
  _expanded: { [$itemBg.variable]: hoverBg, bg: $itemBg.reference },
45
+ "&[aria-checked=true]": {
46
+ color: (0, optionRowInk_1.optionRowInk)(colors, true),
47
+ fontWeight: (0, optionRowInk_1.optionRowWeight)(true),
48
+ "& .chakra-menu__icon-wrapper": { color: colors.accentText },
49
+ },
40
50
  },
41
51
  };
42
52
  });
@@ -1,17 +1,9 @@
1
1
  import type { StyleFunctionProps } from "@chakra-ui/react";
2
- declare const $popperBg: {
3
- variable: string;
4
- reference: string;
5
- };
6
- declare const $arrowShadowColor: {
7
- variable: string;
8
- reference: string;
9
- };
10
2
  export declare const Popover: {
11
3
  baseStyle?: (({ theme }: StyleFunctionProps) => {
12
4
  content: {
13
- [$popperBg.variable]: string;
14
- [$arrowShadowColor.variable]: string;
5
+ borderRadius: "xl";
6
+ boxShadow: "md";
15
7
  bg: string;
16
8
  color: string;
17
9
  borderWidth: string;
@@ -36,4 +28,3 @@ export declare const Popover: {
36
28
  } | undefined;
37
29
  parts: ("header" | "content" | "body" | "footer" | "closeButton" | "popper" | "arrow")[];
38
30
  };
39
- export {};
@@ -4,6 +4,7 @@ exports.Popover = void 0;
4
4
  const react_1 = require("@chakra-ui/react");
5
5
  const anatomy_1 = require("@chakra-ui/anatomy");
6
6
  const paletteFromTheme_1 = require("./paletteFromTheme");
7
+ const overlay_styles_1 = require("./overlay.styles");
7
8
  const { defineMultiStyleConfig, definePartsStyle } = (0, react_1.createMultiStyleConfigHelpers)(anatomy_1.popoverAnatomy.keys);
8
9
  const $popperBg = (0, react_1.cssVar)("popper-bg");
9
10
  const $arrowShadowColor = (0, react_1.cssVar)("popper-arrow-shadow-color");
@@ -19,6 +20,7 @@ const baseStyle = definePartsStyle(({ theme }) => {
19
20
  borderWidth: "1px",
20
21
  borderStyle: "solid",
21
22
  borderColor: colors.boxborder[200],
23
+ ...overlay_styles_1.POPUP_SURFACE,
22
24
  },
23
25
  };
24
26
  });
@@ -132,6 +132,10 @@ declare const common: {
132
132
  inner: string;
133
133
  none: string;
134
134
  darkLg: string;
135
+ card: string;
136
+ float: string;
137
+ dialog: string;
138
+ sheet: string;
135
139
  };
136
140
  radii: {
137
141
  none: string;
@@ -94,10 +94,15 @@ export declare const componentStyles: {
94
94
  [x: string]: string;
95
95
  };
96
96
  };
97
+ elevated: {
98
+ container: {
99
+ [x: string]: string;
100
+ };
101
+ };
97
102
  } | undefined;
98
103
  defaultProps?: {
99
104
  size?: "sm" | "md" | "lg" | undefined;
100
- variant?: "outline" | undefined;
105
+ variant?: "elevated" | "outline" | undefined;
101
106
  colorScheme?: string | undefined;
102
107
  } | undefined;
103
108
  parts: ("header" | "container" | "body" | "footer")[];
@@ -168,7 +173,8 @@ export declare const componentStyles: {
168
173
  Menu: {
169
174
  baseStyle?: (({ theme }: StyleFunctionProps) => {
170
175
  list: {
171
- [x: string]: string;
176
+ borderRadius: "xl";
177
+ boxShadow: "md";
172
178
  bg: string;
173
179
  color: string;
174
180
  borderWidth: string;
@@ -176,10 +182,12 @@ export declare const componentStyles: {
176
182
  borderColor: string;
177
183
  };
178
184
  item: {
185
+ color: string;
179
186
  minH: string;
180
187
  px: string;
181
188
  py: string;
182
189
  mx: string;
190
+ width: string;
183
191
  fontSize: string;
184
192
  borderRadius: "md";
185
193
  bg: string;
@@ -199,6 +207,13 @@ export declare const componentStyles: {
199
207
  [x: string]: string;
200
208
  bg: string;
201
209
  };
210
+ "&[aria-checked=true]": {
211
+ color: string;
212
+ fontWeight: number;
213
+ "& .chakra-menu__icon-wrapper": {
214
+ color: string;
215
+ };
216
+ };
202
217
  };
203
218
  }) | undefined;
204
219
  sizes?: {
@@ -284,7 +299,8 @@ export declare const componentStyles: {
284
299
  Popover: {
285
300
  baseStyle?: (({ theme }: StyleFunctionProps) => {
286
301
  content: {
287
- [x: string]: string;
302
+ borderRadius: "xl";
303
+ boxShadow: "md";
288
304
  bg: string;
289
305
  color: string;
290
306
  borderWidth: string;
@@ -15,6 +15,7 @@ const accentText_1 = require("../tokens/builders/accentText");
15
15
  const filledSurface_1 = require("../tokens/builders/filledSurface");
16
16
  const outlineRung_1 = require("../tokens/builders/outlineRung");
17
17
  const tone_1 = require("../tokens/builders/tone");
18
+ const skeletonShimmer_1 = require("../tokens/builders/skeletonShimmer");
18
19
  const tooltipSurface_1 = require("../tokens/builders/tooltipSurface");
19
20
  const Drawer_styles_1 = require("./Drawer.styles");
20
21
  const Menu_styles_1 = require("./Menu.styles");
@@ -25,7 +26,7 @@ const Card_styles_1 = require("./Card.styles");
25
26
  // NOTE: guards untethemed scales (blackAlpha/whiteAlpha) whose rgba() rungs would throw in hexToRgb.
26
27
  const isHexColor = (color) => typeof color === "string" && /^#([0-9a-f]{3}|[0-9a-f]{6})$/i.test(color);
27
28
  const solidFillStyle = (palette, swatch) => {
28
- const rung = (0, filledSurface_1.solidFillRung)(swatch, palette.white);
29
+ const rung = (0, filledSurface_1.solidFillRung)(swatch, palette.white, palette.backgroundColor.main);
29
30
  const bg = swatch[rung];
30
31
  return {
31
32
  bg,
@@ -145,19 +146,22 @@ const $skeletonStart = (0, react_1.cssVar)("skeleton-start-color");
145
146
  const $skeletonEnd = (0, react_1.cssVar)("skeleton-end-color");
146
147
  // NOTE: fixes Chakra's Skeleton hardcoding gray.100/.400 via `_dark` (dead here) — an explicit startColor/endColor prop still wins.
147
148
  const Skeleton = {
148
- baseStyle: ({ theme }) => ({
149
- [$skeletonStart.variable]: (0, paletteFromTheme_1.paletteOf)(theme).gray[100],
150
- [$skeletonEnd.variable]: (0, paletteFromTheme_1.paletteOf)(theme).gray[300],
151
- background: $skeletonStart.reference,
152
- borderColor: $skeletonEnd.reference,
153
- }),
149
+ baseStyle: ({ theme }) => {
150
+ const shimmer = (0, skeletonShimmer_1.skeletonShimmer)((0, paletteFromTheme_1.paletteOf)(theme));
151
+ return {
152
+ [$skeletonStart.variable]: shimmer.start,
153
+ [$skeletonEnd.variable]: shimmer.end,
154
+ background: $skeletonStart.reference,
155
+ borderColor: $skeletonEnd.reference,
156
+ };
157
+ },
154
158
  };
155
159
  // NOTE: uses Chakra's own shorthand style keys (bg/w/h/pos) + !important — extendTheme deep-merges by key, so mismatched keys let Chakra's stock value win.
156
160
  const Radio = {
157
161
  baseStyle: ({ theme, colorScheme }) => {
158
162
  const palette = (0, paletteFromTheme_1.paletteOf)(theme);
159
163
  const swatch = (0, paletteFromTheme_1.scaleFor)(palette, colorScheme);
160
- const fill = swatch[(0, filledSurface_1.solidFillRung)(swatch, palette.white)];
164
+ const fill = swatch[(0, filledSurface_1.solidFillRung)(swatch, palette.white, palette.backgroundColor.main)];
161
165
  const dot = (0, filledSurface_1.labelOnFill)(fill, palette.white, palette.black);
162
166
  const hoverFill = (0, outlineRung_1.resolveHoverTint)(fill, fill);
163
167
  return {
@@ -1,5 +1,6 @@
1
1
  import type { SystemStyleObject } from "@chakra-ui/react";
2
2
  export declare const REDUCED_MOTION_QUERY = "@media (prefers-reduced-motion: reduce)";
3
+ export declare const MOTION_OK_QUERY = "@media (prefers-reduced-motion: no-preference)";
3
4
  export declare const usePrefersReducedMotion: () => boolean;
4
5
  /** Spread into `sx`: drops transitions and animations when the user asks for less motion. */
5
6
  export declare const reducedMotionSx: (overrides?: SystemStyleObject) => SystemStyleObject;
@@ -1,8 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.reducedMotionGlobalStyles = exports.REDUCED_MOTION_SELECTOR = exports.MOTION_KEEP_CLASS = exports.reducedMotionSx = exports.usePrefersReducedMotion = exports.REDUCED_MOTION_QUERY = void 0;
3
+ exports.reducedMotionGlobalStyles = exports.REDUCED_MOTION_SELECTOR = exports.MOTION_KEEP_CLASS = exports.reducedMotionSx = exports.usePrefersReducedMotion = exports.MOTION_OK_QUERY = exports.REDUCED_MOTION_QUERY = void 0;
4
4
  const useMatchMedia_1 = require("../../Hooks/useMatchMedia");
5
5
  exports.REDUCED_MOTION_QUERY = "@media (prefers-reduced-motion: reduce)";
6
+ exports.MOTION_OK_QUERY = "@media (prefers-reduced-motion: no-preference)";
6
7
  const MEDIA = "(prefers-reduced-motion: reduce)";
7
8
  const usePrefersReducedMotion = () => (0, useMatchMedia_1.useMatchMedia)(MEDIA, false);
8
9
  exports.usePrefersReducedMotion = usePrefersReducedMotion;
@@ -1,5 +1,10 @@
1
1
  import type { PaletteProps } from "../tokens/types";
2
2
  export declare const OVERLAY_BLUR = "blur(4px)";
3
+ /** Radius and elevation every anchored popup shares: menus, popovers, selects, dropdowns. */
4
+ export declare const POPUP_SURFACE: {
5
+ readonly borderRadius: "xl";
6
+ readonly boxShadow: "md";
7
+ };
3
8
  /** The one Modal/Drawer backdrop; reuse it for any custom full-screen scrim. */
4
9
  export declare const overlayScrimStyles: (colors: Pick<PaletteProps, "black">) => {
5
10
  bg: string;
@@ -1,9 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.dialogPartStyles = exports.overlayScrimStyles = exports.OVERLAY_BLUR = void 0;
3
+ exports.dialogPartStyles = exports.overlayScrimStyles = exports.POPUP_SURFACE = exports.OVERLAY_BLUR = void 0;
4
4
  const scrim_1 = require("../tokens/builders/scrim");
5
5
  const surfaceRaised_1 = require("../tokens/builders/surfaceRaised");
6
+ const radii_1 = require("../tokens/primitives/radii");
6
7
  exports.OVERLAY_BLUR = "blur(4px)";
8
+ /** Radius and elevation every anchored popup shares: menus, popovers, selects, dropdowns. */
9
+ exports.POPUP_SURFACE = { borderRadius: radii_1.RADIUS_ROLE.float, boxShadow: "md" };
7
10
  /** The one Modal/Drawer backdrop; reuse it for any custom full-screen scrim. */
8
11
  const overlayScrimStyles = (colors) => ({
9
12
  bg: (0, scrim_1.overlayScrim)(colors),
@@ -86,6 +86,10 @@ export type CustomThemeProps = {
86
86
  inner: string;
87
87
  none: string;
88
88
  darkLg: string;
89
+ card: string;
90
+ float: string;
91
+ dialog: string;
92
+ sheet: string;
89
93
  };
90
94
  radii: ChakraTheme["radii"] & {
91
95
  none: string;
@@ -17,6 +17,7 @@ import rosewoodDark from "./rosewood/palette.dark";
17
17
  import storefrontDark from "./storefront/palette.dark";
18
18
  import zincDark from "./zinc/palette.dark";
19
19
  import type { BrandPaletteSource, PaletteProps, ResolvedColorMode, ThemeName } from "../types";
20
+ export declare const LIGHT_CANVAS_STEP = 1.09;
20
21
  /** Derived, never hand-written: a copied hex goes stale the moment a canvas moves. */
21
22
  export declare const finalizeLightPalette: (source: BrandPaletteSource) => PaletteProps;
22
23
  export { lavender, meadow, radiant, skyline, slate, emerald, rosewood, storefront, zinc };
@@ -3,7 +3,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.themeNames = exports.palettes = exports.darkPalettes = exports.lightPalettes = exports.zincDark = exports.storefrontDark = exports.rosewoodDark = exports.emeraldDark = exports.slateDark = exports.skylineDark = exports.radiantDark = exports.meadowDark = exports.lavenderDark = exports.zinc = exports.storefront = exports.rosewood = exports.emerald = exports.slate = exports.skyline = exports.radiant = exports.meadow = exports.lavender = exports.finalizeLightPalette = void 0;
6
+ exports.themeNames = exports.palettes = exports.darkPalettes = exports.lightPalettes = exports.zincDark = exports.storefrontDark = exports.rosewoodDark = exports.emeraldDark = exports.slateDark = exports.skylineDark = exports.radiantDark = exports.meadowDark = exports.lavenderDark = exports.zinc = exports.storefront = exports.rosewood = exports.emerald = exports.slate = exports.skyline = exports.radiant = exports.meadow = exports.lavender = exports.finalizeLightPalette = exports.LIGHT_CANVAS_STEP = void 0;
7
7
  const palette_light_1 = __importDefault(require("./lavender/palette.light"));
8
8
  exports.lavender = palette_light_1.default;
9
9
  const palette_light_2 = __importDefault(require("./meadow/palette.light"));
@@ -51,9 +51,25 @@ const surfaceRungs_1 = require("../builders/surfaceRungs");
51
51
  const surfaceRaised_1 = require("../builders/surfaceRaised");
52
52
  const star_1 = require("../builders/star");
53
53
  const lazy_1 = require("../builders/lazy");
54
+ const color_1 = require("../builders/color");
55
+ exports.LIGHT_CANVAS_STEP = 1.09;
56
+ const CANVAS_MIX_STEP = 0.0025;
57
+ const CANVAS_MIX_MAX = 0.5;
58
+ const lightCanvas = (canvas, card, ink) => {
59
+ for (let weight = 0; weight < CANVAS_MIX_MAX; weight += CANVAS_MIX_STEP) {
60
+ const next = (0, color_1.mix)(canvas, ink, weight);
61
+ if ((0, color_1.contrastRatio)(next, card) >= exports.LIGHT_CANVAS_STEP)
62
+ return next;
63
+ }
64
+ return (0, color_1.mix)(canvas, ink, CANVAS_MIX_MAX);
65
+ };
54
66
  /** Derived, never hand-written: a copied hex goes stale the moment a canvas moves. */
55
67
  const finalizeLightPalette = (source) => ({
56
68
  ...source,
69
+ backgroundColor: {
70
+ ...source.backgroundColor,
71
+ base: lightCanvas(source.backgroundColor.base, source.background[50], source.text[900]),
72
+ },
57
73
  sidebar: (0, sidebarAccent_1.withSidebarTokens)(source),
58
74
  accentText: (0, accentText_1.pickAccentText)(source.primary, source.backgroundColor.main),
59
75
  textMuted: (0, mutedText_1.buildMutedText)(source.text, source.backgroundColor.main),
@@ -17,8 +17,22 @@ const primary = {
17
17
  900: "#531a14",
18
18
  opacity: (0, buildBrandTokens_1.buildPrimaryOpacity)(PRIMARY_500),
19
19
  };
20
+ const danger = {
21
+ 50: "#fcedf3",
22
+ 100: "#f5c5db",
23
+ 200: "#f1a9ca",
24
+ 300: "#ec82b4",
25
+ 400: "#ea69a7",
26
+ 500: "#e74494",
27
+ 600: "#d23e87",
28
+ 700: "#a43069",
29
+ 800: "#7f2651",
30
+ 900: "#611c3e",
31
+ };
20
32
  const palette = {
21
33
  ...neutrals_1.neutralTokens,
34
+ red: danger,
35
+ semantic: { ...neutrals_1.neutralTokens.semantic, error: danger },
22
36
  ...(0, brandInk_1.buildBrandInk)(PRIMARY_500),
23
37
  // NOTE: stops retuned so white gradient-button text clears AA at both ends — original let it drop to 4.37/2.15.
24
38
  gradient: { from: "#cd4733", to: "#a36807" }, // terracotta red → amber
@@ -120,6 +134,7 @@ const palette = {
120
134
  boxShadow: {
121
135
  primary: (0, buildBrandTokens_1.buildPrimaryShadowTint)(PRIMARY_500),
122
136
  ...neutrals_1.sharedBoxShadow,
137
+ error: `${danger[500]}47`,
123
138
  },
124
139
  };
125
140
  exports.default = palette;