@pantheon-systems/puck-css 0.4.3 → 0.5.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 (202) 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/page-store.d.ts +4 -3
  20. package/dist/data/page-store.d.ts.map +1 -1
  21. package/dist/data/page-store.js +6 -6
  22. package/dist/data/page-store.js.map +1 -1
  23. package/dist/data/paths.js +1 -1
  24. package/dist/data/paths.js.map +1 -1
  25. package/dist/data/route-templates.js +1 -1
  26. package/dist/data/route-templates.js.map +1 -1
  27. package/dist/editor/P1PuckProvider.d.ts.map +1 -1
  28. package/dist/editor/P1PuckProvider.js +102 -17
  29. package/dist/editor/P1PuckProvider.js.map +1 -1
  30. package/dist/editor/plugin/P1Plugin.d.ts +12 -2
  31. package/dist/editor/plugin/P1Plugin.d.ts.map +1 -1
  32. package/dist/editor/plugin/P1Plugin.js +30 -9
  33. package/dist/editor/plugin/P1Plugin.js.map +1 -1
  34. package/dist/editor/plugin/createP1Overrides.d.ts +7 -0
  35. package/dist/editor/plugin/createP1Overrides.d.ts.map +1 -1
  36. package/dist/editor/plugin/createP1Overrides.js +72 -2
  37. package/dist/editor/plugin/createP1Overrides.js.map +1 -1
  38. package/dist/editor/useDocuments.d.ts +1 -0
  39. package/dist/editor/useDocuments.d.ts.map +1 -1
  40. package/dist/editor/useDocuments.js +15 -2
  41. package/dist/editor/useDocuments.js.map +1 -1
  42. package/dist/editor/useP1Editor.d.ts.map +1 -1
  43. package/dist/editor/useP1Editor.js +41 -23
  44. package/dist/editor/useP1Editor.js.map +1 -1
  45. package/dist/editor/useP1Plugin.d.ts +3 -1
  46. package/dist/editor/useP1Plugin.d.ts.map +1 -1
  47. package/dist/editor/useP1Plugin.js +2 -0
  48. package/dist/editor/useP1Plugin.js.map +1 -1
  49. package/dist/features/content-type-templates/editor/useTemplateScaffold.d.ts +3 -7
  50. package/dist/features/content-type-templates/editor/useTemplateScaffold.d.ts.map +1 -1
  51. package/dist/features/content-type-templates/editor/useTemplateScaffold.js +6 -14
  52. package/dist/features/content-type-templates/editor/useTemplateScaffold.js.map +1 -1
  53. package/dist/features/content-type-templates/hooks/useTemplateList.d.ts +3 -3
  54. package/dist/features/content-type-templates/hooks/useTemplateList.d.ts.map +1 -1
  55. package/dist/features/content-type-templates/hooks/useTemplateList.js +5 -3
  56. package/dist/features/content-type-templates/hooks/useTemplateList.js.map +1 -1
  57. package/dist/features/content-type-templates/index.d.ts +1 -1
  58. package/dist/features/content-type-templates/index.d.ts.map +1 -1
  59. package/dist/features/content-type-templates/index.js.map +1 -1
  60. package/dist/features/content-type-templates/permissions/createPuckPermissions.d.ts +8 -3
  61. package/dist/features/content-type-templates/permissions/createPuckPermissions.d.ts.map +1 -1
  62. package/dist/features/content-type-templates/permissions/createPuckPermissions.js +18 -27
  63. package/dist/features/content-type-templates/permissions/createPuckPermissions.js.map +1 -1
  64. package/dist/features/content-type-templates/stores/template-store.d.ts +4 -4
  65. package/dist/features/content-type-templates/stores/template-store.d.ts.map +1 -1
  66. package/dist/features/content-type-templates/stores/template-store.js +33 -10
  67. package/dist/features/content-type-templates/stores/template-store.js.map +1 -1
  68. package/dist/features/content-type-templates/types.d.ts +1 -88
  69. package/dist/features/content-type-templates/types.d.ts.map +1 -1
  70. package/dist/features/content-type-templates/ui/ActionBarPinButton.d.ts.map +1 -1
  71. package/dist/features/content-type-templates/ui/ActionBarPinButton.js +16 -34
  72. package/dist/features/content-type-templates/ui/ActionBarPinButton.js.map +1 -1
  73. package/dist/features/content-type-templates/ui/TemplateDetailsPanel.d.ts +24 -0
  74. package/dist/features/content-type-templates/ui/TemplateDetailsPanel.d.ts.map +1 -0
  75. package/dist/features/content-type-templates/ui/TemplateDetailsPanel.js +124 -0
  76. package/dist/features/content-type-templates/ui/TemplateDetailsPanel.js.map +1 -0
  77. package/dist/features/content-type-templates/ui/TemplateSelector.d.ts +2 -2
  78. package/dist/features/content-type-templates/ui/TemplateSelector.d.ts.map +1 -1
  79. package/dist/features/content-type-templates/validation/structural-validation.d.ts.map +1 -1
  80. package/dist/features/content-type-templates/validation/structural-validation.js +7 -4
  81. package/dist/features/content-type-templates/validation/structural-validation.js.map +1 -1
  82. package/dist/index.d.ts +3 -4
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +2 -3
  85. package/dist/index.js.map +1 -1
  86. package/dist/p1/editor/connect/connect-field-modal.d.ts.map +1 -1
  87. package/dist/p1/editor/connect/connect-field-modal.js +1 -1
  88. package/dist/p1/editor/connect/connect-field-modal.js.map +1 -1
  89. package/dist/p1/editor/remote-datasources/remote-datasource-explorer-plugin.d.ts.map +1 -1
  90. package/dist/p1/editor/remote-datasources/remote-datasource-explorer-plugin.js +91 -29
  91. package/dist/p1/editor/remote-datasources/remote-datasource-explorer-plugin.js.map +1 -1
  92. package/dist/p1/pages/index.d.ts +0 -10
  93. package/dist/p1/pages/index.d.ts.map +1 -1
  94. package/dist/p1/pages/index.js +0 -10
  95. package/dist/p1/pages/index.js.map +1 -1
  96. package/dist/pds/components/CreatePageModal.d.ts +109 -0
  97. package/dist/pds/components/CreatePageModal.d.ts.map +1 -0
  98. package/dist/pds/components/CreatePageModal.js +527 -0
  99. package/dist/pds/components/CreatePageModal.js.map +1 -0
  100. package/dist/pds/components/CreatePageModal.module.css +745 -0
  101. package/dist/pds/components/DocStateBadge.js +1 -1
  102. package/dist/pds/components/DocStateBadge.js.map +1 -1
  103. package/dist/pds/components/P1EditorHeader.d.ts +17 -5
  104. package/dist/pds/components/P1EditorHeader.d.ts.map +1 -1
  105. package/dist/pds/components/P1EditorHeader.js +32 -6
  106. package/dist/pds/components/P1EditorHeader.js.map +1 -1
  107. package/dist/pds/components/P1EditorSubheader.d.ts +7 -1
  108. package/dist/pds/components/P1EditorSubheader.d.ts.map +1 -1
  109. package/dist/pds/components/P1EditorSubheader.js +2 -2
  110. package/dist/pds/components/P1EditorSubheader.js.map +1 -1
  111. package/dist/pds/components/PageNavigator.d.ts +15 -4
  112. package/dist/pds/components/PageNavigator.d.ts.map +1 -1
  113. package/dist/pds/components/PageNavigator.js +23 -5
  114. package/dist/pds/components/PageNavigator.js.map +1 -1
  115. package/dist/pds/components/PageNavigator.module.css +29 -0
  116. package/dist/pds/components/WizardQuestion.d.ts +29 -0
  117. package/dist/pds/components/WizardQuestion.d.ts.map +1 -0
  118. package/dist/pds/components/WizardQuestion.js +57 -0
  119. package/dist/pds/components/WizardQuestion.js.map +1 -0
  120. package/dist/pds/utils/deriveLiveDocState.d.ts +18 -0
  121. package/dist/pds/utils/deriveLiveDocState.d.ts.map +1 -0
  122. package/dist/pds/utils/deriveLiveDocState.js +20 -0
  123. package/dist/pds/utils/deriveLiveDocState.js.map +1 -0
  124. package/dist/server.d.ts +1 -2
  125. package/dist/server.d.ts.map +1 -1
  126. package/dist/server.js +1 -3
  127. package/dist/server.js.map +1 -1
  128. package/package.json +4 -2
  129. package/src/pds/theme/PuckEditorTheme.css +3 -1
  130. package/src/pds/theme/PuckEditorTheme.test.ts +4 -3
  131. package/dist/features/content-type-templates/editor/useTemplateEditor.d.ts +0 -20
  132. package/dist/features/content-type-templates/editor/useTemplateEditor.d.ts.map +0 -1
  133. package/dist/features/content-type-templates/editor/useTemplateEditor.js +0 -62
  134. package/dist/features/content-type-templates/editor/useTemplateEditor.js.map +0 -1
  135. package/dist/features/content-type-templates/ui/TemplateManagerOverlay.d.ts +0 -18
  136. package/dist/features/content-type-templates/ui/TemplateManagerOverlay.d.ts.map +0 -1
  137. package/dist/features/content-type-templates/ui/TemplateManagerOverlay.js +0 -167
  138. package/dist/features/content-type-templates/ui/TemplateManagerOverlay.js.map +0 -1
  139. package/dist/features/content-type-templates/ui/TemplatePinPanel.d.ts +0 -18
  140. package/dist/features/content-type-templates/ui/TemplatePinPanel.d.ts.map +0 -1
  141. package/dist/features/content-type-templates/ui/TemplatePinPanel.js +0 -11
  142. package/dist/features/content-type-templates/ui/TemplatePinPanel.js.map +0 -1
  143. package/dist/features/content-type-templates/ui/dataToTemplate.d.ts +0 -25
  144. package/dist/features/content-type-templates/ui/dataToTemplate.d.ts.map +0 -1
  145. package/dist/features/content-type-templates/ui/dataToTemplate.js +0 -37
  146. package/dist/features/content-type-templates/ui/dataToTemplate.js.map +0 -1
  147. package/dist/p1/editor/json-tree.d.ts +0 -6
  148. package/dist/p1/editor/json-tree.d.ts.map +0 -1
  149. package/dist/p1/editor/json-tree.js +0 -64
  150. package/dist/p1/editor/json-tree.js.map +0 -1
  151. package/dist/p1/pages/add-override-for-template.d.ts +0 -4
  152. package/dist/p1/pages/add-override-for-template.d.ts.map +0 -1
  153. package/dist/p1/pages/add-override-for-template.js +0 -47
  154. package/dist/p1/pages/add-override-for-template.js.map +0 -1
  155. package/dist/p1/pages/conflict-resolution-panel.d.ts +0 -17
  156. package/dist/p1/pages/conflict-resolution-panel.d.ts.map +0 -1
  157. package/dist/p1/pages/conflict-resolution-panel.js +0 -74
  158. package/dist/p1/pages/conflict-resolution-panel.js.map +0 -1
  159. package/dist/p1/pages/content-type-template-list.d.ts +0 -7
  160. package/dist/p1/pages/content-type-template-list.d.ts.map +0 -1
  161. package/dist/p1/pages/content-type-template-list.js +0 -108
  162. package/dist/p1/pages/content-type-template-list.js.map +0 -1
  163. package/dist/p1/pages/create-content-type-form.d.ts +0 -7
  164. package/dist/p1/pages/create-content-type-form.d.ts.map +0 -1
  165. package/dist/p1/pages/create-content-type-form.js +0 -102
  166. package/dist/p1/pages/create-content-type-form.js.map +0 -1
  167. package/dist/p1/pages/create-page-form.d.ts +0 -9
  168. package/dist/p1/pages/create-page-form.d.ts.map +0 -1
  169. package/dist/p1/pages/create-page-form.js +0 -87
  170. package/dist/p1/pages/create-page-form.js.map +0 -1
  171. package/dist/p1/pages/create-template-form.d.ts +0 -7
  172. package/dist/p1/pages/create-template-form.d.ts.map +0 -1
  173. package/dist/p1/pages/create-template-form.js +0 -82
  174. package/dist/p1/pages/create-template-form.js.map +0 -1
  175. package/dist/p1/pages/delete-row-button.d.ts +0 -7
  176. package/dist/p1/pages/delete-row-button.d.ts.map +0 -1
  177. package/dist/p1/pages/delete-row-button.js +0 -23
  178. package/dist/p1/pages/delete-row-button.js.map +0 -1
  179. package/dist/p1/pages/hooks.d.ts +0 -10
  180. package/dist/p1/pages/hooks.d.ts.map +0 -1
  181. package/dist/p1/pages/hooks.js +0 -66
  182. package/dist/p1/pages/hooks.js.map +0 -1
  183. package/dist/p1/pages/migration-conflict-queue.d.ts +0 -8
  184. package/dist/p1/pages/migration-conflict-queue.d.ts.map +0 -1
  185. package/dist/p1/pages/migration-conflict-queue.js +0 -62
  186. package/dist/p1/pages/migration-conflict-queue.js.map +0 -1
  187. package/dist/p1/pages/migration-preview-panel.d.ts +0 -12
  188. package/dist/p1/pages/migration-preview-panel.d.ts.map +0 -1
  189. package/dist/p1/pages/migration-preview-panel.js +0 -157
  190. package/dist/p1/pages/migration-preview-panel.js.map +0 -1
  191. package/dist/p1/pages/migration-status-panel.d.ts +0 -7
  192. package/dist/p1/pages/migration-status-panel.d.ts.map +0 -1
  193. package/dist/p1/pages/migration-status-panel.js +0 -198
  194. package/dist/p1/pages/migration-status-panel.js.map +0 -1
  195. package/dist/p1/pages/structure-page.d.ts +0 -2
  196. package/dist/p1/pages/structure-page.d.ts.map +0 -1
  197. package/dist/p1/pages/structure-page.js +0 -103
  198. package/dist/p1/pages/structure-page.js.map +0 -1
  199. package/dist/p1/pages/structure-tabs.d.ts +0 -11
  200. package/dist/p1/pages/structure-tabs.d.ts.map +0 -1
  201. package/dist/p1/pages/structure-tabs.js +0 -45
  202. package/dist/p1/pages/structure-tabs.js.map +0 -1
@@ -0,0 +1,745 @@
1
+ /**
2
+ * CreatePageModal styles.
3
+ *
4
+ * A lightweight custom modal shell (backdrop + centered panel) styled with PDS
5
+ * design tokens, plus the single-screen content: starting-point cards, the
6
+ * title/slug fields, and the (disabled) Advanced panel. (PDS Modal is not used
7
+ * — see CreatePageModal.tsx.)
8
+ */
9
+
10
+ .backdrop {
11
+ position: fixed;
12
+ inset: 0;
13
+ z-index: 100000;
14
+ display: flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ padding: 24px;
18
+ background: var(--pds-color-overlay-subtle, rgba(15, 23, 42, 0.45));
19
+ }
20
+
21
+ .panel {
22
+ display: flex;
23
+ flex-direction: column;
24
+ width: 100%;
25
+ max-width: 860px;
26
+ max-height: 92vh;
27
+ overflow: hidden;
28
+ background: var(--pds-color-bg-default, oklch(1 0 0));
29
+ border-radius: var(--pds-border-radius-large, 12px);
30
+ box-shadow: var(--pds-box-shadow-l, 0 25px 50px -12px rgba(0, 0, 0, 0.25));
31
+ }
32
+
33
+ /* ---- Header ---- */
34
+
35
+ .header {
36
+ display: flex;
37
+ align-items: flex-start;
38
+ gap: 12px;
39
+ padding: 20px 24px;
40
+ }
41
+
42
+ .headerIcon {
43
+ display: inline-flex;
44
+ align-items: center;
45
+ justify-content: center;
46
+ width: 32px;
47
+ height: 32px;
48
+ font-size: 18px;
49
+ font-weight: 600;
50
+ color: var(--pds-color-text-interactive, oklch(0.55 0.18 256));
51
+ background: var(--pds-color-bg-interactive-subtle, oklch(0.95 0.03 256));
52
+ border-radius: var(--pds-border-radius-medium, 8px);
53
+ }
54
+
55
+ .headerText {
56
+ flex: 1;
57
+ }
58
+
59
+ .title {
60
+ margin: 0;
61
+ font-size: 18px;
62
+ font-weight: 600;
63
+ color: var(--pds-color-text-default, oklch(0.2 0 0));
64
+ }
65
+
66
+ .subtitle {
67
+ margin: 2px 0 0;
68
+ font-size: 13px;
69
+ color: var(--pds-color-text-subtle, oklch(0.5 0 0));
70
+ }
71
+
72
+ .closeButton {
73
+ display: inline-flex;
74
+ align-items: center;
75
+ justify-content: center;
76
+ width: 28px;
77
+ height: 28px;
78
+ font-size: 20px;
79
+ line-height: 1;
80
+ cursor: pointer;
81
+ color: var(--pds-color-text-subtle, oklch(0.5 0 0));
82
+ background: transparent;
83
+ border: none;
84
+ border-radius: var(--pds-border-radius-medium, 8px);
85
+ }
86
+
87
+ .closeButton:hover {
88
+ background: var(--pds-color-bg-subtle, oklch(0.97 0 0));
89
+ }
90
+
91
+ /* ---- Body ---- */
92
+
93
+ .body {
94
+ display: flex;
95
+ flex-direction: column;
96
+ gap: 20px;
97
+ padding: 0 24px 4px;
98
+ overflow: auto;
99
+ }
100
+
101
+ .startFrom {
102
+ margin: 0;
103
+ padding: 0;
104
+ border: none;
105
+ }
106
+
107
+ .sectionLabel {
108
+ display: block;
109
+ margin-bottom: 10px;
110
+ padding: 0;
111
+ font-size: 11px;
112
+ font-weight: 600;
113
+ letter-spacing: 0.06em;
114
+ text-transform: uppercase;
115
+ color: var(--pds-color-text-subtle, oklch(0.5 0 0));
116
+ }
117
+
118
+ .optionGrid {
119
+ display: grid;
120
+ grid-template-columns: repeat(4, 1fr);
121
+ gap: 12px;
122
+ }
123
+
124
+ @media (max-width: 719px) {
125
+ .optionGrid {
126
+ grid-template-columns: repeat(2, 1fr);
127
+ }
128
+ }
129
+
130
+ .optionButton {
131
+ display: flex;
132
+ flex-direction: column;
133
+ align-items: flex-start;
134
+ gap: 4px;
135
+ width: 100%;
136
+ height: 100%;
137
+ padding: 14px;
138
+ text-align: left;
139
+ cursor: pointer;
140
+ background: transparent;
141
+ border: 1px solid var(--pds-color-border-default, oklch(0.92 0 0));
142
+ border-radius: var(--pds-border-radius-medium, 8px);
143
+ transition: border-color 0.15s ease, background-color 0.15s ease;
144
+ }
145
+
146
+ .optionButton:hover:not(:disabled) {
147
+ border-color: var(--pds-color-border-interactive, oklch(0.55 0.18 256));
148
+ }
149
+
150
+ .optionButtonSelected {
151
+ border-color: var(--pds-color-border-interactive, oklch(0.55 0.18 256));
152
+ background: var(--pds-color-bg-subtle, oklch(0.97 0.02 256));
153
+ box-shadow: inset 0 0 0 1px var(--pds-color-border-interactive, oklch(0.55 0.18 256));
154
+ }
155
+
156
+ .optionButton:focus-visible {
157
+ outline: 2px solid var(--pds-color-border-interactive, oklch(0.55 0.18 256));
158
+ outline-offset: 2px;
159
+ }
160
+
161
+ .optionButton:disabled {
162
+ cursor: not-allowed;
163
+ opacity: 0.55;
164
+ }
165
+
166
+ .optionIcon {
167
+ display: inline-flex;
168
+ align-items: center;
169
+ justify-content: center;
170
+ width: 28px;
171
+ height: 28px;
172
+ margin-bottom: 8px;
173
+ border-radius: var(--pds-border-radius-medium, 8px);
174
+ /* Unselected: light blue icon on a subtle chip. */
175
+ color: var(--pds-color-fg-interactive-subtle, oklch(0.72 0.11 256));
176
+ background: var(--pds-color-bg-interactive-subtle, oklch(0.96 0.02 256));
177
+ }
178
+
179
+ .optionButtonSelected .optionIcon {
180
+ /* Selected: white icon on a deep-blue chip. */
181
+ color: var(--pds-color-fg-on-emphasis, oklch(1 0 0));
182
+ background: var(--pds-color-bg-interactive, oklch(0.55 0.18 256));
183
+ }
184
+
185
+ /* ---- Content types (shown when "Content type template" is selected) ---- */
186
+
187
+ .contentTypeGrid {
188
+ display: grid;
189
+ grid-template-columns: repeat(2, 1fr);
190
+ gap: 8px;
191
+ }
192
+
193
+ @media (max-width: 599px) {
194
+ .contentTypeGrid {
195
+ grid-template-columns: 1fr;
196
+ }
197
+ }
198
+
199
+ .contentTypeCard {
200
+ display: flex;
201
+ flex-direction: column;
202
+ gap: 3px;
203
+ padding: 12px 14px;
204
+ text-align: left;
205
+ cursor: pointer;
206
+ background: var(--pds-color-bg-default, oklch(1 0 0));
207
+ border: 1px solid var(--pds-color-border-default, oklch(0.92 0 0));
208
+ border-radius: var(--pds-border-radius-medium, 8px);
209
+ transition: border-color 0.15s ease, background-color 0.15s ease;
210
+ }
211
+
212
+ .contentTypeCard:hover {
213
+ border-color: var(--pds-color-border-interactive, oklch(0.55 0.18 256));
214
+ }
215
+
216
+ .contentTypeCard:focus-visible {
217
+ outline: 2px solid var(--pds-color-border-interactive, oklch(0.55 0.18 256));
218
+ outline-offset: 2px;
219
+ }
220
+
221
+ .contentTypeCardSelected {
222
+ border-color: var(--pds-color-border-interactive, oklch(0.55 0.18 256));
223
+ background: var(--pds-color-bg-interactive-subtle, oklch(0.96 0.02 256));
224
+ box-shadow: inset 0 0 0 1px var(--pds-color-border-interactive, oklch(0.55 0.18 256));
225
+ }
226
+
227
+ .contentTypeCardNew {
228
+ border-style: dashed;
229
+ background: transparent;
230
+ }
231
+
232
+ .contentTypeCardNew .contentTypeName {
233
+ color: var(--pds-color-text-interactive, oklch(0.55 0.18 256));
234
+ }
235
+
236
+ .contentTypeName {
237
+ font-size: 14px;
238
+ font-weight: 600;
239
+ color: var(--pds-color-text-default, oklch(0.2 0 0));
240
+ }
241
+
242
+ .contentTypeDescription {
243
+ font-size: 12px;
244
+ line-height: 1.35;
245
+ color: var(--pds-color-text-subtle, oklch(0.5 0 0));
246
+ }
247
+
248
+ .optionLabel {
249
+ font-size: 14px;
250
+ font-weight: 600;
251
+ color: var(--pds-color-text-default, oklch(0.2 0 0));
252
+ }
253
+
254
+ .optionDescription {
255
+ font-size: 12px;
256
+ color: var(--pds-color-text-subtle, oklch(0.5 0 0));
257
+ }
258
+
259
+ /* ---- Fields ---- */
260
+
261
+ .fields {
262
+ display: grid;
263
+ grid-template-columns: 1fr 1fr;
264
+ gap: 16px;
265
+ }
266
+
267
+ @media (max-width: 719px) {
268
+ .fields {
269
+ grid-template-columns: 1fr;
270
+ }
271
+ }
272
+
273
+ .field {
274
+ display: flex;
275
+ flex-direction: column;
276
+ gap: 6px;
277
+ }
278
+
279
+ .fieldFull {
280
+ grid-column: 1 / -1;
281
+ }
282
+
283
+ .fieldLabel {
284
+ font-size: 13px;
285
+ font-weight: 600;
286
+ color: var(--pds-color-text-default, oklch(0.2 0 0));
287
+ }
288
+
289
+ .required {
290
+ color: var(--pds-color-text-critical, oklch(0.55 0.2 25));
291
+ }
292
+
293
+ .backLink {
294
+ align-self: flex-start;
295
+ margin-bottom: 4px;
296
+ padding: 4px 0;
297
+ font-size: 14px;
298
+ font-weight: 600;
299
+ cursor: pointer;
300
+ color: var(--pds-color-text-interactive, oklch(0.55 0.18 256));
301
+ background: transparent;
302
+ border: none;
303
+ }
304
+
305
+ .input,
306
+ .textarea {
307
+ width: 100%;
308
+ padding: 8px 10px;
309
+ font-size: 14px;
310
+ color: var(--pds-color-text-default, oklch(0.2 0 0));
311
+ background: var(--pds-color-bg-default, oklch(1 0 0));
312
+ border: 1px solid var(--pds-color-border-default, oklch(0.92 0 0));
313
+ border-radius: var(--pds-border-radius-medium, 8px);
314
+ }
315
+
316
+ .textarea {
317
+ min-height: 64px;
318
+ resize: vertical;
319
+ }
320
+
321
+ .input:focus-visible,
322
+ .textarea:focus-visible {
323
+ outline: 2px solid var(--pds-color-border-interactive, oklch(0.55 0.18 256));
324
+ outline-offset: 1px;
325
+ }
326
+
327
+ .input:disabled,
328
+ .textarea:disabled {
329
+ cursor: not-allowed;
330
+ background: var(--pds-color-bg-subtle, oklch(0.97 0 0));
331
+ opacity: 0.7;
332
+ }
333
+
334
+ .slugWrap {
335
+ display: flex;
336
+ align-items: stretch;
337
+ border: 1px solid var(--pds-color-border-default, oklch(0.92 0 0));
338
+ border-radius: var(--pds-border-radius-medium, 8px);
339
+ overflow: hidden;
340
+ }
341
+
342
+ .slugPrefix {
343
+ display: inline-flex;
344
+ align-items: center;
345
+ padding: 8px 10px;
346
+ font-size: 13px;
347
+ color: var(--pds-color-text-subtle, oklch(0.5 0 0));
348
+ background: var(--pds-color-bg-subtle, oklch(0.97 0 0));
349
+ border-right: 1px solid var(--pds-color-border-default, oklch(0.92 0 0));
350
+ }
351
+
352
+ .slugInput {
353
+ flex: 1;
354
+ padding: 8px 10px;
355
+ font-size: 14px;
356
+ color: var(--pds-color-text-default, oklch(0.2 0 0));
357
+ background: transparent;
358
+ border: none;
359
+ }
360
+
361
+ .slugInput:focus-visible {
362
+ outline: none;
363
+ }
364
+
365
+ /* ---- Route builder (template flow) ---- */
366
+
367
+ /* No outer border/background — it's a composed URL, not a single field. */
368
+ .routeBuilder {
369
+ display: flex;
370
+ flex-wrap: wrap;
371
+ align-items: center;
372
+ gap: 2px;
373
+ font-size: 14px;
374
+ }
375
+
376
+ /* Row label for the Index/Detail routes in the collection flow. */
377
+ .routeLabel {
378
+ display: inline-block;
379
+ min-width: 86px;
380
+ font-size: 12px;
381
+ font-weight: 600;
382
+ color: var(--pds-color-text-default, oklch(0.2 0 0));
383
+ }
384
+
385
+ /* Fixed parts (domain + pattern statics) read as greyed, like the slug prefix. */
386
+ .routeSep,
387
+ .routeStatic {
388
+ color: var(--pds-color-text-subtle, oklch(0.5 0 0));
389
+ }
390
+
391
+ /* Only the user-typed params look like editable input fields. */
392
+ .routeInput {
393
+ min-width: 4ch;
394
+ padding: 6px 8px;
395
+ font-size: 14px;
396
+ color: var(--pds-color-text-default, oklch(0.2 0 0));
397
+ background: var(--pds-color-bg-default, oklch(1 0 0));
398
+ border: 1px solid var(--pds-color-border-default, oklch(0.92 0 0));
399
+ border-radius: var(--pds-border-radius-medium, 8px);
400
+ }
401
+
402
+ .routeInput:focus-visible {
403
+ outline: 2px solid var(--pds-color-border-interactive, oklch(0.55 0.18 256));
404
+ outline-offset: 1px;
405
+ }
406
+
407
+ .addParam {
408
+ padding: 2px 8px;
409
+ font-size: 13px;
410
+ font-weight: 600;
411
+ cursor: pointer;
412
+ color: var(--pds-color-text-interactive, oklch(0.55 0.18 256));
413
+ background: transparent;
414
+ border: 1px dashed var(--pds-color-border-interactive, oklch(0.55 0.18 256));
415
+ border-radius: 6px;
416
+ }
417
+
418
+ /* Each appended param is a chip so its remove (×) clearly belongs to it. */
419
+ .paramChip {
420
+ display: inline-flex;
421
+ align-items: center;
422
+ gap: 1px;
423
+ padding: 1px 4px 1px 6px;
424
+ background: var(--pds-color-bg-interactive-subtle, oklch(0.96 0.02 256));
425
+ border: 1px solid var(--pds-color-border-default, oklch(0.92 0 0));
426
+ border-radius: 6px;
427
+ }
428
+
429
+ .paramColon {
430
+ color: var(--pds-color-text-subtle, oklch(0.5 0 0));
431
+ }
432
+
433
+ .paramChipInput {
434
+ padding: 2px 2px;
435
+ font-size: 14px;
436
+ color: var(--pds-color-text-default, oklch(0.2 0 0));
437
+ background: transparent;
438
+ border: none;
439
+ }
440
+
441
+ .paramChipInput:focus-visible {
442
+ outline: none;
443
+ }
444
+
445
+ .paramChipRemove {
446
+ display: inline-flex;
447
+ align-items: center;
448
+ justify-content: center;
449
+ width: 16px;
450
+ height: 16px;
451
+ font-size: 13px;
452
+ line-height: 1;
453
+ cursor: pointer;
454
+ color: var(--pds-color-text-subtle, oklch(0.5 0 0));
455
+ background: transparent;
456
+ border: none;
457
+ border-radius: 4px;
458
+ }
459
+
460
+ .paramChipRemove:hover {
461
+ color: var(--pds-color-text-critical, oklch(0.55 0.2 25));
462
+ background: var(--pds-color-bg-default, oklch(1 0 0));
463
+ }
464
+
465
+
466
+ /* ---- Advanced ---- */
467
+
468
+ .advanced {
469
+ display: flex;
470
+ flex-direction: column;
471
+ gap: 12px;
472
+ }
473
+
474
+ .advancedToggle {
475
+ display: inline-flex;
476
+ align-items: center;
477
+ gap: 6px;
478
+ align-self: flex-start;
479
+ padding: 4px 0;
480
+ font-size: 14px;
481
+ font-weight: 600;
482
+ cursor: pointer;
483
+ color: var(--pds-color-text-interactive, oklch(0.55 0.18 256));
484
+ background: transparent;
485
+ border: none;
486
+ }
487
+
488
+ .advancedHint {
489
+ font-weight: 400;
490
+ color: var(--pds-color-text-subtle, oklch(0.5 0 0));
491
+ }
492
+
493
+ .advancedPanel {
494
+ display: flex;
495
+ flex-direction: column;
496
+ gap: 16px;
497
+ padding: 16px;
498
+ background: var(--pds-color-bg-subtle, oklch(0.98 0 0));
499
+ border: 1px solid var(--pds-color-border-default, oklch(0.92 0 0));
500
+ border-radius: var(--pds-border-radius-medium, 8px);
501
+ }
502
+
503
+ .segmented {
504
+ display: inline-flex;
505
+ align-self: flex-start;
506
+ padding: 2px;
507
+ background: var(--pds-color-bg-default, oklch(1 0 0));
508
+ border: 1px solid var(--pds-color-border-default, oklch(0.92 0 0));
509
+ border-radius: var(--pds-border-radius-medium, 8px);
510
+ }
511
+
512
+ .segmentedActive,
513
+ .segmentedOption {
514
+ padding: 6px 16px;
515
+ font-size: 13px;
516
+ font-weight: 600;
517
+ cursor: not-allowed;
518
+ border: none;
519
+ border-radius: 6px;
520
+ background: transparent;
521
+ }
522
+
523
+ .segmentedActive {
524
+ background: var(--pds-color-bg-emphasis, oklch(0.2 0 0));
525
+ color: var(--pds-color-text-on-emphasis, oklch(1 0 0));
526
+ }
527
+
528
+ .segmentedOption {
529
+ color: var(--pds-color-text-subtle, oklch(0.5 0 0));
530
+ }
531
+
532
+ .dynamicRoute {
533
+ display: flex;
534
+ gap: 12px;
535
+ }
536
+
537
+ .toggle {
538
+ position: relative;
539
+ flex: none;
540
+ width: 36px;
541
+ height: 20px;
542
+ cursor: pointer;
543
+ background: var(--pds-color-bg-subtle, oklch(0.9 0 0));
544
+ border: none;
545
+ border-radius: 999px;
546
+ transition: background-color 0.15s ease;
547
+ }
548
+
549
+ .toggle::after {
550
+ content: '';
551
+ position: absolute;
552
+ top: 2px;
553
+ left: 2px;
554
+ width: 16px;
555
+ height: 16px;
556
+ background: var(--pds-color-bg-default, oklch(1 0 0));
557
+ border-radius: 50%;
558
+ transition: transform 0.15s ease;
559
+ }
560
+
561
+ .toggleOn {
562
+ background: var(--pds-color-bg-interactive, oklch(0.55 0.18 256));
563
+ }
564
+
565
+ .toggleOn::after {
566
+ transform: translateX(16px);
567
+ }
568
+
569
+ /* No own frame — it's a section inside the single Advanced frame, set off by a
570
+ simple divider above. */
571
+ .collectionBuilder {
572
+ display: flex;
573
+ flex-direction: column;
574
+ gap: 14px;
575
+ padding-top: 14px;
576
+ border-top: 1px solid var(--pds-color-border-default, oklch(0.92 0 0));
577
+ }
578
+
579
+ .fieldHint {
580
+ font-size: 12px;
581
+ color: var(--pds-color-text-subtle, oklch(0.5 0 0));
582
+ }
583
+
584
+ /* Two-pane data-source workspace: pick configured sources (left) / add on the fly (right). */
585
+ .dsWorkspace {
586
+ display: grid;
587
+ grid-template-columns: 1fr 1fr;
588
+ gap: 16px;
589
+ }
590
+
591
+ @media (max-width: 560px) {
592
+ .dsWorkspace {
593
+ grid-template-columns: 1fr;
594
+ }
595
+ }
596
+
597
+ .dsPane {
598
+ display: flex;
599
+ flex-direction: column;
600
+ gap: 8px;
601
+ min-width: 0;
602
+ }
603
+
604
+ .dsChips {
605
+ display: flex;
606
+ flex-wrap: wrap;
607
+ gap: 6px;
608
+ }
609
+
610
+ .collectionSummary {
611
+ margin: 0;
612
+ font-size: 12px;
613
+ color: var(--pds-color-text-subtle, oklch(0.5 0 0));
614
+ }
615
+
616
+ /* Inline creation status / recap — read as the next message in the flow. */
617
+ .creating {
618
+ display: flex;
619
+ align-items: center;
620
+ gap: 8px;
621
+ margin-top: 8px;
622
+ font-size: 14px;
623
+ color: var(--pds-color-text-subtle, oklch(0.5 0 0));
624
+ }
625
+
626
+ .recap {
627
+ margin-top: 8px;
628
+ padding: 14px 16px;
629
+ border: 1px solid var(--pds-color-border-default, oklch(0.9 0 0));
630
+ border-radius: var(--pds-border-radius-md, 8px);
631
+ background: var(--pds-color-bg-subtle, oklch(0.98 0 0));
632
+ }
633
+
634
+ .recapLead {
635
+ margin: 0 0 8px;
636
+ font-size: 15px;
637
+ color: var(--pds-color-text-default, oklch(0.2 0 0));
638
+ }
639
+
640
+ .recapBody {
641
+ margin: 0 0 12px;
642
+ font-size: 14px;
643
+ line-height: 1.5;
644
+ color: var(--pds-color-text-default, oklch(0.3 0 0));
645
+ }
646
+
647
+ .recapRoutes {
648
+ margin: 0;
649
+ font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
650
+ font-size: 12px;
651
+ color: var(--pds-color-text-subtle, oklch(0.5 0 0));
652
+ }
653
+
654
+ .dynamicRouteLabel {
655
+ display: inline-flex;
656
+ align-items: center;
657
+ gap: 8px;
658
+ font-size: 14px;
659
+ font-weight: 600;
660
+ color: var(--pds-color-text-default, oklch(0.2 0 0));
661
+ }
662
+
663
+ .devBadge {
664
+ padding: 1px 6px;
665
+ font-size: 10px;
666
+ font-weight: 600;
667
+ letter-spacing: 0.04em;
668
+ text-transform: uppercase;
669
+ color: var(--pds-color-text-interactive, oklch(0.55 0.18 256));
670
+ background: var(--pds-color-bg-subtle, oklch(0.96 0.02 256));
671
+ border-radius: 4px;
672
+ }
673
+
674
+ .dynamicRouteDescription {
675
+ margin: 4px 0 0;
676
+ font-size: 12px;
677
+ color: var(--pds-color-text-subtle, oklch(0.5 0 0));
678
+ }
679
+
680
+ /* ---- Footer ---- */
681
+
682
+ .errorMessage {
683
+ font-size: 13px;
684
+ color: var(--pds-color-text-critical, oklch(0.55 0.2 25));
685
+ }
686
+
687
+ .footer {
688
+ display: flex;
689
+ align-items: center;
690
+ justify-content: flex-end;
691
+ gap: 12px;
692
+ padding: 16px 24px;
693
+ margin-top: 4px;
694
+ border-top: 1px solid var(--pds-color-border-default, oklch(0.92 0 0));
695
+ }
696
+
697
+
698
+ .footerActions {
699
+ display: flex;
700
+ gap: 8px;
701
+ }
702
+
703
+ .cancelButton,
704
+ .submitButton {
705
+ padding: 8px 16px;
706
+ font-size: 14px;
707
+ font-weight: 600;
708
+ cursor: pointer;
709
+ border-radius: var(--pds-border-radius-medium, 8px);
710
+ }
711
+
712
+ .cancelButton {
713
+ color: var(--pds-color-text-default, oklch(0.2 0 0));
714
+ background: var(--pds-color-bg-default, oklch(1 0 0));
715
+ border: 1px solid var(--pds-color-border-default, oklch(0.92 0 0));
716
+ }
717
+
718
+ .submitButton {
719
+ display: inline-flex;
720
+ align-items: center;
721
+ gap: 8px;
722
+ color: var(--pds-color-text-on-emphasis, oklch(1 0 0));
723
+ background: var(--pds-color-bg-emphasis, oklch(0.2 0 0));
724
+ border: 1px solid transparent;
725
+ }
726
+
727
+ .submitButton:disabled {
728
+ cursor: progress;
729
+ opacity: 0.7;
730
+ }
731
+
732
+ .spinner {
733
+ width: 14px;
734
+ height: 14px;
735
+ border: 2px solid color-mix(in oklch, currentColor 35%, transparent);
736
+ border-top-color: currentColor;
737
+ border-radius: 50%;
738
+ animation: create-page-spin 0.6s linear infinite;
739
+ }
740
+
741
+ @keyframes create-page-spin {
742
+ to {
743
+ transform: rotate(360deg);
744
+ }
745
+ }