@delmaredigital/payload-puck 0.6.0 → 0.6.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +178 -1
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +1 -1
- package/dist/api/index.js.map +1 -1
- package/dist/api/utils/mapRootProps.d.ts +19 -0
- package/dist/api/utils/mapRootProps.d.ts.map +1 -1
- package/dist/api/utils/mapRootProps.js +33 -0
- package/dist/api/utils/mapRootProps.js.map +1 -1
- package/dist/components/exports.d.ts +1 -0
- package/dist/components/exports.d.ts.map +1 -1
- package/dist/components/exports.js +4 -0
- package/dist/components/exports.js.map +1 -1
- package/dist/config/index.d.ts +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/presets.js +2 -2
- package/dist/config/presets.js.map +1 -1
- package/dist/config/types.d.ts +111 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +8 -0
- package/dist/config/types.js.map +1 -0
- package/dist/editor/PuckEditor.d.ts +20 -1
- package/dist/editor/PuckEditor.d.ts.map +1 -1
- package/dist/editor/PuckEditor.js +4 -2
- package/dist/editor/PuckEditor.js.map +1 -1
- package/dist/editor/PuckEditorImpl.client.d.ts +20 -1
- package/dist/editor/PuckEditorImpl.client.d.ts.map +1 -1
- package/dist/editor/PuckEditorImpl.client.js +17 -7
- package/dist/editor/PuckEditorImpl.client.js.map +1 -1
- package/dist/editor/components/DarkModeStyles.d.ts +30 -0
- package/dist/editor/components/DarkModeStyles.d.ts.map +1 -0
- package/dist/editor/components/DarkModeStyles.js +159 -0
- package/dist/editor/components/DarkModeStyles.js.map +1 -0
- package/dist/editor/components/HeaderActions.d.ts +13 -0
- package/dist/editor/components/HeaderActions.d.ts.map +1 -1
- package/dist/editor/components/HeaderActions.js +3 -2
- package/dist/editor/components/HeaderActions.js.map +1 -1
- package/dist/editor/components/IframeWrapper.d.ts +7 -0
- package/dist/editor/components/IframeWrapper.d.ts.map +1 -1
- package/dist/editor/components/IframeWrapper.js +15 -5
- package/dist/editor/components/IframeWrapper.js.map +1 -1
- package/dist/editor/components/PreviewModeToggle.d.ts +32 -0
- package/dist/editor/components/PreviewModeToggle.d.ts.map +1 -0
- package/dist/editor/components/PreviewModeToggle.js +67 -0
- package/dist/editor/components/PreviewModeToggle.js.map +1 -0
- package/dist/editor/hooks/useDarkMode.d.ts +37 -0
- package/dist/editor/hooks/useDarkMode.d.ts.map +1 -0
- package/dist/editor/hooks/useDarkMode.js +80 -0
- package/dist/editor/hooks/useDarkMode.js.map +1 -0
- package/dist/editor/index.d.ts +3 -0
- package/dist/editor/index.d.ts.map +1 -1
- package/dist/editor/index.js +3 -0
- package/dist/editor/index.js.map +1 -1
- package/dist/editor/utils/injectPageTreeFields.js +2 -2
- package/dist/editor/utils/injectPageTreeFields.js.map +1 -1
- package/dist/endpoints/styles.d.ts +1 -0
- package/dist/endpoints/styles.d.ts.map +1 -1
- package/dist/endpoints/styles.js +33 -11
- package/dist/endpoints/styles.js.map +1 -1
- package/dist/fields/MediaField.d.ts.map +1 -1
- package/dist/fields/MediaField.js +4 -2
- package/dist/fields/MediaField.js.map +1 -1
- package/dist/fields/PageSegmentField.d.ts +17 -0
- package/dist/fields/PageSegmentField.d.ts.map +1 -1
- package/dist/fields/PageSegmentField.js +106 -1
- package/dist/fields/PageSegmentField.js.map +1 -1
- package/dist/fields/index.d.ts +1 -1
- package/dist/fields/index.d.ts.map +1 -1
- package/dist/fields/index.js +1 -1
- package/dist/fields/index.js.map +1 -1
- package/dist/layouts/index.d.ts +1 -1
- package/dist/layouts/index.d.ts.map +1 -1
- package/dist/layouts/index.js +1 -1
- package/dist/layouts/index.js.map +1 -1
- package/dist/layouts/types.d.ts +14 -2
- package/dist/layouts/types.d.ts.map +1 -1
- package/dist/layouts/utils.d.ts +35 -0
- package/dist/layouts/utils.d.ts.map +1 -1
- package/dist/layouts/utils.js +37 -0
- package/dist/layouts/utils.js.map +1 -1
- package/dist/render/HybridPageRenderer.d.ts +46 -3
- package/dist/render/HybridPageRenderer.d.ts.map +1 -1
- package/dist/render/HybridPageRenderer.js +45 -0
- package/dist/render/HybridPageRenderer.js.map +1 -1
- package/dist/render/index.d.ts +3 -2
- package/dist/render/index.d.ts.map +1 -1
- package/dist/render/index.js +3 -1
- package/dist/render/index.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/views/PuckEditorView.d.ts.map +1 -1
- package/dist/views/PuckEditorView.js +14 -8
- package/dist/views/PuckEditorView.js.map +1 -1
- package/package.json +5 -1
|
@@ -36,7 +36,7 @@ const DEFAULT_LAYOUT_CONFIG = {
|
|
|
36
36
|
* }
|
|
37
37
|
* ```
|
|
38
38
|
*/
|
|
39
|
-
export const IframeWrapper = memo(function IframeWrapper({ children, document: iframeDoc, layouts, layoutStyles, layoutKey = 'pageLayout', defaultLayout = 'default', editorStylesheets, editorCss, }) {
|
|
39
|
+
export const IframeWrapper = memo(function IframeWrapper({ children, document: iframeDoc, layouts, layoutStyles, layoutKey = 'pageLayout', defaultLayout = 'default', editorStylesheets, editorCss, previewDarkModeOverride, }) {
|
|
40
40
|
const appState = usePuck((s) => s.appState);
|
|
41
41
|
// Track stylesheet loading state to force re-render when styles are ready
|
|
42
42
|
const [stylesLoaded, setStylesLoaded] = useState(false);
|
|
@@ -94,15 +94,20 @@ export const IframeWrapper = memo(function IframeWrapper({ children, document: i
|
|
|
94
94
|
}
|
|
95
95
|
body.style.backgroundAttachment = 'fixed';
|
|
96
96
|
body.style.minHeight = '100vh';
|
|
97
|
-
// Apply theme class for dark/light mode
|
|
98
|
-
|
|
97
|
+
// Apply theme class and data-theme attribute for dark/light mode
|
|
98
|
+
// Supports both patterns: CSS classes (.dark/.light) and data attributes ([data-theme='dark'])
|
|
99
|
+
// previewDarkModeOverride takes precedence over layoutConfig.isDark
|
|
100
|
+
const isDark = previewDarkModeOverride ?? layoutConfig.isDark;
|
|
101
|
+
if (isDark) {
|
|
99
102
|
html.classList.add('dark');
|
|
100
103
|
html.classList.remove('light');
|
|
104
|
+
html.setAttribute('data-theme', 'dark');
|
|
101
105
|
body.style.color = '#ffffff';
|
|
102
106
|
}
|
|
103
107
|
else {
|
|
104
108
|
html.classList.remove('dark');
|
|
105
109
|
html.classList.add('light');
|
|
110
|
+
html.setAttribute('data-theme', 'light');
|
|
106
111
|
body.style.color = '#1f2937'; // gray-800
|
|
107
112
|
}
|
|
108
113
|
// Inject external stylesheets (Tailwind CSS, CSS variables, etc.)
|
|
@@ -117,6 +122,10 @@ export const IframeWrapper = memo(function IframeWrapper({ children, document: i
|
|
|
117
122
|
setStylesLoaded(true);
|
|
118
123
|
}
|
|
119
124
|
};
|
|
125
|
+
// Get origin for resolving relative URLs
|
|
126
|
+
// Puck's iframe may use srcdoc which doesn't have a proper base URL,
|
|
127
|
+
// so relative paths like '/api/puck/styles' won't resolve correctly
|
|
128
|
+
const origin = typeof window !== 'undefined' ? window.location.origin : '';
|
|
120
129
|
editorStylesheets.forEach((href, index) => {
|
|
121
130
|
const linkId = `puck-editor-stylesheet-${index}`;
|
|
122
131
|
const existingLink = iframeDoc.getElementById(linkId);
|
|
@@ -125,7 +134,8 @@ export const IframeWrapper = memo(function IframeWrapper({ children, document: i
|
|
|
125
134
|
const link = iframeDoc.createElement('link');
|
|
126
135
|
link.id = linkId;
|
|
127
136
|
link.rel = 'stylesheet';
|
|
128
|
-
|
|
137
|
+
// Resolve relative URLs to absolute URLs for iframe compatibility
|
|
138
|
+
link.href = href.startsWith('/') ? `${origin}${href}` : href;
|
|
129
139
|
// Track when stylesheet loads
|
|
130
140
|
link.onload = checkAllLoaded;
|
|
131
141
|
link.onerror = checkAllLoaded; // Count errors too to avoid hanging
|
|
@@ -275,7 +285,7 @@ export const IframeWrapper = memo(function IframeWrapper({ children, document: i
|
|
|
275
285
|
`;
|
|
276
286
|
iframeDoc.head.appendChild(style);
|
|
277
287
|
}
|
|
278
|
-
}, [iframeDoc, layoutConfig, pageBackground, editorStylesheets, editorCss, stylesLoaded]);
|
|
288
|
+
}, [iframeDoc, layoutConfig, pageBackground, editorStylesheets, editorCss, stylesLoaded, previewDarkModeOverride]);
|
|
279
289
|
// Get header/footer components from layout config
|
|
280
290
|
const LayoutHeader = layoutConfig.header;
|
|
281
291
|
const LayoutFooter = layoutConfig.footer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IframeWrapper.js","sourceRoot":"","sources":["../../../src/editor/components/IframeWrapper.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAsC,MAAM,OAAO,CAAA;AAC9F,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAEhD,OAAO,EAAE,oBAAoB,EAAwB,MAAM,qBAAqB,CAAA;AAEhF,iDAAiD;AACjD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAA;
|
|
1
|
+
{"version":3,"file":"IframeWrapper.js","sourceRoot":"","sources":["../../../src/editor/components/IframeWrapper.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export interface PreviewModeToggleProps {
|
|
2
|
+
/**
|
|
3
|
+
* Whether dark mode is currently enabled in the preview
|
|
4
|
+
*/
|
|
5
|
+
isDarkMode: boolean;
|
|
6
|
+
/**
|
|
7
|
+
* Callback when the mode is toggled
|
|
8
|
+
*/
|
|
9
|
+
onToggle: (isDarkMode: boolean) => void;
|
|
10
|
+
/**
|
|
11
|
+
* Whether the toggle is disabled
|
|
12
|
+
*/
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Toggle button for switching preview iframe between light/dark modes.
|
|
17
|
+
*
|
|
18
|
+
* This controls the preview content's dark mode independently from the
|
|
19
|
+
* editor UI dark mode. Useful for testing how the page looks in both modes.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```tsx
|
|
23
|
+
* const [previewDarkMode, setPreviewDarkMode] = useState(false)
|
|
24
|
+
*
|
|
25
|
+
* <PreviewModeToggle
|
|
26
|
+
* isDarkMode={previewDarkMode}
|
|
27
|
+
* onToggle={setPreviewDarkMode}
|
|
28
|
+
* />
|
|
29
|
+
* ```
|
|
30
|
+
*/
|
|
31
|
+
export declare const PreviewModeToggle: import("react").NamedExoticComponent<PreviewModeToggleProps>;
|
|
32
|
+
//# sourceMappingURL=PreviewModeToggle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewModeToggle.d.ts","sourceRoot":"","sources":["../../../src/editor/components/PreviewModeToggle.tsx"],"names":[],"mappings":"AAwCA,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,UAAU,EAAE,OAAO,CAAA;IACnB;;OAEG;IACH,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,CAAA;IACvC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAED;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,8DAuC5B,CAAA"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { memo } from 'react';
|
|
4
|
+
import { Sun, Moon } from 'lucide-react';
|
|
5
|
+
const styles = {
|
|
6
|
+
container: {
|
|
7
|
+
display: 'flex',
|
|
8
|
+
alignItems: 'center',
|
|
9
|
+
gap: '2px',
|
|
10
|
+
padding: '2px',
|
|
11
|
+
backgroundColor: 'var(--puck-color-grey-11, #e8e8e8)',
|
|
12
|
+
borderRadius: '6px',
|
|
13
|
+
},
|
|
14
|
+
button: {
|
|
15
|
+
display: 'flex',
|
|
16
|
+
alignItems: 'center',
|
|
17
|
+
justifyContent: 'center',
|
|
18
|
+
width: '28px',
|
|
19
|
+
height: '28px',
|
|
20
|
+
border: 'none',
|
|
21
|
+
borderRadius: '4px',
|
|
22
|
+
cursor: 'pointer',
|
|
23
|
+
transition: 'background-color 0.15s, color 0.15s',
|
|
24
|
+
},
|
|
25
|
+
buttonActive: {
|
|
26
|
+
backgroundColor: 'var(--puck-color-white, #ffffff)',
|
|
27
|
+
color: 'var(--puck-color-grey-02, #3d3d3d)',
|
|
28
|
+
boxShadow: '0 1px 2px rgba(0, 0, 0, 0.05)',
|
|
29
|
+
},
|
|
30
|
+
buttonInactive: {
|
|
31
|
+
backgroundColor: 'transparent',
|
|
32
|
+
color: 'var(--puck-color-grey-05, #8f8f8f)',
|
|
33
|
+
},
|
|
34
|
+
icon: {
|
|
35
|
+
width: '14px',
|
|
36
|
+
height: '14px',
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Toggle button for switching preview iframe between light/dark modes.
|
|
41
|
+
*
|
|
42
|
+
* This controls the preview content's dark mode independently from the
|
|
43
|
+
* editor UI dark mode. Useful for testing how the page looks in both modes.
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```tsx
|
|
47
|
+
* const [previewDarkMode, setPreviewDarkMode] = useState(false)
|
|
48
|
+
*
|
|
49
|
+
* <PreviewModeToggle
|
|
50
|
+
* isDarkMode={previewDarkMode}
|
|
51
|
+
* onToggle={setPreviewDarkMode}
|
|
52
|
+
* />
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export const PreviewModeToggle = memo(function PreviewModeToggle({ isDarkMode, onToggle, disabled = false, }) {
|
|
56
|
+
return (_jsxs("div", { style: {
|
|
57
|
+
...styles.container,
|
|
58
|
+
...(disabled ? { opacity: 0.5, pointerEvents: 'none' } : {}),
|
|
59
|
+
}, title: "Toggle preview dark/light mode", children: [_jsx("button", { type: "button", onClick: () => onToggle(false), style: {
|
|
60
|
+
...styles.button,
|
|
61
|
+
...(!isDarkMode ? styles.buttonActive : styles.buttonInactive),
|
|
62
|
+
}, "aria-label": "Light mode preview", "aria-pressed": !isDarkMode, children: _jsx(Sun, { style: styles.icon }) }), _jsx("button", { type: "button", onClick: () => onToggle(true), style: {
|
|
63
|
+
...styles.button,
|
|
64
|
+
...(isDarkMode ? styles.buttonActive : styles.buttonInactive),
|
|
65
|
+
}, "aria-label": "Dark mode preview", "aria-pressed": isDarkMode, children: _jsx(Moon, { style: styles.icon }) })] }));
|
|
66
|
+
});
|
|
67
|
+
//# sourceMappingURL=PreviewModeToggle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PreviewModeToggle.js","sourceRoot":"","sources":["../../../src/editor/components/PreviewModeToggle.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAA;;AAEZ,OAAO,EAAE,IAAI,EAAsB,MAAM,OAAO,CAAA;AAChD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAExC,MAAM,MAAM,GAAG;IACb,SAAS,EAAE;QACT,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,GAAG,EAAE,KAAK;QACV,OAAO,EAAE,KAAK;QACd,eAAe,EAAE,oCAAoC;QACrD,YAAY,EAAE,KAAK;KACH;IAClB,MAAM,EAAE;QACN,OAAO,EAAE,MAAM;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,MAAM;QACd,YAAY,EAAE,KAAK;QACnB,MAAM,EAAE,SAAS;QACjB,UAAU,EAAE,qCAAqC;KACjC;IAClB,YAAY,EAAE;QACZ,eAAe,EAAE,kCAAkC;QACnD,KAAK,EAAE,oCAAoC;QAC3C,SAAS,EAAE,+BAA+B;KAC1B;IAClB,cAAc,EAAE;QACd,eAAe,EAAE,aAAa;QAC9B,KAAK,EAAE,oCAAoC;KAC3B;IAClB,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;KACE;CACnB,CAAA;AAiBD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,iBAAiB,CAAC,EAC/D,UAAU,EACV,QAAQ,EACR,QAAQ,GAAG,KAAK,GACO;IACvB,OAAO,CACL,eACE,KAAK,EAAE;YACL,GAAG,MAAM,CAAC,SAAS;YACnB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D,EACD,KAAK,EAAC,gCAAgC,aAEtC,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAC9B,KAAK,EAAE;oBACL,GAAG,MAAM,CAAC,MAAM;oBAChB,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;iBAC/D,gBACU,oBAAoB,kBACjB,CAAC,UAAU,YAEzB,KAAC,GAAG,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,GAAI,GACpB,EACT,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,EAC7B,KAAK,EAAE;oBACL,GAAG,MAAM,CAAC,MAAM;oBAChB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC;iBAC9D,gBACU,mBAAmB,kBAChB,UAAU,YAExB,KAAC,IAAI,IAAC,KAAK,EAAE,MAAM,CAAC,IAAI,GAAI,GACrB,IACL,CACP,CAAA;AACH,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Source of dark mode detection
|
|
3
|
+
*/
|
|
4
|
+
export type DarkModeSource = 'class' | 'media-query' | 'none';
|
|
5
|
+
/**
|
|
6
|
+
* Return type for useDarkMode hook
|
|
7
|
+
*/
|
|
8
|
+
export interface UseDarkModeReturn {
|
|
9
|
+
/**
|
|
10
|
+
* Whether dark mode is currently active
|
|
11
|
+
*/
|
|
12
|
+
isDarkMode: boolean;
|
|
13
|
+
/**
|
|
14
|
+
* How dark mode was detected
|
|
15
|
+
*/
|
|
16
|
+
source: DarkModeSource;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Detects dark mode state from PayloadCMS admin or OS preferences.
|
|
20
|
+
*
|
|
21
|
+
* Detection priority:
|
|
22
|
+
* 1. `.dark` class on `document.documentElement` (PayloadCMS admin)
|
|
23
|
+
* 2. `prefers-color-scheme: dark` media query (OS preference)
|
|
24
|
+
*
|
|
25
|
+
* Uses MutationObserver to track class changes in real-time.
|
|
26
|
+
*
|
|
27
|
+
* @example
|
|
28
|
+
* ```tsx
|
|
29
|
+
* const { isDarkMode, source } = useDarkMode()
|
|
30
|
+
*
|
|
31
|
+
* if (isDarkMode) {
|
|
32
|
+
* // Apply dark mode styles
|
|
33
|
+
* }
|
|
34
|
+
* ```
|
|
35
|
+
*/
|
|
36
|
+
export declare function useDarkMode(): UseDarkModeReturn;
|
|
37
|
+
//# sourceMappingURL=useDarkMode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDarkMode.d.ts","sourceRoot":"","sources":["../../../src/editor/hooks/useDarkMode.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,aAAa,GAAG,MAAM,CAAA;AAE7D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,UAAU,EAAE,OAAO,CAAA;IACnB;;OAEG;IACH,MAAM,EAAE,cAAc,CAAA;CACvB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,WAAW,IAAI,iBAAiB,CAqE/C"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
import { useState, useEffect, useCallback } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* Detects dark mode state from PayloadCMS admin or OS preferences.
|
|
5
|
+
*
|
|
6
|
+
* Detection priority:
|
|
7
|
+
* 1. `.dark` class on `document.documentElement` (PayloadCMS admin)
|
|
8
|
+
* 2. `prefers-color-scheme: dark` media query (OS preference)
|
|
9
|
+
*
|
|
10
|
+
* Uses MutationObserver to track class changes in real-time.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```tsx
|
|
14
|
+
* const { isDarkMode, source } = useDarkMode()
|
|
15
|
+
*
|
|
16
|
+
* if (isDarkMode) {
|
|
17
|
+
* // Apply dark mode styles
|
|
18
|
+
* }
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export function useDarkMode() {
|
|
22
|
+
const [state, setState] = useState({
|
|
23
|
+
isDarkMode: false,
|
|
24
|
+
source: 'none',
|
|
25
|
+
});
|
|
26
|
+
// Check for dark mode class on document element
|
|
27
|
+
const checkDarkModeClass = useCallback(() => {
|
|
28
|
+
if (typeof document === 'undefined')
|
|
29
|
+
return false;
|
|
30
|
+
return document.documentElement.classList.contains('dark');
|
|
31
|
+
}, []);
|
|
32
|
+
// Check for OS dark mode preference
|
|
33
|
+
const checkMediaQuery = useCallback(() => {
|
|
34
|
+
if (typeof window === 'undefined')
|
|
35
|
+
return false;
|
|
36
|
+
return window.matchMedia('(prefers-color-scheme: dark)').matches;
|
|
37
|
+
}, []);
|
|
38
|
+
// Compute current dark mode state
|
|
39
|
+
const computeState = useCallback(() => {
|
|
40
|
+
// Priority 1: Check for .dark class (PayloadCMS)
|
|
41
|
+
if (checkDarkModeClass()) {
|
|
42
|
+
return { isDarkMode: true, source: 'class' };
|
|
43
|
+
}
|
|
44
|
+
// Priority 2: Check OS preference
|
|
45
|
+
if (checkMediaQuery()) {
|
|
46
|
+
return { isDarkMode: true, source: 'media-query' };
|
|
47
|
+
}
|
|
48
|
+
return { isDarkMode: false, source: 'none' };
|
|
49
|
+
}, [checkDarkModeClass, checkMediaQuery]);
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
// Set initial state
|
|
52
|
+
setState(computeState());
|
|
53
|
+
// Watch for class changes on document element
|
|
54
|
+
const observer = new MutationObserver((mutations) => {
|
|
55
|
+
for (const mutation of mutations) {
|
|
56
|
+
if (mutation.type === 'attributes' &&
|
|
57
|
+
mutation.attributeName === 'class') {
|
|
58
|
+
setState(computeState());
|
|
59
|
+
break;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
observer.observe(document.documentElement, {
|
|
64
|
+
attributes: true,
|
|
65
|
+
attributeFilter: ['class'],
|
|
66
|
+
});
|
|
67
|
+
// Watch for OS preference changes
|
|
68
|
+
const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
|
69
|
+
const handleMediaChange = () => {
|
|
70
|
+
setState(computeState());
|
|
71
|
+
};
|
|
72
|
+
mediaQuery.addEventListener('change', handleMediaChange);
|
|
73
|
+
return () => {
|
|
74
|
+
observer.disconnect();
|
|
75
|
+
mediaQuery.removeEventListener('change', handleMediaChange);
|
|
76
|
+
};
|
|
77
|
+
}, [computeState]);
|
|
78
|
+
return state;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=useDarkMode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useDarkMode.js","sourceRoot":"","sources":["../../../src/editor/hooks/useDarkMode.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AAqBxD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,WAAW;IACzB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAoB;QACpD,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,MAAM;KACf,CAAC,CAAA;IAEF,gDAAgD;IAChD,MAAM,kBAAkB,GAAG,WAAW,CAAC,GAAY,EAAE;QACnD,IAAI,OAAO,QAAQ,KAAK,WAAW;YAAE,OAAO,KAAK,CAAA;QACjD,OAAO,QAAQ,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAA;IAC5D,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,oCAAoC;IACpC,MAAM,eAAe,GAAG,WAAW,CAAC,GAAY,EAAE;QAChD,IAAI,OAAO,MAAM,KAAK,WAAW;YAAE,OAAO,KAAK,CAAA;QAC/C,OAAO,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC,OAAO,CAAA;IAClE,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,kCAAkC;IAClC,MAAM,YAAY,GAAG,WAAW,CAAC,GAAsB,EAAE;QACvD,iDAAiD;QACjD,IAAI,kBAAkB,EAAE,EAAE,CAAC;YACzB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;QAC9C,CAAC;QAED,kCAAkC;QAClC,IAAI,eAAe,EAAE,EAAE,CAAC;YACtB,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,CAAA;QACpD,CAAC;QAED,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAA;IAC9C,CAAC,EAAE,CAAC,kBAAkB,EAAE,eAAe,CAAC,CAAC,CAAA;IAEzC,SAAS,CAAC,GAAG,EAAE;QACb,oBAAoB;QACpB,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAA;QAExB,8CAA8C;QAC9C,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,CAAC,SAAS,EAAE,EAAE;YAClD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IACE,QAAQ,CAAC,IAAI,KAAK,YAAY;oBAC9B,QAAQ,CAAC,aAAa,KAAK,OAAO,EAClC,CAAC;oBACD,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAA;oBACxB,MAAK;gBACP,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,EAAE;YACzC,UAAU,EAAE,IAAI;YAChB,eAAe,EAAE,CAAC,OAAO,CAAC;SAC3B,CAAC,CAAA;QAEF,kCAAkC;QAClC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAA;QACpE,MAAM,iBAAiB,GAAG,GAAG,EAAE;YAC7B,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAA;QAC1B,CAAC,CAAA;QACD,UAAU,CAAC,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAA;QAExD,OAAO,GAAG,EAAE;YACV,QAAQ,CAAC,UAAU,EAAE,CAAA;YACrB,UAAU,CAAC,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAA;QAC7D,CAAC,CAAA;IACH,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,CAAA;IAElB,OAAO,KAAK,CAAA;AACd,CAAC"}
|
package/dist/editor/index.d.ts
CHANGED
|
@@ -47,6 +47,8 @@ export { HeaderActions, type HeaderActionsProps } from './components/HeaderActio
|
|
|
47
47
|
export { IframeWrapper, type IframeWrapperProps, type LayoutStyle } from './components/IframeWrapper.js';
|
|
48
48
|
export { LoadingState, type LoadingStateProps } from './components/LoadingState.js';
|
|
49
49
|
export { PreviewModal, type PreviewModalProps } from './components/PreviewModal.js';
|
|
50
|
+
export { DarkModeStyles, type DarkModeStylesProps } from './components/DarkModeStyles.js';
|
|
51
|
+
export { PreviewModeToggle, type PreviewModeToggleProps } from './components/PreviewModeToggle.js';
|
|
50
52
|
/**
|
|
51
53
|
* @deprecated Use createVersionHistoryPlugin instead. VersionHistory has moved to the plugin rail.
|
|
52
54
|
*/
|
|
@@ -54,6 +56,7 @@ export { VersionHistory, type VersionHistoryProps, type PageVersion } from './co
|
|
|
54
56
|
export { injectPageTreeFields } from './utils/injectPageTreeFields.js';
|
|
55
57
|
export { detectPageTree, hasPageTreeFields } from './utils/detectPageTree.js';
|
|
56
58
|
export { useUnsavedChanges, type UseUnsavedChangesReturn } from './hooks/useUnsavedChanges.js';
|
|
59
|
+
export { useDarkMode, type UseDarkModeReturn, type DarkModeSource } from './hooks/useDarkMode.js';
|
|
57
60
|
export { headingAnalyzer } from './plugins/index.js';
|
|
58
61
|
export { createVersionHistoryPlugin, type VersionHistoryPluginOptions, VersionHistoryPanel, type VersionHistoryPanelProps, } from './plugins/index.js';
|
|
59
62
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/editor/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAGH,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGlE,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAGrF,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AACtF,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAA;AACxG,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACnF,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACnF;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,KAAK,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAG3G,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAG7E,OAAO,EAAE,iBAAiB,EAAE,KAAK,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/editor/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAGH,OAAO,EAAE,UAAU,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGlE,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAGrF,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AACtF,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,KAAK,WAAW,EAAE,MAAM,+BAA+B,CAAA;AACxG,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACnF,OAAO,EAAE,YAAY,EAAE,KAAK,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AACnF,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,MAAM,gCAAgC,CAAA;AACzF,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,mCAAmC,CAAA;AAClG;;GAEG;AACH,OAAO,EAAE,cAAc,EAAE,KAAK,mBAAmB,EAAE,KAAK,WAAW,EAAE,MAAM,gCAAgC,CAAA;AAG3G,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAG7E,OAAO,EAAE,iBAAiB,EAAE,KAAK,uBAAuB,EAAE,MAAM,8BAA8B,CAAA;AAC9F,OAAO,EAAE,WAAW,EAAE,KAAK,iBAAiB,EAAE,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAGjG,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EACL,0BAA0B,EAC1B,KAAK,2BAA2B,EAChC,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,oBAAoB,CAAA"}
|
package/dist/editor/index.js
CHANGED
|
@@ -51,6 +51,8 @@ export { HeaderActions } from './components/HeaderActions.js';
|
|
|
51
51
|
export { IframeWrapper } from './components/IframeWrapper.js';
|
|
52
52
|
export { LoadingState } from './components/LoadingState.js';
|
|
53
53
|
export { PreviewModal } from './components/PreviewModal.js';
|
|
54
|
+
export { DarkModeStyles } from './components/DarkModeStyles.js';
|
|
55
|
+
export { PreviewModeToggle } from './components/PreviewModeToggle.js';
|
|
54
56
|
/**
|
|
55
57
|
* @deprecated Use createVersionHistoryPlugin instead. VersionHistory has moved to the plugin rail.
|
|
56
58
|
*/
|
|
@@ -60,6 +62,7 @@ export { injectPageTreeFields } from './utils/injectPageTreeFields.js';
|
|
|
60
62
|
export { detectPageTree, hasPageTreeFields } from './utils/detectPageTree.js';
|
|
61
63
|
// Hooks
|
|
62
64
|
export { useUnsavedChanges } from './hooks/useUnsavedChanges.js';
|
|
65
|
+
export { useDarkMode } from './hooks/useDarkMode.js';
|
|
63
66
|
// Plugins
|
|
64
67
|
export { headingAnalyzer } from './plugins/index.js';
|
|
65
68
|
export { createVersionHistoryPlugin, VersionHistoryPanel, } from './plugins/index.js';
|
package/dist/editor/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/editor/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,wBAAwB;AACxB,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAElE,gFAAgF;AAChF,OAAO,EAAE,cAAc,EAA4B,MAAM,4BAA4B,CAAA;AAErF,4CAA4C;AAC5C,OAAO,EAAE,aAAa,EAA2B,MAAM,+BAA+B,CAAA;AACtF,OAAO,EAAE,aAAa,EAA6C,MAAM,+BAA+B,CAAA;AACxG,OAAO,EAAE,YAAY,EAA0B,MAAM,8BAA8B,CAAA;AACnF,OAAO,EAAE,YAAY,EAA0B,MAAM,8BAA8B,CAAA;AACnF;;GAEG;AACH,OAAO,EAAE,cAAc,EAA8C,MAAM,gCAAgC,CAAA;AAE3G,YAAY;AACZ,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAE7E,QAAQ;AACR,OAAO,EAAE,iBAAiB,EAAgC,MAAM,8BAA8B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/editor/index.ts"],"names":[],"mappings":"AAAA,YAAY,CAAA;AAEZ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AAEH,wBAAwB;AACxB,OAAO,EAAE,UAAU,EAAwB,MAAM,iBAAiB,CAAA;AAElE,gFAAgF;AAChF,OAAO,EAAE,cAAc,EAA4B,MAAM,4BAA4B,CAAA;AAErF,4CAA4C;AAC5C,OAAO,EAAE,aAAa,EAA2B,MAAM,+BAA+B,CAAA;AACtF,OAAO,EAAE,aAAa,EAA6C,MAAM,+BAA+B,CAAA;AACxG,OAAO,EAAE,YAAY,EAA0B,MAAM,8BAA8B,CAAA;AACnF,OAAO,EAAE,YAAY,EAA0B,MAAM,8BAA8B,CAAA;AACnF,OAAO,EAAE,cAAc,EAA4B,MAAM,gCAAgC,CAAA;AACzF,OAAO,EAAE,iBAAiB,EAA+B,MAAM,mCAAmC,CAAA;AAClG;;GAEG;AACH,OAAO,EAAE,cAAc,EAA8C,MAAM,gCAAgC,CAAA;AAE3G,YAAY;AACZ,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAA;AAE7E,QAAQ;AACR,OAAO,EAAE,iBAAiB,EAAgC,MAAM,8BAA8B,CAAA;AAC9F,OAAO,EAAE,WAAW,EAA+C,MAAM,wBAAwB,CAAA;AAEjG,UAAU;AACV,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EACL,0BAA0B,EAE1B,mBAAmB,GAEpB,MAAM,oBAAoB,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createFolderPickerField } from '../../fields/FolderPickerField.js';
|
|
2
|
-
import {
|
|
2
|
+
import { createLockedPageSegmentField } from '../../fields/PageSegmentField.js';
|
|
3
3
|
import { createSlugPreviewField } from '../../fields/SlugPreviewField.js';
|
|
4
4
|
/**
|
|
5
5
|
* Injects page-tree fields (folder, pageSegment, slug) into a Puck config's root fields.
|
|
@@ -12,7 +12,7 @@ export function injectPageTreeFields(config) {
|
|
|
12
12
|
// Create page-tree specific fields
|
|
13
13
|
const pageTreeFields = {
|
|
14
14
|
folder: createFolderPickerField({ label: 'Folder' }),
|
|
15
|
-
pageSegment:
|
|
15
|
+
pageSegment: createLockedPageSegmentField({ label: 'Page Segment' }),
|
|
16
16
|
slug: createSlugPreviewField({
|
|
17
17
|
label: 'URL Slug',
|
|
18
18
|
hint: 'Auto-generated from folder + page segment',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"injectPageTreeFields.js","sourceRoot":"","sources":["../../../src/editor/utils/injectPageTreeFields.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAA;AAC3E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"injectPageTreeFields.js","sourceRoot":"","sources":["../../../src/editor/utils/injectPageTreeFields.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAA;AAC3E,OAAO,EAAE,4BAA4B,EAAE,MAAM,kCAAkC,CAAA;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AAEzE;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAkB;IACrD,mCAAmC;IACnC,MAAM,cAAc,GAAG;QACrB,MAAM,EAAE,uBAAuB,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;QACpD,WAAW,EAAE,4BAA4B,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;QACpE,IAAI,EAAE,sBAAsB,CAAC;YAC3B,KAAK,EAAE,UAAU;YACjB,IAAI,EAAE,2CAA2C;SAClD,CAAC;KACH,CAAA;IAED,yEAAyE;IACzE,MAAM,kBAAkB,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAA;IACpD,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,WAAW,EAAE,GAAG,kBAA6C,CAAA;IAE7F,OAAO;QACL,GAAG,MAAM;QACT,IAAI,EAAE;YACJ,GAAG,MAAM,CAAC,IAAI;YACd,MAAM,EAAE;gBACN,GAAG,WAAW;gBACd,GAAG,cAAc;aAClB;SACF;KACY,CAAA;AACjB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/endpoints/styles.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/endpoints/styles.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAqF7C;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CA2DvE;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,qBAAqB,CAAA"}
|
package/dist/endpoints/styles.js
CHANGED
|
@@ -3,14 +3,15 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Compiles and serves CSS for the editor iframe.
|
|
5
5
|
* Uses the consumer's PostCSS/Tailwind installation via peer dependencies.
|
|
6
|
+
* Loads the project's postcss.config.js for proper plugin configuration.
|
|
6
7
|
*/
|
|
7
8
|
import { readFileSync, statSync, existsSync } from 'fs';
|
|
8
9
|
import { join } from 'path';
|
|
9
10
|
const cssCache = new Map();
|
|
10
11
|
/**
|
|
11
|
-
* Compile CSS using PostCSS with
|
|
12
|
-
*
|
|
13
|
-
*
|
|
12
|
+
* Compile CSS using PostCSS with the project's configuration
|
|
13
|
+
* Loads postcss.config.js from project root for proper plugin setup
|
|
14
|
+
* Falls back to minimal Tailwind-only config if no config file found
|
|
14
15
|
*/
|
|
15
16
|
async function compileCss(css, filePath) {
|
|
16
17
|
try {
|
|
@@ -24,23 +25,44 @@ async function compileCss(css, filePath) {
|
|
|
24
25
|
console.warn('[payload-puck] PostCSS not found. CSS will not be processed. Install postcss as a dependency.');
|
|
25
26
|
return css;
|
|
26
27
|
}
|
|
27
|
-
// Try
|
|
28
|
+
// Try to load the project's postcss.config.js using postcss-load-config
|
|
29
|
+
// This ensures all plugins (typography, etc.) are properly loaded
|
|
28
30
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
29
31
|
let processor;
|
|
32
|
+
let usedProjectConfig = false;
|
|
30
33
|
try {
|
|
31
|
-
|
|
32
|
-
|
|
34
|
+
// Dynamic import of postcss-load-config (optional peer dependency)
|
|
35
|
+
// This package is commonly installed alongside PostCSS
|
|
36
|
+
const loadConfigModule = await import(
|
|
37
|
+
/* webpackIgnore: true */
|
|
38
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
39
|
+
// @ts-ignore - optional dependency may not have types
|
|
40
|
+
'postcss-load-config');
|
|
41
|
+
const postcssLoadConfig = loadConfigModule.default;
|
|
42
|
+
// Load config from project root (where postcss.config.js lives)
|
|
43
|
+
const { plugins } = await postcssLoadConfig({}, process.cwd());
|
|
44
|
+
processor = postcss(plugins);
|
|
45
|
+
usedProjectConfig = true;
|
|
33
46
|
}
|
|
34
47
|
catch {
|
|
35
|
-
//
|
|
48
|
+
// postcss-load-config not available or no config found - this is fine
|
|
49
|
+
// Fall back to direct Tailwind import silently
|
|
50
|
+
// Try Tailwind v4 first (@tailwindcss/postcss)
|
|
36
51
|
try {
|
|
37
|
-
const tailwindcss = (await import(/* webpackIgnore: true */ 'tailwindcss')).default;
|
|
52
|
+
const tailwindcss = (await import(/* webpackIgnore: true */ '@tailwindcss/postcss')).default;
|
|
38
53
|
processor = postcss([tailwindcss]);
|
|
39
54
|
}
|
|
40
55
|
catch {
|
|
41
|
-
//
|
|
42
|
-
|
|
43
|
-
|
|
56
|
+
// Fall back to Tailwind v3 (tailwindcss)
|
|
57
|
+
try {
|
|
58
|
+
const tailwindcss = (await import(/* webpackIgnore: true */ 'tailwindcss')).default;
|
|
59
|
+
processor = postcss([tailwindcss]);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// No Tailwind available - just return the CSS as-is
|
|
63
|
+
console.warn('[payload-puck] No Tailwind CSS installation found. CSS will not be processed.');
|
|
64
|
+
return css;
|
|
65
|
+
}
|
|
44
66
|
}
|
|
45
67
|
}
|
|
46
68
|
const result = await processor.process(css, { from: filePath });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/endpoints/styles.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/endpoints/styles.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaField.d.ts","sourceRoot":"","sources":["../../src/fields/MediaField.tsx"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAqE,MAAM,OAAO,CAAA;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAOnD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;IAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAA;IAChD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;
|
|
1
|
+
{"version":3,"file":"MediaField.d.ts","sourceRoot":"","sources":["../../src/fields/MediaField.tsx"],"names":[],"mappings":"AAEA;;;;;GAKG;AAEH,OAAO,KAAqE,MAAM,OAAO,CAAA;AACzF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAOnD,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;IACnB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,cAAc,GAAG,IAAI,CAAA;IAC5B,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,KAAK,IAAI,CAAA;IAChD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAmaD,iBAAS,eAAe,CAAC,EACvB,KAAK,EACL,QAAQ,EACR,KAAK,EACL,QAAQ,EACR,WAA0B,GAC3B,EAAE,eAAe,2CA6mBjB;AAGD,eAAO,MAAM,UAAU,mDAAwB,CAAA;AAM/C;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE;IACvC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG,WAAW,CAAC,cAAc,GAAG,IAAI,CAAC,CAcrC"}
|
|
@@ -176,7 +176,9 @@ const styles = {
|
|
|
176
176
|
fontWeight: 500,
|
|
177
177
|
backgroundColor: 'transparent',
|
|
178
178
|
border: 'none',
|
|
179
|
-
|
|
179
|
+
borderBottomWidth: '2px',
|
|
180
|
+
borderBottomStyle: 'solid',
|
|
181
|
+
borderBottomColor: 'transparent',
|
|
180
182
|
cursor: 'pointer',
|
|
181
183
|
transition: 'color 0.15s, border-color 0.15s',
|
|
182
184
|
color: 'var(--theme-elevation-500)',
|
|
@@ -643,7 +645,7 @@ function MediaFieldInner({ value, onChange, label, readOnly, apiEndpoint = '/api
|
|
|
643
645
|
}, children: uploadState.uploading ? (_jsxs(_Fragment, { children: [_jsx(Loader2, { style: { ...styles.icon, marginRight: '8px', animation: 'spin 1s linear infinite' } }), "Uploading..."] })) : (_jsxs(_Fragment, { children: [_jsx(Upload, { style: { ...styles.icon, marginRight: '8px' } }), "Upload & Select"] })) }), _jsx("button", { type: "button", onClick: resetUploadState, disabled: uploadState.uploading, style: {
|
|
644
646
|
...styles.buttonOutline,
|
|
645
647
|
...(uploadState.uploading ? styles.buttonDisabled : {}),
|
|
646
|
-
}, children: "Cancel" })] })] })) : (_jsxs("div", { style: styles.dropZone, children: [_jsx(Image, { style: styles.dropZoneIcon }), _jsxs("label", { style: { cursor: 'pointer' }, children: [_jsx("
|
|
648
|
+
}, children: "Cancel" })] })] })) : (_jsxs("div", { style: styles.dropZone, children: [_jsx(Image, { style: styles.dropZoneIcon }), _jsxs("label", { style: { cursor: 'pointer' }, children: [_jsx("span", { style: styles.buttonPrimary, children: "Select Image" }), _jsx("input", { type: "file", accept: "image/*", onChange: handleFileSelect, style: styles.hiddenInput })] }), _jsx("p", { style: { marginTop: '8px', fontSize: '14px', color: 'var(--theme-elevation-500)' }, children: "Select an image file to upload" }), uploadState.error && (_jsx("div", { style: { ...styles.errorBox, marginTop: '16px' }, children: uploadState.error }))] })) })) : activeTab === 'url' ? (
|
|
647
649
|
/* URL Tab */
|
|
648
650
|
_jsx("div", { style: styles.uploadContainer, children: _jsxs("div", { style: styles.urlContainer, children: [_jsxs("div", { style: styles.urlIntro, children: [_jsx(Link, { style: styles.urlIcon }), _jsx("p", { style: { fontSize: '14px', color: 'var(--theme-elevation-500)' }, children: "Enter an image URL from an external source" })] }), _jsxs("div", { style: styles.inputGroup, children: [_jsx("label", { style: styles.inputLabel, htmlFor: "image-url", children: "Image URL" }), _jsx("input", { id: "image-url", type: "url", placeholder: "https://example.com/image.jpg", value: urlState.url, onChange: (e) => setUrlState((prev) => ({
|
|
649
651
|
...prev,
|