@actuate-media/cms-admin 0.1.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/AdminRoot.d.ts +21 -0
- package/dist/AdminRoot.d.ts.map +1 -0
- package/dist/AdminRoot.js +136 -0
- package/dist/AdminRoot.js.map +1 -0
- package/dist/components/Breadcrumbs.d.ts +6 -0
- package/dist/components/Breadcrumbs.d.ts.map +1 -0
- package/dist/components/Breadcrumbs.js +52 -0
- package/dist/components/Breadcrumbs.js.map +1 -0
- package/dist/components/CommandPalette.d.ts +7 -0
- package/dist/components/CommandPalette.d.ts.map +1 -0
- package/dist/components/CommandPalette.js +152 -0
- package/dist/components/CommandPalette.js.map +1 -0
- package/dist/components/ErrorBoundary.d.ts +17 -0
- package/dist/components/ErrorBoundary.d.ts.map +1 -0
- package/dist/components/ErrorBoundary.js +24 -0
- package/dist/components/ErrorBoundary.js.map +1 -0
- package/dist/components/FocalPointPicker.d.ts +9 -0
- package/dist/components/FocalPointPicker.d.ts.map +1 -0
- package/dist/components/FocalPointPicker.js +19 -0
- package/dist/components/FocalPointPicker.js.map +1 -0
- package/dist/components/FolderTree.d.ts +28 -0
- package/dist/components/FolderTree.d.ts.map +1 -0
- package/dist/components/FolderTree.js +198 -0
- package/dist/components/FolderTree.js.map +1 -0
- package/dist/components/LivePreview.d.ts +10 -0
- package/dist/components/LivePreview.d.ts.map +1 -0
- package/dist/components/LivePreview.js +62 -0
- package/dist/components/LivePreview.js.map +1 -0
- package/dist/components/LocaleProvider.d.ts +28 -0
- package/dist/components/LocaleProvider.d.ts.map +1 -0
- package/dist/components/LocaleProvider.js +29 -0
- package/dist/components/LocaleProvider.js.map +1 -0
- package/dist/components/LocaleSwitcher.d.ts +2 -0
- package/dist/components/LocaleSwitcher.d.ts.map +1 -0
- package/dist/components/LocaleSwitcher.js +13 -0
- package/dist/components/LocaleSwitcher.js.map +1 -0
- package/dist/components/MediaPickerModal.d.ts +8 -0
- package/dist/components/MediaPickerModal.d.ts.map +1 -0
- package/dist/components/MediaPickerModal.js +53 -0
- package/dist/components/MediaPickerModal.js.map +1 -0
- package/dist/components/PresenceIndicator.d.ts +7 -0
- package/dist/components/PresenceIndicator.d.ts.map +1 -0
- package/dist/components/PresenceIndicator.js +37 -0
- package/dist/components/PresenceIndicator.js.map +1 -0
- package/dist/components/SEOPanel.d.ts +26 -0
- package/dist/components/SEOPanel.d.ts.map +1 -0
- package/dist/components/SEOPanel.js +249 -0
- package/dist/components/SEOPanel.js.map +1 -0
- package/dist/components/ThemeProvider.d.ts +13 -0
- package/dist/components/ThemeProvider.d.ts.map +1 -0
- package/dist/components/ThemeProvider.js +62 -0
- package/dist/components/ThemeProvider.js.map +1 -0
- package/dist/components/TipTapEditor.d.ts +9 -0
- package/dist/components/TipTapEditor.d.ts.map +1 -0
- package/dist/components/TipTapEditor.js +167 -0
- package/dist/components/TipTapEditor.js.map +1 -0
- package/dist/components/VersionHistory.d.ts +9 -0
- package/dist/components/VersionHistory.d.ts.map +1 -0
- package/dist/components/VersionHistory.js +70 -0
- package/dist/components/VersionHistory.js.map +1 -0
- package/dist/components/ui/Avatar.d.ts +9 -0
- package/dist/components/ui/Avatar.d.ts.map +1 -0
- package/dist/components/ui/Avatar.js +21 -0
- package/dist/components/ui/Avatar.js.map +1 -0
- package/dist/components/ui/Badge.d.ts +5 -0
- package/dist/components/ui/Badge.d.ts.map +1 -0
- package/dist/components/ui/Badge.js +17 -0
- package/dist/components/ui/Badge.js.map +1 -0
- package/dist/components/ui/Button.d.ts +12 -0
- package/dist/components/ui/Button.d.ts.map +1 -0
- package/dist/components/ui/Button.js +17 -0
- package/dist/components/ui/Button.js.map +1 -0
- package/dist/components/ui/CommandPalette.d.ts +14 -0
- package/dist/components/ui/CommandPalette.d.ts.map +1 -0
- package/dist/components/ui/CommandPalette.js +52 -0
- package/dist/components/ui/CommandPalette.js.map +1 -0
- package/dist/components/ui/ConfirmDialog.d.ts +12 -0
- package/dist/components/ui/ConfirmDialog.d.ts.map +1 -0
- package/dist/components/ui/ConfirmDialog.js +11 -0
- package/dist/components/ui/ConfirmDialog.js.map +1 -0
- package/dist/components/ui/DataTable.d.ts +30 -0
- package/dist/components/ui/DataTable.d.ts.map +1 -0
- package/dist/components/ui/DataTable.js +40 -0
- package/dist/components/ui/DataTable.js.map +1 -0
- package/dist/components/ui/EmptyState.d.ts +10 -0
- package/dist/components/ui/EmptyState.d.ts.map +1 -0
- package/dist/components/ui/EmptyState.js +6 -0
- package/dist/components/ui/EmptyState.js.map +1 -0
- package/dist/components/ui/Modal.d.ts +10 -0
- package/dist/components/ui/Modal.d.ts.map +1 -0
- package/dist/components/ui/Modal.js +19 -0
- package/dist/components/ui/Modal.js.map +1 -0
- package/dist/components/ui/Pagination.d.ts +9 -0
- package/dist/components/ui/Pagination.d.ts.map +1 -0
- package/dist/components/ui/Pagination.js +21 -0
- package/dist/components/ui/Pagination.js.map +1 -0
- package/dist/components/ui/SearchInput.d.ts +7 -0
- package/dist/components/ui/SearchInput.d.ts.map +1 -0
- package/dist/components/ui/SearchInput.js +6 -0
- package/dist/components/ui/SearchInput.js.map +1 -0
- package/dist/components/ui/Skeleton.d.ts +9 -0
- package/dist/components/ui/Skeleton.d.ts.map +1 -0
- package/dist/components/ui/Skeleton.js +11 -0
- package/dist/components/ui/Skeleton.js.map +1 -0
- package/dist/components/ui/Toast.d.ts +18 -0
- package/dist/components/ui/Toast.d.ts.map +1 -0
- package/dist/components/ui/Toast.js +29 -0
- package/dist/components/ui/Toast.js.map +1 -0
- package/dist/components/ui/index.d.ts +25 -0
- package/dist/components/ui/index.d.ts.map +1 -0
- package/dist/components/ui/index.js +13 -0
- package/dist/components/ui/index.js.map +1 -0
- package/dist/fields/ArrayField.d.ts +9 -0
- package/dist/fields/ArrayField.d.ts.map +1 -0
- package/dist/fields/ArrayField.js +21 -0
- package/dist/fields/ArrayField.js.map +1 -0
- package/dist/fields/BlockBuilderField.d.ts +16 -0
- package/dist/fields/BlockBuilderField.d.ts.map +1 -0
- package/dist/fields/BlockBuilderField.js +110 -0
- package/dist/fields/BlockBuilderField.js.map +1 -0
- package/dist/fields/DateField.d.ts +9 -0
- package/dist/fields/DateField.d.ts.map +1 -0
- package/dist/fields/DateField.js +6 -0
- package/dist/fields/DateField.js.map +1 -0
- package/dist/fields/FieldRenderer.d.ts +22 -0
- package/dist/fields/FieldRenderer.d.ts.map +1 -0
- package/dist/fields/FieldRenderer.js +38 -0
- package/dist/fields/FieldRenderer.js.map +1 -0
- package/dist/fields/GroupField.d.ts +8 -0
- package/dist/fields/GroupField.d.ts.map +1 -0
- package/dist/fields/GroupField.js +8 -0
- package/dist/fields/GroupField.js.map +1 -0
- package/dist/fields/MediaField.d.ts +13 -0
- package/dist/fields/MediaField.d.ts.map +1 -0
- package/dist/fields/MediaField.js +6 -0
- package/dist/fields/MediaField.js.map +1 -0
- package/dist/fields/NavBuilderField.d.ts +15 -0
- package/dist/fields/NavBuilderField.d.ts.map +1 -0
- package/dist/fields/NavBuilderField.js +19 -0
- package/dist/fields/NavBuilderField.js.map +1 -0
- package/dist/fields/NumberField.d.ts +12 -0
- package/dist/fields/NumberField.d.ts.map +1 -0
- package/dist/fields/NumberField.js +6 -0
- package/dist/fields/NumberField.js.map +1 -0
- package/dist/fields/RelationshipField.d.ts +13 -0
- package/dist/fields/RelationshipField.d.ts.map +1 -0
- package/dist/fields/RelationshipField.js +119 -0
- package/dist/fields/RelationshipField.js.map +1 -0
- package/dist/fields/RichTextField.d.ts +9 -0
- package/dist/fields/RichTextField.d.ts.map +1 -0
- package/dist/fields/RichTextField.js +7 -0
- package/dist/fields/RichTextField.js.map +1 -0
- package/dist/fields/SelectField.d.ts +11 -0
- package/dist/fields/SelectField.d.ts.map +1 -0
- package/dist/fields/SelectField.js +31 -0
- package/dist/fields/SelectField.js.map +1 -0
- package/dist/fields/SlugField.d.ts +10 -0
- package/dist/fields/SlugField.d.ts.map +1 -0
- package/dist/fields/SlugField.js +15 -0
- package/dist/fields/SlugField.js.map +1 -0
- package/dist/fields/TextField.d.ts +11 -0
- package/dist/fields/TextField.d.ts.map +1 -0
- package/dist/fields/TextField.js +8 -0
- package/dist/fields/TextField.js.map +1 -0
- package/dist/fields/ToggleField.d.ts +8 -0
- package/dist/fields/ToggleField.d.ts.map +1 -0
- package/dist/fields/ToggleField.js +6 -0
- package/dist/fields/ToggleField.js.map +1 -0
- package/dist/fields/block-types.d.ts +18 -0
- package/dist/fields/block-types.d.ts.map +1 -0
- package/dist/fields/block-types.js +88 -0
- package/dist/fields/block-types.js.map +1 -0
- package/dist/fields/index.d.ts +18 -0
- package/dist/fields/index.d.ts.map +1 -0
- package/dist/fields/index.js +16 -0
- package/dist/fields/index.js.map +1 -0
- package/dist/hooks/useContentLock.d.ts +12 -0
- package/dist/hooks/useContentLock.d.ts.map +1 -0
- package/dist/hooks/useContentLock.js +38 -0
- package/dist/hooks/useContentLock.js.map +1 -0
- package/dist/hooks/useDebounce.d.ts +2 -0
- package/dist/hooks/useDebounce.d.ts.map +1 -0
- package/dist/hooks/useDebounce.js +11 -0
- package/dist/hooks/useDebounce.js.map +1 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts +6 -0
- package/dist/hooks/useKeyboardShortcuts.d.ts.map +1 -0
- package/dist/hooks/useKeyboardShortcuts.js +26 -0
- package/dist/hooks/useKeyboardShortcuts.js.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/layout/Header.d.ts +7 -0
- package/dist/layout/Header.d.ts.map +1 -0
- package/dist/layout/Header.js +18 -0
- package/dist/layout/Header.js.map +1 -0
- package/dist/layout/Layout.d.ts +10 -0
- package/dist/layout/Layout.d.ts.map +1 -0
- package/dist/layout/Layout.js +25 -0
- package/dist/layout/Layout.js.map +1 -0
- package/dist/layout/Sidebar.d.ts +9 -0
- package/dist/layout/Sidebar.d.ts.map +1 -0
- package/dist/layout/Sidebar.js +63 -0
- package/dist/layout/Sidebar.js.map +1 -0
- package/dist/lib/api.d.ts +8 -0
- package/dist/lib/api.d.ts.map +1 -0
- package/dist/lib/api.js +59 -0
- package/dist/lib/api.js.map +1 -0
- package/dist/lib/search.d.ts +11 -0
- package/dist/lib/search.d.ts.map +1 -0
- package/dist/lib/search.js +46 -0
- package/dist/lib/search.js.map +1 -0
- package/dist/lib/useApiData.d.ts +8 -0
- package/dist/lib/useApiData.d.ts.map +1 -0
- package/dist/lib/useApiData.js +36 -0
- package/dist/lib/useApiData.js.map +1 -0
- package/dist/lib/utils.d.ts +3 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +6 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/router/index.d.ts +10 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/router/index.js +61 -0
- package/dist/router/index.js.map +1 -0
- package/dist/views/CollectionList.d.ts +7 -0
- package/dist/views/CollectionList.d.ts.map +1 -0
- package/dist/views/CollectionList.js +107 -0
- package/dist/views/CollectionList.js.map +1 -0
- package/dist/views/Dashboard.d.ts +5 -0
- package/dist/views/Dashboard.d.ts.map +1 -0
- package/dist/views/Dashboard.js +17 -0
- package/dist/views/Dashboard.js.map +1 -0
- package/dist/views/DocumentEdit.d.ts +8 -0
- package/dist/views/DocumentEdit.d.ts.map +1 -0
- package/dist/views/DocumentEdit.js +210 -0
- package/dist/views/DocumentEdit.js.map +1 -0
- package/dist/views/FormEditor.d.ts +6 -0
- package/dist/views/FormEditor.d.ts.map +1 -0
- package/dist/views/FormEditor.js +126 -0
- package/dist/views/FormEditor.js.map +1 -0
- package/dist/views/FormSubmissions.d.ts +6 -0
- package/dist/views/FormSubmissions.d.ts.map +1 -0
- package/dist/views/FormSubmissions.js +88 -0
- package/dist/views/FormSubmissions.js.map +1 -0
- package/dist/views/Forms.d.ts +5 -0
- package/dist/views/Forms.d.ts.map +1 -0
- package/dist/views/Forms.js +24 -0
- package/dist/views/Forms.js.map +1 -0
- package/dist/views/Login.d.ts +10 -0
- package/dist/views/Login.d.ts.map +1 -0
- package/dist/views/Login.js +83 -0
- package/dist/views/Login.js.map +1 -0
- package/dist/views/MediaBrowser.d.ts +5 -0
- package/dist/views/MediaBrowser.d.ts.map +1 -0
- package/dist/views/MediaBrowser.js +245 -0
- package/dist/views/MediaBrowser.js.map +1 -0
- package/dist/views/PageEditor.d.ts +6 -0
- package/dist/views/PageEditor.d.ts.map +1 -0
- package/dist/views/PageEditor.js +74 -0
- package/dist/views/PageEditor.js.map +1 -0
- package/dist/views/Pages.d.ts +5 -0
- package/dist/views/Pages.d.ts.map +1 -0
- package/dist/views/Pages.js +127 -0
- package/dist/views/Pages.js.map +1 -0
- package/dist/views/PostEditor.d.ts +6 -0
- package/dist/views/PostEditor.d.ts.map +1 -0
- package/dist/views/PostEditor.js +79 -0
- package/dist/views/PostEditor.js.map +1 -0
- package/dist/views/Posts.d.ts +5 -0
- package/dist/views/Posts.d.ts.map +1 -0
- package/dist/views/Posts.js +67 -0
- package/dist/views/Posts.js.map +1 -0
- package/dist/views/Redirects.d.ts +5 -0
- package/dist/views/Redirects.d.ts.map +1 -0
- package/dist/views/Redirects.js +79 -0
- package/dist/views/Redirects.js.map +1 -0
- package/dist/views/SEO.d.ts +6 -0
- package/dist/views/SEO.d.ts.map +1 -0
- package/dist/views/SEO.js +120 -0
- package/dist/views/SEO.js.map +1 -0
- package/dist/views/Settings.d.ts +5 -0
- package/dist/views/Settings.d.ts.map +1 -0
- package/dist/views/Settings.js +95 -0
- package/dist/views/Settings.js.map +1 -0
- package/dist/views/SetupWizard.d.ts +13 -0
- package/dist/views/SetupWizard.d.ts.map +1 -0
- package/dist/views/SetupWizard.js +68 -0
- package/dist/views/SetupWizard.js.map +1 -0
- package/dist/views/Users.d.ts +5 -0
- package/dist/views/Users.d.ts.map +1 -0
- package/dist/views/Users.js +69 -0
- package/dist/views/Users.js.map +1 -0
- package/package.json +71 -0
- package/src/styles/tailwind.css +2 -0
- package/src/styles/theme.css +175 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
export function Skeleton({ variant = 'text', lines = 3, className = '' }) {
|
|
3
|
+
if (variant === 'card') {
|
|
4
|
+
return (_jsxs("div", { className: `animate-pulse rounded-lg border border-[var(--border)] p-5 ${className}`, children: [_jsx("div", { className: "mb-3 h-4 w-1/3 rounded bg-[var(--muted)]" }), _jsxs("div", { className: "space-y-2", children: [_jsx("div", { className: "h-3 w-full rounded bg-[var(--muted)]" }), _jsx("div", { className: "h-3 w-2/3 rounded bg-[var(--muted)]" })] })] }));
|
|
5
|
+
}
|
|
6
|
+
if (variant === 'table-row') {
|
|
7
|
+
return (_jsx("div", { className: `animate-pulse ${className}`, children: Array.from({ length: lines }, (_, i) => (_jsxs("div", { className: "flex gap-4 border-b border-[var(--border)] px-4 py-3", children: [_jsx("div", { className: "h-4 w-8 rounded bg-[var(--muted)]" }), _jsx("div", { className: "h-4 flex-1 rounded bg-[var(--muted)]" }), _jsx("div", { className: "h-4 w-20 rounded bg-[var(--muted)]" }), _jsx("div", { className: "h-4 w-24 rounded bg-[var(--muted)]" })] }, i))) }));
|
|
8
|
+
}
|
|
9
|
+
return (_jsx("div", { className: `animate-pulse space-y-2 ${className}`, children: Array.from({ length: lines }, (_, i) => (_jsx("div", { className: "h-3 rounded bg-[var(--muted)]", style: { width: `${Math.max(40, 100 - i * 15)}%` } }, i))) }));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=Skeleton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Skeleton.js","sourceRoot":"","sources":["../../../src/components/ui/Skeleton.tsx"],"names":[],"mappings":";AAQA,MAAM,UAAU,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,SAAS,GAAG,EAAE,EAAiB;IACrF,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;QACvB,OAAO,CACL,eAAK,SAAS,EAAE,8DAA8D,SAAS,EAAE,aACvF,cAAK,SAAS,EAAC,0CAA0C,GAAG,EAC5D,eAAK,SAAS,EAAC,WAAW,aACxB,cAAK,SAAS,EAAC,sCAAsC,GAAG,EACxD,cAAK,SAAS,EAAC,qCAAqC,GAAG,IACnD,IACF,CACP,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC5B,OAAO,CACL,cAAK,SAAS,EAAE,iBAAiB,SAAS,EAAE,YACzC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACvC,eAAa,SAAS,EAAC,sDAAsD,aAC3E,cAAK,SAAS,EAAC,mCAAmC,GAAG,EACrD,cAAK,SAAS,EAAC,sCAAsC,GAAG,EACxD,cAAK,SAAS,EAAC,oCAAoC,GAAG,EACtD,cAAK,SAAS,EAAC,oCAAoC,GAAG,KAJ9C,CAAC,CAKL,CACP,CAAC,GACE,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,cAAK,SAAS,EAAE,2BAA2B,SAAS,EAAE,YACnD,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CACvC,cAEE,SAAS,EAAC,+BAA+B,EACzC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,IAF7C,CAAC,CAGN,CACH,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
type ToastType = 'success' | 'error' | 'warning' | 'info';
|
|
2
|
+
interface Toast {
|
|
3
|
+
id: string;
|
|
4
|
+
type: ToastType;
|
|
5
|
+
message: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function useToast(): {
|
|
8
|
+
toasts: Toast[];
|
|
9
|
+
addToast: (type: ToastType, message: string) => void;
|
|
10
|
+
dismissToast: (id: string) => void;
|
|
11
|
+
};
|
|
12
|
+
export interface ToastContainerProps {
|
|
13
|
+
toasts: Toast[];
|
|
14
|
+
onDismiss: (id: string) => void;
|
|
15
|
+
}
|
|
16
|
+
export declare function ToastContainer({ toasts, onDismiss }: ToastContainerProps): import("react/jsx-runtime").JSX.Element | null;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=Toast.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toast.d.ts","sourceRoot":"","sources":["../../../src/components/ui/Toast.tsx"],"names":[],"mappings":"AAIA,KAAK,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAE1D,UAAU,KAAK;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACjB;AASD,wBAAgB,QAAQ;;qBAGc,SAAS,WAAW,MAAM;uBAQxB,MAAM;EAK7C;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,wBAAgB,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,mBAAmB,kDAuBxE"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useCallback } from 'react';
|
|
4
|
+
const typeClasses = {
|
|
5
|
+
success: 'border-emerald-500 bg-emerald-50 text-emerald-900 dark:bg-emerald-900/20 dark:text-emerald-300',
|
|
6
|
+
error: 'border-red-500 bg-red-50 text-red-900 dark:bg-red-900/20 dark:text-red-300',
|
|
7
|
+
warning: 'border-amber-500 bg-amber-50 text-amber-900 dark:bg-amber-900/20 dark:text-amber-300',
|
|
8
|
+
info: 'border-blue-500 bg-blue-50 text-blue-900 dark:bg-blue-900/20 dark:text-blue-300',
|
|
9
|
+
};
|
|
10
|
+
export function useToast() {
|
|
11
|
+
const [toasts, setToasts] = useState([]);
|
|
12
|
+
const addToast = useCallback((type, message) => {
|
|
13
|
+
const id = crypto.randomUUID();
|
|
14
|
+
setToasts((prev) => [...prev, { id, type, message }]);
|
|
15
|
+
setTimeout(() => {
|
|
16
|
+
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
17
|
+
}, 5000);
|
|
18
|
+
}, []);
|
|
19
|
+
const dismissToast = useCallback((id) => {
|
|
20
|
+
setToasts((prev) => prev.filter((t) => t.id !== id));
|
|
21
|
+
}, []);
|
|
22
|
+
return { toasts, addToast, dismissToast };
|
|
23
|
+
}
|
|
24
|
+
export function ToastContainer({ toasts, onDismiss }) {
|
|
25
|
+
if (toasts.length === 0)
|
|
26
|
+
return null;
|
|
27
|
+
return (_jsx("div", { className: "fixed bottom-4 right-4 z-[100] flex flex-col gap-2", children: toasts.map((toast) => (_jsxs("div", { className: `flex items-center gap-3 rounded-md border-l-4 px-4 py-3 shadow-lg ${typeClasses[toast.type]}`, children: [_jsx("p", { className: "flex-1 text-sm", children: toast.message }), _jsx("button", { onClick: () => onDismiss(toast.id), className: "shrink-0 opacity-60 hover:opacity-100", children: _jsx("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6 18L18 6M6 6l12 12" }) }) })] }, toast.id))) }));
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=Toast.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Toast.js","sourceRoot":"","sources":["../../../src/components/ui/Toast.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAU9C,MAAM,WAAW,GAA8B;IAC7C,OAAO,EAAE,gGAAgG;IACzG,KAAK,EAAE,4EAA4E;IACnF,OAAO,EAAE,sFAAsF;IAC/F,IAAI,EAAE,iFAAiF;CACxF,CAAC;AAEF,MAAM,UAAU,QAAQ;IACtB,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAU,EAAE,CAAC,CAAC;IAElD,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,IAAe,EAAE,OAAe,EAAE,EAAE;QAChE,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/B,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;QACtD,UAAU,CAAC,GAAG,EAAE;YACd,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACvD,CAAC,EAAE,IAAI,CAAC,CAAC;IACX,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,EAAU,EAAE,EAAE;QAC9C,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACvD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC;AAC5C,CAAC;AAOD,MAAM,UAAU,cAAc,CAAC,EAAE,MAAM,EAAE,SAAS,EAAuB;IACvE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,OAAO,CACL,cAAK,SAAS,EAAC,oDAAoD,YAChE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CACrB,eAEE,SAAS,EAAE,qEAAqE,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,aAEzG,YAAG,SAAS,EAAC,gBAAgB,YAAE,KAAK,CAAC,OAAO,GAAK,EACjD,iBACE,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAClC,SAAS,EAAC,uCAAuC,YAEjD,cAAK,SAAS,EAAC,SAAS,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAE,CAAC,YAC3F,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,CAAC,EAAC,sBAAsB,GAAG,GAC1E,GACC,KAXJ,KAAK,CAAC,EAAE,CAYT,CACP,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export { Button } from './Button';
|
|
2
|
+
export type { ButtonProps } from './Button';
|
|
3
|
+
export { Badge } from './Badge';
|
|
4
|
+
export type { BadgeProps } from './Badge';
|
|
5
|
+
export { Avatar } from './Avatar';
|
|
6
|
+
export type { AvatarProps } from './Avatar';
|
|
7
|
+
export { EmptyState } from './EmptyState';
|
|
8
|
+
export type { EmptyStateProps } from './EmptyState';
|
|
9
|
+
export { Skeleton } from './Skeleton';
|
|
10
|
+
export type { SkeletonProps } from './Skeleton';
|
|
11
|
+
export { useToast, ToastContainer } from './Toast';
|
|
12
|
+
export type { ToastContainerProps } from './Toast';
|
|
13
|
+
export { Modal } from './Modal';
|
|
14
|
+
export type { ModalProps } from './Modal';
|
|
15
|
+
export { ConfirmDialog } from './ConfirmDialog';
|
|
16
|
+
export type { ConfirmDialogProps } from './ConfirmDialog';
|
|
17
|
+
export { DataTable } from './DataTable';
|
|
18
|
+
export type { DataTableProps } from './DataTable';
|
|
19
|
+
export { Pagination } from './Pagination';
|
|
20
|
+
export type { PaginationProps } from './Pagination';
|
|
21
|
+
export { SearchInput } from './SearchInput';
|
|
22
|
+
export type { SearchInputProps } from './SearchInput';
|
|
23
|
+
export { CommandPalette } from './CommandPalette';
|
|
24
|
+
export type { CommandPaletteProps } from './CommandPalette';
|
|
25
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { Button } from './Button';
|
|
2
|
+
export { Badge } from './Badge';
|
|
3
|
+
export { Avatar } from './Avatar';
|
|
4
|
+
export { EmptyState } from './EmptyState';
|
|
5
|
+
export { Skeleton } from './Skeleton';
|
|
6
|
+
export { useToast, ToastContainer } from './Toast';
|
|
7
|
+
export { Modal } from './Modal';
|
|
8
|
+
export { ConfirmDialog } from './ConfirmDialog';
|
|
9
|
+
export { DataTable } from './DataTable';
|
|
10
|
+
export { Pagination } from './Pagination';
|
|
11
|
+
export { SearchInput } from './SearchInput';
|
|
12
|
+
export { CommandPalette } from './CommandPalette';
|
|
13
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface ArrayFieldProps {
|
|
2
|
+
label: string;
|
|
3
|
+
value?: any[];
|
|
4
|
+
onChange: (value: any[]) => void;
|
|
5
|
+
fields?: any[];
|
|
6
|
+
helpText?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function ArrayField({ label, value, onChange, helpText }: ArrayFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=ArrayField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArrayField.d.ts","sourceRoot":"","sources":["../../src/fields/ArrayField.tsx"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IACd,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,IAAI,CAAC;IACjC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,KAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,eAAe,2CA+EpF"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button } from '../components/ui/Button';
|
|
4
|
+
export function ArrayField({ label, value = [], onChange, helpText }) {
|
|
5
|
+
function addItem() {
|
|
6
|
+
onChange([...value, { id: crypto.randomUUID(), data: {} }]);
|
|
7
|
+
}
|
|
8
|
+
function removeItem(index) {
|
|
9
|
+
onChange(value.filter((_, i) => i !== index));
|
|
10
|
+
}
|
|
11
|
+
function moveItem(from, to) {
|
|
12
|
+
if (to < 0 || to >= value.length)
|
|
13
|
+
return;
|
|
14
|
+
const next = [...value];
|
|
15
|
+
const [moved] = next.splice(from, 1);
|
|
16
|
+
next.splice(to, 0, moved);
|
|
17
|
+
onChange(next);
|
|
18
|
+
}
|
|
19
|
+
return (_jsxs("div", { children: [_jsx("label", { className: "mb-2 block text-sm font-medium", children: label }), _jsx("div", { className: "space-y-2", children: value.map((item, index) => (_jsxs("div", { className: "flex items-center gap-2 rounded-md border border-[var(--border)] bg-[var(--card)] p-3", children: [_jsxs("div", { className: "flex flex-col gap-0.5", children: [_jsx("button", { type: "button", onClick: () => moveItem(index, index - 1), disabled: index === 0, className: "text-[var(--muted-foreground)] hover:text-[var(--foreground)] disabled:opacity-30", "aria-label": "Move up", children: _jsx("svg", { className: "h-3 w-3", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 3, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M5 15l7-7 7 7" }) }) }), _jsx("button", { type: "button", onClick: () => moveItem(index, index + 1), disabled: index === value.length - 1, className: "text-[var(--muted-foreground)] hover:text-[var(--foreground)] disabled:opacity-30", "aria-label": "Move down", children: _jsx("svg", { className: "h-3 w-3", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 3, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) }) })] }), _jsxs("div", { className: "flex-1 text-sm text-[var(--muted-foreground)]", children: ["Item ", index + 1] }), _jsx("button", { type: "button", onClick: () => removeItem(index), className: "rounded p-1 text-[var(--muted-foreground)] hover:bg-[var(--accent)] hover:text-[var(--destructive)]", "aria-label": "Remove item", children: _jsx("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" }) }) })] }, item.id ?? index))) }), _jsx(Button, { variant: "secondary", size: "sm", onClick: addItem, className: "mt-2", children: "Add Item" }), helpText && (_jsx("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: helpText }))] }));
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=ArrayField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArrayField.js","sourceRoot":"","sources":["../../src/fields/ArrayField.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type BlockTypeDefinition } from './block-types.js';
|
|
2
|
+
interface BlockValue {
|
|
3
|
+
id: string;
|
|
4
|
+
type: string;
|
|
5
|
+
data: Record<string, unknown>;
|
|
6
|
+
}
|
|
7
|
+
export interface BlockBuilderFieldProps {
|
|
8
|
+
label?: string;
|
|
9
|
+
value?: BlockValue[];
|
|
10
|
+
onChange?: (value: BlockValue[]) => void;
|
|
11
|
+
blocks?: BlockTypeDefinition[];
|
|
12
|
+
helpText?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare function BlockBuilderField({ label, value, onChange, blocks: customBlocks, helpText, }: BlockBuilderFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=BlockBuilderField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlockBuilderField.d.ts","sourceRoot":"","sources":["../../src/fields/BlockBuilderField.tsx"],"names":[],"mappings":"AAkCA,OAAO,EAAiB,KAAK,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAW3E,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,sBAAsB;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;IACzC,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAyLD,wBAAgB,iBAAiB,CAAC,EAChC,KAAK,EACL,KAAU,EACV,QAAQ,EACR,MAAM,EAAE,YAAY,EACpB,QAAQ,GACT,EAAE,sBAAsB,2CA4KxB"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState, useCallback, useMemo } from 'react';
|
|
4
|
+
import { DndContext, closestCenter, KeyboardSensor, PointerSensor, useSensor, useSensors, } from '@dnd-kit/core';
|
|
5
|
+
import { SortableContext, sortableKeyboardCoordinates, verticalListSortingStrategy, useSortable, arrayMove, } from '@dnd-kit/sortable';
|
|
6
|
+
import { CSS } from '@dnd-kit/utilities';
|
|
7
|
+
import { Plus, GripVertical, Trash2, ChevronDown, ChevronRight, Layout, Megaphone, Columns3, Image, Quote, Play, X, } from 'lucide-react';
|
|
8
|
+
import { PRESET_BLOCKS } from './block-types.js';
|
|
9
|
+
const BLOCK_ICONS = {
|
|
10
|
+
layout: Layout,
|
|
11
|
+
megaphone: Megaphone,
|
|
12
|
+
columns: Columns3,
|
|
13
|
+
image: Image,
|
|
14
|
+
quote: Quote,
|
|
15
|
+
play: Play,
|
|
16
|
+
};
|
|
17
|
+
function BlockField({ field, value, onChange }) {
|
|
18
|
+
if (field.type === 'select' && field.options) {
|
|
19
|
+
return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [field.label, field.required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), _jsxs("select", { value: value ?? '', onChange: (e) => onChange(e.target.value), className: "w-full rounded-md border border-[var(--border)] bg-[var(--input-background)] px-3 py-2 text-sm outline-none transition-colors focus:ring-2 focus:ring-[var(--ring)]", children: [_jsx("option", { value: "", children: "Select..." }), field.options.map((opt) => (_jsx("option", { value: opt.value, children: opt.label }, opt.value)))] })] }));
|
|
20
|
+
}
|
|
21
|
+
if (field.type === 'richText') {
|
|
22
|
+
return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [field.label, field.required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), _jsx("textarea", { value: value ?? '', onChange: (e) => onChange(e.target.value), rows: 4, className: "w-full rounded-md border border-[var(--border)] bg-[var(--input-background)] px-3 py-2 text-sm outline-none transition-colors focus:ring-2 focus:ring-[var(--ring)]" })] }));
|
|
23
|
+
}
|
|
24
|
+
if (field.type === 'media') {
|
|
25
|
+
return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [field.label, field.required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), _jsxs("div", { className: "flex items-center gap-3 rounded-md border border-dashed border-[var(--border)] p-3", children: [_jsx("div", { className: "flex h-12 w-12 shrink-0 items-center justify-center rounded-md bg-[var(--muted)]", children: _jsx(Image, { className: "h-5 w-5 text-[var(--muted-foreground)]" }) }), _jsx("span", { className: "text-sm text-[var(--muted-foreground)]", children: value ? 'Media selected' : 'No media selected' })] })] }));
|
|
26
|
+
}
|
|
27
|
+
return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [field.label, field.required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), _jsx("input", { type: "text", value: value ?? '', onChange: (e) => onChange(e.target.value), required: field.required, className: "w-full rounded-md border border-[var(--border)] bg-[var(--input-background)] px-3 py-2 text-sm outline-none transition-colors focus:ring-2 focus:ring-[var(--ring)]" })] }));
|
|
28
|
+
}
|
|
29
|
+
function SortableBlock({ block, blockDef, expanded, onToggle, onRemove, onFieldChange, }) {
|
|
30
|
+
const { attributes, listeners, setNodeRef, transform, transition, isDragging, } = useSortable({ id: block.id });
|
|
31
|
+
const style = {
|
|
32
|
+
transform: CSS.Transform.toString(transform),
|
|
33
|
+
transition,
|
|
34
|
+
opacity: isDragging ? 0.5 : 1,
|
|
35
|
+
zIndex: isDragging ? 10 : undefined,
|
|
36
|
+
};
|
|
37
|
+
const IconComponent = blockDef ? BLOCK_ICONS[blockDef.icon] : undefined;
|
|
38
|
+
return (_jsxs("div", { ref: setNodeRef, style: style, className: "rounded-md border border-[var(--border)] bg-[var(--card)]", children: [_jsxs("div", { className: "flex items-center gap-2 border-b border-[var(--border)] px-3 py-2", children: [_jsx("button", { type: "button", className: "cursor-grab touch-none text-[var(--muted-foreground)] hover:text-[var(--foreground)]", ...attributes, ...listeners, children: _jsx(GripVertical, { className: "h-4 w-4" }) }), IconComponent && (_jsx(IconComponent, { className: "h-4 w-4 text-[var(--muted-foreground)]" })), _jsxs("button", { type: "button", onClick: onToggle, className: "flex flex-1 items-center gap-1.5 text-sm font-medium", children: [blockDef?.label ?? block.type, expanded ? (_jsx(ChevronDown, { className: "h-3.5 w-3.5 text-[var(--muted-foreground)]" })) : (_jsx(ChevronRight, { className: "h-3.5 w-3.5 text-[var(--muted-foreground)]" }))] }), _jsx("button", { type: "button", onClick: onRemove, className: "text-[var(--muted-foreground)] hover:text-[var(--destructive)]", "aria-label": "Remove block", children: _jsx(Trash2, { className: "h-4 w-4" }) })] }), expanded && blockDef && (_jsx("div", { className: "space-y-4 p-4", children: blockDef.fields.map((field) => (_jsx(BlockField, { field: field, value: block.data[field.name], onChange: (val) => onFieldChange(field.name, val) }, field.name))) })), expanded && !blockDef && (_jsxs("div", { className: "p-4 text-sm text-[var(--muted-foreground)]", children: ["Unknown block type: ", _jsx("code", { children: block.type })] }))] }));
|
|
39
|
+
}
|
|
40
|
+
export function BlockBuilderField({ label, value = [], onChange, blocks: customBlocks, helpText, }) {
|
|
41
|
+
const [expandedIds, setExpandedIds] = useState(new Set());
|
|
42
|
+
const [pickerOpen, setPickerOpen] = useState(false);
|
|
43
|
+
const allBlockTypes = useMemo(() => {
|
|
44
|
+
if (!customBlocks?.length)
|
|
45
|
+
return PRESET_BLOCKS;
|
|
46
|
+
const customTypes = new Set(customBlocks.map((b) => b.type));
|
|
47
|
+
const filtered = PRESET_BLOCKS.filter((b) => !customTypes.has(b.type));
|
|
48
|
+
return [...filtered, ...customBlocks];
|
|
49
|
+
}, [customBlocks]);
|
|
50
|
+
const blockDefMap = useMemo(() => {
|
|
51
|
+
const map = new Map();
|
|
52
|
+
for (const def of allBlockTypes) {
|
|
53
|
+
map.set(def.type, def);
|
|
54
|
+
}
|
|
55
|
+
return map;
|
|
56
|
+
}, [allBlockTypes]);
|
|
57
|
+
const sensors = useSensors(useSensor(PointerSensor, { activationConstraint: { distance: 5 } }), useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }));
|
|
58
|
+
const handleDragEnd = useCallback((event) => {
|
|
59
|
+
const { active, over } = event;
|
|
60
|
+
if (!over || active.id === over.id)
|
|
61
|
+
return;
|
|
62
|
+
const oldIndex = value.findIndex((b) => b.id === active.id);
|
|
63
|
+
const newIndex = value.findIndex((b) => b.id === over.id);
|
|
64
|
+
if (oldIndex === -1 || newIndex === -1)
|
|
65
|
+
return;
|
|
66
|
+
onChange?.(arrayMove(value, oldIndex, newIndex));
|
|
67
|
+
}, [value, onChange]);
|
|
68
|
+
function addBlock(type) {
|
|
69
|
+
const newBlock = {
|
|
70
|
+
id: crypto.randomUUID(),
|
|
71
|
+
type,
|
|
72
|
+
data: {},
|
|
73
|
+
};
|
|
74
|
+
const newId = newBlock.id;
|
|
75
|
+
onChange?.([...value, newBlock]);
|
|
76
|
+
setExpandedIds((prev) => new Set(prev).add(newId));
|
|
77
|
+
setPickerOpen(false);
|
|
78
|
+
}
|
|
79
|
+
function removeBlock(id) {
|
|
80
|
+
onChange?.(value.filter((b) => b.id !== id));
|
|
81
|
+
setExpandedIds((prev) => {
|
|
82
|
+
const next = new Set(prev);
|
|
83
|
+
next.delete(id);
|
|
84
|
+
return next;
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
function toggleExpand(id) {
|
|
88
|
+
setExpandedIds((prev) => {
|
|
89
|
+
const next = new Set(prev);
|
|
90
|
+
if (next.has(id)) {
|
|
91
|
+
next.delete(id);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
next.add(id);
|
|
95
|
+
}
|
|
96
|
+
return next;
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
function updateBlockField(blockId, fieldName, fieldValue) {
|
|
100
|
+
onChange?.(value.map((b) => b.id === blockId
|
|
101
|
+
? { ...b, data: { ...b.data, [fieldName]: fieldValue } }
|
|
102
|
+
: b));
|
|
103
|
+
}
|
|
104
|
+
const blockIds = value.map((b) => b.id);
|
|
105
|
+
return (_jsxs("div", { children: [label && (_jsx("label", { className: "mb-2 block text-sm font-medium", children: label })), _jsx(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd, children: _jsx(SortableContext, { items: blockIds, strategy: verticalListSortingStrategy, children: _jsx("div", { className: "space-y-2", children: value.map((block) => (_jsx(SortableBlock, { block: block, blockDef: blockDefMap.get(block.type), expanded: expandedIds.has(block.id), onToggle: () => toggleExpand(block.id), onRemove: () => removeBlock(block.id), onFieldChange: (name, val) => updateBlockField(block.id, name, val) }, block.id))) }) }) }), value.length === 0 && (_jsx("div", { className: "rounded-md border border-dashed border-[var(--border)] px-4 py-8 text-center text-sm text-[var(--muted-foreground)]", children: "No blocks added yet. Click \u201CAdd Block\u201D to get started." })), _jsx("div", { className: "relative mt-3", children: _jsxs("button", { type: "button", onClick: () => setPickerOpen((prev) => !prev), className: "inline-flex items-center gap-1.5 rounded-md border border-dashed border-[var(--border)] px-3 py-2 text-sm text-[var(--muted-foreground)] transition-colors hover:border-[var(--foreground)] hover:text-[var(--foreground)]", children: [_jsx(Plus, { className: "h-4 w-4" }), "Add Block"] }) }), pickerOpen && (_jsx("div", { className: "fixed inset-0 z-50 flex items-center justify-center bg-black/50", children: _jsxs("div", { className: "w-full max-w-2xl rounded-lg border border-[var(--border)] bg-[var(--card)] shadow-xl", children: [_jsxs("div", { className: "flex items-center justify-between border-b border-[var(--border)] px-5 py-4", children: [_jsx("h3", { className: "text-base font-semibold", children: "Add Block" }), _jsx("button", { type: "button", onClick: () => setPickerOpen(false), className: "text-[var(--muted-foreground)] hover:text-[var(--foreground)]", "aria-label": "Close", children: _jsx(X, { className: "h-5 w-5" }) })] }), _jsx("div", { className: "grid grid-cols-2 gap-3 p-5 sm:grid-cols-3", children: allBlockTypes.map((bt) => {
|
|
106
|
+
const Icon = BLOCK_ICONS[bt.icon];
|
|
107
|
+
return (_jsxs("button", { type: "button", onClick: () => addBlock(bt.type), className: "flex flex-col items-start gap-1.5 rounded-md border border-[var(--border)] p-3 text-left transition-colors hover:border-[var(--primary)] hover:bg-[var(--accent)]", children: [Icon && _jsx(Icon, { className: "h-5 w-5 text-[var(--primary)]" }), _jsx("span", { className: "text-sm font-medium", children: bt.label }), _jsx("span", { className: "text-xs leading-snug text-[var(--muted-foreground)]", children: bt.description })] }, bt.type));
|
|
108
|
+
}) })] }) })), helpText && (_jsx("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: helpText }))] }));
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=BlockBuilderField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"BlockBuilderField.js","sourceRoot":"","sources":["../../src/fields/BlockBuilderField.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface DateFieldProps {
|
|
2
|
+
label: string;
|
|
3
|
+
value?: string;
|
|
4
|
+
onChange: (value: string) => void;
|
|
5
|
+
required?: boolean;
|
|
6
|
+
helpText?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare function DateField({ label, value, onChange, required, helpText }: DateFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
//# sourceMappingURL=DateField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateField.d.ts","sourceRoot":"","sources":["../../src/fields/DateField.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,KAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,cAAc,2CA8B5F"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
export function DateField({ label, value = '', onChange, required, helpText }) {
|
|
4
|
+
return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [label, required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), _jsxs("div", { className: "relative", children: [_jsx("input", { type: "date", value: value, onChange: (e) => onChange(e.target.value), required: required, className: "w-full rounded-md border border-[var(--border)] bg-[var(--input-background)] px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-[var(--ring)]" }), _jsx("button", { type: "button", className: "absolute right-2 top-1/2 -translate-y-1/2 text-[var(--muted-foreground)]", "aria-label": "Open calendar", children: _jsx("svg", { className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" }) }) })] }), helpText && (_jsx("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: helpText }))] }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=DateField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DateField.js","sourceRoot":"","sources":["../../src/fields/DateField.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAUb,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAkB;IAC3F,OAAO,CACL,0BACE,iBAAO,SAAS,EAAC,gCAAgC,aAC9C,KAAK,EACL,QAAQ,IAAI,eAAM,SAAS,EAAC,kCAAkC,kBAAS,IAClE,EACR,eAAK,SAAS,EAAC,UAAU,aACvB,gBACE,IAAI,EAAC,MAAM,EACX,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAC,mJAAmJ,GAC7J,EACF,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,0EAA0E,gBACzE,eAAe,YAE1B,cAAK,SAAS,EAAC,SAAS,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAE,CAAC,YAC3F,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,CAAC,EAAC,wFAAwF,GAAG,GAC5I,GACC,IACL,EACL,QAAQ,IAAI,CACX,YAAG,SAAS,EAAC,6CAA6C,YAAE,QAAQ,GAAK,CAC1E,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export interface FieldDefinition {
|
|
2
|
+
name: string;
|
|
3
|
+
type: string;
|
|
4
|
+
label: string;
|
|
5
|
+
required?: boolean;
|
|
6
|
+
maxLength?: number;
|
|
7
|
+
helpText?: string;
|
|
8
|
+
options?: string[];
|
|
9
|
+
min?: number;
|
|
10
|
+
max?: number;
|
|
11
|
+
from?: string;
|
|
12
|
+
multi?: boolean;
|
|
13
|
+
fields?: FieldDefinition[];
|
|
14
|
+
blocks?: any[];
|
|
15
|
+
}
|
|
16
|
+
export interface FieldRendererProps {
|
|
17
|
+
field: FieldDefinition;
|
|
18
|
+
value: any;
|
|
19
|
+
onChange: (value: any) => void;
|
|
20
|
+
}
|
|
21
|
+
export declare function FieldRenderer({ field, value, onChange }: FieldRendererProps): import("react/jsx-runtime").JSX.Element;
|
|
22
|
+
//# sourceMappingURL=FieldRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldRenderer.d.ts","sourceRoot":"","sources":["../../src/fields/FieldRenderer.tsx"],"names":[],"mappings":"AAgBA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,eAAe,CAAC;IACvB,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;CAChC;AAkBD,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,kBAAkB,2CA6B3E"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { TextField } from './TextField';
|
|
4
|
+
import { RichTextField } from './RichTextField';
|
|
5
|
+
import { SlugField } from './SlugField';
|
|
6
|
+
import { SelectField } from './SelectField';
|
|
7
|
+
import { MediaField } from './MediaField';
|
|
8
|
+
import { RelationshipField } from './RelationshipField';
|
|
9
|
+
import { DateField } from './DateField';
|
|
10
|
+
import { ToggleField } from './ToggleField';
|
|
11
|
+
import { ArrayField } from './ArrayField';
|
|
12
|
+
import { BlockBuilderField } from './BlockBuilderField';
|
|
13
|
+
import { GroupField } from './GroupField';
|
|
14
|
+
import { NavBuilderField } from './NavBuilderField';
|
|
15
|
+
import { NumberField } from './NumberField';
|
|
16
|
+
const FIELD_MAP = {
|
|
17
|
+
text: TextField,
|
|
18
|
+
richText: RichTextField,
|
|
19
|
+
slug: SlugField,
|
|
20
|
+
select: SelectField,
|
|
21
|
+
media: MediaField,
|
|
22
|
+
relationship: RelationshipField,
|
|
23
|
+
date: DateField,
|
|
24
|
+
toggle: ToggleField,
|
|
25
|
+
array: ArrayField,
|
|
26
|
+
blocks: BlockBuilderField,
|
|
27
|
+
group: GroupField,
|
|
28
|
+
nav: NavBuilderField,
|
|
29
|
+
number: NumberField,
|
|
30
|
+
};
|
|
31
|
+
export function FieldRenderer({ field, value, onChange }) {
|
|
32
|
+
const Component = FIELD_MAP[field.type];
|
|
33
|
+
if (!Component) {
|
|
34
|
+
return (_jsxs("div", { className: "rounded-md border border-[var(--destructive)] bg-red-50 p-3 text-sm text-[var(--destructive)]", children: ["Unknown field type: ", _jsx("code", { children: field.type })] }));
|
|
35
|
+
}
|
|
36
|
+
return (_jsx(Component, { label: field.label, value: value, onChange: onChange, required: field.required, maxLength: field.maxLength, helpText: field.helpText, options: field.options, min: field.min, max: field.max, from: field.from, multi: field.multi, fields: field.fields, blocks: field.blocks, name: field.name }));
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=FieldRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FieldRenderer.js","sourceRoot":"","sources":["../../src/fields/FieldRenderer.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAwB5C,MAAM,SAAS,GAA6C;IAC1D,IAAI,EAAE,SAAS;IACf,QAAQ,EAAE,aAAa;IACvB,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,UAAU;IACjB,YAAY,EAAE,iBAAiB;IAC/B,IAAI,EAAE,SAAS;IACf,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,iBAAiB;IACzB,KAAK,EAAE,UAAU;IACjB,GAAG,EAAE,eAAe;IACpB,MAAM,EAAE,WAAW;CACpB,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAsB;IAC1E,MAAM,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAExC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CACL,eAAK,SAAS,EAAC,+FAA+F,qCACxF,yBAAO,KAAK,CAAC,IAAI,GAAQ,IACzC,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,SAAS,EAAE,KAAK,CAAC,SAAS,EAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACxB,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,GAAG,EAAE,KAAK,CAAC,GAAG,EACd,IAAI,EAAE,KAAK,CAAC,IAAI,EAChB,KAAK,EAAE,KAAK,CAAC,KAAK,EAClB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,MAAM,EAAE,KAAK,CAAC,MAAM,EACpB,IAAI,EAAE,KAAK,CAAC,IAAI,GAChB,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type ReactNode } from 'react';
|
|
2
|
+
export interface GroupFieldProps {
|
|
3
|
+
label: string;
|
|
4
|
+
children?: ReactNode;
|
|
5
|
+
defaultOpen?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function GroupField({ label, children, defaultOpen }: GroupFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
8
|
+
//# sourceMappingURL=GroupField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupField.d.ts","sourceRoot":"","sources":["../../src/fields/GroupField.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAY,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAEjD,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAkB,EAAE,EAAE,eAAe,2CA8BlF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useState } from 'react';
|
|
4
|
+
export function GroupField({ label, children, defaultOpen = true }) {
|
|
5
|
+
const [open, setOpen] = useState(defaultOpen);
|
|
6
|
+
return (_jsxs("div", { className: "rounded-md border border-[var(--border)]", children: [_jsxs("button", { type: "button", onClick: () => setOpen((o) => !o), className: "flex w-full items-center justify-between px-4 py-3 text-sm font-medium hover:bg-[var(--accent)]", children: [_jsx("span", { children: label }), _jsx("svg", { className: `h-4 w-4 text-[var(--muted-foreground)] transition-transform ${open ? 'rotate-180' : ''}`, fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M19 9l-7 7-7-7" }) })] }), open && (_jsx("div", { className: "border-t border-[var(--border)] p-4", children: children ?? (_jsx("p", { className: "text-sm text-[var(--muted-foreground)]", children: "Group fields area" })) }))] }));
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=GroupField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GroupField.js","sourceRoot":"","sources":["../../src/fields/GroupField.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,EAAE,QAAQ,EAAkB,MAAM,OAAO,CAAC;AAQjD,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,GAAG,IAAI,EAAmB;IACjF,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAE9C,OAAO,CACL,eAAK,SAAS,EAAC,0CAA0C,aACvD,kBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EACjC,SAAS,EAAC,iGAAiG,aAE3G,yBAAO,KAAK,GAAQ,EACpB,cACE,SAAS,EAAE,+DAA+D,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,EAAE,EACpG,IAAI,EAAC,MAAM,EACX,OAAO,EAAC,WAAW,EACnB,MAAM,EAAC,cAAc,EACrB,WAAW,EAAE,CAAC,YAEd,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,CAAC,EAAC,gBAAgB,GAAG,GACpE,IACC,EACR,IAAI,IAAI,CACP,cAAK,SAAS,EAAC,qCAAqC,YACjD,QAAQ,IAAI,CACX,YAAG,SAAS,EAAC,wCAAwC,kCAAsB,CAC5E,GACG,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface MediaFieldProps {
|
|
2
|
+
label: string;
|
|
3
|
+
value?: {
|
|
4
|
+
id: string;
|
|
5
|
+
filename: string;
|
|
6
|
+
url: string;
|
|
7
|
+
} | null;
|
|
8
|
+
onChange: (value: any) => void;
|
|
9
|
+
required?: boolean;
|
|
10
|
+
helpText?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function MediaField({ label, value, onChange, required, helpText }: MediaFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=MediaField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaField.d.ts","sourceRoot":"","sources":["../../src/fields/MediaField.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC7D,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,eAAe,2CAqCzF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
export function MediaField({ label, value, onChange, required, helpText }) {
|
|
4
|
+
return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [label, required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), value ? (_jsxs("div", { className: "flex items-center gap-3 rounded-md border border-[var(--border)] p-3", children: [_jsx("div", { className: "h-16 w-16 shrink-0 rounded-md bg-[var(--muted)]" }), _jsxs("div", { className: "flex-1", children: [_jsx("p", { className: "text-sm font-medium", children: value.filename }), _jsx("button", { type: "button", onClick: () => onChange(null), className: "mt-1 text-xs text-[var(--destructive)] hover:underline", children: "Remove" })] })] })) : (_jsx("button", { type: "button", onClick: () => onChange({ id: 'mock', filename: 'placeholder.jpg', url: '' }), className: "flex w-full items-center justify-center rounded-md border-2 border-dashed border-[var(--border)] p-6 text-sm text-[var(--muted-foreground)] hover:border-[var(--primary)] hover:text-[var(--foreground)]", children: _jsx("span", { children: "Click to select media" }) })), helpText && (_jsx("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: helpText }))] }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=MediaField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MediaField.js","sourceRoot":"","sources":["../../src/fields/MediaField.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAUb,MAAM,UAAU,UAAU,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAmB;IACxF,OAAO,CACL,0BACE,iBAAO,SAAS,EAAC,gCAAgC,aAC9C,KAAK,EACL,QAAQ,IAAI,eAAM,SAAS,EAAC,kCAAkC,kBAAS,IAClE,EAEP,KAAK,CAAC,CAAC,CAAC,CACP,eAAK,SAAS,EAAC,sEAAsE,aACnF,cAAK,SAAS,EAAC,iDAAiD,GAAG,EACnE,eAAK,SAAS,EAAC,QAAQ,aACrB,YAAG,SAAS,EAAC,qBAAqB,YAAE,KAAK,CAAC,QAAQ,GAAK,EACvD,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC7B,SAAS,EAAC,wDAAwD,uBAG3D,IACL,IACF,CACP,CAAC,CAAC,CAAC,CACF,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,iBAAiB,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,EAC7E,SAAS,EAAC,0MAA0M,YAEpN,mDAAkC,GAC3B,CACV,EAEA,QAAQ,IAAI,CACX,YAAG,SAAS,EAAC,6CAA6C,YAAE,QAAQ,GAAK,CAC1E,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface NavNode {
|
|
2
|
+
id: string;
|
|
3
|
+
label: string;
|
|
4
|
+
url: string;
|
|
5
|
+
children: NavNode[];
|
|
6
|
+
}
|
|
7
|
+
export interface NavBuilderFieldProps {
|
|
8
|
+
label: string;
|
|
9
|
+
value?: NavNode[];
|
|
10
|
+
onChange: (value: NavNode[]) => void;
|
|
11
|
+
helpText?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function NavBuilderField({ label, value, onChange, helpText }: NavBuilderFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export {};
|
|
15
|
+
//# sourceMappingURL=NavBuilderField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NavBuilderField.d.ts","sourceRoot":"","sources":["../../src/fields/NavBuilderField.tsx"],"names":[],"mappings":"AAKA,UAAU,OAAO;IACf,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC;IAClB,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,eAAe,CAAC,EAAE,KAAK,EAAE,KAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,oBAAoB,2CA0D9F"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Button } from '../components/ui/Button';
|
|
4
|
+
export function NavBuilderField({ label, value = [], onChange, helpText }) {
|
|
5
|
+
function addItem() {
|
|
6
|
+
onChange([
|
|
7
|
+
...value,
|
|
8
|
+
{ id: crypto.randomUUID(), label: 'New Item', url: '/', children: [] },
|
|
9
|
+
]);
|
|
10
|
+
}
|
|
11
|
+
function removeItem(id) {
|
|
12
|
+
onChange(value.filter((n) => n.id !== id));
|
|
13
|
+
}
|
|
14
|
+
function renderNode(node, depth) {
|
|
15
|
+
return (_jsxs("div", { className: "rounded-md border border-[var(--border)] bg-[var(--card)] p-3", style: { marginLeft: depth * 24 }, children: [_jsxs("div", { className: "flex items-center justify-between", children: [_jsxs("div", { className: "flex items-center gap-2 text-sm", children: [_jsx("svg", { className: "h-4 w-4 text-[var(--muted-foreground)]", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", strokeWidth: 2, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M4 6h16M4 12h16M4 18h16" }) }), _jsx("span", { className: "font-medium", children: node.label }), _jsx("span", { className: "text-xs text-[var(--muted-foreground)]", children: node.url })] }), _jsx("button", { type: "button", onClick: () => removeItem(node.id), className: "text-xs text-[var(--muted-foreground)] hover:text-[var(--destructive)]", children: "Remove" })] }), node.children.length > 0 && (_jsx("div", { className: "mt-2 space-y-2", children: node.children.map((child) => renderNode(child, depth + 1)) }))] }, node.id));
|
|
16
|
+
}
|
|
17
|
+
return (_jsxs("div", { children: [_jsx("label", { className: "mb-2 block text-sm font-medium", children: label }), _jsx("div", { className: "space-y-2", children: value.map((node) => renderNode(node, 0)) }), _jsx(Button, { variant: "secondary", size: "sm", onClick: addItem, className: "mt-2", children: "Add Nav Item" }), helpText && (_jsx("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: helpText }))] }));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=NavBuilderField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NavBuilderField.js","sourceRoot":"","sources":["../../src/fields/NavBuilderField.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AAgBjD,MAAM,UAAU,eAAe,CAAC,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAwB;IAC7F,SAAS,OAAO;QACd,QAAQ,CAAC;YACP,GAAG,KAAK;YACR,EAAE,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE;SACvE,CAAC,CAAC;IACL,CAAC;IAED,SAAS,UAAU,CAAC,EAAU;QAC5B,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,SAAS,UAAU,CAAC,IAAa,EAAE,KAAa;QAC9C,OAAO,CACL,eAEE,SAAS,EAAC,+DAA+D,EACzE,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,GAAG,EAAE,EAAE,aAEjC,eAAK,SAAS,EAAC,mCAAmC,aAChD,eAAK,SAAS,EAAC,iCAAiC,aAC9C,cAAK,SAAS,EAAC,wCAAwC,EAAC,IAAI,EAAC,MAAM,EAAC,OAAO,EAAC,WAAW,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAE,CAAC,YAC1H,eAAM,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,EAAC,CAAC,EAAC,yBAAyB,GAAG,GAC7E,EACN,eAAM,SAAS,EAAC,aAAa,YAAE,IAAI,CAAC,KAAK,GAAQ,EACjD,eAAM,SAAS,EAAC,wCAAwC,YAAE,IAAI,CAAC,GAAG,GAAQ,IACtE,EACN,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,EAClC,SAAS,EAAC,wEAAwE,uBAG3E,IACL,EACL,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,CAC3B,cAAK,SAAS,EAAC,gBAAgB,YAC5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,GACvD,CACP,KAxBI,IAAI,CAAC,EAAE,CAyBR,CACP,CAAC;IACJ,CAAC;IAED,OAAO,CACL,0BACE,gBAAO,SAAS,EAAC,gCAAgC,YAAE,KAAK,GAAS,EACjE,cAAK,SAAS,EAAC,WAAW,YACvB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GACrC,EACN,KAAC,MAAM,IAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,IAAI,EAAC,OAAO,EAAE,OAAO,EAAE,SAAS,EAAC,MAAM,6BAE/D,EACR,QAAQ,IAAI,CACX,YAAG,SAAS,EAAC,6CAA6C,YAAE,QAAQ,GAAK,CAC1E,IACG,CACP,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export interface NumberFieldProps {
|
|
2
|
+
label: string;
|
|
3
|
+
value?: number;
|
|
4
|
+
onChange: (value: number) => void;
|
|
5
|
+
min?: number;
|
|
6
|
+
max?: number;
|
|
7
|
+
required?: boolean;
|
|
8
|
+
helpText?: string;
|
|
9
|
+
error?: string;
|
|
10
|
+
}
|
|
11
|
+
export declare function NumberField({ label, value, onChange, min, max, required, helpText, error }: NumberFieldProps): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
//# sourceMappingURL=NumberField.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberField.d.ts","sourceRoot":"","sources":["../../src/fields/NumberField.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,gBAAgB,2CA+B5G"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
export function NumberField({ label, value, onChange, min, max, required, helpText, error }) {
|
|
4
|
+
return (_jsxs("div", { children: [_jsxs("label", { className: "mb-1 block text-sm font-medium", children: [label, required && _jsx("span", { className: "ml-0.5 text-[var(--destructive)]", children: "*" })] }), _jsx("input", { type: "number", value: value ?? '', onChange: (e) => onChange(Number(e.target.value)), min: min, max: max, required: required, className: `w-full rounded-md border bg-[var(--input-background)] px-3 py-2 text-sm outline-none focus:ring-2 focus:ring-[var(--ring)] ${error ? 'border-[var(--destructive)]' : 'border-[var(--border)]'}` }), min !== undefined && max !== undefined && (_jsxs("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: ["Range: ", min, " \u2013 ", max] })), helpText && !error && (_jsx("p", { className: "mt-1 text-xs text-[var(--muted-foreground)]", children: helpText })), error && (_jsx("p", { className: "mt-1 text-xs text-[var(--destructive)]", children: error }))] }));
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=NumberField.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NumberField.js","sourceRoot":"","sources":["../../src/fields/NumberField.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAab,MAAM,UAAU,WAAW,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAoB;IAC3G,OAAO,CACL,0BACE,iBAAO,SAAS,EAAC,gCAAgC,aAC9C,KAAK,EACL,QAAQ,IAAI,eAAM,SAAS,EAAC,kCAAkC,kBAAS,IAClE,EACR,gBACE,IAAI,EAAC,QAAQ,EACb,KAAK,EAAE,KAAK,IAAI,EAAE,EAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EACjD,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,GAAG,EACR,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,8HACT,KAAK,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,wBAC1C,EAAE,GACF,EACD,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,CACzC,aAAG,SAAS,EAAC,6CAA6C,wBAChD,GAAG,cAAK,GAAG,IACjB,CACL,EACA,QAAQ,IAAI,CAAC,KAAK,IAAI,CACrB,YAAG,SAAS,EAAC,6CAA6C,YAAE,QAAQ,GAAK,CAC1E,EACA,KAAK,IAAI,CACR,YAAG,SAAS,EAAC,wCAAwC,YAAE,KAAK,GAAK,CAClE,IACG,CACP,CAAC;AACJ,CAAC"}
|