pixelize-design-library 2.3.1-beta.12 → 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 +6 -1
- package/dist/Components/CopyButton/CopyButton.d.ts +22 -0
- package/dist/Components/CopyButton/CopyButton.js +126 -0
- package/dist/Components/EmptyState/EmptyState.d.ts +4 -0
- package/dist/Components/EmptyState/EmptyState.js +65 -0
- package/dist/Components/EmptyState/EmptyStateProps.d.ts +28 -0
- package/dist/Components/EmptyState/EmptyStateProps.js +2 -0
- package/dist/Components/FieldSelectModal/FieldSelectModal.d.ts +26 -0
- package/dist/Components/FieldSelectModal/FieldSelectModal.js +107 -0
- package/dist/Components/FilePreview/FilePreview.d.ts +6 -0
- package/dist/Components/FilePreview/FilePreview.js +190 -0
- package/dist/Components/FilePreview/FilePreviewProps.d.ts +26 -0
- package/dist/Components/FilePreview/FilePreviewProps.js +2 -0
- package/dist/Components/LazyWrapper/LazyWrapper.d.ts +10 -0
- package/dist/Components/LazyWrapper/LazyWrapper.js +50 -0
- package/dist/Components/MoreItems/MoreItems.d.ts +4 -0
- package/dist/Components/MoreItems/MoreItems.js +35 -0
- package/dist/Components/MoreItems/MoreItemsProps.d.ts +29 -0
- package/dist/Components/MoreItems/MoreItemsProps.js +2 -0
- 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/PdfViewer/PdfViewer.d.ts +15 -0
- package/dist/Components/PdfViewer/PdfViewer.js +29 -0
- package/dist/Components/ScrollToTop/ScrollToTop.d.ts +19 -0
- package/dist/Components/ScrollToTop/ScrollToTop.js +104 -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/Table/components/TableHeader.js +2 -2
- 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 +13 -1
- package/dist/index.js +27 -2
- package/package.json +1 -1
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface LazyWrapperProps {
|
|
3
|
+
children: React.ReactNode;
|
|
4
|
+
/** Custom fallback node. Overrides the default spinner. */
|
|
5
|
+
fallback?: React.ReactNode;
|
|
6
|
+
/** Min height of the default fallback container. */
|
|
7
|
+
minHeight?: string;
|
|
8
|
+
}
|
|
9
|
+
declare const LazyWrapper: React.FC<LazyWrapperProps>;
|
|
10
|
+
export default LazyWrapper;
|
|
@@ -0,0 +1,50 @@
|
|
|
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 useCustomTheme_1 = require("../../Theme/useCustomTheme");
|
|
39
|
+
var DefaultFallback = function (_a) {
|
|
40
|
+
var _b, _c;
|
|
41
|
+
var minHeight = _a.minHeight;
|
|
42
|
+
var theme = (0, useCustomTheme_1.useCustomTheme)();
|
|
43
|
+
return (react_1.default.createElement(react_2.Box, { display: "flex", alignItems: "center", justifyContent: "center", minHeight: minHeight, width: "100%", p: "2rem" },
|
|
44
|
+
react_1.default.createElement(react_2.Spinner, { thickness: "3px", speed: "0.65s", size: "lg", emptyColor: (_c = (_b = theme.colors.gray) === null || _b === void 0 ? void 0 : _b[100]) !== null && _c !== void 0 ? _c : "#EDF2F7", color: theme.colors.primary[500] })));
|
|
45
|
+
};
|
|
46
|
+
var LazyWrapper = function (_a) {
|
|
47
|
+
var children = _a.children, fallback = _a.fallback, _b = _a.minHeight, minHeight = _b === void 0 ? "400px" : _b;
|
|
48
|
+
return (react_1.default.createElement(react_1.Suspense, { fallback: fallback !== null && fallback !== void 0 ? fallback : react_1.default.createElement(DefaultFallback, { minHeight: minHeight }) }, children));
|
|
49
|
+
};
|
|
50
|
+
exports.default = LazyWrapper;
|
|
@@ -0,0 +1,35 @@
|
|
|
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("@chakra-ui/react");
|
|
8
|
+
var useCustomTheme_1 = require("../../Theme/useCustomTheme");
|
|
9
|
+
var MoreItems = function (_a) {
|
|
10
|
+
var _b, _c;
|
|
11
|
+
var items = _a.items, moreCount = _a.moreCount, triggerText = _a.triggerText, colorResolver = _a.colorResolver, _d = _a.hideDots, hideDots = _d === void 0 ? false : _d, _e = _a.columns, columns = _e === void 0 ? 2 : _e, _f = _a.minWidth, minWidth = _f === void 0 ? "260px" : _f, _g = _a.triggerMaxWidth, triggerMaxWidth = _g === void 0 ? "250px" : _g, _h = _a.trigger, trigger = _h === void 0 ? "hover" : _h, _j = _a.placement, placement = _j === void 0 ? "bottom-start" : _j;
|
|
12
|
+
var theme = (0, useCustomTheme_1.useCustomTheme)();
|
|
13
|
+
var count = moreCount !== null && moreCount !== void 0 ? moreCount : items.length;
|
|
14
|
+
if (count <= 0)
|
|
15
|
+
return triggerText ? react_1.default.createElement(react_1.default.Fragment, null, triggerText) : null;
|
|
16
|
+
return (react_1.default.createElement(react_2.Popover, { trigger: trigger, placement: placement, isLazy: true },
|
|
17
|
+
react_1.default.createElement(react_2.PopoverTrigger, null,
|
|
18
|
+
react_1.default.createElement(react_2.Box, { display: "inline-flex", alignItems: "center", maxW: triggerMaxWidth, cursor: "pointer" },
|
|
19
|
+
triggerText !== undefined && (react_1.default.createElement(react_2.Box, { as: "span", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, triggerText)),
|
|
20
|
+
react_1.default.createElement(react_2.Box, { as: "span", ml: "6px", px: "8px", py: "1px", fontSize: "12px", fontWeight: 600, lineHeight: "1.4", borderRadius: "full", color: (_b = theme.colors.primary[600]) !== null && _b !== void 0 ? _b : theme.colors.primary[500], bg: theme.colors.primary[50], transition: "all 0.15s ease", _hover: { bg: (_c = theme.colors.primary[100]) !== null && _c !== void 0 ? _c : theme.colors.primary[50] } },
|
|
21
|
+
"+",
|
|
22
|
+
count,
|
|
23
|
+
" more"))),
|
|
24
|
+
react_1.default.createElement(react_2.PopoverContent, { width: "auto", minWidth: minWidth, maxH: "280px", overflowY: "auto", borderRadius: "12px", boxShadow: "0 8px 24px rgba(0,0,0,0.12)", _focus: { outline: "none", boxShadow: "0 8px 24px rgba(0,0,0,0.12)" } },
|
|
25
|
+
react_1.default.createElement(react_2.PopoverArrow, null),
|
|
26
|
+
react_1.default.createElement(react_2.PopoverBody, { p: 3 },
|
|
27
|
+
react_1.default.createElement(react_2.SimpleGrid, { columns: columns, spacingX: 4, spacingY: 2 }, items === null || items === void 0 ? void 0 : items.map(function (item, index) {
|
|
28
|
+
var _a, _b, _c, _d, _e, _f, _g;
|
|
29
|
+
var color = (_b = (_a = item.color) !== null && _a !== void 0 ? _a : colorResolver === null || colorResolver === void 0 ? void 0 : colorResolver(item)) !== null && _b !== void 0 ? _b : ((_d = (_c = theme.colors.gray) === null || _c === void 0 ? void 0 : _c[400]) !== null && _d !== void 0 ? _d : "#A0AEC0");
|
|
30
|
+
return (react_1.default.createElement(react_2.Box, { key: (_e = item.id) !== null && _e !== void 0 ? _e : index, display: "flex", alignItems: "center", gap: "8px", minW: 0 },
|
|
31
|
+
!hideDots && (react_1.default.createElement(react_2.Box, { flexShrink: 0, width: "8px", height: "8px", borderRadius: "full", bg: color })),
|
|
32
|
+
react_1.default.createElement(react_2.Text, { fontSize: "13px", color: (_g = (_f = theme.colors.gray) === null || _f === void 0 ? void 0 : _f[700]) !== null && _g !== void 0 ? _g : "#2D3748", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, item.label)));
|
|
33
|
+
}))))));
|
|
34
|
+
};
|
|
35
|
+
exports.default = MoreItems;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ReactNode } from "react";
|
|
2
|
+
export interface MoreItem {
|
|
3
|
+
id: string | number;
|
|
4
|
+
label: string;
|
|
5
|
+
/** Optional leading dot color. Falls back to colorResolver or a neutral gray. */
|
|
6
|
+
color?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface MoreItemsProps {
|
|
9
|
+
/** Items shown inside the popover. */
|
|
10
|
+
items: MoreItem[];
|
|
11
|
+
/** Number rendered in the "+N more" trigger. Defaults to items.length. */
|
|
12
|
+
moreCount?: number;
|
|
13
|
+
/** Text shown before the "+N more" pill (e.g. the first visible value). */
|
|
14
|
+
triggerText?: ReactNode;
|
|
15
|
+
/** Derive a dot color per item; takes precedence is given to item.color. */
|
|
16
|
+
colorResolver?: (item: MoreItem) => string | undefined;
|
|
17
|
+
/** Hide the colored leading dot entirely. */
|
|
18
|
+
hideDots?: boolean;
|
|
19
|
+
/** Columns inside the popover grid. */
|
|
20
|
+
columns?: number;
|
|
21
|
+
/** Min width of the popover panel. */
|
|
22
|
+
minWidth?: string;
|
|
23
|
+
/** Max width of the trigger before truncation. */
|
|
24
|
+
triggerMaxWidth?: string;
|
|
25
|
+
/** Open on "hover" (default) or "click". */
|
|
26
|
+
trigger?: "hover" | "click";
|
|
27
|
+
/** Popover placement. */
|
|
28
|
+
placement?: "bottom-start" | "bottom-end" | "bottom" | "top" | "right" | "left";
|
|
29
|
+
}
|
|
@@ -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,15 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface PdfViewerProps {
|
|
3
|
+
/** URL of the PDF to embed. */
|
|
4
|
+
pdfUrl: string;
|
|
5
|
+
/** File name shown in the toolbar. */
|
|
6
|
+
fileName?: string;
|
|
7
|
+
/** Height of the embed. */
|
|
8
|
+
height?: string;
|
|
9
|
+
/** Show the toolbar (name + open + download). */
|
|
10
|
+
showToolbar?: boolean;
|
|
11
|
+
/** Border radius of the frame. */
|
|
12
|
+
borderRadius?: string;
|
|
13
|
+
}
|
|
14
|
+
declare const PdfViewer: React.FC<PdfViewerProps>;
|
|
15
|
+
export default PdfViewer;
|
|
@@ -0,0 +1,29 @@
|
|
|
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("@chakra-ui/react");
|
|
8
|
+
var lucide_react_1 = require("lucide-react");
|
|
9
|
+
var useCustomTheme_1 = require("../../Theme/useCustomTheme");
|
|
10
|
+
var ToolTip_1 = __importDefault(require("../ToolTip/ToolTip"));
|
|
11
|
+
var PdfViewer = function (_a) {
|
|
12
|
+
var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o;
|
|
13
|
+
var pdfUrl = _a.pdfUrl, _p = _a.fileName, fileName = _p === void 0 ? "Document.pdf" : _p, _q = _a.height, height = _q === void 0 ? "480px" : _q, _r = _a.showToolbar, showToolbar = _r === void 0 ? true : _r, _s = _a.borderRadius, borderRadius = _s === void 0 ? "12px" : _s;
|
|
14
|
+
var theme = (0, useCustomTheme_1.useCustomTheme)();
|
|
15
|
+
return (react_1.default.createElement(react_2.Box, { border: "1px solid", borderColor: (_c = (_b = theme.colors.gray) === null || _b === void 0 ? void 0 : _b[200]) !== null && _c !== void 0 ? _c : "#E2E8F0", borderRadius: borderRadius, overflow: "hidden", bg: theme.colors.white },
|
|
16
|
+
showToolbar && (react_1.default.createElement(react_2.Flex, { align: "center", justify: "space-between", px: 4, py: 2.5, borderBottom: "1px solid", borderColor: (_e = (_d = theme.colors.gray) === null || _d === void 0 ? void 0 : _d[100]) !== null && _e !== void 0 ? _e : "#EDF2F7", bg: (_g = (_f = theme.colors.gray) === null || _f === void 0 ? void 0 : _f[50]) !== null && _g !== void 0 ? _g : "#F8FAFC" },
|
|
17
|
+
react_1.default.createElement(react_2.Flex, { align: "center", gap: 2, minW: 0 },
|
|
18
|
+
react_1.default.createElement(lucide_react_1.FileText, { size: 18, color: theme.colors.primary[500] }),
|
|
19
|
+
react_1.default.createElement(react_2.Text, { fontSize: "sm", fontWeight: 500, color: (_j = (_h = theme.colors.gray) === null || _h === void 0 ? void 0 : _h[700]) !== null && _j !== void 0 ? _j : "#2D3748", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, fileName)),
|
|
20
|
+
react_1.default.createElement(react_2.Flex, { align: "center", gap: 1 },
|
|
21
|
+
react_1.default.createElement(ToolTip_1.default, { label: "Open in new tab", placement: "top" },
|
|
22
|
+
react_1.default.createElement(react_2.Box, { as: "a", href: pdfUrl, target: "_blank", rel: "noopener noreferrer", p: 2, borderRadius: "8px", color: (_l = (_k = theme.colors.gray) === null || _k === void 0 ? void 0 : _k[600]) !== null && _l !== void 0 ? _l : "#4A5568", _hover: { bg: theme.colors.primary[50], color: theme.colors.primary[500] } },
|
|
23
|
+
react_1.default.createElement(lucide_react_1.ExternalLink, { size: 16 }))),
|
|
24
|
+
react_1.default.createElement(ToolTip_1.default, { label: "Download", placement: "top" },
|
|
25
|
+
react_1.default.createElement(react_2.Box, { as: "a", href: pdfUrl, download: fileName, p: 2, borderRadius: "8px", color: (_o = (_m = theme.colors.gray) === null || _m === void 0 ? void 0 : _m[600]) !== null && _o !== void 0 ? _o : "#4A5568", _hover: { bg: theme.colors.primary[50], color: theme.colors.primary[500] } },
|
|
26
|
+
react_1.default.createElement(lucide_react_1.Download, { size: 16 })))))),
|
|
27
|
+
react_1.default.createElement(react_2.Box, { as: "embed", src: pdfUrl, type: "application/pdf", width: "100%", height: height, display: "block" })));
|
|
28
|
+
};
|
|
29
|
+
exports.default = PdfViewer;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export interface ScrollToTopProps {
|
|
3
|
+
/** Content to wrap. The button watches the nearest scrollable ancestor. */
|
|
4
|
+
children: React.ReactNode;
|
|
5
|
+
/** Tooltip label on the button. */
|
|
6
|
+
tooltipLabel?: string;
|
|
7
|
+
/** Scroll distance (px) after which the button appears. */
|
|
8
|
+
threshold?: number;
|
|
9
|
+
/** Smooth-scroll duration in ms. */
|
|
10
|
+
duration?: number;
|
|
11
|
+
/** Pin to a window-level scroll instead of the wrapped parent. */
|
|
12
|
+
useWindow?: boolean;
|
|
13
|
+
/** Distance from the bottom edge. */
|
|
14
|
+
bottom?: string;
|
|
15
|
+
/** Distance from the right edge. */
|
|
16
|
+
right?: string;
|
|
17
|
+
}
|
|
18
|
+
declare const ScrollToTop: React.FC<ScrollToTopProps>;
|
|
19
|
+
export default ScrollToTop;
|
|
@@ -0,0 +1,104 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
var react_1 = __importStar(require("react"));
|
|
40
|
+
var react_2 = require("@chakra-ui/react");
|
|
41
|
+
var lucide_react_1 = require("lucide-react");
|
|
42
|
+
var useCustomTheme_1 = require("../../Theme/useCustomTheme");
|
|
43
|
+
var ToolTip_1 = __importDefault(require("../ToolTip/ToolTip"));
|
|
44
|
+
var ScrollToTop = function (_a) {
|
|
45
|
+
var _b;
|
|
46
|
+
var children = _a.children, _c = _a.tooltipLabel, tooltipLabel = _c === void 0 ? "Scroll to top" : _c, _d = _a.threshold, threshold = _d === void 0 ? 300 : _d, _e = _a.duration, duration = _e === void 0 ? 600 : _e, _f = _a.useWindow, useWindow = _f === void 0 ? false : _f, _g = _a.bottom, bottom = _g === void 0 ? "2rem" : _g, _h = _a.right, right = _h === void 0 ? "2rem" : _h;
|
|
47
|
+
var _j = (0, react_1.useState)(false), visible = _j[0], setVisible = _j[1];
|
|
48
|
+
var anchorRef = (0, react_1.useRef)(null);
|
|
49
|
+
var theme = (0, useCustomTheme_1.useCustomTheme)();
|
|
50
|
+
var getScroller = function () {
|
|
51
|
+
var _a, _b;
|
|
52
|
+
if (useWindow)
|
|
53
|
+
return window;
|
|
54
|
+
return (_b = (_a = anchorRef.current) === null || _a === void 0 ? void 0 : _a.parentElement) !== null && _b !== void 0 ? _b : null;
|
|
55
|
+
};
|
|
56
|
+
var handleScroll = function () {
|
|
57
|
+
var _a;
|
|
58
|
+
var scroller = getScroller();
|
|
59
|
+
var top = scroller === window
|
|
60
|
+
? window.scrollY
|
|
61
|
+
: (_a = scroller === null || scroller === void 0 ? void 0 : scroller.scrollTop) !== null && _a !== void 0 ? _a : 0;
|
|
62
|
+
setVisible(top >= threshold);
|
|
63
|
+
};
|
|
64
|
+
var scrollToTop = function () {
|
|
65
|
+
var scroller = getScroller();
|
|
66
|
+
if (!scroller)
|
|
67
|
+
return;
|
|
68
|
+
var start = scroller === window ? window.scrollY : scroller.scrollTop;
|
|
69
|
+
var startTime = performance.now();
|
|
70
|
+
var step = function (now) {
|
|
71
|
+
var progress = Math.min((now - startTime) / duration, 1);
|
|
72
|
+
var eased = progress < 0.5
|
|
73
|
+
? 2 * progress * progress
|
|
74
|
+
: -1 + (4 - 2 * progress) * progress;
|
|
75
|
+
var next = start * (1 - eased);
|
|
76
|
+
if (scroller === window)
|
|
77
|
+
window.scrollTo(0, next);
|
|
78
|
+
else
|
|
79
|
+
scroller.scrollTop = next;
|
|
80
|
+
if (progress < 1)
|
|
81
|
+
requestAnimationFrame(step);
|
|
82
|
+
};
|
|
83
|
+
requestAnimationFrame(step);
|
|
84
|
+
};
|
|
85
|
+
(0, react_1.useEffect)(function () {
|
|
86
|
+
var scroller = getScroller();
|
|
87
|
+
if (!scroller)
|
|
88
|
+
return;
|
|
89
|
+
scroller.addEventListener("scroll", handleScroll);
|
|
90
|
+
handleScroll();
|
|
91
|
+
return function () { return scroller.removeEventListener("scroll", handleScroll); };
|
|
92
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
93
|
+
}, [useWindow, threshold]);
|
|
94
|
+
return (react_1.default.createElement(react_2.Box, { ref: anchorRef, position: "relative" },
|
|
95
|
+
children,
|
|
96
|
+
react_1.default.createElement(ToolTip_1.default, { label: tooltipLabel, placement: "left" },
|
|
97
|
+
react_1.default.createElement(react_2.Box, { onClick: scrollToTop, role: "button", "aria-label": tooltipLabel, position: "fixed", bottom: bottom, right: right, zIndex: 1000, display: "flex", alignItems: "center", justifyContent: "center", boxSize: "44px", borderRadius: "full", cursor: "pointer", bg: theme.colors.primary[500], color: theme.colors.white, boxShadow: "0 4px 14px rgba(0,0,0,0.25)", opacity: visible ? 1 : 0, transform: visible ? "translateY(0) scale(1)" : "translateY(16px) scale(0.85)", pointerEvents: visible ? "auto" : "none", transition: "all 0.25s cubic-bezier(0.16, 1, 0.3, 1)", _hover: {
|
|
98
|
+
bg: (_b = theme.colors.primary[600]) !== null && _b !== void 0 ? _b : theme.colors.primary[500],
|
|
99
|
+
transform: "translateY(-2px) scale(1.05)",
|
|
100
|
+
boxShadow: "0 6px 20px rgba(0,0,0,0.3)",
|
|
101
|
+
}, _active: { transform: "scale(0.95)" } },
|
|
102
|
+
react_1.default.createElement(lucide_react_1.ChevronUp, { size: 24, strokeWidth: 2.5 })))));
|
|
103
|
+
};
|
|
104
|
+
exports.default = ScrollToTop;
|