@freightos/freightwind 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/components/accordion.js +57 -0
- package/dist/cjs/components/alert.js +76 -0
- package/dist/cjs/components/aspect-ratio.js +39 -0
- package/dist/cjs/components/avatar.js +75 -0
- package/dist/cjs/components/badge.js +24 -0
- package/dist/cjs/components/breadcrumb.js +65 -0
- package/dist/cjs/components/button.js +76 -0
- package/dist/cjs/components/calendar.js +106 -0
- package/dist/cjs/components/card.js +59 -0
- package/dist/cjs/components/chart.js +176 -0
- package/dist/cjs/components/checkbox.js +44 -0
- package/dist/cjs/components/chip.js +26 -0
- package/dist/cjs/components/collapsible.js +43 -0
- package/dist/cjs/components/command.js +73 -0
- package/dist/cjs/components/context-menu.js +83 -0
- package/dist/cjs/components/country-select.js +155 -0
- package/dist/cjs/components/date-picker.js +59 -0
- package/dist/cjs/components/date-range-picker.js +59 -0
- package/dist/cjs/components/date-time-picker.js +106 -0
- package/dist/cjs/components/dialog.js +70 -0
- package/dist/cjs/components/drawer.js +68 -0
- package/dist/cjs/components/dropdown-menu.js +85 -0
- package/dist/cjs/components/empty.js +42 -0
- package/dist/cjs/components/file-preview.js +73 -0
- package/dist/cjs/components/form.js +106 -0
- package/dist/cjs/components/inline-edit.js +83 -0
- package/dist/cjs/components/input-group.js +70 -0
- package/dist/cjs/components/input-otp.js +58 -0
- package/dist/cjs/components/input.js +57 -0
- package/dist/cjs/components/label.js +45 -0
- package/dist/cjs/components/menubar.js +96 -0
- package/dist/cjs/components/navigation-menu.js +68 -0
- package/dist/cjs/components/pagination.js +65 -0
- package/dist/cjs/components/phone-input.js +218 -0
- package/dist/cjs/components/popover.js +49 -0
- package/dist/cjs/components/progress.js +43 -0
- package/dist/cjs/components/radio-button-group.js +84 -0
- package/dist/cjs/components/radio-group.js +50 -0
- package/dist/cjs/components/resizable.js +47 -0
- package/dist/cjs/components/rich-text-editor.js +152 -0
- package/dist/cjs/components/route.js +47 -0
- package/dist/cjs/components/scroll-area.js +48 -0
- package/dist/cjs/components/select.js +71 -0
- package/dist/cjs/components/separator.js +43 -0
- package/dist/cjs/components/sheet.js +245 -0
- package/dist/cjs/components/skeleton.js +8 -0
- package/dist/cjs/components/slider.js +47 -0
- package/dist/cjs/components/sonner.js +25 -0
- package/dist/cjs/components/spinner.js +25 -0
- package/dist/cjs/components/stepper.js +99 -0
- package/dist/cjs/components/steps.js +127 -0
- package/dist/cjs/components/switch.js +66 -0
- package/dist/cjs/components/table.js +66 -0
- package/dist/cjs/components/tabs.js +51 -0
- package/dist/cjs/components/textarea.js +44 -0
- package/dist/cjs/components/time-picker.js +110 -0
- package/dist/cjs/components/toast.js +75 -0
- package/dist/cjs/components/toaster.js +12 -0
- package/dist/cjs/components/toggle-group.js +58 -0
- package/dist/cjs/components/toggle.js +62 -0
- package/dist/cjs/components/tooltip.js +49 -0
- package/dist/cjs/hooks/use-toast.js +166 -0
- package/dist/cjs/index.js +88 -0
- package/dist/cjs/lib/countryUtils.js +93 -0
- package/dist/cjs/lib/utils.js +8 -0
- package/dist/esm/components/accordion.js +18 -0
- package/dist/esm/components/alert.js +39 -0
- package/dist/esm/components/aspect-ratio.js +3 -0
- package/dist/esm/components/avatar.js +37 -0
- package/dist/esm/components/badge.js +20 -0
- package/dist/esm/components/breadcrumb.js +23 -0
- package/dist/esm/components/button.js +39 -0
- package/dist/esm/components/calendar.js +70 -0
- package/dist/esm/components/card.js +18 -0
- package/dist/esm/components/chart.js +135 -0
- package/dist/esm/components/checkbox.js +8 -0
- package/dist/esm/components/chip.js +22 -0
- package/dist/esm/components/collapsible.js +5 -0
- package/dist/esm/components/command.js +29 -0
- package/dist/esm/components/context-menu.js +33 -0
- package/dist/esm/components/country-select.js +118 -0
- package/dist/esm/components/date-picker.js +23 -0
- package/dist/esm/components/date-range-picker.js +23 -0
- package/dist/esm/components/date-time-picker.js +70 -0
- package/dist/esm/components/dialog.js +24 -0
- package/dist/esm/components/drawer.js +23 -0
- package/dist/esm/components/dropdown-menu.js +35 -0
- package/dist/esm/components/empty.js +6 -0
- package/dist/esm/components/file-preview.js +69 -0
- package/dist/esm/components/form.js +63 -0
- package/dist/esm/components/inline-edit.js +47 -0
- package/dist/esm/components/input-group.js +63 -0
- package/dist/esm/components/input-otp.js +19 -0
- package/dist/esm/components/input.js +21 -0
- package/dist/esm/components/label.js +9 -0
- package/dist/esm/components/menubar.js +45 -0
- package/dist/esm/components/navigation-menu.js +24 -0
- package/dist/esm/components/pagination.js +23 -0
- package/dist/esm/components/phone-input.js +181 -0
- package/dist/esm/components/popover.js +10 -0
- package/dist/esm/components/progress.js +7 -0
- package/dist/esm/components/radio-button-group.js +47 -0
- package/dist/esm/components/radio-group.js +13 -0
- package/dist/esm/components/resizable.js +9 -0
- package/dist/esm/components/rich-text-editor.js +145 -0
- package/dist/esm/components/route.js +11 -0
- package/dist/esm/components/scroll-area.js +11 -0
- package/dist/esm/components/select.js +26 -0
- package/dist/esm/components/separator.js +7 -0
- package/dist/esm/components/sheet.js +197 -0
- package/dist/esm/components/skeleton.js +6 -0
- package/dist/esm/components/slider.js +11 -0
- package/dist/esm/components/sonner.js +22 -0
- package/dist/esm/components/spinner.js +21 -0
- package/dist/esm/components/stepper.js +57 -0
- package/dist/esm/components/steps.js +80 -0
- package/dist/esm/components/switch.js +30 -0
- package/dist/esm/components/table.js +22 -0
- package/dist/esm/components/tabs.js +12 -0
- package/dist/esm/components/textarea.js +8 -0
- package/dist/esm/components/time-picker.js +74 -0
- package/dist/esm/components/toast.js +33 -0
- package/dist/esm/components/toaster.js +9 -0
- package/dist/esm/components/toggle-group.js +21 -0
- package/dist/esm/components/toggle.js +25 -0
- package/dist/esm/components/tooltip.js +10 -0
- package/dist/esm/hooks/use-toast.js +128 -0
- package/dist/esm/index.js +67 -0
- package/dist/esm/lib/countryUtils.js +87 -0
- package/dist/esm/lib/utils.js +5 -0
- package/dist/styles.css +152 -0
- package/dist/types/components/accordion.d.ts +11 -0
- package/dist/types/components/alert.d.ts +12 -0
- package/dist/types/components/aspect-ratio.d.ts +3 -0
- package/dist/types/components/avatar.d.ts +19 -0
- package/dist/types/components/badge.d.ts +9 -0
- package/dist/types/components/breadcrumb.d.ts +19 -0
- package/dist/types/components/button.d.ts +14 -0
- package/dist/types/components/calendar.d.ts +7 -0
- package/dist/types/components/card.d.ts +11 -0
- package/dist/types/components/chart.d.ts +66 -0
- package/dist/types/components/checkbox.d.ts +4 -0
- package/dist/types/components/chip.d.ts +10 -0
- package/dist/types/components/collapsible.d.ts +5 -0
- package/dist/types/components/command.d.ts +80 -0
- package/dist/types/components/context-menu.d.ts +27 -0
- package/dist/types/components/country-select.d.ts +17 -0
- package/dist/types/components/date-picker.d.ts +9 -0
- package/dist/types/components/date-range-picker.d.ts +10 -0
- package/dist/types/components/date-time-picker.d.ts +10 -0
- package/dist/types/components/dialog.d.ts +23 -0
- package/dist/types/components/drawer.d.ts +22 -0
- package/dist/types/components/dropdown-menu.d.ts +27 -0
- package/dist/types/components/empty.d.ts +6 -0
- package/dist/types/components/file-preview.d.ts +9 -0
- package/dist/types/components/form.d.ts +23 -0
- package/dist/types/components/inline-edit.d.ts +10 -0
- package/dist/types/components/input-group.d.ts +16 -0
- package/dist/types/components/input-otp.d.ts +34 -0
- package/dist/types/components/input.d.ts +9 -0
- package/dist/types/components/label.d.ts +5 -0
- package/dist/types/components/menubar.d.ts +28 -0
- package/dist/types/components/navigation-menu.d.ts +12 -0
- package/dist/types/components/pagination.d.ts +29 -0
- package/dist/types/components/phone-input.d.ts +20 -0
- package/dist/types/components/popover.d.ts +9 -0
- package/dist/types/components/progress.d.ts +4 -0
- package/dist/types/components/radio-button-group.d.ts +17 -0
- package/dist/types/components/radio-group.d.ts +5 -0
- package/dist/types/components/resizable.d.ts +23 -0
- package/dist/types/components/rich-text-editor.d.ts +8 -0
- package/dist/types/components/route.d.ts +10 -0
- package/dist/types/components/scroll-area.d.ts +5 -0
- package/dist/types/components/select.d.ts +13 -0
- package/dist/types/components/separator.d.ts +4 -0
- package/dist/types/components/sheet.d.ts +49 -0
- package/dist/types/components/skeleton.d.ts +2 -0
- package/dist/types/components/slider.d.ts +4 -0
- package/dist/types/components/sonner.d.ts +4 -0
- package/dist/types/components/spinner.d.ts +8 -0
- package/dist/types/components/stepper.d.ts +17 -0
- package/dist/types/components/steps.d.ts +64 -0
- package/dist/types/components/switch.d.ts +10 -0
- package/dist/types/components/table.d.ts +14 -0
- package/dist/types/components/tabs.d.ts +7 -0
- package/dist/types/components/textarea.d.ts +3 -0
- package/dist/types/components/time-picker.d.ts +10 -0
- package/dist/types/components/toast.d.ts +15 -0
- package/dist/types/components/toaster.d.ts +1 -0
- package/dist/types/components/toggle-group.d.ts +12 -0
- package/dist/types/components/toggle.d.ts +12 -0
- package/dist/types/components/tooltip.d.ts +7 -0
- package/dist/types/hooks/use-toast.d.ts +44 -0
- package/dist/types/index.d.ts +62 -0
- package/dist/types/lib/countryUtils.d.ts +20 -0
- package/dist/types/lib/utils.d.ts +2 -0
- package/package.json +84 -0
- package/tailwind-preset.js +70 -0
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.RichTextEditor = void 0;
|
|
8
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
9
|
+
const utils_1 = require("../lib/utils");
|
|
10
|
+
const extension_bullet_list_1 = __importDefault(require("@tiptap/extension-bullet-list"));
|
|
11
|
+
const extension_list_item_1 = __importDefault(require("@tiptap/extension-list-item"));
|
|
12
|
+
const extension_ordered_list_1 = __importDefault(require("@tiptap/extension-ordered-list"));
|
|
13
|
+
const extension_link_1 = __importDefault(require("@tiptap/extension-link"));
|
|
14
|
+
const extension_underline_1 = __importDefault(require("@tiptap/extension-underline"));
|
|
15
|
+
const extension_placeholder_1 = __importDefault(require("@tiptap/extension-placeholder"));
|
|
16
|
+
const react_1 = require("@tiptap/react");
|
|
17
|
+
const starter_kit_1 = __importDefault(require("@tiptap/starter-kit"));
|
|
18
|
+
const state_1 = require("@tiptap/pm/state");
|
|
19
|
+
const lucide_react_1 = require("lucide-react");
|
|
20
|
+
const react_2 = require("react");
|
|
21
|
+
const input_1 = require("./input");
|
|
22
|
+
const button_1 = require("./button");
|
|
23
|
+
const popover_1 = require("./popover");
|
|
24
|
+
// Custom Link extension to prevent clicks
|
|
25
|
+
const createCustomLink = (onLinkClick) => {
|
|
26
|
+
return extension_link_1.default.extend({
|
|
27
|
+
addProseMirrorPlugins() {
|
|
28
|
+
return [
|
|
29
|
+
new state_1.Plugin({
|
|
30
|
+
key: new state_1.PluginKey('handleLinkClick'),
|
|
31
|
+
props: {
|
|
32
|
+
handleClick(_view, _pos, event) {
|
|
33
|
+
const link = event.target?.closest('a');
|
|
34
|
+
if (link) {
|
|
35
|
+
event.preventDefault();
|
|
36
|
+
event.stopPropagation();
|
|
37
|
+
const href = link.getAttribute('href');
|
|
38
|
+
if (href) {
|
|
39
|
+
onLinkClick(href);
|
|
40
|
+
}
|
|
41
|
+
return true;
|
|
42
|
+
}
|
|
43
|
+
return false;
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
}),
|
|
47
|
+
];
|
|
48
|
+
},
|
|
49
|
+
}).configure({
|
|
50
|
+
openOnClick: false,
|
|
51
|
+
HTMLAttributes: {
|
|
52
|
+
class: 'text-primary underline cursor-pointer',
|
|
53
|
+
rel: 'noopener noreferrer nofollow',
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
const MenuBar = ({ editor, linkUrl, setLinkUrl, linkPopoverOpen, setLinkPopoverOpen, isEditingExistingLink, setIsEditingExistingLink, handleSetLink, handleRemoveLink, }) => {
|
|
58
|
+
if (!editor)
|
|
59
|
+
return null;
|
|
60
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "flex items-center gap-fds-xs border-b border-border bg-fds-gray-10 px-fds-md py-fds-md dark:bg-card", children: [(0, jsx_runtime_1.jsx)("button", { onClick: () => editor.chain().focus().toggleBold().run(), type: "button", className: "cursor-pointer rounded p-1 hover:bg-fds-gray-20 dark:hover:bg-fds-gray-80", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Bold, { className: (0, utils_1.cn)('h-4 w-4 text-foreground', editor.isActive('bold') && 'text-primary') }) }), (0, jsx_runtime_1.jsx)("button", { onClick: () => editor.chain().focus().toggleItalic().run(), type: "button", className: "cursor-pointer rounded p-1 hover:bg-fds-gray-20 dark:hover:bg-fds-gray-80", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Italic, { className: (0, utils_1.cn)('h-4 w-4 text-foreground', editor.isActive('italic') && 'text-primary') }) }), (0, jsx_runtime_1.jsx)("button", { onClick: () => editor.chain().focus().toggleUnderline().run(), type: "button", className: "cursor-pointer rounded p-1 hover:bg-fds-gray-20 dark:hover:bg-fds-gray-80", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Underline, { className: (0, utils_1.cn)('h-4 w-4 text-foreground', editor.isActive('underline') && 'text-primary') }) }), (0, jsx_runtime_1.jsx)("div", { className: "mx-fds-xs h-4 w-px bg-fds-gray-20 dark:bg-fds-gray-80" }), (0, jsx_runtime_1.jsx)("button", { onClick: (e) => {
|
|
61
|
+
e.preventDefault();
|
|
62
|
+
editor.chain().focus().toggleBulletList().run();
|
|
63
|
+
}, type: "button", className: "cursor-pointer rounded p-1 hover:bg-fds-gray-20 dark:hover:bg-fds-gray-80", children: (0, jsx_runtime_1.jsx)(lucide_react_1.List, { className: (0, utils_1.cn)('h-4 w-4 text-foreground', editor.isActive('bulletList') && 'text-primary') }) }), (0, jsx_runtime_1.jsx)("button", { onClick: (e) => {
|
|
64
|
+
e.preventDefault();
|
|
65
|
+
editor.chain().focus().toggleOrderedList().run();
|
|
66
|
+
}, type: "button", className: "cursor-pointer rounded p-1 hover:bg-fds-gray-20 dark:hover:bg-fds-gray-80", children: (0, jsx_runtime_1.jsx)(lucide_react_1.ListOrdered, { className: (0, utils_1.cn)('h-4 w-4 text-foreground', editor.isActive('orderedList') && 'text-primary') }) }), (0, jsx_runtime_1.jsxs)(popover_1.Popover, { open: linkPopoverOpen, onOpenChange: setLinkPopoverOpen, children: [(0, jsx_runtime_1.jsx)(popover_1.PopoverTrigger, { asChild: true, children: (0, jsx_runtime_1.jsx)("button", { type: "button", className: "cursor-pointer rounded p-1 hover:bg-fds-gray-20 dark:hover:bg-fds-gray-80", onClick: () => {
|
|
67
|
+
if (editor.isActive('link')) {
|
|
68
|
+
setLinkUrl(editor.getAttributes('link').href);
|
|
69
|
+
}
|
|
70
|
+
}, children: (0, jsx_runtime_1.jsx)(lucide_react_1.Link, { className: (0, utils_1.cn)('h-4 w-4 text-foreground', editor.isActive('link') && 'text-primary') }) }) }), (0, jsx_runtime_1.jsx)(popover_1.PopoverContent, { className: "w-[300px]", children: (0, jsx_runtime_1.jsx)("div", { className: "flex flex-col gap-fds-sm", children: isEditingExistingLink ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "text-fds-sm font-fds-semibold", children: "Visit URL:" }), (0, jsx_runtime_1.jsx)("a", { href: linkUrl, target: "_blank", rel: "noopener noreferrer", className: "truncate text-fds-sm text-primary hover:underline", children: linkUrl }), (0, jsx_runtime_1.jsxs)("div", { className: "flex gap-fds-xs", children: [(0, jsx_runtime_1.jsx)(button_1.Button, { size: "small", onClick: () => {
|
|
71
|
+
setIsEditingExistingLink(false);
|
|
72
|
+
}, className: "flex-1", children: "Edit" }), (0, jsx_runtime_1.jsx)(button_1.Button, { size: "small", type: "text", onClick: handleRemoveLink, className: "flex-1", children: "Remove" })] })] })) : editor.isActive('link') ? ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "text-fds-sm font-fds-semibold", children: "Edit Link" }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: linkUrl, onChange: (e) => setLinkUrl(e.target.value), placeholder: "Enter URL", onKeyDown: (e) => {
|
|
73
|
+
if (e.key === 'Enter') {
|
|
74
|
+
e.preventDefault();
|
|
75
|
+
handleSetLink();
|
|
76
|
+
}
|
|
77
|
+
}, autoFocus: true }), (0, jsx_runtime_1.jsxs)("div", { className: "flex gap-fds-xs", children: [(0, jsx_runtime_1.jsx)(button_1.Button, { size: "small", onClick: handleSetLink, className: "flex-1", children: "Update" }), (0, jsx_runtime_1.jsx)(button_1.Button, { size: "small", type: "text", onClick: handleRemoveLink, className: "flex-1", children: "Remove" })] })] })) : ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)("div", { className: "text-fds-sm font-fds-semibold", children: "Add Link" }), (0, jsx_runtime_1.jsx)(input_1.Input, { value: linkUrl, onChange: (e) => setLinkUrl(e.target.value), placeholder: "Enter URL", onKeyDown: (e) => {
|
|
78
|
+
if (e.key === 'Enter') {
|
|
79
|
+
e.preventDefault();
|
|
80
|
+
handleSetLink();
|
|
81
|
+
}
|
|
82
|
+
}, autoFocus: true }), (0, jsx_runtime_1.jsx)(button_1.Button, { size: "small", onClick: handleSetLink, children: "Add Link" })] })) }) })] })] }));
|
|
83
|
+
};
|
|
84
|
+
const RichTextEditor = ({ value = '', onChange, placeholder = 'Type your message...', className, }) => {
|
|
85
|
+
const [linkPopoverOpen, setLinkPopoverOpen] = (0, react_2.useState)(false);
|
|
86
|
+
const [linkUrl, setLinkUrl] = (0, react_2.useState)('');
|
|
87
|
+
const [isEditingExistingLink, setIsEditingExistingLink] = (0, react_2.useState)(false);
|
|
88
|
+
const handleLinkClick = (href) => {
|
|
89
|
+
setLinkUrl(href);
|
|
90
|
+
setIsEditingExistingLink(true);
|
|
91
|
+
setLinkPopoverOpen(true);
|
|
92
|
+
};
|
|
93
|
+
const CustomLink = createCustomLink(handleLinkClick);
|
|
94
|
+
const editor = (0, react_1.useEditor)({
|
|
95
|
+
immediatelyRender: false,
|
|
96
|
+
extensions: [
|
|
97
|
+
starter_kit_1.default.configure({
|
|
98
|
+
bulletList: false,
|
|
99
|
+
orderedList: false,
|
|
100
|
+
listItem: false,
|
|
101
|
+
}),
|
|
102
|
+
extension_list_item_1.default,
|
|
103
|
+
extension_bullet_list_1.default.configure({
|
|
104
|
+
HTMLAttributes: {
|
|
105
|
+
class: 'list-disc list-outside ml-4',
|
|
106
|
+
},
|
|
107
|
+
}),
|
|
108
|
+
extension_ordered_list_1.default.configure({
|
|
109
|
+
HTMLAttributes: {
|
|
110
|
+
class: 'list-decimal list-outside ml-4',
|
|
111
|
+
},
|
|
112
|
+
}),
|
|
113
|
+
extension_underline_1.default,
|
|
114
|
+
CustomLink,
|
|
115
|
+
extension_placeholder_1.default.configure({
|
|
116
|
+
placeholder,
|
|
117
|
+
}),
|
|
118
|
+
],
|
|
119
|
+
content: value,
|
|
120
|
+
onUpdate: ({ editor }) => {
|
|
121
|
+
onChange?.(editor.getHTML());
|
|
122
|
+
},
|
|
123
|
+
editorProps: {
|
|
124
|
+
attributes: {
|
|
125
|
+
class: (0, utils_1.cn)('prose prose-sm focus:outline-none min-h-[80px] px-fds-lg py-fds-sm prose-p:my-1 prose-ul:my-1 prose-ol:my-1 text-fds-sm bg-white dark:bg-black dark:text-white', className),
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
const handleSetLink = () => {
|
|
130
|
+
if (linkUrl && editor) {
|
|
131
|
+
// Ensure URL has protocol
|
|
132
|
+
let formattedUrl = linkUrl;
|
|
133
|
+
if (!/^https?:\/\//i.test(linkUrl)) {
|
|
134
|
+
formattedUrl = `https://${linkUrl}`;
|
|
135
|
+
}
|
|
136
|
+
editor.chain().focus().setLink({ href: formattedUrl }).run();
|
|
137
|
+
setLinkUrl('');
|
|
138
|
+
setIsEditingExistingLink(false);
|
|
139
|
+
setLinkPopoverOpen(false);
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
const handleRemoveLink = () => {
|
|
143
|
+
if (editor) {
|
|
144
|
+
editor.chain().focus().unsetLink().run();
|
|
145
|
+
setLinkUrl('');
|
|
146
|
+
setIsEditingExistingLink(false);
|
|
147
|
+
setLinkPopoverOpen(false);
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
return ((0, jsx_runtime_1.jsxs)("div", { className: "w-full", children: [(0, jsx_runtime_1.jsx)(MenuBar, { editor: editor, linkUrl: linkUrl, setLinkUrl: setLinkUrl, linkPopoverOpen: linkPopoverOpen, setLinkPopoverOpen: setLinkPopoverOpen, isEditingExistingLink: isEditingExistingLink, setIsEditingExistingLink: setIsEditingExistingLink, handleSetLink: handleSetLink, handleRemoveLink: handleRemoveLink }), (0, jsx_runtime_1.jsx)(react_1.EditorContent, { editor: editor, placeholder: placeholder })] }));
|
|
151
|
+
};
|
|
152
|
+
exports.RichTextEditor = RichTextEditor;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Route = void 0;
|
|
37
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
+
const React = __importStar(require("react"));
|
|
39
|
+
const utils_1 = require("../lib/utils");
|
|
40
|
+
const Route = React.forwardRef(({ className, type = 'point-to-point', start, end, ...props }, ref) => {
|
|
41
|
+
if (type === 'point-to-point') {
|
|
42
|
+
return ((0, jsx_runtime_1.jsxs)("div", { ref: ref, className: (0, utils_1.cn)('flex items-center gap-fds-sm', className), ...props, children: [start, (0, jsx_runtime_1.jsxs)("div", { className: "relative flex items-center", children: [(0, jsx_runtime_1.jsx)("div", { className: "h-[5px] w-[5px] rounded-full bg-foreground" }), (0, jsx_runtime_1.jsx)("div", { className: "h-px w-[22px] bg-foreground" }), (0, jsx_runtime_1.jsx)("div", { className: "h-[5px] w-[5px] rounded-full bg-foreground" })] }), end] }));
|
|
43
|
+
}
|
|
44
|
+
return null;
|
|
45
|
+
});
|
|
46
|
+
exports.Route = Route;
|
|
47
|
+
Route.displayName = 'Route';
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.ScrollBar = exports.ScrollArea = void 0;
|
|
37
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
+
const React = __importStar(require("react"));
|
|
39
|
+
const ScrollAreaPrimitive = __importStar(require("@radix-ui/react-scroll-area"));
|
|
40
|
+
const utils_1 = require("../lib/utils");
|
|
41
|
+
const ScrollArea = React.forwardRef(({ className, children, ...props }, ref) => ((0, jsx_runtime_1.jsxs)(ScrollAreaPrimitive.Root, { ref: ref, className: (0, utils_1.cn)("relative overflow-hidden", className), ...props, children: [(0, jsx_runtime_1.jsx)(ScrollAreaPrimitive.Viewport, { className: "h-full w-full rounded-[inherit]", children: children }), (0, jsx_runtime_1.jsx)(ScrollBar, {}), (0, jsx_runtime_1.jsx)(ScrollAreaPrimitive.Corner, {})] })));
|
|
42
|
+
exports.ScrollArea = ScrollArea;
|
|
43
|
+
ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName;
|
|
44
|
+
const ScrollBar = React.forwardRef(({ className, orientation = "vertical", ...props }, ref) => ((0, jsx_runtime_1.jsx)(ScrollAreaPrimitive.ScrollAreaScrollbar, { ref: ref, orientation: orientation, className: (0, utils_1.cn)("flex touch-none select-none transition-colors", orientation === "vertical" &&
|
|
45
|
+
"h-full w-2.5 border-l border-l-transparent p-[1px]", orientation === "horizontal" &&
|
|
46
|
+
"h-2.5 flex-col border-t border-t-transparent p-[1px]", className), ...props, children: (0, jsx_runtime_1.jsx)(ScrollAreaPrimitive.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" }) })));
|
|
47
|
+
exports.ScrollBar = ScrollBar;
|
|
48
|
+
ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.SelectScrollDownButton = exports.SelectScrollUpButton = exports.SelectSeparator = exports.SelectItem = exports.SelectLabel = exports.SelectContent = exports.SelectTrigger = exports.SelectValue = exports.SelectGroup = exports.Select = void 0;
|
|
37
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
+
const React = __importStar(require("react"));
|
|
39
|
+
const SelectPrimitive = __importStar(require("@radix-ui/react-select"));
|
|
40
|
+
const utils_1 = require("../lib/utils");
|
|
41
|
+
const icons_1 = require("@freightos/icons");
|
|
42
|
+
const Select = SelectPrimitive.Root;
|
|
43
|
+
exports.Select = Select;
|
|
44
|
+
const SelectGroup = SelectPrimitive.Group;
|
|
45
|
+
exports.SelectGroup = SelectGroup;
|
|
46
|
+
const SelectValue = SelectPrimitive.Value;
|
|
47
|
+
exports.SelectValue = SelectValue;
|
|
48
|
+
const SelectTrigger = React.forwardRef(({ className, children, ...props }, ref) => ((0, jsx_runtime_1.jsxs)(SelectPrimitive.Trigger, { ref: ref, className: (0, utils_1.cn)('flex h-[32px] w-full items-center justify-between rounded-fds-md border border-input-border bg-input py-2 pl-3 pr-2 text-sm transition-[color,box-shadow] focus:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=open]:border-[#2075bd] data-[placeholder]:text-muted-foreground data-[state=open]:shadow-[0_0_0_2px_var(--fds-color-primary-blue-20)] [&>span]:line-clamp-1 [&[data-state=open]>span[data-radix-select-icon]>svg]:rotate-180', className), ...props, children: [children, (0, jsx_runtime_1.jsx)(SelectPrimitive.Icon, { asChild: true, children: (0, jsx_runtime_1.jsx)(icons_1.IconCaretDown, { className: "transition-transform duration-200" }) })] })));
|
|
49
|
+
exports.SelectTrigger = SelectTrigger;
|
|
50
|
+
SelectTrigger.displayName = SelectPrimitive.Trigger.displayName;
|
|
51
|
+
const SelectScrollUpButton = React.forwardRef(({ className, ...props }, ref) => ((0, jsx_runtime_1.jsx)(SelectPrimitive.ScrollUpButton, { ref: ref, className: (0, utils_1.cn)('flex cursor-default items-center justify-center py-1', className), ...props, children: (0, jsx_runtime_1.jsx)(icons_1.IconCaretUp, {}) })));
|
|
52
|
+
exports.SelectScrollUpButton = SelectScrollUpButton;
|
|
53
|
+
SelectScrollUpButton.displayName = SelectPrimitive.ScrollUpButton.displayName;
|
|
54
|
+
const SelectScrollDownButton = React.forwardRef(({ className, ...props }, ref) => ((0, jsx_runtime_1.jsx)(SelectPrimitive.ScrollDownButton, { ref: ref, className: (0, utils_1.cn)('flex cursor-default items-center justify-center py-1', className), ...props, children: (0, jsx_runtime_1.jsx)(icons_1.IconCaretDown, {}) })));
|
|
55
|
+
exports.SelectScrollDownButton = SelectScrollDownButton;
|
|
56
|
+
SelectScrollDownButton.displayName =
|
|
57
|
+
SelectPrimitive.ScrollDownButton.displayName;
|
|
58
|
+
const SelectContent = React.forwardRef(({ className, children, position = 'popper', ...props }, ref) => ((0, jsx_runtime_1.jsx)(SelectPrimitive.Portal, { children: (0, jsx_runtime_1.jsxs)(SelectPrimitive.Content, { ref: ref, className: (0, utils_1.cn)('relative z-[9999] max-h-[--radix-select-content-available-height] min-w-[8rem] w-max origin-[--radix-select-content-transform-origin] overflow-y-auto overflow-x-hidden rounded-fds-md bg-popover text-popover-foreground shadow-fds-md 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', position === 'popper' &&
|
|
59
|
+
'data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1', className), position: position, ...props, children: [(0, jsx_runtime_1.jsx)(SelectScrollUpButton, {}), (0, jsx_runtime_1.jsx)(SelectPrimitive.Viewport, { className: (0, utils_1.cn)('w-full', position === 'popper' &&
|
|
60
|
+
'h-[var(--radix-select-trigger-height)] min-w-[var(--radix-select-trigger-width)]'), children: children }), (0, jsx_runtime_1.jsx)(SelectScrollDownButton, {})] }) })));
|
|
61
|
+
exports.SelectContent = SelectContent;
|
|
62
|
+
SelectContent.displayName = SelectPrimitive.Content.displayName;
|
|
63
|
+
const SelectLabel = React.forwardRef(({ className, ...props }, ref) => ((0, jsx_runtime_1.jsx)(SelectPrimitive.Label, { ref: ref, className: (0, utils_1.cn)('py-1.5 pl-8 pr-2 text-sm font-semibold', className), ...props })));
|
|
64
|
+
exports.SelectLabel = SelectLabel;
|
|
65
|
+
SelectLabel.displayName = SelectPrimitive.Label.displayName;
|
|
66
|
+
const SelectItem = React.forwardRef(({ className, children, ...props }, ref) => ((0, jsx_runtime_1.jsx)(SelectPrimitive.Item, { ref: ref, className: (0, utils_1.cn)('relative flex w-full cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[highlighted]:bg-accent data-[disabled]:opacity-50', className), ...props, children: (0, jsx_runtime_1.jsx)(SelectPrimitive.ItemText, { asChild: true, children: (0, jsx_runtime_1.jsx)("div", { className: "flex w-full flex-1 items-center", children: children }) }) })));
|
|
67
|
+
exports.SelectItem = SelectItem;
|
|
68
|
+
SelectItem.displayName = SelectPrimitive.Item.displayName;
|
|
69
|
+
const SelectSeparator = React.forwardRef(({ className, ...props }, ref) => ((0, jsx_runtime_1.jsx)(SelectPrimitive.Separator, { ref: ref, className: (0, utils_1.cn)('-mx-1 my-1 h-px bg-muted', className), ...props })));
|
|
70
|
+
exports.SelectSeparator = SelectSeparator;
|
|
71
|
+
SelectSeparator.displayName = SelectPrimitive.Separator.displayName;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.Separator = void 0;
|
|
37
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
38
|
+
const SeparatorPrimitive = __importStar(require("@radix-ui/react-separator"));
|
|
39
|
+
const React = __importStar(require("react"));
|
|
40
|
+
const utils_1 = require("../lib/utils");
|
|
41
|
+
const Separator = React.forwardRef(({ className, orientation = 'horizontal', decorative = true, ...props }, ref) => ((0, jsx_runtime_1.jsx)(SeparatorPrimitive.Root, { ref: ref, decorative: decorative, orientation: orientation, className: (0, utils_1.cn)('shrink-0 bg-fds-gray-20', orientation === 'horizontal' ? 'h-[1px] w-full' : 'h-full w-[1px]', className), ...props })));
|
|
42
|
+
exports.Separator = Separator;
|
|
43
|
+
Separator.displayName = SeparatorPrimitive.Root.displayName;
|
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
'use client';
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
|
+
exports.SheetDescription = exports.SheetTitle = exports.SheetFooter = exports.SheetBody = exports.SheetHeader = exports.SheetContent = exports.SheetClose = exports.SheetTrigger = exports.SheetOverlay = exports.SheetPortal = exports.SheetProvider = exports.Sheet = exports.useSheetContext = void 0;
|
|
38
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
39
|
+
const React = __importStar(require("react"));
|
|
40
|
+
const SheetPrimitive = __importStar(require("@radix-ui/react-dialog"));
|
|
41
|
+
const class_variance_authority_1 = require("class-variance-authority");
|
|
42
|
+
const lucide_react_1 = require("lucide-react");
|
|
43
|
+
const utils_1 = require("../lib/utils");
|
|
44
|
+
const SheetContext = React.createContext({
|
|
45
|
+
level: 0,
|
|
46
|
+
parentSheetWidth: undefined,
|
|
47
|
+
registerNestedSheet: () => { },
|
|
48
|
+
unregisterNestedSheet: () => { },
|
|
49
|
+
hasNestedSheetOpen: false,
|
|
50
|
+
nestedSheetWidth: undefined,
|
|
51
|
+
});
|
|
52
|
+
const useSheetContext = () => React.useContext(SheetContext);
|
|
53
|
+
exports.useSheetContext = useSheetContext;
|
|
54
|
+
// Sheet wrapper that provides context
|
|
55
|
+
const SheetProvider = ({ children, width }) => {
|
|
56
|
+
const parentContext = (0, exports.useSheetContext)();
|
|
57
|
+
const [nestedSheetCount, setNestedSheetCount] = React.useState(0);
|
|
58
|
+
const registerNestedSheet = React.useCallback(() => {
|
|
59
|
+
setNestedSheetCount((count) => count + 1);
|
|
60
|
+
}, []);
|
|
61
|
+
const unregisterNestedSheet = React.useCallback(() => {
|
|
62
|
+
setNestedSheetCount((count) => Math.max(0, count - 1));
|
|
63
|
+
}, []);
|
|
64
|
+
const contextValue = React.useMemo(() => ({
|
|
65
|
+
level: parentContext.level + 1,
|
|
66
|
+
parentSheetWidth: width,
|
|
67
|
+
registerNestedSheet,
|
|
68
|
+
unregisterNestedSheet,
|
|
69
|
+
hasNestedSheetOpen: nestedSheetCount > 0,
|
|
70
|
+
}), [
|
|
71
|
+
parentContext.level,
|
|
72
|
+
width,
|
|
73
|
+
registerNestedSheet,
|
|
74
|
+
unregisterNestedSheet,
|
|
75
|
+
nestedSheetCount,
|
|
76
|
+
]);
|
|
77
|
+
return ((0, jsx_runtime_1.jsx)(SheetContext.Provider, { value: contextValue, children: children }));
|
|
78
|
+
};
|
|
79
|
+
exports.SheetProvider = SheetProvider;
|
|
80
|
+
const SheetRoot = ({ open, width, ...props }) => {
|
|
81
|
+
const parentContext = (0, exports.useSheetContext)();
|
|
82
|
+
// Register/unregister when open state changes
|
|
83
|
+
React.useEffect(() => {
|
|
84
|
+
if (open && parentContext.level > 0) {
|
|
85
|
+
parentContext.registerNestedSheet(width);
|
|
86
|
+
return () => {
|
|
87
|
+
parentContext.unregisterNestedSheet();
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
return undefined;
|
|
91
|
+
}, [open, parentContext, width]);
|
|
92
|
+
return (0, jsx_runtime_1.jsx)(SheetPrimitive.Root, { open: open, ...props });
|
|
93
|
+
};
|
|
94
|
+
const Sheet = SheetRoot;
|
|
95
|
+
exports.Sheet = Sheet;
|
|
96
|
+
const SheetTrigger = SheetPrimitive.Trigger;
|
|
97
|
+
exports.SheetTrigger = SheetTrigger;
|
|
98
|
+
const SheetClose = SheetPrimitive.Close;
|
|
99
|
+
exports.SheetClose = SheetClose;
|
|
100
|
+
const SheetPortal = SheetPrimitive.Portal;
|
|
101
|
+
exports.SheetPortal = SheetPortal;
|
|
102
|
+
const SheetOverlay = React.forwardRef(({ className, ...props }, ref) => ((0, jsx_runtime_1.jsx)(SheetPrimitive.Overlay, { className: (0, utils_1.cn)('fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0', className), ...props, ref: ref })));
|
|
103
|
+
exports.SheetOverlay = SheetOverlay;
|
|
104
|
+
SheetOverlay.displayName = SheetPrimitive.Overlay.displayName;
|
|
105
|
+
const sheetVariants = (0, class_variance_authority_1.cva)('fixed bg-background shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out bg-card flex flex-col', {
|
|
106
|
+
variants: {
|
|
107
|
+
side: {
|
|
108
|
+
top: 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',
|
|
109
|
+
bottom: 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',
|
|
110
|
+
left: 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',
|
|
111
|
+
right: 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm',
|
|
112
|
+
},
|
|
113
|
+
zIndex: {
|
|
114
|
+
default: 'z-50',
|
|
115
|
+
high: 'z-[1100]',
|
|
116
|
+
pushed: 'z-[1150]', // Between high (1100) and nested overlay (1199)
|
|
117
|
+
nested: 'z-[1200]',
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
defaultVariants: {
|
|
121
|
+
side: 'right',
|
|
122
|
+
zIndex: 'default',
|
|
123
|
+
},
|
|
124
|
+
});
|
|
125
|
+
const SheetContent = React.forwardRef(({ side = 'right', zIndex = 'default', className, overlayClassName, hideCloseButton = false, sheetWidth, children, ...props }, ref) => {
|
|
126
|
+
// Read the parent context BEFORE potentially wrapping with SheetProvider
|
|
127
|
+
const parentContext = (0, exports.useSheetContext)();
|
|
128
|
+
// Track nested sheets for THIS sheet using local state
|
|
129
|
+
const [localNestedSheetCount, setLocalNestedSheetCount] = React.useState(0);
|
|
130
|
+
const [localNestedSheetWidth, setLocalNestedSheetWidth] = React.useState();
|
|
131
|
+
const closeTimeoutRef = React.useRef(null);
|
|
132
|
+
const registerLocalNestedSheet = React.useCallback((width) => {
|
|
133
|
+
// Clear any pending close timeout when opening a new nested sheet
|
|
134
|
+
if (closeTimeoutRef.current) {
|
|
135
|
+
clearTimeout(closeTimeoutRef.current);
|
|
136
|
+
closeTimeoutRef.current = null;
|
|
137
|
+
}
|
|
138
|
+
setLocalNestedSheetCount((count) => count + 1);
|
|
139
|
+
if (width) {
|
|
140
|
+
setLocalNestedSheetWidth(width);
|
|
141
|
+
}
|
|
142
|
+
}, []);
|
|
143
|
+
const unregisterLocalNestedSheet = React.useCallback(() => {
|
|
144
|
+
setLocalNestedSheetCount((count) => Math.max(0, count - 1));
|
|
145
|
+
setLocalNestedSheetWidth(undefined);
|
|
146
|
+
// Clear any existing timeout
|
|
147
|
+
if (closeTimeoutRef.current) {
|
|
148
|
+
clearTimeout(closeTimeoutRef.current);
|
|
149
|
+
closeTimeoutRef.current = null;
|
|
150
|
+
}
|
|
151
|
+
}, []);
|
|
152
|
+
// Cleanup timeout on unmount
|
|
153
|
+
React.useEffect(() => {
|
|
154
|
+
return () => {
|
|
155
|
+
if (closeTimeoutRef.current) {
|
|
156
|
+
clearTimeout(closeTimeoutRef.current);
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
}, []);
|
|
160
|
+
// This sheet should be pushed if IT has nested sheets open
|
|
161
|
+
const shouldBePushed = localNestedSheetCount > 0 && sheetWidth;
|
|
162
|
+
// Create a custom context value that uses THIS sheet's local nested sheet tracking
|
|
163
|
+
const customContextValue = React.useMemo(() => ({
|
|
164
|
+
level: parentContext.level + 1,
|
|
165
|
+
parentSheetWidth: sheetWidth,
|
|
166
|
+
registerNestedSheet: registerLocalNestedSheet,
|
|
167
|
+
unregisterNestedSheet: unregisterLocalNestedSheet,
|
|
168
|
+
hasNestedSheetOpen: localNestedSheetCount > 0,
|
|
169
|
+
nestedSheetWidth: localNestedSheetWidth,
|
|
170
|
+
}), [
|
|
171
|
+
parentContext.level,
|
|
172
|
+
sheetWidth,
|
|
173
|
+
registerLocalNestedSheet,
|
|
174
|
+
unregisterLocalNestedSheet,
|
|
175
|
+
localNestedSheetCount,
|
|
176
|
+
localNestedSheetWidth,
|
|
177
|
+
]);
|
|
178
|
+
// Wrap children with context provider if sheetWidth is provided
|
|
179
|
+
const wrappedChildren = sheetWidth ? ((0, jsx_runtime_1.jsx)(SheetContext.Provider, { value: customContextValue, children: children })) : (children);
|
|
180
|
+
// Determine z-index based on nesting level AND pushed state
|
|
181
|
+
// A sheet is nested if its parent level >= 1 (meaning it's inside another sheet)
|
|
182
|
+
let effectiveZIndex = parentContext.level >= 1 ? 'nested' : zIndex;
|
|
183
|
+
const isNestedSheet = parentContext.level >= 1;
|
|
184
|
+
// When pushed, keep the same z-index (it will be under nested sheet's overlay anyway)
|
|
185
|
+
// Don't change z-index when pushed - the nested overlay (z-1199) will be above this (z-1100)
|
|
186
|
+
// Calculate overlay z-index
|
|
187
|
+
const overlayZIndex = effectiveZIndex === 'nested'
|
|
188
|
+
? 1199
|
|
189
|
+
: effectiveZIndex === 'high'
|
|
190
|
+
? 1099
|
|
191
|
+
: 50;
|
|
192
|
+
// Animation timing classes
|
|
193
|
+
const animationClasses = 'data-[state=closed]:duration-300 data-[state=open]:duration-500';
|
|
194
|
+
// Calculate transform for pushed state
|
|
195
|
+
// Strategy: During close, parent slides back at same speed as nested slides out
|
|
196
|
+
// Both travel in the positive direction (to the right) so they stick together
|
|
197
|
+
const transformStyle = shouldBePushed && localNestedSheetWidth
|
|
198
|
+
? {
|
|
199
|
+
// Opening: animate to pushed position (move left)
|
|
200
|
+
transform: `translate3d(-${localNestedSheetWidth}, 0, 0)`,
|
|
201
|
+
transition: 'transform 500ms linear',
|
|
202
|
+
}
|
|
203
|
+
: {
|
|
204
|
+
// Closing: animate back to center (move right)
|
|
205
|
+
transform: 'translate3d(0, 0, 0)',
|
|
206
|
+
transition: 'transform 300ms linear',
|
|
207
|
+
};
|
|
208
|
+
const inlineStyle = {
|
|
209
|
+
...transformStyle,
|
|
210
|
+
// Force GPU acceleration for both sheets to ensure smooth, synchronized animations
|
|
211
|
+
willChange: 'transform',
|
|
212
|
+
// For nested sheets, override animation timing to linear
|
|
213
|
+
...(isNestedSheet && {
|
|
214
|
+
animationTimingFunction: 'linear',
|
|
215
|
+
}),
|
|
216
|
+
};
|
|
217
|
+
// Debug logging
|
|
218
|
+
// console.log('📊 Sheet render:', {
|
|
219
|
+
// level: parentContext.level,
|
|
220
|
+
// hasNestedSheetOpen: parentContext.hasNestedSheetOpen,
|
|
221
|
+
// parentSheetWidth: parentContext.parentSheetWidth,
|
|
222
|
+
// shouldBePushed,
|
|
223
|
+
// effectiveZIndex,
|
|
224
|
+
// overlayZIndex,
|
|
225
|
+
// sheetWidth,
|
|
226
|
+
// });
|
|
227
|
+
return ((0, jsx_runtime_1.jsxs)(SheetPortal, { children: [!shouldBePushed && !localNestedSheetWidth && ((0, jsx_runtime_1.jsx)(SheetOverlay, { className: overlayClassName, style: { zIndex: overlayZIndex } })), (0, jsx_runtime_1.jsxs)(SheetPrimitive.Content, { ref: ref, className: (0, utils_1.cn)(sheetVariants({ side, zIndex: effectiveZIndex }), animationClasses, shouldBePushed && 'pointer-events-none', className), style: inlineStyle, ...props, children: [wrappedChildren, !hideCloseButton && ((0, jsx_runtime_1.jsxs)(SheetPrimitive.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary", children: [(0, jsx_runtime_1.jsx)(lucide_react_1.X, { className: "h-4 w-4" }), (0, jsx_runtime_1.jsx)("span", { className: "sr-only", children: "Close" })] }))] })] }));
|
|
228
|
+
});
|
|
229
|
+
exports.SheetContent = SheetContent;
|
|
230
|
+
SheetContent.displayName = SheetPrimitive.Content.displayName;
|
|
231
|
+
const SheetHeader = ({ className, ...props }) => ((0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.cn)('flex flex-shrink-0 flex-col space-y-2 px-fds-xl py-fds-xl', className), ...props }));
|
|
232
|
+
exports.SheetHeader = SheetHeader;
|
|
233
|
+
SheetHeader.displayName = 'SheetHeader';
|
|
234
|
+
const SheetBody = ({ className, ...props }) => ((0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.cn)('flex-1 overflow-y-auto px-fds-xl', className), ...props }));
|
|
235
|
+
exports.SheetBody = SheetBody;
|
|
236
|
+
SheetBody.displayName = 'SheetBody';
|
|
237
|
+
const SheetFooter = ({ className, ...props }) => ((0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.cn)('flex-shrink-0 border-t border-fds-gray-20 px-fds-xl py-fds-xl', className), ...props }));
|
|
238
|
+
exports.SheetFooter = SheetFooter;
|
|
239
|
+
SheetFooter.displayName = 'SheetFooter';
|
|
240
|
+
const SheetTitle = React.forwardRef(({ className, ...props }, ref) => ((0, jsx_runtime_1.jsx)(SheetPrimitive.Title, { ref: ref, className: (0, utils_1.cn)('text-fds-h3 font-fds-bold', className), ...props })));
|
|
241
|
+
exports.SheetTitle = SheetTitle;
|
|
242
|
+
SheetTitle.displayName = SheetPrimitive.Title.displayName;
|
|
243
|
+
const SheetDescription = React.forwardRef(({ className, ...props }, ref) => ((0, jsx_runtime_1.jsx)(SheetPrimitive.Description, { ref: ref, className: (0, utils_1.cn)('text-sm text-muted-foreground', className), ...props })));
|
|
244
|
+
exports.SheetDescription = SheetDescription;
|
|
245
|
+
SheetDescription.displayName = SheetPrimitive.Description.displayName;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Skeleton = Skeleton;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const utils_1 = require("../lib/utils");
|
|
6
|
+
function Skeleton({ className, ...props }) {
|
|
7
|
+
return ((0, jsx_runtime_1.jsx)("div", { className: (0, utils_1.cn)("animate-pulse rounded-md bg-muted", className), ...props }));
|
|
8
|
+
}
|