pixelize-design-library 2.3.1-beta.2 → 2.3.1-beta.20

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 (165) hide show
  1. package/.claude/settings.local.json +28 -1
  2. package/.cursor/TASK-SETUP.md +43 -0
  3. package/.cursor/agents/be-impl.md +37 -0
  4. package/.cursor/agents/fe-impl.md +39 -0
  5. package/.cursor/agents/task-plan.md +56 -0
  6. package/.cursor/agents/test-create.md +31 -0
  7. package/.cursor/agents/test-exec.md +26 -0
  8. package/.cursor/hooks/task-hint.env +1 -0
  9. package/.cursor/hooks/task-skill-nudge.sh +71 -0
  10. package/.cursor/hooks/task-slash-guard.sh +31 -0
  11. package/.cursor/hooks.json +13 -0
  12. package/.cursor/modules/account-management/MODULE.md +16 -0
  13. package/.cursor/modules/buttons/MODULE.md +13 -0
  14. package/.cursor/modules/cards/MODULE.md +13 -0
  15. package/.cursor/modules/charts/MODULE.md +13 -0
  16. package/.cursor/modules/common/MODULE.md +13 -0
  17. package/.cursor/modules/contact-auth/MODULE.md +13 -0
  18. package/.cursor/modules/data-display/MODULE.md +13 -0
  19. package/.cursor/modules/feedback/MODULE.md +14 -0
  20. package/.cursor/modules/form/MODULE.md +13 -0
  21. package/.cursor/modules/inputs-basic/MODULE.md +13 -0
  22. package/.cursor/modules/inputs-date-file/MODULE.md +19 -0
  23. package/.cursor/modules/inputs-select/MODULE.md +14 -0
  24. package/.cursor/modules/inputs-toggle/MODULE.md +13 -0
  25. package/.cursor/modules/kanban/MODULE.md +14 -0
  26. package/.cursor/modules/layout-navigation/MODULE.md +14 -0
  27. package/.cursor/modules/overlays/MODULE.md +13 -0
  28. package/.cursor/modules/playground/MODULE.md +15 -0
  29. package/.cursor/modules/table/MODULE.md +15 -0
  30. package/.cursor/modules/theme/MODULE.md +15 -0
  31. package/.cursor/modules/types-exports/MODULE.md +17 -0
  32. package/.cursor/modules/utility-ui/MODULE.md +15 -0
  33. package/.cursor/modules/utils-hooks/MODULE.md +13 -0
  34. package/.cursor/pixelize-task-statusline.sh +64 -0
  35. package/.cursor/plans/blocked/.gitkeep +0 -0
  36. package/.cursor/plans/current.md +35 -0
  37. package/.cursor/plans/done/.gitkeep +0 -0
  38. package/.cursor/rules +31 -0
  39. package/.cursor/skills/task/SKILL.md +167 -0
  40. package/CLAUDE.md +122 -0
  41. package/dist/Components/Accordion/Accordion.js +26 -5
  42. package/dist/Components/Card/PaymentCard/PaymentCard.d.ts +1 -1
  43. package/dist/Components/Card/PaymentCard/PaymentCard.js +3 -3
  44. package/dist/Components/Card/PaymentCard/PaymentCardProps.d.ts +1 -0
  45. package/dist/Components/CopyButton/CopyButton.d.ts +22 -0
  46. package/dist/Components/CopyButton/CopyButton.js +126 -0
  47. package/dist/Components/CustomModulesTable/CustomModulesTable.d.ts +4 -0
  48. package/dist/Components/CustomModulesTable/CustomModulesTable.js +182 -0
  49. package/dist/Components/CustomModulesTable/CustomModulesTable.test.d.ts +1 -0
  50. package/dist/Components/CustomModulesTable/CustomModulesTable.test.js +84 -0
  51. package/dist/Components/CustomModulesTable/CustomModulesTableProps.d.ts +54 -0
  52. package/dist/Components/CustomModulesTable/CustomModulesTableProps.js +2 -0
  53. package/dist/Components/CustomModulesTable/DeleteModuleModal.d.ts +4 -0
  54. package/dist/Components/CustomModulesTable/DeleteModuleModal.js +33 -0
  55. package/dist/Components/CustomModulesTable/EditModuleModal.d.ts +4 -0
  56. package/dist/Components/CustomModulesTable/EditModuleModal.js +63 -0
  57. package/dist/Components/Dropdown/DropDown.js +110 -28
  58. package/dist/Components/Dropdown/Dropdown.test.d.ts +1 -0
  59. package/dist/Components/Dropdown/Dropdown.test.js +102 -0
  60. package/dist/Components/Dropdown/DropdownProps.d.ts +4 -1
  61. package/dist/Components/EmptyState/EmptyState.d.ts +4 -0
  62. package/dist/Components/EmptyState/EmptyState.js +65 -0
  63. package/dist/Components/EmptyState/EmptyStateProps.d.ts +28 -0
  64. package/dist/Components/EmptyState/EmptyStateProps.js +2 -0
  65. package/dist/Components/FieldSelectModal/FieldSelectModal.d.ts +26 -0
  66. package/dist/Components/FieldSelectModal/FieldSelectModal.js +107 -0
  67. package/dist/Components/FilePreview/FilePreview.d.ts +6 -0
  68. package/dist/Components/FilePreview/FilePreview.js +190 -0
  69. package/dist/Components/FilePreview/FilePreviewProps.d.ts +26 -0
  70. package/dist/Components/FilePreview/FilePreviewProps.js +2 -0
  71. package/dist/Components/KanbanBoard/AccountCard.js +17 -14
  72. package/dist/Components/KanbanBoard/KanbanBoard.js +93 -78
  73. package/dist/Components/LazyWrapper/LazyWrapper.d.ts +10 -0
  74. package/dist/Components/LazyWrapper/LazyWrapper.js +50 -0
  75. package/dist/Components/MoreItems/MoreItems.d.ts +4 -0
  76. package/dist/Components/MoreItems/MoreItems.js +35 -0
  77. package/dist/Components/MoreItems/MoreItemsProps.d.ts +29 -0
  78. package/dist/Components/MoreItems/MoreItemsProps.js +2 -0
  79. package/dist/Components/NavigationBar/NavigationBar.js +4 -4
  80. package/dist/Components/OrgSwitcher/OrgSwitcher.d.ts +4 -0
  81. package/dist/Components/OrgSwitcher/OrgSwitcher.js +121 -0
  82. package/dist/Components/OrgSwitcher/OrgSwitcherProps.d.ts +41 -0
  83. package/dist/Components/OrgSwitcher/OrgSwitcherProps.js +25 -0
  84. package/dist/Components/OrganizationDetails/CreateOrgModal.d.ts +4 -0
  85. package/dist/Components/OrganizationDetails/CreateOrgModal.js +122 -0
  86. package/dist/Components/OrganizationDetails/DeleteOrgModal.d.ts +4 -0
  87. package/dist/Components/OrganizationDetails/DeleteOrgModal.js +29 -0
  88. package/dist/Components/OrganizationDetails/OrganizationDetails.d.ts +4 -0
  89. package/dist/Components/OrganizationDetails/OrganizationDetails.js +264 -0
  90. package/dist/Components/OrganizationDetails/OrganizationDetails.test.d.ts +1 -0
  91. package/dist/Components/OrganizationDetails/OrganizationDetails.test.js +122 -0
  92. package/dist/Components/OrganizationDetails/OrganizationDetailsProps.d.ts +88 -0
  93. package/dist/Components/OrganizationDetails/OrganizationDetailsProps.js +2 -0
  94. package/dist/Components/PdfViewer/PdfViewer.d.ts +15 -0
  95. package/dist/Components/PdfViewer/PdfViewer.js +29 -0
  96. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.d.ts +1 -1
  97. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +42 -24
  98. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewerProps.d.ts +2 -0
  99. package/dist/Components/RolesPermission/DeleteRoleModal.d.ts +4 -0
  100. package/dist/Components/RolesPermission/DeleteRoleModal.js +29 -0
  101. package/dist/Components/RolesPermission/RolesPermission.d.ts +4 -0
  102. package/dist/Components/RolesPermission/RolesPermission.js +243 -0
  103. package/dist/Components/RolesPermission/RolesPermission.test.d.ts +1 -0
  104. package/dist/Components/RolesPermission/RolesPermission.test.js +150 -0
  105. package/dist/Components/RolesPermission/RolesPermissionProps.d.ts +117 -0
  106. package/dist/Components/RolesPermission/RolesPermissionProps.js +2 -0
  107. package/dist/Components/ScrollToTop/ScrollToTop.d.ts +19 -0
  108. package/dist/Components/ScrollToTop/ScrollToTop.js +104 -0
  109. package/dist/Components/SearchSelect/SearchSelect.js +53 -21
  110. package/dist/Components/SideBar/components/OtherApps.test.js +3 -2
  111. package/dist/Components/SignInActivityTable/SignInActivityTable.d.ts +4 -0
  112. package/dist/Components/SignInActivityTable/SignInActivityTable.js +95 -0
  113. package/dist/Components/SignInActivityTable/SignInActivityTable.test.d.ts +1 -0
  114. package/dist/Components/SignInActivityTable/SignInActivityTable.test.js +63 -0
  115. package/dist/Components/SignInActivityTable/SignInActivityTableProps.d.ts +21 -0
  116. package/dist/Components/SignInActivityTable/SignInActivityTableProps.js +2 -0
  117. package/dist/Components/StageProgress/StageItem.d.ts +4 -0
  118. package/dist/Components/StageProgress/StageItem.js +137 -0
  119. package/dist/Components/StageProgress/StageProgress.d.ts +4 -0
  120. package/dist/Components/StageProgress/StageProgress.js +59 -0
  121. package/dist/Components/StageProgress/StageProgressProps.d.ts +85 -0
  122. package/dist/Components/StageProgress/StageProgressProps.js +27 -0
  123. package/dist/Components/StageProgress/StepperStage.d.ts +4 -0
  124. package/dist/Components/StageProgress/StepperStage.js +78 -0
  125. package/dist/Components/Table/Table.d.ts +1 -1
  126. package/dist/Components/Table/Table.js +167 -32
  127. package/dist/Components/Table/TableProps.d.ts +11 -3
  128. package/dist/Components/Table/components/Pagination.js +1 -1
  129. package/dist/Components/Table/components/TableActions.d.ts +2 -2
  130. package/dist/Components/Table/components/TableActions.js +5 -4
  131. package/dist/Components/Table/components/TableBody.js +98 -29
  132. package/dist/Components/Table/components/TableBody.virtualize.test.js +13 -3
  133. package/dist/Components/Table/components/TableHeader.d.ts +1 -1
  134. package/dist/Components/Table/components/TableHeader.js +9 -13
  135. package/dist/Components/Table/hooks/useTable.d.ts +2 -1
  136. package/dist/Components/Table/hooks/useTable.js +24 -10
  137. package/dist/Components/Table/settings/ManageColumns.test.js +1 -0
  138. package/dist/Components/Table/settings/TableSettings.d.ts +3 -2
  139. package/dist/Components/Table/settings/TableSettings.js +30 -6
  140. package/dist/Components/Timeline/Timeline.d.ts +1 -1
  141. package/dist/Components/Timeline/Timeline.js +145 -78
  142. package/dist/Components/Toaster/Toaster.js +40 -20
  143. package/dist/Components/UpgradeButton/UpgradeButton.d.ts +4 -0
  144. package/dist/Components/UpgradeButton/UpgradeButton.js +73 -0
  145. package/dist/Components/UpgradeButton/UpgradeButtonProps.d.ts +43 -0
  146. package/dist/Components/UpgradeButton/UpgradeButtonProps.js +2 -0
  147. package/dist/Components/UserDetails/AddUserModal.d.ts +4 -0
  148. package/dist/Components/UserDetails/AddUserModal.js +218 -0
  149. package/dist/Components/UserDetails/ChangeRoleModal.d.ts +4 -0
  150. package/dist/Components/UserDetails/ChangeRoleModal.js +150 -0
  151. package/dist/Components/UserDetails/DeactivateConfirmModal.d.ts +4 -0
  152. package/dist/Components/UserDetails/DeactivateConfirmModal.js +34 -0
  153. package/dist/Components/UserDetails/UserDetails.d.ts +4 -0
  154. package/dist/Components/UserDetails/UserDetails.js +263 -0
  155. package/dist/Components/UserDetails/UserDetails.test.d.ts +1 -0
  156. package/dist/Components/UserDetails/UserDetails.test.js +129 -0
  157. package/dist/Components/UserDetails/UserDetailsProps.d.ts +151 -0
  158. package/dist/Components/UserDetails/UserDetailsProps.js +2 -0
  159. package/dist/Theme/index.d.ts +4 -4
  160. package/dist/Theme/index.js +4 -4
  161. package/dist/Utils/table.d.ts +6 -1
  162. package/dist/Utils/table.js +47 -27
  163. package/dist/index.d.ts +23 -1
  164. package/dist/index.js +37 -2
  165. package/package.json +1 -1
@@ -0,0 +1,190 @@
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
36
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
37
+ return new (P || (P = Promise))(function (resolve, reject) {
38
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
39
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
40
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
41
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
42
+ });
43
+ };
44
+ var __generator = (this && this.__generator) || function (thisArg, body) {
45
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
46
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
47
+ function verb(n) { return function (v) { return step([n, v]); }; }
48
+ function step(op) {
49
+ if (f) throw new TypeError("Generator is already executing.");
50
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
51
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
52
+ if (y = 0, t) op = [op[0] & 2, t.value];
53
+ switch (op[0]) {
54
+ case 0: case 1: t = op; break;
55
+ case 4: _.label++; return { value: op[1], done: false };
56
+ case 5: _.label++; y = op[1]; op = [0]; continue;
57
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
58
+ default:
59
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
60
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
61
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
62
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
63
+ if (t[2]) _.ops.pop();
64
+ _.trys.pop(); continue;
65
+ }
66
+ op = body.call(thisArg, _);
67
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
68
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
69
+ }
70
+ };
71
+ var __importDefault = (this && this.__importDefault) || function (mod) {
72
+ return (mod && mod.__esModule) ? mod : { "default": mod };
73
+ };
74
+ Object.defineProperty(exports, "__esModule", { value: true });
75
+ exports.FilePreviewTrigger = exports.FilePreview = void 0;
76
+ var react_1 = __importStar(require("react"));
77
+ var react_2 = require("@chakra-ui/react");
78
+ var framer_motion_1 = require("framer-motion");
79
+ var lucide_react_1 = require("lucide-react");
80
+ var useCustomTheme_1 = require("../../Theme/useCustomTheme");
81
+ var ToolTip_1 = __importDefault(require("../ToolTip/ToolTip"));
82
+ var MotionContent = (0, framer_motion_1.motion)(react_2.ModalContent);
83
+ var inferKind = function (url, fileName) {
84
+ var src = (fileName || url).split("?")[0].toLowerCase();
85
+ if (/\.(png|jpe?g|gif|webp|svg|bmp|avif)$/.test(src))
86
+ return "image";
87
+ if (/\.pdf$/.test(src))
88
+ return "pdf";
89
+ if (/\.(mp4|webm|ogg|mov)$/.test(src))
90
+ return "video";
91
+ return "other";
92
+ };
93
+ var downloadFile = function (fileUrl, fileName) { return __awaiter(void 0, void 0, void 0, function () {
94
+ var res, blob, url, link, _a;
95
+ return __generator(this, function (_b) {
96
+ switch (_b.label) {
97
+ case 0:
98
+ _b.trys.push([0, 3, , 4]);
99
+ return [4 /*yield*/, fetch(fileUrl)];
100
+ case 1:
101
+ res = _b.sent();
102
+ return [4 /*yield*/, res.blob()];
103
+ case 2:
104
+ blob = _b.sent();
105
+ url = window.URL.createObjectURL(blob);
106
+ link = document.createElement("a");
107
+ link.href = url;
108
+ link.download = fileName || "file";
109
+ document.body.appendChild(link);
110
+ link.click();
111
+ document.body.removeChild(link);
112
+ window.URL.revokeObjectURL(url);
113
+ return [3 /*break*/, 4];
114
+ case 3:
115
+ _a = _b.sent();
116
+ window.open(fileUrl, "_blank", "noopener,noreferrer");
117
+ return [3 /*break*/, 4];
118
+ case 4: return [2 /*return*/];
119
+ }
120
+ });
121
+ }); };
122
+ var FilePreview = function (_a) {
123
+ var _b, _c, _d, _e, _f;
124
+ var isOpen = _a.isOpen, onClose = _a.onClose, fileUrl = _a.fileUrl, fileName = _a.fileName, fileType = _a.fileType, _g = _a.hideDownload, hideDownload = _g === void 0 ? false : _g, _h = _a.size, size = _h === void 0 ? "xl" : _h;
125
+ var theme = (0, useCustomTheme_1.useCustomTheme)();
126
+ var _j = (0, react_1.useState)(1), zoom = _j[0], setZoom = _j[1];
127
+ var _k = (0, react_1.useState)(0), rotation = _k[0], setRotation = _k[1];
128
+ var kind = fileType || inferKind(fileUrl, fileName);
129
+ var reset = function () {
130
+ setZoom(1);
131
+ setRotation(0);
132
+ };
133
+ var handleClose = function () {
134
+ reset();
135
+ onClose();
136
+ };
137
+ var renderBody = function () {
138
+ var _a, _b, _c, _d;
139
+ if (kind === "image") {
140
+ return (react_1.default.createElement(react_2.Flex, { justify: "center", align: "center", minH: "200px", overflow: "hidden" },
141
+ react_1.default.createElement(react_2.Image, { src: fileUrl, alt: fileName || "preview", maxW: "100%", transform: "scale(".concat(zoom, ") rotate(").concat(rotation, "deg)"), transition: "transform 0.2s ease", objectFit: "contain" })));
142
+ }
143
+ if (kind === "pdf") {
144
+ return (react_1.default.createElement(react_2.Box, { as: "embed", src: fileUrl, type: "application/pdf", width: "100%", height: "70vh", borderRadius: "8px" }));
145
+ }
146
+ if (kind === "video") {
147
+ return (react_1.default.createElement(react_2.Box, { as: "video", src: fileUrl, controls: true, width: "100%", borderRadius: "8px" }));
148
+ }
149
+ return (react_1.default.createElement(react_2.Flex, { direction: "column", align: "center", justify: "center", py: 12, gap: 3 },
150
+ react_1.default.createElement(lucide_react_1.FileQuestion, { size: 48, color: (_b = (_a = theme.colors.gray) === null || _a === void 0 ? void 0 : _a[400]) !== null && _b !== void 0 ? _b : "#A0AEC0" }),
151
+ react_1.default.createElement(react_2.Text, { color: (_d = (_c = theme.colors.gray) === null || _c === void 0 ? void 0 : _c[600]) !== null && _d !== void 0 ? _d : "#4A5568", fontSize: "sm" }, "Preview isn't available for this file type."),
152
+ !hideDownload && (react_1.default.createElement(react_2.Flex, { as: "button", align: "center", gap: 2, px: 4, py: 2, borderRadius: "8px", bg: theme.colors.primary[500], color: theme.colors.white, fontSize: "sm", fontWeight: 500, onClick: function () { return downloadFile(fileUrl, fileName); } },
153
+ react_1.default.createElement(lucide_react_1.Download, { size: 16 }),
154
+ " Download file"))));
155
+ };
156
+ return (react_1.default.createElement(react_2.Modal, { isOpen: isOpen, onClose: handleClose, size: size, isCentered: true },
157
+ react_1.default.createElement(react_2.ModalOverlay, { bg: "blackAlpha.600", backdropFilter: "blur(4px)" }),
158
+ react_1.default.createElement(MotionContent, { borderRadius: "16px", overflow: "hidden", initial: { opacity: 0, scale: 0.96, y: 8 }, animate: { opacity: 1, scale: 1, y: 0 }, transition: { duration: 0.2, ease: "easeOut" } },
159
+ react_1.default.createElement(react_2.Flex, { align: "center", justify: "space-between", px: 4, py: 3, borderBottom: "1px solid", borderColor: (_c = (_b = theme.colors.gray) === null || _b === void 0 ? void 0 : _b[100]) !== null && _c !== void 0 ? _c : "#EDF2F7" },
160
+ react_1.default.createElement(ToolTip_1.default, { label: fileName || "File", placement: "bottom" },
161
+ react_1.default.createElement(react_2.Text, { fontSize: "sm", fontWeight: 600, maxW: "60%", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }, fileName || "Preview")),
162
+ react_1.default.createElement(react_2.Flex, { align: "center", gap: 1 },
163
+ kind === "image" && (react_1.default.createElement(react_1.default.Fragment, null,
164
+ react_1.default.createElement(ToolTip_1.default, { label: "Zoom out", placement: "bottom" },
165
+ react_1.default.createElement(react_2.IconButton, { "aria-label": "Zoom out", size: "sm", variant: "ghost", icon: react_1.default.createElement(lucide_react_1.Minus, { size: 16 }), onClick: function () { return setZoom(function (z) { return Math.max(0.25, z - 0.25); }); } })),
166
+ react_1.default.createElement(ToolTip_1.default, { label: "Zoom in", placement: "bottom" },
167
+ react_1.default.createElement(react_2.IconButton, { "aria-label": "Zoom in", size: "sm", variant: "ghost", icon: react_1.default.createElement(lucide_react_1.Plus, { size: 16 }), onClick: function () { return setZoom(function (z) { return Math.min(4, z + 0.25); }); } })),
168
+ react_1.default.createElement(ToolTip_1.default, { label: "Rotate", placement: "bottom" },
169
+ react_1.default.createElement(react_2.IconButton, { "aria-label": "Rotate", size: "sm", variant: "ghost", icon: react_1.default.createElement(lucide_react_1.RotateCw, { size: 16 }), onClick: function () { return setRotation(function (r) { return (r + 90) % 360; }); } })))),
170
+ !hideDownload && (react_1.default.createElement(ToolTip_1.default, { label: "Download", placement: "bottom" },
171
+ react_1.default.createElement(react_2.IconButton, { "aria-label": "Download", size: "sm", variant: "ghost", color: (_f = (_e = (_d = theme.colors.semantic) === null || _d === void 0 ? void 0 : _d.success) === null || _e === void 0 ? void 0 : _e[500]) !== null && _f !== void 0 ? _f : "#16A34A", icon: react_1.default.createElement(lucide_react_1.Download, { size: 18 }), onClick: function () { return downloadFile(fileUrl, fileName); } }))),
172
+ react_1.default.createElement(react_2.ModalCloseButton, { position: "static" }))),
173
+ react_1.default.createElement(react_2.ModalBody, { p: 5 }, renderBody()))));
174
+ };
175
+ exports.FilePreview = FilePreview;
176
+ /** Thumbnail with a hover "preview" affordance that opens {@link FilePreview}. */
177
+ var FilePreviewTrigger = function (_a) {
178
+ var fileUrl = _a.fileUrl, fileName = _a.fileName, fileType = _a.fileType, _b = _a.thumbWidth, thumbWidth = _b === void 0 ? "100px" : _b, _c = _a.thumbHeight, thumbHeight = _c === void 0 ? "60px" : _c, _d = _a.hideDownload, hideDownload = _d === void 0 ? false : _d;
179
+ var _e = (0, react_2.useDisclosure)(), isOpen = _e.isOpen, onOpen = _e.onOpen, onClose = _e.onClose;
180
+ var kind = fileType || inferKind(fileUrl, fileName);
181
+ return (react_1.default.createElement(react_1.default.Fragment, null,
182
+ react_1.default.createElement(react_2.Box, { position: "relative", display: "inline-flex", alignItems: "center", justifyContent: "center", role: "group", maxW: thumbWidth, minW: "40px", minH: thumbHeight, borderRadius: "8px", overflow: "hidden", cursor: "pointer", onClick: onOpen },
183
+ kind === "image" ? (react_1.default.createElement(react_2.Image, { src: fileUrl, alt: fileName || "file", maxH: thumbHeight, maxW: thumbWidth, objectFit: "contain", borderRadius: "8px" })) : (react_1.default.createElement(react_2.Flex, { align: "center", justify: "center", boxSize: thumbHeight, bg: "gray.100", borderRadius: "8px" },
184
+ react_1.default.createElement(lucide_react_1.Eye, { size: 18 }))),
185
+ react_1.default.createElement(react_2.Flex, { position: "absolute", inset: 0, align: "center", justify: "center", bg: "blackAlpha.500", color: "white", opacity: 0, transition: "opacity 0.15s ease", _groupHover: { opacity: 1 } },
186
+ react_1.default.createElement(lucide_react_1.Eye, { size: 18 }))),
187
+ react_1.default.createElement(exports.FilePreview, { isOpen: isOpen, onClose: onClose, fileUrl: fileUrl, fileName: fileName, fileType: fileType, hideDownload: hideDownload })));
188
+ };
189
+ exports.FilePreviewTrigger = FilePreviewTrigger;
190
+ exports.default = exports.FilePreview;
@@ -0,0 +1,26 @@
1
+ export type FilePreviewKind = "image" | "pdf" | "video" | "other";
2
+ export interface FilePreviewProps {
3
+ isOpen: boolean;
4
+ onClose: () => void;
5
+ /** URL of the file to preview. */
6
+ fileUrl: string;
7
+ /** Display name (also used as the download filename). */
8
+ fileName?: string;
9
+ /** Force a renderer. When omitted it is inferred from the file extension. */
10
+ fileType?: FilePreviewKind;
11
+ /** Hide the download action. */
12
+ hideDownload?: boolean;
13
+ /** Modal size. */
14
+ size?: "md" | "lg" | "xl" | "2xl" | "full";
15
+ }
16
+ export interface FilePreviewTriggerProps {
17
+ /** URL of the file. */
18
+ fileUrl: string;
19
+ fileName?: string;
20
+ fileType?: FilePreviewKind;
21
+ /** Thumbnail max width. */
22
+ thumbWidth?: string;
23
+ /** Thumbnail max height. */
24
+ thumbHeight?: string;
25
+ hideDownload?: boolean;
26
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -43,32 +43,35 @@ var useCustomTheme_1 = require("../../Theme/useCustomTheme");
43
43
  var AccountRow_1 = __importDefault(require("./AccountRow"));
44
44
  var excludeKeys = ["id", "details"];
45
45
  var AccountCard = react_1.default.memo(function (_a) {
46
- var _b, _c, _d, _e, _f, _g, _h;
47
- var account = _a.account, onDelete = _a.onDelete, onOpen = _a.onOpen, _j = _a.isExpanded, isExpanded = _j === void 0 ? false : _j, onToggleExpand = _a.onToggleExpand, _k = _a.isDeletable, isDeletable = _k === void 0 ? true : _k;
46
+ var _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
47
+ var account = _a.account, onDelete = _a.onDelete, onOpen = _a.onOpen, _s = _a.isExpanded, isExpanded = _s === void 0 ? false : _s, onToggleExpand = _a.onToggleExpand, _t = _a.isDeletable, isDeletable = _t === void 0 ? true : _t;
48
48
  var colors = (0, useCustomTheme_1.useCustomTheme)().colors;
49
49
  var keys = (0, react_1.useMemo)(function () { return Object.keys(account).filter(function (key) { return typeof account[key] === "string" && !excludeKeys.includes(key); }); }, [account]);
50
50
  var visibleKeys = isExpanded ? keys : keys.slice(0, 4);
51
51
  var handleToggle = function () {
52
52
  onToggleExpand === null || onToggleExpand === void 0 ? void 0 : onToggleExpand();
53
53
  };
54
- return (react_1.default.createElement(react_2.Box, { width: "100%", borderRadius: "0.25rem", borderWidth: "0.063rem", background: (_b = colors === null || colors === void 0 ? void 0 : colors.background) === null || _b === void 0 ? void 0 : _b[200], border: "0.1rem solid ".concat((_c = colors.gray) === null || _c === void 0 ? void 0 : _c[200]), p: 2, boxSizing: "border-box", minHeight: isExpanded ? "180px" : "80px", transition: "border-color 0.15s ease", _hover: {
55
- borderColor: (_d = colors === null || colors === void 0 ? void 0 : colors.primary) === null || _d === void 0 ? void 0 : _d[200],
54
+ return (react_1.default.createElement(react_2.Box, { role: "group", width: "100%", borderRadius: "0.625rem", background: (_b = colors === null || colors === void 0 ? void 0 : colors.white) !== null && _b !== void 0 ? _b : "#fff", border: "0.063rem solid ".concat((_d = (_c = colors === null || colors === void 0 ? void 0 : colors.boxborder) === null || _c === void 0 ? void 0 : _c[200]) !== null && _d !== void 0 ? _d : (_e = colors.gray) === null || _e === void 0 ? void 0 : _e[200]), boxShadow: "0 0.063rem 0.125rem rgba(0,0,0,0.04)", p: 3, boxSizing: "border-box", minHeight: isExpanded ? "180px" : "80px", transition: "border-color 0.15s ease, box-shadow 0.15s ease, transform 0.15s ease", _hover: {
55
+ borderColor: (_f = colors === null || colors === void 0 ? void 0 : colors.primary) === null || _f === void 0 ? void 0 : _f[300],
56
+ boxShadow: "0 0.25rem 0.75rem rgba(0,0,0,0.08)",
57
+ transform: "translateY(-0.063rem)",
56
58
  } },
57
- react_1.default.createElement(react_2.VStack, { align: "start", spacing: 0.5, fontSize: "0.875rem", color: (_e = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _e === void 0 ? void 0 : _e[700] },
59
+ react_1.default.createElement(react_2.VStack, { align: "stretch", spacing: 1, fontSize: "0.875rem", color: (_g = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _g === void 0 ? void 0 : _g[700] },
58
60
  visibleKeys.map(function (key) { return (react_1.default.createElement(AccountRow_1.default, { key: key, label: key.replace(/\b\w/g, function (c) { return c.toUpperCase(); }), value: account[key] })); }),
59
61
  react_1.default.createElement(react_2.Collapse, { in: isExpanded && account.details !== undefined, animateOpacity: true },
60
- react_1.default.createElement(react_2.Text, { pt: 2 }, account.details)),
62
+ react_1.default.createElement(react_2.Text, { pt: 2, fontSize: "0.8125rem", color: (_h = colors === null || colors === void 0 ? void 0 : colors.text) === null || _h === void 0 ? void 0 : _h[600] }, account.details)),
61
63
  react_1.default.createElement(react_2.Flex, { justify: "space-between", w: "full", pt: 2, alignItems: "center" },
62
- keys.length > 4 && (react_1.default.createElement(react_2.Text, { color: (_f = colors === null || colors === void 0 ? void 0 : colors.primary) === null || _f === void 0 ? void 0 : _f[500], fontSize: "sm", fontWeight: "medium", cursor: "pointer", onClick: handleToggle, display: "flex", alignItems: "center", gap: 2 },
64
+ keys.length > 4 ? (react_1.default.createElement(react_2.Text, { color: (_j = colors === null || colors === void 0 ? void 0 : colors.primary) === null || _j === void 0 ? void 0 : _j[600], fontSize: "0.75rem", fontWeight: 600, cursor: "pointer", onClick: handleToggle, display: "flex", alignItems: "center", gap: 1, _hover: { color: (_k = colors === null || colors === void 0 ? void 0 : colors.primary) === null || _k === void 0 ? void 0 : _k[700] } },
63
65
  "Show ",
64
66
  isExpanded ? "less" : "more",
65
67
  " ",
66
- isExpanded ? react_1.default.createElement(lucide_react_1.ChevronUp, { size: 14 }) : react_1.default.createElement(lucide_react_1.ChevronDown, { size: 14 }))),
67
- react_1.default.createElement(react_2.Spacer, null),
68
- react_1.default.createElement(react_2.HStack, { spacing: 2 },
69
- isDeletable && (react_1.default.createElement(react_2.Tooltip, { label: "Delete" },
70
- react_1.default.createElement(lucide_react_1.Trash2, { size: 16, color: (_g = colors === null || colors === void 0 ? void 0 : colors.red) === null || _g === void 0 ? void 0 : _g[600], onClick: function () { return onDelete === null || onDelete === void 0 ? void 0 : onDelete(account); }, cursor: "pointer", "aria-label": "Delete" }))),
71
- react_1.default.createElement(react_2.Tooltip, { label: "Open" },
72
- react_1.default.createElement(lucide_react_1.ExternalLink, { size: 16, color: (_h = colors === null || colors === void 0 ? void 0 : colors.blue) === null || _h === void 0 ? void 0 : _h[600], onClick: function () { return onOpen === null || onOpen === void 0 ? void 0 : onOpen(account); }, cursor: "pointer", "aria-label": "Open" })))))));
68
+ isExpanded ? react_1.default.createElement(lucide_react_1.ChevronUp, { size: 13 }) : react_1.default.createElement(lucide_react_1.ChevronDown, { size: 13 }))) : (react_1.default.createElement(react_2.Spacer, null)),
69
+ react_1.default.createElement(react_2.HStack, { spacing: 1, opacity: 0, transition: "opacity 0.15s ease", _groupHover: { opacity: 1 } },
70
+ isDeletable && (react_1.default.createElement(react_2.Tooltip, { label: "Delete", hasArrow: true },
71
+ react_1.default.createElement(react_2.Flex, { align: "center", justify: "center", boxSize: "1.625rem", borderRadius: "0.375rem", cursor: "pointer", color: (_l = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _l === void 0 ? void 0 : _l[500], transition: "background 0.15s ease, color 0.15s ease", _hover: { bg: (_m = colors === null || colors === void 0 ? void 0 : colors.red) === null || _m === void 0 ? void 0 : _m[50], color: (_o = colors === null || colors === void 0 ? void 0 : colors.red) === null || _o === void 0 ? void 0 : _o[600] }, onClick: function () { return onDelete === null || onDelete === void 0 ? void 0 : onDelete(account); }, "aria-label": "Delete" },
72
+ react_1.default.createElement(lucide_react_1.Trash2, { size: 15 })))),
73
+ react_1.default.createElement(react_2.Tooltip, { label: "Open", hasArrow: true },
74
+ react_1.default.createElement(react_2.Flex, { align: "center", justify: "center", boxSize: "1.625rem", borderRadius: "0.375rem", cursor: "pointer", color: (_p = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _p === void 0 ? void 0 : _p[500], transition: "background 0.15s ease, color 0.15s ease", _hover: { bg: (_q = colors === null || colors === void 0 ? void 0 : colors.primary) === null || _q === void 0 ? void 0 : _q[50], color: (_r = colors === null || colors === void 0 ? void 0 : colors.primary) === null || _r === void 0 ? void 0 : _r[600] }, onClick: function () { return onOpen === null || onOpen === void 0 ? void 0 : onOpen(account); }, "aria-label": "Open" },
75
+ react_1.default.createElement(lucide_react_1.ExternalLink, { size: 15 }))))))));
73
76
  });
74
77
  exports.default = AccountCard;
@@ -71,6 +71,9 @@ var Button_1 = __importDefault(require("../Button/Button"));
71
71
  /** Narrow rail width when a column is horizontally collapsed. */
72
72
  var COLLAPSED_KANBAN_COLUMN_WIDTH = "2.75rem";
73
73
  var KANBAN_CARD_GAP = 12;
74
+ // Top buffer above the first card so its border + hover lift aren't clipped by the
75
+ // scroll/virtualized list's top edge.
76
+ var KANBAN_LIST_TOP_PAD = 6;
74
77
  var KanbanRow = react_1.default.memo(function (_a) {
75
78
  var index = _a.index, style = _a.style, data = _a.data;
76
79
  var items = data.items, colId = data.colId, canDrag = data.canDrag, expanded = data.expanded, onDelete = data.onDelete, onOpen = data.onOpen, canDelete = data.canDelete, setSize = data.setSize, toggleExpand = data.toggleExpand;
@@ -79,7 +82,7 @@ var KanbanRow = react_1.default.memo(function (_a) {
79
82
  return react_1.default.createElement("div", { style: style });
80
83
  }
81
84
  return (react_1.default.createElement("div", { style: style },
82
- react_1.default.createElement("div", { style: { paddingBottom: KANBAN_CARD_GAP } },
85
+ react_1.default.createElement("div", { style: { paddingBottom: KANBAN_CARD_GAP, paddingTop: index === 0 ? KANBAN_LIST_TOP_PAD : 0 } },
83
86
  react_1.default.createElement(MeasuredItem_1.default, { index: index, setSize: function (i, h) { return setSize(i, h, colId); } },
84
87
  react_1.default.createElement(dnd_1.Draggable, { draggableId: account.id.toString(), index: index, key: account.id, isDragDisabled: !canDrag }, function (provided) {
85
88
  var _a;
@@ -259,13 +262,14 @@ var KanbanBoard = function (_a) {
259
262
  return prev;
260
263
  return __assign(__assign({}, prev), (_a = {}, _a[key] = size, _a));
261
264
  });
265
+ // Only recompute from the row that changed downward (cheaper than resetting all).
262
266
  if (listRefs.current[colId]) {
263
- listRefs.current[colId].resetAfterIndex(0);
267
+ listRefs.current[colId].resetAfterIndex(index);
264
268
  }
265
269
  }, []);
266
270
  var getItemSize = (0, react_1.useCallback)(function (index, _items, colId) {
267
271
  var key = "".concat(colId, "-").concat(index);
268
- return (sizes[key] || DEFAULT_ITEM_HEIGHT) + KANBAN_CARD_GAP;
272
+ return (sizes[key] || DEFAULT_ITEM_HEIGHT) + KANBAN_CARD_GAP + (index === 0 ? KANBAN_LIST_TOP_PAD : 0);
269
273
  }, [sizes]);
270
274
  // Calculate container height
271
275
  (0, react_1.useEffect)(function () {
@@ -281,8 +285,9 @@ var KanbanBoard = function (_a) {
281
285
  window.removeEventListener("resize", calculateDimensions);
282
286
  };
283
287
  }, [isBoardLoading]);
284
- // toggle expand/collapse
285
- var toggleExpand = function (id, colId, index) {
288
+ // toggle expand/collapse — memoized so it doesn't bust `rowBaseProps`/itemData
289
+ // every render (which would re-render every virtualized row).
290
+ var toggleExpand = (0, react_1.useCallback)(function (id, colId, index) {
286
291
  setExpanded(function (prev) {
287
292
  var _a;
288
293
  var newExpanded = __assign(__assign({}, prev), (_a = {}, _a[id] = !prev[id], _a));
@@ -291,9 +296,9 @@ var KanbanBoard = function (_a) {
291
296
  }
292
297
  return newExpanded;
293
298
  });
294
- };
299
+ }, []);
295
300
  // drag handler
296
- var onDragEnd = function (result) {
301
+ var onDragEnd = (0, react_1.useCallback)(function (result) {
297
302
  var _a, _b;
298
303
  var source = result.source, destination = result.destination, type = result.type;
299
304
  if (!destination)
@@ -344,12 +349,12 @@ var KanbanBoard = function (_a) {
344
349
  toIndex: destination.index,
345
350
  });
346
351
  }
347
- };
348
- var handleColumnDelete = function (colId) {
352
+ }, [columns, onDrag, onColumnReorder]);
353
+ var handleColumnDelete = (0, react_1.useCallback)(function (colId) {
349
354
  var _a, _b;
350
355
  var columnIds = ((_b = (_a = columns[colId]) === null || _a === void 0 ? void 0 : _a.items) === null || _b === void 0 ? void 0 : _b.map(function (item) { return item.id; })) || [];
351
356
  onColumnDelete === null || onColumnDelete === void 0 ? void 0 : onColumnDelete(columnIds);
352
- };
357
+ }, [columns, onColumnDelete]);
353
358
  var rowBaseProps = (0, react_1.useMemo)(function () { return ({
354
359
  canDrag: canDrag,
355
360
  expanded: expanded,
@@ -359,6 +364,16 @@ var KanbanBoard = function (_a) {
359
364
  setSize: setSize,
360
365
  toggleExpand: toggleExpand,
361
366
  }); }, [canDrag, expanded, onDelete, onOpen, canDelete, setSize, toggleExpand]);
367
+ // Stable per-column itemData so unrelated board re-renders (e.g. column hover)
368
+ // don't change the reference react-window hands to every row → no row re-renders.
369
+ var itemDataByCol = (0, react_1.useMemo)(function () {
370
+ var map = {};
371
+ for (var _i = 0, _a = Object.entries(columns); _i < _a.length; _i++) {
372
+ var _b = _a[_i], colId = _b[0], column = _b[1];
373
+ map[colId] = __assign(__assign({}, rowBaseProps), { items: column.items, colId: colId });
374
+ }
375
+ return map;
376
+ }, [columns, rowBaseProps]);
362
377
  var renderColumnDroppable = function (colId, column, columnDragHandleProps, isColCollapsed) { return (react_1.default.createElement(dnd_1.Droppable, { droppableId: colId, key: colId, mode: virtualization ? "virtual" : "standard", renderClone: function (provided, _snapshot, rubric) {
363
378
  var _a;
364
379
  var item = column.items[rubric.source.index];
@@ -366,89 +381,89 @@ var KanbanBoard = function (_a) {
366
381
  return toggleExpand(item.id, colId, rubric.source.index);
367
382
  }, isDeletable: canDelete }))));
368
383
  } }, function (provided, snapshot) {
369
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7;
370
- return (react_1.default.createElement(react_2.Box, __assign({ ref: provided.innerRef }, provided.droppableProps, { width: isColCollapsed ? COLLAPSED_KANBAN_COLUMN_WIDTH : columnWidth, borderRadius: "0.5rem", borderWidth: "0.063rem", background: snapshot.isDraggingOver
384
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10;
385
+ return (react_1.default.createElement(react_2.Box, __assign({ ref: provided.innerRef }, provided.droppableProps, { width: isColCollapsed ? COLLAPSED_KANBAN_COLUMN_WIDTH : columnWidth, borderRadius: "0.75rem", background: snapshot.isDraggingOver
371
386
  ? (_a = colors === null || colors === void 0 ? void 0 : colors.primary) === null || _a === void 0 ? void 0 : _a[50]
372
- : (_b = colors === null || colors === void 0 ? void 0 : colors.background) === null || _b === void 0 ? void 0 : _b[100], border: "".concat(snapshot.isDraggingOver
373
- ? "0.5px dashed " + ((_c = colors === null || colors === void 0 ? void 0 : colors.primary) === null || _c === void 0 ? void 0 : _c[300])
374
- : "0.125rem solid " + ((_d = colors.gray) === null || _d === void 0 ? void 0 : _d[200])), display: "flex", flexDirection: "column", flexShrink: 0, overflow: isColCollapsed ? "visible" : "hidden", height: "".concat(containerHeight - 60, "px"), transition: "width 0.2s ease", onMouseEnter: function () { return setHoveredColumn(colId); }, onMouseLeave: function () { return setHoveredColumn(null); } }),
387
+ : (_b = colors === null || colors === void 0 ? void 0 : colors.background) === null || _b === void 0 ? void 0 : _b[100], border: "0.063rem ".concat(snapshot.isDraggingOver ? "dashed" : "solid", " ").concat(snapshot.isDraggingOver
388
+ ? (_c = colors === null || colors === void 0 ? void 0 : colors.primary) === null || _c === void 0 ? void 0 : _c[300]
389
+ : (_e = (_d = colors === null || colors === void 0 ? void 0 : colors.boxborder) === null || _d === void 0 ? void 0 : _d[200]) !== null && _e !== void 0 ? _e : (_f = colors.gray) === null || _f === void 0 ? void 0 : _f[200]), transition: "background 0.15s ease, border-color 0.15s ease, width 0.2s ease", display: "flex", flexDirection: "column", flexShrink: 0, overflow: isColCollapsed ? "visible" : "hidden", height: "".concat(containerHeight - 60, "px"), onMouseEnter: function () { return setHoveredColumn(colId); }, onMouseLeave: function () { return setHoveredColumn(null); } }),
375
390
  isColCollapsed ? (react_1.default.createElement(react_2.Flex, { direction: "column", align: "stretch", flex: "1", width: "100%", minH: 0, overflow: "visible", position: "relative" },
376
- react_1.default.createElement(react_2.Flex, { as: "header", direction: "column", align: "center", flexShrink: 0, width: "100%", py: 3, px: 1, gap: 3, borderTop: "0.25rem solid", borderTopColor: (_e = column.color) !== null && _e !== void 0 ? _e : (_f = colors === null || colors === void 0 ? void 0 : colors.primary) === null || _f === void 0 ? void 0 : _f[500], bg: (_g = colors === null || colors === void 0 ? void 0 : colors.background) === null || _g === void 0 ? void 0 : _g[100], position: "relative", zIndex: 1 },
391
+ react_1.default.createElement(react_2.Flex, { as: "header", direction: "column", align: "center", flexShrink: 0, width: "100%", py: 3, px: 1, gap: 3, borderTop: "0.25rem solid", borderTopColor: (_g = column.color) !== null && _g !== void 0 ? _g : (_h = colors === null || colors === void 0 ? void 0 : colors.primary) === null || _h === void 0 ? void 0 : _h[500], bg: (_j = colors === null || colors === void 0 ? void 0 : colors.background) === null || _j === void 0 ? void 0 : _j[100], position: "relative", zIndex: 1 },
377
392
  enableColumnReorder && columnDragHandleProps ? (react_1.default.createElement(react_2.Flex, __assign({ align: "center", justify: "center", flexShrink: 0, cursor: "grab" }, columnDragHandleProps),
378
- react_1.default.createElement(react_2.Box, { as: lucide_react_1.GripVertical, size: 14, color: (_h = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _h === void 0 ? void 0 : _h[400] }))) : null,
379
- enableColumnCollapse && (react_1.default.createElement(react_2.Flex, { flexShrink: 0, w: "100%", justify: "center", bg: (_j = colors === null || colors === void 0 ? void 0 : colors.background) === null || _j === void 0 ? void 0 : _j[100], position: "relative", zIndex: 3 },
393
+ react_1.default.createElement(react_2.Box, { as: lucide_react_1.GripVertical, size: 14, color: (_k = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _k === void 0 ? void 0 : _k[400] }))) : null,
394
+ enableColumnCollapse && (react_1.default.createElement(react_2.Flex, { flexShrink: 0, w: "100%", justify: "center", bg: (_l = colors === null || colors === void 0 ? void 0 : colors.background) === null || _l === void 0 ? void 0 : _l[100], position: "relative", zIndex: 3 },
380
395
  react_1.default.createElement(react_2.IconButton, { "aria-label": "Expand column", icon: react_1.default.createElement(lucide_react_1.ChevronRight, { size: 14 }), variant: "ghost", size: "xs", minW: "1.5rem", h: "1.75rem", onClick: function () { return toggleColumnCollapsed(colId); } }))),
381
- react_1.default.createElement(react_2.Text, { as: "span", fontWeight: "700", fontSize: "0.75rem", color: (_k = colors === null || colors === void 0 ? void 0 : colors.text) === null || _k === void 0 ? void 0 : _k[700], sx: {
396
+ react_1.default.createElement(react_2.Text, { as: "span", fontWeight: "700", fontSize: "0.75rem", color: (_m = colors === null || colors === void 0 ? void 0 : colors.text) === null || _m === void 0 ? void 0 : _m[700], sx: {
382
397
  writingMode: "vertical-rl",
383
398
  textOrientation: "mixed",
384
399
  }, maxH: "".concat(Math.max(120, containerHeight - 200), "px"), overflow: "hidden", lineHeight: "1.2", title: column.title }, column.title),
385
- react_1.default.createElement(react_2.Badge, { minW: "1.25rem", h: "1.25rem", borderRadius: "999px", border: "1px solid", borderColor: (_l = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _l === void 0 ? void 0 : _l[300], display: "flex", backgroundColor: (_m = colors === null || colors === void 0 ? void 0 : colors.background) === null || _m === void 0 ? void 0 : _m[100], alignItems: "center", justifyContent: "center", color: (_o = colors === null || colors === void 0 ? void 0 : colors.text) === null || _o === void 0 ? void 0 : _o[900], fontWeight: 600, fontSize: "10px" }, (_p = column === null || column === void 0 ? void 0 : column.items) === null || _p === void 0 ? void 0 : _p.length)),
386
- column.customNode ? (react_1.default.createElement(react_2.Box, { flexShrink: 0, minH: COLLAPSED_CUSTOM_NODE_TOP_RESERVE, w: "100%", bg: (_q = colors === null || colors === void 0 ? void 0 : colors.background) === null || _q === void 0 ? void 0 : _q[100], "aria-hidden": true })) : null,
387
- column.customNode ? (react_1.default.createElement(react_2.Box, { as: "section", "aria-label": "Column summary", flex: "1", minH: 0, w: "100%", overflow: "visible", py: 2, display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "flex-start", bg: (_r = colors === null || colors === void 0 ? void 0 : colors.background) === null || _r === void 0 ? void 0 : _r[100], position: "relative", zIndex: 2 },
400
+ react_1.default.createElement(react_2.Badge, { minW: "1.25rem", h: "1.25rem", borderRadius: "999px", border: "1px solid", borderColor: (_o = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _o === void 0 ? void 0 : _o[300], display: "flex", backgroundColor: (_p = colors === null || colors === void 0 ? void 0 : colors.background) === null || _p === void 0 ? void 0 : _p[100], alignItems: "center", justifyContent: "center", color: (_q = colors === null || colors === void 0 ? void 0 : colors.text) === null || _q === void 0 ? void 0 : _q[900], fontWeight: 600, fontSize: "10px" }, (_r = column === null || column === void 0 ? void 0 : column.items) === null || _r === void 0 ? void 0 : _r.length)),
401
+ column.customNode ? (react_1.default.createElement(react_2.Box, { flexShrink: 0, minH: COLLAPSED_CUSTOM_NODE_TOP_RESERVE, w: "100%", bg: (_s = colors === null || colors === void 0 ? void 0 : colors.background) === null || _s === void 0 ? void 0 : _s[100], "aria-hidden": true })) : null,
402
+ column.customNode ? (react_1.default.createElement(react_2.Box, { as: "section", "aria-label": "Column summary", flex: "1", minH: 0, w: "100%", overflow: "visible", py: 2, display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "flex-start", bg: (_t = colors === null || colors === void 0 ? void 0 : colors.background) === null || _t === void 0 ? void 0 : _t[100], position: "relative", zIndex: 2 },
388
403
  react_1.default.createElement(react_2.Box, { position: "relative", transform: "rotate(90deg)", transformOrigin: "center center", marginTop: '1rem' },
389
- react_1.default.createElement(react_2.VStack, { align: "stretch", spacing: 1, minW: "max-content", fontSize: "xs", color: (_s = colors === null || colors === void 0 ? void 0 : colors.text) === null || _s === void 0 ? void 0 : _s[600] }, column.customNode())))) : (react_1.default.createElement(react_2.Box, { flex: "1", minH: 0 })))) : (react_1.default.createElement(react_2.Flex, { width: "95%", h: !isColCollapsed && !!((_t = column.customNode) === null || _t === void 0 ? void 0 : _t.call(column)) ? "auto" : "2.75rem", borderRadius: "0.25rem", borderLeft: "0.188rem solid", borderLeftColor: (_u = column.color) !== null && _u !== void 0 ? _u : (_v = colors === null || colors === void 0 ? void 0 : colors.primary) === null || _v === void 0 ? void 0 : _v[500], background: (_w = colors === null || colors === void 0 ? void 0 : colors.background) === null || _w === void 0 ? void 0 : _w[300], align: "center", px: 2, m: 2, flexShrink: 0, justifyContent: "space-between", position: "relative", gap: 2 },
390
- react_1.default.createElement(react_2.Box, { display: "flex", alignItems: "center", gap: 2 },
391
- enableColumnReorder && columnDragHandleProps ? (react_1.default.createElement(react_2.Flex, __assign({ align: "center", justify: "center", flexShrink: 0, cursor: "grab" }, columnDragHandleProps),
392
- react_1.default.createElement(react_2.Box, { as: lucide_react_1.GripVertical, size: 14, color: (_x = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _x === void 0 ? void 0 : _x[400] }))) : null,
393
- react_1.default.createElement(react_2.Flex, { direction: "column", gap: 1, mt: !isColCollapsed && !!((_y = column.customNode) === null || _y === void 0 ? void 0 : _y.call(column)) ? "1" : "0" },
394
- react_1.default.createElement(react_2.Text, { as: "span", fontWeight: "600", fontSize: "0.875rem", color: (_z = colors === null || colors === void 0 ? void 0 : colors.text) === null || _z === void 0 ? void 0 : _z[700], noOfLines: 1, flex: "1", minW: 0 },
395
- react_1.default.createElement(OverflowTooltipText_1.default, { placement: "top" }, column.title)),
396
- !!((_0 = column.customNode) === null || _0 === void 0 ? void 0 : _0.call(column)) ? (react_1.default.createElement(react_2.Box, { as: "section", "aria-label": "Column summary", width: "95%", flexShrink: 0, fontSize: "xs", mb: 1, color: (_1 = colors === null || colors === void 0 ? void 0 : colors.text) === null || _1 === void 0 ? void 0 : _1[600] }, column.customNode())) : null)),
404
+ react_1.default.createElement(react_2.VStack, { align: "stretch", spacing: 1, minW: "max-content", fontSize: "xs", color: (_u = colors === null || colors === void 0 ? void 0 : colors.text) === null || _u === void 0 ? void 0 : _u[600] }, column.customNode())))) : (react_1.default.createElement(react_2.Box, { flex: "1", minH: 0 })))) : (react_1.default.createElement(react_2.Flex, { width: "100%", h: !isColCollapsed && !!((_v = column.customNode) === null || _v === void 0 ? void 0 : _v.call(column)) ? "auto" : "2.75rem", align: !isColCollapsed && !!((_w = column.customNode) === null || _w === void 0 ? void 0 : _w.call(column)) ? "flex-start" : "center", px: 3, py: 2, flexShrink: 0, justifyContent: "space-between", position: "relative", gap: 2, borderBottom: "0.063rem solid ".concat((_y = (_x = colors === null || colors === void 0 ? void 0 : colors.boxborder) === null || _x === void 0 ? void 0 : _x[100]) !== null && _y !== void 0 ? _y : (_z = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _z === void 0 ? void 0 : _z[100]) },
405
+ react_1.default.createElement(react_2.Flex, { direction: "column", gap: 1, minW: 0, flex: "1" },
406
+ react_1.default.createElement(react_2.Flex, { align: "center", gap: 2, minW: 0 },
407
+ react_1.default.createElement(react_2.Box, { boxSize: "0.625rem", borderRadius: "full", bg: (_0 = column.color) !== null && _0 !== void 0 ? _0 : (_1 = colors === null || colors === void 0 ? void 0 : colors.primary) === null || _1 === void 0 ? void 0 : _1[500], flexShrink: 0 }),
408
+ enableColumnReorder && columnDragHandleProps ? (react_1.default.createElement(react_2.Flex, __assign({ align: "center", justify: "center", flexShrink: 0, cursor: "grab" }, columnDragHandleProps),
409
+ react_1.default.createElement(react_2.Box, { as: lucide_react_1.GripVertical, size: 14, color: (_2 = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _2 === void 0 ? void 0 : _2[400] }))) : null,
410
+ react_1.default.createElement(react_2.Text, { as: "span", fontWeight: "600", fontSize: "0.875rem", color: (_3 = colors === null || colors === void 0 ? void 0 : colors.text) === null || _3 === void 0 ? void 0 : _3[700], noOfLines: 1, minW: 0 },
411
+ react_1.default.createElement(OverflowTooltipText_1.default, { placement: "top" }, column.title))),
412
+ !!((_4 = column.customNode) === null || _4 === void 0 ? void 0 : _4.call(column)) ? (react_1.default.createElement(react_2.Box, { as: "section", "aria-label": "Column summary", width: "100%", flexShrink: 0, fontSize: "xs", color: (_5 = colors === null || colors === void 0 ? void 0 : colors.text) === null || _5 === void 0 ? void 0 : _5[600] }, column.customNode())) : null),
397
413
  react_1.default.createElement(react_2.Box, { display: "flex", alignItems: "center", gap: 2 },
398
- react_1.default.createElement(react_2.Badge, { minW: { base: "20px", sm: "22px", md: "24px" }, h: { base: "20px", sm: "22px", md: "24px" }, borderRadius: "999px", border: "1px solid", backgroundColor: (_2 = colors === null || colors === void 0 ? void 0 : colors.background) === null || _2 === void 0 ? void 0 : _2[100], borderColor: (_3 = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _3 === void 0 ? void 0 : _3[300], display: "flex", alignItems: "center", justifyContent: "center", color: (_4 = colors === null || colors === void 0 ? void 0 : colors.text) === null || _4 === void 0 ? void 0 : _4[900], fontWeight: 600, fontSize: { base: "10px", sm: "11px", md: "12px" } }, (_5 = column === null || column === void 0 ? void 0 : column.items) === null || _5 === void 0 ? void 0 : _5.length),
414
+ react_1.default.createElement(react_2.Badge, { minW: "1.5rem", h: "1.5rem", px: 2, borderRadius: "999px", backgroundColor: (_6 = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _6 === void 0 ? void 0 : _6[100], display: "flex", alignItems: "center", justifyContent: "center", color: (_7 = colors === null || colors === void 0 ? void 0 : colors.text) === null || _7 === void 0 ? void 0 : _7[700], fontWeight: 600, fontSize: "0.625rem" }, (_8 = column === null || column === void 0 ? void 0 : column.items) === null || _8 === void 0 ? void 0 : _8.length),
399
415
  enableColumnCollapse && (react_1.default.createElement(react_2.IconButton, { "aria-label": "Collapse column", icon: react_1.default.createElement(lucide_react_1.ChevronLeft, { size: 14 }), variant: "ghost", size: "xs", minW: "1.5rem", h: "1.75rem", flexShrink: 0, onClick: function () { return toggleColumnCollapsed(colId); } })),
400
416
  canDelete &&
401
417
  hoveredColumn === colId &&
402
- column.items.length > 0 && (react_1.default.createElement(react_2.Box, { as: lucide_react_1.Trash2, size: 16, cursor: "pointer", color: (_6 = colors === null || colors === void 0 ? void 0 : colors.text) === null || _6 === void 0 ? void 0 : _6[600], _hover: { color: (_7 = colors === null || colors === void 0 ? void 0 : colors.red) === null || _7 === void 0 ? void 0 : _7[600] }, onClick: function () { return handleColumnDelete(colId); }, transition: "color 0.2s ease", flexShrink: 0 })),
418
+ column.items.length > 0 && (react_1.default.createElement(react_2.Box, { as: lucide_react_1.Trash2, size: 16, cursor: "pointer", color: (_9 = colors === null || colors === void 0 ? void 0 : colors.text) === null || _9 === void 0 ? void 0 : _9[600], _hover: { color: (_10 = colors === null || colors === void 0 ? void 0 : colors.red) === null || _10 === void 0 ? void 0 : _10[600] }, onClick: function () { return handleColumnDelete(colId); }, transition: "color 0.2s ease", flexShrink: 0 })),
403
419
  !(canDelete &&
404
420
  hoveredColumn === colId &&
405
421
  column.items.length > 0) && react_1.default.createElement(react_2.Box, { width: "16px", height: "16px", flexShrink: 0 })))),
406
- !isColCollapsed && (react_1.default.createElement(react_1.default.Fragment, null,
407
- react_1.default.createElement(react_2.Box, { px: 2, flex: "1", overflowY: "auto", width: "100%", sx: {
408
- overflowY: "auto",
409
- overflowX: "hidden",
410
- scrollbarWidth: "thin",
411
- scrollbarColor: "var(--chakra-colors-gray-300) transparent",
412
- "&::-webkit-scrollbar": {
413
- width: "6px !important",
414
- height: "6px !important",
415
- },
416
- "&::-webkit-scrollbar-track": {
417
- background: "gray.100",
418
- borderRadius: "3px",
419
- marginTop: "4px",
420
- marginBottom: "4px",
421
- },
422
- "&::-webkit-scrollbar-thumb": {
423
- background: "gray.300",
424
- borderRadius: "3px",
425
- border: "1px solid",
426
- borderColor: "gray.100",
427
- },
428
- "&::-webkit-scrollbar-thumb:hover": {
429
- background: "gray.400",
430
- },
431
- "&": {
432
- scrollbarGutter: "stable both-edges",
433
- },
434
- cursor: canDrag ? "grab" : "not-allowed",
435
- } },
436
- (noItems === null || noItems === void 0 ? void 0 : noItems.isVisible) && column.items.length === 0 && (react_1.default.createElement(NoItemsTemplate, { column: column, noItems: noItems, colors: colors })),
437
- virtualization ? (react_1.default.createElement(react_window_1.VariableSizeList, { ref: function (el) {
438
- if (el)
439
- listRefs.current[colId] = el;
440
- }, height: containerHeight - 150, itemCount: column.items.length +
441
- (snapshot.isUsingPlaceholder ? 1 : 0), itemSize: function (index) {
442
- return getItemSize(index, column.items, colId);
443
- }, width: "100%", itemData: __assign(__assign({}, rowBaseProps), { items: column.items, colId: colId }) }, KanbanRow)) : (react_1.default.createElement(react_2.Box, null,
444
- column.items.map(function (account, index) { return (react_1.default.createElement("div", { key: account.id, style: { paddingBottom: KANBAN_CARD_GAP } },
445
- react_1.default.createElement(dnd_1.Draggable, { draggableId: account.id.toString(), index: index, key: account.id, isDragDisabled: !canDrag }, function (dragProvided) {
446
- var _a;
447
- return (react_1.default.createElement("div", __assign({ ref: dragProvided.innerRef }, dragProvided.draggableProps, dragProvided.dragHandleProps, { style: dragProvided.draggableProps.style }), (account === null || account === void 0 ? void 0 : account.customNode) ? (_a = account === null || account === void 0 ? void 0 : account.customNode) === null || _a === void 0 ? void 0 : _a.call(account) : (react_1.default.createElement(AccountCard_1.default, { account: account, index: index, onDelete: onDelete, onOpen: onOpen, isExpanded: expanded[account.id], onToggleExpand: function () {
448
- return toggleExpand(account.id, colId, index);
449
- }, isDeletable: canDelete }))));
450
- }))); }),
451
- provided.placeholder)))))));
422
+ !isColCollapsed && (react_1.default.createElement(react_2.Box, { px: 2, flex: "1", overflowY: "auto", width: "100%", sx: {
423
+ overflowY: "auto",
424
+ overflowX: "hidden",
425
+ scrollbarWidth: "thin",
426
+ scrollbarColor: "var(--chakra-colors-gray-300) transparent",
427
+ "&::-webkit-scrollbar": {
428
+ width: "6px !important",
429
+ height: "6px !important",
430
+ },
431
+ "&::-webkit-scrollbar-track": {
432
+ background: "gray.100",
433
+ borderRadius: "3px",
434
+ marginTop: "4px",
435
+ marginBottom: "4px",
436
+ },
437
+ "&::-webkit-scrollbar-thumb": {
438
+ background: "gray.300",
439
+ borderRadius: "3px",
440
+ border: "1px solid",
441
+ borderColor: "gray.100",
442
+ },
443
+ "&::-webkit-scrollbar-thumb:hover": {
444
+ background: "gray.400",
445
+ },
446
+ "&": {
447
+ scrollbarGutter: "stable both-edges",
448
+ },
449
+ cursor: canDrag ? "grab" : "not-allowed",
450
+ } },
451
+ (noItems === null || noItems === void 0 ? void 0 : noItems.isVisible) && column.items.length === 0 && (react_1.default.createElement(NoItemsTemplate, { column: column, noItems: noItems, colors: colors })),
452
+ virtualization ? (react_1.default.createElement(react_window_1.VariableSizeList, { ref: function (el) {
453
+ if (el)
454
+ listRefs.current[colId] = el;
455
+ }, height: containerHeight - 150, itemCount: column.items.length +
456
+ (snapshot.isUsingPlaceholder ? 1 : 0), itemSize: function (index) {
457
+ return getItemSize(index, column.items, colId);
458
+ }, width: "100%", itemData: itemDataByCol[colId] }, KanbanRow)) : (react_1.default.createElement(react_2.Box, null,
459
+ column.items.map(function (account, index) { return (react_1.default.createElement("div", { key: account.id, style: { paddingBottom: KANBAN_CARD_GAP, paddingTop: index === 0 ? KANBAN_LIST_TOP_PAD : 0 } },
460
+ react_1.default.createElement(dnd_1.Draggable, { draggableId: account.id.toString(), index: index, key: account.id, isDragDisabled: !canDrag }, function (dragProvided) {
461
+ var _a;
462
+ return (react_1.default.createElement("div", __assign({ ref: dragProvided.innerRef }, dragProvided.draggableProps, dragProvided.dragHandleProps, { style: dragProvided.draggableProps.style }), (account === null || account === void 0 ? void 0 : account.customNode) ? (_a = account === null || account === void 0 ? void 0 : account.customNode) === null || _a === void 0 ? void 0 : _a.call(account) : (react_1.default.createElement(AccountCard_1.default, { account: account, index: index, onDelete: onDelete, onOpen: onOpen, isExpanded: expanded[account.id], onToggleExpand: function () {
463
+ return toggleExpand(account.id, colId, index);
464
+ }, isDeletable: canDelete }))));
465
+ }))); }),
466
+ provided.placeholder))))));
452
467
  })); };
453
468
  if (!canView)
454
469
  return null;
@@ -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;