pixelize-design-library 2.3.1-beta.13 → 2.3.1-beta.14
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.
- package/.claude/settings.local.json +5 -1
- package/dist/Components/OrgSwitcher/OrgSwitcher.d.ts +4 -0
- package/dist/Components/OrgSwitcher/OrgSwitcher.js +121 -0
- package/dist/Components/OrgSwitcher/OrgSwitcherProps.d.ts +41 -0
- package/dist/Components/OrgSwitcher/OrgSwitcherProps.js +25 -0
- package/dist/Components/StageProgress/StageItem.d.ts +4 -0
- package/dist/Components/StageProgress/StageItem.js +137 -0
- package/dist/Components/StageProgress/StageProgress.d.ts +4 -0
- package/dist/Components/StageProgress/StageProgress.js +59 -0
- package/dist/Components/StageProgress/StageProgressProps.d.ts +85 -0
- package/dist/Components/StageProgress/StageProgressProps.js +27 -0
- package/dist/Components/StageProgress/StepperStage.d.ts +4 -0
- package/dist/Components/StageProgress/StepperStage.js +78 -0
- package/dist/Components/UpgradeButton/UpgradeButton.d.ts +4 -0
- package/dist/Components/UpgradeButton/UpgradeButton.js +58 -0
- package/dist/Components/UpgradeButton/UpgradeButtonProps.d.ts +30 -0
- package/dist/Components/UpgradeButton/UpgradeButtonProps.js +2 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.js +10 -2
- package/package.json +1 -1
|
@@ -35,7 +35,11 @@
|
|
|
35
35
|
"Bash(node -e \"console.log\\(JSON.stringify\\(require\\('./node_modules/pixelize-authenticator/package.json'\\).dependencies\\)\\)\")",
|
|
36
36
|
"Bash(node -e \"console.log\\(require\\('./node_modules/pixelize-authenticator/package.json'\\).version\\)\")",
|
|
37
37
|
"Bash(node -e \"console.log\\(require\\('./node_modules/pixelize-authenticator/node_modules/pixelize-design-library/package.json'\\).version\\)\")",
|
|
38
|
-
"Bash(echo \"tsc exit code: $?\")"
|
|
38
|
+
"Bash(echo \"tsc exit code: $?\")",
|
|
39
|
+
"Bash(./node_modules/.bin/tsc --noEmit --skipLibCheck)",
|
|
40
|
+
"Bash(./node_modules/.bin/tsc --noEmit)",
|
|
41
|
+
"Bash(echo \"tsc exit: $?\")",
|
|
42
|
+
"Bash(echo \"local tsc exit: $?\")"
|
|
39
43
|
],
|
|
40
44
|
"additionalDirectories": [
|
|
41
45
|
"/private/tmp",
|
|
@@ -0,0 +1,121 @@
|
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
47
|
+
var react_1 = __importStar(require("react"));
|
|
48
|
+
var react_2 = require("@chakra-ui/react");
|
|
49
|
+
var lucide_react_1 = require("lucide-react");
|
|
50
|
+
var useCustomTheme_1 = require("../../Theme/useCustomTheme");
|
|
51
|
+
var OrgSwitcherProps_1 = require("./OrgSwitcherProps");
|
|
52
|
+
var sizeMap = {
|
|
53
|
+
sm: { h: "32px", avatar: "22px", font: "0.8rem", sub: "0.65rem", px: 2 },
|
|
54
|
+
md: { h: "40px", avatar: "28px", font: "0.9rem", sub: "0.7rem", px: 3 },
|
|
55
|
+
lg: { h: "48px", avatar: "34px", font: "1rem", sub: "0.78rem", px: 4 },
|
|
56
|
+
};
|
|
57
|
+
var Avatar = function (_a) {
|
|
58
|
+
var org = _a.org, boxSize = _a.boxSize, fontSize = _a.fontSize;
|
|
59
|
+
if (org.logoUrl) {
|
|
60
|
+
return (react_1.default.createElement(react_2.Image, { src: org.logoUrl, alt: org.name, boxSize: boxSize, borderRadius: "8px", objectFit: "cover", flexShrink: 0 }));
|
|
61
|
+
}
|
|
62
|
+
return (react_1.default.createElement(react_2.Flex, { align: "center", justify: "center", boxSize: boxSize, borderRadius: "8px", flexShrink: 0, bg: (0, OrgSwitcherProps_1.avatarColor)(org.name), color: "white", fontSize: fontSize, fontWeight: 700 }, (0, OrgSwitcherProps_1.orgInitial)(org.name)));
|
|
63
|
+
};
|
|
64
|
+
var OrgSwitcher = function (_a) {
|
|
65
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
|
|
66
|
+
var organizations = _a.organizations, value = _a.value, onChange = _a.onChange, _y = _a.isLoading, isLoading = _y === void 0 ? false : _y, isSearchable = _a.isSearchable, _z = _a.searchThreshold, searchThreshold = _z === void 0 ? 6 : _z, _0 = _a.triggerVariant, triggerVariant = _0 === void 0 ? "ghost" : _0, _1 = _a.size, size = _1 === void 0 ? "md" : _1, _2 = _a.maxWidth, maxWidth = _2 === void 0 ? "200px" : _2, _3 = _a.menuMinWidth, menuMinWidth = _3 === void 0 ? "280px" : _3, _4 = _a.placeholder, placeholder = _4 === void 0 ? "Select organization" : _4, _5 = _a.ariaLabel, ariaLabel = _5 === void 0 ? "Switch organization" : _5, _6 = _a.showRole, showRole = _6 === void 0 ? true : _6;
|
|
67
|
+
var theme = (0, useCustomTheme_1.useCustomTheme)();
|
|
68
|
+
var s = sizeMap[size];
|
|
69
|
+
var _7 = (0, react_2.useDisclosure)(), isOpen = _7.isOpen, onOpen = _7.onOpen, onClose = _7.onClose;
|
|
70
|
+
var _8 = (0, react_1.useState)(""), query = _8[0], setQuery = _8[1];
|
|
71
|
+
var searchRef = (0, react_1.useRef)(null);
|
|
72
|
+
var selected = (0, react_1.useMemo)(function () { return organizations.find(function (o) { return o.id === value; }); }, [organizations, value]);
|
|
73
|
+
var showSearch = isSearchable !== null && isSearchable !== void 0 ? isSearchable : organizations.length >= searchThreshold;
|
|
74
|
+
var filtered = (0, react_1.useMemo)(function () {
|
|
75
|
+
if (!query.trim())
|
|
76
|
+
return organizations;
|
|
77
|
+
var q = query.toLowerCase();
|
|
78
|
+
return organizations.filter(function (o) { return o.name.toLowerCase().includes(q); });
|
|
79
|
+
}, [organizations, query]);
|
|
80
|
+
var triggerStyles = triggerVariant === "outline"
|
|
81
|
+
? { border: "1px solid", borderColor: (_c = (_b = theme.colors.gray) === null || _b === void 0 ? void 0 : _b[200]) !== null && _c !== void 0 ? _c : "#E2E8F0", bg: theme.colors.white }
|
|
82
|
+
: triggerVariant === "subtle"
|
|
83
|
+
? { bg: (_e = (_d = theme.colors.gray) === null || _d === void 0 ? void 0 : _d[50]) !== null && _e !== void 0 ? _e : "#F8FAFC" }
|
|
84
|
+
: { bg: "transparent" };
|
|
85
|
+
var handleSelect = function (org) {
|
|
86
|
+
onClose();
|
|
87
|
+
setQuery("");
|
|
88
|
+
if (org.id !== value)
|
|
89
|
+
onChange(org.id, org);
|
|
90
|
+
};
|
|
91
|
+
return (react_1.default.createElement(react_2.Popover, { isOpen: isOpen, onOpen: onOpen, onClose: function () {
|
|
92
|
+
onClose();
|
|
93
|
+
setQuery("");
|
|
94
|
+
}, placement: "bottom-start", initialFocusRef: showSearch ? searchRef : undefined, isLazy: true },
|
|
95
|
+
react_1.default.createElement(react_2.PopoverTrigger, null,
|
|
96
|
+
react_1.default.createElement(react_2.Flex, __assign({ as: "button", type: "button", "aria-label": ariaLabel, align: "center", gap: s.px === 2 ? "8px" : "10px", h: s.h, px: s.px, borderRadius: "10px", cursor: isLoading ? "default" : "pointer", opacity: isLoading ? 0.6 : 1, pointerEvents: isLoading ? "none" : "auto", transition: "background 0.15s ease", _hover: { bg: triggerVariant === "ghost" ? (_g = (_f = theme.colors.gray) === null || _f === void 0 ? void 0 : _f[100]) !== null && _g !== void 0 ? _g : "#F1F5F9" : undefined } }, triggerStyles),
|
|
97
|
+
selected ? (react_1.default.createElement(Avatar, { org: selected, boxSize: s.avatar, fontSize: s.sub })) : (react_1.default.createElement(react_2.Flex, { align: "center", justify: "center", boxSize: s.avatar, borderRadius: "8px", bg: (_j = (_h = theme.colors.gray) === null || _h === void 0 ? void 0 : _h[100]) !== null && _j !== void 0 ? _j : "#F1F5F9", color: (_l = (_k = theme.colors.gray) === null || _k === void 0 ? void 0 : _k[400]) !== null && _l !== void 0 ? _l : "#A0AEC0", flexShrink: 0 },
|
|
98
|
+
react_1.default.createElement(lucide_react_1.Building2, { size: 14 }))),
|
|
99
|
+
react_1.default.createElement(react_2.Text, { fontSize: s.font, fontWeight: 600, color: (_o = (_m = theme.colors.gray) === null || _m === void 0 ? void 0 : _m[700]) !== null && _o !== void 0 ? _o : "#2D3748", maxW: maxWidth, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", textAlign: "left" }, (_p = selected === null || selected === void 0 ? void 0 : selected.name) !== null && _p !== void 0 ? _p : placeholder),
|
|
100
|
+
isLoading ? (react_1.default.createElement(react_2.Spinner, { size: "xs", thickness: "1.5px", color: theme.colors.primary[500], flexShrink: 0 })) : (react_1.default.createElement(react_2.Box, { as: lucide_react_1.ChevronsUpDown, size: 16, color: (_r = (_q = theme.colors.gray) === null || _q === void 0 ? void 0 : _q[400]) !== null && _r !== void 0 ? _r : "#A0AEC0", flexShrink: 0 })))),
|
|
101
|
+
react_1.default.createElement(react_2.PopoverContent, { minW: menuMinWidth, w: "auto", borderRadius: "12px", overflow: "hidden", boxShadow: "0 10px 30px rgba(0,0,0,0.14)", _focus: { outline: "none", boxShadow: "0 10px 30px rgba(0,0,0,0.14)" } },
|
|
102
|
+
react_1.default.createElement(react_2.PopoverBody, { p: 0 },
|
|
103
|
+
showSearch && (react_1.default.createElement(react_2.Box, { p: 2, borderBottom: "1px solid", borderColor: (_t = (_s = theme.colors.gray) === null || _s === void 0 ? void 0 : _s[100]) !== null && _t !== void 0 ? _t : "#EDF2F7" },
|
|
104
|
+
react_1.default.createElement(react_2.InputGroup, { size: "sm" },
|
|
105
|
+
react_1.default.createElement(react_2.InputLeftElement, { pointerEvents: "none" },
|
|
106
|
+
react_1.default.createElement(lucide_react_1.Search, { size: 15, color: (_v = (_u = theme.colors.gray) === null || _u === void 0 ? void 0 : _u[400]) !== null && _v !== void 0 ? _v : "#A0AEC0" })),
|
|
107
|
+
react_1.default.createElement(react_2.Input, { ref: searchRef, placeholder: "Search organizations", value: query, onChange: function (e) { return setQuery(e.target.value); }, borderRadius: "8px" })))),
|
|
108
|
+
react_1.default.createElement(react_2.Box, { maxH: "320px", overflowY: "auto", py: 1 },
|
|
109
|
+
filtered.map(function (org) {
|
|
110
|
+
var _a, _b, _c, _d, _e, _f;
|
|
111
|
+
var isActive = org.id === value;
|
|
112
|
+
return (react_1.default.createElement(react_2.Flex, { key: org.id, align: "center", gap: "10px", px: 3, py: 2, cursor: "pointer", bg: isActive ? theme.colors.primary[50] : "transparent", transition: "background 0.12s ease", _hover: { bg: isActive ? theme.colors.primary[50] : (_b = (_a = theme.colors.gray) === null || _a === void 0 ? void 0 : _a[50]) !== null && _b !== void 0 ? _b : "#F8FAFC" }, onClick: function () { return handleSelect(org); } },
|
|
113
|
+
react_1.default.createElement(Avatar, { org: org, boxSize: s.avatar, fontSize: s.sub }),
|
|
114
|
+
react_1.default.createElement(react_2.Box, { flex: "1", minW: 0 },
|
|
115
|
+
react_1.default.createElement(react_2.Text, { fontSize: s.font, fontWeight: isActive ? 600 : 500, color: (_d = (_c = theme.colors.gray) === null || _c === void 0 ? void 0 : _c[800]) !== null && _d !== void 0 ? _d : "#1A202C", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, org.name),
|
|
116
|
+
showRole && org.role && (react_1.default.createElement(react_2.Text, { fontSize: s.sub, color: (_f = (_e = theme.colors.gray) === null || _e === void 0 ? void 0 : _e[500]) !== null && _f !== void 0 ? _f : "#718096", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, org.role))),
|
|
117
|
+
isActive && (react_1.default.createElement(react_2.Box, { as: lucide_react_1.Check, size: 16, color: theme.colors.primary[500], flexShrink: 0 }))));
|
|
118
|
+
}),
|
|
119
|
+
filtered.length === 0 && (react_1.default.createElement(react_2.Text, { fontSize: "sm", color: (_x = (_w = theme.colors.gray) === null || _w === void 0 ? void 0 : _w[500]) !== null && _x !== void 0 ? _x : "#718096", textAlign: "center", py: 6 }, "No organizations found")))))));
|
|
120
|
+
};
|
|
121
|
+
exports.default = OrgSwitcher;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
export interface OrgOption {
|
|
2
|
+
id: string | number;
|
|
3
|
+
/** Organization display name. */
|
|
4
|
+
name: string;
|
|
5
|
+
/** Optional subtitle, e.g. the user's role/designation in that org. */
|
|
6
|
+
role?: string;
|
|
7
|
+
/** Optional logo image URL. Falls back to an initial-based avatar. */
|
|
8
|
+
logoUrl?: string;
|
|
9
|
+
}
|
|
10
|
+
export type OrgSwitcherSize = "sm" | "md" | "lg";
|
|
11
|
+
export interface OrgSwitcherProps {
|
|
12
|
+
/** Organizations to choose from. */
|
|
13
|
+
organizations: OrgOption[];
|
|
14
|
+
/** id of the currently active organization. */
|
|
15
|
+
value?: string | number;
|
|
16
|
+
/** Fired when a different organization is picked. */
|
|
17
|
+
onChange: (id: string | number, org: OrgOption) => void;
|
|
18
|
+
/** Shows an inline spinner and disables interaction (e.g. while switching). */
|
|
19
|
+
isLoading?: boolean;
|
|
20
|
+
/** Force the search box on/off. Auto-enabled when there are many orgs. */
|
|
21
|
+
isSearchable?: boolean;
|
|
22
|
+
/** Org count at/above which search auto-appears. Default 6. */
|
|
23
|
+
searchThreshold?: number;
|
|
24
|
+
/** Trigger styling. "ghost" suits a navbar; "outline"/"subtle" for forms. */
|
|
25
|
+
triggerVariant?: "ghost" | "outline" | "subtle";
|
|
26
|
+
size?: OrgSwitcherSize;
|
|
27
|
+
/** Max width of the trigger label before truncation. */
|
|
28
|
+
maxWidth?: string;
|
|
29
|
+
/** Min width of the dropdown panel. */
|
|
30
|
+
menuMinWidth?: string;
|
|
31
|
+
/** Shown when no org is selected. */
|
|
32
|
+
placeholder?: string;
|
|
33
|
+
/** Accessible label for the trigger. */
|
|
34
|
+
ariaLabel?: string;
|
|
35
|
+
/** Show the role subtitle inside the dropdown rows. Default true. */
|
|
36
|
+
showRole?: boolean;
|
|
37
|
+
}
|
|
38
|
+
/** Deterministically pick an avatar color from an org name. */
|
|
39
|
+
export declare const avatarColor: (seed: string) => string;
|
|
40
|
+
/** First letter (uppercased) of an org name, for the fallback avatar. */
|
|
41
|
+
export declare const orgInitial: (name: string) => string;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.orgInitial = exports.avatarColor = void 0;
|
|
4
|
+
var AVATAR_COLORS = [
|
|
5
|
+
"#6366F1",
|
|
6
|
+
"#0EA5E9",
|
|
7
|
+
"#10B981",
|
|
8
|
+
"#F59E0B",
|
|
9
|
+
"#EF4444",
|
|
10
|
+
"#EC4899",
|
|
11
|
+
"#8B5CF6",
|
|
12
|
+
"#14B8A6",
|
|
13
|
+
];
|
|
14
|
+
/** Deterministically pick an avatar color from an org name. */
|
|
15
|
+
var avatarColor = function (seed) {
|
|
16
|
+
var hash = 0;
|
|
17
|
+
for (var i = 0; i < seed.length; i += 1) {
|
|
18
|
+
hash = seed.charCodeAt(i) + ((hash << 5) - hash);
|
|
19
|
+
}
|
|
20
|
+
return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];
|
|
21
|
+
};
|
|
22
|
+
exports.avatarColor = avatarColor;
|
|
23
|
+
/** First letter (uppercased) of an org name, for the fallback avatar. */
|
|
24
|
+
var orgInitial = function (name) { var _a, _b; return ((_b = (_a = name === null || name === void 0 ? void 0 : name.trim()) === null || _a === void 0 ? void 0 : _a[0]) !== null && _b !== void 0 ? _b : "?").toUpperCase(); };
|
|
25
|
+
exports.orgInitial = orgInitial;
|
|
@@ -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,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,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;
|
|
@@ -0,0 +1,58 @@
|
|
|
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 lucide_react_1 = require("lucide-react");
|
|
20
|
+
var sizeMap = {
|
|
21
|
+
sm: { px: "12px", py: "4px", font: "12px", sub: "8px", icon: 11, radius: "40px" },
|
|
22
|
+
md: { px: "20px", py: "5px", font: "14px", sub: "10px", icon: 13, radius: "50px" },
|
|
23
|
+
lg: { px: "26px", py: "8px", font: "16px", sub: "11px", icon: 16, radius: "60px" },
|
|
24
|
+
};
|
|
25
|
+
var DEFAULT_GRADIENT = { from: "#667eea", to: "#764ba2" };
|
|
26
|
+
var UpgradeButton = function (_a) {
|
|
27
|
+
var label = _a.label, mobileLabel = _a.mobileLabel, subtitle = _a.subtitle, _b = _a.icon, icon = _b === void 0 ? lucide_react_1.Sparkles : _b, _c = _a.iconColor, iconColor = _c === void 0 ? "#FFD66B" : _c, _d = _a.gradient, gradient = _d === void 0 ? DEFAULT_GRADIENT : _d, _e = _a.size, size = _e === void 0 ? "md" : _e, _f = _a.shimmer, shimmer = _f === void 0 ? true : _f, _g = _a.isLoading, isLoading = _g === void 0 ? false : _g, _h = _a.isDisabled, isDisabled = _h === void 0 ? false : _h, _j = _a.maxLabelWidth, maxLabelWidth = _j === void 0 ? "160px" : _j, ariaLabel = _a.ariaLabel, onClick = _a.onClick;
|
|
28
|
+
var s = sizeMap[size];
|
|
29
|
+
var Icon = icon;
|
|
30
|
+
var blocked = isLoading || isDisabled;
|
|
31
|
+
var g = "linear-gradient(135deg, ".concat(gradient.from, " 0%, ").concat(gradient.to, " 100%)");
|
|
32
|
+
var gReversed = "linear-gradient(135deg, ".concat(gradient.to, " 0%, ").concat(gradient.from, " 100%)");
|
|
33
|
+
var hasMobile = !!mobileLabel && mobileLabel !== label;
|
|
34
|
+
return (react_1.default.createElement(react_2.Box, { as: "button", type: "button", "aria-label": ariaLabel || label, onClick: blocked ? undefined : onClick, disabled: isDisabled, position: "relative", cursor: blocked ? "default" : "pointer", opacity: isDisabled ? 0.6 : 1, px: { base: s.px === "20px" ? "14px" : s.px, md: s.px }, py: s.py, bgImage: g, color: "white", borderRadius: s.radius, fontWeight: "bold", textAlign: "center", overflow: "hidden", display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", transition: "transform 0.3s ease, box-shadow 0.3s ease, background-image 0.3s ease", _focusVisible: { outline: "none", boxShadow: "0 0 0 3px ".concat(gradient.from, "55") }, _hover: blocked
|
|
35
|
+
? undefined
|
|
36
|
+
: __assign({ transform: "translateY(-2px)", bgImage: gReversed, boxShadow: "0 10px 30px ".concat(gradient.from, "66") }, (shimmer ? { _before: { left: "130%" } } : {})), sx: shimmer
|
|
37
|
+
? {
|
|
38
|
+
_before: {
|
|
39
|
+
content: '""',
|
|
40
|
+
position: "absolute",
|
|
41
|
+
top: 0,
|
|
42
|
+
left: "-75%",
|
|
43
|
+
width: "55%",
|
|
44
|
+
height: "100%",
|
|
45
|
+
background: "linear-gradient(120deg, transparent, rgba(255,255,255,0.45), transparent)",
|
|
46
|
+
transform: "skewX(-20deg)",
|
|
47
|
+
transition: "left 0.7s ease",
|
|
48
|
+
pointerEvents: "none",
|
|
49
|
+
},
|
|
50
|
+
}
|
|
51
|
+
: undefined },
|
|
52
|
+
react_1.default.createElement(react_2.Flex, { align: "center", gap: "6px", maxW: maxLabelWidth, overflow: "hidden", whiteSpace: "nowrap", zIndex: 1 },
|
|
53
|
+
react_1.default.createElement(react_2.Text, { as: "span", fontSize: s.font, overflow: "hidden", textOverflow: "ellipsis", display: hasMobile ? { base: "none", md: "block" } : "block" }, label),
|
|
54
|
+
hasMobile && (react_1.default.createElement(react_2.Text, { as: "span", fontSize: s.font, overflow: "hidden", textOverflow: "ellipsis", display: { base: "block", md: "none" } }, mobileLabel)),
|
|
55
|
+
isLoading ? (react_1.default.createElement(react_2.Spinner, { size: "xs", thickness: "1.5px", color: iconColor })) : (Icon && react_1.default.createElement(Icon, { size: s.icon, color: iconColor, style: { flexShrink: 0 } }))),
|
|
56
|
+
subtitle && (react_1.default.createElement(react_2.Text, { as: "span", mt: "1px", fontSize: s.sub, fontWeight: "bold", color: iconColor, maxW: maxLabelWidth, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", zIndex: 1 }, subtitle))));
|
|
57
|
+
};
|
|
58
|
+
exports.default = UpgradeButton;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ElementType } from "react";
|
|
2
|
+
export type UpgradeButtonSize = "sm" | "md" | "lg";
|
|
3
|
+
export interface UpgradeButtonProps {
|
|
4
|
+
/** Primary label (shown on md+ screens). */
|
|
5
|
+
label: string;
|
|
6
|
+
/** Compact label for small screens. Defaults to `label`. */
|
|
7
|
+
mobileLabel?: string;
|
|
8
|
+
/** Optional small second line, e.g. a plan-expiry message. */
|
|
9
|
+
subtitle?: string;
|
|
10
|
+
/** Leading icon. Defaults to lucide `Sparkles`. Pass null to hide. */
|
|
11
|
+
icon?: ElementType | null;
|
|
12
|
+
/** Icon color. Defaults to a gold tone. */
|
|
13
|
+
iconColor?: string;
|
|
14
|
+
/** Gradient stops. Defaults to the brand purple gradient. */
|
|
15
|
+
gradient?: {
|
|
16
|
+
from: string;
|
|
17
|
+
to: string;
|
|
18
|
+
};
|
|
19
|
+
size?: UpgradeButtonSize;
|
|
20
|
+
/** Animated light sweep on hover. Default true. */
|
|
21
|
+
shimmer?: boolean;
|
|
22
|
+
/** Show a spinner and block interaction. */
|
|
23
|
+
isLoading?: boolean;
|
|
24
|
+
isDisabled?: boolean;
|
|
25
|
+
/** Truncate the label beyond this width. */
|
|
26
|
+
maxLabelWidth?: string;
|
|
27
|
+
/** Accessible label (falls back to `label`). */
|
|
28
|
+
ariaLabel?: string;
|
|
29
|
+
onClick?: React.MouseEventHandler<HTMLButtonElement>;
|
|
30
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -68,5 +68,9 @@ import FieldSelectModal from "./Components/FieldSelectModal/FieldSelectModal";
|
|
|
68
68
|
import PdfViewer from "./Components/PdfViewer/PdfViewer";
|
|
69
69
|
import LazyWrapper from "./Components/LazyWrapper/LazyWrapper";
|
|
70
70
|
import FilePreview, { FilePreviewTrigger } from "./Components/FilePreview/FilePreview";
|
|
71
|
-
|
|
71
|
+
import StageProgress from "./Components/StageProgress/StageProgress";
|
|
72
|
+
import StageItem from "./Components/StageProgress/StageItem";
|
|
73
|
+
import OrgSwitcher from "./Components/OrgSwitcher/OrgSwitcher";
|
|
74
|
+
import UpgradeButton from "./Components/UpgradeButton/UpgradeButton";
|
|
75
|
+
export { Accordian, AlertDialog, ApexBarChart, ApexPieChart, ApexPolarChart, ApexLineChart, Breadcrumbs, Button, ButtonGroupIcon, Card, Checkbox, ContactForm, DatePicker, Drawer, DrawerHeader, DrawerBody, DrawerFooter, Dropdown, Editor, EmptyState, FieldSelectModal, FilePreview, FilePreviewTrigger, FileUpload, FileUploader, FilterSidebar, FormWrapper, LazyWrapper, MoreItems, PdfViewer, ScrollToTop, CopyButton, StageProgress, StageItem, OrgSwitcher, UpgradeButton, Header, HeaderActions, InputTextArea, InputSwitch, KanbanBoard, Loading, Modal, ModalHeader, ModalBody, ModalFooter, NavigationBar, Notification, NoteTextArea, MultiSelect, NumberInput, PaymentCard, PhoneNumberInput, PinInput, ProductCard, ProductDetails, ProfileCard, ProfileCardHeader, ProfileCardBody, ProfileCardFooter, ProfilePhotoViewer, ProgressBar, RadioButton, RadioButtonGroup, Reorder, Search, Select, SearchSelect, SelectSearch, SideBar, Slider, Skeletons, Switch, Table, TableToggle, Tag, TextInput, Timeline, Toaster, ToolTip, useToaster, VerifyEmailOtp, useCustomTheme, ThemesList, debounce, };
|
|
72
76
|
export default withTheme;
|
package/dist/index.js
CHANGED
|
@@ -37,8 +37,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
38
38
|
};
|
|
39
39
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
-
exports.
|
|
41
|
-
exports.debounce = exports.ThemesList = exports.useCustomTheme = exports.VerifyEmailOtp = exports.useToaster = exports.ToolTip = exports.Toaster = exports.Timeline = exports.TextInput = exports.Tag = exports.TableToggle = exports.Table = exports.Switch = exports.Skeletons = exports.Slider = exports.SideBar = exports.SelectSearch = exports.SearchSelect = exports.Select = exports.Search = exports.Reorder = exports.RadioButtonGroup = exports.RadioButton = exports.ProgressBar = exports.ProfilePhotoViewer = exports.ProfileCardFooter = exports.ProfileCardBody = exports.ProfileCardHeader = exports.ProfileCard = exports.ProductDetails = exports.ProductCard = void 0;
|
|
40
|
+
exports.MultiSelect = exports.NoteTextArea = exports.Notification = exports.NavigationBar = exports.ModalFooter = exports.ModalBody = exports.ModalHeader = exports.Modal = exports.Loading = exports.KanbanBoard = exports.InputSwitch = exports.InputTextArea = exports.HeaderActions = exports.Header = exports.UpgradeButton = exports.OrgSwitcher = exports.StageItem = exports.StageProgress = exports.CopyButton = exports.ScrollToTop = exports.PdfViewer = exports.MoreItems = exports.LazyWrapper = exports.FormWrapper = exports.FilterSidebar = exports.FileUploader = exports.FileUpload = exports.FilePreviewTrigger = exports.FilePreview = exports.FieldSelectModal = exports.EmptyState = exports.Editor = exports.Dropdown = exports.DrawerFooter = exports.DrawerBody = exports.DrawerHeader = exports.Drawer = exports.DatePicker = exports.ContactForm = exports.Checkbox = exports.Card = exports.ButtonGroupIcon = exports.Button = exports.Breadcrumbs = exports.ApexLineChart = exports.ApexPolarChart = exports.ApexPieChart = exports.ApexBarChart = exports.AlertDialog = exports.Accordian = void 0;
|
|
41
|
+
exports.debounce = exports.ThemesList = exports.useCustomTheme = exports.VerifyEmailOtp = exports.useToaster = exports.ToolTip = exports.Toaster = exports.Timeline = exports.TextInput = exports.Tag = exports.TableToggle = exports.Table = exports.Switch = exports.Skeletons = exports.Slider = exports.SideBar = exports.SelectSearch = exports.SearchSelect = exports.Select = exports.Search = exports.Reorder = exports.RadioButtonGroup = exports.RadioButton = exports.ProgressBar = exports.ProfilePhotoViewer = exports.ProfileCardFooter = exports.ProfileCardBody = exports.ProfileCardHeader = exports.ProfileCard = exports.ProductDetails = exports.ProductCard = exports.PinInput = exports.PhoneNumberInput = exports.PaymentCard = exports.NumberInput = void 0;
|
|
42
42
|
var Accordion_1 = __importDefault(require("./Components/Accordion/Accordion"));
|
|
43
43
|
exports.Accordian = Accordion_1.default;
|
|
44
44
|
var AlertDialog_1 = __importDefault(require("./Components/AlertDialog/AlertDialog"));
|
|
@@ -191,4 +191,12 @@ exports.LazyWrapper = LazyWrapper_1.default;
|
|
|
191
191
|
var FilePreview_1 = __importStar(require("./Components/FilePreview/FilePreview"));
|
|
192
192
|
exports.FilePreview = FilePreview_1.default;
|
|
193
193
|
Object.defineProperty(exports, "FilePreviewTrigger", { enumerable: true, get: function () { return FilePreview_1.FilePreviewTrigger; } });
|
|
194
|
+
var StageProgress_1 = __importDefault(require("./Components/StageProgress/StageProgress"));
|
|
195
|
+
exports.StageProgress = StageProgress_1.default;
|
|
196
|
+
var StageItem_1 = __importDefault(require("./Components/StageProgress/StageItem"));
|
|
197
|
+
exports.StageItem = StageItem_1.default;
|
|
198
|
+
var OrgSwitcher_1 = __importDefault(require("./Components/OrgSwitcher/OrgSwitcher"));
|
|
199
|
+
exports.OrgSwitcher = OrgSwitcher_1.default;
|
|
200
|
+
var UpgradeButton_1 = __importDefault(require("./Components/UpgradeButton/UpgradeButton"));
|
|
201
|
+
exports.UpgradeButton = UpgradeButton_1.default;
|
|
194
202
|
exports.default = withTheme_1.default;
|