@myrjfa/ui 1.1.0 → 1.1.1

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 (131) hide show
  1. package/dist/chat/ChatMain.d.ts.map +1 -1
  2. package/dist/chat/ChatMain.js +173 -145
  3. package/dist/chat/ChatSidebar.js +7 -8
  4. package/dist/chat/ConversationList.d.ts.map +1 -1
  5. package/dist/chat/ConversationList.js +20 -18
  6. package/dist/chat/ExpensePanel.d.ts +4 -1
  7. package/dist/chat/ExpensePanel.d.ts.map +1 -1
  8. package/dist/chat/ExpensePanel.js +215 -195
  9. package/dist/chat/MessageBubble.d.ts +5 -3
  10. package/dist/chat/MessageBubble.d.ts.map +1 -1
  11. package/dist/chat/MessageBubble.js +185 -103
  12. package/dist/chat/MessageInput.d.ts +8 -1
  13. package/dist/chat/MessageInput.d.ts.map +1 -1
  14. package/dist/chat/MessageInput.js +182 -165
  15. package/dist/chat/MilestonePanel.d.ts +4 -1
  16. package/dist/chat/MilestonePanel.d.ts.map +1 -1
  17. package/dist/chat/MilestonePanel.js +150 -150
  18. package/dist/chat/components/ParticipantSelector.d.ts +11 -0
  19. package/dist/chat/components/ParticipantSelector.d.ts.map +1 -0
  20. package/dist/chat/components/ParticipantSelector.js +17 -0
  21. package/dist/chat/components/SplitInputs.d.ts +11 -0
  22. package/dist/chat/components/SplitInputs.d.ts.map +1 -0
  23. package/dist/chat/components/SplitInputs.js +83 -0
  24. package/dist/chat/components/SplitTypeSelector.d.ts +8 -0
  25. package/dist/chat/components/SplitTypeSelector.d.ts.map +1 -0
  26. package/dist/chat/components/SplitTypeSelector.js +13 -0
  27. package/dist/chat/dialogs/AddMemberDialog.js +30 -90
  28. package/dist/chat/dialogs/CameraDialog.js +38 -86
  29. package/dist/chat/dialogs/CreatePollDialog.d.ts +8 -0
  30. package/dist/chat/dialogs/CreatePollDialog.d.ts.map +1 -0
  31. package/dist/chat/dialogs/CreatePollDialog.js +38 -0
  32. package/dist/chat/dialogs/ExpenseAnalyticsDialog.d.ts +19 -0
  33. package/dist/chat/dialogs/ExpenseAnalyticsDialog.d.ts.map +1 -0
  34. package/dist/chat/dialogs/ExpenseAnalyticsDialog.js +52 -0
  35. package/dist/chat/dialogs/GroupInfoDialog.d.ts.map +1 -1
  36. package/dist/chat/dialogs/GroupInfoDialog.js +55 -92
  37. package/dist/chat/dialogs/GroupInfoViewDialog.js +5 -6
  38. package/dist/chat/dialogs/NewChatDialog.d.ts.map +1 -1
  39. package/dist/chat/dialogs/NewChatDialog.js +49 -113
  40. package/dist/chat/dialogs/NewGroupDialog.d.ts.map +1 -1
  41. package/dist/chat/dialogs/NewGroupDialog.js +49 -92
  42. package/dist/chat/dialogs/ParticipantsDialog.d.ts.map +1 -1
  43. package/dist/chat/dialogs/ParticipantsDialog.js +68 -118
  44. package/dist/chat/dialogs/UserProfileDialog.d.ts +10 -0
  45. package/dist/chat/dialogs/UserProfileDialog.d.ts.map +1 -0
  46. package/dist/chat/dialogs/UserProfileDialog.js +100 -0
  47. package/dist/dashboard/action-buttons.js +4 -5
  48. package/dist/dashboard/app-sidebar.js +46 -128
  49. package/dist/dashboard/card-header.js +1 -2
  50. package/dist/dashboard/dashboard-components.js +3 -5
  51. package/dist/dashboard/data-table.js +21 -33
  52. package/dist/dashboard/nav-main.js +4 -5
  53. package/dist/dashboard/nav-secondary.js +2 -25
  54. package/dist/dashboard/stats-card.js +1 -2
  55. package/dist/dashboard/table.js +8 -54
  56. package/dist/header/mobile-nav-item.js +1 -2
  57. package/dist/header/mobile-navbar.js +8 -9
  58. package/dist/header/nav-item.js +1 -2
  59. package/dist/index.d.ts +1 -0
  60. package/dist/index.d.ts.map +1 -1
  61. package/dist/index.js +1 -1
  62. package/dist/main/footer.js +5 -9
  63. package/dist/main/navbar.js +53 -136
  64. package/dist/main/paginationBar.js +12 -14
  65. package/dist/main/portfolio/portfolioItem.js +1 -2
  66. package/dist/main/portfolio/portfolioPopup.js +16 -17
  67. package/dist/main/review-page.d.ts.map +1 -1
  68. package/dist/main/review-page.js +131 -198
  69. package/dist/misc/accordion.js +8 -34
  70. package/dist/misc/alert-dialog.js +22 -55
  71. package/dist/misc/alert.js +7 -32
  72. package/dist/misc/alertdialogclaude.js +50 -125
  73. package/dist/misc/avatar.js +6 -31
  74. package/dist/misc/badge.js +4 -27
  75. package/dist/misc/button.js +4 -27
  76. package/dist/misc/card.js +12 -40
  77. package/dist/misc/carousel.js +37 -61
  78. package/dist/misc/checkbox.js +2 -25
  79. package/dist/misc/command.js +18 -49
  80. package/dist/misc/datepicker.js +66 -76
  81. package/dist/misc/dialog.js +20 -52
  82. package/dist/misc/dropdown-menu.js +30 -67
  83. package/dist/misc/faq.js +2 -3
  84. package/dist/misc/file-preview.js +43 -97
  85. package/dist/misc/filter.d.ts.map +1 -1
  86. package/dist/misc/filter.js +18 -21
  87. package/dist/misc/filterBar.js +136 -160
  88. package/dist/misc/form.js +39 -60
  89. package/dist/misc/image-cropper.d.ts +10 -0
  90. package/dist/misc/image-cropper.d.ts.map +1 -0
  91. package/dist/misc/image-cropper.js +44 -0
  92. package/dist/misc/input.js +2 -25
  93. package/dist/misc/label.js +2 -25
  94. package/dist/misc/line-carousel.js +3 -13
  95. package/dist/misc/multiImageUploader.js +2 -3
  96. package/dist/misc/newsLetter.js +18 -78
  97. package/dist/misc/notification.d.ts +1 -2
  98. package/dist/misc/notification.d.ts.map +1 -1
  99. package/dist/misc/notification.js +89 -125
  100. package/dist/misc/pagination.js +16 -45
  101. package/dist/misc/password-eye.js +2 -3
  102. package/dist/misc/popover.d.ts.map +1 -1
  103. package/dist/misc/popover.js +8 -34
  104. package/dist/misc/progress.js +2 -25
  105. package/dist/misc/scroll-area.js +5 -29
  106. package/dist/misc/searchBar.js +27 -31
  107. package/dist/misc/searchBox.js +18 -22
  108. package/dist/misc/select.d.ts.map +1 -1
  109. package/dist/misc/select.js +22 -54
  110. package/dist/misc/separator.js +2 -25
  111. package/dist/misc/share.js +48 -104
  112. package/dist/misc/sheet.js +21 -53
  113. package/dist/misc/sidebar.js +112 -153
  114. package/dist/misc/skeleton.js +2 -25
  115. package/dist/misc/slider.js +3 -26
  116. package/dist/misc/starRating.js +5 -15
  117. package/dist/misc/stateCard.js +7 -8
  118. package/dist/misc/switch.d.ts +5 -0
  119. package/dist/misc/switch.d.ts.map +1 -0
  120. package/dist/misc/switch.js +8 -0
  121. package/dist/misc/tabs.js +8 -34
  122. package/dist/misc/textarea.js +2 -25
  123. package/dist/misc/tile.js +31 -92
  124. package/dist/misc/tooltip.js +8 -34
  125. package/dist/profile/socialLink.d.ts +1 -1
  126. package/dist/profile/socialLink.d.ts.map +1 -1
  127. package/dist/profile/socialLink.js +53 -69
  128. package/dist/utils/permissions.d.ts +7 -0
  129. package/dist/utils/permissions.d.ts.map +1 -0
  130. package/dist/utils/permissions.js +38 -0
  131. package/package.json +3 -2
@@ -1,24 +1,4 @@
1
1
  'use client';
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 __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
14
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
15
- if (ar || !(i in from)) {
16
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
17
- ar[i] = from[i];
18
- }
19
- }
20
- return to.concat(ar || Array.prototype.slice.call(from));
21
- };
22
2
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
23
3
  import { retrieveCity, retrieveState } from "@myrjfa/state/dist/lib/utils";
24
4
  import { Search, SearchIcon, SlidersHorizontal, X } from "lucide-react";
@@ -29,20 +9,19 @@ import Filter from "./filter";
29
9
  import { Sheet, SheetContent, SheetTitle, SheetTrigger } from "./sheet";
30
10
  import { Slider } from "./slider";
31
11
  // Default filter options (backward compatible)
32
- var defaultFilterOptions = [
12
+ const defaultFilterOptions = [
33
13
  { label: "destination", type: "autoComplete", datatype: "string[]", displayName: "Destination", deriveFromTiles: 'location', visibility: 'bar' },
34
14
  { label: "skill", type: "autoComplete", datatype: "string[]", displayName: "Skills", deriveFromTiles: 'skills', visibility: 'bar' },
35
15
  { label: "rating", type: "select", datatype: "number", displayName: "Rating", visibility: 'expanded' },
36
16
  ];
37
- function FilterBarComponent(_a) {
38
- var tiles = _a.tiles, _b = _a.filterConfig, filterConfig = _b === void 0 ? defaultFilterOptions : _b;
39
- var searchParams = useSearchParams();
40
- var pathname = usePathname();
41
- var router = useRouter();
17
+ function FilterBarComponent({ tiles, filterConfig = defaultFilterOptions }) {
18
+ const searchParams = useSearchParams();
19
+ const pathname = usePathname();
20
+ const router = useRouter();
42
21
  // Initialize filter state from config
43
- var getInitialFilterState = function () {
44
- var state = {};
45
- filterConfig.forEach(function (opt) {
22
+ const getInitialFilterState = () => {
23
+ const state = {};
24
+ filterConfig.forEach(opt => {
46
25
  if (opt.datatype === 'string[]') {
47
26
  state[opt.label] = opt.defaultValue || [];
48
27
  }
@@ -58,11 +37,11 @@ function FilterBarComponent(_a) {
58
37
  });
59
38
  return state;
60
39
  };
61
- var _c = useState(getInitialFilterState), filterParam = _c[0], setFilterParam = _c[1];
62
- useEffect(function () {
63
- var newState = {};
64
- filterConfig.forEach(function (opt) {
65
- var param = searchParams.get(opt.label);
40
+ const [filterParam, setFilterParam] = useState(getInitialFilterState);
41
+ useEffect(() => {
42
+ const newState = {};
43
+ filterConfig.forEach(opt => {
44
+ const param = searchParams.get(opt.label);
66
45
  if (opt.datatype === 'string[]') {
67
46
  newState[opt.label] = (param === null || param === void 0 ? void 0 : param.split(',').filter(Boolean)) || opt.defaultValue || [];
68
47
  }
@@ -70,9 +49,9 @@ function FilterBarComponent(_a) {
70
49
  newState[opt.label] = parseInt(param || "0", 10) || opt.defaultValue || 0;
71
50
  }
72
51
  else if (opt.datatype === 'range') {
73
- var minParam = searchParams.get("".concat(opt.label, "Min"));
74
- var maxParam = searchParams.get("".concat(opt.label, "Max"));
75
- var defaultRange = opt.defaultValue || { min: 0, max: 100 };
52
+ const minParam = searchParams.get(`${opt.label}Min`);
53
+ const maxParam = searchParams.get(`${opt.label}Max`);
54
+ const defaultRange = opt.defaultValue || { min: 0, max: 100 };
76
55
  newState[opt.label] = {
77
56
  min: minParam ? parseInt(minParam, 10) : defaultRange.min,
78
57
  max: maxParam ? parseInt(maxParam, 10) : defaultRange.max
@@ -84,22 +63,21 @@ function FilterBarComponent(_a) {
84
63
  });
85
64
  setFilterParam(newState);
86
65
  }, [searchParams, filterConfig]);
87
- var changeMultiParams = function (params) {
88
- var newParams = new URLSearchParams(searchParams);
66
+ const changeMultiParams = (params) => {
67
+ const newParams = new URLSearchParams(searchParams);
89
68
  newParams.set('page', '1');
90
- Object.entries(params).forEach(function (_a) {
91
- var key = _a[0], value = _a[1];
69
+ Object.entries(params).forEach(([key, value]) => {
92
70
  if (typeof value === 'object' && 'min' in value && 'max' in value) {
93
71
  // Range type - only set if different from default
94
- var config = filterConfig.find(function (f) { return f.label === key; });
95
- var defaultRange = (config === null || config === void 0 ? void 0 : config.defaultValue) || { min: 0, max: 100 };
72
+ const config = filterConfig.find(f => f.label === key);
73
+ const defaultRange = (config === null || config === void 0 ? void 0 : config.defaultValue) || { min: 0, max: 100 };
96
74
  if (value.min !== defaultRange.min || value.max !== defaultRange.max) {
97
- newParams.set("".concat(key, "Min"), value.min.toString());
98
- newParams.set("".concat(key, "Max"), value.max.toString());
75
+ newParams.set(`${key}Min`, value.min.toString());
76
+ newParams.set(`${key}Max`, value.max.toString());
99
77
  }
100
78
  else {
101
- newParams.delete("".concat(key, "Min"));
102
- newParams.delete("".concat(key, "Max"));
79
+ newParams.delete(`${key}Min`);
80
+ newParams.delete(`${key}Max`);
103
81
  }
104
82
  }
105
83
  else if (Array.isArray(value) && value.length > 0) {
@@ -110,132 +88,129 @@ function FilterBarComponent(_a) {
110
88
  }
111
89
  else {
112
90
  newParams.delete(key);
113
- newParams.delete("".concat(key, "Min"));
114
- newParams.delete("".concat(key, "Max"));
91
+ newParams.delete(`${key}Min`);
92
+ newParams.delete(`${key}Max`);
115
93
  }
116
94
  });
117
- router.replace("".concat(pathname, "?").concat(newParams.toString()));
95
+ router.replace(`${pathname}?${newParams.toString()}`);
118
96
  };
119
97
  // Get filter values based on config
120
- var getFilterValues = function (opt) {
98
+ const getFilterValues = (opt) => {
121
99
  if (opt.deriveFromTiles === 'opportunityType' && opt.options) {
122
100
  // For opportunityType, dynamically filter options based on what types exist in tiles
123
- var availableTypes_1 = new Set((tiles !== null && tiles !== void 0 ? tiles : []).map(function (tile) { return tile.opportunityType || 'volunteer'; }));
101
+ const availableTypes = new Set((tiles !== null && tiles !== void 0 ? tiles : []).map(tile => tile.opportunityType || 'volunteer'));
124
102
  return opt.options
125
- .filter(function (o) { return availableTypes_1.has(o.value); })
126
- .map(function (o) { return o.label; });
103
+ .filter(o => availableTypes.has(o.value))
104
+ .map(o => o.label);
127
105
  }
128
106
  if (opt.options) {
129
- return opt.options.map(function (o) { return o.label; });
107
+ return opt.options.map(o => o.label);
130
108
  }
131
109
  if (opt.deriveFromTiles === 'location') {
132
- return Array.from(new Set((tiles !== null && tiles !== void 0 ? tiles : []).map(function (tile) { return [retrieveState((tile === null || tile === void 0 ? void 0 : tile.location) || ''), retrieveCity((tile === null || tile === void 0 ? void 0 : tile.location) || '')]; }).flat().filter(Boolean)));
110
+ return Array.from(new Set((tiles !== null && tiles !== void 0 ? tiles : []).map(tile => [retrieveState((tile === null || tile === void 0 ? void 0 : tile.location) || ''), retrieveCity((tile === null || tile === void 0 ? void 0 : tile.location) || '')]).flat().filter(Boolean)));
133
111
  }
134
112
  if (opt.deriveFromTiles === 'skills') {
135
- return Array.from(new Set((tiles !== null && tiles !== void 0 ? tiles : []).flatMap(function (tile) { return tile.skills || []; })));
113
+ return Array.from(new Set((tiles !== null && tiles !== void 0 ? tiles : []).flatMap(tile => tile.skills || [])));
136
114
  }
137
115
  if (opt.label === 'rating') {
138
116
  return ["1 star and above", "2 star and above", "3 star and above", "4 star and above", "5 star only"];
139
117
  }
140
- return tiles.map(function (tile) { return tile["".concat(opt.deriveFromTiles)]; });
118
+ return tiles.map(tile => tile[`${opt.deriveFromTiles}`]);
141
119
  };
142
- var handleFilterChange = function (label, value, datatype, options) {
120
+ const handleFilterChange = (label, value, datatype, options) => {
143
121
  if (value === null || value === "clear") {
144
- var config_1 = filterConfig.find(function (f) { return f.label === label; });
145
- setFilterParam(function (prev) {
146
- var _a;
147
- return (__assign(__assign({}, prev), (_a = {}, _a[label] = datatype.includes('[]') ? [] : (datatype === 'number' ? 0 : ((config_1 === null || config_1 === void 0 ? void 0 : config_1.defaultValue) || '')), _a)));
148
- });
122
+ const config = filterConfig.find(f => f.label === label);
123
+ setFilterParam(prev => ({
124
+ ...prev,
125
+ [label]: datatype.includes('[]') ? [] : (datatype === 'number' ? 0 : ((config === null || config === void 0 ? void 0 : config.defaultValue) || ''))
126
+ }));
149
127
  return;
150
128
  }
151
129
  // For select with options, convert label to value
152
- var actualValue = value;
130
+ let actualValue = value;
153
131
  if (options) {
154
- var opt = options.find(function (o) { return o.label === value; });
132
+ const opt = options.find(o => o.label === value);
155
133
  if (opt)
156
134
  actualValue = opt.value;
157
135
  }
158
- setFilterParam(function (prev) {
159
- var _a, _b;
160
- var currentValues = prev[label];
161
- var newValue = datatype === 'number' ? Number(value[0]) : actualValue;
136
+ setFilterParam(prev => {
137
+ const currentValues = prev[label];
138
+ const newValue = datatype === 'number' ? Number(value[0]) : actualValue;
162
139
  if (currentValues == newValue || (Array.isArray(currentValues) && currentValues.includes(newValue))) {
163
140
  return prev;
164
141
  }
165
142
  else if (Array.isArray(currentValues)) {
166
- return __assign(__assign({}, prev), (_a = {}, _a[label] = __spreadArray(__spreadArray([], currentValues, true), [newValue], false), _a));
143
+ return { ...prev, [label]: [...currentValues, newValue] };
167
144
  }
168
145
  else {
169
- return __assign(__assign({}, prev), (_b = {}, _b[label] = newValue, _b));
146
+ return { ...prev, [label]: newValue };
170
147
  }
171
148
  });
172
149
  };
173
- var handleRangeChange = function (label, field, value) {
174
- setFilterParam(function (prev) {
175
- var _a, _b;
176
- var current = prev[label];
177
- return __assign(__assign({}, prev), (_a = {}, _a[label] = __assign(__assign({}, current), (_b = {}, _b[field] = value, _b)), _a));
150
+ const handleRangeChange = (label, field, value) => {
151
+ setFilterParam(prev => {
152
+ const current = prev[label];
153
+ return {
154
+ ...prev,
155
+ [label]: { ...current, [field]: value }
156
+ };
178
157
  });
179
158
  };
180
- var removeFilter = function (label, value) {
181
- var config = filterConfig.find(function (f) { return f.label === label; });
159
+ const removeFilter = (label, value) => {
160
+ const config = filterConfig.find(f => f.label === label);
182
161
  if ((config === null || config === void 0 ? void 0 : config.datatype) === 'range') {
183
162
  // Reset range to default
184
- var defaultRange_1 = config.defaultValue || { min: 0, max: 100 };
185
- setFilterParam(function (prev) {
186
- var _a;
187
- return (__assign(__assign({}, prev), (_a = {}, _a[label] = defaultRange_1, _a)));
188
- });
163
+ const defaultRange = config.defaultValue || { min: 0, max: 100 };
164
+ setFilterParam(prev => ({ ...prev, [label]: defaultRange }));
189
165
  }
190
166
  else {
191
- setFilterParam(function (prev) {
192
- var _a;
193
- return (__assign(__assign({}, prev), (_a = {}, _a[label] = Array.isArray(prev[label])
194
- ? prev[label].filter(function (v) { return v !== value; })
195
- : prev[label] === value ? 0 : ((config === null || config === void 0 ? void 0 : config.defaultValue) || ''), _a)));
196
- });
167
+ setFilterParam(prev => ({
168
+ ...prev,
169
+ [label]: Array.isArray(prev[label])
170
+ ? prev[label].filter(v => v !== value)
171
+ : prev[label] === value ? 0 : ((config === null || config === void 0 ? void 0 : config.defaultValue) || '')
172
+ }));
197
173
  }
198
174
  };
199
- var _d = useState(false), sheetOpen = _d[0], setSheetOpen = _d[1];
175
+ const [sheetOpen, setSheetOpen] = useState(false);
200
176
  // Get current opportunity type for conditional filters
201
- var currentType = filterParam['type'] || 'volunteer';
177
+ const currentType = filterParam['type'] || 'volunteer';
202
178
  // Filter configs based on showForTypes
203
- var getVisibleConfigs = function (configs) {
204
- return configs.filter(function (opt) {
179
+ const getVisibleConfigs = (configs) => {
180
+ return configs.filter(opt => {
205
181
  if (!opt.showForTypes || opt.showForTypes.length === 0)
206
182
  return true;
207
183
  return opt.showForTypes.includes(currentType);
208
184
  });
209
185
  };
210
- var getActiveFilters = function () {
211
- var filters = [];
212
- Object.entries(filterParam).forEach(function (_a) {
213
- var key = _a[0], values = _a[1];
214
- var opt = filterConfig.find(function (o) { return o.label === key; });
186
+ const getActiveFilters = () => {
187
+ const filters = [];
188
+ Object.entries(filterParam).forEach(([key, values]) => {
189
+ const opt = filterConfig.find(o => o.label === key);
215
190
  if (!opt)
216
191
  return;
217
192
  if (typeof values === 'object' && 'min' in values && 'max' in values) {
218
193
  // Range filter
219
- var defaultRange = opt.defaultValue || { min: 0, max: 100 };
194
+ const defaultRange = opt.defaultValue || { min: 0, max: 100 };
220
195
  if (values.min !== defaultRange.min || values.max !== defaultRange.max) {
221
196
  filters.push({
222
197
  label: key,
223
- value: "".concat(values.min, "-").concat(values.max, " ").concat(opt.rangeUnit || ''),
198
+ value: `${values.min}-${values.max} ${opt.rangeUnit || ''}`,
224
199
  displayName: opt.displayName,
225
200
  isRange: true
226
201
  });
227
202
  }
228
203
  }
229
204
  else if (Array.isArray(values) && values.length > 0) {
230
- values.forEach(function (value) {
231
- filters.push({ label: key, value: value, displayName: opt.displayName });
205
+ values.forEach(value => {
206
+ filters.push({ label: key, value, displayName: opt.displayName });
232
207
  });
233
208
  }
234
209
  else if (!Array.isArray(values) && values !== 0 && values !== '' && values !== opt.defaultValue) {
235
210
  // For select with options, show label not value
236
- var displayValue = values;
211
+ let displayValue = values;
237
212
  if (opt.options) {
238
- var found = opt.options.find(function (o) { return o.value === values; });
213
+ const found = opt.options.find(o => o.value === values);
239
214
  if (found)
240
215
  displayValue = found.label;
241
216
  }
@@ -244,110 +219,111 @@ function FilterBarComponent(_a) {
244
219
  });
245
220
  return filters;
246
221
  };
247
- var activeFilters = getActiveFilters();
248
- var clearAllFilters = function () {
249
- var clearedParams = getInitialFilterState();
222
+ const activeFilters = getActiveFilters();
223
+ const clearAllFilters = () => {
224
+ const clearedParams = getInitialFilterState();
250
225
  setFilterParam(clearedParams);
251
226
  changeMultiParams(clearedParams);
252
227
  setSheetOpen(false);
253
228
  };
254
- var renderFilterInput = function (opt) {
229
+ const renderFilterInput = (opt) => {
255
230
  var _a, _b, _c, _d, _e, _f, _g;
256
231
  if (opt.type === 'range') {
257
- var rangeValue = filterParam[opt.label];
258
- var defaultRange = opt.defaultValue || { min: 0, max: 100 };
259
- var minVal_1 = (_a = opt.rangeMin) !== null && _a !== void 0 ? _a : defaultRange.min;
260
- var maxVal_1 = (_b = opt.rangeMax) !== null && _b !== void 0 ? _b : defaultRange.max;
261
- var step = (_c = opt.rangeStep) !== null && _c !== void 0 ? _c : 1;
232
+ const rangeValue = filterParam[opt.label];
233
+ const defaultRange = opt.defaultValue || { min: 0, max: 100 };
234
+ const minVal = (_a = opt.rangeMin) !== null && _a !== void 0 ? _a : defaultRange.min;
235
+ const maxVal = (_b = opt.rangeMax) !== null && _b !== void 0 ? _b : defaultRange.max;
236
+ const step = (_c = opt.rangeStep) !== null && _c !== void 0 ? _c : 1;
262
237
  // Number inputs mode
263
238
  if (opt.rangeInputType === 'number') {
264
239
  // Inline style to hide number input spinners
265
- var noSpinnerStyle = {
240
+ const noSpinnerStyle = {
266
241
  MozAppearance: 'textfield',
267
242
  WebkitAppearance: 'none',
268
243
  appearance: 'textfield'
269
244
  };
270
- return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("input", { type: "number", placeholder: "Min", value: (rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.min) === undefined || (rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.min) === null || Number.isNaN(rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.min) ? '' : rangeValue.min, min: minVal_1, max: maxVal_1, onChange: function (e) {
271
- var inputVal = e.target.value;
272
- var val = inputVal === '' ? NaN : parseInt(inputVal);
273
- setFilterParam(function (prev) {
274
- var _a;
275
- return (__assign(__assign({}, prev), (_a = {}, _a[opt.label] = __assign(__assign({}, prev[opt.label]), { min: val }), _a)));
276
- });
277
- }, onWheel: function (e) { return e.currentTarget.blur(); }, style: noSpinnerStyle, className: "w-20 px-2 py-1 border rounded text-sm [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none" }), _jsx("span", { className: "text-gray-500", children: "to" }), _jsx("input", { type: "number", placeholder: "Max", value: (rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.max) === undefined || (rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.max) === null || Number.isNaN(rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.max) ? '' : rangeValue.max, min: minVal_1, max: maxVal_1, onChange: function (e) {
278
- var inputVal = e.target.value;
279
- var val = inputVal === '' ? NaN : parseInt(inputVal);
280
- setFilterParam(function (prev) {
281
- var _a;
282
- return (__assign(__assign({}, prev), (_a = {}, _a[opt.label] = __assign(__assign({}, prev[opt.label]), { max: val }), _a)));
283
- });
284
- }, onWheel: function (e) { return e.currentTarget.blur(); }, style: noSpinnerStyle, className: "w-20 px-2 py-1 border rounded text-sm [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none" }), opt.rangeUnit && _jsx("span", { className: "text-sm text-gray-500", children: opt.rangeUnit })] }));
245
+ return (_jsxs("div", { className: "flex items-center gap-2", children: [_jsx("input", { type: "number", placeholder: "Min", value: (rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.min) === undefined || (rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.min) === null || Number.isNaN(rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.min) ? '' : rangeValue.min, min: minVal, max: maxVal, onChange: (e) => {
246
+ const inputVal = e.target.value;
247
+ const val = inputVal === '' ? NaN : parseInt(inputVal);
248
+ setFilterParam(prev => ({
249
+ ...prev,
250
+ [opt.label]: { ...prev[opt.label], min: val }
251
+ }));
252
+ }, onWheel: (e) => e.currentTarget.blur(), style: noSpinnerStyle, className: "w-20 px-2 py-1 border rounded text-sm [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none" }), _jsx("span", { className: "text-gray-500", children: "to" }), _jsx("input", { type: "number", placeholder: "Max", value: (rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.max) === undefined || (rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.max) === null || Number.isNaN(rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.max) ? '' : rangeValue.max, min: minVal, max: maxVal, onChange: (e) => {
253
+ const inputVal = e.target.value;
254
+ const val = inputVal === '' ? NaN : parseInt(inputVal);
255
+ setFilterParam(prev => ({
256
+ ...prev,
257
+ [opt.label]: { ...prev[opt.label], max: val }
258
+ }));
259
+ }, onWheel: (e) => e.currentTarget.blur(), style: noSpinnerStyle, className: "w-20 px-2 py-1 border rounded text-sm [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none" }), opt.rangeUnit && _jsx("span", { className: "text-sm text-gray-500", children: opt.rangeUnit })] }));
285
260
  }
286
261
  // Slider mode (default)
287
- return (_jsxs("div", { className: "flex flex-col gap-2 w-full", children: [_jsxs("div", { className: "flex justify-between text-sm text-gray-600", children: [_jsxs("span", { children: [(_d = rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.min) !== null && _d !== void 0 ? _d : minVal_1, " ", opt.rangeUnit] }), _jsxs("span", { children: [(_e = rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.max) !== null && _e !== void 0 ? _e : maxVal_1, " ", opt.rangeUnit] })] }), _jsx(Slider, { min: minVal_1, max: maxVal_1, step: step, value: [(_f = rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.min) !== null && _f !== void 0 ? _f : minVal_1, (_g = rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.max) !== null && _g !== void 0 ? _g : maxVal_1], onValueChange: function (values) {
288
- setFilterParam(function (prev) {
289
- var _a;
290
- var _b, _c;
291
- return (__assign(__assign({}, prev), (_a = {}, _a[opt.label] = { min: (_b = values[0]) !== null && _b !== void 0 ? _b : minVal_1, max: (_c = values[1]) !== null && _c !== void 0 ? _c : maxVal_1 }, _a)));
262
+ return (_jsxs("div", { className: "flex flex-col gap-2 w-full", children: [_jsxs("div", { className: "flex justify-between text-sm text-gray-600", children: [_jsxs("span", { children: [(_d = rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.min) !== null && _d !== void 0 ? _d : minVal, " ", opt.rangeUnit] }), _jsxs("span", { children: [(_e = rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.max) !== null && _e !== void 0 ? _e : maxVal, " ", opt.rangeUnit] })] }), _jsx(Slider, { min: minVal, max: maxVal, step: step, value: [(_f = rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.min) !== null && _f !== void 0 ? _f : minVal, (_g = rangeValue === null || rangeValue === void 0 ? void 0 : rangeValue.max) !== null && _g !== void 0 ? _g : maxVal], onValueChange: (values) => {
263
+ setFilterParam(prev => {
264
+ var _a, _b;
265
+ return ({
266
+ ...prev,
267
+ [opt.label]: { min: (_a = values[0]) !== null && _a !== void 0 ? _a : minVal, max: (_b = values[1]) !== null && _b !== void 0 ? _b : maxVal }
268
+ });
292
269
  });
293
270
  }, className: "w-full" })] }));
294
271
  }
295
- var selectedValue = (function () {
296
- var val = filterParam[opt.label];
272
+ const selectedValue = (() => {
273
+ const val = filterParam[opt.label];
297
274
  if (opt.datatype.includes('[]')) {
298
- var arr = val;
299
- return arr.length > 0 ? "".concat(arr.length, " selected") : '';
275
+ const arr = val;
276
+ return arr.length > 0 ? `${arr.length} selected` : '';
300
277
  }
301
278
  if (opt.datatype === 'number') {
302
- return val ? "".concat(val, " star or more") : '';
279
+ return val ? `${val} star or more` : '';
303
280
  }
304
281
  // For select type, show label not value
305
282
  if (opt.options && val) {
306
- var found = opt.options.find(function (o) { return o.value === val; });
283
+ const found = opt.options.find(o => o.value === val);
307
284
  return (found === null || found === void 0 ? void 0 : found.label) || val.toString();
308
285
  }
309
286
  return (val === null || val === void 0 ? void 0 : val.toString()) || '';
310
287
  })();
311
- return (_jsx(Filter, { label: opt.label, formType: opt.type === 'select' ? 'select' : 'autoComplete', selectedValue: selectedValue, values: getFilterValues(opt), onChange: function (value) { return handleFilterChange(opt.label, value, opt.datatype, opt.options); } }));
288
+ return (_jsx(Filter, { label: opt.label, formType: opt.type === 'select' ? 'select' : 'autoComplete', selectedValue: selectedValue, values: getFilterValues(opt), onChange: (value) => handleFilterChange(opt.label, value, opt.datatype, opt.options) }));
312
289
  };
313
290
  // Separate bar filters from expanded filters
314
- var visibleConfigs = getVisibleConfigs(filterConfig);
315
- var barFilters = visibleConfigs.filter(function (f) { return f.visibility !== 'expanded'; });
316
- var expandedFilters = visibleConfigs.filter(function (f) { return f.visibility === 'expanded'; });
317
- return (_jsxs("div", { className: "w-4/5 max-w-5xl mx-auto", children: [_jsxs("div", { className: "items-center w-full bg-background shadow-md rounded-full px-4 py-3 md:py-2 flex", children: [barFilters.slice(0, 3).map(function (opt) { return (_jsxs("div", { className: "items-center flex-1 hidden md:flex", children: [_jsx("div", { className: "w-full", children: renderFilterInput(opt) }), _jsx("div", { className: "h-6 w-px bg-gray-300 mx-4 md:h-8" })] }, opt.label)); }), _jsxs(Sheet, { open: sheetOpen, onOpenChange: setSheetOpen, children: [_jsx(SheetTrigger, { asChild: true, children: _jsxs("button", { className: "flex items-center gap-2 text-sm text-gray-600 cursor-pointer m-auto relative", children: [_jsx(SlidersHorizontal, { size: 16, className: "hidden md:block" }), _jsx(SearchIcon, { size: 16, className: "md:hidden" }), _jsx("div", { className: "md:hidden", children: "Start search..." }), expandedFilters.length > 0 && (_jsxs("span", { className: "hidden md:block", children: ["+", expandedFilters.length, " more"] }))] }) }), _jsxs(SheetContent, { side: "top", className: "w-full p-8 z-200 md:items-center overflow-y-auto max-h-[80vh]", children: [_jsx(SheetTitle, { className: "text-lg font-semibold mb-4", children: "Filters" }), _jsx("div", { className: "space-y-6 md:w-3/5", children: visibleConfigs
318
- .filter(function (opt) { return !opt.groupWith; }) // Only render non-grouped or group leaders
319
- .map(function (opt) {
291
+ const visibleConfigs = getVisibleConfigs(filterConfig);
292
+ const barFilters = visibleConfigs.filter(f => f.visibility !== 'expanded');
293
+ const expandedFilters = visibleConfigs.filter(f => f.visibility === 'expanded');
294
+ return (_jsxs("div", { className: "w-4/5 max-w-5xl mx-auto", children: [_jsxs("div", { className: "items-center w-full bg-background shadow-md rounded-full px-4 py-3 md:py-2 flex", children: [barFilters.slice(0, 3).map((opt) => (_jsxs("div", { className: "items-center flex-1 hidden md:flex", children: [_jsx("div", { className: "w-full", children: renderFilterInput(opt) }), _jsx("div", { className: "h-6 w-px bg-gray-300 mx-4 md:h-8" })] }, opt.label))), _jsxs(Sheet, { open: sheetOpen, onOpenChange: setSheetOpen, children: [_jsx(SheetTrigger, { asChild: true, children: _jsxs("button", { className: "flex items-center gap-2 text-sm text-gray-600 cursor-pointer m-auto relative", children: [_jsx(SlidersHorizontal, { size: 16, className: "hidden md:block" }), _jsx(SearchIcon, { size: 16, className: "md:hidden" }), _jsx("div", { className: "md:hidden", children: "Start search..." }), expandedFilters.length > 0 && (_jsxs("span", { className: "hidden md:block", children: ["+", expandedFilters.length, " more"] }))] }) }), _jsxs(SheetContent, { side: "top", className: "w-full p-8 z-200 md:items-center overflow-y-auto max-h-[80vh]", children: [_jsx(SheetTitle, { className: "text-lg font-semibold mb-4", children: "Filters" }), _jsx("div", { className: "space-y-6 md:w-3/5", children: visibleConfigs
295
+ .filter(opt => !opt.groupWith) // Only render non-grouped or group leaders
296
+ .map((opt) => {
320
297
  // Check if this filter has a grouped partner
321
- var groupedFilter = visibleConfigs.find(function (f) { return f.groupWith === opt.label; });
298
+ const groupedFilter = visibleConfigs.find(f => f.groupWith === opt.label);
322
299
  if (groupedFilter) {
323
300
  // Render grouped filters on same line
324
301
  return (_jsxs("div", { className: "space-y-2", children: [_jsxs("label", { className: "text-sm font-medium text-gray-700", children: [groupedFilter.displayName, " & ", opt.displayName] }), _jsxs("div", { className: "bg-gray-50 rounded-lg p-3 flex items-center gap-4", children: [_jsx("div", { className: "w-28", children: renderFilterInput(groupedFilter) }), _jsx("div", { className: "flex-1", children: renderFilterInput(opt) })] })] }, opt.label));
325
302
  }
326
303
  // Regular filter
327
304
  return (_jsxs("div", { className: "space-y-2", children: [_jsx("label", { className: "text-sm font-medium text-gray-700", children: opt.displayName }), _jsx("div", { className: "bg-gray-50 rounded-lg p-3", children: renderFilterInput(opt) })] }, opt.label));
328
- }) }), _jsxs("div", { className: "flex gap-3 mt-6 pt-4 border-t md:w-3/5", children: [_jsx(Button, { variant: "outline", onClick: clearAllFilters, className: "flex-1", children: "Clear All" }), _jsx(Button, { onClick: function () {
305
+ }) }), _jsxs("div", { className: "flex gap-3 mt-6 pt-4 border-t md:w-3/5", children: [_jsx(Button, { variant: "outline", onClick: clearAllFilters, className: "flex-1", children: "Clear All" }), _jsx(Button, { onClick: () => {
329
306
  changeMultiParams(filterParam);
330
307
  setSheetOpen(false);
331
- }, className: "flex-1", children: "Apply Filters" })] })] })] }), _jsx(Button, { variant: "default", onClick: function () { return changeMultiParams(filterParam); }, className: "ml-4 w-12 h-12 rounded-full items-center justify-center hidden md:flex cursor-pointer", children: _jsx(Search, { size: 20 }) })] }), activeFilters.length > 0 && (_jsx("div", { className: "max-w-5xl mx-auto mt-4", children: _jsxs("div", { className: "flex flex-wrap gap-2", children: [activeFilters.map(function (filter, index) { return (_jsxs("div", { className: "inline-flex items-center gap-1 bg-blue-100 text-blue-800 px-3 py-1 rounded-full text-sm border border-blue-200", children: [_jsxs("span", { className: "font-medium", children: [filter.displayName, ":"] }), _jsx("span", { children: typeof filter.value === 'number' && !filter.isRange
332
- ? "".concat(filter.value, " star or more")
333
- : filter.value }), _jsx("button", { onClick: function () {
308
+ }, className: "flex-1", children: "Apply Filters" })] })] })] }), _jsx(Button, { variant: "default", onClick: () => changeMultiParams(filterParam), className: "ml-4 w-12 h-12 rounded-full items-center justify-center hidden md:flex cursor-pointer", children: _jsx(Search, { size: 20 }) })] }), activeFilters.length > 0 && (_jsx("div", { className: "max-w-5xl mx-auto mt-4", children: _jsxs("div", { className: "flex flex-wrap gap-2", children: [activeFilters.map((filter, index) => (_jsxs("div", { className: "inline-flex items-center gap-1 bg-blue-100 text-blue-800 px-3 py-1 rounded-full text-sm border border-blue-200", children: [_jsxs("span", { className: "font-medium", children: [filter.displayName, ":"] }), _jsx("span", { children: typeof filter.value === 'number' && !filter.isRange
309
+ ? `${filter.value} star or more`
310
+ : filter.value }), _jsx("button", { onClick: () => {
334
311
  removeFilter(filter.label, filter.value);
335
- var newState = __assign({}, filterParam);
312
+ const newState = { ...filterParam };
336
313
  if (filter.isRange) {
337
- var config = filterConfig.find(function (f) { return f.label === filter.label; });
314
+ const config = filterConfig.find(f => f.label === filter.label);
338
315
  newState[filter.label] = (config === null || config === void 0 ? void 0 : config.defaultValue) || { min: 0, max: 100 };
339
316
  }
340
317
  else if (Array.isArray(filterParam[filter.label])) {
341
- newState[filter.label] = filterParam[filter.label].filter(function (v) { return v !== filter.value; });
318
+ newState[filter.label] = filterParam[filter.label].filter(v => v !== filter.value);
342
319
  }
343
320
  else {
344
- var config = filterConfig.find(function (f) { return f.label === filter.label; });
321
+ const config = filterConfig.find(f => f.label === filter.label);
345
322
  newState[filter.label] = (config === null || config === void 0 ? void 0 : config.defaultValue) || 0;
346
323
  }
347
324
  changeMultiParams(newState);
348
- }, className: "ml-1 hover:bg-blue-200 rounded-full p-1 transition-colors", children: _jsx(X, { size: 12 }) })] }, "".concat(filter.label, "-").concat(filter.value, "-").concat(index))); }), _jsxs("button", { onClick: clearAllFilters, className: "inline-flex items-center gap-1 bg-gray-100 text-gray-600 px-3 py-1 rounded-full text-sm border border-gray-200 hover:bg-gray-200 transition-colors", children: ["Clear All", _jsx(X, { size: 12 })] })] }) }))] }));
325
+ }, className: "ml-1 hover:bg-blue-200 rounded-full p-1 transition-colors", children: _jsx(X, { size: 12 }) })] }, `${filter.label}-${filter.value}-${index}`))), _jsxs("button", { onClick: clearAllFilters, className: "inline-flex items-center gap-1 bg-gray-100 text-gray-600 px-3 py-1 rounded-full text-sm border border-gray-200 hover:bg-gray-200 transition-colors", children: ["Clear All", _jsx(X, { size: 12 })] })] }) }))] }));
349
326
  }
350
- export default function FilterBar(_a) {
351
- var tiles = _a.tiles, filterConfig = _a.filterConfig;
327
+ export default function FilterBar({ tiles, filterConfig }) {
352
328
  return (_jsx(Suspense, { fallback: _jsx("div", { className: "w-full h-screen flex items-center justify-center", children: "Loading..." }), children: _jsx(FilterBarComponent, { tiles: tiles, filterConfig: filterConfig }) }));
353
329
  }
package/dist/misc/form.js CHANGED
@@ -1,81 +1,60 @@
1
1
  "use client";
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 __rest = (this && this.__rest) || function (s, e) {
14
- var t = {};
15
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
16
- t[p] = s[p];
17
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
18
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
19
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
20
- t[p[i]] = s[p[i]];
21
- }
22
- return t;
23
- };
24
2
  import { jsx as _jsx } from "react/jsx-runtime";
25
3
  import { Slot } from "@radix-ui/react-slot";
26
4
  import { cn } from "@myrjfa/state/dist/lib/utils";
27
5
  import * as React from "react";
28
6
  import { Controller, FormProvider, useFormContext, useFormState, } from "react-hook-form";
29
7
  import { Label } from "./label";
30
- var Form = FormProvider;
31
- var FormFieldContext = React.createContext({});
32
- var FormField = function (_a) {
33
- var props = __rest(_a, []);
34
- return (_jsx(FormFieldContext.Provider, { value: { name: props.name }, children: _jsx(Controller, __assign({}, props)) }));
8
+ const Form = FormProvider;
9
+ const FormFieldContext = React.createContext({});
10
+ const FormField = ({ ...props }) => {
11
+ return (_jsx(FormFieldContext.Provider, { value: { name: props.name }, children: _jsx(Controller, { ...props }) }));
35
12
  };
36
- var useFormField = function () {
37
- var fieldContext = React.useContext(FormFieldContext);
38
- var itemContext = React.useContext(FormItemContext);
39
- var getFieldState = useFormContext().getFieldState;
40
- var formState = useFormState({ name: fieldContext.name });
41
- var fieldState = getFieldState(fieldContext.name, formState);
13
+ const useFormField = () => {
14
+ const fieldContext = React.useContext(FormFieldContext);
15
+ const itemContext = React.useContext(FormItemContext);
16
+ const { getFieldState } = useFormContext();
17
+ const formState = useFormState({ name: fieldContext.name });
18
+ const fieldState = getFieldState(fieldContext.name, formState);
42
19
  if (!fieldContext) {
43
20
  throw new Error("useFormField should be used within <FormField>");
44
21
  }
45
- var id = itemContext.id;
46
- return __assign({ id: id, name: fieldContext.name, formItemId: "".concat(id, "-form-item"), formDescriptionId: "".concat(id, "-form-item-description"), formMessageId: "".concat(id, "-form-item-message") }, fieldState);
22
+ const { id } = itemContext;
23
+ return {
24
+ id,
25
+ name: fieldContext.name,
26
+ formItemId: `${id}-form-item`,
27
+ formDescriptionId: `${id}-form-item-description`,
28
+ formMessageId: `${id}-form-item-message`,
29
+ ...fieldState,
30
+ };
47
31
  };
48
- var FormItemContext = React.createContext({});
49
- function FormItem(_a) {
50
- var className = _a.className, props = __rest(_a, ["className"]);
51
- var id = React.useId();
52
- return (_jsx(FormItemContext.Provider, { value: { id: id }, children: _jsx("div", __assign({ "data-slot": "form-item", className: cn("grid gap-2", className) }, props)) }));
32
+ const FormItemContext = React.createContext({});
33
+ function FormItem({ className, ...props }) {
34
+ const id = React.useId();
35
+ return (_jsx(FormItemContext.Provider, { value: { id }, children: _jsx("div", { "data-slot": "form-item", className: cn("grid gap-2", className), ...props }) }));
53
36
  }
54
- function FormLabel(_a) {
55
- var className = _a.className, props = __rest(_a, ["className"]);
56
- var _b = useFormField(), error = _b.error, formItemId = _b.formItemId;
57
- return (_jsx(Label, __assign({ "data-slot": "form-label", "data-error": !!error, className: cn("data-[error=true]:text-destructive-foreground", className), htmlFor: formItemId }, props)));
37
+ function FormLabel({ className, ...props }) {
38
+ const { error, formItemId } = useFormField();
39
+ return (_jsx(Label, { "data-slot": "form-label", "data-error": !!error, className: cn("data-[error=true]:text-destructive-foreground", className), htmlFor: formItemId, ...props }));
58
40
  }
59
- function FormControl(_a) {
60
- var props = __rest(_a, []);
61
- var _b = useFormField(), error = _b.error, formItemId = _b.formItemId, formDescriptionId = _b.formDescriptionId, formMessageId = _b.formMessageId;
62
- return (_jsx(Slot, __assign({ "data-slot": "form-control", id: formItemId, "aria-describedby": !error
63
- ? "".concat(formDescriptionId)
64
- : "".concat(formDescriptionId, " ").concat(formMessageId), "aria-invalid": !!error }, props)));
41
+ function FormControl({ ...props }) {
42
+ const { error, formItemId, formDescriptionId, formMessageId } = useFormField();
43
+ return (_jsx(Slot, { "data-slot": "form-control", id: formItemId, "aria-describedby": !error
44
+ ? `${formDescriptionId}`
45
+ : `${formDescriptionId} ${formMessageId}`, "aria-invalid": !!error, ...props }));
65
46
  }
66
- function FormDescription(_a) {
67
- var className = _a.className, props = __rest(_a, ["className"]);
68
- var formDescriptionId = useFormField().formDescriptionId;
69
- return (_jsx("p", __assign({ "data-slot": "form-description", id: formDescriptionId, className: cn("text-muted-foreground text-sm", className) }, props)));
47
+ function FormDescription({ className, ...props }) {
48
+ const { formDescriptionId } = useFormField();
49
+ return (_jsx("p", { "data-slot": "form-description", id: formDescriptionId, className: cn("text-muted-foreground text-sm", className), ...props }));
70
50
  }
71
- function FormMessage(_a) {
72
- var _b;
73
- var className = _a.className, props = __rest(_a, ["className"]);
74
- var _c = useFormField(), error = _c.error, formMessageId = _c.formMessageId;
75
- var body = error ? String((_b = error === null || error === void 0 ? void 0 : error.message) !== null && _b !== void 0 ? _b : "") : props.children;
51
+ function FormMessage({ className, ...props }) {
52
+ var _a;
53
+ const { error, formMessageId } = useFormField();
54
+ const body = error ? String((_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : "") : props.children;
76
55
  if (!body) {
77
56
  return null;
78
57
  }
79
- return (_jsx("p", __assign({ "data-slot": "form-message", id: formMessageId, className: cn("text-destructive-foreground text-sm", className) }, props, { children: body })));
58
+ return (_jsx("p", { "data-slot": "form-message", id: formMessageId, className: cn("text-destructive-foreground text-sm", className), ...props, children: body }));
80
59
  }
81
60
  export { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField, };