pixelize-design-library 2.2.193 → 2.2.195

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 (213) hide show
  1. package/dist/Components/Table/Components/HeaderActions.js +22 -12
  2. package/dist/Components/Table/Table.js +4 -4
  3. package/dist/Components/Table/TableProps.d.ts +8 -3
  4. package/dist/Components/ToolTip/ToolTip.js +2 -2
  5. package/package.json +1 -1
  6. package/.claude/settings.local.json +0 -15
  7. package/coverage/clover.xml +0 -638
  8. package/coverage/coverage-final.json +0 -20
  9. package/coverage/lcov-report/Table/CompactSelect.tsx.html +0 -379
  10. package/coverage/lcov-report/Table/Components/ActiveFilters.tsx.html +0 -514
  11. package/coverage/lcov-report/Table/Components/HeaderActions.tsx.html +0 -373
  12. package/coverage/lcov-report/Table/Components/Pagination.tsx.html +0 -574
  13. package/coverage/lcov-report/Table/Components/TableActions.tsx.html +0 -574
  14. package/coverage/lcov-report/Table/Components/TableBody.tsx.html +0 -1027
  15. package/coverage/lcov-report/Table/Components/TableFilters.tsx.html +0 -397
  16. package/coverage/lcov-report/Table/Components/TableHeader.tsx.html +0 -1060
  17. package/coverage/lcov-report/Table/Components/TableLoading.tsx.html +0 -361
  18. package/coverage/lcov-report/Table/Components/TableSearch.tsx.html +0 -337
  19. package/coverage/lcov-report/Table/Components/index.html +0 -266
  20. package/coverage/lcov-report/Table/Components/useDebounce.ts.html +0 -178
  21. package/coverage/lcov-report/Table/Components/useTable.ts.html +0 -778
  22. package/coverage/lcov-report/Table/LeftFilterPane.tsx.html +0 -1810
  23. package/coverage/lcov-report/Table/SelectOperationControls.tsx.html +0 -178
  24. package/coverage/lcov-report/Table/Table.tsx.html +0 -1567
  25. package/coverage/lcov-report/Table/TableProps.tsx.html +0 -658
  26. package/coverage/lcov-report/Table/TableSettings/ManageColumns.tsx.html +0 -619
  27. package/coverage/lcov-report/Table/TableSettings/TableFilters.tsx.html +0 -229
  28. package/coverage/lcov-report/Table/TableSettings/TableSettings.tsx.html +0 -532
  29. package/coverage/lcov-report/Table/TableSettings/index.html +0 -146
  30. package/coverage/lcov-report/Table/TableToDo.tsx.html +0 -973
  31. package/coverage/lcov-report/Table/TextOperationControls.tsx.html +0 -271
  32. package/coverage/lcov-report/Table/filterTypes.ts.html +0 -97
  33. package/coverage/lcov-report/Table/index.html +0 -176
  34. package/coverage/lcov-report/base.css +0 -224
  35. package/coverage/lcov-report/block-navigation.js +0 -87
  36. package/coverage/lcov-report/favicon.png +0 -0
  37. package/coverage/lcov-report/index.html +0 -146
  38. package/coverage/lcov-report/prettify.css +0 -1
  39. package/coverage/lcov-report/prettify.js +0 -2
  40. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  41. package/coverage/lcov-report/sorter.js +0 -210
  42. package/coverage/lcov.info +0 -1836
  43. package/dist/Assets/defaultLogo.tsx +0 -31
  44. package/dist/Theme/Dark/palette.d.ts +0 -370
  45. package/dist/Theme/Dark/palette.js +0 -372
  46. package/dist/components-v2/AlertDialog/AlertDialog.d.ts +0 -23
  47. package/dist/components-v2/AlertDialog/AlertDialog.js +0 -98
  48. package/dist/components-v2/Breadcrumbs/Breadcrumbs.d.ts +0 -14
  49. package/dist/components-v2/Breadcrumbs/Breadcrumbs.js +0 -66
  50. package/dist/components-v2/Charts/AreaChart.d.ts +0 -23
  51. package/dist/components-v2/Charts/AreaChart.js +0 -63
  52. package/dist/components-v2/Charts/BarChart.d.ts +0 -25
  53. package/dist/components-v2/Charts/BarChart.js +0 -57
  54. package/dist/components-v2/Charts/LineChart.d.ts +0 -23
  55. package/dist/components-v2/Charts/LineChart.js +0 -55
  56. package/dist/components-v2/Charts/PieChart.d.ts +0 -15
  57. package/dist/components-v2/Charts/PieChart.js +0 -54
  58. package/dist/components-v2/Charts/PolarChart.d.ts +0 -14
  59. package/dist/components-v2/Charts/PolarChart.js +0 -54
  60. package/dist/components-v2/Charts/chartOptions.d.ts +0 -7
  61. package/dist/components-v2/Charts/chartOptions.js +0 -41
  62. package/dist/components-v2/Charts/useChartTheme.d.ts +0 -22
  63. package/dist/components-v2/Charts/useChartTheme.js +0 -106
  64. package/dist/components-v2/ContactForm/ContactForm.d.ts +0 -25
  65. package/dist/components-v2/ContactForm/ContactForm.js +0 -116
  66. package/dist/components-v2/DatePicker/Calendar.d.ts +0 -19
  67. package/dist/components-v2/DatePicker/Calendar.js +0 -212
  68. package/dist/components-v2/DatePicker/DatePicker.d.ts +0 -46
  69. package/dist/components-v2/DatePicker/DatePicker.js +0 -189
  70. package/dist/components-v2/DatePicker/TimePicker.d.ts +0 -12
  71. package/dist/components-v2/DatePicker/TimePicker.js +0 -105
  72. package/dist/components-v2/DatePicker/utils.d.ts +0 -31
  73. package/dist/components-v2/DatePicker/utils.js +0 -109
  74. package/dist/components-v2/Drawer/Drawer.d.ts +0 -27
  75. package/dist/components-v2/Drawer/Drawer.js +0 -132
  76. package/dist/components-v2/FeedbackForm/FeedbackForm.d.ts +0 -26
  77. package/dist/components-v2/FeedbackForm/FeedbackForm.js +0 -112
  78. package/dist/components-v2/FileUploader/FileUploader.d.ts +0 -28
  79. package/dist/components-v2/FileUploader/FileUploader.js +0 -127
  80. package/dist/components-v2/Input/TextInput.d.ts +0 -41
  81. package/dist/components-v2/Input/TextInput.js +0 -169
  82. package/dist/components-v2/KanbanBoard/KanbanBoard.d.ts +0 -39
  83. package/dist/components-v2/KanbanBoard/KanbanBoard.js +0 -101
  84. package/dist/components-v2/Layout/AppLayout.d.ts +0 -22
  85. package/dist/components-v2/Layout/AppLayout.js +0 -53
  86. package/dist/components-v2/Loading/Loading.d.ts +0 -19
  87. package/dist/components-v2/Loading/Loading.js +0 -55
  88. package/dist/components-v2/Modal/Modal.d.ts +0 -30
  89. package/dist/components-v2/Modal/Modal.js +0 -82
  90. package/dist/components-v2/NavigationBar/NavigationBar.d.ts +0 -47
  91. package/dist/components-v2/NavigationBar/NavigationBar.js +0 -148
  92. package/dist/components-v2/Notification/Notification.d.ts +0 -22
  93. package/dist/components-v2/Notification/Notification.js +0 -113
  94. package/dist/components-v2/NumberInput/NumberInput.d.ts +0 -37
  95. package/dist/components-v2/NumberInput/NumberInput.js +0 -210
  96. package/dist/components-v2/PinInput/PinInput.d.ts +0 -26
  97. package/dist/components-v2/PinInput/PinInput.js +0 -138
  98. package/dist/components-v2/ProfilePhotoViewer/ProfilePhotoViewer.d.ts +0 -18
  99. package/dist/components-v2/ProfilePhotoViewer/ProfilePhotoViewer.js +0 -91
  100. package/dist/components-v2/Select/Select.d.ts +0 -41
  101. package/dist/components-v2/Select/Select.js +0 -284
  102. package/dist/components-v2/Sidebar/Sidebar.d.ts +0 -41
  103. package/dist/components-v2/Sidebar/Sidebar.js +0 -182
  104. package/dist/components-v2/Slider/Slider.d.ts +0 -18
  105. package/dist/components-v2/Slider/Slider.js +0 -101
  106. package/dist/components-v2/Table/Table.d.ts +0 -7
  107. package/dist/components-v2/Table/Table.js +0 -172
  108. package/dist/components-v2/Table/TableProps.d.ts +0 -139
  109. package/dist/components-v2/Table/TableProps.js +0 -9
  110. package/dist/components-v2/Table/components/ActiveFilters.d.ts +0 -10
  111. package/dist/components-v2/Table/components/ActiveFilters.js +0 -70
  112. package/dist/components-v2/Table/components/BulkActionBar.d.ts +0 -11
  113. package/dist/components-v2/Table/components/BulkActionBar.js +0 -92
  114. package/dist/components-v2/Table/components/ColumnResizeHandle.d.ts +0 -7
  115. package/dist/components-v2/Table/components/ColumnResizeHandle.js +0 -41
  116. package/dist/components-v2/Table/components/Pagination.d.ts +0 -11
  117. package/dist/components-v2/Table/components/Pagination.js +0 -92
  118. package/dist/components-v2/Table/components/TableBody.d.ts +0 -23
  119. package/dist/components-v2/Table/components/TableBody.js +0 -69
  120. package/dist/components-v2/Table/components/TableCell.d.ts +0 -14
  121. package/dist/components-v2/Table/components/TableCell.js +0 -63
  122. package/dist/components-v2/Table/components/TableEmptyState.d.ts +0 -12
  123. package/dist/components-v2/Table/components/TableEmptyState.js +0 -55
  124. package/dist/components-v2/Table/components/TableErrorState.d.ts +0 -6
  125. package/dist/components-v2/Table/components/TableErrorState.js +0 -52
  126. package/dist/components-v2/Table/components/TableHeader.d.ts +0 -21
  127. package/dist/components-v2/Table/components/TableHeader.js +0 -94
  128. package/dist/components-v2/Table/components/TableRow.d.ts +0 -20
  129. package/dist/components-v2/Table/components/TableRow.js +0 -64
  130. package/dist/components-v2/Table/components/TableSearch.d.ts +0 -8
  131. package/dist/components-v2/Table/components/TableSearch.js +0 -47
  132. package/dist/components-v2/Table/filters/FilterChips.d.ts +0 -6
  133. package/dist/components-v2/Table/filters/FilterChips.js +0 -9
  134. package/dist/components-v2/Table/filters/LeftFilterPane.d.ts +0 -17
  135. package/dist/components-v2/Table/filters/LeftFilterPane.js +0 -105
  136. package/dist/components-v2/Table/filters/TableFilters.d.ts +0 -12
  137. package/dist/components-v2/Table/filters/TableFilters.js +0 -127
  138. package/dist/components-v2/Table/hooks/useColumnResize.d.ts +0 -15
  139. package/dist/components-v2/Table/hooks/useColumnResize.js +0 -104
  140. package/dist/components-v2/Table/hooks/useTable.d.ts +0 -58
  141. package/dist/components-v2/Table/hooks/useTable.js +0 -254
  142. package/dist/components-v2/Table/hooks/useTableKeyboard.d.ts +0 -25
  143. package/dist/components-v2/Table/hooks/useTableKeyboard.js +0 -112
  144. package/dist/components-v2/Table/hooks/useVirtualScroll.d.ts +0 -29
  145. package/dist/components-v2/Table/hooks/useVirtualScroll.js +0 -83
  146. package/dist/components-v2/Table/settings/ManageColumns.d.ts +0 -12
  147. package/dist/components-v2/Table/settings/ManageColumns.js +0 -59
  148. package/dist/components-v2/Table/settings/TableSettings.d.ts +0 -12
  149. package/dist/components-v2/Table/settings/TableSettings.js +0 -57
  150. package/dist/components-v2/Table/utils/filterUtils.d.ts +0 -7
  151. package/dist/components-v2/Table/utils/filterUtils.js +0 -149
  152. package/dist/components-v2/Table/utils/sortUtils.d.ts +0 -6
  153. package/dist/components-v2/Table/utils/sortUtils.js +0 -65
  154. package/dist/components-v2/Tag/Tag.d.ts +0 -15
  155. package/dist/components-v2/Tag/Tag.js +0 -87
  156. package/dist/components-v2/Timeline/Timeline.d.ts +0 -18
  157. package/dist/components-v2/Timeline/Timeline.js +0 -76
  158. package/dist/components-v2/Toaster/Toaster.d.ts +0 -61
  159. package/dist/components-v2/Toaster/Toaster.js +0 -63
  160. package/dist/components-v2/Toggle/Toggle.d.ts +0 -28
  161. package/dist/components-v2/Toggle/Toggle.js +0 -90
  162. package/dist/components-v2/ui/accordion.d.ts +0 -12
  163. package/dist/components-v2/ui/accordion.js +0 -104
  164. package/dist/components-v2/ui/alert.d.ts +0 -18
  165. package/dist/components-v2/ui/alert.js +0 -99
  166. package/dist/components-v2/ui/avatar.d.ts +0 -12
  167. package/dist/components-v2/ui/avatar.js +0 -80
  168. package/dist/components-v2/ui/badge.d.ts +0 -10
  169. package/dist/components-v2/ui/badge.js +0 -76
  170. package/dist/components-v2/ui/button.d.ts +0 -18
  171. package/dist/components-v2/ui/button.js +0 -97
  172. package/dist/components-v2/ui/checkbox.d.ts +0 -15
  173. package/dist/components-v2/ui/checkbox.js +0 -86
  174. package/dist/components-v2/ui/dialog.d.ts +0 -30
  175. package/dist/components-v2/ui/dialog.js +0 -115
  176. package/dist/components-v2/ui/dropdown-menu.d.ts +0 -26
  177. package/dist/components-v2/ui/dropdown-menu.js +0 -121
  178. package/dist/components-v2/ui/field.d.ts +0 -32
  179. package/dist/components-v2/ui/field.js +0 -62
  180. package/dist/components-v2/ui/form-field.d.ts +0 -25
  181. package/dist/components-v2/ui/form-field.js +0 -96
  182. package/dist/components-v2/ui/input.d.ts +0 -9
  183. package/dist/components-v2/ui/input.js +0 -73
  184. package/dist/components-v2/ui/label.d.ts +0 -10
  185. package/dist/components-v2/ui/label.js +0 -70
  186. package/dist/components-v2/ui/popover.d.ts +0 -9
  187. package/dist/components-v2/ui/popover.js +0 -60
  188. package/dist/components-v2/ui/progress.d.ts +0 -12
  189. package/dist/components-v2/ui/progress.js +0 -75
  190. package/dist/components-v2/ui/radio-group.d.ts +0 -17
  191. package/dist/components-v2/ui/radio-group.js +0 -91
  192. package/dist/components-v2/ui/select.d.ts +0 -24
  193. package/dist/components-v2/ui/select.js +0 -122
  194. package/dist/components-v2/ui/separator.d.ts +0 -5
  195. package/dist/components-v2/ui/separator.js +0 -55
  196. package/dist/components-v2/ui/skeleton.d.ts +0 -9
  197. package/dist/components-v2/ui/skeleton.js +0 -68
  198. package/dist/components-v2/ui/spinner.d.ts +0 -16
  199. package/dist/components-v2/ui/spinner.js +0 -64
  200. package/dist/components-v2/ui/switch.d.ts +0 -10
  201. package/dist/components-v2/ui/switch.js +0 -81
  202. package/dist/components-v2/ui/tabs.d.ts +0 -13
  203. package/dist/components-v2/ui/tabs.js +0 -95
  204. package/dist/components-v2/ui/textarea.d.ts +0 -10
  205. package/dist/components-v2/ui/textarea.js +0 -96
  206. package/dist/components-v2/ui/tooltip.d.ts +0 -17
  207. package/dist/components-v2/ui/tooltip.js +0 -75
  208. package/dist/lib/utils.d.ts +0 -2
  209. package/dist/lib/utils.js +0 -8
  210. package/dist/theme-v2/ThemeProvider.d.ts +0 -19
  211. package/dist/theme-v2/ThemeProvider.js +0 -149
  212. package/dist/theme-v2/dark.css +0 -47
  213. package/dist/theme-v2/tokens.css +0 -72
@@ -1,138 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.PinInput = void 0;
37
- const React = __importStar(require("react"));
38
- const utils_1 = require("../../lib/utils");
39
- const field_1 = require("../ui/field");
40
- const SIZE_CLASS = {
41
- sm: "h-9 w-9 text-sm",
42
- md: "h-11 w-11 text-base",
43
- lg: "h-12 w-12 text-lg",
44
- };
45
- function normalize(raw, type) {
46
- if (type === "number")
47
- return raw.replace(/[^0-9]/g, "");
48
- return raw.replace(/[^A-Za-z0-9]/g, "");
49
- }
50
- exports.PinInput = React.forwardRef((props, ref) => {
51
- const { id, label, helperText, error, errorMessage, isRequired, length = 6, type = "number", value, defaultValue, onChange, onComplete, autoFocus, mask = false, size = "md", name, isDisabled, className, } = props;
52
- const isControlled = value !== undefined;
53
- const [internalValue, setInternalValue] = React.useState((defaultValue !== null && defaultValue !== void 0 ? defaultValue : "").slice(0, length));
54
- const current = (isControlled ? value : internalValue).slice(0, length);
55
- const inputRefs = React.useRef([]);
56
- const setValue = (next) => {
57
- const normalized = normalize(next, type).slice(0, length);
58
- if (!isControlled)
59
- setInternalValue(normalized);
60
- onChange === null || onChange === void 0 ? void 0 : onChange(normalized);
61
- if (normalized.length === length)
62
- onComplete === null || onComplete === void 0 ? void 0 : onComplete(normalized);
63
- };
64
- const focusIndex = (index) => {
65
- const target = inputRefs.current[index];
66
- if (target) {
67
- target.focus();
68
- target.select();
69
- }
70
- };
71
- const handleInput = (index, event) => {
72
- const raw = event.target.value;
73
- if (raw.length > 1) {
74
- const cleaned = normalize(raw, type).slice(0, length);
75
- setValue(cleaned.padEnd(0, ""));
76
- focusIndex(Math.min(cleaned.length, length - 1));
77
- return;
78
- }
79
- const char = normalize(raw, type).slice(-1);
80
- const chars = current.split("");
81
- chars[index] = char;
82
- const joined = chars.join("").replace(/\s+$/, "");
83
- setValue(joined);
84
- if (char && index < length - 1)
85
- focusIndex(index + 1);
86
- };
87
- const handleKeyDown = (index, event) => {
88
- if (event.key === "Backspace") {
89
- if (current[index]) {
90
- const chars = current.split("");
91
- chars[index] = "";
92
- setValue(chars.join(""));
93
- }
94
- else if (index > 0) {
95
- focusIndex(index - 1);
96
- const chars = current.split("");
97
- chars[index - 1] = "";
98
- setValue(chars.join(""));
99
- }
100
- event.preventDefault();
101
- return;
102
- }
103
- if (event.key === "ArrowLeft" && index > 0) {
104
- event.preventDefault();
105
- focusIndex(index - 1);
106
- return;
107
- }
108
- if (event.key === "ArrowRight" && index < length - 1) {
109
- event.preventDefault();
110
- focusIndex(index + 1);
111
- return;
112
- }
113
- };
114
- const handlePaste = (event) => {
115
- const pasted = event.clipboardData.getData("text");
116
- if (!pasted)
117
- return;
118
- event.preventDefault();
119
- const cleaned = normalize(pasted, type).slice(0, length);
120
- setValue(cleaned);
121
- focusIndex(Math.min(cleaned.length, length - 1));
122
- };
123
- const boxes = (React.createElement("div", { ref: ref, role: "group", "aria-label": typeof label === "string" ? label : "Pin input", className: (0, utils_1.cn)("flex items-center gap-2", className) },
124
- Array.from({ length }).map((_, index) => {
125
- var _a;
126
- const char = (_a = current[index]) !== null && _a !== void 0 ? _a : "";
127
- return (React.createElement("input", { key: index, ref: (node) => {
128
- inputRefs.current[index] = node;
129
- }, type: mask ? "password" : "text", inputMode: type === "number" ? "numeric" : "text", autoComplete: index === 0 ? "one-time-code" : "off", autoFocus: autoFocus && index === 0, disabled: isDisabled, maxLength: 1, value: char, onChange: (event) => handleInput(index, event), onKeyDown: (event) => handleKeyDown(index, event), onPaste: handlePaste, onFocus: (event) => event.target.select(), "aria-label": `Digit ${index + 1} of ${length}`, "aria-invalid": error || undefined, className: (0, utils_1.cn)("shrink-0 rounded-md border border-input bg-background text-center font-medium tabular-nums shadow-sm transition-colors", "focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1", "disabled:cursor-not-allowed disabled:opacity-50", error &&
130
- "border-destructive focus-visible:ring-destructive", SIZE_CLASS[size]) }));
131
- }),
132
- name && (React.createElement("input", { type: "hidden", name: name, value: current }))));
133
- if (label || helperText || errorMessage) {
134
- return (React.createElement(field_1.Field, { id: id, label: label, helperText: helperText, error: error, errorMessage: errorMessage, isRequired: isRequired }, boxes));
135
- }
136
- return boxes;
137
- });
138
- exports.PinInput.displayName = "PinInput";
@@ -1,18 +0,0 @@
1
- import * as React from "react";
2
- export type ProfilePhotoSize = "sm" | "md" | "lg" | "xl";
3
- export interface ProfilePhotoViewerProps {
4
- src?: string;
5
- name?: string;
6
- initials?: string;
7
- size?: ProfilePhotoSize;
8
- /** When true, hover overlay shows a camera icon; click opens file picker. */
9
- editable?: boolean;
10
- onPhotoChange?: (file: File) => void;
11
- /** Accept attribute for the hidden file input. */
12
- accept?: string;
13
- className?: string;
14
- }
15
- export declare function ProfilePhotoViewer({ src, name, initials, size, editable, onPhotoChange, accept, className, }: ProfilePhotoViewerProps): React.ReactElement;
16
- export declare namespace ProfilePhotoViewer {
17
- var displayName: string;
18
- }
@@ -1,91 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- Object.defineProperty(exports, "__esModule", { value: true });
36
- exports.ProfilePhotoViewer = ProfilePhotoViewer;
37
- const React = __importStar(require("react"));
38
- const lucide_react_1 = require("lucide-react");
39
- const utils_1 = require("../../lib/utils");
40
- const avatar_1 = require("../ui/avatar");
41
- const dialog_1 = require("../ui/dialog");
42
- const SIZE_PX = {
43
- sm: 32,
44
- md: 48,
45
- lg: 80,
46
- xl: 128,
47
- };
48
- function ProfilePhotoViewer({ src, name, initials, size = "lg", editable = false, onPhotoChange, accept = "image/*", className, }) {
49
- const [viewerOpen, setViewerOpen] = React.useState(false);
50
- const fileInputRef = React.useRef(null);
51
- const resolvedInitials = initials !== null && initials !== void 0 ? initials : (name
52
- ? name
53
- .split(/\s+/)
54
- .map((part) => part[0])
55
- .filter(Boolean)
56
- .slice(0, 2)
57
- .join("")
58
- .toUpperCase()
59
- : "?");
60
- const px = SIZE_PX[size];
61
- const handleEditClick = (event) => {
62
- var _a;
63
- event.stopPropagation();
64
- (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click();
65
- };
66
- const handleFile = (event) => {
67
- var _a;
68
- const file = (_a = event.target.files) === null || _a === void 0 ? void 0 : _a[0];
69
- if (file)
70
- onPhotoChange === null || onPhotoChange === void 0 ? void 0 : onPhotoChange(file);
71
- event.target.value = "";
72
- };
73
- return (React.createElement(React.Fragment, null,
74
- React.createElement("div", { className: (0, utils_1.cn)("relative inline-flex shrink-0", className), style: { width: px, height: px } },
75
- React.createElement("button", { type: "button", onClick: () => src && setViewerOpen(true), "aria-label": src
76
- ? `View photo of ${name !== null && name !== void 0 ? name : "user"}`
77
- : `${name !== null && name !== void 0 ? name : "User"} profile photo`, className: (0, utils_1.cn)("h-full w-full rounded-full focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background", !src && "cursor-default"), disabled: !src },
78
- React.createElement(avatar_1.Avatar, { size: size === "sm" ? "sm" : size === "md" ? "md" : "lg", className: "h-full w-full" },
79
- src && React.createElement(avatar_1.AvatarImage, { src: src, alt: name !== null && name !== void 0 ? name : "Profile" }),
80
- React.createElement(avatar_1.AvatarFallback, null, resolvedInitials))),
81
- editable && (React.createElement("button", { type: "button", onClick: handleEditClick, "aria-label": "Change profile photo", className: (0, utils_1.cn)("absolute inset-0 grid place-items-center rounded-full bg-foreground/60 text-background opacity-0 transition-opacity", "hover:opacity-100 focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background") },
82
- React.createElement(lucide_react_1.Camera, { "aria-hidden": "true", className: (0, utils_1.cn)(size === "sm" ? "h-3.5 w-3.5" : "h-5 w-5") }))),
83
- editable && (React.createElement("input", { ref: fileInputRef, type: "file", accept: accept, className: "sr-only", onChange: handleFile }))),
84
- React.createElement(dialog_1.Dialog, { open: viewerOpen, onOpenChange: setViewerOpen },
85
- React.createElement(dialog_1.DialogContent, { size: "lg" },
86
- React.createElement(dialog_1.DialogHeader, null,
87
- React.createElement(dialog_1.DialogTitle, null, name !== null && name !== void 0 ? name : "Profile photo")),
88
- src && (React.createElement("div", { className: "flex items-center justify-center" },
89
- React.createElement("img", { src: src, alt: name !== null && name !== void 0 ? name : "Profile", className: "max-h-[60vh] w-auto rounded-md object-contain" })))))));
90
- }
91
- ProfilePhotoViewer.displayName = "ProfilePhotoViewer";
@@ -1,41 +0,0 @@
1
- import * as React from "react";
2
- export interface SelectOption {
3
- value: string;
4
- label: string;
5
- description?: string;
6
- icon?: React.ReactNode;
7
- disabled?: boolean;
8
- group?: string;
9
- }
10
- export type SelectSize = "sm" | "md" | "lg";
11
- export interface SelectProps {
12
- options: SelectOption[];
13
- value?: string | string[];
14
- defaultValue?: string | string[];
15
- onChange?: (value: string | string[]) => void;
16
- multiple?: boolean;
17
- searchable?: boolean;
18
- clearable?: boolean;
19
- creatable?: boolean;
20
- onCreateOption?: (inputValue: string) => void;
21
- placeholder?: string;
22
- label?: React.ReactNode;
23
- helperText?: React.ReactNode;
24
- error?: boolean;
25
- errorMessage?: React.ReactNode;
26
- isInformation?: boolean;
27
- informationMessage?: React.ReactNode;
28
- isRequired?: boolean;
29
- isDisabled?: boolean;
30
- isLoading?: boolean;
31
- size?: SelectSize;
32
- width?: string;
33
- maxDisplayed?: number;
34
- onSearch?: (query: string) => void;
35
- emptyMessage?: React.ReactNode;
36
- loadingMessage?: React.ReactNode;
37
- id?: string;
38
- name?: string;
39
- className?: string;
40
- }
41
- export declare const Select: React.ForwardRefExoticComponent<SelectProps & React.RefAttributes<HTMLButtonElement>>;
@@ -1,284 +0,0 @@
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 __rest = (this && this.__rest) || function (s, e) {
36
- var t = {};
37
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
38
- t[p] = s[p];
39
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
40
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
41
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
42
- t[p[i]] = s[p[i]];
43
- }
44
- return t;
45
- };
46
- Object.defineProperty(exports, "__esModule", { value: true });
47
- exports.Select = void 0;
48
- const React = __importStar(require("react"));
49
- const lucide_react_1 = require("lucide-react");
50
- const cmdk_1 = require("cmdk");
51
- const utils_1 = require("../../lib/utils");
52
- const badge_1 = require("../ui/badge");
53
- const field_1 = require("../ui/field");
54
- const popover_1 = require("../ui/popover");
55
- const select_1 = require("../ui/select");
56
- const skeleton_1 = require("../ui/skeleton");
57
- const spinner_1 = require("../ui/spinner");
58
- const form_field_1 = require("../ui/form-field");
59
- const TRIGGER_SIZE = {
60
- sm: "min-h-8 text-xs px-2.5",
61
- md: "min-h-9 text-sm px-3",
62
- lg: "min-h-10 text-base px-3.5",
63
- };
64
- exports.Select = React.forwardRef((props, ref) => {
65
- const { id, label, helperText, error, errorMessage, isInformation, informationMessage, isRequired, width, className } = props, controlProps = __rest(props, ["id", "label", "helperText", "error", "errorMessage", "isInformation", "informationMessage", "isRequired", "width", "className"]);
66
- return (React.createElement(field_1.Field, { id: id, label: label, isRequired: isRequired, isInformation: isInformation, informationMessage: informationMessage, helperText: helperText, error: error, errorMessage: errorMessage, width: width },
67
- React.createElement(SelectControl, Object.assign({ ref: ref, error: error, className: className }, controlProps))));
68
- });
69
- exports.Select.displayName = "Select";
70
- const SelectControl = React.forwardRef((props, ref) => {
71
- const { options, value, defaultValue, onChange, multiple = false, searchable = false, clearable = false, creatable = false, onCreateOption, placeholder = "Select…", isDisabled = false, isLoading = false, size = "md", maxDisplayed = 3, onSearch, emptyMessage = "No options found", loadingMessage = "Loading…", name, error, className, } = props;
72
- if (!multiple && !searchable) {
73
- return (React.createElement(SimpleRadixSelect, { ref: ref, options: options, value: value, defaultValue: defaultValue, onChange: (v) => onChange === null || onChange === void 0 ? void 0 : onChange(v), placeholder: placeholder, isDisabled: isDisabled || isLoading, size: size, name: name, error: error, className: className, loadingMessage: loadingMessage, isLoading: isLoading }));
74
- }
75
- return (React.createElement(ComboSelect, { ref: ref, options: options, value: value, defaultValue: defaultValue, onChange: onChange, multiple: multiple, clearable: clearable, creatable: creatable, onCreateOption: onCreateOption, placeholder: placeholder, isDisabled: isDisabled, isLoading: isLoading, size: size, maxDisplayed: maxDisplayed, onSearch: onSearch, emptyMessage: emptyMessage, loadingMessage: loadingMessage, error: error, className: className, name: name }));
76
- });
77
- SelectControl.displayName = "SelectControl";
78
- const SimpleRadixSelect = React.forwardRef(({ options, value, defaultValue, onChange, placeholder, isDisabled, size, name, error, className, loadingMessage, isLoading, }, ref) => {
79
- const field = (0, form_field_1.useFormField)();
80
- const grouped = useGroupedOptions(options);
81
- return (React.createElement(select_1.Select, { value: value, defaultValue: defaultValue, onValueChange: onChange, disabled: isDisabled, name: name },
82
- React.createElement(select_1.SelectTrigger, { ref: ref, id: field.id || undefined, size: size, "aria-invalid": error || field.hasError || undefined, className: (0, utils_1.cn)(error &&
83
- "border-destructive bg-destructive/5 focus:ring-destructive", className) },
84
- React.createElement(select_1.SelectValue, { placeholder: placeholder }),
85
- isLoading && (React.createElement(spinner_1.Spinner, { size: "sm", className: "ml-2", label: String(loadingMessage) }))),
86
- React.createElement(select_1.SelectContent, null, grouped.map((group) => {
87
- var _a;
88
- return (React.createElement(select_1.SelectGroup, { key: (_a = group.label) !== null && _a !== void 0 ? _a : "__root" },
89
- group.label && (React.createElement(select_1.SelectLabel, null, group.label)),
90
- group.options.map((option) => (React.createElement(select_1.SelectItem, { key: option.value, value: option.value, disabled: option.disabled },
91
- React.createElement("span", { className: "flex items-center gap-2" },
92
- option.icon,
93
- React.createElement("span", { className: "flex flex-col" },
94
- React.createElement("span", null, option.label),
95
- option.description && (React.createElement("span", { className: "text-xs text-muted-foreground" }, option.description)))))))));
96
- }))));
97
- });
98
- SimpleRadixSelect.displayName = "SimpleRadixSelect";
99
- const ComboSelect = React.forwardRef(({ options, value, defaultValue, onChange, multiple, clearable, creatable, onCreateOption, placeholder, isDisabled, isLoading, size, maxDisplayed, onSearch, emptyMessage, loadingMessage, error, className, name, }, ref) => {
100
- var _a;
101
- const field = (0, form_field_1.useFormField)();
102
- const isControlled = value !== undefined;
103
- const [internalValue, setInternalValue] = React.useState(() => {
104
- if (defaultValue !== undefined)
105
- return defaultValue;
106
- return multiple ? [] : "";
107
- });
108
- const currentValue = isControlled ? value : internalValue;
109
- const [open, setOpen] = React.useState(false);
110
- const [query, setQuery] = React.useState("");
111
- const debouncedQuery = useDebouncedValue(query, 150);
112
- React.useEffect(() => {
113
- if (onSearch)
114
- onSearch(query);
115
- }, [query, onSearch]);
116
- const filtered = React.useMemo(() => {
117
- if (onSearch)
118
- return options;
119
- if (!debouncedQuery.trim())
120
- return options;
121
- const q = debouncedQuery.toLowerCase();
122
- return options.filter((o) => {
123
- var _a;
124
- return o.label.toLowerCase().includes(q) ||
125
- o.value.toLowerCase().includes(q) ||
126
- ((_a = o.description) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes(q));
127
- });
128
- }, [options, debouncedQuery, onSearch]);
129
- const grouped = useGroupedOptions(filtered);
130
- const setValue = (next) => {
131
- if (!isControlled)
132
- setInternalValue(next);
133
- onChange === null || onChange === void 0 ? void 0 : onChange(next);
134
- };
135
- const selectedValues = React.useMemo(() => {
136
- if (multiple)
137
- return new Set(Array.isArray(currentValue) ? currentValue : []);
138
- return new Set(typeof currentValue === "string" && currentValue ? [currentValue] : []);
139
- }, [currentValue, multiple]);
140
- const selectedOptions = React.useMemo(() => {
141
- return options.filter((o) => selectedValues.has(o.value));
142
- }, [options, selectedValues]);
143
- const handleSelect = (optionValue) => {
144
- if (multiple) {
145
- const arr = Array.isArray(currentValue) ? currentValue : [];
146
- const next = arr.includes(optionValue)
147
- ? arr.filter((v) => v !== optionValue)
148
- : [...arr, optionValue];
149
- setValue(next);
150
- }
151
- else {
152
- setValue(optionValue);
153
- setOpen(false);
154
- }
155
- setQuery("");
156
- };
157
- const removeValue = (optionValue) => {
158
- if (multiple) {
159
- const arr = Array.isArray(currentValue) ? currentValue : [];
160
- setValue(arr.filter((v) => v !== optionValue));
161
- }
162
- else {
163
- setValue("");
164
- }
165
- };
166
- const clearAll = (event) => {
167
- event.stopPropagation();
168
- setValue(multiple ? [] : "");
169
- };
170
- const hasValue = multiple
171
- ? Array.isArray(currentValue) && currentValue.length > 0
172
- : !!currentValue;
173
- const showCreate = creatable &&
174
- query.trim() !== "" &&
175
- !filtered.some((o) => o.label.toLowerCase() === query.trim().toLowerCase());
176
- return (React.createElement(React.Fragment, null,
177
- React.createElement(popover_1.Popover, { open: open, onOpenChange: setOpen },
178
- React.createElement(popover_1.PopoverTrigger, { asChild: true },
179
- React.createElement("button", { ref: ref, type: "button", id: field.id || undefined, role: "combobox", "aria-expanded": open, "aria-haspopup": "listbox", "aria-autocomplete": "list", "aria-invalid": error || field.hasError || undefined, disabled: isDisabled || isLoading, className: (0, utils_1.cn)("group flex w-full items-center justify-between gap-2 rounded-md border border-input bg-background text-foreground shadow-sm transition-colors", "focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-1 focus:ring-offset-background", "disabled:cursor-not-allowed disabled:opacity-50", "data-[state=open]:ring-2 data-[state=open]:ring-ring", TRIGGER_SIZE[size], error &&
180
- "border-destructive bg-destructive/5 focus:ring-destructive", className) },
181
- React.createElement(SelectedChips, { multiple: multiple, selectedOptions: selectedOptions, maxDisplayed: maxDisplayed, placeholder: placeholder, removeValue: removeValue, isDisabled: isDisabled }),
182
- React.createElement("span", { className: "ml-auto flex items-center gap-1 text-muted-foreground" },
183
- isLoading && React.createElement(spinner_1.Spinner, { size: "sm" }),
184
- clearable && hasValue && !isDisabled && (React.createElement("button", { type: "button", "aria-label": "Clear selection", onClick: clearAll, className: "rounded-sm hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" },
185
- React.createElement(lucide_react_1.X, { className: "h-4 w-4" }))),
186
- React.createElement(lucide_react_1.ChevronDown, { className: "h-4 w-4 opacity-60 transition-transform group-data-[state=open]:rotate-180" })))),
187
- React.createElement(popover_1.PopoverContent, { align: "start", className: "w-[var(--radix-popover-trigger-width)] p-0" },
188
- React.createElement(cmdk_1.Command, { shouldFilter: false, className: "flex max-h-72 flex-col overflow-hidden" },
189
- React.createElement("div", { className: "flex shrink-0 items-center gap-2 border-b border-border px-2" },
190
- React.createElement(lucide_react_1.Search, { "aria-hidden": "true", className: "h-4 w-4 shrink-0 text-muted-foreground" }),
191
- React.createElement(cmdk_1.CommandInput, { autoFocus: true, value: query, onValueChange: setQuery, placeholder: "Search\u2026", className: "flex-1 bg-transparent py-2 text-sm outline-none placeholder:text-muted-foreground" })),
192
- React.createElement(cmdk_1.CommandList, { className: "max-h-[16rem] flex-1 overflow-y-auto py-1" }, isLoading ? (React.createElement("div", { className: "space-y-1.5 px-2 py-2" },
193
- React.createElement(skeleton_1.Skeleton, { variant: "text", className: "w-full" }),
194
- React.createElement(skeleton_1.Skeleton, { variant: "text", className: "w-3/4" }),
195
- React.createElement(skeleton_1.Skeleton, { variant: "text", className: "w-1/2" }))) : grouped.length === 0 && !showCreate ? (React.createElement(cmdk_1.CommandEmpty, { className: "px-3 py-4 text-center text-sm text-muted-foreground" }, emptyMessage)) : (React.createElement(React.Fragment, null,
196
- grouped.map((group, idx) => {
197
- var _a;
198
- return (React.createElement(React.Fragment, { key: (_a = group.label) !== null && _a !== void 0 ? _a : "__root" },
199
- idx > 0 && (React.createElement(cmdk_1.CommandSeparator, { className: "my-1 h-px bg-border" })),
200
- React.createElement(cmdk_1.CommandGroup, { heading: group.label, className: (0, utils_1.cn)("px-1 [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5", "[&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:text-muted-foreground") }, group.options.map((option) => (React.createElement(ComboItem, { key: option.value, option: option, selected: selectedValues.has(option.value), onSelect: () => handleSelect(option.value) }))))));
201
- }),
202
- showCreate && (React.createElement(React.Fragment, null,
203
- React.createElement(cmdk_1.CommandSeparator, { className: "my-1 h-px bg-border" }),
204
- React.createElement(cmdk_1.CommandItem, { value: `__create__${query}`, onSelect: () => {
205
- const newValue = query.trim();
206
- onCreateOption === null || onCreateOption === void 0 ? void 0 : onCreateOption(newValue);
207
- handleSelect(newValue);
208
- }, className: "mx-1 flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm text-foreground aria-selected:bg-accent aria-selected:text-accent-foreground" },
209
- React.createElement("span", { className: "text-muted-foreground" }, "Create"),
210
- React.createElement("span", { className: "font-medium" },
211
- "\u201C",
212
- query,
213
- "\u201D")))))))))),
214
- name && (React.createElement("input", { type: "hidden", name: name, value: multiple
215
- ? JSON.stringify(currentValue !== null && currentValue !== void 0 ? currentValue : [])
216
- : (_a = currentValue) !== null && _a !== void 0 ? _a : "" }))));
217
- });
218
- ComboSelect.displayName = "ComboSelect";
219
- function ComboItem({ option, selected, onSelect }) {
220
- return (React.createElement(cmdk_1.CommandItem, { value: `${option.label} ${option.value}`, disabled: option.disabled, onSelect: onSelect, className: (0, utils_1.cn)("relative flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-sm", "aria-selected:bg-accent aria-selected:text-accent-foreground", "data-[disabled]:pointer-events-none data-[disabled]:opacity-50") },
221
- option.icon,
222
- React.createElement("span", { className: "flex flex-col" },
223
- React.createElement("span", null, option.label),
224
- option.description && (React.createElement("span", { className: "text-xs text-muted-foreground" }, option.description))),
225
- selected && (React.createElement(lucide_react_1.Check, { "aria-hidden": "true", className: "ml-auto h-4 w-4 shrink-0 text-primary" }))));
226
- }
227
- function SelectedChips({ multiple, selectedOptions, maxDisplayed, placeholder, removeValue, isDisabled, }) {
228
- if (selectedOptions.length === 0) {
229
- return (React.createElement("span", { className: "truncate text-muted-foreground" }, placeholder));
230
- }
231
- if (!multiple) {
232
- const [first] = selectedOptions;
233
- return (React.createElement("span", { className: "flex items-center gap-2 truncate text-foreground" },
234
- first.icon,
235
- React.createElement("span", { className: "truncate" }, first.label)));
236
- }
237
- const visible = selectedOptions.slice(0, maxDisplayed);
238
- const overflow = selectedOptions.length - visible.length;
239
- return (React.createElement("div", { className: "flex max-h-[5.5rem] flex-1 flex-wrap items-center gap-1 overflow-y-auto py-1" },
240
- visible.map((option) => (React.createElement(badge_1.Badge, { key: option.value, variant: "secondary", size: "sm", className: "gap-1 pr-1" },
241
- option.label,
242
- !isDisabled && (React.createElement("button", { type: "button", "aria-label": `Remove ${option.label}`, onClick: (event) => {
243
- event.stopPropagation();
244
- removeValue(option.value);
245
- }, className: "rounded-sm hover:bg-foreground/10 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring" },
246
- React.createElement(lucide_react_1.X, { className: "h-3 w-3" })))))),
247
- overflow > 0 && (React.createElement(badge_1.Badge, { variant: "outline", size: "sm" },
248
- "+",
249
- overflow,
250
- " more"))));
251
- }
252
- function useGroupedOptions(options) {
253
- return React.useMemo(() => {
254
- var _a;
255
- const hasGroups = options.some((o) => !!o.group);
256
- if (!hasGroups)
257
- return [{ label: undefined, options }];
258
- const map = new Map();
259
- for (const option of options) {
260
- const key = option.group;
261
- const list = (_a = map.get(key)) !== null && _a !== void 0 ? _a : [];
262
- list.push(option);
263
- map.set(key, list);
264
- }
265
- const groups = [];
266
- const ungrouped = map.get(undefined);
267
- if (ungrouped)
268
- groups.push({ label: undefined, options: ungrouped });
269
- for (const [key, opts] of map.entries()) {
270
- if (key === undefined)
271
- continue;
272
- groups.push({ label: key, options: opts });
273
- }
274
- return groups;
275
- }, [options]);
276
- }
277
- function useDebouncedValue(value, delay) {
278
- const [debounced, setDebounced] = React.useState(value);
279
- React.useEffect(() => {
280
- const timer = setTimeout(() => setDebounced(value), delay);
281
- return () => clearTimeout(timer);
282
- }, [value, delay]);
283
- return debounced;
284
- }
@@ -1,41 +0,0 @@
1
- import * as React from "react";
2
- import { type LucideIcon } from "lucide-react";
3
- type BadgeVariant = "default" | "destructive" | "success" | "warning";
4
- export interface SidebarMenuItem {
5
- id: string | number;
6
- title: string;
7
- icon?: LucideIcon;
8
- url?: string;
9
- badge?: {
10
- count?: number;
11
- label?: string;
12
- variant?: BadgeVariant;
13
- };
14
- children?: SidebarMenuItem[];
15
- disabled?: boolean;
16
- }
17
- export interface SidebarOtherApp {
18
- id: string | number;
19
- name: string;
20
- url?: string;
21
- icon?: LucideIcon;
22
- iconUrl?: string;
23
- }
24
- export interface SidebarProps {
25
- menus: SidebarMenuItem[];
26
- activeItem?: string | number;
27
- onItemClick?: (item: SidebarMenuItem) => void;
28
- logo?: string;
29
- companyName?: string;
30
- collapsed?: boolean;
31
- onCollapsedChange?: (collapsed: boolean) => void;
32
- defaultCollapsed?: boolean;
33
- mobileOpen?: boolean;
34
- onMobileOpenChange?: (open: boolean) => void;
35
- otherApps?: SidebarOtherApp[];
36
- footer?: React.ReactNode;
37
- isLoading?: boolean;
38
- className?: string;
39
- }
40
- export declare function Sidebar({ menus, activeItem, onItemClick, logo, companyName, collapsed: collapsedProp, onCollapsedChange, defaultCollapsed, mobileOpen, onMobileOpenChange, otherApps, footer, isLoading, className, }: SidebarProps): React.ReactElement;
41
- export {};