@myrjfa/ui 2.0.0 → 2.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.
- package/LICENSE +201 -201
- package/README.md +2 -2
- package/dist/chat/ChatMain.d.ts +3 -1
- package/dist/chat/ChatMain.d.ts.map +1 -1
- package/dist/chat/ChatMain.js +2 -1
- package/dist/chat/MessageBubble.js +4 -4
- package/dist/chat/MessageInput.d.ts +1 -1
- package/dist/chat/MessageInput.d.ts.map +1 -1
- package/dist/chat/components/ParticipantSelector.d.ts +1 -1
- package/dist/chat/components/ParticipantSelector.d.ts.map +1 -1
- package/dist/dashboard/app-sidebar.js +3 -3
- package/dist/dashboard/data-table.d.ts +2 -1
- package/dist/dashboard/data-table.d.ts.map +1 -1
- package/dist/dashboard/data-table.js +3 -3
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/main/navbar.js +5 -5
- package/dist/main/review-page.d.ts +1 -1
- package/dist/main/review-page.d.ts.map +1 -1
- package/dist/main/review-page.js +49 -9
- package/dist/misc/alertdialogclaude.d.ts.map +1 -1
- package/dist/misc/alertdialogclaude.js +1 -1
- package/dist/misc/button.d.ts +9 -9
- package/dist/misc/command.js +1 -1
- package/dist/misc/dashboard/action-buttons.js +31 -0
- package/dist/misc/document-upload-button.d.ts +12 -0
- package/dist/misc/document-upload-button.d.ts.map +1 -0
- package/dist/misc/document-upload-button.js +27 -0
- package/dist/misc/empty-state.d.ts +10 -0
- package/dist/misc/empty-state.d.ts.map +1 -0
- package/dist/misc/empty-state.js +5 -0
- package/dist/misc/filter.d.ts.map +1 -1
- package/dist/misc/filter.js +1 -1
- package/dist/misc/image-compressor.d.ts +29 -0
- package/dist/misc/image-compressor.d.ts.map +1 -0
- package/dist/misc/image-compressor.js +70 -0
- package/dist/misc/image-cropper.d.ts +10 -0
- package/dist/misc/image-cropper.d.ts.map +1 -0
- package/dist/misc/image-cropper.js +44 -0
- package/dist/misc/input.d.ts.map +1 -1
- package/dist/misc/input.js +1 -1
- package/dist/misc/misc/alertdialogclaude.js +221 -0
- package/dist/misc/misc/button.js +46 -0
- package/dist/misc/misc/dropdown-menu.js +136 -0
- package/dist/misc/multiImageUploader.d.ts +2 -1
- package/dist/misc/multiImageUploader.d.ts.map +1 -1
- package/dist/misc/multiImageUploader.js +26 -2
- package/dist/misc/newsLetter.js +1 -1
- package/dist/misc/notification.js +2 -2
- package/dist/misc/popover.d.ts.map +1 -1
- package/dist/misc/popover.js +1 -1
- package/dist/misc/pwa-install-button.d.ts +9 -0
- package/dist/misc/pwa-install-button.d.ts.map +1 -0
- package/dist/misc/pwa-install-button.js +158 -0
- package/dist/misc/select.d.ts.map +1 -1
- package/dist/misc/select.js +3 -3
- package/dist/misc/skeleton.d.ts +36 -1
- package/dist/misc/skeleton.d.ts.map +1 -1
- package/dist/misc/skeleton.js +40 -3
- package/dist/misc/tile.js +3 -3
- package/dist/misc/whatsapp-help.d.ts +9 -0
- package/dist/misc/whatsapp-help.d.ts.map +1 -0
- package/dist/misc/whatsapp-help.js +13 -0
- package/dist/profile/socialLink.d.ts +1 -1
- package/dist/profile/socialLink.d.ts.map +1 -1
- package/dist/profile/socialLink.js +49 -19
- package/package.json +5 -4
package/dist/misc/input.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { cn } from "@myrjfa/state";
|
|
3
3
|
function Input({ className, type, ...props }) {
|
|
4
|
-
return (_jsx("input", { 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 }));
|
|
4
|
+
return (_jsx("input", { type: type, "data-slot": "input", onWheel: (e) => e.currentTarget.blur(), 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", "[&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none", className), ...props }));
|
|
5
5
|
}
|
|
6
6
|
export { Input };
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
// AlertDialog.tsx
|
|
2
|
+
'use client';
|
|
3
|
+
"use strict";
|
|
4
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
5
|
+
if (k2 === undefined) k2 = k;
|
|
6
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
7
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
8
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
9
|
+
}
|
|
10
|
+
Object.defineProperty(o, k2, desc);
|
|
11
|
+
}) : (function(o, m, k, k2) {
|
|
12
|
+
if (k2 === undefined) k2 = k;
|
|
13
|
+
o[k2] = m[k];
|
|
14
|
+
}));
|
|
15
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
16
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
17
|
+
}) : function(o, v) {
|
|
18
|
+
o["default"] = v;
|
|
19
|
+
});
|
|
20
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
21
|
+
var ownKeys = function(o) {
|
|
22
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
23
|
+
var ar = [];
|
|
24
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
25
|
+
return ar;
|
|
26
|
+
};
|
|
27
|
+
return ownKeys(o);
|
|
28
|
+
};
|
|
29
|
+
return function (mod) {
|
|
30
|
+
if (mod && mod.__esModule) return mod;
|
|
31
|
+
var result = {};
|
|
32
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
33
|
+
__setModuleDefault(result, mod);
|
|
34
|
+
return result;
|
|
35
|
+
};
|
|
36
|
+
})();
|
|
37
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
38
|
+
var t = {};
|
|
39
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
40
|
+
t[p] = s[p];
|
|
41
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
42
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
43
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
44
|
+
t[p[i]] = s[p[i]];
|
|
45
|
+
}
|
|
46
|
+
return t;
|
|
47
|
+
};
|
|
48
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
49
|
+
exports.confirmActions = exports.deleteActions = void 0;
|
|
50
|
+
exports.showAlert = showAlert;
|
|
51
|
+
exports.AlertDialog = AlertDialog;
|
|
52
|
+
exports.AlertDialogDemo = AlertDialogDemo;
|
|
53
|
+
const AlertDialogPrimitive = __importStar(require("@radix-ui/react-alert-dialog"));
|
|
54
|
+
const state_1 = require("@myrjfa/state");
|
|
55
|
+
const lucide_react_1 = require("lucide-react");
|
|
56
|
+
const react_1 = require("react");
|
|
57
|
+
const client_1 = require("react-dom/client");
|
|
58
|
+
const fa6_1 = require("react-icons/fa6");
|
|
59
|
+
const button_1 = require("./button");
|
|
60
|
+
const deleteActions = (cancel) => [
|
|
61
|
+
{
|
|
62
|
+
label: "Cancel",
|
|
63
|
+
variant: "outline",
|
|
64
|
+
icon: React.createElement(lucide_react_1.X, null),
|
|
65
|
+
action: () => cancel()
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
label: "Delete",
|
|
69
|
+
variant: "destructive",
|
|
70
|
+
icon: React.createElement(fa6_1.FaDumpster, null),
|
|
71
|
+
action: () => console.log("deleting")
|
|
72
|
+
}
|
|
73
|
+
];
|
|
74
|
+
exports.deleteActions = deleteActions;
|
|
75
|
+
const confirmActions = (cancel) => [
|
|
76
|
+
{
|
|
77
|
+
label: "Cancel",
|
|
78
|
+
variant: "outline",
|
|
79
|
+
icon: React.createElement(lucide_react_1.X, null),
|
|
80
|
+
action: () => cancel()
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
label: "Proceed",
|
|
84
|
+
variant: "default",
|
|
85
|
+
icon: React.createElement(fa6_1.FaHandPointer, null),
|
|
86
|
+
action: () => console.log("proceeding")
|
|
87
|
+
}
|
|
88
|
+
];
|
|
89
|
+
exports.confirmActions = confirmActions;
|
|
90
|
+
function showAlert(message, title, actions) {
|
|
91
|
+
return new Promise((resolve) => {
|
|
92
|
+
const alertRoot = document.createElement('div');
|
|
93
|
+
alertRoot.id = 'alert-root';
|
|
94
|
+
document.body.appendChild(alertRoot);
|
|
95
|
+
const cleanup = () => {
|
|
96
|
+
document.body.removeChild(alertRoot);
|
|
97
|
+
resolve();
|
|
98
|
+
};
|
|
99
|
+
const AlertComponent = () => {
|
|
100
|
+
const [open, setOpen] = (0, react_1.useState)(true);
|
|
101
|
+
(0, react_1.useEffect)(() => {
|
|
102
|
+
if (!open) {
|
|
103
|
+
setTimeout(cleanup, 300); // Allow time for close animation
|
|
104
|
+
}
|
|
105
|
+
}, [open]);
|
|
106
|
+
return (React.createElement(AlertDialog, { message: message, title: title, actions: actions, isOpen: open, onOpenChange: setOpen }));
|
|
107
|
+
};
|
|
108
|
+
const root = (0, client_1.createRoot)(alertRoot);
|
|
109
|
+
root.render(React.createElement(AlertComponent, null));
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
function AlertDialog({ message, title, actions = [], isOpen, onOpenChange, }) {
|
|
113
|
+
return (React.createElement(AlertDialogPrimitive.Root, { open: isOpen, onOpenChange: onOpenChange },
|
|
114
|
+
React.createElement(AlertDialogPrimitive.Portal, null,
|
|
115
|
+
React.createElement(AlertDialogPrimitive.Overlay, { className: "fixed inset-0 z-50 bg-black/50 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0" }),
|
|
116
|
+
React.createElement(AlertDialogPrimitive.Content, { className: "fixed left-1/2 top-1/2 z-50 max-h-[85vh] w-full max-w-md -translate-x-1/2 -translate-y-1/2 rounded-lg border border-neutral-200 bg-white p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-top-[2%] data-[state=open]:slide-in-from-top-[2%] dark:border-neutral-800 dark:bg-neutral-950 sm:rounded-lg md:w-full" },
|
|
117
|
+
React.createElement("div", { className: "flex flex-col space-y-2" },
|
|
118
|
+
title ? (React.createElement("div", { className: "flex items-center justify-between" },
|
|
119
|
+
React.createElement(AlertDialogPrimitive.Title, { className: "text-lg font-semibold text-neutral-900 dark:text-neutral-50 flex-grow text-center" }, title),
|
|
120
|
+
React.createElement(button_1.Button, { variant: "ghost", onClick: () => onOpenChange(false) },
|
|
121
|
+
React.createElement(lucide_react_1.X, null)))) : (React.createElement(AlertDialogPrimitive.Title, { className: "sr-only" }, "Alert")),
|
|
122
|
+
React.createElement(AlertDialogPrimitive.Description, { className: "text-sm text-neutral-700 dark:text-neutral-300 text-center" }, message)),
|
|
123
|
+
React.createElement("div", { className: (0, state_1.cn)("mt-6 flex flex-col-reverse gap-2 sm:flex-row", actions.length > 0 ? "sm:justify-end" : "justify-center") }, actions.length > 0 ? (actions.map((action, index) => (React.createElement(AlertDialogButton, { key: index, variant: action.variant || 'default', onClick: () => {
|
|
124
|
+
action.action();
|
|
125
|
+
onOpenChange(false);
|
|
126
|
+
} }, action.label)))) : (React.createElement(AlertDialogButton, { onClick: () => onOpenChange(false) }, "OK")))))));
|
|
127
|
+
}
|
|
128
|
+
function AlertDialogButton(_a) {
|
|
129
|
+
var { variant = 'default', children, className } = _a, props = __rest(_a, ["variant", "children", "className"]);
|
|
130
|
+
return (React.createElement(button_1.Button, Object.assign({ className: className, variant: variant }, props), children));
|
|
131
|
+
}
|
|
132
|
+
// Example usage component
|
|
133
|
+
function AlertDialogDemo() {
|
|
134
|
+
const [isOpen, setIsOpen] = (0, react_1.useState)(false);
|
|
135
|
+
const [alertConfig, setAlertConfig] = (0, react_1.useState)({
|
|
136
|
+
message: "This is a sample alert message",
|
|
137
|
+
title: "Alert",
|
|
138
|
+
actions: []
|
|
139
|
+
});
|
|
140
|
+
const showSimpleAlert = () => {
|
|
141
|
+
setAlertConfig({
|
|
142
|
+
message: "This is a simple alert with only an OK button",
|
|
143
|
+
title: "",
|
|
144
|
+
actions: []
|
|
145
|
+
});
|
|
146
|
+
setIsOpen(true);
|
|
147
|
+
};
|
|
148
|
+
const showFullAlert = () => {
|
|
149
|
+
setAlertConfig({
|
|
150
|
+
message: "Would you like to proceed with this action?",
|
|
151
|
+
title: "Confirmation Required",
|
|
152
|
+
actions: [
|
|
153
|
+
{
|
|
154
|
+
label: "Cancel",
|
|
155
|
+
variant: "outline",
|
|
156
|
+
icon: React.createElement(lucide_react_1.X, null),
|
|
157
|
+
action: () => console.log("Action cancelled")
|
|
158
|
+
},
|
|
159
|
+
{
|
|
160
|
+
label: "Proceed",
|
|
161
|
+
variant: "default",
|
|
162
|
+
icon: React.createElement(lucide_react_1.Forward, null),
|
|
163
|
+
action: () => console.log("Action confirmed")
|
|
164
|
+
}
|
|
165
|
+
]
|
|
166
|
+
});
|
|
167
|
+
setIsOpen(true);
|
|
168
|
+
};
|
|
169
|
+
const showDestructiveAlert = () => {
|
|
170
|
+
setAlertConfig({
|
|
171
|
+
message: "This action cannot be undone. Are you sure you want to delete this item?",
|
|
172
|
+
title: "Warning",
|
|
173
|
+
actions: [
|
|
174
|
+
{
|
|
175
|
+
label: "Cancel",
|
|
176
|
+
variant: "outline",
|
|
177
|
+
icon: React.createElement(lucide_react_1.X, null),
|
|
178
|
+
action: () => console.log("Delete cancelled")
|
|
179
|
+
},
|
|
180
|
+
{
|
|
181
|
+
label: "Delete",
|
|
182
|
+
variant: "destructive",
|
|
183
|
+
icon: React.createElement(fa6_1.FaDumpster, null),
|
|
184
|
+
action: () => console.log("Delete confirmed")
|
|
185
|
+
}
|
|
186
|
+
]
|
|
187
|
+
});
|
|
188
|
+
setIsOpen(true);
|
|
189
|
+
};
|
|
190
|
+
// Programmatic usage example
|
|
191
|
+
const handleProgrammaticAlert = async () => {
|
|
192
|
+
await showAlert("This is a programmatically shown alert");
|
|
193
|
+
console.log("Alert was closed");
|
|
194
|
+
};
|
|
195
|
+
const handleProgrammaticAlertWithActions = async () => {
|
|
196
|
+
await showAlert("Do you want to save your changes?", "Save Changes", [
|
|
197
|
+
{
|
|
198
|
+
label: "Cancel",
|
|
199
|
+
variant: "outline",
|
|
200
|
+
icon: React.createElement(lucide_react_1.X, null),
|
|
201
|
+
action: () => console.log("Save cancelled")
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
label: "Save",
|
|
205
|
+
variant: "default",
|
|
206
|
+
icon: React.createElement(lucide_react_1.Save, null),
|
|
207
|
+
action: () => console.log("Save confirmed")
|
|
208
|
+
}
|
|
209
|
+
]);
|
|
210
|
+
console.log("Action completed");
|
|
211
|
+
};
|
|
212
|
+
return (React.createElement("div", { className: "flex flex-col space-y-4 p-6" },
|
|
213
|
+
React.createElement("h2", { className: "text-2xl font-bold" }, "Alert Dialog Examples"),
|
|
214
|
+
React.createElement("div", { className: "flex flex-wrap gap-4" },
|
|
215
|
+
React.createElement(button_1.Button, { onClick: showSimpleAlert }, "Simple Alert"),
|
|
216
|
+
React.createElement(button_1.Button, { onClick: showFullAlert }, "Confirmation Alert"),
|
|
217
|
+
React.createElement(button_1.Button, { variant: "destructive", onClick: showDestructiveAlert }, "Destructive Alert"),
|
|
218
|
+
React.createElement(button_1.Button, { onClick: handleProgrammaticAlert }, "Programmatic Alert"),
|
|
219
|
+
React.createElement(button_1.Button, { onClick: handleProgrammaticAlertWithActions }, "Programmatic Alert with Actions")),
|
|
220
|
+
React.createElement(AlertDialog, { message: alertConfig.message, title: alertConfig.title, actions: alertConfig.actions, isOpen: isOpen, onOpenChange: setIsOpen })));
|
|
221
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
3
|
+
var t = {};
|
|
4
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
5
|
+
t[p] = s[p];
|
|
6
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
7
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
8
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
9
|
+
t[p[i]] = s[p[i]];
|
|
10
|
+
}
|
|
11
|
+
return t;
|
|
12
|
+
};
|
|
13
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
14
|
+
exports.buttonVariants = void 0;
|
|
15
|
+
exports.Button = Button;
|
|
16
|
+
const react_slot_1 = require("@radix-ui/react-slot");
|
|
17
|
+
const state_1 = require("@myrjfa/state");
|
|
18
|
+
const class_variance_authority_1 = require("class-variance-authority");
|
|
19
|
+
const buttonVariants = (0, class_variance_authority_1.cva)("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-[color,box-shadow] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none 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", {
|
|
20
|
+
variants: {
|
|
21
|
+
variant: {
|
|
22
|
+
default: "bg-primary text-primary-foreground shadow-xs hover:bg-primary/90",
|
|
23
|
+
destructive: "bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40",
|
|
24
|
+
outline: "border border-input bg-background shadow-xs hover:bg-accent hover:text-accent-foreground",
|
|
25
|
+
secondary: "bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80",
|
|
26
|
+
ghost: "hover:bg-accent hover:text-accent-foreground",
|
|
27
|
+
link: "text-primary underline-offset-4 hover:underline",
|
|
28
|
+
},
|
|
29
|
+
size: {
|
|
30
|
+
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
|
31
|
+
sm: "h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5",
|
|
32
|
+
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
|
|
33
|
+
icon: "size-9",
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
defaultVariants: {
|
|
37
|
+
variant: "default",
|
|
38
|
+
size: "default",
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
exports.buttonVariants = buttonVariants;
|
|
42
|
+
function Button(_a) {
|
|
43
|
+
var { className, variant, size, asChild = false } = _a, props = __rest(_a, ["className", "variant", "size", "asChild"]);
|
|
44
|
+
const Comp = asChild ? react_slot_1.Slot : "button";
|
|
45
|
+
return (React.createElement(Comp, Object.assign({ key: "button", className: `cursor-pointer ${(0, state_1.cn)(buttonVariants({ variant, size, className }))}` }, props)));
|
|
46
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
4
|
+
if (k2 === undefined) k2 = k;
|
|
5
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
6
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
7
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
8
|
+
}
|
|
9
|
+
Object.defineProperty(o, k2, desc);
|
|
10
|
+
}) : (function(o, m, k, k2) {
|
|
11
|
+
if (k2 === undefined) k2 = k;
|
|
12
|
+
o[k2] = m[k];
|
|
13
|
+
}));
|
|
14
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
15
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
16
|
+
}) : function(o, v) {
|
|
17
|
+
o["default"] = v;
|
|
18
|
+
});
|
|
19
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
20
|
+
var ownKeys = function(o) {
|
|
21
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
22
|
+
var ar = [];
|
|
23
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
24
|
+
return ar;
|
|
25
|
+
};
|
|
26
|
+
return ownKeys(o);
|
|
27
|
+
};
|
|
28
|
+
return function (mod) {
|
|
29
|
+
if (mod && mod.__esModule) return mod;
|
|
30
|
+
var result = {};
|
|
31
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
32
|
+
__setModuleDefault(result, mod);
|
|
33
|
+
return result;
|
|
34
|
+
};
|
|
35
|
+
})();
|
|
36
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
37
|
+
var t = {};
|
|
38
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
39
|
+
t[p] = s[p];
|
|
40
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
41
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
42
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
43
|
+
t[p[i]] = s[p[i]];
|
|
44
|
+
}
|
|
45
|
+
return t;
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.DropdownMenu = DropdownMenu;
|
|
49
|
+
exports.DropdownMenuPortal = DropdownMenuPortal;
|
|
50
|
+
exports.DropdownMenuTrigger = DropdownMenuTrigger;
|
|
51
|
+
exports.DropdownMenuContent = DropdownMenuContent;
|
|
52
|
+
exports.DropdownMenuGroup = DropdownMenuGroup;
|
|
53
|
+
exports.DropdownMenuLabel = DropdownMenuLabel;
|
|
54
|
+
exports.DropdownMenuItem = DropdownMenuItem;
|
|
55
|
+
exports.DropdownMenuCheckboxItem = DropdownMenuCheckboxItem;
|
|
56
|
+
exports.DropdownMenuRadioGroup = DropdownMenuRadioGroup;
|
|
57
|
+
exports.DropdownMenuRadioItem = DropdownMenuRadioItem;
|
|
58
|
+
exports.DropdownMenuSeparator = DropdownMenuSeparator;
|
|
59
|
+
exports.DropdownMenuShortcut = DropdownMenuShortcut;
|
|
60
|
+
exports.DropdownMenuSub = DropdownMenuSub;
|
|
61
|
+
exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
|
|
62
|
+
exports.DropdownMenuSubContent = DropdownMenuSubContent;
|
|
63
|
+
const DropdownMenuPrimitive = __importStar(require("@radix-ui/react-dropdown-menu"));
|
|
64
|
+
const state_1 = require("@myrjfa/state");
|
|
65
|
+
const lucide_react_1 = require("lucide-react");
|
|
66
|
+
function DropdownMenu(_a) {
|
|
67
|
+
var props = __rest(_a, []);
|
|
68
|
+
return React.createElement(DropdownMenuPrimitive.Root, Object.assign({ "data-slot": "dropdown-menu" }, props));
|
|
69
|
+
}
|
|
70
|
+
function DropdownMenuPortal(_a) {
|
|
71
|
+
var props = __rest(_a, []);
|
|
72
|
+
return (React.createElement(DropdownMenuPrimitive.Portal, Object.assign({ "data-slot": "dropdown-menu-portal" }, props)));
|
|
73
|
+
}
|
|
74
|
+
function DropdownMenuTrigger(_a) {
|
|
75
|
+
var props = __rest(_a, []);
|
|
76
|
+
return (React.createElement(DropdownMenuPrimitive.Trigger, Object.assign({ "data-slot": "dropdown-menu-trigger" }, props)));
|
|
77
|
+
}
|
|
78
|
+
function DropdownMenuContent(_a) {
|
|
79
|
+
var { className, sideOffset = 4 } = _a, props = __rest(_a, ["className", "sideOffset"]);
|
|
80
|
+
return (React.createElement(DropdownMenuPrimitive.Portal, null,
|
|
81
|
+
React.createElement(DropdownMenuPrimitive.Content, Object.assign({ "data-slot": "dropdown-menu-content", sideOffset: sideOffset, className: (0, state_1.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-[8rem] overflow-x-hidden overflow-y-auto rounded-md border p-1 shadow-md", className) }, props))));
|
|
82
|
+
}
|
|
83
|
+
function DropdownMenuGroup(_a) {
|
|
84
|
+
var props = __rest(_a, []);
|
|
85
|
+
return (React.createElement(DropdownMenuPrimitive.Group, Object.assign({ "data-slot": "dropdown-menu-group" }, props)));
|
|
86
|
+
}
|
|
87
|
+
function DropdownMenuItem(_a) {
|
|
88
|
+
var { className, inset, variant = "default" } = _a, props = __rest(_a, ["className", "inset", "variant"]);
|
|
89
|
+
return (React.createElement(DropdownMenuPrimitive.Item, Object.assign({ "data-slot": "dropdown-menu-item", "data-inset": inset, "data-variant": variant, className: (0, state_1.cn)("focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive-foreground data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/40 data-[variant=destructive]:focus:text-destructive-foreground data-[variant=destructive]:*:[svg]:!text-destructive-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className) }, props)));
|
|
90
|
+
}
|
|
91
|
+
function DropdownMenuCheckboxItem(_a) {
|
|
92
|
+
var { className, children, checked } = _a, props = __rest(_a, ["className", "children", "checked"]);
|
|
93
|
+
return (React.createElement(DropdownMenuPrimitive.CheckboxItem, Object.assign({ "data-slot": "dropdown-menu-checkbox-item", className: (0, state_1.cn)("focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className), checked: checked }, props),
|
|
94
|
+
React.createElement("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center" },
|
|
95
|
+
React.createElement(DropdownMenuPrimitive.ItemIndicator, null,
|
|
96
|
+
React.createElement(lucide_react_1.CheckIcon, { className: "size-4" }))),
|
|
97
|
+
children));
|
|
98
|
+
}
|
|
99
|
+
function DropdownMenuRadioGroup(_a) {
|
|
100
|
+
var props = __rest(_a, []);
|
|
101
|
+
return (React.createElement(DropdownMenuPrimitive.RadioGroup, Object.assign({ "data-slot": "dropdown-menu-radio-group" }, props)));
|
|
102
|
+
}
|
|
103
|
+
function DropdownMenuRadioItem(_a) {
|
|
104
|
+
var { className, children } = _a, props = __rest(_a, ["className", "children"]);
|
|
105
|
+
return (React.createElement(DropdownMenuPrimitive.RadioItem, Object.assign({ "data-slot": "dropdown-menu-radio-item", className: (0, state_1.cn)("focus:bg-accent focus:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", className) }, props),
|
|
106
|
+
React.createElement("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center" },
|
|
107
|
+
React.createElement(DropdownMenuPrimitive.ItemIndicator, null,
|
|
108
|
+
React.createElement(lucide_react_1.CircleIcon, { className: "size-2 fill-current" }))),
|
|
109
|
+
children));
|
|
110
|
+
}
|
|
111
|
+
function DropdownMenuLabel(_a) {
|
|
112
|
+
var { className, inset } = _a, props = __rest(_a, ["className", "inset"]);
|
|
113
|
+
return (React.createElement(DropdownMenuPrimitive.Label, Object.assign({ "data-slot": "dropdown-menu-label", "data-inset": inset, className: (0, state_1.cn)("px-2 py-1.5 text-sm font-medium data-[inset]:pl-8", className) }, props)));
|
|
114
|
+
}
|
|
115
|
+
function DropdownMenuSeparator(_a) {
|
|
116
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
117
|
+
return (React.createElement(DropdownMenuPrimitive.Separator, Object.assign({ "data-slot": "dropdown-menu-separator", className: (0, state_1.cn)("bg-border -mx-1 my-1 h-px", className) }, props)));
|
|
118
|
+
}
|
|
119
|
+
function DropdownMenuShortcut(_a) {
|
|
120
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
121
|
+
return (React.createElement("span", Object.assign({ "data-slot": "dropdown-menu-shortcut", className: (0, state_1.cn)("text-muted-foreground ml-auto text-xs tracking-widest", className) }, props)));
|
|
122
|
+
}
|
|
123
|
+
function DropdownMenuSub(_a) {
|
|
124
|
+
var props = __rest(_a, []);
|
|
125
|
+
return React.createElement(DropdownMenuPrimitive.Sub, Object.assign({ "data-slot": "dropdown-menu-sub" }, props));
|
|
126
|
+
}
|
|
127
|
+
function DropdownMenuSubTrigger(_a) {
|
|
128
|
+
var { className, inset, children } = _a, props = __rest(_a, ["className", "inset", "children"]);
|
|
129
|
+
return (React.createElement(DropdownMenuPrimitive.SubTrigger, Object.assign({ "data-slot": "dropdown-menu-sub-trigger", "data-inset": inset, className: (0, state_1.cn)("focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[inset]:pl-8", className) }, props),
|
|
130
|
+
children,
|
|
131
|
+
React.createElement(lucide_react_1.ChevronRightIcon, { className: "ml-auto size-4" })));
|
|
132
|
+
}
|
|
133
|
+
function DropdownMenuSubContent(_a) {
|
|
134
|
+
var { className } = _a, props = __rest(_a, ["className"]);
|
|
135
|
+
return (React.createElement(DropdownMenuPrimitive.SubContent, Object.assign({ "data-slot": "dropdown-menu-sub-content", className: (0, state_1.cn)("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-lg", className) }, props)));
|
|
136
|
+
}
|
|
@@ -3,7 +3,8 @@ type multiImageUploaderType = {
|
|
|
3
3
|
handleImageUpload: (e: React.ChangeEvent<HTMLInputElement>) => Promise<void>;
|
|
4
4
|
handleRemoveImage: (index: number) => void;
|
|
5
5
|
message: string;
|
|
6
|
+
enableCompression?: boolean;
|
|
6
7
|
};
|
|
7
|
-
export default function MultiImageUploader({ previewImages, handleImageUpload, handleRemoveImage, message }: multiImageUploaderType): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
export default function MultiImageUploader({ previewImages, handleImageUpload, handleRemoveImage, message, enableCompression }: multiImageUploaderType): import("react/jsx-runtime").JSX.Element;
|
|
8
9
|
export {};
|
|
9
10
|
//# sourceMappingURL=multiImageUploader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multiImageUploader.d.ts","sourceRoot":"","sources":["../../src/misc/multiImageUploader.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"multiImageUploader.d.ts","sourceRoot":"","sources":["../../src/misc/multiImageUploader.tsx"],"names":[],"mappings":"AASA,KAAK,sBAAsB,GAAG;IAC1B,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iBAAiB,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,gBAAgB,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7E,iBAAiB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAA;AAED,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,EAAE,aAAa,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,OAAO,EAAE,iBAAwB,EAAE,EAAE,sBAAsB,2CAgF5J"}
|
|
@@ -5,6 +5,30 @@ import { Input } from "./input";
|
|
|
5
5
|
import { Card, CardHeader, CardTitle, CardContent } from "./card";
|
|
6
6
|
import { Trash2, Upload } from "lucide-react";
|
|
7
7
|
import Image from "next/image";
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
import { showAlert } from "./alertdialogclaude";
|
|
9
|
+
import { compressImage } from "./image-compressor";
|
|
10
|
+
export default function MultiImageUploader({ previewImages, handleImageUpload, handleRemoveImage, message, enableCompression = true }) {
|
|
11
|
+
return (_jsxs(Card, { children: [_jsx(CardHeader, { children: _jsxs(CardTitle, { children: ["Images", _jsx(FormDescription, { children: message })] }) }), _jsxs(CardContent, { children: [_jsxs("div", { className: "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4 mb-4", children: [previewImages.map((image, index) => (_jsxs("div", { className: "relative rounded-lg overflow-hidden h-40", children: [_jsx(Image, { id: "image-" + index, src: image, alt: `Opportunity image ${index + 1}`, fill: true, className: "object-cover" }), _jsx(Button, { type: "button", onClick: () => handleRemoveImage(index), className: "absolute top-2 right-2 bg-white/80 rounded-full hover:bg-white", children: _jsx(Trash2, { className: "text-red-500" }) })] }, index))), _jsxs("div", { className: "flex flex-col items-center justify-center w-full space-y-4", children: [_jsx("label", { htmlFor: "image", className: "cursor-pointer w-full", children: _jsxs("div", { className: "border-2 border-dashed border-slate-300 rounded-lg p-6 flex flex-col items-center justify-center text-slate-500 hover:border-primary hover:text-primary transition-colors", children: [_jsx(Upload, { className: "h-12 w-12 text-gray-500 mb-4" }), _jsx("span", { className: "text-lg font-semibold mb-2", children: "Upload Image" }), _jsx("span", { className: "text-sm", children: "Click or drag to upload" })] }) }), _jsx(Input, { id: "image", type: "file", accept: "image/*", multiple: true, onChange: async (e) => {
|
|
12
|
+
const files = Array.from(e.target.files || []);
|
|
13
|
+
const allowedType = 'image/';
|
|
14
|
+
const invalid = files.filter(f => !f.type.includes(allowedType));
|
|
15
|
+
if (invalid.length > 0) {
|
|
16
|
+
showAlert(`Invalid file type(s): ${invalid.map(f => f.name).join(', ')}. Only Images are allowed.`);
|
|
17
|
+
e.target.value = '';
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (enableCompression && files.length > 0) {
|
|
21
|
+
try {
|
|
22
|
+
const compressed = await Promise.all(files.map(f => compressImage(f)));
|
|
23
|
+
// Rebuild FileList via DataTransfer
|
|
24
|
+
const dt = new DataTransfer();
|
|
25
|
+
compressed.forEach(f => dt.items.add(f));
|
|
26
|
+
e.target.files = dt.files;
|
|
27
|
+
}
|
|
28
|
+
catch (_a) {
|
|
29
|
+
// compression failed — proceed with originals
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
handleImageUpload(e);
|
|
33
|
+
}, placeholder: "Upload Image", className: "hidden" })] })] }), _jsx(FormDescription, { children: "Images should be in Valid format. Maximum file size: 5MB." })] })] }));
|
|
10
34
|
}
|
package/dist/misc/newsLetter.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { zodResolver } from "@hookform/resolvers/zod";
|
|
4
|
-
import { subscribeToNewsLetter } from "@myrjfa/state";
|
|
4
|
+
import { subscribeToNewsLetter } from "@myrjfa/state/dist/lib/actions/actions";
|
|
5
5
|
import { usePathname } from "next/navigation";
|
|
6
6
|
import { useEffect } from "react";
|
|
7
7
|
import { useForm } from "react-hook-form";
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
3
|
import { Popover, PopoverContent, PopoverTrigger } from "@radix-ui/react-popover";
|
|
4
|
-
import { getNotifications, toggleAllNotification, toggleNotification } from "@myrjfa/state";
|
|
5
|
-
import { formatTimestamp } from "@myrjfa/state";
|
|
4
|
+
import { getNotifications, toggleAllNotification, toggleNotification } from "@myrjfa/state/dist/lib/actions/actions";
|
|
5
|
+
import { formatTimestamp } from "@myrjfa/state/dist/lib/utils";
|
|
6
6
|
import { Bell, MessageCircle, CheckCircle2, Receipt, Users, AlertCircle, Megaphone, Briefcase, ShieldCheck, ShieldX, Package, ClipboardList } from "lucide-react";
|
|
7
7
|
import { useRouter } from "next/navigation";
|
|
8
8
|
import { useEffect, useState } from "react";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../src/misc/popover.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAA;AAI3D,iBAAS,OAAO,CAAC,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,2CAEpD;AAED,iBAAS,cAAc,CAAC,EACtB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,2CAEvD;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,KAAgB,EAChB,UAAc,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"popover.d.ts","sourceRoot":"","sources":["../../src/misc/popover.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,gBAAgB,MAAM,yBAAyB,CAAA;AAI3D,iBAAS,OAAO,CAAC,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,IAAI,CAAC,2CAEpD;AAED,iBAAS,cAAc,CAAC,EACtB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,2CAEvD;AAED,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,KAAgB,EAChB,UAAc,EACd,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,OAAO,CAAC,2CAgBvD;AAED,iBAAS,aAAa,CAAC,EACrB,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,gBAAgB,CAAC,MAAM,CAAC,2CAEtD;AAED,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,CAAA"}
|
package/dist/misc/popover.js
CHANGED
|
@@ -9,7 +9,7 @@ function PopoverTrigger({ ...props }) {
|
|
|
9
9
|
return _jsx(PopoverPrimitive.Trigger, { "data-slot": "popover-trigger", ...props });
|
|
10
10
|
}
|
|
11
11
|
function PopoverContent({ className, align = "center", sideOffset = 4, ...props }) {
|
|
12
|
-
return (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { "data-slot": "popover-content", align: align, sideOffset: sideOffset, className: cn("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-
|
|
12
|
+
return (_jsx(PopoverPrimitive.Portal, { children: _jsx(PopoverPrimitive.Content, { "data-slot": "popover-content", align: align, sideOffset: sideOffset, className: cn("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-[310] w-full min-w-[12rem] rounded-md border p-4 shadow-md outline-hidden touch-pan-y overflow-y-auto pointer-events-auto", className), onWheel: (e) => e.stopPropagation(), ...props }) }));
|
|
13
13
|
}
|
|
14
14
|
function PopoverAnchor({ ...props }) {
|
|
15
15
|
return _jsx(PopoverPrimitive.Anchor, { "data-slot": "popover-anchor", ...props });
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* #9 — Floating PWA Install Button
|
|
3
|
+
* Premium banner aligned with Trippeaze brand.
|
|
4
|
+
* - Only shows on mobile (beforeinstallprompt)
|
|
5
|
+
* - Auto-hides after 10 s
|
|
6
|
+
* - Animated entrance / exit
|
|
7
|
+
*/
|
|
8
|
+
export declare function PwaInstallButton(): import("react/jsx-runtime").JSX.Element | null;
|
|
9
|
+
//# sourceMappingURL=pwa-install-button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pwa-install-button.d.ts","sourceRoot":"","sources":["../../src/misc/pwa-install-button.tsx"],"names":[],"mappings":"AAKA;;;;;;GAMG;AACH,wBAAgB,gBAAgB,mDA0M/B"}
|