@definable/ui 0.1.0 → 0.1.8
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/README.md +6 -6
- package/dist/alert-dialog.d.ts +18 -0
- package/dist/alert.d.ts +18 -0
- package/dist/avatar.d.ts +9 -0
- package/dist/badge.d.ts +15 -0
- package/dist/button.d.ts +16 -0
- package/dist/calendar.d.ts +21 -0
- package/dist/card.d.ts +15 -0
- package/dist/carousel.d.ts +18 -0
- package/dist/charts.d.ts +26 -0
- package/dist/checkbox.d.ts +6 -0
- package/dist/collapse.d.ts +15 -0
- package/dist/command-menu.d.ts +12 -0
- package/dist/command.d.ts +89 -0
- package/dist/components/alert-dialog.d.ts +15 -0
- package/dist/components/alert-dialog.esm.js +59 -0
- package/dist/components/alert-dialog.esm.js.map +1 -0
- package/dist/components/alert-dialog.js +2 -0
- package/dist/components/alert-dialog.js.map +1 -0
- package/dist/components/alert.d.ts +11 -0
- package/dist/components/alert.esm.js +51 -0
- package/dist/components/alert.esm.js.map +1 -0
- package/dist/components/alert.js +2 -0
- package/dist/components/alert.js.map +1 -0
- package/dist/components/avatar.d.ts +5 -0
- package/dist/components/avatar.esm.js +42 -0
- package/dist/components/avatar.esm.js.map +1 -0
- package/dist/components/avatar.js +2 -0
- package/dist/components/avatar.js.map +1 -0
- package/dist/components/badge.d.ts +9 -0
- package/dist/components/badge.esm.js +27 -0
- package/dist/components/badge.esm.js.map +1 -0
- package/dist/components/badge.js +2 -0
- package/dist/components/badge.js.map +1 -0
- package/dist/components/button.d.ts +13 -0
- package/dist/components/button.esm.js +48 -0
- package/dist/components/button.esm.js.map +1 -0
- package/dist/components/button.js +2 -0
- package/dist/components/button.js.map +1 -0
- package/dist/components/calendar.d.ts +18 -0
- package/dist/components/calendar.esm.js +5562 -0
- package/dist/components/calendar.esm.js.map +1 -0
- package/dist/components/calendar.js +2 -0
- package/dist/components/calendar.js.map +1 -0
- package/dist/components/card.d.ts +8 -0
- package/dist/components/card.esm.js +62 -0
- package/dist/components/card.esm.js.map +1 -0
- package/dist/components/card.js +2 -0
- package/dist/components/card.js.map +1 -0
- package/dist/components/carousel.d.ts +13 -0
- package/dist/components/carousel.esm.js +101 -0
- package/dist/components/carousel.esm.js.map +1 -0
- package/dist/components/carousel.js +2 -0
- package/dist/components/carousel.js.map +1 -0
- package/dist/components/charts.d.ts +17 -0
- package/dist/components/charts.esm.js +48 -0
- package/dist/components/charts.esm.js.map +1 -0
- package/dist/components/charts.js +2 -0
- package/dist/components/charts.js.map +1 -0
- package/dist/components/checkbox.d.ts +4 -0
- package/dist/components/checkbox.esm.js +32 -0
- package/dist/components/checkbox.esm.js.map +1 -0
- package/dist/components/checkbox.js +2 -0
- package/dist/components/checkbox.js.map +1 -0
- package/dist/components/collapse.d.ts +11 -0
- package/dist/components/collapse.esm.js +50 -0
- package/dist/components/collapse.esm.js.map +1 -0
- package/dist/components/collapse.js +2 -0
- package/dist/components/collapse.js.map +1 -0
- package/dist/components/command-menu.d.ts +7 -0
- package/dist/components/command-menu.esm.js +90 -0
- package/dist/components/command-menu.esm.js.map +1 -0
- package/dist/components/command-menu.js +2 -0
- package/dist/components/command-menu.js.map +1 -0
- package/dist/components/command.d.ts +79 -0
- package/dist/components/command.esm.js +425 -0
- package/dist/components/command.esm.js.map +1 -0
- package/dist/components/command.js +2 -0
- package/dist/components/command.js.map +1 -0
- package/dist/components/confirmation-modal.d.ts +12 -0
- package/dist/components/confirmation-modal.esm.js +46 -0
- package/dist/components/confirmation-modal.esm.js.map +1 -0
- package/dist/components/confirmation-modal.js +2 -0
- package/dist/components/confirmation-modal.js.map +1 -0
- package/dist/components/context-menu.d.ts +26 -0
- package/dist/components/context-menu.esm.js +186 -0
- package/dist/components/context-menu.esm.js.map +1 -0
- package/dist/components/context-menu.js +2 -0
- package/dist/components/context-menu.js.map +1 -0
- package/dist/components/dialog.d.ts +21 -0
- package/dist/components/dialog.esm.js +122 -0
- package/dist/components/dialog.esm.js.map +1 -0
- package/dist/components/dialog.js +2 -0
- package/dist/components/dialog.js.map +1 -0
- package/dist/components/dropdown-menu.d.ts +9 -0
- package/dist/components/dropdown-menu.esm.js +49 -0
- package/dist/components/dropdown-menu.esm.js.map +1 -0
- package/dist/components/dropdown-menu.js +2 -0
- package/dist/components/dropdown-menu.js.map +1 -0
- package/dist/components/dropzone.d.ts +12 -0
- package/dist/components/dropzone.esm.js +45 -0
- package/dist/components/dropzone.esm.js.map +1 -0
- package/dist/components/dropzone.js +2 -0
- package/dist/components/dropzone.js.map +1 -0
- package/dist/components/image-cropper-modal.d.ts +10 -0
- package/dist/components/image-cropper-modal.esm.js +251 -0
- package/dist/components/image-cropper-modal.esm.js.map +1 -0
- package/dist/components/image-cropper-modal.js +2 -0
- package/dist/components/image-cropper-modal.js.map +1 -0
- package/dist/components/image-cropper.d.ts +11 -0
- package/dist/components/image-cropper.esm.js +131 -0
- package/dist/components/image-cropper.esm.js.map +1 -0
- package/dist/components/image-cropper.js +2 -0
- package/dist/components/image-cropper.js.map +1 -0
- package/dist/components/input.d.ts +5 -0
- package/dist/components/input.esm.js +22 -0
- package/dist/components/input.esm.js.map +1 -0
- package/dist/components/input.js +2 -0
- package/dist/components/input.js.map +1 -0
- package/dist/components/label.d.ts +4 -0
- package/dist/components/label.esm.js +20 -0
- package/dist/components/label.esm.js.map +1 -0
- package/dist/components/label.js +2 -0
- package/dist/components/label.js.map +1 -0
- package/dist/components/loader.d.ts +10 -0
- package/dist/components/loader.esm.js +70 -0
- package/dist/components/loader.esm.js.map +1 -0
- package/dist/components/loader.js +2 -0
- package/dist/components/loader.js.map +1 -0
- package/dist/components/loading-placeholder.d.ts +8 -0
- package/dist/components/loading-placeholder.esm.js +25 -0
- package/dist/components/loading-placeholder.esm.js.map +1 -0
- package/dist/components/loading-placeholder.js +2 -0
- package/dist/components/loading-placeholder.js.map +1 -0
- package/dist/components/markdown.d.ts +2 -0
- package/dist/components/markdown.esm.js +12066 -0
- package/dist/components/markdown.esm.js.map +1 -0
- package/dist/components/markdown.js +18 -0
- package/dist/components/markdown.js.map +1 -0
- package/dist/components/mention.d.ts +25 -0
- package/dist/components/mention.esm.js +154 -0
- package/dist/components/mention.esm.js.map +1 -0
- package/dist/components/mention.js +2 -0
- package/dist/components/mention.js.map +1 -0
- package/dist/components/modal.d.ts +19 -0
- package/dist/components/modal.esm.js +92 -0
- package/dist/components/modal.esm.js.map +1 -0
- package/dist/components/modal.js +2 -0
- package/dist/components/modal.js.map +1 -0
- package/dist/components/monaco-editor.d.ts +2 -0
- package/dist/components/monaco-editor.esm.js +295 -0
- package/dist/components/monaco-editor.esm.js.map +1 -0
- package/dist/components/monaco-editor.js +8 -0
- package/dist/components/monaco-editor.js.map +1 -0
- package/dist/components/notification.d.ts +5 -0
- package/dist/components/notification.esm.js +26 -0
- package/dist/components/notification.esm.js.map +1 -0
- package/dist/components/notification.js +2 -0
- package/dist/components/notification.js.map +1 -0
- package/dist/components/popover.d.ts +6 -0
- package/dist/components/popover.esm.js +24 -0
- package/dist/components/popover.esm.js.map +1 -0
- package/dist/components/popover.js +2 -0
- package/dist/components/popover.js.map +1 -0
- package/dist/components/progress.d.ts +4 -0
- package/dist/components/progress.esm.js +35 -0
- package/dist/components/progress.esm.js.map +1 -0
- package/dist/components/progress.js +2 -0
- package/dist/components/progress.js.map +1 -0
- package/dist/components/radio-group.d.ts +5 -0
- package/dist/components/radio-group.esm.js +48 -0
- package/dist/components/radio-group.esm.js.map +1 -0
- package/dist/components/radio-group.js +2 -0
- package/dist/components/radio-group.js.map +1 -0
- package/dist/components/scroll-area.d.ts +5 -0
- package/dist/components/scroll-area.esm.js +47 -0
- package/dist/components/scroll-area.esm.js.map +1 -0
- package/dist/components/scroll-area.js +2 -0
- package/dist/components/scroll-area.js.map +1 -0
- package/dist/components/select.d.ts +20 -0
- package/dist/components/select.esm.js +131 -0
- package/dist/components/select.esm.js.map +1 -0
- package/dist/components/select.js +2 -0
- package/dist/components/select.js.map +1 -0
- package/dist/components/selection-bar.d.ts +11 -0
- package/dist/components/selection-bar.esm.js +54 -0
- package/dist/components/selection-bar.esm.js.map +1 -0
- package/dist/components/selection-bar.js +2 -0
- package/dist/components/selection-bar.js.map +1 -0
- package/dist/components/separator.d.ts +4 -0
- package/dist/components/separator.esm.js +25 -0
- package/dist/components/separator.esm.js.map +1 -0
- package/dist/components/separator.js +2 -0
- package/dist/components/separator.js.map +1 -0
- package/dist/components/sheet.d.ts +13 -0
- package/dist/components/sheet.esm.js +129 -0
- package/dist/components/sheet.esm.js.map +1 -0
- package/dist/components/sheet.js +2 -0
- package/dist/components/sheet.js.map +1 -0
- package/dist/components/skeleton.d.ts +2 -0
- package/dist/components/skeleton.esm.js +18 -0
- package/dist/components/skeleton.esm.js.map +1 -0
- package/dist/components/skeleton.js +2 -0
- package/dist/components/skeleton.js.map +1 -0
- package/dist/components/slider.d.ts +4 -0
- package/dist/components/slider.esm.js +33 -0
- package/dist/components/slider.esm.js.map +1 -0
- package/dist/components/slider.js +2 -0
- package/dist/components/slider.js.map +1 -0
- package/dist/components/stepper.d.ts +2 -0
- package/dist/components/stepper.esm.js +214 -0
- package/dist/components/stepper.esm.js.map +1 -0
- package/dist/components/stepper.js +2 -0
- package/dist/components/stepper.js.map +1 -0
- package/dist/components/switch.d.ts +4 -0
- package/dist/components/switch.esm.js +36 -0
- package/dist/components/switch.esm.js.map +1 -0
- package/dist/components/switch.js +2 -0
- package/dist/components/switch.js.map +1 -0
- package/dist/components/table-empty.d.ts +9 -0
- package/dist/components/table-empty.esm.js +23 -0
- package/dist/components/table-empty.esm.js.map +1 -0
- package/dist/components/table-empty.js +2 -0
- package/dist/components/table-empty.js.map +1 -0
- package/dist/components/table-mobile.d.ts +4 -0
- package/dist/components/table-mobile.esm.js +92 -0
- package/dist/components/table-mobile.esm.js.map +1 -0
- package/dist/components/table-mobile.js +2 -0
- package/dist/components/table-mobile.js.map +1 -0
- package/dist/components/table.d.ts +31 -0
- package/dist/components/table.esm.js +143 -0
- package/dist/components/table.esm.js.map +1 -0
- package/dist/components/table.js +2 -0
- package/dist/components/table.js.map +1 -0
- package/dist/components/tabs.d.ts +7 -0
- package/dist/components/tabs.esm.js +47 -0
- package/dist/components/tabs.esm.js.map +1 -0
- package/dist/components/tabs.js +2 -0
- package/dist/components/tabs.js.map +1 -0
- package/dist/components/terminal.d.ts +43 -0
- package/dist/components/terminal.esm.js +50 -0
- package/dist/components/terminal.esm.js.map +1 -0
- package/dist/components/terminal.js +2 -0
- package/dist/components/terminal.js.map +1 -0
- package/dist/components/textarea.d.ts +5 -0
- package/dist/components/textarea.esm.js +21 -0
- package/dist/components/textarea.esm.js.map +1 -0
- package/dist/components/textarea.js +2 -0
- package/dist/components/textarea.js.map +1 -0
- package/dist/components/tooltip.d.ts +8 -0
- package/dist/components/tooltip.esm.js +100 -0
- package/dist/components/tooltip.esm.js.map +1 -0
- package/dist/components/tooltip.js +2 -0
- package/dist/components/tooltip.js.map +1 -0
- package/dist/components/use-toast.d.ts +21 -0
- package/dist/components/use-toast.esm.js +65 -0
- package/dist/components/use-toast.esm.js.map +1 -0
- package/dist/components/use-toast.js +2 -0
- package/dist/components/use-toast.js.map +1 -0
- package/dist/confirmation-modal.d.ts +16 -0
- package/dist/context-menu.d.ts +41 -0
- package/dist/dialog.d.ts +33 -0
- package/dist/dropdown-menu.d.ts +16 -0
- package/dist/dropzone.d.ts +16 -0
- package/dist/image-cropper-modal.d.ts +14 -0
- package/dist/image-cropper.d.ts +15 -0
- package/dist/index-DACAHwoB.js +35 -0
- package/dist/index-DACAHwoB.js.map +1 -0
- package/dist/index-Deooizx8.cjs +2 -0
- package/dist/index-Deooizx8.cjs.map +1 -0
- package/dist/index.d.ts +8 -2
- package/dist/index.esm.js +111 -75430
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/input.d.ts +8 -0
- package/dist/jsx-runtime-BYECrxsp.cjs +31 -0
- package/dist/jsx-runtime-BYECrxsp.cjs.map +1 -0
- package/dist/jsx-runtime-DGlMoOmv.js +631 -0
- package/dist/jsx-runtime-DGlMoOmv.js.map +1 -0
- package/dist/label.d.ts +6 -0
- package/dist/lib/utils.d.ts +2 -0
- package/dist/lib/utils.esm.js +5 -0
- package/dist/lib/utils.esm.js.map +1 -0
- package/dist/lib/utils.js +2 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/loader.d.ts +14 -0
- package/dist/loading-placeholder.d.ts +12 -0
- package/dist/markdown.d.ts +122 -0
- package/dist/mention.d.ts +29 -0
- package/dist/modal.d.ts +24 -0
- package/dist/monaco-editor.d.ts +76 -0
- package/dist/notification.d.ts +9 -0
- package/dist/popover.d.ts +10 -0
- package/dist/progress.d.ts +6 -0
- package/dist/radio-group.d.ts +8 -0
- package/dist/scroll-area.d.ts +8 -0
- package/dist/select.d.ts +31 -0
- package/dist/selection-bar.d.ts +15 -0
- package/dist/separator.d.ts +6 -0
- package/dist/sheet.d.ts +17 -0
- package/dist/skeleton.d.ts +5 -0
- package/dist/slider.d.ts +6 -0
- package/dist/stepper.d.ts +71 -0
- package/dist/styles.css +1 -1
- package/dist/switch.d.ts +6 -0
- package/dist/table-empty.d.ts +13 -0
- package/dist/table-mobile.d.ts +37 -0
- package/dist/table.d.ts +37 -0
- package/dist/tabs.d.ts +12 -0
- package/dist/terminal.d.ts +47 -0
- package/dist/textarea.d.ts +8 -0
- package/dist/tooltip.d.ts +12 -0
- package/dist/use-toast.d.ts +28 -0
- package/dist/utils-DSKoFOjv.cjs +2 -0
- package/dist/utils-DSKoFOjv.cjs.map +1 -0
- package/dist/utils-qaFjX9_3.js +2279 -0
- package/dist/utils-qaFjX9_3.js.map +1 -0
- package/dist/utils.d.ts +5 -0
- package/package.json +259 -1
- package/dist/index.cjs.js +0 -315
- package/dist/index.cjs.js.map +0 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { SuggestionDataItem } from 'react-mentions';
|
|
3
|
+
export interface MentionUserData extends SuggestionDataItem {
|
|
4
|
+
avatar?: string;
|
|
5
|
+
subtitle?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface MentionProps {
|
|
8
|
+
value: string;
|
|
9
|
+
onChange: (event: {
|
|
10
|
+
target: {
|
|
11
|
+
value: string;
|
|
12
|
+
};
|
|
13
|
+
}) => void;
|
|
14
|
+
placeholder?: string;
|
|
15
|
+
data: MentionUserData[];
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
className?: string;
|
|
18
|
+
inputClassName?: string;
|
|
19
|
+
suggestionItemClassName?: string;
|
|
20
|
+
trigger?: string;
|
|
21
|
+
displayTransform?: (id: string, display: string) => string;
|
|
22
|
+
onKeyDown?: (e: React.KeyboardEvent) => void;
|
|
23
|
+
}
|
|
24
|
+
declare const MentionComponent: React.ForwardRefExoticComponent<MentionProps & React.RefAttributes<HTMLDivElement>>;
|
|
25
|
+
export { MentionComponent as Mention };
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import { j as o } from "../jsx-runtime-DGlMoOmv.js";
|
|
2
|
+
import x, { forwardRef as f } from "react";
|
|
3
|
+
import { MentionsInput as b, Mention as v } from "react-mentions";
|
|
4
|
+
import { c as n } from "../utils-qaFjX9_3.js";
|
|
5
|
+
const y = (e, t, i, a, r) => /* @__PURE__ */ o.jsxs(
|
|
6
|
+
"div",
|
|
7
|
+
{
|
|
8
|
+
className: n(
|
|
9
|
+
"flex items-center gap-2 p-2 text-sm",
|
|
10
|
+
r ? "bg-primary/10 text-primary" : "bg-transparent"
|
|
11
|
+
),
|
|
12
|
+
children: [
|
|
13
|
+
e.avatar && /* @__PURE__ */ o.jsx("div", { className: "flex-shrink-0 h-6 w-6 rounded-full overflow-hidden", children: /* @__PURE__ */ o.jsx(
|
|
14
|
+
"img",
|
|
15
|
+
{
|
|
16
|
+
src: e.avatar,
|
|
17
|
+
alt: e.display,
|
|
18
|
+
className: "h-full w-full object-cover"
|
|
19
|
+
}
|
|
20
|
+
) }),
|
|
21
|
+
/* @__PURE__ */ o.jsxs("div", { className: "flex flex-col", children: [
|
|
22
|
+
/* @__PURE__ */ o.jsx("span", { className: "font-medium", children: e.display }),
|
|
23
|
+
e.subtitle && /* @__PURE__ */ o.jsx("span", { className: "text-xs text-muted-foreground", children: e.subtitle })
|
|
24
|
+
] })
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
), w = (e, t) => `@${t}`, _ = f(
|
|
28
|
+
({
|
|
29
|
+
value: e,
|
|
30
|
+
onChange: t,
|
|
31
|
+
placeholder: i = "Type @ to mention someone",
|
|
32
|
+
data: a,
|
|
33
|
+
disabled: r = !1,
|
|
34
|
+
className: s,
|
|
35
|
+
inputClassName: d,
|
|
36
|
+
suggestionItemClassName: l,
|
|
37
|
+
trigger: m = "@",
|
|
38
|
+
displayTransform: p = w,
|
|
39
|
+
onKeyDown: u
|
|
40
|
+
}, c) => {
|
|
41
|
+
const g = {
|
|
42
|
+
control: {
|
|
43
|
+
fontSize: 14,
|
|
44
|
+
fontWeight: "normal",
|
|
45
|
+
lineHeight: "1.5",
|
|
46
|
+
minHeight: "60px"
|
|
47
|
+
},
|
|
48
|
+
highlighter: {
|
|
49
|
+
border: "0",
|
|
50
|
+
boxSizing: "border-box",
|
|
51
|
+
overflow: "hidden",
|
|
52
|
+
minHeight: "60px"
|
|
53
|
+
},
|
|
54
|
+
input: {
|
|
55
|
+
padding: "12px 12px",
|
|
56
|
+
border: "0",
|
|
57
|
+
overflow: "auto",
|
|
58
|
+
fontSize: "14px",
|
|
59
|
+
outline: "none",
|
|
60
|
+
backgroundColor: "transparent",
|
|
61
|
+
fontFamily: "inherit",
|
|
62
|
+
lineHeight: "1.5",
|
|
63
|
+
minHeight: "60px",
|
|
64
|
+
margin: 0
|
|
65
|
+
},
|
|
66
|
+
suggestions: {
|
|
67
|
+
marginTop: "0px",
|
|
68
|
+
list: {
|
|
69
|
+
backgroundColor: "var(--suggestion-background, hsl(var(--background)))",
|
|
70
|
+
border: "1px solid hsl(var(--border))",
|
|
71
|
+
boxShadow: "0 4px 12px rgba(0, 0, 0, 0.1)",
|
|
72
|
+
overflow: "hidden",
|
|
73
|
+
zIndex: 100,
|
|
74
|
+
maxHeight: "250px",
|
|
75
|
+
overflowY: "auto",
|
|
76
|
+
color: "hsl(var(--foreground))",
|
|
77
|
+
minWidth: "280px",
|
|
78
|
+
width: "auto"
|
|
79
|
+
},
|
|
80
|
+
item: {
|
|
81
|
+
padding: "0",
|
|
82
|
+
borderBottom: "1px solid hsl(var(--border))"
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}, h = {
|
|
86
|
+
mentions: {
|
|
87
|
+
normal: {
|
|
88
|
+
color: "inherit",
|
|
89
|
+
fontWeight: "normal"
|
|
90
|
+
},
|
|
91
|
+
highlight: {
|
|
92
|
+
color: "hsl(var(--primary))",
|
|
93
|
+
fontWeight: "500",
|
|
94
|
+
backgroundColor: "transparent",
|
|
95
|
+
padding: "0",
|
|
96
|
+
margin: "0",
|
|
97
|
+
boxShadow: "none",
|
|
98
|
+
borderRadius: "0",
|
|
99
|
+
textDecoration: "none"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
return x.useEffect(() => {
|
|
104
|
+
typeof window < "u" && document.documentElement.style.setProperty(
|
|
105
|
+
"--suggestion-background",
|
|
106
|
+
"hsl(var(--background))"
|
|
107
|
+
);
|
|
108
|
+
}, []), /* @__PURE__ */ o.jsx(
|
|
109
|
+
"div",
|
|
110
|
+
{
|
|
111
|
+
ref: c,
|
|
112
|
+
className: n("relative w-full", s),
|
|
113
|
+
children: /* @__PURE__ */ o.jsx(
|
|
114
|
+
b,
|
|
115
|
+
{
|
|
116
|
+
value: e,
|
|
117
|
+
onChange: t,
|
|
118
|
+
style: { ...g, ...h },
|
|
119
|
+
placeholder: i,
|
|
120
|
+
disabled: r,
|
|
121
|
+
a11ySuggestionsListLabel: "Suggested mentions",
|
|
122
|
+
className: n(
|
|
123
|
+
"w-full rounded-md bg-transparent text-sm placeholder:text-muted-foreground resize-none font-normal",
|
|
124
|
+
d
|
|
125
|
+
),
|
|
126
|
+
suggestionsPortalHost: typeof document < "u" ? document.body : void 0,
|
|
127
|
+
allowSuggestionsAboveCursor: !0,
|
|
128
|
+
onKeyDown: u,
|
|
129
|
+
children: /* @__PURE__ */ o.jsx(
|
|
130
|
+
v,
|
|
131
|
+
{
|
|
132
|
+
trigger: m,
|
|
133
|
+
data: a,
|
|
134
|
+
renderSuggestion: y,
|
|
135
|
+
displayTransform: p,
|
|
136
|
+
appendSpaceOnAdd: !0,
|
|
137
|
+
className: n(
|
|
138
|
+
"text-primary font-medium",
|
|
139
|
+
l
|
|
140
|
+
),
|
|
141
|
+
markup: "@[__display__](__id__)"
|
|
142
|
+
}
|
|
143
|
+
)
|
|
144
|
+
}
|
|
145
|
+
)
|
|
146
|
+
}
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
);
|
|
150
|
+
_.displayName = "Mention";
|
|
151
|
+
export {
|
|
152
|
+
_ as Mention
|
|
153
|
+
};
|
|
154
|
+
//# sourceMappingURL=mention.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mention.esm.js","sources":["../../src/components/mention.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\nimport { MentionsInput, MentionsInputStyle, Mention as ReactMention, SuggestionDataItem } from \"react-mentions\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface MentionUserData extends SuggestionDataItem {\n avatar?: string;\n subtitle?: string;\n}\n\nexport interface MentionProps {\n value: string;\n onChange: (event: { target: { value: string } }) => void;\n placeholder?: string;\n data: MentionUserData[];\n disabled?: boolean;\n className?: string;\n inputClassName?: string;\n suggestionItemClassName?: string;\n trigger?: string;\n displayTransform?: (id: string, display: string) => string;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n}\n\nconst defaultRenderSuggestion = (\n suggestion: MentionUserData,\n _search: string,\n _highlightedDisplay: React.ReactNode,\n _index: number,\n focused: boolean\n) => (\n <div\n className={cn(\n \"flex items-center gap-2 p-2 text-sm\",\n focused ? \"bg-primary/10 text-primary\" : \"bg-transparent\"\n )}\n >\n {suggestion.avatar && (\n <div className=\"flex-shrink-0 h-6 w-6 rounded-full overflow-hidden\">\n <img\n src={suggestion.avatar}\n alt={suggestion.display}\n className=\"h-full w-full object-cover\"\n />\n </div>\n )}\n <div className=\"flex flex-col\">\n <span className=\"font-medium\">{suggestion.display}</span>\n {suggestion.subtitle && (\n <span className=\"text-xs text-muted-foreground\">{suggestion.subtitle}</span>\n )}\n </div>\n </div>\n);\n\nconst defaultDisplayTransform = (_id: string, display: string) => `@${display}`;\n\nconst MentionComponent = forwardRef<HTMLDivElement, MentionProps>(\n (\n {\n value,\n onChange,\n placeholder = \"Type @ to mention someone\",\n data,\n disabled = false,\n className,\n inputClassName,\n suggestionItemClassName,\n trigger = \"@\",\n displayTransform = defaultDisplayTransform,\n onKeyDown,\n },\n ref\n ) => {\n // Custom styles to match your UI\n const mentionInputStyle: MentionsInputStyle = {\n control: {\n fontSize: 14,\n fontWeight: 'normal',\n lineHeight: '1.5',\n minHeight: '60px',\n },\n highlighter: {\n border: '0',\n boxSizing: 'border-box',\n overflow: 'hidden',\n minHeight: '60px',\n },\n input: {\n padding: '12px 12px',\n border: '0',\n overflow: 'auto',\n fontSize: '14px',\n outline: 'none',\n backgroundColor: 'transparent',\n fontFamily: 'inherit',\n lineHeight: '1.5',\n minHeight: '60px',\n margin: 0,\n },\n suggestions: {\n marginTop: \"0px\",\n list: {\n backgroundColor: \"var(--suggestion-background, hsl(var(--background)))\",\n border: \"1px solid hsl(var(--border))\",\n boxShadow: \"0 4px 12px rgba(0, 0, 0, 0.1)\",\n overflow: \"hidden\",\n zIndex: 100,\n maxHeight: \"250px\",\n overflowY: \"auto\",\n color: \"hsl(var(--foreground))\",\n minWidth: \"280px\",\n width: \"auto\"\n },\n item: {\n padding: \"0\",\n borderBottom: \"1px solid hsl(var(--border))\"\n },\n },\n };\n\n // Custom styles for the mention component (the highlight)\n const customStyle = {\n mentions: {\n normal: {\n color: \"inherit\", \n fontWeight: \"normal\"\n },\n highlight: {\n color: \"hsl(var(--primary))\",\n fontWeight: \"500\",\n backgroundColor: \"transparent\",\n padding: \"0\",\n margin: \"0\",\n boxShadow: \"none\",\n borderRadius: \"0\",\n textDecoration: \"none\"\n }\n }\n };\n\n // Add theme CSS variables to document when component mounts\n React.useEffect(() => {\n if (typeof window !== 'undefined') {\n document.documentElement.style.setProperty(\n '--suggestion-background', \n 'hsl(var(--background))'\n );\n }\n }, []);\n\n return (\n <div\n ref={ref}\n className={cn(\"relative w-full\", className)}\n >\n <MentionsInput\n value={value}\n onChange={onChange}\n style={{...mentionInputStyle, ...customStyle}}\n placeholder={placeholder}\n disabled={disabled}\n a11ySuggestionsListLabel=\"Suggested mentions\"\n className={cn(\n \"w-full rounded-md bg-transparent text-sm placeholder:text-muted-foreground resize-none font-normal\",\n inputClassName\n )}\n suggestionsPortalHost={typeof document !== \"undefined\" ? document.body : undefined}\n allowSuggestionsAboveCursor={true}\n onKeyDown={onKeyDown}\n >\n <ReactMention\n trigger={trigger}\n data={data}\n renderSuggestion={defaultRenderSuggestion}\n displayTransform={displayTransform}\n appendSpaceOnAdd\n className={cn(\n \"text-primary font-medium\",\n suggestionItemClassName\n )}\n markup=\"@[__display__](__id__)\"\n />\n </MentionsInput>\n </div>\n );\n }\n);\n\nMentionComponent.displayName = \"Mention\";\n\nexport { MentionComponent as Mention }; "],"names":["defaultRenderSuggestion","suggestion","_search","_highlightedDisplay","_index","focused","jsxs","cn","jsx","defaultDisplayTransform","_id","display","MentionComponent","forwardRef","value","onChange","placeholder","data","disabled","className","inputClassName","suggestionItemClassName","trigger","displayTransform","onKeyDown","ref","mentionInputStyle","customStyle","React","MentionsInput","ReactMention"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("../jsx-runtime-BYECrxsp.cjs"),a=require("react"),l=require("react-mentions"),o=require("../utils-DSKoFOjv.cjs"),v=(e,n,i,s,r)=>t.jsxRuntimeExports.jsxs("div",{className:o.cn("flex items-center gap-2 p-2 text-sm",r?"bg-primary/10 text-primary":"bg-transparent"),children:[e.avatar&&t.jsxRuntimeExports.jsx("div",{className:"flex-shrink-0 h-6 w-6 rounded-full overflow-hidden",children:t.jsxRuntimeExports.jsx("img",{src:e.avatar,alt:e.display,className:"h-full w-full object-cover"})}),t.jsxRuntimeExports.jsxs("div",{className:"flex flex-col",children:[t.jsxRuntimeExports.jsx("span",{className:"font-medium",children:e.display}),e.subtitle&&t.jsxRuntimeExports.jsx("span",{className:"text-xs text-muted-foreground",children:e.subtitle})]})]}),y=(e,n)=>`@${n}`,d=a.forwardRef(({value:e,onChange:n,placeholder:i="Type @ to mention someone",data:s,disabled:r=!1,className:u,inputClassName:m,suggestionItemClassName:x,trigger:c="@",displayTransform:p=y,onKeyDown:g},h)=>{const f={control:{fontSize:14,fontWeight:"normal",lineHeight:"1.5",minHeight:"60px"},highlighter:{border:"0",boxSizing:"border-box",overflow:"hidden",minHeight:"60px"},input:{padding:"12px 12px",border:"0",overflow:"auto",fontSize:"14px",outline:"none",backgroundColor:"transparent",fontFamily:"inherit",lineHeight:"1.5",minHeight:"60px",margin:0},suggestions:{marginTop:"0px",list:{backgroundColor:"var(--suggestion-background, hsl(var(--background)))",border:"1px solid hsl(var(--border))",boxShadow:"0 4px 12px rgba(0, 0, 0, 0.1)",overflow:"hidden",zIndex:100,maxHeight:"250px",overflowY:"auto",color:"hsl(var(--foreground))",minWidth:"280px",width:"auto"},item:{padding:"0",borderBottom:"1px solid hsl(var(--border))"}}},b={mentions:{normal:{color:"inherit",fontWeight:"normal"},highlight:{color:"hsl(var(--primary))",fontWeight:"500",backgroundColor:"transparent",padding:"0",margin:"0",boxShadow:"none",borderRadius:"0",textDecoration:"none"}}};return a.useEffect(()=>{typeof window<"u"&&document.documentElement.style.setProperty("--suggestion-background","hsl(var(--background))")},[]),t.jsxRuntimeExports.jsx("div",{ref:h,className:o.cn("relative w-full",u),children:t.jsxRuntimeExports.jsx(l.MentionsInput,{value:e,onChange:n,style:{...f,...b},placeholder:i,disabled:r,a11ySuggestionsListLabel:"Suggested mentions",className:o.cn("w-full rounded-md bg-transparent text-sm placeholder:text-muted-foreground resize-none font-normal",m),suggestionsPortalHost:typeof document<"u"?document.body:void 0,allowSuggestionsAboveCursor:!0,onKeyDown:g,children:t.jsxRuntimeExports.jsx(l.Mention,{trigger:c,data:s,renderSuggestion:v,displayTransform:p,appendSpaceOnAdd:!0,className:o.cn("text-primary font-medium",x),markup:"@[__display__](__id__)"})})})});d.displayName="Mention";exports.Mention=d;
|
|
2
|
+
//# sourceMappingURL=mention.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mention.js","sources":["../../src/components/mention.tsx"],"sourcesContent":["import React, { forwardRef } from \"react\";\nimport { MentionsInput, MentionsInputStyle, Mention as ReactMention, SuggestionDataItem } from \"react-mentions\";\nimport { cn } from \"@/lib/utils\";\n\nexport interface MentionUserData extends SuggestionDataItem {\n avatar?: string;\n subtitle?: string;\n}\n\nexport interface MentionProps {\n value: string;\n onChange: (event: { target: { value: string } }) => void;\n placeholder?: string;\n data: MentionUserData[];\n disabled?: boolean;\n className?: string;\n inputClassName?: string;\n suggestionItemClassName?: string;\n trigger?: string;\n displayTransform?: (id: string, display: string) => string;\n onKeyDown?: (e: React.KeyboardEvent) => void;\n}\n\nconst defaultRenderSuggestion = (\n suggestion: MentionUserData,\n _search: string,\n _highlightedDisplay: React.ReactNode,\n _index: number,\n focused: boolean\n) => (\n <div\n className={cn(\n \"flex items-center gap-2 p-2 text-sm\",\n focused ? \"bg-primary/10 text-primary\" : \"bg-transparent\"\n )}\n >\n {suggestion.avatar && (\n <div className=\"flex-shrink-0 h-6 w-6 rounded-full overflow-hidden\">\n <img\n src={suggestion.avatar}\n alt={suggestion.display}\n className=\"h-full w-full object-cover\"\n />\n </div>\n )}\n <div className=\"flex flex-col\">\n <span className=\"font-medium\">{suggestion.display}</span>\n {suggestion.subtitle && (\n <span className=\"text-xs text-muted-foreground\">{suggestion.subtitle}</span>\n )}\n </div>\n </div>\n);\n\nconst defaultDisplayTransform = (_id: string, display: string) => `@${display}`;\n\nconst MentionComponent = forwardRef<HTMLDivElement, MentionProps>(\n (\n {\n value,\n onChange,\n placeholder = \"Type @ to mention someone\",\n data,\n disabled = false,\n className,\n inputClassName,\n suggestionItemClassName,\n trigger = \"@\",\n displayTransform = defaultDisplayTransform,\n onKeyDown,\n },\n ref\n ) => {\n // Custom styles to match your UI\n const mentionInputStyle: MentionsInputStyle = {\n control: {\n fontSize: 14,\n fontWeight: 'normal',\n lineHeight: '1.5',\n minHeight: '60px',\n },\n highlighter: {\n border: '0',\n boxSizing: 'border-box',\n overflow: 'hidden',\n minHeight: '60px',\n },\n input: {\n padding: '12px 12px',\n border: '0',\n overflow: 'auto',\n fontSize: '14px',\n outline: 'none',\n backgroundColor: 'transparent',\n fontFamily: 'inherit',\n lineHeight: '1.5',\n minHeight: '60px',\n margin: 0,\n },\n suggestions: {\n marginTop: \"0px\",\n list: {\n backgroundColor: \"var(--suggestion-background, hsl(var(--background)))\",\n border: \"1px solid hsl(var(--border))\",\n boxShadow: \"0 4px 12px rgba(0, 0, 0, 0.1)\",\n overflow: \"hidden\",\n zIndex: 100,\n maxHeight: \"250px\",\n overflowY: \"auto\",\n color: \"hsl(var(--foreground))\",\n minWidth: \"280px\",\n width: \"auto\"\n },\n item: {\n padding: \"0\",\n borderBottom: \"1px solid hsl(var(--border))\"\n },\n },\n };\n\n // Custom styles for the mention component (the highlight)\n const customStyle = {\n mentions: {\n normal: {\n color: \"inherit\", \n fontWeight: \"normal\"\n },\n highlight: {\n color: \"hsl(var(--primary))\",\n fontWeight: \"500\",\n backgroundColor: \"transparent\",\n padding: \"0\",\n margin: \"0\",\n boxShadow: \"none\",\n borderRadius: \"0\",\n textDecoration: \"none\"\n }\n }\n };\n\n // Add theme CSS variables to document when component mounts\n React.useEffect(() => {\n if (typeof window !== 'undefined') {\n document.documentElement.style.setProperty(\n '--suggestion-background', \n 'hsl(var(--background))'\n );\n }\n }, []);\n\n return (\n <div\n ref={ref}\n className={cn(\"relative w-full\", className)}\n >\n <MentionsInput\n value={value}\n onChange={onChange}\n style={{...mentionInputStyle, ...customStyle}}\n placeholder={placeholder}\n disabled={disabled}\n a11ySuggestionsListLabel=\"Suggested mentions\"\n className={cn(\n \"w-full rounded-md bg-transparent text-sm placeholder:text-muted-foreground resize-none font-normal\",\n inputClassName\n )}\n suggestionsPortalHost={typeof document !== \"undefined\" ? document.body : undefined}\n allowSuggestionsAboveCursor={true}\n onKeyDown={onKeyDown}\n >\n <ReactMention\n trigger={trigger}\n data={data}\n renderSuggestion={defaultRenderSuggestion}\n displayTransform={displayTransform}\n appendSpaceOnAdd\n className={cn(\n \"text-primary font-medium\",\n suggestionItemClassName\n )}\n markup=\"@[__display__](__id__)\"\n />\n </MentionsInput>\n </div>\n );\n }\n);\n\nMentionComponent.displayName = \"Mention\";\n\nexport { MentionComponent as Mention }; "],"names":["defaultRenderSuggestion","suggestion","_search","_highlightedDisplay","_index","focused","jsxs","cn","jsx","defaultDisplayTransform","_id","display","MentionComponent","forwardRef","value","onChange","placeholder","data","disabled","className","inputClassName","suggestionItemClassName","trigger","displayTransform","onKeyDown","ref","mentionInputStyle","customStyle","React","MentionsInput","ReactMention"],"mappings":"iNAuBMA,EAA0B,CAC9BC,EACAC,EACAC,EACAC,EACAC,IAEAC,EAAAA,kBAAAA,KAAC,MAAA,CACC,UAAWC,EAAAA,GACT,sCACAF,EAAU,6BAA+B,gBAAA,EAG1C,SAAA,CAAAJ,EAAW,QACVO,wBAAC,MAAA,CAAI,UAAU,qDACb,SAAAA,EAAAA,kBAAAA,IAAC,MAAA,CACC,IAAKP,EAAW,OAChB,IAAKA,EAAW,QAChB,UAAU,4BAAA,CAAA,EAEd,EAEFK,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,gBACb,SAAA,CAAAE,EAAAA,kBAAAA,IAAC,OAAA,CAAK,UAAU,cAAe,SAAAP,EAAW,QAAQ,EACjDA,EAAW,UACVO,EAAAA,kBAAAA,IAAC,QAAK,UAAU,gCAAiC,WAAW,QAAA,CAAS,CAAA,CAAA,CAEzE,CAAA,CAAA,CACF,EAGIC,EAA0B,CAACC,EAAaC,IAAoB,IAAIA,CAAO,GAEvEC,EAAmBC,EAAAA,WACvB,CACE,CACE,MAAAC,EACA,SAAAC,EACA,YAAAC,EAAc,4BACd,KAAAC,EACA,SAAAC,EAAW,GACX,UAAAC,EACA,eAAAC,EACA,wBAAAC,EACA,QAAAC,EAAU,IACV,iBAAAC,EAAmBd,EACnB,UAAAe,CAAA,EAEFC,IACG,CAEH,MAAMC,EAAwC,CAC5C,QAAS,CACP,SAAU,GACV,WAAY,SACZ,WAAY,MACZ,UAAW,MAAA,EAEb,YAAa,CACX,OAAQ,IACR,UAAW,aACX,SAAU,SACV,UAAW,MAAA,EAEb,MAAO,CACL,QAAS,YACT,OAAQ,IACR,SAAU,OACV,SAAU,OACV,QAAS,OACT,gBAAiB,cACjB,WAAY,UACZ,WAAY,MACZ,UAAW,OACX,OAAQ,CAAA,EAEV,YAAa,CACX,UAAW,MACX,KAAM,CACJ,gBAAiB,uDACjB,OAAQ,+BACR,UAAW,gCACX,SAAU,SACV,OAAQ,IACR,UAAW,QACX,UAAW,OACX,MAAO,yBACP,SAAU,QACV,MAAO,MAAA,EAET,KAAM,CACJ,QAAS,IACT,aAAc,8BAAA,CAChB,CACF,EAIIC,EAAc,CAClB,SAAU,CACR,OAAQ,CACN,MAAO,UACP,WAAY,QAAA,EAEd,UAAW,CACT,MAAO,sBACP,WAAY,MACZ,gBAAiB,cACjB,QAAS,IACT,OAAQ,IACR,UAAW,OACX,aAAc,IACd,eAAgB,MAAA,CAClB,CACF,EAIF,OAAAC,EAAM,UAAU,IAAM,CAChB,OAAO,OAAW,KACpB,SAAS,gBAAgB,MAAM,YAC7B,0BACA,wBAAA,CAGN,EAAG,CAAA,CAAE,EAGHpB,EAAAA,kBAAAA,IAAC,MAAA,CACC,IAAAiB,EACA,UAAWlB,EAAAA,GAAG,kBAAmBY,CAAS,EAE1C,SAAAX,EAAAA,kBAAAA,IAACqB,EAAAA,cAAA,CACC,MAAAf,EACA,SAAAC,EACA,MAAO,CAAC,GAAGW,EAAmB,GAAGC,CAAA,EACjC,YAAAX,EACA,SAAAE,EACA,yBAAyB,qBACzB,UAAWX,EAAAA,GACT,qGACAa,CAAA,EAEF,sBAAuB,OAAO,SAAa,IAAc,SAAS,KAAO,OACzE,4BAA6B,GAC7B,UAAAI,EAEA,SAAAhB,EAAAA,kBAAAA,IAACsB,EAAAA,QAAA,CACC,QAAAR,EACA,KAAAL,EACA,iBAAkBjB,EAClB,iBAAAuB,EACA,iBAAgB,GAChB,UAAWhB,EAAAA,GACT,2BACAc,CAAA,EAEF,OAAO,wBAAA,CAAA,CACT,CAAA,CACF,CAAA,CAGN,CACF,EAEAT,EAAiB,YAAc"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface ModalProps {
|
|
2
|
+
isOpen: boolean;
|
|
3
|
+
onClose: () => void;
|
|
4
|
+
title?: string;
|
|
5
|
+
description?: string | React.ReactNode;
|
|
6
|
+
icon?: React.ReactNode;
|
|
7
|
+
children: React.ReactNode;
|
|
8
|
+
footer?: React.ReactNode;
|
|
9
|
+
size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' | '3xl';
|
|
10
|
+
showClose?: boolean;
|
|
11
|
+
className?: string;
|
|
12
|
+
mainClassName?: string;
|
|
13
|
+
isContentScrollable?: boolean;
|
|
14
|
+
header?: React.ReactNode;
|
|
15
|
+
headerClassName?: string;
|
|
16
|
+
contentClassName?: string;
|
|
17
|
+
zIndexClassName?: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function Modal({ isOpen, onClose, title, description, icon, children, footer, size, showClose, className, isContentScrollable, mainClassName, contentClassName, header, zIndexClassName }: ModalProps): import('react').ReactPortal;
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { j as e } from "../jsx-runtime-DGlMoOmv.js";
|
|
2
|
+
import { createPortal as y } from "react-dom";
|
|
3
|
+
import { AnimatePresence as g, motion as c } from "framer-motion";
|
|
4
|
+
import { X as N } from "lucide-react";
|
|
5
|
+
import { c as r } from "../utils-qaFjX9_3.js";
|
|
6
|
+
import { useCallback as k, useEffect as E } from "react";
|
|
7
|
+
const z = {
|
|
8
|
+
sm: "max-w-sm",
|
|
9
|
+
md: "max-w-md",
|
|
10
|
+
lg: "max-w-lg",
|
|
11
|
+
xl: "max-w-xl",
|
|
12
|
+
"2xl": "max-w-[1200px] w-[90vw]",
|
|
13
|
+
"3xl": "max-w-[1600px] w-[90vw]",
|
|
14
|
+
full: "w-[100vw]"
|
|
15
|
+
};
|
|
16
|
+
function M({
|
|
17
|
+
isOpen: t,
|
|
18
|
+
onClose: s,
|
|
19
|
+
title: a,
|
|
20
|
+
description: d,
|
|
21
|
+
icon: i,
|
|
22
|
+
children: o,
|
|
23
|
+
footer: n,
|
|
24
|
+
size: x = "md",
|
|
25
|
+
showClose: u = !0,
|
|
26
|
+
className: f,
|
|
27
|
+
isContentScrollable: p = !0,
|
|
28
|
+
mainClassName: b,
|
|
29
|
+
contentClassName: h,
|
|
30
|
+
header: m,
|
|
31
|
+
zIndexClassName: j = "z-[50]"
|
|
32
|
+
}) {
|
|
33
|
+
const l = k((w) => {
|
|
34
|
+
w.key === "Escape" && t && s();
|
|
35
|
+
}, [t, s]);
|
|
36
|
+
E(() => (document.addEventListener("keydown", l), () => document.removeEventListener("keydown", l)), [l]);
|
|
37
|
+
const v = /* @__PURE__ */ e.jsx(g, { children: t && /* @__PURE__ */ e.jsx("div", { className: r("fixed inset-0 z-50 overflow-hidden", j), children: /* @__PURE__ */ e.jsxs("div", { className: r("min-h-full flex items-center justify-center p-4", b), children: [
|
|
38
|
+
/* @__PURE__ */ e.jsx(
|
|
39
|
+
c.div,
|
|
40
|
+
{
|
|
41
|
+
initial: { opacity: 0 },
|
|
42
|
+
animate: { opacity: 1 },
|
|
43
|
+
exit: { opacity: 0 },
|
|
44
|
+
className: "fixed inset-0 bg-background/80 backdrop-blur-sm",
|
|
45
|
+
onClick: s
|
|
46
|
+
}
|
|
47
|
+
),
|
|
48
|
+
/* @__PURE__ */ e.jsxs(
|
|
49
|
+
c.div,
|
|
50
|
+
{
|
|
51
|
+
initial: { opacity: 0, scale: 0.95 },
|
|
52
|
+
animate: { opacity: 1, scale: 1 },
|
|
53
|
+
exit: { opacity: 0, scale: 0.95 },
|
|
54
|
+
transition: { duration: 0.1, ease: "easeOut" },
|
|
55
|
+
className: r(
|
|
56
|
+
"relative transform rounded-lg bg-background shadow-xl border border-border flex flex-col max-h-[85vh]",
|
|
57
|
+
z[x],
|
|
58
|
+
f
|
|
59
|
+
),
|
|
60
|
+
children: [
|
|
61
|
+
(a || d || i || m) && /* @__PURE__ */ e.jsxs("div", { className: "flex-shrink-0 flex items-center justify-between p-2 border-b border-border", children: [
|
|
62
|
+
m || /* @__PURE__ */ e.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
63
|
+
i && /* @__PURE__ */ e.jsx("div", { className: "h-8 w-8 rounded-lg bg-primary flex items-center justify-center", children: i }),
|
|
64
|
+
/* @__PURE__ */ e.jsxs("div", { children: [
|
|
65
|
+
a && /* @__PURE__ */ e.jsx("h2", { className: "text-sm font-small", children: a }),
|
|
66
|
+
d && /* @__PURE__ */ e.jsx("p", { className: "text-sm text-muted-foreground", children: d })
|
|
67
|
+
] })
|
|
68
|
+
] }),
|
|
69
|
+
u && /* @__PURE__ */ e.jsx(
|
|
70
|
+
"button",
|
|
71
|
+
{
|
|
72
|
+
onClick: s,
|
|
73
|
+
className: "p-1.5 rounded-md hover:bg-muted text-muted-foreground",
|
|
74
|
+
children: /* @__PURE__ */ e.jsxs("div", { className: "flex justify-center items-center", children: [
|
|
75
|
+
/* @__PURE__ */ e.jsx(N, { className: "h-4 w-4" }),
|
|
76
|
+
/* @__PURE__ */ e.jsx("kbd", { className: "ml-2 text-[10px] text-muted-foreground bg-muted px-1.5 py-0.5 rounded", children: "ESC" })
|
|
77
|
+
] })
|
|
78
|
+
}
|
|
79
|
+
)
|
|
80
|
+
] }),
|
|
81
|
+
/* @__PURE__ */ e.jsx("div", { className: r("flex-1 min-h-0", p ? "overflow-y-auto" : "", h), children: o }),
|
|
82
|
+
n && /* @__PURE__ */ e.jsx("div", { className: "flex-shrink-0 flex items-center justify-end gap-2 px-4 py-3 border-t border-border bg-muted/50", children: n })
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
)
|
|
86
|
+
] }) }) });
|
|
87
|
+
return y(v, document.body);
|
|
88
|
+
}
|
|
89
|
+
export {
|
|
90
|
+
M as Modal
|
|
91
|
+
};
|
|
92
|
+
//# sourceMappingURL=modal.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal.esm.js","sources":["../../src/components/modal.tsx"],"sourcesContent":["import { createPortal } from 'react-dom';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { useEffect, useCallback } from 'react';\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n description?: string | React.ReactNode;\n icon?: React.ReactNode;\n children: React.ReactNode;\n footer?: React.ReactNode;\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' | '3xl';\n showClose?: boolean;\n className?: string;\n mainClassName?: string;\n isContentScrollable?: boolean;\n header?: React.ReactNode;\n headerClassName?: string;\n contentClassName?: string;\n zIndexClassName?: string;\n}\n\nconst sizeClasses = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n '2xl': 'max-w-[1200px] w-[90vw]',\n '3xl': 'max-w-[1600px] w-[90vw]',\n full: 'w-[100vw]'\n};\n\nexport function Modal({\n isOpen,\n onClose,\n title,\n description,\n icon,\n children,\n footer,\n size = 'md',\n showClose = true,\n className,\n isContentScrollable = true,\n mainClassName,\n contentClassName,\n header,\n zIndexClassName = 'z-[50]'\n}: ModalProps) {\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n }, [isOpen, onClose]);\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [handleKeyDown]);\n\n const content = (\n <AnimatePresence>\n {isOpen && (\n <div className={cn(\"fixed inset-0 z-50 overflow-hidden\", zIndexClassName)}>\n <div className={cn(\"min-h-full flex items-center justify-center p-4\", mainClassName)}>\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"fixed inset-0 bg-background/80 backdrop-blur-sm\"\n onClick={onClose}\n />\n \n <motion.div\n initial={{ opacity: 0, scale: 0.95 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.95 }}\n transition={{ duration: 0.1, ease: \"easeOut\" }}\n className={cn(\n \"relative transform rounded-lg bg-background shadow-xl border border-border flex flex-col max-h-[85vh]\",\n sizeClasses[size],\n className\n )}\n >\n {/* Header - Fixed */}\n {(title || description || icon || header) && (\n <div className=\"flex-shrink-0 flex items-center justify-between p-2 border-b border-border\">\n \n {header ? header: (\n <div className=\"flex items-center gap-3\">\n {icon && (\n <div className=\"h-8 w-8 rounded-lg bg-primary flex items-center justify-center\">\n {icon}\n </div>\n )}\n <div>\n {title && <h2 className=\"text-sm font-small\">{title}</h2>}\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n </div>\n </div>\n )}\n {showClose && (\n <button\n onClick={onClose}\n className=\"p-1.5 rounded-md hover:bg-muted text-muted-foreground\"\n >\n <div className=\"flex justify-center items-center\">\n <X className=\"h-4 w-4\" />\n <kbd className=\"ml-2 text-[10px] text-muted-foreground bg-muted px-1.5 py-0.5 rounded\">\n ESC\n </kbd>\n </div>\n </button>\n )}\n </div>\n )}\n\n {/* Content - Scrollable */}\n <div className={cn(\"flex-1 min-h-0\", isContentScrollable ? 'overflow-y-auto' : '', contentClassName )}>\n {children}\n </div>\n\n {/* Footer - Fixed */}\n {footer && (\n <div className=\"flex-shrink-0 flex items-center justify-end gap-2 px-4 py-3 border-t border-border bg-muted/50\">\n {footer}\n </div>\n )}\n </motion.div>\n </div>\n </div>\n )}\n </AnimatePresence>\n );\n\n return createPortal(content, document.body);\n}"],"names":["sizeClasses","Modal","isOpen","onClose","title","description","icon","children","footer","size","showClose","className","isContentScrollable","mainClassName","contentClassName","header","zIndexClassName","handleKeyDown","useCallback","e","useEffect","content","jsx","AnimatePresence","cn","jsxs","motion","X","createPortal"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("../jsx-runtime-BYECrxsp.cjs"),w=require("react-dom"),m=require("framer-motion"),R=require("lucide-react"),t=require("../utils-DSKoFOjv.cjs"),d=require("react"),g={sm:"max-w-sm",md:"max-w-md",lg:"max-w-lg",xl:"max-w-xl","2xl":"max-w-[1200px] w-[90vw]","3xl":"max-w-[1600px] w-[90vw]",full:"w-[100vw]"};function N({isOpen:r,onClose:s,title:n,description:i,icon:x,children:l,footer:c,size:u="md",showClose:j=!0,className:p,isContentScrollable:f=!0,mainClassName:b,contentClassName:h,header:a,zIndexClassName:v="z-[50]"}){const o=d.useCallback(E=>{E.key==="Escape"&&r&&s()},[r,s]);d.useEffect(()=>(document.addEventListener("keydown",o),()=>document.removeEventListener("keydown",o)),[o]);const y=e.jsxRuntimeExports.jsx(m.AnimatePresence,{children:r&&e.jsxRuntimeExports.jsx("div",{className:t.cn("fixed inset-0 z-50 overflow-hidden",v),children:e.jsxRuntimeExports.jsxs("div",{className:t.cn("min-h-full flex items-center justify-center p-4",b),children:[e.jsxRuntimeExports.jsx(m.motion.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},className:"fixed inset-0 bg-background/80 backdrop-blur-sm",onClick:s}),e.jsxRuntimeExports.jsxs(m.motion.div,{initial:{opacity:0,scale:.95},animate:{opacity:1,scale:1},exit:{opacity:0,scale:.95},transition:{duration:.1,ease:"easeOut"},className:t.cn("relative transform rounded-lg bg-background shadow-xl border border-border flex flex-col max-h-[85vh]",g[u],p),children:[(n||i||x||a)&&e.jsxRuntimeExports.jsxs("div",{className:"flex-shrink-0 flex items-center justify-between p-2 border-b border-border",children:[a||e.jsxRuntimeExports.jsxs("div",{className:"flex items-center gap-3",children:[x&&e.jsxRuntimeExports.jsx("div",{className:"h-8 w-8 rounded-lg bg-primary flex items-center justify-center",children:x}),e.jsxRuntimeExports.jsxs("div",{children:[n&&e.jsxRuntimeExports.jsx("h2",{className:"text-sm font-small",children:n}),i&&e.jsxRuntimeExports.jsx("p",{className:"text-sm text-muted-foreground",children:i})]})]}),j&&e.jsxRuntimeExports.jsx("button",{onClick:s,className:"p-1.5 rounded-md hover:bg-muted text-muted-foreground",children:e.jsxRuntimeExports.jsxs("div",{className:"flex justify-center items-center",children:[e.jsxRuntimeExports.jsx(R.X,{className:"h-4 w-4"}),e.jsxRuntimeExports.jsx("kbd",{className:"ml-2 text-[10px] text-muted-foreground bg-muted px-1.5 py-0.5 rounded",children:"ESC"})]})})]}),e.jsxRuntimeExports.jsx("div",{className:t.cn("flex-1 min-h-0",f?"overflow-y-auto":"",h),children:l}),c&&e.jsxRuntimeExports.jsx("div",{className:"flex-shrink-0 flex items-center justify-end gap-2 px-4 py-3 border-t border-border bg-muted/50",children:c})]})]})})});return w.createPortal(y,document.body)}exports.Modal=N;
|
|
2
|
+
//# sourceMappingURL=modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal.js","sources":["../../src/components/modal.tsx"],"sourcesContent":["import { createPortal } from 'react-dom';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { X } from 'lucide-react';\nimport { cn } from '@/lib/utils';\nimport { useEffect, useCallback } from 'react';\n\nexport interface ModalProps {\n isOpen: boolean;\n onClose: () => void;\n title?: string;\n description?: string | React.ReactNode;\n icon?: React.ReactNode;\n children: React.ReactNode;\n footer?: React.ReactNode;\n size?: 'sm' | 'md' | 'lg' | 'xl' | '2xl' | 'full' | '3xl';\n showClose?: boolean;\n className?: string;\n mainClassName?: string;\n isContentScrollable?: boolean;\n header?: React.ReactNode;\n headerClassName?: string;\n contentClassName?: string;\n zIndexClassName?: string;\n}\n\nconst sizeClasses = {\n sm: 'max-w-sm',\n md: 'max-w-md',\n lg: 'max-w-lg',\n xl: 'max-w-xl',\n '2xl': 'max-w-[1200px] w-[90vw]',\n '3xl': 'max-w-[1600px] w-[90vw]',\n full: 'w-[100vw]'\n};\n\nexport function Modal({\n isOpen,\n onClose,\n title,\n description,\n icon,\n children,\n footer,\n size = 'md',\n showClose = true,\n className,\n isContentScrollable = true,\n mainClassName,\n contentClassName,\n header,\n zIndexClassName = 'z-[50]'\n}: ModalProps) {\n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n onClose();\n }\n }, [isOpen, onClose]);\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown);\n return () => document.removeEventListener('keydown', handleKeyDown);\n }, [handleKeyDown]);\n\n const content = (\n <AnimatePresence>\n {isOpen && (\n <div className={cn(\"fixed inset-0 z-50 overflow-hidden\", zIndexClassName)}>\n <div className={cn(\"min-h-full flex items-center justify-center p-4\", mainClassName)}>\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n className=\"fixed inset-0 bg-background/80 backdrop-blur-sm\"\n onClick={onClose}\n />\n \n <motion.div\n initial={{ opacity: 0, scale: 0.95 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.95 }}\n transition={{ duration: 0.1, ease: \"easeOut\" }}\n className={cn(\n \"relative transform rounded-lg bg-background shadow-xl border border-border flex flex-col max-h-[85vh]\",\n sizeClasses[size],\n className\n )}\n >\n {/* Header - Fixed */}\n {(title || description || icon || header) && (\n <div className=\"flex-shrink-0 flex items-center justify-between p-2 border-b border-border\">\n \n {header ? header: (\n <div className=\"flex items-center gap-3\">\n {icon && (\n <div className=\"h-8 w-8 rounded-lg bg-primary flex items-center justify-center\">\n {icon}\n </div>\n )}\n <div>\n {title && <h2 className=\"text-sm font-small\">{title}</h2>}\n {description && <p className=\"text-sm text-muted-foreground\">{description}</p>}\n </div>\n </div>\n )}\n {showClose && (\n <button\n onClick={onClose}\n className=\"p-1.5 rounded-md hover:bg-muted text-muted-foreground\"\n >\n <div className=\"flex justify-center items-center\">\n <X className=\"h-4 w-4\" />\n <kbd className=\"ml-2 text-[10px] text-muted-foreground bg-muted px-1.5 py-0.5 rounded\">\n ESC\n </kbd>\n </div>\n </button>\n )}\n </div>\n )}\n\n {/* Content - Scrollable */}\n <div className={cn(\"flex-1 min-h-0\", isContentScrollable ? 'overflow-y-auto' : '', contentClassName )}>\n {children}\n </div>\n\n {/* Footer - Fixed */}\n {footer && (\n <div className=\"flex-shrink-0 flex items-center justify-end gap-2 px-4 py-3 border-t border-border bg-muted/50\">\n {footer}\n </div>\n )}\n </motion.div>\n </div>\n </div>\n )}\n </AnimatePresence>\n );\n\n return createPortal(content, document.body);\n}"],"names":["sizeClasses","Modal","isOpen","onClose","title","description","icon","children","footer","size","showClose","className","isContentScrollable","mainClassName","contentClassName","header","zIndexClassName","handleKeyDown","useCallback","e","useEffect","content","jsx","AnimatePresence","cn","jsxs","motion","X","createPortal"],"mappings":"iQAyBMA,EAAc,CAClB,GAAI,WACJ,GAAI,WACJ,GAAI,WACJ,GAAI,WACJ,MAAO,0BACP,MAAO,0BACP,KAAM,WACR,EAEO,SAASC,EAAM,CACpB,OAAAC,EACA,QAAAC,EACA,MAAAC,EACA,YAAAC,EACA,KAAAC,EACA,SAAAC,EACA,OAAAC,EACA,KAAAC,EAAO,KACP,UAAAC,EAAY,GACZ,UAAAC,EACA,oBAAAC,EAAsB,GACtB,cAAAC,EACA,iBAAAC,EACA,OAAAC,EACA,gBAAAC,EAAkB,QACpB,EAAe,CACb,MAAMC,EAAgBC,cAAaC,GAAqB,CAClDA,EAAE,MAAQ,UAAYjB,GACxBC,EAAA,CAEJ,EAAG,CAACD,EAAQC,CAAO,CAAC,EAEpBiB,EAAAA,UAAU,KACR,SAAS,iBAAiB,UAAWH,CAAa,EAC3C,IAAM,SAAS,oBAAoB,UAAWA,CAAa,GACjE,CAACA,CAAa,CAAC,EAElB,MAAMI,EACJC,wBAACC,EAAAA,gBAAA,CACE,SAAArB,GACCoB,wBAAC,OAAI,UAAWE,EAAAA,GAAG,qCAAsCR,CAAe,EACtE,SAAAS,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAWD,EAAAA,GAAG,kDAAmDX,CAAa,EACjF,SAAA,CAAAS,EAAAA,kBAAAA,IAACI,EAAAA,OAAO,IAAP,CACC,QAAS,CAAE,QAAS,CAAA,EACpB,QAAS,CAAE,QAAS,CAAA,EACpB,KAAM,CAAE,QAAS,CAAA,EACjB,UAAU,kDACV,QAASvB,CAAA,CAAA,EAGXsB,EAAAA,kBAAAA,KAACC,EAAAA,OAAO,IAAP,CACC,QAAS,CAAE,QAAS,EAAG,MAAO,GAAA,EAC9B,QAAS,CAAE,QAAS,EAAG,MAAO,CAAA,EAC9B,KAAM,CAAE,QAAS,EAAG,MAAO,GAAA,EAC3B,WAAY,CAAE,SAAU,GAAK,KAAM,SAAA,EACnC,UAAWF,EAAAA,GACT,wGACAxB,EAAYS,CAAI,EAChBE,CAAA,EAIA,SAAA,EAAAP,GAASC,GAAeC,GAAQS,IAChCU,yBAAC,MAAA,CAAI,UAAU,6EAEZ,SAAA,CAAAV,GACCU,yBAAC,MAAA,CAAI,UAAU,0BACZ,SAAA,CAAAnB,GACCgB,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,iEACZ,SAAAhB,EACH,2BAED,MAAA,CACE,SAAA,CAAAF,GAASkB,EAAAA,kBAAAA,IAAC,KAAA,CAAG,UAAU,qBAAsB,SAAAlB,EAAM,EACnDC,GAAeiB,EAAAA,kBAAAA,IAAC,IAAA,CAAE,UAAU,gCAAiC,SAAAjB,CAAA,CAAY,CAAA,CAAA,CAC5E,CAAA,EACF,EAEDK,GACCY,EAAAA,kBAAAA,IAAC,SAAA,CACC,QAASnB,EACT,UAAU,wDAEV,SAAAsB,EAAAA,kBAAAA,KAAC,MAAA,CAAI,UAAU,mCACb,SAAA,CAAAH,EAAAA,kBAAAA,IAACK,EAAAA,EAAA,CAAE,UAAU,SAAA,CAAU,EACvBL,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,wEAAwE,SAAA,KAAA,CAEvF,CAAA,CAAA,CACF,CAAA,CAAA,CACF,EAEJ,EAIFA,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAWE,EAAAA,GAAG,iBAAkBZ,EAAsB,kBAAoB,GAAIE,CAAiB,EACjG,SAAAP,CAAA,CACH,EAGCC,GACCc,EAAAA,kBAAAA,IAAC,MAAA,CAAI,UAAU,iGACZ,SAAAd,CAAA,CACH,CAAA,CAAA,CAAA,CAEJ,CAAA,CACF,EACF,EAEJ,EAGF,OAAOoB,eAAaP,EAAS,SAAS,IAAI,CAC5C"}
|