@myrjfa/ui 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/README.md +2 -0
- package/dist/dashboard/action-buttons.d.ts +16 -0
- package/dist/dashboard/action-buttons.d.ts.map +1 -0
- package/dist/dashboard/action-buttons.js +10 -0
- package/dist/dashboard/app-sidebar.d.ts +3 -0
- package/dist/dashboard/app-sidebar.d.ts.map +1 -0
- package/dist/dashboard/app-sidebar.js +145 -0
- package/dist/dashboard/card-header.d.ts +11 -0
- package/dist/dashboard/card-header.d.ts.map +1 -0
- package/dist/dashboard/card-header.js +8 -0
- package/dist/dashboard/dashboard-components.d.ts +13 -0
- package/dist/dashboard/dashboard-components.d.ts.map +1 -0
- package/dist/dashboard/dashboard-components.js +12 -0
- package/dist/dashboard/data-table.d.ts +19 -0
- package/dist/dashboard/data-table.d.ts.map +1 -0
- package/dist/dashboard/data-table.js +59 -0
- package/dist/dashboard/nav-main.d.ts +9 -0
- package/dist/dashboard/nav-main.d.ts.map +1 -0
- package/dist/dashboard/nav-main.js +10 -0
- package/dist/dashboard/nav-secondary.d.ts +10 -0
- package/dist/dashboard/nav-secondary.d.ts.map +1 -0
- package/dist/dashboard/nav-secondary.js +29 -0
- package/dist/dashboard/stats-card.d.ts +6 -0
- package/dist/dashboard/stats-card.d.ts.map +1 -0
- package/dist/dashboard/stats-card.js +6 -0
- package/dist/dashboard/table.d.ts +11 -0
- package/dist/dashboard/table.d.ts.map +1 -0
- package/dist/dashboard/table.js +67 -0
- package/dist/header/mobile-nav-item.d.ts +9 -0
- package/dist/header/mobile-nav-item.d.ts.map +1 -0
- package/dist/header/mobile-nav-item.js +7 -0
- package/dist/header/mobile-navbar.d.ts +5 -0
- package/dist/header/mobile-navbar.d.ts.map +1 -0
- package/dist/header/mobile-navbar.js +22 -0
- package/dist/header/nav-item.d.ts +9 -0
- package/dist/header/nav-item.d.ts.map +1 -0
- package/dist/header/nav-item.js +7 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/main/footer.d.ts +6 -0
- package/dist/main/footer.d.ts.map +1 -0
- package/dist/main/footer.js +47 -0
- package/dist/main/navbar.d.ts +6 -0
- package/dist/main/navbar.d.ts.map +1 -0
- package/dist/main/navbar.js +180 -0
- package/dist/main/paginationBar.d.ts +5 -0
- package/dist/main/paginationBar.d.ts.map +1 -0
- package/dist/main/paginationBar.js +30 -0
- package/dist/main/review-page.d.ts +13 -0
- package/dist/main/review-page.d.ts.map +1 -0
- package/dist/main/review-page.js +246 -0
- package/dist/misc/accordion.d.ts +7 -0
- package/dist/misc/accordion.d.ts.map +1 -0
- package/dist/misc/accordion.js +44 -0
- package/dist/misc/alert-dialog.d.ts +14 -0
- package/dist/misc/alert-dialog.d.ts.map +1 -0
- package/dist/misc/alert-dialog.js +72 -0
- package/dist/misc/alert.d.ts +9 -0
- package/dist/misc/alert.d.ts.map +1 -0
- package/dist/misc/alert.js +49 -0
- package/dist/misc/alertdialogclaude.d.ts +15 -0
- package/dist/misc/alertdialogclaude.d.ts.map +1 -0
- package/dist/misc/alertdialogclaude.js +226 -0
- package/dist/misc/avatar.d.ts +6 -0
- package/dist/misc/avatar.d.ts.map +1 -0
- package/dist/misc/avatar.js +39 -0
- package/dist/misc/badge.d.ts +9 -0
- package/dist/misc/badge.d.ts.map +1 -0
- package/dist/misc/badge.js +45 -0
- package/dist/misc/button.d.ts +10 -0
- package/dist/misc/button.d.ts.map +1 -0
- package/dist/misc/button.js +54 -0
- package/dist/misc/card.d.ts +9 -0
- package/dist/misc/card.d.ts.map +1 -0
- package/dist/misc/card.js +49 -0
- package/dist/misc/carousel.d.ts +20 -0
- package/dist/misc/carousel.d.ts.map +1 -0
- package/dist/misc/carousel.js +115 -0
- package/dist/misc/checkbox.d.ts +4 -0
- package/dist/misc/checkbox.d.ts.map +1 -0
- package/dist/misc/checkbox.js +32 -0
- package/dist/misc/command.d.ts +16 -0
- package/dist/misc/command.d.ts.map +1 -0
- package/dist/misc/command.js +65 -0
- package/dist/misc/datepicker.d.ts +12 -0
- package/dist/misc/datepicker.d.ts.map +1 -0
- package/dist/misc/datepicker.js +199 -0
- package/dist/misc/dialog.d.ts +13 -0
- package/dist/misc/dialog.d.ts.map +1 -0
- package/dist/misc/dialog.js +68 -0
- package/dist/misc/dropdown-menu.d.ts +25 -0
- package/dist/misc/dropdown-menu.d.ts.map +1 -0
- package/dist/misc/dropdown-menu.js +88 -0
- package/dist/misc/faq.d.ts +5 -0
- package/dist/misc/faq.d.ts.map +1 -0
- package/dist/misc/faq.js +6 -0
- package/dist/misc/file-preview.d.ts +8 -0
- package/dist/misc/file-preview.d.ts.map +1 -0
- package/dist/misc/file-preview.js +130 -0
- package/dist/misc/filter.d.ts +12 -0
- package/dist/misc/filter.d.ts.map +1 -0
- package/dist/misc/filter.js +47 -0
- package/dist/misc/filterBar.d.ts +5 -0
- package/dist/misc/filterBar.d.ts.map +1 -0
- package/dist/misc/filterBar.js +196 -0
- package/dist/misc/form.d.ts +25 -0
- package/dist/misc/form.d.ts.map +1 -0
- package/dist/misc/form.js +81 -0
- package/dist/misc/input.d.ts +4 -0
- package/dist/misc/input.d.ts.map +1 -0
- package/dist/misc/input.js +29 -0
- package/dist/misc/label.d.ts +4 -0
- package/dist/misc/label.d.ts.map +1 -0
- package/dist/misc/label.js +31 -0
- package/dist/misc/line-carousel.d.ts +9 -0
- package/dist/misc/line-carousel.d.ts.map +1 -0
- package/dist/misc/line-carousel.js +15 -0
- package/dist/misc/multiImageUploader.d.ts +9 -0
- package/dist/misc/multiImageUploader.d.ts.map +1 -0
- package/dist/misc/multiImageUploader.js +11 -0
- package/dist/misc/newsLetter.d.ts +3 -0
- package/dist/misc/newsLetter.d.ts.map +1 -0
- package/dist/misc/newsLetter.js +101 -0
- package/dist/misc/notification.d.ts +6 -0
- package/dist/misc/notification.d.ts.map +1 -0
- package/dist/misc/notification.js +148 -0
- package/dist/misc/pagination.d.ts +15 -0
- package/dist/misc/pagination.d.ts.map +1 -0
- package/dist/misc/pagination.js +59 -0
- package/dist/misc/password-eye.d.ts +6 -0
- package/dist/misc/password-eye.d.ts.map +1 -0
- package/dist/misc/password-eye.js +7 -0
- package/dist/misc/popover.d.ts +7 -0
- package/dist/misc/popover.d.ts.map +1 -0
- package/dist/misc/popover.js +43 -0
- package/dist/misc/progress.d.ts +4 -0
- package/dist/misc/progress.d.ts.map +1 -0
- package/dist/misc/progress.js +31 -0
- package/dist/misc/scroll-area.d.ts +5 -0
- package/dist/misc/scroll-area.d.ts.map +1 -0
- package/dist/misc/scroll-area.js +37 -0
- package/dist/misc/searchBar.d.ts +6 -0
- package/dist/misc/searchBar.d.ts.map +1 -0
- package/dist/misc/searchBar.js +93 -0
- package/dist/misc/searchBox.d.ts +12 -0
- package/dist/misc/searchBox.d.ts.map +1 -0
- package/dist/misc/searchBox.js +66 -0
- package/dist/misc/select.d.ts +13 -0
- package/dist/misc/select.d.ts.map +1 -0
- package/dist/misc/select.js +70 -0
- package/dist/misc/separator.d.ts +4 -0
- package/dist/misc/separator.d.ts.map +1 -0
- package/dist/misc/separator.js +31 -0
- package/dist/misc/share.d.ts +5 -0
- package/dist/misc/share.d.ts.map +1 -0
- package/dist/misc/share.js +213 -0
- package/dist/misc/sheet.d.ts +13 -0
- package/dist/misc/sheet.d.ts.map +1 -0
- package/dist/misc/sheet.js +72 -0
- package/dist/misc/sidebar.d.ts +70 -0
- package/dist/misc/sidebar.d.ts.map +1 -0
- package/dist/misc/sidebar.js +253 -0
- package/dist/misc/skeleton.d.ts +3 -0
- package/dist/misc/skeleton.d.ts.map +1 -0
- package/dist/misc/skeleton.js +29 -0
- package/dist/misc/starRating.d.ts +4 -0
- package/dist/misc/starRating.d.ts.map +1 -0
- package/dist/misc/starRating.js +21 -0
- package/dist/misc/stateCard.d.ts +7 -0
- package/dist/misc/stateCard.d.ts.map +1 -0
- package/dist/misc/stateCard.js +22 -0
- package/dist/misc/tabs.d.ts +8 -0
- package/dist/misc/tabs.d.ts.map +1 -0
- package/dist/misc/tabs.js +43 -0
- package/dist/misc/textarea.d.ts +4 -0
- package/dist/misc/textarea.d.ts.map +1 -0
- package/dist/misc/textarea.js +29 -0
- package/dist/misc/tile.d.ts +3 -0
- package/dist/misc/tile.d.ts.map +1 -0
- package/dist/misc/tile.js +137 -0
- package/dist/misc/tooltip.d.ts +8 -0
- package/dist/misc/tooltip.d.ts.map +1 -0
- package/dist/misc/tooltip.js +43 -0
- package/dist/profile/socialLink.d.ts +10 -0
- package/dist/profile/socialLink.d.ts.map +1 -0
- package/dist/profile/socialLink.js +82 -0
- package/package.json +79 -0
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
39
|
+
import { FileIcon, ImageIcon, VideoIcon } from 'lucide-react';
|
|
40
|
+
import { useState } from 'react';
|
|
41
|
+
import { showAlert } from './alertdialogclaude';
|
|
42
|
+
import { Button } from './button';
|
|
43
|
+
var mimeMap = {
|
|
44
|
+
'.pdf': 'application/pdf',
|
|
45
|
+
'.jpg': 'image/jpeg',
|
|
46
|
+
'.jpeg': 'image/jpeg',
|
|
47
|
+
'.png': 'image/png',
|
|
48
|
+
'.gif': 'image/gif',
|
|
49
|
+
'.webp': 'image/webp',
|
|
50
|
+
'.mp4': 'video/mp4',
|
|
51
|
+
'.webm': 'video/webm',
|
|
52
|
+
'.mov': 'video/quicktime',
|
|
53
|
+
// Add more as needed
|
|
54
|
+
};
|
|
55
|
+
var imageTypes = ["jpg", "jpeg", "png", "gif", "webp"];
|
|
56
|
+
var videotypes = ["mp4", "webm"];
|
|
57
|
+
var docTypes = ["pdf"];
|
|
58
|
+
var DocumentPreviewButton = function (_a) {
|
|
59
|
+
var filepath = _a.filepath, label = _a.label, icon = _a.icon, _b = _a.size, size = _b === void 0 ? 'default' : _b;
|
|
60
|
+
var _c = useState(false), loading = _c[0], setLoading = _c[1];
|
|
61
|
+
var labelInternal = label;
|
|
62
|
+
var IconInternal = icon || _jsx(FileIcon, { className: "h-8 w-8 text-chart-2" });
|
|
63
|
+
if (typeof filepath === 'string') {
|
|
64
|
+
var ext = filepath.split('.').pop() || "unknown";
|
|
65
|
+
if (imageTypes.includes(ext)) {
|
|
66
|
+
labelInternal = label || "View Image";
|
|
67
|
+
IconInternal = icon || _jsx(ImageIcon, { className: "h-8 w-8 text-chart-2" });
|
|
68
|
+
}
|
|
69
|
+
else if (videotypes.includes(ext)) {
|
|
70
|
+
labelInternal = label || "View Video";
|
|
71
|
+
IconInternal = icon || _jsx(VideoIcon, { className: "h-8 w-8 text-chart-2" });
|
|
72
|
+
}
|
|
73
|
+
else if (docTypes.includes(ext)) {
|
|
74
|
+
labelInternal = label || "View Doc";
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
var handleOpenFile = function () { return __awaiter(void 0, void 0, void 0, function () {
|
|
78
|
+
var blob, response, rawBlob, matchedExt, type, fileURL, error_1;
|
|
79
|
+
return __generator(this, function (_a) {
|
|
80
|
+
switch (_a.label) {
|
|
81
|
+
case 0:
|
|
82
|
+
_a.trys.push([0, 9, 11, 12]);
|
|
83
|
+
setLoading(true);
|
|
84
|
+
blob = void 0;
|
|
85
|
+
if (!(typeof filepath === 'string')) return [3 /*break*/, 5];
|
|
86
|
+
return [4 /*yield*/, fetch(filepath)];
|
|
87
|
+
case 1:
|
|
88
|
+
response = _a.sent();
|
|
89
|
+
if (!!response.ok) return [3 /*break*/, 3];
|
|
90
|
+
return [4 /*yield*/, showAlert('Error fetching file')];
|
|
91
|
+
case 2:
|
|
92
|
+
_a.sent();
|
|
93
|
+
return [2 /*return*/];
|
|
94
|
+
case 3: return [4 /*yield*/, response.blob()];
|
|
95
|
+
case 4:
|
|
96
|
+
rawBlob = _a.sent();
|
|
97
|
+
console.log('Blob type:', rawBlob.type);
|
|
98
|
+
matchedExt = Object.keys(mimeMap).find(function (ext) { return filepath.toLowerCase().endsWith(ext); });
|
|
99
|
+
type = matchedExt ? mimeMap[matchedExt] : rawBlob.type;
|
|
100
|
+
blob = new Blob([rawBlob], { type: type }); // Force correct type
|
|
101
|
+
return [3 /*break*/, 8];
|
|
102
|
+
case 5:
|
|
103
|
+
if (!(filepath instanceof File)) return [3 /*break*/, 6];
|
|
104
|
+
blob = new Blob([filepath], { type: 'application/pdf' });
|
|
105
|
+
return [3 /*break*/, 8];
|
|
106
|
+
case 6: return [4 /*yield*/, showAlert('Invalid file')];
|
|
107
|
+
case 7:
|
|
108
|
+
_a.sent();
|
|
109
|
+
return [2 /*return*/];
|
|
110
|
+
case 8:
|
|
111
|
+
fileURL = URL.createObjectURL(blob);
|
|
112
|
+
window.open(fileURL, '_blank', 'noopener,noreferrer');
|
|
113
|
+
return [3 /*break*/, 12];
|
|
114
|
+
case 9:
|
|
115
|
+
error_1 = _a.sent();
|
|
116
|
+
console.error('Error opening file:', error_1);
|
|
117
|
+
return [4 /*yield*/, showAlert('Could not open document.')];
|
|
118
|
+
case 10:
|
|
119
|
+
_a.sent();
|
|
120
|
+
return [3 /*break*/, 12];
|
|
121
|
+
case 11:
|
|
122
|
+
setLoading(false);
|
|
123
|
+
return [7 /*endfinally*/];
|
|
124
|
+
case 12: return [2 /*return*/];
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
}); };
|
|
128
|
+
return (_jsxs("div", { className: "flex flex-col items-center", children: [_jsxs(Button, { variant: "outline", size: size, className: "w-full cursor-pointer hidden md:flex", onClick: handleOpenFile, disabled: loading, children: [IconInternal, labelInternal] }), _jsx(Button, { variant: "outline", size: size, className: "w-full cursor-pointer flex md:hidden", onClick: handleOpenFile, disabled: loading, children: IconInternal })] }));
|
|
129
|
+
};
|
|
130
|
+
export default DocumentPreviewButton;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
type FilterProps = {
|
|
2
|
+
values: string[];
|
|
3
|
+
label: string;
|
|
4
|
+
formType: string;
|
|
5
|
+
selectedValue: string | null;
|
|
6
|
+
onChange: (value: string | null) => void;
|
|
7
|
+
others?: boolean;
|
|
8
|
+
};
|
|
9
|
+
export declare const uniqDecoded: (arr: string[]) => string[];
|
|
10
|
+
declare const Filter: React.FC<FilterProps>;
|
|
11
|
+
export default Filter;
|
|
12
|
+
//# sourceMappingURL=filter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../src/misc/filter.tsx"],"names":[],"mappings":"AAsBA,KAAK,WAAW,GAAG;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAA;CACnB,CAAC;AACF,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,EAAE,aACwC,CAAC;AAElF,QAAA,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAgHjC,CAAC;AAEF,eAAe,MAAM,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { cn } from "@myrjfa/state/dist/lib/utils";
|
|
4
|
+
import { Check, ChevronDown } from "lucide-react";
|
|
5
|
+
import { useEffect, useRef, useState } from "react";
|
|
6
|
+
import { Button } from "./button";
|
|
7
|
+
import { Command, CommandEmpty, CommandInput, CommandItem, CommandList } from "./command";
|
|
8
|
+
import { Input } from "./input";
|
|
9
|
+
import { Popover, PopoverContent, PopoverTrigger } from "./popover";
|
|
10
|
+
import { Select, SelectContent, SelectItem, SelectTrigger } from "./select";
|
|
11
|
+
export var uniqDecoded = function (arr) {
|
|
12
|
+
return Array.from(new Set(arr.map(function (v) { return decodeURIComponent(v.trim().toLowerCase()); })));
|
|
13
|
+
};
|
|
14
|
+
var Filter = function (_a) {
|
|
15
|
+
var _b;
|
|
16
|
+
var values = _a.values, label = _a.label, formType = _a.formType, selectedValue = _a.selectedValue, onChange = _a.onChange, others = _a.others;
|
|
17
|
+
var _c = useState(false), open = _c[0], setOpen = _c[1];
|
|
18
|
+
var _d = useState(0), popoverWidth = _d[0], setPopoverWidth = _d[1];
|
|
19
|
+
var triggerRef = useRef(null);
|
|
20
|
+
var _e = useState(false), isCustom = _e[0], setIsCustom = _e[1];
|
|
21
|
+
var _f = useState(""), customValue = _f[0], setCustomValue = _f[1];
|
|
22
|
+
var data = uniqDecoded(values);
|
|
23
|
+
useEffect(function () {
|
|
24
|
+
if (triggerRef.current) {
|
|
25
|
+
setPopoverWidth(triggerRef.current.offsetWidth);
|
|
26
|
+
}
|
|
27
|
+
}, [(_b = triggerRef.current) === null || _b === void 0 ? void 0 : _b.offsetWidth]);
|
|
28
|
+
useEffect(function () {
|
|
29
|
+
if (!open) {
|
|
30
|
+
setIsCustom(false);
|
|
31
|
+
setCustomValue("");
|
|
32
|
+
}
|
|
33
|
+
}, [open]);
|
|
34
|
+
return (_jsx("div", { className: cn("filter-container", label), children: formType === "select" ? (_jsxs(Select, { value: selectedValue !== null && selectedValue !== void 0 ? selectedValue : "", onValueChange: function (val) { return onChange(val === "clear" ? null : val); }, children: [_jsx(SelectTrigger, { className: "w-full bg-transparent hover:bg-muted border-none shadow-none", children: !selectedValue || selectedValue === "clear" || selectedValue[0] == '0'
|
|
35
|
+
? "Choose ".concat(label.toLowerCase(), "...")
|
|
36
|
+
: selectedValue }), _jsxs(SelectContent, { className: "w-full z-201", children: [_jsx(SelectItem, { value: "clear", children: _jsx("em", { children: "Clear" }) }), data.map(function (option) { return (_jsx(SelectItem, { value: option, children: option }, option)); })] })] })) : (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, className: "w-full overflow-y-auto", children: _jsxs(Button, { ref: triggerRef, variant: "ghost", role: "combobox", className: "filter-box justify-between w-full", children: [selectedValue || "Select ".concat(label.toLowerCase(), "..."), _jsx(ChevronDown, { className: "ml-2 h-4 w-4 shrink-0 opacity-50" })] }) }), _jsxs(PopoverContent, { className: "p-0 w-full z-201", style: { width: "".concat(popoverWidth, "px") }, align: "start", children: [_jsxs(Command, { children: [_jsx(CommandInput, { placeholder: "Search ".concat(label.toLowerCase(), "...") }), _jsx(CommandEmpty, { children: "No results found." }), _jsx(CommandList, { children: data.map(function (option) { return (_jsxs(CommandItem, { value: option, onSelect: function () {
|
|
37
|
+
onChange(option);
|
|
38
|
+
setOpen(false);
|
|
39
|
+
}, children: [_jsx(Check, { className: cn("mr-2 h-4 w-4", selectedValue === option ? "opacity-100" : "opacity-0") }), option] }, option)); }) })] }), others &&
|
|
40
|
+
(_jsx("div", { children: isCustom ? (_jsx("div", { className: "border-t px-5 py-2", children: _jsx(Input, { placeholder: "Enter other ".concat(label.toLowerCase()), value: customValue, onChange: function (e) { return setCustomValue(e.target.value); }, onKeyDown: function (e) {
|
|
41
|
+
if (e.key === "Enter" && customValue.trim()) {
|
|
42
|
+
onChange(customValue.trim());
|
|
43
|
+
setOpen(false);
|
|
44
|
+
}
|
|
45
|
+
}, autoFocus: true }) })) : (_jsx("div", { className: "border-t px-10 py-2 cursor-pointer text-sm hover:bg-muted", onClick: function () { return setIsCustom(true); }, children: "Other" })) }))] })] })) }));
|
|
46
|
+
};
|
|
47
|
+
export default Filter;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filterBar.d.ts","sourceRoot":"","sources":["../../src/misc/filterBar.tsx"],"names":[],"mappings":"AASA,OAAO,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAC;AAgT/D,MAAM,CAAC,OAAO,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,SAAS,EAAE,CAAA;CAAE,2CAMlE"}
|
|
@@ -0,0 +1,196 @@
|
|
|
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
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
23
|
+
import { retrieveCity, retrieveState } from "@myrjfa/state/dist/lib/utils";
|
|
24
|
+
import { Search, SearchIcon, SlidersHorizontal, X } from "lucide-react";
|
|
25
|
+
import { usePathname, useRouter, useSearchParams } from "next/navigation";
|
|
26
|
+
import { Suspense, useEffect, useState } from "react";
|
|
27
|
+
import { Button } from "./button";
|
|
28
|
+
import Filter from "./filter";
|
|
29
|
+
import { Sheet, SheetContent, SheetTitle, SheetTrigger } from "./sheet";
|
|
30
|
+
var filterOptions = [
|
|
31
|
+
{ label: "destination", type: "autoComplete", datatype: "string[]", displayName: "Destination" },
|
|
32
|
+
{ label: "skill", type: "autoComplete", datatype: "string[]", displayName: "Skills" },
|
|
33
|
+
{ label: "rating", type: "select", datatype: "number", displayName: "Rating" },
|
|
34
|
+
];
|
|
35
|
+
function FilterBarComponent(_a) {
|
|
36
|
+
var tiles = _a.tiles;
|
|
37
|
+
var searchParams = useSearchParams();
|
|
38
|
+
var newParams = new URLSearchParams(searchParams);
|
|
39
|
+
var pathname = usePathname();
|
|
40
|
+
var router = useRouter();
|
|
41
|
+
var _b = useState({
|
|
42
|
+
destination: [],
|
|
43
|
+
rating: 0,
|
|
44
|
+
skill: [],
|
|
45
|
+
category: [],
|
|
46
|
+
hostRating: 0
|
|
47
|
+
}), filterParam = _b[0], setFilterParam = _b[1];
|
|
48
|
+
useEffect(function () {
|
|
49
|
+
var _a, _b, _c;
|
|
50
|
+
var destination = ((_a = searchParams.get("destination")) === null || _a === void 0 ? void 0 : _a.split(',')) || [];
|
|
51
|
+
var rating = parseInt(searchParams.get("rating") || "0", 10);
|
|
52
|
+
var skill = ((_b = searchParams.get("skill")) === null || _b === void 0 ? void 0 : _b.split(',')) || [];
|
|
53
|
+
var category = ((_c = searchParams.get("category")) === null || _c === void 0 ? void 0 : _c.split(',')) || [];
|
|
54
|
+
var hostRating = parseInt(searchParams.get("hostRating") || "0", 10);
|
|
55
|
+
setFilterParam({
|
|
56
|
+
destination: destination,
|
|
57
|
+
rating: rating,
|
|
58
|
+
skill: skill,
|
|
59
|
+
category: category,
|
|
60
|
+
hostRating: hostRating,
|
|
61
|
+
});
|
|
62
|
+
}, [searchParams]);
|
|
63
|
+
var changeMultiParams = function (params) {
|
|
64
|
+
newParams.set('page', '1');
|
|
65
|
+
Object.entries(params).forEach(function (_a) {
|
|
66
|
+
var key = _a[0], value = _a[1];
|
|
67
|
+
if (Array.isArray(value) && value.length > 0) {
|
|
68
|
+
newParams.set(key, value.join(','));
|
|
69
|
+
}
|
|
70
|
+
else if (value !== undefined && value !== null && value !== '' && value !== 0 && Array.isArray(value) === false) {
|
|
71
|
+
newParams.set(key, value.toString());
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
newParams.delete(key);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
router.replace("".concat(pathname, "?").concat(newParams.toString()));
|
|
78
|
+
return newParams;
|
|
79
|
+
};
|
|
80
|
+
var filterMap = {
|
|
81
|
+
destination: (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(),
|
|
82
|
+
skill: (tiles !== null && tiles !== void 0 ? tiles : []).flatMap(function (tile) { return tile.skills || []; }),
|
|
83
|
+
rating: ["1 star and above", "2 star and above", "3 star and above", "4 star and above", "5 star only"],
|
|
84
|
+
};
|
|
85
|
+
var handleFilterChange = function (label, value, datatype) {
|
|
86
|
+
if (value === null || value === "clear") {
|
|
87
|
+
setFilterParam(function (prev) {
|
|
88
|
+
var _a;
|
|
89
|
+
return (__assign(__assign({}, prev), (_a = {}, _a[label] = datatype.includes('[]') ? [] : (datatype === 'number' ? 0 : ''), _a)));
|
|
90
|
+
});
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
setFilterParam(function (prev) {
|
|
94
|
+
var _a, _b;
|
|
95
|
+
var currentValues = prev[label];
|
|
96
|
+
var newValue = datatype === 'number' ? Number(value[0]) : value;
|
|
97
|
+
if (currentValues == newValue || (Array.isArray(currentValues) && currentValues.includes(newValue))) {
|
|
98
|
+
return prev;
|
|
99
|
+
}
|
|
100
|
+
else if (Array.isArray(currentValues)) {
|
|
101
|
+
// Add if not selected
|
|
102
|
+
return __assign(__assign({}, prev), (_a = {}, _a[label] = __spreadArray(__spreadArray([], currentValues, true), [newValue], false), _a));
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
return __assign(__assign({}, prev), (_b = {}, _b[label] = newValue, _b));
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
var removeFilter = function (label, value) {
|
|
110
|
+
setFilterParam(function (prev) {
|
|
111
|
+
var _a;
|
|
112
|
+
return (__assign(__assign({}, prev), (_a = {}, _a[label] = Array.isArray(prev[label])
|
|
113
|
+
? prev[label].filter(function (v) { return v !== value; })
|
|
114
|
+
: prev[label] === value ? 0 : '', _a)));
|
|
115
|
+
});
|
|
116
|
+
};
|
|
117
|
+
var _c = useState(false), sheetOpen = _c[0], setSheetOpen = _c[1];
|
|
118
|
+
var getActiveFilters = function () {
|
|
119
|
+
var filters = [];
|
|
120
|
+
Object.entries(filterParam).forEach(function (_a) {
|
|
121
|
+
var key = _a[0], values = _a[1];
|
|
122
|
+
if (Array.isArray(values) && values.length > 0) {
|
|
123
|
+
var option_1 = filterOptions.find(function (opt) { return opt.label === key; });
|
|
124
|
+
if (option_1) {
|
|
125
|
+
values.forEach(function (value) {
|
|
126
|
+
filters.push({
|
|
127
|
+
label: key,
|
|
128
|
+
value: value,
|
|
129
|
+
displayName: option_1.displayName
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
else if (!Array.isArray(values) && values !== 0) {
|
|
135
|
+
var option = filterOptions.find(function (opt) { return opt.label === key; });
|
|
136
|
+
if (option && values) {
|
|
137
|
+
filters.push({
|
|
138
|
+
label: key,
|
|
139
|
+
value: values,
|
|
140
|
+
displayName: option.displayName
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
});
|
|
145
|
+
return filters;
|
|
146
|
+
};
|
|
147
|
+
var activeFilters = getActiveFilters();
|
|
148
|
+
var clearAllFilters = function () {
|
|
149
|
+
var clearedParams = {
|
|
150
|
+
destination: [],
|
|
151
|
+
rating: 0,
|
|
152
|
+
skill: [],
|
|
153
|
+
category: [],
|
|
154
|
+
hostRating: 0
|
|
155
|
+
};
|
|
156
|
+
setFilterParam(clearedParams);
|
|
157
|
+
changeMultiParams(clearedParams);
|
|
158
|
+
setSheetOpen(false);
|
|
159
|
+
};
|
|
160
|
+
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: [filterOptions.slice(0, 3).map(function (_a) {
|
|
161
|
+
var _b;
|
|
162
|
+
var label = _a.label, type = _a.type, datatype = _a.datatype, displayName = _a.displayName;
|
|
163
|
+
return (_jsxs("div", { className: "items-center flex-1 hidden md:flex", children: [_jsx("div", { className: "w-full", children: _jsx(Filter, { label: label, formType: type, selectedValue: datatype.includes('[]')
|
|
164
|
+
? filterParam[label].length > 0
|
|
165
|
+
? "".concat(filterParam[label].length, " selected")
|
|
166
|
+
: ''
|
|
167
|
+
: ((_b = filterParam[label]) === null || _b === void 0 ? void 0 : _b.toString()) + ' star or more', values: filterMap[label], onChange: function (value) { return handleFilterChange(label, value, datatype); } }) }), _jsx("div", { className: "h-6 w-px bg-gray-300 mx-4 md:h-8" })] }, label));
|
|
168
|
+
}), _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..." })] }) }), _jsxs(SheetContent, { side: "top", className: "w-full p-8 z-200 md:items-center", children: [_jsx(SheetTitle, { className: "text-lg font-semibold mb-4", children: "Filters" }), _jsx("div", { className: "space-y-6 md:w-3/5", children: filterOptions.map(function (_a) {
|
|
169
|
+
var _b;
|
|
170
|
+
var label = _a.label, type = _a.type, datatype = _a.datatype, displayName = _a.displayName;
|
|
171
|
+
return (_jsxs("div", { className: "space-y-2", children: [_jsx("label", { className: "text-sm font-medium text-gray-700", children: displayName }), _jsx("div", { className: "bg-gray-50 rounded-lg p-3", children: _jsx(Filter, { label: label, formType: type, selectedValue: datatype.includes('[]')
|
|
172
|
+
? filterParam[label].length > 0
|
|
173
|
+
? "".concat(filterParam[label].length, " selected")
|
|
174
|
+
: ''
|
|
175
|
+
: ((_b = filterParam[label]) === null || _b === void 0 ? void 0 : _b.toString()) + ' star or more', values: filterMap[label], onChange: function (value) { return handleFilterChange(label, value, datatype); } }) })] }, label));
|
|
176
|
+
}) }), _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 () {
|
|
177
|
+
changeMultiParams(filterParam);
|
|
178
|
+
setSheetOpen(false);
|
|
179
|
+
}, 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'
|
|
180
|
+
? "".concat(filter.value, " star or more")
|
|
181
|
+
: filter.value }), _jsx("button", { onClick: function () {
|
|
182
|
+
var _a;
|
|
183
|
+
removeFilter(filter.label, filter.value);
|
|
184
|
+
// Auto-apply the change
|
|
185
|
+
var newParams = __assign(__assign({}, filterParam), (_a = {}, _a[filter.label] = Array.isArray(filterParam[filter.label])
|
|
186
|
+
? filterParam[filter.label].filter(function (v) { return v !== filter.value; })
|
|
187
|
+
: 0, _a));
|
|
188
|
+
changeMultiParams(newParams);
|
|
189
|
+
}, 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))); }), activeFilters.length > 0 && (_jsxs("button", { onClick: function () {
|
|
190
|
+
clearAllFilters();
|
|
191
|
+
}, 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 })] }))] }) }))] }));
|
|
192
|
+
}
|
|
193
|
+
export default function FilterBar(_a) {
|
|
194
|
+
var tiles = _a.tiles;
|
|
195
|
+
return (_jsx(Suspense, { fallback: _jsx("div", { className: "w-full h-screen flex items-center justify-center", children: "Loading..." }), children: _jsx(FilterBarComponent, { tiles: tiles }) }));
|
|
196
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as LabelPrimitive from "@radix-ui/react-label";
|
|
2
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { type ControllerProps, type FieldPath, type FieldValues } from "react-hook-form";
|
|
5
|
+
declare const Form: <TFieldValues extends FieldValues, TContext = any, TTransformedValues = TFieldValues>(props: import("react-hook-form").FormProviderProps<TFieldValues, TContext, TTransformedValues>) => React.JSX.Element;
|
|
6
|
+
declare const FormField: <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({ ...props }: ControllerProps<TFieldValues, TName>) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
declare const useFormField: () => {
|
|
8
|
+
invalid: boolean;
|
|
9
|
+
isDirty: boolean;
|
|
10
|
+
isTouched: boolean;
|
|
11
|
+
isValidating: boolean;
|
|
12
|
+
error?: import("react-hook-form").FieldError;
|
|
13
|
+
id: string;
|
|
14
|
+
name: string;
|
|
15
|
+
formItemId: string;
|
|
16
|
+
formDescriptionId: string;
|
|
17
|
+
formMessageId: string;
|
|
18
|
+
};
|
|
19
|
+
declare function FormItem({ className, ...props }: React.ComponentProps<"div">): import("react/jsx-runtime").JSX.Element;
|
|
20
|
+
declare function FormLabel({ className, ...props }: React.ComponentProps<typeof LabelPrimitive.Root>): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
declare function FormControl({ ...props }: React.ComponentProps<typeof Slot>): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
declare function FormDescription({ className, ...props }: React.ComponentProps<"p">): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
declare function FormMessage({ className, ...props }: React.ComponentProps<"p">): import("react/jsx-runtime").JSX.Element | null;
|
|
24
|
+
export { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField, };
|
|
25
|
+
//# sourceMappingURL=form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../../src/misc/form.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAA;AAE3C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAEL,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,WAAW,EAIjB,MAAM,iBAAiB,CAAA;AAIxB,QAAA,MAAM,IAAI,4MAAe,CAAA;AAazB,QAAA,MAAM,SAAS,GACb,YAAY,SAAS,WAAW,GAAG,WAAW,EAC9C,KAAK,SAAS,SAAS,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,YAAY,CAAC,EAC/D,cAEC,eAAe,CAAC,YAAY,EAAE,KAAK,CAAC,4CAMtC,CAAA;AAED,QAAA,MAAM,YAAY;;;;;;;;;;;CAqBjB,CAAA;AAUD,iBAAS,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,2CAYrE;AAED,iBAAS,SAAS,CAAC,EACjB,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC,2CAYlD;AAED,iBAAS,WAAW,CAAC,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,IAAI,CAAC,2CAgBnE;AAED,iBAAS,eAAe,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,2CAW1E;AAED,iBAAS,WAAW,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,kDAkBtE;AAED,OAAO,EACL,YAAY,EACZ,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,WAAW,EACX,eAAe,EACf,WAAW,EACX,SAAS,GACV,CAAA"}
|
|
@@ -0,0 +1,81 @@
|
|
|
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
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
25
|
+
import { Slot } from "@radix-ui/react-slot";
|
|
26
|
+
import { cn } from "@myrjfa/state/dist/lib/utils";
|
|
27
|
+
import * as React from "react";
|
|
28
|
+
import { Controller, FormProvider, useFormContext, useFormState, } from "react-hook-form";
|
|
29
|
+
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)) }));
|
|
35
|
+
};
|
|
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);
|
|
42
|
+
if (!fieldContext) {
|
|
43
|
+
throw new Error("useFormField should be used within <FormField>");
|
|
44
|
+
}
|
|
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);
|
|
47
|
+
};
|
|
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)) }));
|
|
53
|
+
}
|
|
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)));
|
|
58
|
+
}
|
|
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)));
|
|
65
|
+
}
|
|
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)));
|
|
70
|
+
}
|
|
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;
|
|
76
|
+
if (!body) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
return (_jsx("p", __assign({ "data-slot": "form-message", id: formMessageId, className: cn("text-destructive-foreground text-sm", className) }, props, { children: body })));
|
|
80
|
+
}
|
|
81
|
+
export { useFormField, Form, FormItem, FormLabel, FormControl, FormDescription, FormMessage, FormField, };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/misc/input.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,iBAAS,KAAK,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,2CAc1E;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
var __assign = (this && this.__assign) || function () {
|
|
2
|
+
__assign = Object.assign || function(t) {
|
|
3
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
4
|
+
s = arguments[i];
|
|
5
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
6
|
+
t[p] = s[p];
|
|
7
|
+
}
|
|
8
|
+
return t;
|
|
9
|
+
};
|
|
10
|
+
return __assign.apply(this, arguments);
|
|
11
|
+
};
|
|
12
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
13
|
+
var t = {};
|
|
14
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
15
|
+
t[p] = s[p];
|
|
16
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
17
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
18
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
19
|
+
t[p[i]] = s[p[i]];
|
|
20
|
+
}
|
|
21
|
+
return t;
|
|
22
|
+
};
|
|
23
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
24
|
+
import { cn } from "@myrjfa/state/dist/lib/utils";
|
|
25
|
+
function Input(_a) {
|
|
26
|
+
var className = _a.className, type = _a.type, props = __rest(_a, ["className", "type"]);
|
|
27
|
+
return (_jsx("input", __assign({ type: type, "data-slot": "input", className: cn("border-input file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", "focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]", "aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive", className) }, props)));
|
|
28
|
+
}
|
|
29
|
+
export { Input };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"label.d.ts","sourceRoot":"","sources":["../../src/misc/label.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAA;AAIvD,iBAAS,KAAK,CAAC,EACb,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,cAAc,CAAC,IAAI,CAAC,2CAWlD;AAED,OAAO,EAAE,KAAK,EAAE,CAAA"}
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
25
|
+
import * as LabelPrimitive from "@radix-ui/react-label";
|
|
26
|
+
import { cn } from "@myrjfa/state/dist/lib/utils";
|
|
27
|
+
function Label(_a) {
|
|
28
|
+
var className = _a.className, props = __rest(_a, ["className"]);
|
|
29
|
+
return (_jsx(LabelPrimitive.Root, __assign({ "data-slot": "label", className: cn("flex items-center gap-2 leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50", className) }, props)));
|
|
30
|
+
}
|
|
31
|
+
export { Label };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { LucideProps } from "lucide-react";
|
|
2
|
+
import { ForwardRefExoticComponent, RefAttributes } from "react";
|
|
3
|
+
export default function LineCarousel({ skillsData }: {
|
|
4
|
+
skillsData: {
|
|
5
|
+
icon: ForwardRefExoticComponent<Omit<LucideProps, "ref"> & RefAttributes<SVGSVGElement>>;
|
|
6
|
+
title: string;
|
|
7
|
+
}[];
|
|
8
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=line-carousel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line-carousel.d.ts","sourceRoot":"","sources":["../../src/misc/line-carousel.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEjE,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,UAAU,EAAE,EAAE;IACjD,UAAU,EAAE;QACR,IAAI,EAAE,yBAAyB,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,GAAG,aAAa,CAAC,aAAa,CAAC,CAAC,CAAC;QACzF,KAAK,EAAE,MAAM,CAAC;KACjB,EAAE,CAAA;CACN,2CA6BA"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
2
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
3
|
+
if (ar || !(i in from)) {
|
|
4
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
5
|
+
ar[i] = from[i];
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
9
|
+
};
|
|
10
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
11
|
+
export default function LineCarousel(_a) {
|
|
12
|
+
var skillsData = _a.skillsData;
|
|
13
|
+
var loopedSkills = __spreadArray(__spreadArray(__spreadArray([], skillsData, true), skillsData, true), skillsData, true);
|
|
14
|
+
return (_jsxs("section", { className: "relative w-full pt-10 pb-5 bg-background text-white", children: [_jsx("h2", { className: "text-2xl font-bold text-left mx-10 md:mx-15 lg:mx-25 tracking-tight text-foreground", children: "Popular Skills Offered" }), _jsx("p", { className: "text-muted-foreground mx-10 md:mx-15 lg:mx-25 mb-10", children: "Discover In-Demand Creative Skills for the Modern World." }), _jsxs("div", { className: "relative w-full overflow-hidden", children: [_jsx("div", { className: "absolute inset-y-0 left-0 w-1/4 bg-gradient-to-r from-background to-transparent z-10" }), _jsx("div", { className: "absolute inset-y-0 right-0 w-1/4 bg-gradient-to-l from-background to-transparent z-10" }), _jsx("div", { className: "flex animate-scroll items-center space-x-10", children: loopedSkills.map(function (item, i) { return (_jsxs("div", { className: "flex items-center space-x-3 px-5 text-lg", children: [_jsx(item.icon, { className: "w-6 h-6 text-foreground" }), _jsx("span", { className: "text-muted-foreground font-semibold", children: item.title })] }, i)); }) })] })] }));
|
|
15
|
+
}
|