@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.
Files changed (94) hide show
  1. package/README.md +178 -1
  2. package/dist/api/index.d.ts +1 -1
  3. package/dist/api/index.d.ts.map +1 -1
  4. package/dist/api/index.js +1 -1
  5. package/dist/api/index.js.map +1 -1
  6. package/dist/api/utils/mapRootProps.d.ts +19 -0
  7. package/dist/api/utils/mapRootProps.d.ts.map +1 -1
  8. package/dist/api/utils/mapRootProps.js +33 -0
  9. package/dist/api/utils/mapRootProps.js.map +1 -1
  10. package/dist/components/exports.d.ts +1 -0
  11. package/dist/components/exports.d.ts.map +1 -1
  12. package/dist/components/exports.js +4 -0
  13. package/dist/components/exports.js.map +1 -1
  14. package/dist/config/index.d.ts +1 -0
  15. package/dist/config/index.d.ts.map +1 -1
  16. package/dist/config/presets.js +2 -2
  17. package/dist/config/presets.js.map +1 -1
  18. package/dist/config/types.d.ts +111 -0
  19. package/dist/config/types.d.ts.map +1 -0
  20. package/dist/config/types.js +8 -0
  21. package/dist/config/types.js.map +1 -0
  22. package/dist/editor/PuckEditor.d.ts +20 -1
  23. package/dist/editor/PuckEditor.d.ts.map +1 -1
  24. package/dist/editor/PuckEditor.js +4 -2
  25. package/dist/editor/PuckEditor.js.map +1 -1
  26. package/dist/editor/PuckEditorImpl.client.d.ts +20 -1
  27. package/dist/editor/PuckEditorImpl.client.d.ts.map +1 -1
  28. package/dist/editor/PuckEditorImpl.client.js +17 -7
  29. package/dist/editor/PuckEditorImpl.client.js.map +1 -1
  30. package/dist/editor/components/DarkModeStyles.d.ts +30 -0
  31. package/dist/editor/components/DarkModeStyles.d.ts.map +1 -0
  32. package/dist/editor/components/DarkModeStyles.js +159 -0
  33. package/dist/editor/components/DarkModeStyles.js.map +1 -0
  34. package/dist/editor/components/HeaderActions.d.ts +13 -0
  35. package/dist/editor/components/HeaderActions.d.ts.map +1 -1
  36. package/dist/editor/components/HeaderActions.js +3 -2
  37. package/dist/editor/components/HeaderActions.js.map +1 -1
  38. package/dist/editor/components/IframeWrapper.d.ts +7 -0
  39. package/dist/editor/components/IframeWrapper.d.ts.map +1 -1
  40. package/dist/editor/components/IframeWrapper.js +15 -5
  41. package/dist/editor/components/IframeWrapper.js.map +1 -1
  42. package/dist/editor/components/PreviewModeToggle.d.ts +32 -0
  43. package/dist/editor/components/PreviewModeToggle.d.ts.map +1 -0
  44. package/dist/editor/components/PreviewModeToggle.js +67 -0
  45. package/dist/editor/components/PreviewModeToggle.js.map +1 -0
  46. package/dist/editor/hooks/useDarkMode.d.ts +37 -0
  47. package/dist/editor/hooks/useDarkMode.d.ts.map +1 -0
  48. package/dist/editor/hooks/useDarkMode.js +80 -0
  49. package/dist/editor/hooks/useDarkMode.js.map +1 -0
  50. package/dist/editor/index.d.ts +3 -0
  51. package/dist/editor/index.d.ts.map +1 -1
  52. package/dist/editor/index.js +3 -0
  53. package/dist/editor/index.js.map +1 -1
  54. package/dist/editor/utils/injectPageTreeFields.js +2 -2
  55. package/dist/editor/utils/injectPageTreeFields.js.map +1 -1
  56. package/dist/endpoints/styles.d.ts +1 -0
  57. package/dist/endpoints/styles.d.ts.map +1 -1
  58. package/dist/endpoints/styles.js +33 -11
  59. package/dist/endpoints/styles.js.map +1 -1
  60. package/dist/fields/MediaField.d.ts.map +1 -1
  61. package/dist/fields/MediaField.js +4 -2
  62. package/dist/fields/MediaField.js.map +1 -1
  63. package/dist/fields/PageSegmentField.d.ts +17 -0
  64. package/dist/fields/PageSegmentField.d.ts.map +1 -1
  65. package/dist/fields/PageSegmentField.js +106 -1
  66. package/dist/fields/PageSegmentField.js.map +1 -1
  67. package/dist/fields/index.d.ts +1 -1
  68. package/dist/fields/index.d.ts.map +1 -1
  69. package/dist/fields/index.js +1 -1
  70. package/dist/fields/index.js.map +1 -1
  71. package/dist/layouts/index.d.ts +1 -1
  72. package/dist/layouts/index.d.ts.map +1 -1
  73. package/dist/layouts/index.js +1 -1
  74. package/dist/layouts/index.js.map +1 -1
  75. package/dist/layouts/types.d.ts +14 -2
  76. package/dist/layouts/types.d.ts.map +1 -1
  77. package/dist/layouts/utils.d.ts +35 -0
  78. package/dist/layouts/utils.d.ts.map +1 -1
  79. package/dist/layouts/utils.js +37 -0
  80. package/dist/layouts/utils.js.map +1 -1
  81. package/dist/render/HybridPageRenderer.d.ts +46 -3
  82. package/dist/render/HybridPageRenderer.d.ts.map +1 -1
  83. package/dist/render/HybridPageRenderer.js +45 -0
  84. package/dist/render/HybridPageRenderer.js.map +1 -1
  85. package/dist/render/index.d.ts +3 -2
  86. package/dist/render/index.d.ts.map +1 -1
  87. package/dist/render/index.js +3 -1
  88. package/dist/render/index.js.map +1 -1
  89. package/dist/version.d.ts +1 -1
  90. package/dist/version.js +1 -1
  91. package/dist/views/PuckEditorView.d.ts.map +1 -1
  92. package/dist/views/PuckEditorView.js +14 -8
  93. package/dist/views/PuckEditorView.js.map +1 -1
  94. 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
- if (layoutConfig.isDark) {
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
- link.href = href;
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":"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"}
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"}
@@ -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;AAG9F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EACL,0BAA0B,EAC1B,KAAK,2BAA2B,EAChC,mBAAmB,EACnB,KAAK,wBAAwB,GAC9B,MAAM,oBAAoB,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"}
@@ -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';
@@ -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;AAE9F,UAAU;AACV,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAA;AACpD,OAAO,EACL,0BAA0B,EAE1B,mBAAmB,GAEpB,MAAM,oBAAoB,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 { createPageSegmentField } from '../../fields/PageSegmentField.js';
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: createPageSegmentField({ label: 'Page Segment' }),
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,sBAAsB,EAAE,MAAM,kCAAkC,CAAA;AACzE,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,sBAAsB,CAAC,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;QAC9D,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
+ {"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"}
@@ -3,6 +3,7 @@
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 type { PayloadHandler } from 'payload';
8
9
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/endpoints/styles.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AA+D7C;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CA2DvE;AAED;;GAEG;AACH,eAAO,MAAM,oBAAoB,qBAAqB,CAAA"}
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"}
@@ -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 Tailwind
12
- * Automatically detects Tailwind v4 vs v3
13
- * Uses dynamic imports to avoid bundling these optional peer dependencies
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 Tailwind v4 first (@tailwindcss/postcss)
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
- const tailwindcss = (await import(/* webpackIgnore: true */ '@tailwindcss/postcss')).default;
32
- processor = postcss([tailwindcss]);
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
- // Fall back to Tailwind v3 (tailwindcss)
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
- // No Tailwind available - just return the CSS as-is
42
- console.warn('[payload-puck] No Tailwind CSS installation found. CSS will not be processed.');
43
- return css;
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":"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"}
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;AAiaD,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"}
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
- borderBottom: '2px solid transparent',
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("button", { type: "button", 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' ? (
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,