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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (193) hide show
  1. package/.cursor/TASK-SETUP.md +43 -0
  2. package/.cursor/agents/be-impl.md +37 -0
  3. package/.cursor/agents/fe-impl.md +39 -0
  4. package/.cursor/agents/task-plan.md +56 -0
  5. package/.cursor/agents/test-create.md +31 -0
  6. package/.cursor/agents/test-exec.md +26 -0
  7. package/.cursor/hooks/task-hint.env +1 -0
  8. package/.cursor/hooks/task-skill-nudge.sh +71 -0
  9. package/.cursor/hooks/task-slash-guard.sh +31 -0
  10. package/.cursor/hooks.json +13 -0
  11. package/.cursor/modules/account-management/MODULE.md +16 -0
  12. package/.cursor/modules/buttons/MODULE.md +13 -0
  13. package/.cursor/modules/cards/MODULE.md +13 -0
  14. package/.cursor/modules/charts/MODULE.md +13 -0
  15. package/.cursor/modules/common/MODULE.md +13 -0
  16. package/.cursor/modules/contact-auth/MODULE.md +13 -0
  17. package/.cursor/modules/data-display/MODULE.md +18 -0
  18. package/.cursor/modules/feedback/MODULE.md +14 -0
  19. package/.cursor/modules/form/MODULE.md +13 -0
  20. package/.cursor/modules/inputs-basic/MODULE.md +13 -0
  21. package/.cursor/modules/inputs-date-file/MODULE.md +19 -0
  22. package/.cursor/modules/inputs-select/MODULE.md +14 -0
  23. package/.cursor/modules/inputs-toggle/MODULE.md +13 -0
  24. package/.cursor/modules/kanban/MODULE.md +14 -0
  25. package/.cursor/modules/layout-navigation/MODULE.md +14 -0
  26. package/.cursor/modules/overlays/MODULE.md +13 -0
  27. package/.cursor/modules/playground/MODULE.md +15 -0
  28. package/.cursor/modules/table/MODULE.md +15 -0
  29. package/.cursor/modules/theme/MODULE.md +15 -0
  30. package/.cursor/modules/types-exports/MODULE.md +17 -0
  31. package/.cursor/modules/utility-ui/MODULE.md +15 -0
  32. package/.cursor/modules/utils-hooks/MODULE.md +13 -0
  33. package/.cursor/pixelize-task-statusline.sh +64 -0
  34. package/.cursor/plans/blocked/.gitkeep +0 -0
  35. package/.cursor/plans/current.md +35 -0
  36. package/.cursor/plans/done/.gitkeep +0 -0
  37. package/.cursor/rules +31 -0
  38. package/.cursor/skills/task/SKILL.md +167 -0
  39. package/CLAUDE.md +122 -0
  40. package/dist/Components/Card/PaymentCard/PaymentCard.d.ts +1 -1
  41. package/dist/Components/Card/PaymentCard/PaymentCard.js +3 -3
  42. package/dist/Components/Card/PaymentCard/PaymentCardProps.d.ts +1 -0
  43. package/dist/Components/CopyButton/CopyButton.d.ts +22 -0
  44. package/dist/Components/CopyButton/CopyButton.js +126 -0
  45. package/dist/Components/CustomModulesTable/CustomModulesTable.d.ts +4 -0
  46. package/dist/Components/CustomModulesTable/CustomModulesTable.js +182 -0
  47. package/dist/Components/CustomModulesTable/CustomModulesTable.test.d.ts +1 -0
  48. package/dist/Components/CustomModulesTable/CustomModulesTable.test.js +84 -0
  49. package/dist/Components/CustomModulesTable/CustomModulesTableProps.d.ts +54 -0
  50. package/dist/Components/CustomModulesTable/CustomModulesTableProps.js +2 -0
  51. package/dist/Components/CustomModulesTable/DeleteModuleModal.d.ts +4 -0
  52. package/dist/Components/CustomModulesTable/DeleteModuleModal.js +33 -0
  53. package/dist/Components/CustomModulesTable/EditModuleModal.d.ts +4 -0
  54. package/dist/Components/CustomModulesTable/EditModuleModal.js +63 -0
  55. package/dist/Components/Dropdown/DropDown.js +110 -28
  56. package/dist/Components/Dropdown/Dropdown.test.d.ts +1 -0
  57. package/dist/Components/Dropdown/Dropdown.test.js +102 -0
  58. package/dist/Components/Dropdown/DropdownProps.d.ts +4 -1
  59. package/dist/Components/EmptyState/EmptyState.d.ts +4 -0
  60. package/dist/Components/EmptyState/EmptyState.js +65 -0
  61. package/dist/Components/EmptyState/EmptyStateProps.d.ts +28 -0
  62. package/dist/Components/EmptyState/EmptyStateProps.js +2 -0
  63. package/dist/Components/FieldSelectModal/FieldSelectModal.d.ts +26 -0
  64. package/dist/Components/FieldSelectModal/FieldSelectModal.js +107 -0
  65. package/dist/Components/FilePreview/FilePreview.d.ts +6 -0
  66. package/dist/Components/FilePreview/FilePreview.js +190 -0
  67. package/dist/Components/FilePreview/FilePreviewProps.d.ts +26 -0
  68. package/dist/Components/FilePreview/FilePreviewProps.js +2 -0
  69. package/dist/Components/LazyWrapper/LazyWrapper.d.ts +10 -0
  70. package/dist/Components/LazyWrapper/LazyWrapper.js +50 -0
  71. package/dist/Components/MoreItems/MoreItems.d.ts +4 -0
  72. package/dist/Components/MoreItems/MoreItems.js +35 -0
  73. package/dist/Components/MoreItems/MoreItemsProps.d.ts +29 -0
  74. package/dist/Components/MoreItems/MoreItemsProps.js +2 -0
  75. package/dist/Components/OrgSwitcher/OrgSwitcher.d.ts +4 -0
  76. package/dist/Components/OrgSwitcher/OrgSwitcher.js +121 -0
  77. package/dist/Components/OrgSwitcher/OrgSwitcherProps.d.ts +41 -0
  78. package/dist/Components/OrgSwitcher/OrgSwitcherProps.js +25 -0
  79. package/dist/Components/OrganizationDetails/CreateOrgModal.d.ts +4 -0
  80. package/dist/Components/OrganizationDetails/CreateOrgModal.js +122 -0
  81. package/dist/Components/OrganizationDetails/DeleteOrgModal.d.ts +4 -0
  82. package/dist/Components/OrganizationDetails/DeleteOrgModal.js +29 -0
  83. package/dist/Components/OrganizationDetails/OrganizationDetails.d.ts +4 -0
  84. package/dist/Components/OrganizationDetails/OrganizationDetails.js +264 -0
  85. package/dist/Components/OrganizationDetails/OrganizationDetails.test.d.ts +1 -0
  86. package/dist/Components/OrganizationDetails/OrganizationDetails.test.js +122 -0
  87. package/dist/Components/OrganizationDetails/OrganizationDetailsProps.d.ts +88 -0
  88. package/dist/Components/OrganizationDetails/OrganizationDetailsProps.js +2 -0
  89. package/dist/Components/PdfViewer/PdfViewer.d.ts +15 -0
  90. package/dist/Components/PdfViewer/PdfViewer.js +29 -0
  91. package/dist/Components/RolesPermission/DeleteRoleModal.d.ts +4 -0
  92. package/dist/Components/RolesPermission/DeleteRoleModal.js +29 -0
  93. package/dist/Components/RolesPermission/RolesPermission.d.ts +4 -0
  94. package/dist/Components/RolesPermission/RolesPermission.js +243 -0
  95. package/dist/Components/RolesPermission/RolesPermission.test.d.ts +1 -0
  96. package/dist/Components/RolesPermission/RolesPermission.test.js +150 -0
  97. package/dist/Components/RolesPermission/RolesPermissionProps.d.ts +117 -0
  98. package/dist/Components/RolesPermission/RolesPermissionProps.js +2 -0
  99. package/dist/Components/ScrollToTop/ScrollToTop.d.ts +19 -0
  100. package/dist/Components/ScrollToTop/ScrollToTop.js +104 -0
  101. package/dist/Components/SideBar/components/OtherApps.test.js +3 -2
  102. package/dist/Components/SignInActivityTable/SignInActivityTable.d.ts +4 -0
  103. package/dist/Components/SignInActivityTable/SignInActivityTable.js +95 -0
  104. package/dist/Components/SignInActivityTable/SignInActivityTable.test.d.ts +1 -0
  105. package/dist/Components/SignInActivityTable/SignInActivityTable.test.js +63 -0
  106. package/dist/Components/SignInActivityTable/SignInActivityTableProps.d.ts +21 -0
  107. package/dist/Components/SignInActivityTable/SignInActivityTableProps.js +2 -0
  108. package/dist/Components/StageProgress/StageItem.d.ts +4 -0
  109. package/dist/Components/StageProgress/StageItem.js +137 -0
  110. package/dist/Components/StageProgress/StageProgress.d.ts +4 -0
  111. package/dist/Components/StageProgress/StageProgress.js +59 -0
  112. package/dist/Components/StageProgress/StageProgressProps.d.ts +85 -0
  113. package/dist/Components/StageProgress/StageProgressProps.js +27 -0
  114. package/dist/Components/StageProgress/StepperStage.d.ts +4 -0
  115. package/dist/Components/StageProgress/StepperStage.js +78 -0
  116. package/dist/Components/Table/Table.js +66 -45
  117. package/dist/Components/Table/TableProps.d.ts +4 -2
  118. package/dist/Components/Table/components/Pagination.js +1 -1
  119. package/dist/Components/Table/components/TableBody.js +15 -12
  120. package/dist/Components/Table/components/TableBody.virtualize.test.js +13 -3
  121. package/dist/Components/Table/components/TableHeader.d.ts +1 -1
  122. package/dist/Components/Table/components/TableHeader.js +9 -9
  123. package/dist/Components/Table/hooks/useTable.d.ts +1 -0
  124. package/dist/Components/Table/hooks/useTable.js +21 -8
  125. package/dist/Components/Table/settings/ManageColumns.test.js +1 -0
  126. package/dist/Components/Tag/Tag.d.ts +3 -11
  127. package/dist/Components/Tag/Tag.js +10 -2
  128. package/dist/Components/Tag/Tag.styles.d.ts +2 -2
  129. package/dist/Components/Tag/Tag.styles.js +58 -33
  130. package/dist/Components/Tag/Tag.test.d.ts +1 -0
  131. package/dist/Components/Tag/Tag.test.js +68 -0
  132. package/dist/Components/Tag/TagProps.d.ts +13 -0
  133. package/dist/Components/Tag/TagProps.js +2 -0
  134. package/dist/Components/UpgradeButton/UpgradeButton.d.ts +4 -0
  135. package/dist/Components/UpgradeButton/UpgradeButton.js +73 -0
  136. package/dist/Components/UpgradeButton/UpgradeButtonProps.d.ts +43 -0
  137. package/dist/Components/UpgradeButton/UpgradeButtonProps.js +2 -0
  138. package/dist/Components/UserDetails/AddUserModal.d.ts +4 -0
  139. package/dist/Components/UserDetails/AddUserModal.js +218 -0
  140. package/dist/Components/UserDetails/ChangeRoleModal.d.ts +4 -0
  141. package/dist/Components/UserDetails/ChangeRoleModal.js +150 -0
  142. package/dist/Components/UserDetails/DeactivateConfirmModal.d.ts +4 -0
  143. package/dist/Components/UserDetails/DeactivateConfirmModal.js +34 -0
  144. package/dist/Components/UserDetails/UserDetails.d.ts +4 -0
  145. package/dist/Components/UserDetails/UserDetails.js +263 -0
  146. package/dist/Components/UserDetails/UserDetails.test.d.ts +1 -0
  147. package/dist/Components/UserDetails/UserDetails.test.js +129 -0
  148. package/dist/Components/UserDetails/UserDetailsProps.d.ts +151 -0
  149. package/dist/Components/UserDetails/UserDetailsProps.js +2 -0
  150. package/dist/Theme/componentStyles.d.ts +1 -1
  151. package/dist/Theme/index.d.ts +4 -4
  152. package/dist/Theme/index.js +4 -4
  153. package/dist/index.d.ts +23 -1
  154. package/dist/index.js +37 -2
  155. package/package.json +2 -2
  156. package/.claude/settings.local.json +0 -44
  157. package/coverage/clover.xml +0 -638
  158. package/coverage/coverage-final.json +0 -20
  159. package/coverage/lcov-report/Table/CompactSelect.tsx.html +0 -379
  160. package/coverage/lcov-report/Table/Components/ActiveFilters.tsx.html +0 -514
  161. package/coverage/lcov-report/Table/Components/HeaderActions.tsx.html +0 -373
  162. package/coverage/lcov-report/Table/Components/Pagination.tsx.html +0 -574
  163. package/coverage/lcov-report/Table/Components/TableActions.tsx.html +0 -574
  164. package/coverage/lcov-report/Table/Components/TableBody.tsx.html +0 -1027
  165. package/coverage/lcov-report/Table/Components/TableFilters.tsx.html +0 -397
  166. package/coverage/lcov-report/Table/Components/TableHeader.tsx.html +0 -1060
  167. package/coverage/lcov-report/Table/Components/TableLoading.tsx.html +0 -361
  168. package/coverage/lcov-report/Table/Components/TableSearch.tsx.html +0 -337
  169. package/coverage/lcov-report/Table/Components/index.html +0 -266
  170. package/coverage/lcov-report/Table/Components/useDebounce.ts.html +0 -178
  171. package/coverage/lcov-report/Table/Components/useTable.ts.html +0 -778
  172. package/coverage/lcov-report/Table/LeftFilterPane.tsx.html +0 -1810
  173. package/coverage/lcov-report/Table/SelectOperationControls.tsx.html +0 -178
  174. package/coverage/lcov-report/Table/Table.tsx.html +0 -1567
  175. package/coverage/lcov-report/Table/TableProps.tsx.html +0 -658
  176. package/coverage/lcov-report/Table/TableSettings/ManageColumns.tsx.html +0 -619
  177. package/coverage/lcov-report/Table/TableSettings/TableFilters.tsx.html +0 -229
  178. package/coverage/lcov-report/Table/TableSettings/TableSettings.tsx.html +0 -532
  179. package/coverage/lcov-report/Table/TableSettings/index.html +0 -146
  180. package/coverage/lcov-report/Table/TableToDo.tsx.html +0 -973
  181. package/coverage/lcov-report/Table/TextOperationControls.tsx.html +0 -271
  182. package/coverage/lcov-report/Table/filterTypes.ts.html +0 -97
  183. package/coverage/lcov-report/Table/index.html +0 -176
  184. package/coverage/lcov-report/base.css +0 -224
  185. package/coverage/lcov-report/block-navigation.js +0 -87
  186. package/coverage/lcov-report/favicon.png +0 -0
  187. package/coverage/lcov-report/index.html +0 -146
  188. package/coverage/lcov-report/prettify.css +0 -1
  189. package/coverage/lcov-report/prettify.js +0 -2
  190. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  191. package/coverage/lcov-report/sorter.js +0 -210
  192. package/coverage/lcov.info +0 -1836
  193. package/dist/Assets/defaultLogo.tsx +0 -31
@@ -1,58 +1,83 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Tag = void 0;
4
+ // Resolve a colorScheme key to a numeric swatch from the theme. All supported
5
+ // colorScheme values (brand + global scales) expose a 50-900 scale; fall back to
6
+ // gray so an unknown/missing key can never throw at render time.
7
+ var swatch = function (theme, colorScheme) {
8
+ var _a, _b, _c, _d;
9
+ if (colorScheme === void 0) { colorScheme = "primary"; }
10
+ return (_d = (_b = (_a = theme.colors) === null || _a === void 0 ? void 0 : _a[colorScheme]) !== null && _b !== void 0 ? _b : (_c = theme.colors) === null || _c === void 0 ? void 0 : _c.gray) !== null && _d !== void 0 ? _d : {};
11
+ };
12
+ // Chakra Tag is a multipart component (container / label / closeButton); styling
13
+ // is keyed under those parts, so it needs a multi-style config with `parts`.
4
14
  exports.Tag = {
15
+ parts: ["container", "label", "closeButton"],
5
16
  baseStyle: {
6
- borderRadius: "full",
7
- fontWeight: "bold",
8
- px: 3,
9
- py: 1,
17
+ container: {
18
+ borderRadius: "full",
19
+ fontWeight: 600,
20
+ lineHeight: 1.2,
21
+ display: "inline-flex",
22
+ alignItems: "center",
23
+ transition: "background 0.15s ease, color 0.15s ease, border-color 0.15s ease",
24
+ },
10
25
  },
11
26
  sizes: {
27
+ xs: {
28
+ container: { fontSize: "0.6875rem", px: 2, py: 0.5, minH: "1.25rem" },
29
+ },
12
30
  sm: {
13
- fontSize: "0.75rem",
14
- px: 2,
15
- py: 1,
31
+ container: { fontSize: "0.75rem", px: 2.5, py: 1, minH: "1.5rem" },
16
32
  },
17
33
  md: {
18
- fontSize: "0.875rem",
19
- px: 3,
20
- py: 1.5,
34
+ container: { fontSize: "0.8125rem", px: 3, py: 1, minH: "1.75rem" },
21
35
  },
22
36
  lg: {
23
- fontSize: "1rem",
24
- px: 4,
25
- py: 2,
37
+ container: { fontSize: "0.9375rem", px: 3.5, py: 1.5, minH: "2rem" },
26
38
  },
27
39
  },
28
40
  variants: {
29
41
  solid: function (_a) {
30
- var theme = _a.theme, _b = _a.colorScheme, colorScheme = _b === void 0 ? "primary" : _b;
31
- return ({
32
- bg: theme.colors[colorScheme][500],
33
- color: theme.colors.white,
34
- _hover: {
35
- bg: theme.colors[colorScheme][600],
42
+ var _b, _c;
43
+ var theme = _a.theme, _d = _a.colorScheme, colorScheme = _d === void 0 ? "primary" : _d;
44
+ var c = swatch(theme, colorScheme);
45
+ return {
46
+ container: {
47
+ bg: c[500],
48
+ color: (_c = (_b = theme.colors) === null || _b === void 0 ? void 0 : _b.white) !== null && _c !== void 0 ? _c : "#fff",
49
+ _hover: { bg: c[600] },
50
+ _active: { bg: c[700] },
36
51
  },
37
- _active: {
38
- bg: theme.colors[colorScheme][700],
52
+ };
53
+ },
54
+ subtle: function (_a) {
55
+ var theme = _a.theme, _b = _a.colorScheme, colorScheme = _b === void 0 ? "primary" : _b;
56
+ var c = swatch(theme, colorScheme);
57
+ return {
58
+ container: {
59
+ bg: c[50],
60
+ color: c[700],
61
+ border: "0.063rem solid",
62
+ borderColor: c[100],
63
+ _hover: { bg: c[100] },
64
+ _active: { bg: c[200] },
39
65
  },
40
- });
66
+ };
41
67
  },
42
68
  outline: function (_a) {
43
69
  var theme = _a.theme, _b = _a.colorScheme, colorScheme = _b === void 0 ? "primary" : _b;
44
- return ({
45
- border: "0.125rem solid",
46
- borderColor: theme.colors[colorScheme][500],
47
- color: theme.colors[colorScheme][500],
48
- bg: "transparent",
49
- _hover: {
50
- bg: theme.colors[colorScheme][50],
51
- },
52
- _active: {
53
- bg: theme.colors[colorScheme][100],
70
+ var c = swatch(theme, colorScheme);
71
+ return {
72
+ container: {
73
+ border: "0.094rem solid",
74
+ borderColor: c[500],
75
+ color: c[600],
76
+ bg: "transparent",
77
+ _hover: { bg: c[50] },
78
+ _active: { bg: c[100] },
54
79
  },
55
- });
80
+ };
56
81
  },
57
82
  },
58
83
  defaultProps: {
@@ -0,0 +1 @@
1
+ import "@testing-library/jest-dom";
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ var react_1 = __importDefault(require("react"));
7
+ var react_2 = require("@testing-library/react");
8
+ require("@testing-library/jest-dom");
9
+ var react_3 = require("@chakra-ui/react");
10
+ var lucide_react_1 = require("lucide-react");
11
+ var Tag_1 = __importDefault(require("./Tag"));
12
+ var Tag_styles_1 = require("./Tag.styles");
13
+ // Register the Tag component theme + the color scales the variants read, so the
14
+ // token-driven styles resolve exactly as they do inside the design library.
15
+ var theme = (0, react_3.extendTheme)({
16
+ colors: {
17
+ primary: { 50: "#f7edfc", 100: "#eacff7", 200: "#d4a0ef", 500: "#8B3FC8", 600: "#7632b0", 700: "#5e2789" },
18
+ green: { 50: "#e9f8ef", 100: "#bbe9cc", 200: "#9adeb4", 500: "#23b85c", 600: "#20a754", 700: "#198341" },
19
+ gray: { 50: "#f9f7fb", 100: "#f0eaf6", 200: "#e4d9f0", 500: "#7d6ea0", 600: "#5e527a", 700: "#4a4060" },
20
+ white: "#fff",
21
+ },
22
+ components: { Tag: Tag_styles_1.Tag },
23
+ });
24
+ var renderWithChakra = function (ui) {
25
+ return (0, react_2.render)(react_1.default.createElement(react_3.ChakraProvider, { theme: theme }, ui));
26
+ };
27
+ describe("Tag", function () {
28
+ it("renders its label", function () {
29
+ renderWithChakra(react_1.default.createElement(Tag_1.default, { label: "Active" }));
30
+ expect(react_2.screen.getByText("Active")).toBeInTheDocument();
31
+ });
32
+ it("fires onTagClick when the tag is clicked", function () {
33
+ var onTagClick = jest.fn();
34
+ renderWithChakra(react_1.default.createElement(Tag_1.default, { label: "Click me", onTagClick: onTagClick }));
35
+ react_2.fireEvent.click(react_2.screen.getByText("Click me"));
36
+ expect(onTagClick).toHaveBeenCalledTimes(1);
37
+ });
38
+ it("exposes a button role and aria-label when interactive", function () {
39
+ renderWithChakra(react_1.default.createElement(Tag_1.default, { label: "Filter", onTagClick: function () { } }));
40
+ expect(react_2.screen.getByRole("button", { name: "Filter" })).toBeInTheDocument();
41
+ });
42
+ it("is not a button when no onTagClick is provided", function () {
43
+ renderWithChakra(react_1.default.createElement(Tag_1.default, { label: "Static" }));
44
+ expect(react_2.screen.queryByRole("button")).not.toBeInTheDocument();
45
+ });
46
+ it("renders the icon and fires onIconClick without bubbling to onTagClick", function () {
47
+ var onTagClick = jest.fn();
48
+ var onIconClick = jest.fn();
49
+ var container = renderWithChakra(react_1.default.createElement(Tag_1.default, { label: "Removable", icon: lucide_react_1.X, onTagClick: onTagClick, onIconClick: onIconClick })).container;
50
+ var svg = container.querySelector("svg");
51
+ expect(svg).toBeTruthy();
52
+ react_2.fireEvent.click(svg);
53
+ expect(onIconClick).toHaveBeenCalledTimes(1);
54
+ // stopPropagation must prevent the icon click from triggering the tag click.
55
+ expect(onTagClick).not.toHaveBeenCalled();
56
+ });
57
+ it("renders across all sizes and variants without throwing", function () {
58
+ var sizes = ["xs", "sm", "md", "lg"];
59
+ var variants = ["solid", "subtle", "outline"];
60
+ sizes.forEach(function (size) {
61
+ return variants.forEach(function (variant) {
62
+ var unmount = renderWithChakra(react_1.default.createElement(Tag_1.default, { label: "".concat(size, "-").concat(variant), size: size, variant: variant })).unmount;
63
+ expect(react_2.screen.getByText("".concat(size, "-").concat(variant))).toBeInTheDocument();
64
+ unmount();
65
+ });
66
+ });
67
+ });
68
+ });
@@ -0,0 +1,13 @@
1
+ import { ElementType } from "react";
2
+ export type TagColorScheme = "primary" | "secondary" | "tertiary" | "gray" | "red" | "orange" | "yellow" | "green" | "teal" | "blue" | "cyan" | "purple" | "pink";
3
+ export type TagSize = "xs" | "sm" | "md" | "lg";
4
+ export type TagVariant = "solid" | "outline" | "subtle";
5
+ export interface TagProps {
6
+ label: string;
7
+ onIconClick?: () => void;
8
+ onTagClick?: () => void;
9
+ icon?: ElementType;
10
+ colorScheme?: TagColorScheme;
11
+ size?: TagSize;
12
+ variant?: TagVariant;
13
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { UpgradeButtonProps } from "./UpgradeButtonProps";
3
+ declare const UpgradeButton: React.FC<UpgradeButtonProps>;
4
+ export default UpgradeButton;
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __importDefault = (this && this.__importDefault) || function (mod) {
14
+ return (mod && mod.__esModule) ? mod : { "default": mod };
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ var react_1 = __importDefault(require("react"));
18
+ var react_2 = require("@chakra-ui/react");
19
+ var lucide_react_1 = require("lucide-react");
20
+ var useCustomTheme_1 = require("../../Theme/useCustomTheme");
21
+ var sizeMap = {
22
+ sm: { px: "12px", py: "4px", font: "12px", sub: "8px", icon: 11, radius: "40px" },
23
+ md: { px: "20px", py: "5px", font: "14px", sub: "10px", icon: 13, radius: "50px" },
24
+ lg: { px: "26px", py: "8px", font: "16px", sub: "11px", icon: 16, radius: "60px" },
25
+ };
26
+ var FALLBACK_GRADIENT = { from: "#667eea", to: "#764ba2" };
27
+ var UpgradeButton = function (_a) {
28
+ var _b, _c;
29
+ var label = _a.label, mobileLabel = _a.mobileLabel, subtitle = _a.subtitle, _d = _a.icon, icon = _d === void 0 ? lucide_react_1.Sparkles : _d, _e = _a.iconColor, iconColor = _e === void 0 ? "#FFD66B" : _e, _f = _a.variant, variant = _f === void 0 ? "brand" : _f, gradient = _a.gradient, _g = _a.size, size = _g === void 0 ? "md" : _g, _h = _a.shimmer, shimmer = _h === void 0 ? true : _h, _j = _a.isLoading, isLoading = _j === void 0 ? false : _j, _k = _a.isDisabled, isDisabled = _k === void 0 ? false : _k, _l = _a.maxLabelWidth, maxLabelWidth = _l === void 0 ? "160px" : _l, ariaLabel = _a.ariaLabel, onClick = _a.onClick;
30
+ var theme = (0, useCustomTheme_1.useCustomTheme)();
31
+ var c = theme.colors;
32
+ var themeGradient = (_b = c.gradient) !== null && _b !== void 0 ? _b : FALLBACK_GRADIENT;
33
+ var variantGradient = {
34
+ brand: themeGradient,
35
+ primary: { from: c.primary[500], to: c.primary[700] },
36
+ secondary: { from: c.secondary[400], to: c.secondary[600] },
37
+ success: { from: c.semantic.success[400], to: c.semantic.success[600] },
38
+ warning: { from: c.semantic.warning[400], to: c.semantic.warning[600] },
39
+ danger: { from: c.semantic.error[400], to: c.semantic.error[600] },
40
+ info: { from: c.semantic.info[400], to: c.semantic.info[600] },
41
+ };
42
+ var resolved = (_c = gradient !== null && gradient !== void 0 ? gradient : variantGradient[variant]) !== null && _c !== void 0 ? _c : themeGradient;
43
+ var s = sizeMap[size];
44
+ var Icon = icon;
45
+ var blocked = isLoading || isDisabled;
46
+ var g = "linear-gradient(135deg, ".concat(resolved.from, " 0%, ").concat(resolved.to, " 100%)");
47
+ var gReversed = "linear-gradient(135deg, ".concat(resolved.to, " 0%, ").concat(resolved.from, " 100%)");
48
+ var hasMobile = !!mobileLabel && mobileLabel !== label;
49
+ return (react_1.default.createElement(react_2.Box, { as: "button", type: "button", "aria-label": ariaLabel || label, onClick: blocked ? undefined : onClick, disabled: isDisabled, position: "relative", cursor: blocked ? "default" : "pointer", opacity: isDisabled ? 0.6 : 1, px: { base: s.px === "20px" ? "14px" : s.px, md: s.px }, py: s.py, bgImage: g, color: "white", borderRadius: s.radius, fontWeight: "bold", textAlign: "center", overflow: "hidden", display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", transition: "transform 0.3s ease, box-shadow 0.3s ease, background-image 0.3s ease", _focusVisible: { outline: "none", boxShadow: "0 0 0 3px ".concat(resolved.from, "55") }, _hover: blocked
50
+ ? undefined
51
+ : __assign({ transform: "translateY(-2px)", bgImage: gReversed, boxShadow: "0 10px 30px ".concat(resolved.from, "66") }, (shimmer ? { _before: { left: "130%" } } : {})), sx: shimmer
52
+ ? {
53
+ _before: {
54
+ content: '""',
55
+ position: "absolute",
56
+ top: 0,
57
+ left: "-75%",
58
+ width: "55%",
59
+ height: "100%",
60
+ background: "linear-gradient(120deg, transparent, rgba(255,255,255,0.45), transparent)",
61
+ transform: "skewX(-20deg)",
62
+ transition: "left 0.7s ease",
63
+ pointerEvents: "none",
64
+ },
65
+ }
66
+ : undefined },
67
+ react_1.default.createElement(react_2.Flex, { align: "center", gap: "6px", maxW: maxLabelWidth, overflow: "hidden", whiteSpace: "nowrap", zIndex: 1 },
68
+ react_1.default.createElement(react_2.Text, { as: "span", fontSize: s.font, overflow: "hidden", textOverflow: "ellipsis", display: hasMobile ? { base: "none", md: "block" } : "block" }, label),
69
+ hasMobile && (react_1.default.createElement(react_2.Text, { as: "span", fontSize: s.font, overflow: "hidden", textOverflow: "ellipsis", display: { base: "block", md: "none" } }, mobileLabel)),
70
+ isLoading ? (react_1.default.createElement(react_2.Spinner, { size: "xs", thickness: "1.5px", color: iconColor })) : (Icon && react_1.default.createElement(Icon, { size: s.icon, color: iconColor, style: { flexShrink: 0 } }))),
71
+ subtitle && (react_1.default.createElement(react_2.Text, { as: "span", mt: "1px", fontSize: s.sub, fontWeight: "bold", color: iconColor, maxW: maxLabelWidth, overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap", zIndex: 1 }, subtitle))));
72
+ };
73
+ exports.default = UpgradeButton;
@@ -0,0 +1,43 @@
1
+ import { ElementType } from "react";
2
+ export type UpgradeButtonSize = "sm" | "md" | "lg";
3
+ /**
4
+ * Theme-aware color variants. Each resolves to a gradient built from the
5
+ * active theme's tokens, so the button blends with whichever theme is active.
6
+ */
7
+ export type UpgradeButtonVariant = "brand" | "primary" | "secondary" | "success" | "warning" | "danger" | "info";
8
+ export interface UpgradeButtonProps {
9
+ /** Primary label (shown on md+ screens). */
10
+ label: string;
11
+ /** Compact label for small screens. Defaults to `label`. */
12
+ mobileLabel?: string;
13
+ /** Optional small second line, e.g. a plan-expiry message. */
14
+ subtitle?: string;
15
+ /** Leading icon. Defaults to lucide `Sparkles`. Pass null to hide. */
16
+ icon?: ElementType | null;
17
+ /** Icon color. Defaults to a gold tone. */
18
+ iconColor?: string;
19
+ /**
20
+ * Theme-aware color variant. Defaults to `brand` (the active theme's
21
+ * gradient). Ignored when an explicit `gradient` is provided.
22
+ */
23
+ variant?: UpgradeButtonVariant;
24
+ /**
25
+ * Explicit gradient stops. Overrides `variant` and the theme gradient when
26
+ * provided.
27
+ */
28
+ gradient?: {
29
+ from: string;
30
+ to: string;
31
+ };
32
+ size?: UpgradeButtonSize;
33
+ /** Animated light sweep on hover. Default true. */
34
+ shimmer?: boolean;
35
+ /** Show a spinner and block interaction. */
36
+ isLoading?: boolean;
37
+ isDisabled?: boolean;
38
+ /** Truncate the label beyond this width. */
39
+ maxLabelWidth?: string;
40
+ /** Accessible label (falls back to `label`). */
41
+ ariaLabel?: string;
42
+ onClick?: React.MouseEventHandler<HTMLButtonElement>;
43
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { AddUserModalProps } from "./UserDetailsProps";
3
+ declare const AddUserModal: React.FC<AddUserModalProps>;
4
+ export default AddUserModal;
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+ var __assign = (this && this.__assign) || function () {
3
+ __assign = Object.assign || function(t) {
4
+ for (var s, i = 1, n = arguments.length; i < n; i++) {
5
+ s = arguments[i];
6
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
7
+ t[p] = s[p];
8
+ }
9
+ return t;
10
+ };
11
+ return __assign.apply(this, arguments);
12
+ };
13
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ var desc = Object.getOwnPropertyDescriptor(m, k);
16
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
17
+ desc = { enumerable: true, get: function() { return m[k]; } };
18
+ }
19
+ Object.defineProperty(o, k2, desc);
20
+ }) : (function(o, m, k, k2) {
21
+ if (k2 === undefined) k2 = k;
22
+ o[k2] = m[k];
23
+ }));
24
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
25
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
26
+ }) : function(o, v) {
27
+ o["default"] = v;
28
+ });
29
+ var __importStar = (this && this.__importStar) || (function () {
30
+ var ownKeys = function(o) {
31
+ ownKeys = Object.getOwnPropertyNames || function (o) {
32
+ var ar = [];
33
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
34
+ return ar;
35
+ };
36
+ return ownKeys(o);
37
+ };
38
+ return function (mod) {
39
+ if (mod && mod.__esModule) return mod;
40
+ var result = {};
41
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
42
+ __setModuleDefault(result, mod);
43
+ return result;
44
+ };
45
+ })();
46
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
47
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
48
+ return new (P || (P = Promise))(function (resolve, reject) {
49
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
50
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
51
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
52
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
53
+ });
54
+ };
55
+ var __generator = (this && this.__generator) || function (thisArg, body) {
56
+ 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);
57
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
58
+ function verb(n) { return function (v) { return step([n, v]); }; }
59
+ function step(op) {
60
+ if (f) throw new TypeError("Generator is already executing.");
61
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
62
+ 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;
63
+ if (y = 0, t) op = [op[0] & 2, t.value];
64
+ switch (op[0]) {
65
+ case 0: case 1: t = op; break;
66
+ case 4: _.label++; return { value: op[1], done: false };
67
+ case 5: _.label++; y = op[1]; op = [0]; continue;
68
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
69
+ default:
70
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
71
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
72
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
73
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
74
+ if (t[2]) _.ops.pop();
75
+ _.trys.pop(); continue;
76
+ }
77
+ op = body.call(thisArg, _);
78
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
79
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
80
+ }
81
+ };
82
+ var __importDefault = (this && this.__importDefault) || function (mod) {
83
+ return (mod && mod.__esModule) ? mod : { "default": mod };
84
+ };
85
+ Object.defineProperty(exports, "__esModule", { value: true });
86
+ var react_1 = __importStar(require("react"));
87
+ var react_2 = require("@chakra-ui/react");
88
+ var useCustomTheme_1 = require("../../Theme/useCustomTheme");
89
+ var Button_1 = __importDefault(require("../Button/Button"));
90
+ var TextInput_1 = __importDefault(require("../Input/TextInput"));
91
+ var SearchSelect_1 = __importDefault(require("../SearchSelect/SearchSelect"));
92
+ var EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
93
+ var emptyValues = {
94
+ firstName: "",
95
+ lastName: "",
96
+ email: "",
97
+ role: null,
98
+ };
99
+ var AddUserModal = function (_a) {
100
+ var _b, _c, _d, _e;
101
+ var isOpen = _a.isOpen, onClose = _a.onClose, roleOptions = _a.roleOptions, isLoading = _a.isLoading, onSubmit = _a.onSubmit, onAddRoleClick = _a.onAddRoleClick, upgradeNotice = _a.upgradeNotice, labels = _a.labels;
102
+ var colors = (0, useCustomTheme_1.useCustomTheme)().colors;
103
+ var _f = (0, react_1.useState)(emptyValues), values = _f[0], setValues = _f[1];
104
+ var _g = (0, react_1.useState)({}), errors = _g[0], setErrors = _g[1];
105
+ (0, react_1.useEffect)(function () {
106
+ if (!isOpen) {
107
+ setValues(emptyValues);
108
+ setErrors({});
109
+ }
110
+ }, [isOpen]);
111
+ var validate = function () {
112
+ var nextErrors = {};
113
+ if (!values.firstName.trim())
114
+ nextErrors.firstName = labels.firstNameRequired;
115
+ if (!values.lastName.trim())
116
+ nextErrors.lastName = labels.lastNameRequired;
117
+ if (!values.email.trim()) {
118
+ nextErrors.email = labels.emailRequired;
119
+ }
120
+ else if (!EMAIL_REGEX.test(values.email.trim())) {
121
+ nextErrors.email = labels.emailInvalid;
122
+ }
123
+ if (!values.role)
124
+ nextErrors.role = labels.roleRequired;
125
+ return nextErrors;
126
+ };
127
+ var handleChange = function (field) {
128
+ return function (event) {
129
+ var value = event.target.value;
130
+ setValues(function (prev) {
131
+ var _a;
132
+ return (__assign(__assign({}, prev), (_a = {}, _a[field] = value, _a)));
133
+ });
134
+ setErrors(function (prev) {
135
+ var _a;
136
+ return (__assign(__assign({}, prev), (_a = {}, _a[field] = undefined, _a)));
137
+ });
138
+ };
139
+ };
140
+ var handleSubmit = function () { return __awaiter(void 0, void 0, void 0, function () {
141
+ var nextErrors;
142
+ return __generator(this, function (_a) {
143
+ switch (_a.label) {
144
+ case 0:
145
+ nextErrors = validate();
146
+ if (Object.keys(nextErrors).length > 0) {
147
+ setErrors(nextErrors);
148
+ return [2 /*return*/];
149
+ }
150
+ return [4 /*yield*/, (onSubmit === null || onSubmit === void 0 ? void 0 : onSubmit({
151
+ firstName: values.firstName.trim(),
152
+ lastName: values.lastName.trim(),
153
+ email: values.email.trim(),
154
+ role: values.role,
155
+ }))];
156
+ case 1:
157
+ _a.sent();
158
+ return [2 /*return*/];
159
+ }
160
+ });
161
+ }); };
162
+ var textFields = [
163
+ {
164
+ id: "firstName",
165
+ label: labels.firstName,
166
+ placeholder: labels.firstNamePlaceholder,
167
+ },
168
+ {
169
+ id: "lastName",
170
+ label: labels.lastName,
171
+ placeholder: labels.lastNamePlaceholder,
172
+ },
173
+ {
174
+ id: "email",
175
+ label: labels.email,
176
+ placeholder: labels.emailPlaceholder,
177
+ type: "email",
178
+ },
179
+ ];
180
+ return (react_1.default.createElement(react_2.Modal, { isOpen: isOpen, onClose: onClose, trapFocus: false, isCentered: true },
181
+ react_1.default.createElement(react_2.ModalOverlay, { backdropFilter: "blur(4px)" }),
182
+ react_1.default.createElement(react_2.ModalContent, { borderRadius: "2xl", overflow: "hidden" },
183
+ react_1.default.createElement(react_2.ModalHeader, { borderBottom: "1px solid", borderColor: (_c = (_b = colors === null || colors === void 0 ? void 0 : colors.boxborder) === null || _b === void 0 ? void 0 : _b[200]) !== null && _c !== void 0 ? _c : (_d = colors === null || colors === void 0 ? void 0 : colors.gray) === null || _d === void 0 ? void 0 : _d[200] },
184
+ labels.addNewUser,
185
+ upgradeNotice),
186
+ react_1.default.createElement(react_2.ModalCloseButton, null),
187
+ react_1.default.createElement(react_2.ModalBody, { py: 5 },
188
+ react_1.default.createElement(react_2.VStack, { spacing: 4, align: "stretch" },
189
+ textFields.map(function (field) { return (react_1.default.createElement(react_2.FormControl, { key: field.id, isInvalid: !!errors[field.id] },
190
+ react_1.default.createElement(TextInput_1.default, { id: field.id, name: field.id, type: field.type, label: field.label, placeholder: field.placeholder, value: values[field.id], onChange: handleChange(field.id), isRequired: true, error: !!errors[field.id], errorMessage: errors[field.id], width: "100%" }))); }),
191
+ react_1.default.createElement(react_2.FormControl, { isInvalid: !!errors.role, isRequired: true },
192
+ react_1.default.createElement(SearchSelect_1.default, { label: labels.role, options: roleOptions.map(function (item) { return ({
193
+ id: item.id,
194
+ label: item.label,
195
+ }); }), value: (_e = values.role) !== null && _e !== void 0 ? _e : undefined, onSelect: function (option) {
196
+ if (!option) {
197
+ setValues(function (prev) { return (__assign(__assign({}, prev), { role: null })); });
198
+ }
199
+ else if (!Array.isArray(option)) {
200
+ var role_1 = {
201
+ id: Number(option.id),
202
+ label: option.label,
203
+ };
204
+ setValues(function (prev) { return (__assign(__assign({}, prev), { role: role_1 })); });
205
+ setErrors(function (prev) { return (__assign(__assign({}, prev), { role: undefined })); });
206
+ }
207
+ }, isRequired: true, isRemoveAllIcon: true, error: !!errors.role, errorMessage: errors.role, addNew: onAddRoleClick
208
+ ? {
209
+ enabled: true,
210
+ text: labels.addNewRole,
211
+ onClick: onAddRoleClick,
212
+ }
213
+ : undefined })))),
214
+ react_1.default.createElement(react_2.ModalFooter, null,
215
+ react_1.default.createElement(Button_1.default, { label: labels.cancel, onClick: onClose, colorScheme: "red", size: "sm", variant: "outline" }),
216
+ react_1.default.createElement(Button_1.default, { label: labels.save, type: "submit", colorScheme: "primary", size: "sm", sx: { ml: 3 }, isLoading: isLoading, onClick: handleSubmit })))));
217
+ };
218
+ exports.default = AddUserModal;
@@ -0,0 +1,4 @@
1
+ import React from "react";
2
+ import { ChangeRoleModalProps } from "./UserDetailsProps";
3
+ declare const ChangeRoleModal: React.FC<ChangeRoleModalProps>;
4
+ export default ChangeRoleModal;