@pantheon-systems/puck-css 0.4.4 → 0.6.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.
Files changed (205) hide show
  1. package/dist/auth/P1AuthProvider.d.ts +1 -0
  2. package/dist/auth/P1AuthProvider.d.ts.map +1 -1
  3. package/dist/auth/P1AuthProvider.js +9 -0
  4. package/dist/auth/P1AuthProvider.js.map +1 -1
  5. package/dist/auth/index.d.ts +1 -1
  6. package/dist/auth/index.d.ts.map +1 -1
  7. package/dist/auth/index.js +1 -1
  8. package/dist/auth/index.js.map +1 -1
  9. package/dist/core/types.d.ts +31 -4
  10. package/dist/core/types.d.ts.map +1 -1
  11. package/dist/data/dal/init.d.ts +7 -0
  12. package/dist/data/dal/init.d.ts.map +1 -1
  13. package/dist/data/dal/init.js +32 -0
  14. package/dist/data/dal/init.js.map +1 -1
  15. package/dist/data/dal/p1-store.d.ts +2 -0
  16. package/dist/data/dal/p1-store.d.ts.map +1 -1
  17. package/dist/data/dal/p1-store.js +14 -10
  18. package/dist/data/dal/p1-store.js.map +1 -1
  19. package/dist/data/fields.d.ts +12 -0
  20. package/dist/data/fields.d.ts.map +1 -0
  21. package/dist/data/fields.js +40 -0
  22. package/dist/data/fields.js.map +1 -0
  23. package/dist/data/page-store.d.ts +4 -3
  24. package/dist/data/page-store.d.ts.map +1 -1
  25. package/dist/data/page-store.js +6 -6
  26. package/dist/data/page-store.js.map +1 -1
  27. package/dist/data/paths.js +1 -1
  28. package/dist/data/paths.js.map +1 -1
  29. package/dist/editor/P1PuckProvider.d.ts.map +1 -1
  30. package/dist/editor/P1PuckProvider.js +102 -17
  31. package/dist/editor/P1PuckProvider.js.map +1 -1
  32. package/dist/editor/plugin/P1Plugin.d.ts +14 -2
  33. package/dist/editor/plugin/P1Plugin.d.ts.map +1 -1
  34. package/dist/editor/plugin/P1Plugin.js +31 -10
  35. package/dist/editor/plugin/P1Plugin.js.map +1 -1
  36. package/dist/editor/plugin/createP1Overrides.d.ts +7 -0
  37. package/dist/editor/plugin/createP1Overrides.d.ts.map +1 -1
  38. package/dist/editor/plugin/createP1Overrides.js +72 -2
  39. package/dist/editor/plugin/createP1Overrides.js.map +1 -1
  40. package/dist/editor/useDocuments.d.ts +1 -0
  41. package/dist/editor/useDocuments.d.ts.map +1 -1
  42. package/dist/editor/useDocuments.js +15 -2
  43. package/dist/editor/useDocuments.js.map +1 -1
  44. package/dist/editor/useP1Editor.d.ts.map +1 -1
  45. package/dist/editor/useP1Editor.js +41 -23
  46. package/dist/editor/useP1Editor.js.map +1 -1
  47. package/dist/editor/useP1Plugin.d.ts +5 -1
  48. package/dist/editor/useP1Plugin.d.ts.map +1 -1
  49. package/dist/editor/useP1Plugin.js +3 -0
  50. package/dist/editor/useP1Plugin.js.map +1 -1
  51. package/dist/features/content-type-templates/editor/useTemplateScaffold.d.ts +3 -7
  52. package/dist/features/content-type-templates/editor/useTemplateScaffold.d.ts.map +1 -1
  53. package/dist/features/content-type-templates/editor/useTemplateScaffold.js +6 -14
  54. package/dist/features/content-type-templates/editor/useTemplateScaffold.js.map +1 -1
  55. package/dist/features/content-type-templates/hooks/useTemplateList.d.ts +3 -3
  56. package/dist/features/content-type-templates/hooks/useTemplateList.d.ts.map +1 -1
  57. package/dist/features/content-type-templates/hooks/useTemplateList.js +5 -3
  58. package/dist/features/content-type-templates/hooks/useTemplateList.js.map +1 -1
  59. package/dist/features/content-type-templates/index.d.ts +1 -1
  60. package/dist/features/content-type-templates/index.d.ts.map +1 -1
  61. package/dist/features/content-type-templates/index.js.map +1 -1
  62. package/dist/features/content-type-templates/permissions/createPuckPermissions.d.ts +8 -3
  63. package/dist/features/content-type-templates/permissions/createPuckPermissions.d.ts.map +1 -1
  64. package/dist/features/content-type-templates/permissions/createPuckPermissions.js +18 -27
  65. package/dist/features/content-type-templates/permissions/createPuckPermissions.js.map +1 -1
  66. package/dist/features/content-type-templates/stores/template-store.d.ts +4 -4
  67. package/dist/features/content-type-templates/stores/template-store.d.ts.map +1 -1
  68. package/dist/features/content-type-templates/stores/template-store.js +33 -10
  69. package/dist/features/content-type-templates/stores/template-store.js.map +1 -1
  70. package/dist/features/content-type-templates/types.d.ts +1 -88
  71. package/dist/features/content-type-templates/types.d.ts.map +1 -1
  72. package/dist/features/content-type-templates/ui/ActionBarPinButton.d.ts.map +1 -1
  73. package/dist/features/content-type-templates/ui/ActionBarPinButton.js +16 -34
  74. package/dist/features/content-type-templates/ui/ActionBarPinButton.js.map +1 -1
  75. package/dist/features/content-type-templates/ui/TemplateDetailsPanel.d.ts +24 -0
  76. package/dist/features/content-type-templates/ui/TemplateDetailsPanel.d.ts.map +1 -0
  77. package/dist/features/content-type-templates/ui/TemplateDetailsPanel.js +124 -0
  78. package/dist/features/content-type-templates/ui/TemplateDetailsPanel.js.map +1 -0
  79. package/dist/features/content-type-templates/ui/TemplateSelector.d.ts +2 -2
  80. package/dist/features/content-type-templates/ui/TemplateSelector.d.ts.map +1 -1
  81. package/dist/features/content-type-templates/validation/structural-validation.d.ts.map +1 -1
  82. package/dist/features/content-type-templates/validation/structural-validation.js +7 -4
  83. package/dist/features/content-type-templates/validation/structural-validation.js.map +1 -1
  84. package/dist/index.d.ts +3 -4
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +2 -3
  87. package/dist/index.js.map +1 -1
  88. package/dist/p1/editor/connect/connect-field-modal.d.ts.map +1 -1
  89. package/dist/p1/editor/connect/connect-field-modal.js +1 -1
  90. package/dist/p1/editor/connect/connect-field-modal.js.map +1 -1
  91. package/dist/p1/editor/remote-datasources/remote-datasource-explorer-plugin.d.ts.map +1 -1
  92. package/dist/p1/editor/remote-datasources/remote-datasource-explorer-plugin.js +91 -29
  93. package/dist/p1/editor/remote-datasources/remote-datasource-explorer-plugin.js.map +1 -1
  94. package/dist/p1/pages/index.d.ts +0 -10
  95. package/dist/p1/pages/index.d.ts.map +1 -1
  96. package/dist/p1/pages/index.js +0 -10
  97. package/dist/p1/pages/index.js.map +1 -1
  98. package/dist/pds/components/CreatePageModal.d.ts +109 -0
  99. package/dist/pds/components/CreatePageModal.d.ts.map +1 -0
  100. package/dist/pds/components/CreatePageModal.js +527 -0
  101. package/dist/pds/components/CreatePageModal.js.map +1 -0
  102. package/dist/pds/components/CreatePageModal.module.css +745 -0
  103. package/dist/pds/components/DocStateBadge.js +1 -1
  104. package/dist/pds/components/DocStateBadge.js.map +1 -1
  105. package/dist/pds/components/P1EditorHeader.d.ts +22 -5
  106. package/dist/pds/components/P1EditorHeader.d.ts.map +1 -1
  107. package/dist/pds/components/P1EditorHeader.js +103 -9
  108. package/dist/pds/components/P1EditorHeader.js.map +1 -1
  109. package/dist/pds/components/P1EditorHeader.module.css +21 -1
  110. package/dist/pds/components/P1EditorSubheader.d.ts +7 -1
  111. package/dist/pds/components/P1EditorSubheader.d.ts.map +1 -1
  112. package/dist/pds/components/P1EditorSubheader.js +2 -2
  113. package/dist/pds/components/P1EditorSubheader.js.map +1 -1
  114. package/dist/pds/components/PageNavigator.d.ts +15 -4
  115. package/dist/pds/components/PageNavigator.d.ts.map +1 -1
  116. package/dist/pds/components/PageNavigator.js +23 -5
  117. package/dist/pds/components/PageNavigator.js.map +1 -1
  118. package/dist/pds/components/PageNavigator.module.css +29 -0
  119. package/dist/pds/components/WizardQuestion.d.ts +29 -0
  120. package/dist/pds/components/WizardQuestion.d.ts.map +1 -0
  121. package/dist/pds/components/WizardQuestion.js +57 -0
  122. package/dist/pds/components/WizardQuestion.js.map +1 -0
  123. package/dist/pds/utils/deriveLiveDocState.d.ts +18 -0
  124. package/dist/pds/utils/deriveLiveDocState.d.ts.map +1 -0
  125. package/dist/pds/utils/deriveLiveDocState.js +20 -0
  126. package/dist/pds/utils/deriveLiveDocState.js.map +1 -0
  127. package/dist/server.d.ts +1 -2
  128. package/dist/server.d.ts.map +1 -1
  129. package/dist/server.js +1 -3
  130. package/dist/server.js.map +1 -1
  131. package/package.json +13 -3
  132. package/src/pds/theme/PuckEditorTheme.css +3 -1
  133. package/src/pds/theme/PuckEditorTheme.test.ts +4 -3
  134. package/dist/features/content-type-templates/editor/useTemplateEditor.d.ts +0 -20
  135. package/dist/features/content-type-templates/editor/useTemplateEditor.d.ts.map +0 -1
  136. package/dist/features/content-type-templates/editor/useTemplateEditor.js +0 -62
  137. package/dist/features/content-type-templates/editor/useTemplateEditor.js.map +0 -1
  138. package/dist/features/content-type-templates/ui/TemplateManagerOverlay.d.ts +0 -18
  139. package/dist/features/content-type-templates/ui/TemplateManagerOverlay.d.ts.map +0 -1
  140. package/dist/features/content-type-templates/ui/TemplateManagerOverlay.js +0 -167
  141. package/dist/features/content-type-templates/ui/TemplateManagerOverlay.js.map +0 -1
  142. package/dist/features/content-type-templates/ui/TemplatePinPanel.d.ts +0 -18
  143. package/dist/features/content-type-templates/ui/TemplatePinPanel.d.ts.map +0 -1
  144. package/dist/features/content-type-templates/ui/TemplatePinPanel.js +0 -11
  145. package/dist/features/content-type-templates/ui/TemplatePinPanel.js.map +0 -1
  146. package/dist/features/content-type-templates/ui/dataToTemplate.d.ts +0 -25
  147. package/dist/features/content-type-templates/ui/dataToTemplate.d.ts.map +0 -1
  148. package/dist/features/content-type-templates/ui/dataToTemplate.js +0 -37
  149. package/dist/features/content-type-templates/ui/dataToTemplate.js.map +0 -1
  150. package/dist/p1/editor/json-tree.d.ts +0 -6
  151. package/dist/p1/editor/json-tree.d.ts.map +0 -1
  152. package/dist/p1/editor/json-tree.js +0 -64
  153. package/dist/p1/editor/json-tree.js.map +0 -1
  154. package/dist/p1/pages/add-override-for-template.d.ts +0 -4
  155. package/dist/p1/pages/add-override-for-template.d.ts.map +0 -1
  156. package/dist/p1/pages/add-override-for-template.js +0 -47
  157. package/dist/p1/pages/add-override-for-template.js.map +0 -1
  158. package/dist/p1/pages/conflict-resolution-panel.d.ts +0 -17
  159. package/dist/p1/pages/conflict-resolution-panel.d.ts.map +0 -1
  160. package/dist/p1/pages/conflict-resolution-panel.js +0 -74
  161. package/dist/p1/pages/conflict-resolution-panel.js.map +0 -1
  162. package/dist/p1/pages/content-type-template-list.d.ts +0 -7
  163. package/dist/p1/pages/content-type-template-list.d.ts.map +0 -1
  164. package/dist/p1/pages/content-type-template-list.js +0 -108
  165. package/dist/p1/pages/content-type-template-list.js.map +0 -1
  166. package/dist/p1/pages/create-content-type-form.d.ts +0 -7
  167. package/dist/p1/pages/create-content-type-form.d.ts.map +0 -1
  168. package/dist/p1/pages/create-content-type-form.js +0 -102
  169. package/dist/p1/pages/create-content-type-form.js.map +0 -1
  170. package/dist/p1/pages/create-page-form.d.ts +0 -9
  171. package/dist/p1/pages/create-page-form.d.ts.map +0 -1
  172. package/dist/p1/pages/create-page-form.js +0 -87
  173. package/dist/p1/pages/create-page-form.js.map +0 -1
  174. package/dist/p1/pages/create-template-form.d.ts +0 -7
  175. package/dist/p1/pages/create-template-form.d.ts.map +0 -1
  176. package/dist/p1/pages/create-template-form.js +0 -82
  177. package/dist/p1/pages/create-template-form.js.map +0 -1
  178. package/dist/p1/pages/delete-row-button.d.ts +0 -7
  179. package/dist/p1/pages/delete-row-button.d.ts.map +0 -1
  180. package/dist/p1/pages/delete-row-button.js +0 -23
  181. package/dist/p1/pages/delete-row-button.js.map +0 -1
  182. package/dist/p1/pages/hooks.d.ts +0 -10
  183. package/dist/p1/pages/hooks.d.ts.map +0 -1
  184. package/dist/p1/pages/hooks.js +0 -66
  185. package/dist/p1/pages/hooks.js.map +0 -1
  186. package/dist/p1/pages/migration-conflict-queue.d.ts +0 -8
  187. package/dist/p1/pages/migration-conflict-queue.d.ts.map +0 -1
  188. package/dist/p1/pages/migration-conflict-queue.js +0 -62
  189. package/dist/p1/pages/migration-conflict-queue.js.map +0 -1
  190. package/dist/p1/pages/migration-preview-panel.d.ts +0 -12
  191. package/dist/p1/pages/migration-preview-panel.d.ts.map +0 -1
  192. package/dist/p1/pages/migration-preview-panel.js +0 -157
  193. package/dist/p1/pages/migration-preview-panel.js.map +0 -1
  194. package/dist/p1/pages/migration-status-panel.d.ts +0 -7
  195. package/dist/p1/pages/migration-status-panel.d.ts.map +0 -1
  196. package/dist/p1/pages/migration-status-panel.js +0 -198
  197. package/dist/p1/pages/migration-status-panel.js.map +0 -1
  198. package/dist/p1/pages/structure-page.d.ts +0 -2
  199. package/dist/p1/pages/structure-page.d.ts.map +0 -1
  200. package/dist/p1/pages/structure-page.js +0 -103
  201. package/dist/p1/pages/structure-page.js.map +0 -1
  202. package/dist/p1/pages/structure-tabs.d.ts +0 -11
  203. package/dist/p1/pages/structure-tabs.d.ts.map +0 -1
  204. package/dist/p1/pages/structure-tabs.js +0 -45
  205. package/dist/p1/pages/structure-tabs.js.map +0 -1
@@ -0,0 +1,527 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ /**
3
+ * CreatePageModal
4
+ *
5
+ * The "Create a new page" modal, opened from the PageNavigator's "+ New page".
6
+ * Single-screen design: pick a starting point, name the page (which derives the
7
+ * URL slug), optionally open an Advanced panel, then "Create page".
8
+ *
9
+ * NOTE: This uses a lightweight custom modal shell (backdrop + panel) rather
10
+ * than the PDS `Modal`. The PDS v2 `Modal` (through alpha.16) calls
11
+ * `useOverlayContext()` on every render, which throws unless an
12
+ * `OverlayContextProvider` is an ancestor — but that provider is not exported
13
+ * from the package, making `Modal` unusable here. Interactive fields use native
14
+ * inputs (the PDS TextInput/Textarea are not usable in this context either) and
15
+ * are styled with PDS design tokens.
16
+ *
17
+ * Phase 1 scope:
18
+ * - Starting points: "Blank page" is active; "Content type template" and
19
+ * "Generate with AI" are disabled; "New page template" is admin-only and
20
+ * disabled. Later phases enable the rest.
21
+ * - Page title auto-derives the slug until the slug is edited manually.
22
+ * - Slug is sanitized (lowercase, no spaces, no special characters).
23
+ * - The Advanced panel is rendered as designed but fully disabled.
24
+ * - "Create page" creates the page via onCreateDocument(slug, title); the
25
+ * title is persisted into the new page's root.props.title (see useDocuments).
26
+ */
27
+ import React, { useState, useEffect, useCallback } from 'react';
28
+ import { createPortal } from 'react-dom';
29
+ import { WizardQuestion } from './WizardQuestion.js';
30
+ import styles from './CreatePageModal.module.css';
31
+ // Phase 1: only "blank" is enabled. The rest are placeholders for later phases.
32
+ const STARTING_POINTS = [
33
+ {
34
+ key: 'blank',
35
+ testId: 'create-page-option-blank',
36
+ label: 'Blank page',
37
+ description: 'Start with an empty canvas.',
38
+ enabled: true,
39
+ adminOnly: false,
40
+ },
41
+ {
42
+ key: 'content-type-template',
43
+ testId: 'create-page-option-content-type-template',
44
+ label: 'From page template',
45
+ description: 'Begin from a proven layout.',
46
+ enabled: true,
47
+ adminOnly: false,
48
+ },
49
+ {
50
+ key: 'generate-ai',
51
+ testId: 'create-page-option-generate-ai',
52
+ label: 'Generate with AI',
53
+ description: 'Describe it — AI drafts a first pass.',
54
+ enabled: true,
55
+ adminOnly: false,
56
+ },
57
+ {
58
+ key: 'plug-external-data',
59
+ testId: 'create-page-option-plug-external-data',
60
+ label: 'Plug external data',
61
+ description: 'Configure data sources and build pages from them.',
62
+ enabled: true,
63
+ adminOnly: false,
64
+ },
65
+ ];
66
+ // Inline icons (stroke = currentColor) so colors are driven by CSS and there's
67
+ // no dependency on PDS icon-name lookups.
68
+ const ICON_PROPS = {
69
+ width: 18,
70
+ height: 18,
71
+ viewBox: '0 0 24 24',
72
+ fill: 'none',
73
+ stroke: 'currentColor',
74
+ strokeWidth: 2,
75
+ strokeLinecap: 'round',
76
+ strokeLinejoin: 'round',
77
+ 'aria-hidden': true,
78
+ };
79
+ const OPTION_ICONS = {
80
+ blank: (_jsxs("svg", { ...ICON_PROPS, children: [_jsx("path", { d: "M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z" }), _jsx("polyline", { points: "14 2 14 8 20 8" })] })),
81
+ 'content-type-template': (_jsxs("svg", { ...ICON_PROPS, children: [_jsx("polygon", { points: "12 2 2 7 12 12 22 7 12 2" }), _jsx("polyline", { points: "2 17 12 22 22 17" }), _jsx("polyline", { points: "2 12 12 17 22 12" })] })),
82
+ 'generate-ai': (_jsx("svg", { ...ICON_PROPS, children: _jsx("path", { d: "m12 3-1.9 5.8a2 2 0 0 1-1.3 1.3L3 12l5.8 1.9a2 2 0 0 1 1.3 1.3L12 21l1.9-5.8a2 2 0 0 1 1.3-1.3L21 12l-5.8-1.9a2 2 0 0 1-1.3-1.3z" }) })),
83
+ 'plug-external-data': (_jsxs("svg", { ...ICON_PROPS, children: [_jsx("ellipse", { cx: "12", cy: "5", rx: "9", ry: "3" }), _jsx("path", { d: "M3 5v6c0 1.66 4 3 9 3s9-1.34 9-3V5" }), _jsx("path", { d: "M3 11v6c0 1.66 4 3 9 3s9-1.34 9-3v-6" })] })),
84
+ };
85
+ /**
86
+ * Validate a user-typed URL pattern for a new template. Rules: starts with `/`,
87
+ * each segment is static (`a-z0-9-`) or a param (`:name`), at least one param, and
88
+ * param names are unique. e.g. valid: "/blog/:year/:month/:slug" — invalid:
89
+ * "/blog", "blog/:x", "/:Bad", "/recipe/:p/test/:p" (duplicate param).
90
+ */
91
+ function isValidUrlPattern(pattern) {
92
+ if (!pattern.startsWith('/'))
93
+ return false;
94
+ const segments = pattern.split('/').filter(Boolean);
95
+ if (segments.length === 0)
96
+ return false;
97
+ const seenParams = new Set();
98
+ for (const seg of segments) {
99
+ if (seg.startsWith(':')) {
100
+ if (!/^:[a-z][a-z0-9]*$/.test(seg))
101
+ return false;
102
+ const name = seg.slice(1);
103
+ if (seenParams.has(name))
104
+ return false; // params must be unique
105
+ seenParams.add(name);
106
+ }
107
+ else if (!/^[a-z0-9-]+$/.test(seg)) {
108
+ return false;
109
+ }
110
+ }
111
+ return seenParams.size > 0;
112
+ }
113
+ /** Return a validation message for a URL pattern, or null when it's valid/empty. */
114
+ function getUrlPatternError(pattern) {
115
+ if (pattern.trim() === '')
116
+ return null;
117
+ // Allowed characters only: lowercase letters, digits, '-', '/', ':'.
118
+ if (/[^a-z0-9:/-]/.test(pattern)) {
119
+ return 'Special characters, upper case and spaces are not welcome.';
120
+ }
121
+ if (!isValidUrlPattern(pattern)) {
122
+ return 'Use “/static/:param” segments with at least one unique “:param”.';
123
+ }
124
+ return null;
125
+ }
126
+ /** Split a URL pattern into ordered segments (static text or `:param`). */
127
+ function parsePattern(pattern) {
128
+ return pattern
129
+ .split('/')
130
+ .filter(Boolean)
131
+ .map((seg) => seg.startsWith(':')
132
+ ? { type: 'param', value: seg.slice(1) }
133
+ : { type: 'static', value: seg });
134
+ }
135
+ /** Resolve a value for a pattern param: `:slug` uses the slug, others use `params`. */
136
+ function patternParamValue(name, slug, params) {
137
+ return name === 'slug' ? slug : (params[name] ?? '');
138
+ }
139
+ /** Build the concrete path for a URL pattern (no leading slash), filling params. */
140
+ function buildPatternPath(pattern, slug, params) {
141
+ return parsePattern(pattern)
142
+ .map((seg) => seg.type === 'static' ? seg.value : patternParamValue(seg.value, slug, params))
143
+ .join('/');
144
+ }
145
+ /** Whether every `:param` in the pattern has a non-empty value. */
146
+ function patternParamsFilled(pattern, slug, params) {
147
+ return parsePattern(pattern)
148
+ .filter((seg) => seg.type === 'param')
149
+ .every((seg) => patternParamValue(seg.value, slug, params).trim().length > 0);
150
+ }
151
+ /** Derive a slug from a free-text title: lowercase, hyphenated, no special chars. */
152
+ function slugify(value) {
153
+ return value
154
+ .toLowerCase()
155
+ .trim()
156
+ .replace(/[^a-z0-9\s-]/g, '')
157
+ .replace(/\s+/g, '-')
158
+ .replace(/-+/g, '-')
159
+ .replace(/^-+|-+$/g, '');
160
+ }
161
+ /** Sanitize a manually-typed slug: lowercase, spaces to hyphens, drop invalid chars. */
162
+ function sanitizeSlug(value) {
163
+ return value
164
+ .toLowerCase()
165
+ .replace(/\s+/g, '-')
166
+ .replace(/[^a-z0-9-]/g, '');
167
+ }
168
+ export function CreatePageModal({ open, onClose, onCreateDocument, siteHost, datasources = [], templates, onCreateTemplate, onNavigate, initialMode = 'page', }) {
169
+ const host = siteHost ?? (typeof window !== 'undefined' ? window.location.host : '');
170
+ const [selected, setSelected] = useState('blank');
171
+ const [contentType, setContentType] = useState(null);
172
+ const [params, setParams] = useState({});
173
+ // "New template" definition form (mocked create; opens the template editor later).
174
+ const [templateName, setTemplateName] = useState('');
175
+ const [templateLabel, setTemplateLabel] = useState('');
176
+ const [templateLabelEdited, setTemplateLabelEdited] = useState(false);
177
+ const [templateDescription, setTemplateDescription] = useState('');
178
+ const [templatePattern, setTemplatePattern] = useState('');
179
+ const [title, setTitle] = useState('');
180
+ const [slug, setSlug] = useState('');
181
+ const [slugEdited, setSlugEdited] = useState(false);
182
+ const [error, setError] = useState(null);
183
+ const [submitting, setSubmitting] = useState(false);
184
+ // "Plug external data" collection builder. Multi-select data sources; route
185
+ // params are derived from the union of the selected sources' inputs (shared
186
+ // name = join key). Sources can be added on the fly (mocked). The route is
187
+ // /<slug>/:<derived params>.
188
+ const [dataSourceMode, setDataSourceMode] = useState('');
189
+ const [pageStructure, setPageStructure] = useState('');
190
+ const [selectedDatasourceIds, setSelectedDatasourceIds] = useState([]);
191
+ const [customSources, setCustomSources] = useState([]);
192
+ const [newType, setNewType] = useState('https-json');
193
+ const [newName, setNewName] = useState('');
194
+ const [newUrl, setNewUrl] = useState('');
195
+ // After creating a collection, show a recap (index + dynamic page) instead of
196
+ // navigating straight to a single page.
197
+ const [recap, setRecap] = useState(null);
198
+ // Reset to a fresh state whenever the modal is closed.
199
+ useEffect(() => {
200
+ if (!open) {
201
+ setSelected('blank');
202
+ setContentType(null);
203
+ setParams({});
204
+ setTemplateName('');
205
+ setTemplateLabel('');
206
+ setTemplateLabelEdited(false);
207
+ setTemplateDescription('');
208
+ setTemplatePattern('');
209
+ setDataSourceMode('');
210
+ setPageStructure('');
211
+ setSelectedDatasourceIds([]);
212
+ setCustomSources([]);
213
+ setNewType('https-json');
214
+ setNewName('');
215
+ setNewUrl('');
216
+ setTitle('');
217
+ setSlug('');
218
+ setSlugEdited(false);
219
+ setError(null);
220
+ setSubmitting(false);
221
+ setRecap(null);
222
+ }
223
+ }, [open]);
224
+ // When opened in 'new-template' mode, jump straight to the New-template form
225
+ // (same state as "From page template" → "+ New template").
226
+ useEffect(() => {
227
+ if (open && initialMode === 'new-template') {
228
+ setSelected('content-type-template');
229
+ setContentType('new-template');
230
+ }
231
+ }, [open, initialMode]);
232
+ // Close on Escape while open.
233
+ useEffect(() => {
234
+ if (!open)
235
+ return;
236
+ function handleKeyDown(e) {
237
+ if (e.key === 'Escape')
238
+ onClose();
239
+ }
240
+ window.addEventListener('keydown', handleKeyDown);
241
+ return () => window.removeEventListener('keydown', handleKeyDown);
242
+ }, [open, onClose]);
243
+ const handleTitleChange = useCallback((e) => {
244
+ const next = e.target.value;
245
+ setTitle(next);
246
+ // Keep the slug in sync with the title until the user overrides it.
247
+ if (!slugEdited)
248
+ setSlug(slugify(next));
249
+ }, [slugEdited]);
250
+ const handleSlugChange = useCallback((e) => {
251
+ setSlug(sanitizeSlug(e.target.value));
252
+ setSlugEdited(true);
253
+ }, []);
254
+ const handleTemplateNameChange = useCallback((e) => {
255
+ const next = e.target.value;
256
+ setTemplateName(next);
257
+ // Label mirrors Name until the user edits the Label.
258
+ if (!templateLabelEdited)
259
+ setTemplateLabel(next);
260
+ }, [templateLabelEdited]);
261
+ const handleTemplateLabelChange = useCallback((e) => {
262
+ setTemplateLabel(e.target.value);
263
+ setTemplateLabelEdited(true);
264
+ }, []);
265
+ const toggleSource = useCallback((id) => {
266
+ setSelectedDatasourceIds((prev) => prev.includes(id) ? prev.filter((x) => x !== id) : [...prev, id]);
267
+ }, []);
268
+ // Mocked on-the-fly source creation. Inputs are derived from `:param` tokens
269
+ // in the URL (the real version would persist + derive from the urlTemplate).
270
+ const addCustomSource = useCallback(() => {
271
+ const name = newName.trim();
272
+ const id = name.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '');
273
+ if (!id)
274
+ return;
275
+ const derived = [
276
+ ...new Set((newUrl.match(/:([a-z][a-z0-9]*)/gi) ?? []).map((t) => t.slice(1).toLowerCase())),
277
+ ];
278
+ // Every source needs at least one param to identify the record. If the URL
279
+ // declares none, default to "<name>Id" so the route still has a key.
280
+ const inputs = derived.length ? derived : [`${id.replace(/-/g, '')}Id`];
281
+ setCustomSources((prev) => prev.some((s) => s.id === id) ? prev : [...prev, { id, label: name, inputs }]);
282
+ setSelectedDatasourceIds((prev) => (prev.includes(id) ? prev : [...prev, id]));
283
+ setNewName('');
284
+ setNewUrl('');
285
+ }, [newName, newUrl]);
286
+ const handleSubmit = useCallback(async (e) => {
287
+ e.preventDefault();
288
+ // "New template" screen: create the template via the real API, then open
289
+ // its editor (template mode at _registry/templates/<name>) and close.
290
+ if (contentType === 'new-template') {
291
+ const name = slugify(templateName);
292
+ const label = templateLabel.trim();
293
+ const pattern = templatePattern.trim();
294
+ if (!onCreateTemplate ||
295
+ submitting ||
296
+ !name ||
297
+ !label ||
298
+ getUrlPatternError(templatePattern)) {
299
+ return;
300
+ }
301
+ setSubmitting(true);
302
+ setError(null);
303
+ try {
304
+ const templateParams = { name, label };
305
+ if (templateDescription.trim())
306
+ templateParams.description = templateDescription.trim();
307
+ if (pattern)
308
+ templateParams.defaultUrlPattern = pattern;
309
+ const created = await onCreateTemplate(templateParams);
310
+ const createdName = (created && 'name' in created ? created.name : undefined) ?? name;
311
+ onNavigate?.(`_registry/templates/${createdName}`);
312
+ onClose();
313
+ }
314
+ catch (err) {
315
+ setError(err instanceof Error ? err.message : 'Failed to create template');
316
+ setSubmitting(false);
317
+ }
318
+ return;
319
+ }
320
+ const finalSlug = slug.trim();
321
+ if (!finalSlug || submitting)
322
+ return;
323
+ // Plug external data. "Everything on one page" → a single page that lists
324
+ // all items. "Index + detail" → an index page plus a dynamic per-item page
325
+ // at /<slug>/:<params>, then a recap.
326
+ if (selected === 'plug-external-data') {
327
+ if (!pageStructure)
328
+ return;
329
+ setSubmitting(true);
330
+ setError(null);
331
+ try {
332
+ if (pageStructure === 'single') {
333
+ await onCreateDocument(finalSlug, title.trim());
334
+ onNavigate?.(finalSlug);
335
+ onClose();
336
+ return;
337
+ }
338
+ const sources = [...datasources, ...customSources].filter((s) => selectedDatasourceIds.includes(s.id));
339
+ const paramNames = [...new Set(sources.flatMap((s) => s.inputs ?? []))];
340
+ // A collection needs a per-item param for its detail page; refuse to
341
+ // create a paramless "collection" (the button is disabled for this too).
342
+ if (paramNames.length === 0) {
343
+ setSubmitting(false);
344
+ return;
345
+ }
346
+ await onCreateDocument(finalSlug, title.trim());
347
+ const dynamicPath = `/${finalSlug}${paramNames
348
+ .map((p) => `/:${p}`)
349
+ .join('')}`;
350
+ await onCreateDocument(dynamicPath, title.trim());
351
+ setSubmitting(false);
352
+ setRecap({ indexPath: `/${finalSlug}`, dynamicPath });
353
+ }
354
+ catch (err) {
355
+ setError(err instanceof Error ? err.message : 'Failed to create pages');
356
+ setSubmitting(false);
357
+ }
358
+ return;
359
+ }
360
+ // Content-type template: build the path from the template's URL pattern,
361
+ // then create the page from that template — the chain scaffolds the
362
+ // template's components and binds templateId/version.
363
+ if (selected === 'content-type-template' &&
364
+ contentType &&
365
+ contentType !== 'new-template') {
366
+ const ct = (templates ?? []).find((t) => t.id === contentType);
367
+ const pattern = ct?.defaultUrlPattern ?? '';
368
+ const filled = pattern
369
+ ? patternParamsFilled(pattern, slug, params)
370
+ : slug.trim().length > 0;
371
+ if (!ct || submitting || !filled)
372
+ return;
373
+ const path = pattern ? buildPatternPath(pattern, slug, params) : slug.trim();
374
+ setSubmitting(true);
375
+ setError(null);
376
+ try {
377
+ await onCreateDocument(path, title.trim(), ct.id);
378
+ onNavigate?.(path);
379
+ onClose();
380
+ }
381
+ catch (err) {
382
+ setError(err instanceof Error ? err.message : 'Failed to create page');
383
+ setSubmitting(false);
384
+ }
385
+ return;
386
+ }
387
+ // Blank-page path. (Other tiles are mocked / handled above.)
388
+ if (selected !== 'blank')
389
+ return;
390
+ setSubmitting(true);
391
+ setError(null);
392
+ try {
393
+ await onCreateDocument(finalSlug, title.trim());
394
+ // Navigate to the new page, then close.
395
+ onNavigate?.(finalSlug);
396
+ onClose();
397
+ }
398
+ catch (err) {
399
+ setError(err instanceof Error ? err.message : 'Failed to create page');
400
+ setSubmitting(false);
401
+ }
402
+ }, [
403
+ contentType,
404
+ templateName,
405
+ templateLabel,
406
+ templatePattern,
407
+ templateDescription,
408
+ onCreateTemplate,
409
+ templates,
410
+ params,
411
+ selected,
412
+ slug,
413
+ title,
414
+ submitting,
415
+ pageStructure,
416
+ datasources,
417
+ customSources,
418
+ selectedDatasourceIds,
419
+ onNavigate,
420
+ onCreateDocument,
421
+ onClose,
422
+ ]);
423
+ const handleEditPage = useCallback((path) => {
424
+ onNavigate?.(path);
425
+ onClose();
426
+ }, [onNavigate, onClose]);
427
+ if (!open)
428
+ return null;
429
+ // TODO: gate `adminOnly` options behind the `isAdmin` prop once permission
430
+ // checks exist. For now every option is shown to everyone.
431
+ const visiblePoints = STARTING_POINTS;
432
+ // Content types come from the real templates (no built-in/fake list). Keyed by
433
+ // template id; the template's defaultUrlPattern drives the route inputs.
434
+ const contentTypeList = (templates ?? []).map((t) => ({
435
+ key: t.id,
436
+ label: t.label || t.name,
437
+ description: t.description ?? '',
438
+ urlPattern: t.defaultUrlPattern ?? '',
439
+ }));
440
+ // When a content type is chosen, its URL pattern drives the route inputs.
441
+ const selectedCt = selected === 'content-type-template'
442
+ ? (contentTypeList.find((c) => c.key === contentType) ?? null)
443
+ : null;
444
+ // The content-type flow can create once a type is picked and the route is
445
+ // defined: a template with a URL pattern needs its `:param`s (incl. `:slug`)
446
+ // filled; a template without a pattern needs a slug.
447
+ const canCreateContentType = selectedCt !== null &&
448
+ (selectedCt.urlPattern
449
+ ? patternParamsFilled(selectedCt.urlPattern, slug, params)
450
+ : slug.trim().length > 0);
451
+ // "New template" is a distinct screen within the modal.
452
+ const isTemplateScreen = contentType === 'new-template';
453
+ const templatePatternError = getUrlPatternError(templatePattern);
454
+ // "Create template" is enabled once Name + Label are set and the (optional)
455
+ // URL pattern is valid.
456
+ const canCreateTemplate = slugify(templateName).length > 0 &&
457
+ templateLabel.trim().length > 0 &&
458
+ !templatePatternError;
459
+ // "Plug external data" — the collection builder (data sources → child pages).
460
+ const isPlugExternalData = selected === 'plug-external-data';
461
+ // Page title + URL (at the top) show for Blank or once a content type is
462
+ // picked. The Plug-external-data flow asks for the title later — in its own
463
+ // naming step after the data source + structure questions.
464
+ const showPageFields = selected === 'blank' || selectedCt !== null;
465
+ // Collection builder derived state.
466
+ const availableSources = [...datasources, ...customSources];
467
+ const selectedSources = availableSources.filter((s) => selectedDatasourceIds.includes(s.id));
468
+ // Route params = union of the selected sources' inputs (shared name = join key).
469
+ const routeParamNames = [
470
+ ...new Set(selectedSources.flatMap((s) => s.inputs ?? [])),
471
+ ];
472
+ const collectionRoutePattern = `/${slug}${routeParamNames
473
+ .map((p) => `/:${p}`)
474
+ .join('')}`;
475
+ // A collection's detail page needs a per-item route param. A list-only source
476
+ // (e.g. swapi_list, no inputs) can't identify a single item, so "index +
477
+ // detail" is invalid until a per-item source is added.
478
+ const collectionNeedsParam = isPlugExternalData &&
479
+ pageStructure === 'collection' &&
480
+ selectedSources.length > 0 &&
481
+ routeParamNames.length === 0;
482
+ const content = (_jsx("div", { className: styles.backdrop, "data-testid": "create-page-modal", onClick: onClose, children: _jsxs("div", { className: styles.panel, role: "dialog", "aria-modal": "true", "aria-labelledby": "create-page-modal-title", onClick: (e) => e.stopPropagation(), children: [_jsxs("header", { className: styles.header, children: [_jsx("span", { className: styles.headerIcon, "aria-hidden": "true", children: "+" }), _jsxs("div", { className: styles.headerText, children: [_jsx("h2", { id: "create-page-modal-title", "data-testid": "create-page-modal-title", className: styles.title, children: isTemplateScreen ? 'Create a page template' : 'Create a new page' }), _jsx("p", { className: styles.subtitle, children: isTemplateScreen
483
+ ? 'Initiate a new page template, then define the layout and components used by pages of that type.'
484
+ : 'Pick a starting point, name it, and you’re editing.' })] }), _jsx("button", { type: "button", "data-testid": "create-page-modal-close", className: styles.closeButton, "aria-label": "Close", onClick: onClose, children: "\u00D7" })] }), _jsxs("form", { className: styles.body, onSubmit: handleSubmit, children: [!isTemplateScreen && (_jsxs("fieldset", { className: styles.startFrom, children: [_jsx("legend", { className: styles.sectionLabel, children: "Start from" }), _jsx("div", { className: styles.optionGrid, children: visiblePoints.map((point) => (_jsxs("button", { type: "button", "data-testid": point.testId, className: `${styles.optionButton}${selected === point.key ? ` ${styles.optionButtonSelected}` : ''}`, disabled: !point.enabled, "aria-pressed": selected === point.key, onClick: () => point.enabled && setSelected(point.key), children: [_jsx("span", { className: styles.optionIcon, children: OPTION_ICONS[point.key] }), _jsx("span", { className: styles.optionLabel, children: point.label }), _jsx("span", { className: styles.optionDescription, children: point.description })] }, point.key))) })] })), !isTemplateScreen && selected === 'content-type-template' && (_jsxs("fieldset", { "data-testid": "create-page-content-types", className: styles.startFrom, children: [_jsx("legend", { className: styles.sectionLabel, children: "Choose a content type" }), contentTypeList.length === 0 && (_jsx("p", { "data-testid": "create-page-content-types-empty", className: styles.fieldHint, children: "No Page type template configured." })), _jsxs("div", { className: styles.contentTypeGrid, children: [contentTypeList.map((ct) => (_jsxs("button", { type: "button", "data-testid": `create-page-content-type-${ct.key}`, className: `${styles.contentTypeCard}${contentType === ct.key ? ` ${styles.contentTypeCardSelected}` : ''}`, "aria-pressed": contentType === ct.key, onClick: () => setContentType(ct.key), children: [_jsx("span", { className: styles.contentTypeName, children: ct.label }), _jsx("span", { className: styles.contentTypeDescription, children: ct.description })] }, ct.key))), _jsxs("button", { type: "button", "data-testid": "create-page-content-type-new-template", className: `${styles.contentTypeCard} ${styles.contentTypeCardNew}${contentType === 'new-template'
485
+ ? ` ${styles.contentTypeCardSelected}`
486
+ : ''}`, "aria-pressed": contentType === 'new-template', onClick: () => setContentType('new-template'), children: [_jsx("span", { className: styles.contentTypeName, children: "\uFF0B New template" }), _jsx("span", { className: styles.contentTypeDescription, children: "Don\u2019t see the right one? Create a new template." })] })] })] })), contentType === 'new-template' ? (_jsxs(_Fragment, { children: [_jsx("button", { type: "button", "data-testid": "create-template-back", className: styles.backLink, onClick: () => setContentType(null), children: "\u2190 Back" }), _jsxs("div", { className: styles.fields, children: [_jsxs("div", { className: styles.field, children: [_jsxs("label", { htmlFor: "create-template-name", className: styles.fieldLabel, children: ["Name ", _jsx("span", { className: styles.required, children: "*" })] }), _jsx("input", { id: "create-template-name", type: "text", "data-testid": "create-template-name", className: styles.input, placeholder: "Blog", value: templateName, onChange: handleTemplateNameChange })] }), _jsxs("div", { className: styles.field, children: [_jsx("label", { htmlFor: "create-template-label", className: styles.fieldLabel, children: "Label" }), _jsx("input", { id: "create-template-label", type: "text", "data-testid": "create-template-label", className: styles.input, placeholder: "Blog Post", value: templateLabel, onChange: handleTemplateLabelChange })] }), _jsxs("div", { className: `${styles.field} ${styles.fieldFull}`, children: [_jsxs("label", { htmlFor: "create-template-description", className: styles.fieldLabel, children: ["Description ", _jsx("span", { className: styles.required, children: "*" })] }), _jsx("textarea", { id: "create-template-description", "data-testid": "create-template-description", className: styles.textarea, placeholder: "Standard structure for all blog posts", value: templateDescription, onChange: (e) => setTemplateDescription(e.target.value) })] }), _jsxs("div", { className: `${styles.field} ${styles.fieldFull}`, children: [_jsxs("label", { htmlFor: "create-template-pattern", className: styles.fieldLabel, children: ["Default URL pattern ", _jsx("span", { className: styles.required, children: "*" })] }), _jsx("input", { id: "create-template-pattern", type: "text", "data-testid": "create-template-pattern", className: styles.input, placeholder: "/blog/:year/:month/:slug", value: templatePattern, onChange: (e) => setTemplatePattern(e.target.value) }), templatePatternError && (_jsx("span", { "data-testid": "create-template-pattern-error", role: "alert", className: styles.errorMessage, children: templatePatternError }))] })] })] })) : showPageFields ? (_jsxs("div", { className: styles.fields, children: [_jsxs("div", { className: styles.field, children: [_jsx("label", { htmlFor: "create-page-title", className: styles.fieldLabel, children: "Page title" }), _jsx("input", { id: "create-page-title", type: "text", "data-testid": "create-page-title-input", className: styles.input, placeholder: "New page", value: title, onChange: handleTitleChange }), showPageFields && !slug.trim() && (_jsx("span", { "data-testid": "create-page-title-required", role: "alert", className: styles.errorMessage, children: "Add a page title \u2014 it sets this page\u2019s URL." }))] }), selectedCt && selectedCt.urlPattern ? (_jsxs("div", { className: styles.field, children: [_jsx("label", { className: styles.fieldLabel, children: "URL" }), _jsxs("div", { className: styles.routeBuilder, children: [_jsx("span", { className: styles.routeStatic, children: host }), parsePattern(selectedCt.urlPattern).map((seg, i) => (_jsxs(React.Fragment, { children: [_jsx("span", { className: styles.routeSep, children: "/" }), seg.type === 'static' ? (_jsx("span", { className: styles.routeStatic, children: seg.value })) : (_jsx("input", { type: "text", "data-testid": `create-page-param-${seg.value}`, className: styles.routeInput, placeholder: seg.value, "aria-label": seg.value, size: Math.max(seg.value.length, 4), value: seg.value === 'slug' ? slug : (params[seg.value] ?? ''), onChange: (e) => seg.value === 'slug'
487
+ ? handleSlugChange(e)
488
+ : setParams((prev) => ({
489
+ ...prev,
490
+ [seg.value]: sanitizeSlug(e.target.value),
491
+ })) }))] }, `${seg.type}-${seg.value}-${i}`)))] })] })) : isPlugExternalData ? null : (_jsxs("div", { className: styles.field, children: [_jsx("label", { htmlFor: "create-page-slug", className: styles.fieldLabel, children: "URL slug" }), _jsxs("div", { className: styles.slugWrap, children: [_jsx("span", { "data-testid": "create-page-slug-prefix", className: styles.slugPrefix, children: `${host} /` }), _jsx("input", { id: "create-page-slug", type: "text", "data-testid": "create-page-slug-input", className: styles.slugInput, placeholder: "new-page", value: slug, onChange: handleSlugChange })] })] }))] })) : selected === 'generate-ai' ? (_jsx("div", { className: styles.fields, children: _jsx("p", { "data-testid": "create-page-generate-ai-note", className: styles.fieldHint, children: "This feature is still in the works." }) })) : null, isPlugExternalData && (_jsxs("div", { "data-testid": "create-page-collection-builder", className: styles.collectionBuilder, children: [_jsx(WizardQuestion, { question: "Where\u2019s your data coming from?", options: [
492
+ { value: 'configured', label: 'Use a configured source' },
493
+ { value: 'new', label: 'Add a new one' },
494
+ ], value: dataSourceMode, onChange: (v) => setDataSourceMode(v) }), dataSourceMode === 'configured' && (_jsxs("div", { className: styles.dsPane, children: [_jsx("span", { className: styles.fieldLabel, children: "Select data source(s)" }), _jsxs("select", { "data-testid": "create-page-source-select", className: styles.input, value: "", onChange: (e) => {
495
+ if (e.target.value)
496
+ toggleSource(e.target.value);
497
+ }, disabled: availableSources.length === 0 ||
498
+ availableSources.every((s) => selectedDatasourceIds.includes(s.id)), children: [_jsx("option", { value: "", children: availableSources.length === 0
499
+ ? 'No data sources yet'
500
+ : 'Select a data source…' }), availableSources
501
+ .filter((s) => !selectedDatasourceIds.includes(s.id))
502
+ .map((s) => {
503
+ const srcParams = s.inputs ?? [];
504
+ return (_jsxs("option", { value: s.id, children: [s.label, srcParams.length
505
+ ? ` (${srcParams.map((i) => `:${i}`).join(' ')})`
506
+ : ''] }, s.id));
507
+ })] })] })), dataSourceMode === 'new' && (_jsxs("div", { className: styles.dsPane, children: [_jsx("span", { className: styles.fieldLabel, children: "Add a data source" }), _jsxs("select", { "data-testid": "create-page-new-type", className: styles.input, value: newType, onChange: (e) => setNewType(e.target.value), children: [_jsx("option", { value: "https-json", children: "JSON over HTTPS" }), _jsx("option", { value: "google-sheet", children: "Google Sheet" }), _jsx("option", { value: "other", children: "Other" })] }), _jsx("input", { type: "text", "data-testid": "create-page-new-name", className: styles.input, placeholder: "Name (e.g. recipes)", value: newName, onChange: (e) => setNewName(e.target.value) }), !newName.trim() && (_jsx("span", { "data-testid": "create-page-new-name-required", className: styles.fieldHint, children: "Enter a name to add this source." })), _jsx("input", { type: "text", "data-testid": "create-page-new-url", className: styles.input, placeholder: newType === 'google-sheet'
508
+ ? 'Google Sheet link'
509
+ : 'https://api.example.com/items/:id', value: newUrl, onChange: (e) => setNewUrl(e.target.value) }), _jsx("button", { type: "button", "data-testid": "create-page-add-source", className: styles.addParam, disabled: !newName.trim(), onClick: addCustomSource, children: "+ Add source" }), _jsx("p", { "data-testid": "create-page-add-source-note", className: styles.fieldHint, children: "You can only add simple, publicly available data sources here. For sources that need authentication or secrets, ask your developer to configure one programmatically." })] })), selectedSources.length > 0 && (_jsxs("div", { className: styles.field, children: [_jsx("span", { className: styles.fieldLabel, children: "Selected sources" }), _jsx("div", { className: styles.dsChips, children: selectedSources.map((s) => (_jsxs("span", { "data-testid": `create-page-selected-${s.id}`, className: styles.paramChip, children: [s.label, _jsx("button", { type: "button", "data-testid": `create-page-deselect-${s.id}`, className: styles.paramChipRemove, "aria-label": `Remove ${s.label}`, onClick: () => toggleSource(s.id), children: "\u00D7" })] }, s.id))) })] })), selectedSources.length > 0 && (_jsx(WizardQuestion, { question: "How should the pages be structured?", options: [
510
+ {
511
+ value: 'collection',
512
+ label: 'An index + a detail page per item',
513
+ },
514
+ { value: 'single', label: 'Everything on one page' },
515
+ ], value: pageStructure, onChange: (v) => setPageStructure(v) })), pageStructure !== '' && (_jsxs("div", { className: styles.field, children: [_jsx("label", { htmlFor: "create-page-title", className: styles.fieldLabel, children: pageStructure === 'collection' ? 'Index page title' : 'Page title' }), _jsx("input", { id: "create-page-title", type: "text", "data-testid": "create-page-title-input", className: styles.input, placeholder: "New page", value: title, onChange: handleTitleChange })] })), pageStructure === 'single' && (_jsxs("div", { className: styles.field, children: [_jsxs("span", { className: styles.fieldLabel, children: ["URL ", _jsx("span", { className: styles.required, children: "*" })] }), _jsxs("div", { "data-testid": "create-page-route-preview", className: styles.routeBuilder, children: [_jsx("span", { className: styles.routeStatic, children: host }), _jsx("span", { className: styles.routeSep, children: "/" }), _jsx("input", { type: "text", "data-testid": "create-page-route-slug", className: styles.routeInput, placeholder: "new-page", "aria-label": "URL slug", size: Math.max(slug.length, 8), value: slug, onChange: handleSlugChange })] })] })), pageStructure === 'collection' && (_jsxs("div", { className: styles.field, children: [_jsxs("span", { className: styles.fieldLabel, children: ["Routes ", _jsx("span", { className: styles.required, children: "*" })] }), _jsxs("div", { "data-testid": "create-page-route-index", className: styles.routeBuilder, children: [_jsx("span", { className: styles.routeLabel, children: "Index page" }), _jsx("span", { className: styles.routeStatic, children: host }), _jsx("span", { className: styles.routeSep, children: "/" }), _jsx("input", { type: "text", "data-testid": "create-page-route-slug", className: styles.routeInput, placeholder: "new-page", "aria-label": "URL slug", size: Math.max(slug.length, 8), value: slug, onChange: handleSlugChange })] }), _jsxs("div", { "data-testid": "create-page-route-detail", className: styles.routeBuilder, children: [_jsx("span", { className: styles.routeLabel, children: "Detail page" }), _jsx("span", { className: styles.routeStatic, children: host }), _jsx("span", { className: styles.routeSep, children: "/" }), _jsx("span", { className: styles.routeStatic, children: slug || 'new-page' }), routeParamNames.map((name) => (_jsxs(React.Fragment, { children: [_jsx("span", { className: styles.routeSep, children: "/" }), _jsxs("span", { "data-testid": `create-page-route-param-${name}`, className: styles.paramChip, children: [_jsx("span", { className: styles.paramColon, children: ":" }), name] })] }, name)))] })] })), collectionNeedsParam && (_jsxs("div", { "data-testid": "create-page-collection-needs-param", role: "alert", className: styles.errorMessage, children: ["This source lists items but can\u2019t identify a single one, so a detail page can\u2019t be generated. Add a per-item source (one with an ", _jsx("code", { children: ":id" }), "-style input), or choose \u201CEverything on one page\u201D."] })), pageStructure === 'collection' &&
516
+ selectedSources.length > 0 &&
517
+ !collectionNeedsParam && (_jsxs("p", { "data-testid": "create-page-collection-summary", className: styles.collectionSummary, children: ["Generates one page per item \u00B7", ' ', _jsx("code", { children: collectionRoutePattern }), " \u00B7 sources:", ' ', selectedSources.map((s) => s.id).join(', ')] })), submitting && (_jsxs("div", { "data-testid": "create-page-creating", className: styles.creating, children: [_jsx("span", { className: styles.spinner, "aria-hidden": "true" }), "Creating your pages\u2026"] })), recap && (_jsxs("div", { "data-testid": "create-page-recap", className: styles.recap, children: [_jsx("p", { className: styles.recapLead, children: _jsx("strong", { children: "Done \u2014 pages created." }) }), _jsxs("p", { className: styles.recapBody, children: ["We created an ", _jsx("strong", { children: "index page" }), " (place a list or search block there) and a ", _jsx("strong", { children: "detail page" }), " that renders your remote data \u2014 open either to build its layout."] }), _jsxs("p", { className: styles.recapRoutes, children: [_jsx("code", { children: recap.indexPath }), " \u00B7 ", _jsx("code", { children: recap.dynamicPath })] }), _jsxs("div", { className: styles.footerActions, children: [_jsx("button", { type: "button", "data-testid": "create-page-recap-edit-index", className: styles.cancelButton, onClick: () => handleEditPage(recap.indexPath), children: "Edit index page" }), _jsx("button", { type: "button", "data-testid": "create-page-recap-edit-dynamic", className: styles.submitButton, onClick: () => handleEditPage(recap.dynamicPath), children: "Edit detail page" })] })] }))] })), error && (_jsx("div", { "data-testid": "create-page-error", role: "alert", className: styles.errorMessage, children: error })), _jsx("footer", { className: styles.footer, children: _jsxs("div", { className: styles.footerActions, children: [_jsx("button", { type: "button", "data-testid": "create-page-cancel", className: styles.cancelButton, onClick: onClose, children: recap ? 'Done' : 'Cancel' }), !recap && !(isPlugExternalData && submitting) && (_jsx("button", { type: "submit", "data-testid": "create-page-submit", className: styles.submitButton, disabled: submitting ||
518
+ (isTemplateScreen
519
+ ? !canCreateTemplate
520
+ : isPlugExternalData
521
+ ? !pageStructure || !slug.trim() || collectionNeedsParam
522
+ : selectedCt
523
+ ? !canCreateContentType
524
+ : selected !== 'blank' || !slug.trim()), "aria-busy": submitting, children: submitting ? (_jsxs(_Fragment, { children: [_jsx("span", { className: styles.spinner, "aria-hidden": "true" }), "Creating\u2026"] })) : isTemplateScreen ? ('Create template') : isPlugExternalData && pageStructure === 'collection' ? ('+ Create pages') : ('+ Create page') }))] }) })] })] }) }));
525
+ return createPortal(content, document.body);
526
+ }
527
+ //# sourceMappingURL=CreatePageModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CreatePageModal.js","sourceRoot":"","sources":["../../../src/pds/components/CreatePageModal.tsx"],"names":[],"mappings":"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"}