pixelize-design-library 2.3.1-beta.13 → 2.3.1-beta.15

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 (40) hide show
  1. package/.claude/settings.local.json +5 -1
  2. package/dist/Components/OrgSwitcher/OrgSwitcher.d.ts +4 -0
  3. package/dist/Components/OrgSwitcher/OrgSwitcher.js +121 -0
  4. package/dist/Components/OrgSwitcher/OrgSwitcherProps.d.ts +41 -0
  5. package/dist/Components/OrgSwitcher/OrgSwitcherProps.js +25 -0
  6. package/dist/Components/RolesPermission/DeleteRoleModal.d.ts +4 -0
  7. package/dist/Components/RolesPermission/DeleteRoleModal.js +29 -0
  8. package/dist/Components/RolesPermission/RolesPermission.d.ts +4 -0
  9. package/dist/Components/RolesPermission/RolesPermission.js +243 -0
  10. package/dist/Components/RolesPermission/RolesPermission.test.d.ts +1 -0
  11. package/dist/Components/RolesPermission/RolesPermission.test.js +150 -0
  12. package/dist/Components/RolesPermission/RolesPermissionProps.d.ts +117 -0
  13. package/dist/Components/RolesPermission/RolesPermissionProps.js +2 -0
  14. package/dist/Components/StageProgress/StageItem.d.ts +4 -0
  15. package/dist/Components/StageProgress/StageItem.js +137 -0
  16. package/dist/Components/StageProgress/StageProgress.d.ts +4 -0
  17. package/dist/Components/StageProgress/StageProgress.js +59 -0
  18. package/dist/Components/StageProgress/StageProgressProps.d.ts +85 -0
  19. package/dist/Components/StageProgress/StageProgressProps.js +27 -0
  20. package/dist/Components/StageProgress/StepperStage.d.ts +4 -0
  21. package/dist/Components/StageProgress/StepperStage.js +78 -0
  22. package/dist/Components/UpgradeButton/UpgradeButton.d.ts +4 -0
  23. package/dist/Components/UpgradeButton/UpgradeButton.js +58 -0
  24. package/dist/Components/UpgradeButton/UpgradeButtonProps.d.ts +30 -0
  25. package/dist/Components/UpgradeButton/UpgradeButtonProps.js +2 -0
  26. package/dist/Components/UserDetails/AddUserModal.d.ts +4 -0
  27. package/dist/Components/UserDetails/AddUserModal.js +218 -0
  28. package/dist/Components/UserDetails/ChangeRoleModal.d.ts +4 -0
  29. package/dist/Components/UserDetails/ChangeRoleModal.js +150 -0
  30. package/dist/Components/UserDetails/DeactivateConfirmModal.d.ts +4 -0
  31. package/dist/Components/UserDetails/DeactivateConfirmModal.js +34 -0
  32. package/dist/Components/UserDetails/UserDetails.d.ts +4 -0
  33. package/dist/Components/UserDetails/UserDetails.js +263 -0
  34. package/dist/Components/UserDetails/UserDetails.test.d.ts +1 -0
  35. package/dist/Components/UserDetails/UserDetails.test.js +129 -0
  36. package/dist/Components/UserDetails/UserDetailsProps.d.ts +151 -0
  37. package/dist/Components/UserDetails/UserDetailsProps.js +2 -0
  38. package/dist/index.d.ts +9 -1
  39. package/dist/index.js +14 -2
  40. package/package.json +1 -1
@@ -0,0 +1,150 @@
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("@testing-library/react");
19
+ require("@testing-library/jest-dom");
20
+ var react_3 = require("@chakra-ui/react");
21
+ var RolesPermission_1 = __importDefault(require("./RolesPermission"));
22
+ jest.mock("../../Theme/useCustomTheme", function () { return ({
23
+ useCustomTheme: function () { return ({
24
+ colors: {
25
+ white: "#ffffff",
26
+ gray: {
27
+ 50: "#f8fafc",
28
+ 100: "#f0f0f0",
29
+ 200: "#e2e8f0",
30
+ 300: "#cbd5e1",
31
+ 400: "#94a3b8",
32
+ 500: "#64748b",
33
+ 600: "#475569",
34
+ 700: "#334155",
35
+ 800: "#1e293b",
36
+ },
37
+ primary: {
38
+ 50: "#eef2ff",
39
+ 100: "#e0e7ff",
40
+ 300: "#a5b4fc",
41
+ 500: "#6366f1",
42
+ 600: "#4f46e5",
43
+ 700: "#4338ca",
44
+ },
45
+ boxborder: { 200: "#e2e8f0" },
46
+ text: { 400: "#94a3b8", 500: "#64748b", 600: "#475569", 700: "#334155" },
47
+ secondary: { 500: "#805ad5" },
48
+ backgroundColor: { light: "#ffffff" },
49
+ blue: { 200: "#bfdbfe", 400: "#60a5fa", 500: "#3b82f6" },
50
+ green: { 400: "#4ade80", 500: "#22c55e" },
51
+ red: { 400: "#f87171", 500: "#ef4444", 50: "#fef2f2" },
52
+ semantic: { error: { 50: "#fef2f2", 500: "#ef4444" } },
53
+ },
54
+ }); },
55
+ }); });
56
+ beforeAll(function () {
57
+ Object.defineProperty(window, "matchMedia", {
58
+ writable: true,
59
+ configurable: true,
60
+ value: jest.fn().mockImplementation(function (query) { return ({
61
+ matches: false,
62
+ media: query,
63
+ onchange: null,
64
+ addListener: jest.fn(),
65
+ removeListener: jest.fn(),
66
+ addEventListener: jest.fn(),
67
+ removeEventListener: jest.fn(),
68
+ dispatchEvent: jest.fn(),
69
+ }); }),
70
+ });
71
+ });
72
+ var roles = [
73
+ {
74
+ roleName: "Admin",
75
+ createdBy: "Aisha Khan",
76
+ created_at: "Jun 6, 2026 10:00 AM",
77
+ permission: [],
78
+ roles_id: "1",
79
+ designation: "Army",
80
+ makeSuperAdmin: true,
81
+ },
82
+ {
83
+ roleName: "Sales",
84
+ createdBy: "Marcus Reed",
85
+ created_at: "Jun 5, 2026 09:00 AM",
86
+ permission: [],
87
+ roles_id: "2",
88
+ designation: "Army",
89
+ },
90
+ ];
91
+ var permissions = [
92
+ {
93
+ module: "Leads",
94
+ read: true,
95
+ create: true,
96
+ edit: false,
97
+ delete: false,
98
+ import: false,
99
+ export: false,
100
+ },
101
+ {
102
+ module: "Automation",
103
+ read: false,
104
+ create: false,
105
+ edit: false,
106
+ delete: false,
107
+ automation: true,
108
+ },
109
+ ];
110
+ var baseProps = {
111
+ roles: roles,
112
+ permissions: permissions,
113
+ roleName: "",
114
+ isSuperAdmin: false,
115
+ isTrackLocation: false,
116
+ isShowRecords: false,
117
+ };
118
+ var renderWithChakra = function (ui) {
119
+ return (0, react_2.render)(react_1.default.createElement(react_3.ChakraProvider, null, ui));
120
+ };
121
+ describe("RolesPermission", function () {
122
+ it("renders the roles list", function () {
123
+ renderWithChakra(react_1.default.createElement(RolesPermission_1.default, __assign({ view: "list" }, baseProps)));
124
+ expect(react_2.screen.getByText("Roles & Permissions")).toBeInTheDocument();
125
+ expect(react_2.screen.getByText("Admin")).toBeInTheDocument();
126
+ expect(react_2.screen.getByText("Sales")).toBeInTheDocument();
127
+ });
128
+ it("calls onNewRole when New Role is clicked", function () {
129
+ var onNewRole = jest.fn();
130
+ renderWithChakra(react_1.default.createElement(RolesPermission_1.default, __assign({ view: "list" }, baseProps, { onNewRole: onNewRole })));
131
+ react_2.fireEvent.click(react_2.screen.getByText("New Role"));
132
+ expect(onNewRole).toHaveBeenCalled();
133
+ });
134
+ it("shows an empty state when there are no roles", function () {
135
+ renderWithChakra(react_1.default.createElement(RolesPermission_1.default, __assign({ view: "list" }, baseProps, { roles: [] })));
136
+ expect(react_2.screen.getByText("No roles found")).toBeInTheDocument();
137
+ });
138
+ it("renders the permission matrix in the form view", function () {
139
+ renderWithChakra(react_1.default.createElement(RolesPermission_1.default, __assign({ view: "form", mode: "create" }, baseProps)));
140
+ expect(react_2.screen.getByText("Permission Settings")).toBeInTheDocument();
141
+ expect(react_2.screen.getByText("Leads")).toBeInTheDocument();
142
+ expect(react_2.screen.getByText("Automation")).toBeInTheDocument();
143
+ expect(react_2.screen.getByText("Enable All Permissions")).toBeInTheDocument();
144
+ });
145
+ it("opens the delete confirmation modal", function () {
146
+ renderWithChakra(react_1.default.createElement(RolesPermission_1.default, __assign({ view: "list" }, baseProps)));
147
+ react_2.fireEvent.click(react_2.screen.getAllByLabelText("Delete")[0]);
148
+ expect(react_2.screen.getByText("Are you sure you want to delete this role?")).toBeInTheDocument();
149
+ });
150
+ });
@@ -0,0 +1,117 @@
1
+ import { ReactNode } from "react";
2
+ export type PermissionKey = "read" | "create" | "edit" | "delete" | "import" | "export" | "automation";
3
+ export type Permission = {
4
+ module: string;
5
+ read: boolean;
6
+ create: boolean;
7
+ edit: boolean;
8
+ delete: boolean;
9
+ import?: boolean;
10
+ export?: boolean;
11
+ automation?: boolean;
12
+ };
13
+ export type RoleData = {
14
+ roleName: string;
15
+ createdBy: string;
16
+ created_at: string;
17
+ permission: Permission[];
18
+ roles_id: string;
19
+ designation: string;
20
+ makeSuperAdmin?: boolean;
21
+ automation?: boolean;
22
+ trackLocation?: boolean;
23
+ show_records?: boolean;
24
+ };
25
+ export type RolesPermissionView = "list" | "form";
26
+ export type RolesPermissionMode = "create" | "edit" | "view";
27
+ /**
28
+ * All user-facing strings. Provide translated values from the host app; every
29
+ * key has a sensible English default so the component works standalone.
30
+ */
31
+ export type RolesPermissionLabels = {
32
+ title?: string;
33
+ totalRoles?: string;
34
+ newRole?: string;
35
+ sNo?: string;
36
+ roleNameColumn?: string;
37
+ createdBy?: string;
38
+ createdTime?: string;
39
+ actions?: string;
40
+ noRoles?: string;
41
+ view?: string;
42
+ edit?: string;
43
+ delete?: string;
44
+ roleInformation?: string;
45
+ roleName?: string;
46
+ roleNamePlaceholder?: string;
47
+ enableAllPermissions?: string;
48
+ trackLocation?: string;
49
+ showAllUserRecords?: string;
50
+ permissionSettings?: string;
51
+ moduleName?: string;
52
+ read?: string;
53
+ create?: string;
54
+ editPermission?: string;
55
+ deletePermission?: string;
56
+ importPermission?: string;
57
+ exportPermission?: string;
58
+ noPermissions?: string;
59
+ cancel?: string;
60
+ saveChanges?: string;
61
+ updateChanges?: string;
62
+ readOnly?: string;
63
+ deleteRole?: string;
64
+ deleteRoleConfirm?: string;
65
+ };
66
+ export interface RolesPermissionProps {
67
+ /** Which view to render. */
68
+ view: RolesPermissionView;
69
+ /** Form mode (controls read-only vs editable form). */
70
+ mode?: RolesPermissionMode;
71
+ /** Roles list data. */
72
+ roles: RoleData[];
73
+ isRolesLoading?: boolean;
74
+ /** Permission matrix rows for the form view. */
75
+ permissions: Permission[];
76
+ /** Columns rendered in the matrix. Defaults to all non-automation keys. */
77
+ permissionKeys?: PermissionKey[];
78
+ /** Form field values (controlled). */
79
+ roleName: string;
80
+ roleNameError?: string;
81
+ isSuperAdmin: boolean;
82
+ isTrackLocation: boolean;
83
+ isShowRecords: boolean;
84
+ /** Whether the role is being edited (changes the Save button label). */
85
+ isEditing?: boolean;
86
+ /** Save in-flight flag. */
87
+ isSaving?: boolean;
88
+ /** List actions. */
89
+ onNewRole?: () => void;
90
+ onViewRole?: (role: RoleData) => void;
91
+ onEditRole?: (role: RoleData) => void;
92
+ onDeleteRole?: (roleId: number) => void;
93
+ onBack?: () => void;
94
+ /** Form actions. */
95
+ onRoleNameChange?: (value: string) => void;
96
+ onToggleSuperAdmin?: (checked: boolean) => void;
97
+ onToggleTrackLocation?: (checked: boolean) => void;
98
+ onToggleShowRecords?: (checked: boolean) => void;
99
+ onPermissionChange?: (module: string, key: PermissionKey) => void;
100
+ onSave?: () => void;
101
+ onCancelForm?: () => void;
102
+ /** App-specific sections rendered under the roles list (e.g. ModuleDelete, SignInActivity). */
103
+ footerSlot?: ReactNode;
104
+ /** Icon shown in the matrix for granted permissions in view mode. */
105
+ checkIcon?: ReactNode;
106
+ /** Translated/override strings. */
107
+ labels?: RolesPermissionLabels;
108
+ /** Outer padding override. Defaults to a compact value. */
109
+ padding?: string;
110
+ }
111
+ export interface DeleteRoleModalProps {
112
+ isOpen: boolean;
113
+ onClose: () => void;
114
+ onConfirm: () => void;
115
+ isLoading?: boolean;
116
+ labels: Required<Pick<RolesPermissionLabels, "deleteRole" | "deleteRoleConfirm" | "cancel" | "delete">>;
117
+ }
@@ -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;