pixelize-design-library 2.3.1-beta.9 → 2.3.2

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 (193) hide show
  1. package/.cursor/TASK-SETUP.md +43 -0
  2. package/.cursor/agents/be-impl.md +37 -0
  3. package/.cursor/agents/fe-impl.md +39 -0
  4. package/.cursor/agents/task-plan.md +56 -0
  5. package/.cursor/agents/test-create.md +31 -0
  6. package/.cursor/agents/test-exec.md +26 -0
  7. package/.cursor/hooks/task-hint.env +1 -0
  8. package/.cursor/hooks/task-skill-nudge.sh +71 -0
  9. package/.cursor/hooks/task-slash-guard.sh +31 -0
  10. package/.cursor/hooks.json +13 -0
  11. package/.cursor/modules/account-management/MODULE.md +16 -0
  12. package/.cursor/modules/buttons/MODULE.md +13 -0
  13. package/.cursor/modules/cards/MODULE.md +13 -0
  14. package/.cursor/modules/charts/MODULE.md +13 -0
  15. package/.cursor/modules/common/MODULE.md +13 -0
  16. package/.cursor/modules/contact-auth/MODULE.md +13 -0
  17. package/.cursor/modules/data-display/MODULE.md +18 -0
  18. package/.cursor/modules/feedback/MODULE.md +14 -0
  19. package/.cursor/modules/form/MODULE.md +13 -0
  20. package/.cursor/modules/inputs-basic/MODULE.md +13 -0
  21. package/.cursor/modules/inputs-date-file/MODULE.md +19 -0
  22. package/.cursor/modules/inputs-select/MODULE.md +14 -0
  23. package/.cursor/modules/inputs-toggle/MODULE.md +13 -0
  24. package/.cursor/modules/kanban/MODULE.md +14 -0
  25. package/.cursor/modules/layout-navigation/MODULE.md +14 -0
  26. package/.cursor/modules/overlays/MODULE.md +13 -0
  27. package/.cursor/modules/playground/MODULE.md +15 -0
  28. package/.cursor/modules/table/MODULE.md +15 -0
  29. package/.cursor/modules/theme/MODULE.md +15 -0
  30. package/.cursor/modules/types-exports/MODULE.md +17 -0
  31. package/.cursor/modules/utility-ui/MODULE.md +15 -0
  32. package/.cursor/modules/utils-hooks/MODULE.md +13 -0
  33. package/.cursor/pixelize-task-statusline.sh +64 -0
  34. package/.cursor/plans/blocked/.gitkeep +0 -0
  35. package/.cursor/plans/current.md +35 -0
  36. package/.cursor/plans/done/.gitkeep +0 -0
  37. package/.cursor/rules +31 -0
  38. package/.cursor/skills/task/SKILL.md +167 -0
  39. package/CLAUDE.md +122 -0
  40. package/dist/Components/Card/PaymentCard/PaymentCard.d.ts +1 -1
  41. package/dist/Components/Card/PaymentCard/PaymentCard.js +3 -3
  42. package/dist/Components/Card/PaymentCard/PaymentCardProps.d.ts +1 -0
  43. package/dist/Components/CopyButton/CopyButton.d.ts +22 -0
  44. package/dist/Components/CopyButton/CopyButton.js +126 -0
  45. package/dist/Components/CustomModulesTable/CustomModulesTable.d.ts +4 -0
  46. package/dist/Components/CustomModulesTable/CustomModulesTable.js +182 -0
  47. package/dist/Components/CustomModulesTable/CustomModulesTable.test.d.ts +1 -0
  48. package/dist/Components/CustomModulesTable/CustomModulesTable.test.js +84 -0
  49. package/dist/Components/CustomModulesTable/CustomModulesTableProps.d.ts +54 -0
  50. package/dist/Components/CustomModulesTable/CustomModulesTableProps.js +2 -0
  51. package/dist/Components/CustomModulesTable/DeleteModuleModal.d.ts +4 -0
  52. package/dist/Components/CustomModulesTable/DeleteModuleModal.js +33 -0
  53. package/dist/Components/CustomModulesTable/EditModuleModal.d.ts +4 -0
  54. package/dist/Components/CustomModulesTable/EditModuleModal.js +63 -0
  55. package/dist/Components/Dropdown/DropDown.js +110 -28
  56. package/dist/Components/Dropdown/Dropdown.test.d.ts +1 -0
  57. package/dist/Components/Dropdown/Dropdown.test.js +102 -0
  58. package/dist/Components/Dropdown/DropdownProps.d.ts +4 -1
  59. package/dist/Components/EmptyState/EmptyState.d.ts +4 -0
  60. package/dist/Components/EmptyState/EmptyState.js +65 -0
  61. package/dist/Components/EmptyState/EmptyStateProps.d.ts +28 -0
  62. package/dist/Components/EmptyState/EmptyStateProps.js +2 -0
  63. package/dist/Components/FieldSelectModal/FieldSelectModal.d.ts +26 -0
  64. package/dist/Components/FieldSelectModal/FieldSelectModal.js +107 -0
  65. package/dist/Components/FilePreview/FilePreview.d.ts +6 -0
  66. package/dist/Components/FilePreview/FilePreview.js +190 -0
  67. package/dist/Components/FilePreview/FilePreviewProps.d.ts +26 -0
  68. package/dist/Components/FilePreview/FilePreviewProps.js +2 -0
  69. package/dist/Components/LazyWrapper/LazyWrapper.d.ts +10 -0
  70. package/dist/Components/LazyWrapper/LazyWrapper.js +50 -0
  71. package/dist/Components/MoreItems/MoreItems.d.ts +4 -0
  72. package/dist/Components/MoreItems/MoreItems.js +35 -0
  73. package/dist/Components/MoreItems/MoreItemsProps.d.ts +29 -0
  74. package/dist/Components/MoreItems/MoreItemsProps.js +2 -0
  75. package/dist/Components/OrgSwitcher/OrgSwitcher.d.ts +4 -0
  76. package/dist/Components/OrgSwitcher/OrgSwitcher.js +121 -0
  77. package/dist/Components/OrgSwitcher/OrgSwitcherProps.d.ts +41 -0
  78. package/dist/Components/OrgSwitcher/OrgSwitcherProps.js +25 -0
  79. package/dist/Components/OrganizationDetails/CreateOrgModal.d.ts +4 -0
  80. package/dist/Components/OrganizationDetails/CreateOrgModal.js +122 -0
  81. package/dist/Components/OrganizationDetails/DeleteOrgModal.d.ts +4 -0
  82. package/dist/Components/OrganizationDetails/DeleteOrgModal.js +29 -0
  83. package/dist/Components/OrganizationDetails/OrganizationDetails.d.ts +4 -0
  84. package/dist/Components/OrganizationDetails/OrganizationDetails.js +264 -0
  85. package/dist/Components/OrganizationDetails/OrganizationDetails.test.d.ts +1 -0
  86. package/dist/Components/OrganizationDetails/OrganizationDetails.test.js +122 -0
  87. package/dist/Components/OrganizationDetails/OrganizationDetailsProps.d.ts +88 -0
  88. package/dist/Components/OrganizationDetails/OrganizationDetailsProps.js +2 -0
  89. package/dist/Components/PdfViewer/PdfViewer.d.ts +15 -0
  90. package/dist/Components/PdfViewer/PdfViewer.js +29 -0
  91. package/dist/Components/RolesPermission/DeleteRoleModal.d.ts +4 -0
  92. package/dist/Components/RolesPermission/DeleteRoleModal.js +29 -0
  93. package/dist/Components/RolesPermission/RolesPermission.d.ts +4 -0
  94. package/dist/Components/RolesPermission/RolesPermission.js +243 -0
  95. package/dist/Components/RolesPermission/RolesPermission.test.d.ts +1 -0
  96. package/dist/Components/RolesPermission/RolesPermission.test.js +150 -0
  97. package/dist/Components/RolesPermission/RolesPermissionProps.d.ts +117 -0
  98. package/dist/Components/RolesPermission/RolesPermissionProps.js +2 -0
  99. package/dist/Components/ScrollToTop/ScrollToTop.d.ts +19 -0
  100. package/dist/Components/ScrollToTop/ScrollToTop.js +104 -0
  101. package/dist/Components/SideBar/components/OtherApps.test.js +3 -2
  102. package/dist/Components/SignInActivityTable/SignInActivityTable.d.ts +4 -0
  103. package/dist/Components/SignInActivityTable/SignInActivityTable.js +95 -0
  104. package/dist/Components/SignInActivityTable/SignInActivityTable.test.d.ts +1 -0
  105. package/dist/Components/SignInActivityTable/SignInActivityTable.test.js +63 -0
  106. package/dist/Components/SignInActivityTable/SignInActivityTableProps.d.ts +21 -0
  107. package/dist/Components/SignInActivityTable/SignInActivityTableProps.js +2 -0
  108. package/dist/Components/StageProgress/StageItem.d.ts +4 -0
  109. package/dist/Components/StageProgress/StageItem.js +137 -0
  110. package/dist/Components/StageProgress/StageProgress.d.ts +4 -0
  111. package/dist/Components/StageProgress/StageProgress.js +59 -0
  112. package/dist/Components/StageProgress/StageProgressProps.d.ts +85 -0
  113. package/dist/Components/StageProgress/StageProgressProps.js +27 -0
  114. package/dist/Components/StageProgress/StepperStage.d.ts +4 -0
  115. package/dist/Components/StageProgress/StepperStage.js +78 -0
  116. package/dist/Components/Table/Table.js +66 -45
  117. package/dist/Components/Table/TableProps.d.ts +4 -2
  118. package/dist/Components/Table/components/Pagination.js +1 -1
  119. package/dist/Components/Table/components/TableBody.js +15 -12
  120. package/dist/Components/Table/components/TableBody.virtualize.test.js +13 -3
  121. package/dist/Components/Table/components/TableHeader.d.ts +1 -1
  122. package/dist/Components/Table/components/TableHeader.js +9 -9
  123. package/dist/Components/Table/hooks/useTable.d.ts +1 -0
  124. package/dist/Components/Table/hooks/useTable.js +21 -8
  125. package/dist/Components/Table/settings/ManageColumns.test.js +1 -0
  126. package/dist/Components/Tag/Tag.d.ts +3 -11
  127. package/dist/Components/Tag/Tag.js +10 -2
  128. package/dist/Components/Tag/Tag.styles.d.ts +2 -2
  129. package/dist/Components/Tag/Tag.styles.js +58 -33
  130. package/dist/Components/Tag/Tag.test.d.ts +1 -0
  131. package/dist/Components/Tag/Tag.test.js +68 -0
  132. package/dist/Components/Tag/TagProps.d.ts +13 -0
  133. package/dist/Components/Tag/TagProps.js +2 -0
  134. package/dist/Components/UpgradeButton/UpgradeButton.d.ts +4 -0
  135. package/dist/Components/UpgradeButton/UpgradeButton.js +73 -0
  136. package/dist/Components/UpgradeButton/UpgradeButtonProps.d.ts +43 -0
  137. package/dist/Components/UpgradeButton/UpgradeButtonProps.js +2 -0
  138. package/dist/Components/UserDetails/AddUserModal.d.ts +4 -0
  139. package/dist/Components/UserDetails/AddUserModal.js +218 -0
  140. package/dist/Components/UserDetails/ChangeRoleModal.d.ts +4 -0
  141. package/dist/Components/UserDetails/ChangeRoleModal.js +150 -0
  142. package/dist/Components/UserDetails/DeactivateConfirmModal.d.ts +4 -0
  143. package/dist/Components/UserDetails/DeactivateConfirmModal.js +34 -0
  144. package/dist/Components/UserDetails/UserDetails.d.ts +4 -0
  145. package/dist/Components/UserDetails/UserDetails.js +263 -0
  146. package/dist/Components/UserDetails/UserDetails.test.d.ts +1 -0
  147. package/dist/Components/UserDetails/UserDetails.test.js +129 -0
  148. package/dist/Components/UserDetails/UserDetailsProps.d.ts +151 -0
  149. package/dist/Components/UserDetails/UserDetailsProps.js +2 -0
  150. package/dist/Theme/componentStyles.d.ts +1 -1
  151. package/dist/Theme/index.d.ts +4 -4
  152. package/dist/Theme/index.js +4 -4
  153. package/dist/index.d.ts +23 -1
  154. package/dist/index.js +37 -2
  155. package/package.json +2 -2
  156. package/.claude/settings.local.json +0 -44
  157. package/coverage/clover.xml +0 -638
  158. package/coverage/coverage-final.json +0 -20
  159. package/coverage/lcov-report/Table/CompactSelect.tsx.html +0 -379
  160. package/coverage/lcov-report/Table/Components/ActiveFilters.tsx.html +0 -514
  161. package/coverage/lcov-report/Table/Components/HeaderActions.tsx.html +0 -373
  162. package/coverage/lcov-report/Table/Components/Pagination.tsx.html +0 -574
  163. package/coverage/lcov-report/Table/Components/TableActions.tsx.html +0 -574
  164. package/coverage/lcov-report/Table/Components/TableBody.tsx.html +0 -1027
  165. package/coverage/lcov-report/Table/Components/TableFilters.tsx.html +0 -397
  166. package/coverage/lcov-report/Table/Components/TableHeader.tsx.html +0 -1060
  167. package/coverage/lcov-report/Table/Components/TableLoading.tsx.html +0 -361
  168. package/coverage/lcov-report/Table/Components/TableSearch.tsx.html +0 -337
  169. package/coverage/lcov-report/Table/Components/index.html +0 -266
  170. package/coverage/lcov-report/Table/Components/useDebounce.ts.html +0 -178
  171. package/coverage/lcov-report/Table/Components/useTable.ts.html +0 -778
  172. package/coverage/lcov-report/Table/LeftFilterPane.tsx.html +0 -1810
  173. package/coverage/lcov-report/Table/SelectOperationControls.tsx.html +0 -178
  174. package/coverage/lcov-report/Table/Table.tsx.html +0 -1567
  175. package/coverage/lcov-report/Table/TableProps.tsx.html +0 -658
  176. package/coverage/lcov-report/Table/TableSettings/ManageColumns.tsx.html +0 -619
  177. package/coverage/lcov-report/Table/TableSettings/TableFilters.tsx.html +0 -229
  178. package/coverage/lcov-report/Table/TableSettings/TableSettings.tsx.html +0 -532
  179. package/coverage/lcov-report/Table/TableSettings/index.html +0 -146
  180. package/coverage/lcov-report/Table/TableToDo.tsx.html +0 -973
  181. package/coverage/lcov-report/Table/TextOperationControls.tsx.html +0 -271
  182. package/coverage/lcov-report/Table/filterTypes.ts.html +0 -97
  183. package/coverage/lcov-report/Table/index.html +0 -176
  184. package/coverage/lcov-report/base.css +0 -224
  185. package/coverage/lcov-report/block-navigation.js +0 -87
  186. package/coverage/lcov-report/favicon.png +0 -0
  187. package/coverage/lcov-report/index.html +0 -146
  188. package/coverage/lcov-report/prettify.css +0 -1
  189. package/coverage/lcov-report/prettify.js +0 -2
  190. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  191. package/coverage/lcov-report/sorter.js +0 -210
  192. package/coverage/lcov.info +0 -1836
  193. package/dist/Assets/defaultLogo.tsx +0 -31
@@ -78,10 +78,11 @@ describe("OtherApps", function () {
78
78
  beforeEach(function () {
79
79
  jest.clearAllMocks();
80
80
  });
81
- it("does not render flyout copy when expanded", function () {
81
+ it("renders the section header and inline labels when expanded", function () {
82
82
  renderWithChakra(react_1.default.createElement(OtherApps_1.default, { toggle: false, otherApps: sampleApps }));
83
- expect(react_2.screen.getByText("Other Apps")).toBeInTheDocument();
83
+ expect(react_2.screen.getByText("Switch app")).toBeInTheDocument();
84
84
  expect(react_2.screen.getByText("Billing")).toBeInTheDocument();
85
+ expect(react_2.screen.getByText("Tickets")).toBeInTheDocument();
85
86
  expect(react_2.screen.queryAllByRole("tooltip")).toHaveLength(0);
86
87
  });
87
88
  it("shows flyout with Open label on hover when collapsed", function () { return __awaiter(void 0, void 0, void 0, function () {
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { SignInActivityTableProps } from "./SignInActivityTableProps";
3
+ declare const SignInActivityTable: React.FC<SignInActivityTableProps>;
4
+ export default SignInActivityTable;
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ var __importDefault = (this && this.__importDefault) || function (mod) {
47
+ return (mod && mod.__esModule) ? mod : { "default": mod };
48
+ };
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ var react_1 = __importStar(require("react"));
51
+ var react_2 = require("@chakra-ui/react");
52
+ var lucide_react_1 = require("lucide-react");
53
+ var useCustomTheme_1 = require("../../Theme/useCustomTheme");
54
+ var EmptyState_1 = __importDefault(require("../EmptyState/EmptyState"));
55
+ var DEFAULT_LABELS = {
56
+ title: "Recent Sign-in Devices",
57
+ browser: "Browser",
58
+ device: "Device",
59
+ recentActivity: "Recent Activity",
60
+ noActivity: "No recent sign-in activity",
61
+ };
62
+ var SignInActivityTable = function (_a) {
63
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
64
+ var devices = _a.devices, _o = _a.isLoading, isLoading = _o === void 0 ? false : _o, labelOverrides = _a.labels;
65
+ var colors = (0, useCustomTheme_1.useCustomTheme)().colors;
66
+ var labels = (0, react_1.useMemo)(function () { return (__assign(__assign({}, DEFAULT_LABELS), labelOverrides)); }, [labelOverrides]);
67
+ var border = (_e = (_c = (_b = colors === null || colors === void 0 ? void 0 : colors.boxborder) === null || _b === void 0 ? void 0 : _b[200]) !== null && _c !== void 0 ? _c : (_d = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _d === void 0 ? void 0 : _d[200]) !== null && _e !== void 0 ? _e : "#E2E8F0";
68
+ var surface = (_f = colors === null || colors === void 0 ? void 0 : colors.white) !== null && _f !== void 0 ? _f : "#FFFFFF";
69
+ var muted = (_h = (_g = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _g === void 0 ? void 0 : _g[500]) !== null && _h !== void 0 ? _h : "#64748B";
70
+ var heading = (_k = (_j = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _j === void 0 ? void 0 : _j[800]) !== null && _k !== void 0 ? _k : "#1E293B";
71
+ var headBg = (_m = (_l = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _l === void 0 ? void 0 : _l[50]) !== null && _m !== void 0 ? _m : "#F8FAFC";
72
+ var thStyle = {
73
+ fontSize: "0.7rem",
74
+ textTransform: "uppercase",
75
+ letterSpacing: "0.04em",
76
+ color: muted,
77
+ borderColor: border,
78
+ py: 3,
79
+ };
80
+ return (react_1.default.createElement(react_2.Box, { mt: 4, backgroundColor: surface, borderRadius: "xl", border: "1px solid", borderColor: border, boxShadow: "0 1px 2px rgba(16,24,40,0.05)", overflow: "hidden" },
81
+ react_1.default.createElement(react_2.Flex, { px: 4, py: 3, borderBottom: "1px solid", borderColor: border, alignItems: "center" },
82
+ react_1.default.createElement(react_2.Heading, { size: "sm", fontWeight: 600, color: heading }, labels.title)),
83
+ react_1.default.createElement(react_2.Box, { overflowX: "auto" }, isLoading ? (react_1.default.createElement(react_2.VStack, { spacing: 3, p: 4, align: "stretch" }, Array.from({ length: 4 }).map(function (_, idx) { return (react_1.default.createElement(react_2.Skeleton, { key: idx, height: "18px", borderRadius: "md" })); }))) : devices.length === 0 ? (react_1.default.createElement(EmptyState_1.default, { icon: lucide_react_1.MonitorSmartphone, title: labels.noActivity, size: "sm", minH: "160px" })) : (react_1.default.createElement(react_2.Table, { variant: "simple", size: "sm" },
84
+ react_1.default.createElement(react_2.Thead, { bg: headBg },
85
+ react_1.default.createElement(react_2.Tr, null,
86
+ react_1.default.createElement(react_2.Th, __assign({}, thStyle), labels.browser),
87
+ react_1.default.createElement(react_2.Th, __assign({}, thStyle), labels.device),
88
+ react_1.default.createElement(react_2.Th, __assign({}, thStyle), labels.recentActivity))),
89
+ react_1.default.createElement(react_2.Tbody, null, devices.map(function (device, index) { return (react_1.default.createElement(react_2.Tr, { key: index, _hover: { bg: headBg }, transition: "background 0.15s ease" },
90
+ react_1.default.createElement(react_2.Td, { borderColor: border, fontSize: "sm", fontWeight: 500, color: heading }, device.browser || "—"),
91
+ react_1.default.createElement(react_2.Td, { borderColor: border, fontSize: "sm", color: muted }, device.device),
92
+ react_1.default.createElement(react_2.Td, { borderColor: border, fontSize: "sm", color: muted },
93
+ react_1.default.createElement(react_2.Text, null, device.activity)))); })))))));
94
+ };
95
+ exports.default = SignInActivityTable;
@@ -0,0 +1 @@
1
+ import "@testing-library/jest-dom";
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var react_1 = __importDefault(require("react"));
7
+ var react_2 = require("@testing-library/react");
8
+ require("@testing-library/jest-dom");
9
+ var react_3 = require("@chakra-ui/react");
10
+ var SignInActivityTable_1 = __importDefault(require("./SignInActivityTable"));
11
+ jest.mock("../../Theme/useCustomTheme", function () { return ({
12
+ useCustomTheme: function () { return ({
13
+ colors: {
14
+ white: "#ffffff",
15
+ gray: {
16
+ 50: "#f8fafc",
17
+ 100: "#f0f0f0",
18
+ 200: "#e2e8f0",
19
+ 500: "#64748b",
20
+ 600: "#475569",
21
+ 800: "#1e293b",
22
+ },
23
+ primary: { 50: "#eef2ff", 500: "#6366f1" },
24
+ boxborder: { 200: "#e2e8f0" },
25
+ },
26
+ }); },
27
+ }); });
28
+ beforeAll(function () {
29
+ Object.defineProperty(window, "matchMedia", {
30
+ writable: true,
31
+ configurable: true,
32
+ value: jest.fn().mockImplementation(function (query) { return ({
33
+ matches: false,
34
+ media: query,
35
+ onchange: null,
36
+ addListener: jest.fn(),
37
+ removeListener: jest.fn(),
38
+ addEventListener: jest.fn(),
39
+ removeEventListener: jest.fn(),
40
+ dispatchEvent: jest.fn(),
41
+ }); }),
42
+ });
43
+ });
44
+ var devices = [
45
+ { browser: "Chrome", device: "MacBook Pro", activity: "2 minutes ago" },
46
+ { browser: "Safari", device: "iPhone 15", activity: "Yesterday" },
47
+ ];
48
+ var renderWithChakra = function (ui) {
49
+ return (0, react_2.render)(react_1.default.createElement(react_3.ChakraProvider, null, ui));
50
+ };
51
+ describe("SignInActivityTable", function () {
52
+ it("renders the device rows", function () {
53
+ renderWithChakra(react_1.default.createElement(SignInActivityTable_1.default, { devices: devices }));
54
+ expect(react_2.screen.getByText("Recent Sign-in Devices")).toBeInTheDocument();
55
+ expect(react_2.screen.getByText("Chrome")).toBeInTheDocument();
56
+ expect(react_2.screen.getByText("MacBook Pro")).toBeInTheDocument();
57
+ expect(react_2.screen.getByText("2 minutes ago")).toBeInTheDocument();
58
+ });
59
+ it("shows an empty state when there is no activity", function () {
60
+ renderWithChakra(react_1.default.createElement(SignInActivityTable_1.default, { devices: [] }));
61
+ expect(react_2.screen.getByText("No recent sign-in activity")).toBeInTheDocument();
62
+ });
63
+ });
@@ -0,0 +1,21 @@
1
+ export type SignInDevice = {
2
+ browser: string;
3
+ device: string;
4
+ activity: string;
5
+ };
6
+ /**
7
+ * All user-facing strings. Provide translated values from the host app; every
8
+ * key has a sensible English default so the component works standalone.
9
+ */
10
+ export type SignInActivityLabels = {
11
+ title?: string;
12
+ browser?: string;
13
+ device?: string;
14
+ recentActivity?: string;
15
+ noActivity?: string;
16
+ };
17
+ export interface SignInActivityTableProps {
18
+ devices: SignInDevice[];
19
+ isLoading?: boolean;
20
+ labels?: SignInActivityLabels;
21
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { StageItemProps } from "./StageProgressProps";
3
+ declare const StageItem: React.FC<StageItemProps>;
4
+ export default StageItem;
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ var __importDefault = (this && this.__importDefault) || function (mod) {
47
+ return (mod && mod.__esModule) ? mod : { "default": mod };
48
+ };
49
+ Object.defineProperty(exports, "__esModule", { value: true });
50
+ var react_1 = __importStar(require("react"));
51
+ var react_2 = require("@chakra-ui/react");
52
+ var lucide_react_1 = require("lucide-react");
53
+ var useCustomTheme_1 = require("../../Theme/useCustomTheme");
54
+ var ToolTip_1 = __importDefault(require("../ToolTip/ToolTip"));
55
+ var StageProgressProps_1 = require("./StageProgressProps");
56
+ var sizeMap = {
57
+ sm: { arrow: 12, minW: "120px", h: "28px", px: 3, font: "0.75rem", icon: 12 },
58
+ md: { arrow: 16, minW: "160px", h: "36px", px: 4, font: "0.875rem", icon: 14 },
59
+ lg: { arrow: 20, minW: "200px", h: "44px", px: 5, font: "1rem", icon: 16 },
60
+ };
61
+ var clipFor = function (index, total, a) {
62
+ var isFirst = index === 0;
63
+ var isLast = index === total - 1;
64
+ if (total === 1)
65
+ return "none";
66
+ if (isFirst)
67
+ return "polygon(0 0, calc(100% - ".concat(a, "px) 0, 100% 50%, calc(100% - ").concat(a, "px) 100%, 0 100%)");
68
+ if (isLast)
69
+ return "polygon(0 0, 100% 0, 100% 100%, 0 100%, ".concat(a, "px 50%)");
70
+ return "polygon(0 0, calc(100% - ".concat(a, "px) 0, 100% 50%, calc(100% - ").concat(a, "px) 100%, 0 100%, ").concat(a, "px 50%)");
71
+ };
72
+ var StageItem = function (_a) {
73
+ var _b;
74
+ var label = _a.label, index = _a.index, total = _a.total, state = _a.state, _c = _a.variant, variant = _c === void 0 ? "chevron" : _c, _d = _a.size, size = _d === void 0 ? "md" : _d, _e = _a.colorScheme, colorScheme = _e === void 0 ? "primary" : _e, onClick = _a.onClick, _f = _a.isReadOnly, isReadOnly = _f === void 0 ? false : _f, _g = _a.disabled, disabled = _g === void 0 ? false : _g, _h = _a.showCheck, showCheck = _h === void 0 ? false : _h, minWidth = _a.minWidth, _j = _a.scrollIntoViewWhenActive, scrollIntoViewWhenActive = _j === void 0 ? true : _j, _k = _a.tooltipThreshold, tooltipThreshold = _k === void 0 ? 20 : _k;
75
+ var theme = (0, useCustomTheme_1.useCustomTheme)();
76
+ var palette = (0, StageProgressProps_1.resolveStagePalette)(theme, colorScheme);
77
+ var ref = (0, react_1.useRef)(null);
78
+ var s = sizeMap[size];
79
+ (0, react_1.useEffect)(function () {
80
+ if (state === "active" && scrollIntoViewWhenActive && ref.current) {
81
+ ref.current.scrollIntoView({
82
+ behavior: "smooth",
83
+ inline: "center",
84
+ block: "nearest",
85
+ });
86
+ }
87
+ }, [state, scrollIntoViewWhenActive]);
88
+ var bg = state === "active"
89
+ ? palette.strong
90
+ : state === "completed"
91
+ ? palette.soft
92
+ : palette.muted;
93
+ var color = state === "active"
94
+ ? palette.onStrong
95
+ : state === "completed"
96
+ ? palette.softText
97
+ : palette.mutedText;
98
+ var interactive = !isReadOnly && !disabled;
99
+ var isFirst = index === 0;
100
+ var isLast = index === total - 1;
101
+ var isChevron = variant === "chevron";
102
+ // Chevron pads extra on the left to clear the inbound notch and on the right
103
+ // to keep text clear of the outgoing arrow point; others are centered.
104
+ var leftPad = isChevron && !isFirst ? s.arrow + s.px * 4 : s.px * 2;
105
+ var rightPad = isChevron ? s.arrow + s.px * 4 : s.px * 2;
106
+ // Chevron overlaps into the previous point, leaving a thin 2px divider.
107
+ var overlap = isChevron && !isFirst ? -(s.arrow - 2) : 0;
108
+ var clipPath = isChevron ? clipFor(index, total, s.arrow) : "none";
109
+ var borderRadius = variant === "pills"
110
+ ? "full"
111
+ : variant === "bar"
112
+ ? isFirst && isLast
113
+ ? "8px"
114
+ : isFirst
115
+ ? "8px 2px 2px 8px"
116
+ : isLast
117
+ ? "2px 8px 8px 2px"
118
+ : "2px"
119
+ : "0";
120
+ // Upcoming pills read as outlined; other states stay filled.
121
+ var isOutlinePill = variant === "pills" && state === "upcoming";
122
+ var hoverStyles = interactive
123
+ ? state === "active"
124
+ ? { bg: palette.hover }
125
+ : { bg: palette.strong, color: palette.onStrong, borderColor: palette.strong }
126
+ : undefined;
127
+ var showTooltip = ((_b = label === null || label === void 0 ? void 0 : label.length) !== null && _b !== void 0 ? _b : 0) > tooltipThreshold;
128
+ var content = (react_1.default.createElement(react_2.Box, { ref: ref, role: interactive ? "button" : undefined, "aria-current": state === "active" ? "step" : undefined, onClick: interactive ? onClick : undefined, flexShrink: 0, minWidth: minWidth || s.minW, height: s.h, ml: "".concat(overlap, "px"), pl: "".concat(leftPad, "px"), pr: "".concat(rightPad, "px"), bg: isOutlinePill ? "transparent" : bg, color: isOutlinePill ? palette.mutedText : color, border: isOutlinePill ? "1px solid" : undefined, borderColor: isOutlinePill ? palette.muted : undefined, borderRadius: borderRadius, fontSize: s.font, fontWeight: state === "active" ? 600 : 500, display: "flex", alignItems: "center", justifyContent: isChevron ? "flex-start" : "center", cursor: interactive ? "pointer" : "default", opacity: disabled ? 0.55 : 1, transition: "background 0.18s ease, color 0.18s ease, filter 0.18s ease, border-color 0.18s ease", sx: { clipPath: clipPath }, _hover: interactive ? __assign(__assign({}, hoverStyles), { filter: "brightness(0.97)" }) : undefined },
129
+ react_1.default.createElement(react_2.Flex, { align: "center", justify: isChevron ? "flex-start" : "center", gap: "6px", width: "100%", minW: 0 },
130
+ showCheck && state === "completed" && (react_1.default.createElement(lucide_react_1.Check, { size: s.icon, style: { flexShrink: 0 } })),
131
+ react_1.default.createElement(react_2.Box, { as: "span", whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis", textAlign: "center", flex: "1" }, label))));
132
+ if (showTooltip) {
133
+ return (react_1.default.createElement(ToolTip_1.default, { label: label, placement: "top", openDelay: 300 }, content));
134
+ }
135
+ return content;
136
+ };
137
+ exports.default = StageItem;
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { StageProgressProps } from "./StageProgressProps";
3
+ declare const StageProgress: React.FC<StageProgressProps>;
4
+ export default StageProgress;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var react_1 = __importDefault(require("react"));
18
+ var react_2 = require("@chakra-ui/react");
19
+ var StageItem_1 = __importDefault(require("./StageItem"));
20
+ var StepperStage_1 = __importDefault(require("./StepperStage"));
21
+ var scrollSx = {
22
+ "&::-webkit-scrollbar": { height: "4px" },
23
+ "&::-webkit-scrollbar-thumb": {
24
+ borderRadius: "10px",
25
+ backgroundColor: "rgba(0,0,0,0.25)",
26
+ },
27
+ "&::-webkit-scrollbar-track": { background: "transparent" },
28
+ };
29
+ // Gap between items per variant (chevron interlocks via negative margin).
30
+ var gapFor = {
31
+ chevron: "0",
32
+ bar: "4px",
33
+ pills: "8px",
34
+ stepper: "0",
35
+ };
36
+ var StageProgress = function (_a) {
37
+ var stages = _a.stages, _b = _a.variant, variant = _b === void 0 ? "chevron" : _b, value = _a.value, onChange = _a.onChange, _c = _a.size, size = _c === void 0 ? "md" : _c, _d = _a.colorScheme, colorScheme = _d === void 0 ? "primary" : _d, _e = _a.markCompleted, markCompleted = _e === void 0 ? true : _e, _f = _a.showCheck, showCheck = _f === void 0 ? false : _f, _g = _a.isReadOnly, isReadOnly = _g === void 0 ? false : _g, _h = _a.isLoading, isLoading = _h === void 0 ? false : _h, minStageWidth = _a.minStageWidth, _j = _a.scrollActiveIntoView, scrollActiveIntoView = _j === void 0 ? true : _j, _k = _a.tooltipThreshold, tooltipThreshold = _k === void 0 ? 20 : _k;
38
+ if (isLoading) {
39
+ var skeletonH_1 = size === "sm" ? "28px" : size === "lg" ? "44px" : "36px";
40
+ return (react_1.default.createElement(react_2.Flex, { gap: "6px", width: "100%", overflowX: "hidden", p: "0.1rem" }, Array.from({ length: 6 }).map(function (_, i) { return (react_1.default.createElement(react_2.Skeleton, { key: i, height: skeletonH_1, minWidth: minStageWidth || "160px", borderRadius: "6px", flexShrink: 0 })); })));
41
+ }
42
+ var activeIndex = stages.findIndex(function (st) { return st.id === value; });
43
+ var stateFor = function (index) {
44
+ if (index === activeIndex)
45
+ return "active";
46
+ if (markCompleted && activeIndex > -1 && index < activeIndex)
47
+ return "completed";
48
+ return "upcoming";
49
+ };
50
+ var total = stages.length;
51
+ return (react_1.default.createElement(react_2.Box, { display: "flex", alignItems: variant === "stepper" ? "flex-start" : "stretch", gap: gapFor[variant], overflowX: "hidden", p: "0.1rem", sx: __assign({ "&:hover": { overflowX: "auto" } }, scrollSx) }, stages.map(function (stage, index) {
52
+ var state = stateFor(index);
53
+ if (variant === "stepper") {
54
+ return (react_1.default.createElement(StepperStage_1.default, { key: stage.id, label: stage.label, number: index + 1, state: state, size: size, colorScheme: colorScheme, isReadOnly: isReadOnly, disabled: stage.disabled, showCheck: showCheck, isFirst: index === 0, isLast: index === total - 1, leftDone: activeIndex > -1 && index <= activeIndex, rightDone: activeIndex > -1 && index < activeIndex, scrollIntoViewWhenActive: scrollActiveIntoView, onClick: function () { return onChange === null || onChange === void 0 ? void 0 : onChange(stage.id, stage, index); } }));
55
+ }
56
+ return (react_1.default.createElement(StageItem_1.default, { key: stage.id, label: stage.label, index: index, total: total, state: state, variant: variant, size: size, colorScheme: colorScheme, isReadOnly: isReadOnly, disabled: stage.disabled, showCheck: showCheck, minWidth: minStageWidth, scrollIntoViewWhenActive: scrollActiveIntoView, tooltipThreshold: tooltipThreshold, onClick: function () { return onChange === null || onChange === void 0 ? void 0 : onChange(stage.id, stage, index); } }));
57
+ })));
58
+ };
59
+ exports.default = StageProgress;
@@ -0,0 +1,85 @@
1
+ import { CustomThemeProps } from "../../Theme/themeProps";
2
+ export type StageSize = "sm" | "md" | "lg";
3
+ export type StageColorScheme = "primary" | "secondary" | "tertiary" | "success" | "error" | "warning" | "info";
4
+ export type StageState = "completed" | "active" | "upcoming";
5
+ /** Visual style of the tracker. */
6
+ export type StageVariant = "chevron" | "bar" | "pills" | "stepper";
7
+ export interface Stage {
8
+ id: string | number;
9
+ label: string;
10
+ /** Disable selecting this stage individually. */
11
+ disabled?: boolean;
12
+ }
13
+ export interface StageProgressProps {
14
+ /** Ordered list of pipeline stages. */
15
+ stages: Stage[];
16
+ /** Visual style. Default "chevron". */
17
+ variant?: StageVariant;
18
+ /** id of the currently active stage. */
19
+ value?: string | number;
20
+ /** Fired when a stage is clicked (ignored when isReadOnly). */
21
+ onChange?: (id: string | number, stage: Stage, index: number) => void;
22
+ size?: StageSize;
23
+ colorScheme?: StageColorScheme;
24
+ /** Render stages before the active one in a distinct "done" style. Default true. */
25
+ markCompleted?: boolean;
26
+ /** Show a check icon on completed stages. Default false. */
27
+ showCheck?: boolean;
28
+ /** Render as a non-interactive indicator. */
29
+ isReadOnly?: boolean;
30
+ /** Show the loading skeleton row instead of stages. */
31
+ isLoading?: boolean;
32
+ /** Min width of each chevron. */
33
+ minStageWidth?: string;
34
+ /** Auto-scroll the active stage into view. Default true. */
35
+ scrollActiveIntoView?: boolean;
36
+ /** Label length beyond which a tooltip is shown. Default 20. */
37
+ tooltipThreshold?: number;
38
+ }
39
+ export interface StageItemProps {
40
+ label: string;
41
+ index: number;
42
+ total: number;
43
+ state: StageState;
44
+ /** "chevron" | "bar" | "pills" (stepper has its own renderer). */
45
+ variant?: Exclude<StageVariant, "stepper">;
46
+ size?: StageSize;
47
+ colorScheme?: StageColorScheme;
48
+ onClick?: () => void;
49
+ isReadOnly?: boolean;
50
+ disabled?: boolean;
51
+ showCheck?: boolean;
52
+ minWidth?: string;
53
+ scrollIntoViewWhenActive?: boolean;
54
+ tooltipThreshold?: number;
55
+ }
56
+ export interface StepperStageProps {
57
+ label: string;
58
+ /** 1-based step number shown inside the circle. */
59
+ number: number;
60
+ state: StageState;
61
+ size?: StageSize;
62
+ colorScheme?: StageColorScheme;
63
+ onClick?: () => void;
64
+ isReadOnly?: boolean;
65
+ disabled?: boolean;
66
+ showCheck?: boolean;
67
+ isFirst: boolean;
68
+ isLast: boolean;
69
+ /** Connector entering this node is part of a completed segment. */
70
+ leftDone: boolean;
71
+ /** Connector leaving this node is part of a completed segment. */
72
+ rightDone: boolean;
73
+ scrollIntoViewWhenActive?: boolean;
74
+ }
75
+ export interface StagePalette {
76
+ soft: string;
77
+ softText: string;
78
+ strong: string;
79
+ onStrong: string;
80
+ hover: string;
81
+ muted: string;
82
+ mutedText: string;
83
+ }
84
+ /** Resolve a chevron palette for a given color scheme from the theme. */
85
+ export declare const resolveStagePalette: (theme: CustomThemeProps, colorScheme?: StageColorScheme) => StagePalette;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.resolveStagePalette = void 0;
4
+ var SEMANTIC = ["success", "error", "warning", "info"];
5
+ /** Resolve a chevron palette for a given color scheme from the theme. */
6
+ var resolveStagePalette = function (theme, colorScheme) {
7
+ var _a;
8
+ if (colorScheme === void 0) { colorScheme = "primary"; }
9
+ var colors = theme.colors;
10
+ var scale = SEMANTIC.includes(colorScheme)
11
+ ? theme.colors.semantic[colorScheme]
12
+ : colors[colorScheme];
13
+ var gray = (_a = colors.gray) !== null && _a !== void 0 ? _a : {};
14
+ var get = function (s, k, fb) {
15
+ return (s && s[k]) || fb;
16
+ };
17
+ return {
18
+ soft: get(scale, 100, "#E6F0FF"),
19
+ softText: get(scale, 700, "#1D4ED8"),
20
+ strong: get(scale, 500, "#3B82F6"),
21
+ onStrong: theme.colors.white || "#FFFFFF",
22
+ hover: get(scale, 600, "#2563EB"),
23
+ muted: get(gray, 100, "#F1F5F9"),
24
+ mutedText: get(gray, 500, "#64748B"),
25
+ };
26
+ };
27
+ exports.resolveStagePalette = resolveStagePalette;
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { StepperStageProps } from "./StageProgressProps";
3
+ declare const StepperStage: React.FC<StepperStageProps>;
4
+ export default StepperStage;
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ var react_1 = __importStar(require("react"));
37
+ var react_2 = require("@chakra-ui/react");
38
+ var lucide_react_1 = require("lucide-react");
39
+ var useCustomTheme_1 = require("../../Theme/useCustomTheme");
40
+ var StageProgressProps_1 = require("./StageProgressProps");
41
+ var sizeMap = {
42
+ sm: { circle: "24px", font: "0.7rem", label: "0.7rem", icon: 12, minW: "84px" },
43
+ md: { circle: "30px", font: "0.8rem", label: "0.8rem", icon: 14, minW: "104px" },
44
+ lg: { circle: "38px", font: "0.95rem", label: "0.9rem", icon: 16, minW: "124px" },
45
+ };
46
+ var StepperStage = function (_a) {
47
+ var label = _a.label, number = _a.number, state = _a.state, _b = _a.size, size = _b === void 0 ? "md" : _b, _c = _a.colorScheme, colorScheme = _c === void 0 ? "primary" : _c, onClick = _a.onClick, _d = _a.isReadOnly, isReadOnly = _d === void 0 ? false : _d, _e = _a.disabled, disabled = _e === void 0 ? false : _e, _f = _a.showCheck, showCheck = _f === void 0 ? true : _f, isFirst = _a.isFirst, isLast = _a.isLast, leftDone = _a.leftDone, rightDone = _a.rightDone, _g = _a.scrollIntoViewWhenActive, scrollIntoViewWhenActive = _g === void 0 ? true : _g;
48
+ var theme = (0, useCustomTheme_1.useCustomTheme)();
49
+ var palette = (0, StageProgressProps_1.resolveStagePalette)(theme, colorScheme);
50
+ var ref = (0, react_1.useRef)(null);
51
+ var s = sizeMap[size];
52
+ var interactive = !isReadOnly && !disabled;
53
+ (0, react_1.useEffect)(function () {
54
+ if (state === "active" && scrollIntoViewWhenActive && ref.current) {
55
+ ref.current.scrollIntoView({
56
+ behavior: "smooth",
57
+ inline: "center",
58
+ block: "nearest",
59
+ });
60
+ }
61
+ }, [state, scrollIntoViewWhenActive]);
62
+ var filled = state === "active" || state === "completed";
63
+ var circleBg = filled ? palette.strong : theme.colors.white;
64
+ var circleColor = filled ? palette.onStrong : palette.mutedText;
65
+ var circleBorder = filled ? palette.strong : palette.muted;
66
+ var line = function (done, hidden) { return (react_1.default.createElement(react_2.Box, { flex: "1", height: "2px", bg: done ? palette.strong : palette.muted, visibility: hidden ? "hidden" : "visible", transition: "background 0.18s ease" })); };
67
+ return (react_1.default.createElement(react_2.Flex, { ref: ref, direction: "column", align: "center", flex: "1", minWidth: s.minW, flexShrink: 0, role: "group", cursor: interactive ? "pointer" : "default", opacity: disabled ? 0.55 : 1, onClick: interactive ? onClick : undefined },
68
+ react_1.default.createElement(react_2.Flex, { align: "center", width: "100%" },
69
+ line(leftDone, isFirst),
70
+ react_1.default.createElement(react_2.Flex, { align: "center", justify: "center", boxSize: s.circle, borderRadius: "full", flexShrink: 0, bg: circleBg, color: circleColor, border: "2px solid", borderColor: circleBorder, fontSize: s.font, fontWeight: 600, transition: "all 0.18s ease", "aria-current": state === "active" ? "step" : undefined, sx: state === "active"
71
+ ? { boxShadow: "0 0 0 4px ".concat(palette.soft) }
72
+ : undefined, _groupHover: interactive
73
+ ? { borderColor: palette.strong, color: filled ? palette.onStrong : palette.strong }
74
+ : undefined }, showCheck && state === "completed" ? react_1.default.createElement(lucide_react_1.Check, { size: s.icon }) : number),
75
+ line(rightDone, isLast)),
76
+ react_1.default.createElement(react_2.Text, { mt: 2, px: 1, fontSize: s.label, fontWeight: state === "active" ? 600 : 500, color: state === "upcoming" ? palette.mutedText : palette.softText, textAlign: "center", noOfLines: 2, _groupHover: interactive ? { color: palette.strong } : undefined }, label)));
77
+ };
78
+ exports.default = StepperStage;