@kywi-software/core 0.13.0 → 0.15.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 (508) hide show
  1. package/AGENT-PATTERNS.md +153 -17
  2. package/README.md +38 -12
  3. package/dist/admin/chrome.d.ts.map +1 -1
  4. package/dist/admin/chrome.js +57 -8
  5. package/dist/admin/chrome.js.map +1 -1
  6. package/dist/admin/field-components.d.ts.map +1 -1
  7. package/dist/admin/field-components.js +27 -1
  8. package/dist/admin/field-components.js.map +1 -1
  9. package/dist/admin/form-helpers.d.ts.map +1 -1
  10. package/dist/admin/form-helpers.js +6 -1
  11. package/dist/admin/form-helpers.js.map +1 -1
  12. package/dist/admin/index.d.ts +1 -1
  13. package/dist/admin/index.d.ts.map +1 -1
  14. package/dist/admin/index.js +1 -1
  15. package/dist/admin/index.js.map +1 -1
  16. package/dist/admin/layout-editor/chrome-env.d.ts +35 -0
  17. package/dist/admin/layout-editor/chrome-env.d.ts.map +1 -0
  18. package/dist/admin/layout-editor/chrome-env.js +13 -0
  19. package/dist/admin/layout-editor/chrome-env.js.map +1 -0
  20. package/dist/admin/layout-editor/component-actions.d.ts +58 -7
  21. package/dist/admin/layout-editor/component-actions.d.ts.map +1 -1
  22. package/dist/admin/layout-editor/component-actions.js +131 -5
  23. package/dist/admin/layout-editor/component-actions.js.map +1 -1
  24. package/dist/admin/layout-editor/component-fork.d.ts +4 -4
  25. package/dist/admin/layout-editor/component-fork.d.ts.map +1 -1
  26. package/dist/admin/layout-editor/component-fork.js +76 -10
  27. package/dist/admin/layout-editor/component-fork.js.map +1 -1
  28. package/dist/admin/layout-editor/component-picker-field.d.ts +17 -3
  29. package/dist/admin/layout-editor/component-picker-field.d.ts.map +1 -1
  30. package/dist/admin/layout-editor/component-picker-field.js +5 -2
  31. package/dist/admin/layout-editor/component-picker-field.js.map +1 -1
  32. package/dist/admin/layout-editor/drag-feedback.d.ts +25 -1
  33. package/dist/admin/layout-editor/drag-feedback.d.ts.map +1 -1
  34. package/dist/admin/layout-editor/drag-feedback.js +9 -0
  35. package/dist/admin/layout-editor/drag-feedback.js.map +1 -1
  36. package/dist/admin/layout-editor/drag-utils.d.ts +103 -5
  37. package/dist/admin/layout-editor/drag-utils.d.ts.map +1 -1
  38. package/dist/admin/layout-editor/drag-utils.js +131 -4
  39. package/dist/admin/layout-editor/drag-utils.js.map +1 -1
  40. package/dist/admin/layout-editor/editor-canvas.d.ts +11 -0
  41. package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
  42. package/dist/admin/layout-editor/editor-canvas.js +134 -20
  43. package/dist/admin/layout-editor/editor-canvas.js.map +1 -1
  44. package/dist/admin/layout-editor/editor-dialog.d.ts +58 -3
  45. package/dist/admin/layout-editor/editor-dialog.d.ts.map +1 -1
  46. package/dist/admin/layout-editor/editor-dialog.js +71 -9
  47. package/dist/admin/layout-editor/editor-dialog.js.map +1 -1
  48. package/dist/admin/layout-editor/editor-state.d.ts +119 -0
  49. package/dist/admin/layout-editor/editor-state.d.ts.map +1 -1
  50. package/dist/admin/layout-editor/editor-state.js +188 -6
  51. package/dist/admin/layout-editor/editor-state.js.map +1 -1
  52. package/dist/admin/layout-editor/editor-toolbar.d.ts +10 -1
  53. package/dist/admin/layout-editor/editor-toolbar.d.ts.map +1 -1
  54. package/dist/admin/layout-editor/editor-toolbar.js +2 -2
  55. package/dist/admin/layout-editor/editor-toolbar.js.map +1 -1
  56. package/dist/admin/layout-editor/editor.css +216 -8
  57. package/dist/admin/layout-editor/inline-text.d.ts +15 -1
  58. package/dist/admin/layout-editor/inline-text.d.ts.map +1 -1
  59. package/dist/admin/layout-editor/inline-text.js +30 -2
  60. package/dist/admin/layout-editor/inline-text.js.map +1 -1
  61. package/dist/admin/layout-editor/layout-editor.d.ts +21 -16
  62. package/dist/admin/layout-editor/layout-editor.d.ts.map +1 -1
  63. package/dist/admin/layout-editor/layout-editor.js +40 -17
  64. package/dist/admin/layout-editor/layout-editor.js.map +1 -1
  65. package/dist/admin/layout-editor/linked-component-notes.d.ts +88 -0
  66. package/dist/admin/layout-editor/linked-component-notes.d.ts.map +1 -0
  67. package/dist/admin/layout-editor/linked-component-notes.js +88 -0
  68. package/dist/admin/layout-editor/linked-component-notes.js.map +1 -0
  69. package/dist/admin/layout-editor/module-overlay.d.ts +23 -4
  70. package/dist/admin/layout-editor/module-overlay.d.ts.map +1 -1
  71. package/dist/admin/layout-editor/module-overlay.js +56 -10
  72. package/dist/admin/layout-editor/module-overlay.js.map +1 -1
  73. package/dist/admin/layout-editor/module-variant-container-config.d.ts.map +1 -1
  74. package/dist/admin/layout-editor/module-variant-container-config.js +9 -2
  75. package/dist/admin/layout-editor/module-variant-container-config.js.map +1 -1
  76. package/dist/admin/layout-editor/module-variant-container-panel.d.ts +75 -0
  77. package/dist/admin/layout-editor/module-variant-container-panel.d.ts.map +1 -0
  78. package/dist/admin/layout-editor/module-variant-container-panel.js +29 -0
  79. package/dist/admin/layout-editor/module-variant-container-panel.js.map +1 -0
  80. package/dist/admin/layout-editor/node-lookup.d.ts.map +1 -1
  81. package/dist/admin/layout-editor/node-lookup.js +33 -3
  82. package/dist/admin/layout-editor/node-lookup.js.map +1 -1
  83. package/dist/admin/layout-editor/overlay-shell.d.ts.map +1 -1
  84. package/dist/admin/layout-editor/overlay-shell.js +19 -4
  85. package/dist/admin/layout-editor/overlay-shell.js.map +1 -1
  86. package/dist/admin/layout-editor/props-panel.d.ts +28 -11
  87. package/dist/admin/layout-editor/props-panel.d.ts.map +1 -1
  88. package/dist/admin/layout-editor/props-panel.js +75 -125
  89. package/dist/admin/layout-editor/props-panel.js.map +1 -1
  90. package/dist/admin/layout-editor/section-variant-container-config.d.ts.map +1 -1
  91. package/dist/admin/layout-editor/section-variant-container-config.js +11 -2
  92. package/dist/admin/layout-editor/section-variant-container-config.js.map +1 -1
  93. package/dist/admin/layout-editor/use-chrome-flip.d.ts +99 -11
  94. package/dist/admin/layout-editor/use-chrome-flip.d.ts.map +1 -1
  95. package/dist/admin/layout-editor/use-chrome-flip.js +268 -97
  96. package/dist/admin/layout-editor/use-chrome-flip.js.map +1 -1
  97. package/dist/admin/layout-editor/use-component-connect.d.ts +13 -0
  98. package/dist/admin/layout-editor/use-component-connect.d.ts.map +1 -1
  99. package/dist/admin/layout-editor/use-component-connect.js +116 -20
  100. package/dist/admin/layout-editor/use-component-connect.js.map +1 -1
  101. package/dist/admin/layout-editor/use-component-fork.d.ts +49 -19
  102. package/dist/admin/layout-editor/use-component-fork.d.ts.map +1 -1
  103. package/dist/admin/layout-editor/use-component-fork.js +28 -19
  104. package/dist/admin/layout-editor/use-component-fork.js.map +1 -1
  105. package/dist/admin/layout-editor/use-component-library.d.ts +4 -4
  106. package/dist/admin/layout-editor/use-component-library.d.ts.map +1 -1
  107. package/dist/admin/layout-editor/use-component-library.js +1 -1
  108. package/dist/admin/layout-editor/use-component-library.js.map +1 -1
  109. package/dist/admin/layout-editor/use-editor-dnd.d.ts +10 -0
  110. package/dist/admin/layout-editor/use-editor-dnd.d.ts.map +1 -1
  111. package/dist/admin/layout-editor/use-editor-dnd.js +234 -14
  112. package/dist/admin/layout-editor/use-editor-dnd.js.map +1 -1
  113. package/dist/admin/layout-editor/variant-container-config.d.ts.map +1 -1
  114. package/dist/admin/layout-editor/variant-container-config.js +1 -1
  115. package/dist/admin/layout-editor/variant-container-config.js.map +1 -1
  116. package/dist/admin/layout-editor/variant-editor.d.ts +16 -15
  117. package/dist/admin/layout-editor/variant-editor.d.ts.map +1 -1
  118. package/dist/admin/layout-editor/variant-editor.js +16 -5
  119. package/dist/admin/layout-editor/variant-editor.js.map +1 -1
  120. package/dist/admin/primitives.d.ts.map +1 -1
  121. package/dist/admin/primitives.js +1 -1
  122. package/dist/admin/primitives.js.map +1 -1
  123. package/dist/admin/registry.d.ts +24 -2
  124. package/dist/admin/registry.d.ts.map +1 -1
  125. package/dist/admin/registry.js +27 -0
  126. package/dist/admin/registry.js.map +1 -1
  127. package/dist/admin/server.d.ts +10 -1
  128. package/dist/admin/server.d.ts.map +1 -1
  129. package/dist/admin/server.js +4 -1
  130. package/dist/admin/server.js.map +1 -1
  131. package/dist/admin/site-switcher.d.ts +16 -3
  132. package/dist/admin/site-switcher.d.ts.map +1 -1
  133. package/dist/admin/site-switcher.js +18 -3
  134. package/dist/admin/site-switcher.js.map +1 -1
  135. package/dist/admin/styles/admin.css +0 -3
  136. package/dist/admin/surface-matcher.d.ts +6 -2
  137. package/dist/admin/surface-matcher.d.ts.map +1 -1
  138. package/dist/admin/surface-matcher.js +42 -5
  139. package/dist/admin/surface-matcher.js.map +1 -1
  140. package/dist/admin/surfaces/account/account-password.d.ts +3 -0
  141. package/dist/admin/surfaces/account/account-password.d.ts.map +1 -0
  142. package/dist/admin/surfaces/account/account-password.js +58 -0
  143. package/dist/admin/surfaces/account/account-password.js.map +1 -0
  144. package/dist/admin/surfaces/components/components-data.d.ts +31 -11
  145. package/dist/admin/surfaces/components/components-data.d.ts.map +1 -1
  146. package/dist/admin/surfaces/components/components-data.js +17 -4
  147. package/dist/admin/surfaces/components/components-data.js.map +1 -1
  148. package/dist/admin/surfaces/components/components-list.d.ts.map +1 -1
  149. package/dist/admin/surfaces/components/components-list.js +20 -7
  150. package/dist/admin/surfaces/components/components-list.js.map +1 -1
  151. package/dist/admin/surfaces/components/definition-canvas.d.ts +11 -3
  152. package/dist/admin/surfaces/components/definition-canvas.d.ts.map +1 -1
  153. package/dist/admin/surfaces/components/definition-canvas.js +138 -17
  154. package/dist/admin/surfaces/components/definition-canvas.js.map +1 -1
  155. package/dist/admin/surfaces/dashboard/dashboard-index.d.ts.map +1 -1
  156. package/dist/admin/surfaces/dashboard/dashboard-index.js +2 -2
  157. package/dist/admin/surfaces/dashboard/dashboard-index.js.map +1 -1
  158. package/dist/admin/surfaces/layouts/layout-editor-client.d.ts.map +1 -1
  159. package/dist/admin/surfaces/layouts/layout-editor-client.js +12 -11
  160. package/dist/admin/surfaces/layouts/layout-editor-client.js.map +1 -1
  161. package/dist/admin/surfaces/login.d.ts.map +1 -1
  162. package/dist/admin/surfaces/login.js +13 -1
  163. package/dist/admin/surfaces/login.js.map +1 -1
  164. package/dist/admin/surfaces/menus/menu-editor.d.ts.map +1 -1
  165. package/dist/admin/surfaces/menus/menu-editor.js +17 -4
  166. package/dist/admin/surfaces/menus/menu-editor.js.map +1 -1
  167. package/dist/admin/surfaces/menus/menu-tree.d.ts +18 -4
  168. package/dist/admin/surfaces/menus/menu-tree.d.ts.map +1 -1
  169. package/dist/admin/surfaces/menus/menu-tree.js +18 -3
  170. package/dist/admin/surfaces/menus/menu-tree.js.map +1 -1
  171. package/dist/admin/surfaces/menus/menus-data.d.ts +18 -0
  172. package/dist/admin/surfaces/menus/menus-data.d.ts.map +1 -1
  173. package/dist/admin/surfaces/menus/menus-data.js +4 -0
  174. package/dist/admin/surfaces/menus/menus-data.js.map +1 -1
  175. package/dist/admin/surfaces/menus/menus-list.d.ts.map +1 -1
  176. package/dist/admin/surfaces/menus/menus-list.js +2 -12
  177. package/dist/admin/surfaces/menus/menus-list.js.map +1 -1
  178. package/dist/admin/surfaces/settings/admin-features.d.ts.map +1 -1
  179. package/dist/admin/surfaces/settings/admin-features.js +12 -1
  180. package/dist/admin/surfaces/settings/admin-features.js.map +1 -1
  181. package/dist/admin/surfaces/users/users-data.d.ts +16 -0
  182. package/dist/admin/surfaces/users/users-data.d.ts.map +1 -1
  183. package/dist/admin/surfaces/users/users-data.js +19 -0
  184. package/dist/admin/surfaces/users/users-data.js.map +1 -1
  185. package/dist/admin/surfaces/users/users-detail.d.ts.map +1 -1
  186. package/dist/admin/surfaces/users/users-detail.js +87 -6
  187. package/dist/admin/surfaces/users/users-detail.js.map +1 -1
  188. package/dist/admin/surfaces/users/users-new.d.ts.map +1 -1
  189. package/dist/admin/surfaces/users/users-new.js +9 -5
  190. package/dist/admin/surfaces/users/users-new.js.map +1 -1
  191. package/dist/admin/user-form.d.ts +13 -2
  192. package/dist/admin/user-form.d.ts.map +1 -1
  193. package/dist/admin/user-form.js +3 -2
  194. package/dist/admin/user-form.js.map +1 -1
  195. package/dist/api/admin-features-routes.js +2 -2
  196. package/dist/api/admin-features-routes.js.map +1 -1
  197. package/dist/api/audience-preview-routes.d.ts +7 -0
  198. package/dist/api/audience-preview-routes.d.ts.map +1 -1
  199. package/dist/api/audience-preview-routes.js +4 -4
  200. package/dist/api/audience-preview-routes.js.map +1 -1
  201. package/dist/api/audience-routes.d.ts +7 -0
  202. package/dist/api/audience-routes.d.ts.map +1 -1
  203. package/dist/api/audience-routes.js +21 -15
  204. package/dist/api/audience-routes.js.map +1 -1
  205. package/dist/api/audience-runtime-routes.d.ts +6 -0
  206. package/dist/api/audience-runtime-routes.d.ts.map +1 -1
  207. package/dist/api/audience-runtime-routes.js +38 -3
  208. package/dist/api/audience-runtime-routes.js.map +1 -1
  209. package/dist/api/auth-routes.d.ts.map +1 -1
  210. package/dist/api/auth-routes.js +33 -4
  211. package/dist/api/auth-routes.js.map +1 -1
  212. package/dist/api/auth.d.ts +1 -0
  213. package/dist/api/auth.d.ts.map +1 -1
  214. package/dist/api/auth.js +43 -3
  215. package/dist/api/auth.js.map +1 -1
  216. package/dist/api/bulk-routes.d.ts.map +1 -1
  217. package/dist/api/bulk-routes.js +7 -7
  218. package/dist/api/bulk-routes.js.map +1 -1
  219. package/dist/api/category-routes.js +3 -3
  220. package/dist/api/category-routes.js.map +1 -1
  221. package/dist/api/comment-routes.js +8 -8
  222. package/dist/api/comment-routes.js.map +1 -1
  223. package/dist/api/component-routes.d.ts +25 -0
  224. package/dist/api/component-routes.d.ts.map +1 -1
  225. package/dist/api/component-routes.js +41 -16
  226. package/dist/api/component-routes.js.map +1 -1
  227. package/dist/api/content-routes.js +13 -13
  228. package/dist/api/content-routes.js.map +1 -1
  229. package/dist/api/dashboard-routes.js +1 -1
  230. package/dist/api/dashboard-routes.js.map +1 -1
  231. package/dist/api/experiment-routes.d.ts +7 -0
  232. package/dist/api/experiment-routes.d.ts.map +1 -1
  233. package/dist/api/experiment-routes.js +8 -8
  234. package/dist/api/experiment-routes.js.map +1 -1
  235. package/dist/api/experiment-runtime-routes.d.ts +6 -0
  236. package/dist/api/experiment-runtime-routes.d.ts.map +1 -1
  237. package/dist/api/experiment-runtime-routes.js +47 -11
  238. package/dist/api/experiment-runtime-routes.js.map +1 -1
  239. package/dist/api/feed-routes.d.ts +2 -2
  240. package/dist/api/feed-routes.js +3 -3
  241. package/dist/api/feed-routes.js.map +1 -1
  242. package/dist/api/form-routes.js +4 -4
  243. package/dist/api/form-routes.js.map +1 -1
  244. package/dist/api/graphql/resolvers.d.ts +1 -1
  245. package/dist/api/graphql/resolvers.d.ts.map +1 -1
  246. package/dist/api/graphql/resolvers.js +68 -33
  247. package/dist/api/graphql/resolvers.js.map +1 -1
  248. package/dist/api/group-routes.js +6 -6
  249. package/dist/api/group-routes.js.map +1 -1
  250. package/dist/api/index.d.ts +10 -0
  251. package/dist/api/index.d.ts.map +1 -1
  252. package/dist/api/index.js +97 -7
  253. package/dist/api/index.js.map +1 -1
  254. package/dist/api/layout-routes.d.ts.map +1 -1
  255. package/dist/api/layout-routes.js +27 -3
  256. package/dist/api/layout-routes.js.map +1 -1
  257. package/dist/api/media-routes.d.ts.map +1 -1
  258. package/dist/api/media-routes.js +50 -26
  259. package/dist/api/media-routes.js.map +1 -1
  260. package/dist/api/menu-routes.d.ts +9 -1
  261. package/dist/api/menu-routes.d.ts.map +1 -1
  262. package/dist/api/menu-routes.js +44 -10
  263. package/dist/api/menu-routes.js.map +1 -1
  264. package/dist/api/nav-routes.d.ts +6 -0
  265. package/dist/api/nav-routes.d.ts.map +1 -1
  266. package/dist/api/nav-routes.js +24 -3
  267. package/dist/api/nav-routes.js.map +1 -1
  268. package/dist/api/openapi.d.ts.map +1 -1
  269. package/dist/api/openapi.js +68 -33
  270. package/dist/api/openapi.js.map +1 -1
  271. package/dist/api/password-gate.d.ts +23 -0
  272. package/dist/api/password-gate.d.ts.map +1 -0
  273. package/dist/api/password-gate.js +41 -0
  274. package/dist/api/password-gate.js.map +1 -0
  275. package/dist/api/password-reset-routes.d.ts.map +1 -1
  276. package/dist/api/password-reset-routes.js +13 -6
  277. package/dist/api/password-reset-routes.js.map +1 -1
  278. package/dist/api/search-routes.js +2 -2
  279. package/dist/api/search-routes.js.map +1 -1
  280. package/dist/api/section-template-routes.d.ts.map +1 -1
  281. package/dist/api/section-template-routes.js +35 -18
  282. package/dist/api/section-template-routes.js.map +1 -1
  283. package/dist/api/site-admin-routes.d.ts +10 -1
  284. package/dist/api/site-admin-routes.d.ts.map +1 -1
  285. package/dist/api/site-admin-routes.js +21 -1
  286. package/dist/api/site-admin-routes.js.map +1 -1
  287. package/dist/api/site-context.d.ts +35 -5
  288. package/dist/api/site-context.d.ts.map +1 -1
  289. package/dist/api/site-context.js +21 -6
  290. package/dist/api/site-context.js.map +1 -1
  291. package/dist/api/tag-routes.js +3 -3
  292. package/dist/api/tag-routes.js.map +1 -1
  293. package/dist/api/translation-routes.js +5 -5
  294. package/dist/api/translation-routes.js.map +1 -1
  295. package/dist/api/user-routes.d.ts +4 -0
  296. package/dist/api/user-routes.d.ts.map +1 -1
  297. package/dist/api/user-routes.js +240 -17
  298. package/dist/api/user-routes.js.map +1 -1
  299. package/dist/api/webhook-routes.js +5 -5
  300. package/dist/api/webhook-routes.js.map +1 -1
  301. package/dist/api/workflow-routes.js +8 -8
  302. package/dist/api/workflow-routes.js.map +1 -1
  303. package/dist/audiences/collectors/identity.d.ts +14 -1
  304. package/dist/audiences/collectors/identity.d.ts.map +1 -1
  305. package/dist/audiences/collectors/identity.js +16 -3
  306. package/dist/audiences/collectors/identity.js.map +1 -1
  307. package/dist/audiences/collectors/index.d.ts +12 -2
  308. package/dist/audiences/collectors/index.d.ts.map +1 -1
  309. package/dist/audiences/collectors/index.js +16 -5
  310. package/dist/audiences/collectors/index.js.map +1 -1
  311. package/dist/audiences/collectors/pinned-audience.d.ts +28 -2
  312. package/dist/audiences/collectors/pinned-audience.d.ts.map +1 -1
  313. package/dist/audiences/collectors/pinned-audience.js +35 -5
  314. package/dist/audiences/collectors/pinned-audience.js.map +1 -1
  315. package/dist/audiences/collectors/utm.d.ts +15 -1
  316. package/dist/audiences/collectors/utm.d.ts.map +1 -1
  317. package/dist/audiences/collectors/utm.js +16 -2
  318. package/dist/audiences/collectors/utm.js.map +1 -1
  319. package/dist/audiences/consent-config.d.ts +21 -0
  320. package/dist/audiences/consent-config.d.ts.map +1 -0
  321. package/dist/audiences/consent-config.js +15 -0
  322. package/dist/audiences/consent-config.js.map +1 -0
  323. package/dist/audiences/consent-startup.d.ts +39 -0
  324. package/dist/audiences/consent-startup.d.ts.map +1 -0
  325. package/dist/audiences/consent-startup.js +105 -0
  326. package/dist/audiences/consent-startup.js.map +1 -0
  327. package/dist/audiences/consent.d.ts +192 -0
  328. package/dist/audiences/consent.d.ts.map +1 -0
  329. package/dist/audiences/consent.js +322 -0
  330. package/dist/audiences/consent.js.map +1 -0
  331. package/dist/audiences/engine.d.ts +7 -0
  332. package/dist/audiences/engine.d.ts.map +1 -1
  333. package/dist/audiences/engine.js +6 -2
  334. package/dist/audiences/engine.js.map +1 -1
  335. package/dist/audiences/index.d.ts +3 -0
  336. package/dist/audiences/index.d.ts.map +1 -1
  337. package/dist/audiences/index.js +6 -0
  338. package/dist/audiences/index.js.map +1 -1
  339. package/dist/audiences/server-eval.d.ts +13 -1
  340. package/dist/audiences/server-eval.d.ts.map +1 -1
  341. package/dist/audiences/server-eval.js +18 -2
  342. package/dist/audiences/server-eval.js.map +1 -1
  343. package/dist/audiences/ssr.d.ts +18 -1
  344. package/dist/audiences/ssr.d.ts.map +1 -1
  345. package/dist/audiences/ssr.js +18 -1
  346. package/dist/audiences/ssr.js.map +1 -1
  347. package/dist/audiences/utm-persistence.d.ts +20 -7
  348. package/dist/audiences/utm-persistence.d.ts.map +1 -1
  349. package/dist/audiences/utm-persistence.js +20 -7
  350. package/dist/audiences/utm-persistence.js.map +1 -1
  351. package/dist/auth/roles.d.ts +11 -0
  352. package/dist/auth/roles.d.ts.map +1 -1
  353. package/dist/auth/roles.js +13 -0
  354. package/dist/auth/roles.js.map +1 -1
  355. package/dist/auth/tokens.d.ts +7 -0
  356. package/dist/auth/tokens.d.ts.map +1 -1
  357. package/dist/auth/tokens.js +24 -2
  358. package/dist/auth/tokens.js.map +1 -1
  359. package/dist/config/types.d.ts +50 -0
  360. package/dist/config/types.d.ts.map +1 -1
  361. package/dist/config/types.js.map +1 -1
  362. package/dist/config/validate.d.ts.map +1 -1
  363. package/dist/config/validate.js +3 -0
  364. package/dist/config/validate.js.map +1 -1
  365. package/dist/db/apply-snapshot.d.ts +18 -0
  366. package/dist/db/apply-snapshot.d.ts.map +1 -1
  367. package/dist/db/apply-snapshot.js +41 -16
  368. package/dist/db/apply-snapshot.js.map +1 -1
  369. package/dist/db/component-instance-queries.d.ts +79 -19
  370. package/dist/db/component-instance-queries.d.ts.map +1 -1
  371. package/dist/db/component-instance-queries.js +266 -83
  372. package/dist/db/component-instance-queries.js.map +1 -1
  373. package/dist/db/component-queries.d.ts +1 -16
  374. package/dist/db/component-queries.d.ts.map +1 -1
  375. package/dist/db/component-queries.js +7 -56
  376. package/dist/db/component-queries.js.map +1 -1
  377. package/dist/db/content-queries.d.ts.map +1 -1
  378. package/dist/db/content-queries.js +1 -2
  379. package/dist/db/content-queries.js.map +1 -1
  380. package/dist/db/extension-queries.d.ts +2 -2
  381. package/dist/db/feed-queries.d.ts +3 -3
  382. package/dist/db/index.d.ts +1 -0
  383. package/dist/db/index.d.ts.map +1 -1
  384. package/dist/db/index.js +1 -0
  385. package/dist/db/index.js.map +1 -1
  386. package/dist/db/layout-queries.d.ts +2 -1
  387. package/dist/db/layout-queries.d.ts.map +1 -1
  388. package/dist/db/layout-queries.js +3 -3
  389. package/dist/db/layout-queries.js.map +1 -1
  390. package/dist/db/menu-queries.d.ts +69 -5
  391. package/dist/db/menu-queries.d.ts.map +1 -1
  392. package/dist/db/menu-queries.js +120 -13
  393. package/dist/db/menu-queries.js.map +1 -1
  394. package/dist/db/section-template-queries.d.ts +62 -0
  395. package/dist/db/section-template-queries.d.ts.map +1 -0
  396. package/dist/db/section-template-queries.js +178 -0
  397. package/dist/db/section-template-queries.js.map +1 -0
  398. package/dist/db/site-plugin-queries.d.ts +2 -2
  399. package/dist/db/tree-queries.d.ts.map +1 -1
  400. package/dist/db/tree-queries.js +5 -0
  401. package/dist/db/tree-queries.js.map +1 -1
  402. package/dist/db/user-queries.d.ts +28 -1
  403. package/dist/db/user-queries.d.ts.map +1 -1
  404. package/dist/db/user-queries.js +49 -1
  405. package/dist/db/user-queries.js.map +1 -1
  406. package/dist/db/webhook-queries.d.ts +3 -3
  407. package/dist/db/workflow-queries.d.ts.map +1 -1
  408. package/dist/db/workflow-queries.js +5 -20
  409. package/dist/db/workflow-queries.js.map +1 -1
  410. package/dist/experiments/runtime.d.ts +21 -3
  411. package/dist/experiments/runtime.d.ts.map +1 -1
  412. package/dist/experiments/runtime.js +21 -3
  413. package/dist/experiments/runtime.js.map +1 -1
  414. package/dist/host/index.d.ts +1 -0
  415. package/dist/host/index.d.ts.map +1 -1
  416. package/dist/host/index.js +12 -0
  417. package/dist/host/index.js.map +1 -1
  418. package/dist/layout/component-refs.d.ts +90 -2
  419. package/dist/layout/component-refs.d.ts.map +1 -1
  420. package/dist/layout/component-refs.js +293 -16
  421. package/dist/layout/component-refs.js.map +1 -1
  422. package/dist/layout/index.d.ts +4 -3
  423. package/dist/layout/index.d.ts.map +1 -1
  424. package/dist/layout/index.js +3 -2
  425. package/dist/layout/index.js.map +1 -1
  426. package/dist/layout/legacy-variant-container.d.ts +123 -0
  427. package/dist/layout/legacy-variant-container.d.ts.map +1 -0
  428. package/dist/layout/legacy-variant-container.js +397 -0
  429. package/dist/layout/legacy-variant-container.js.map +1 -0
  430. package/dist/layout/module-permissions.d.ts.map +1 -1
  431. package/dist/layout/module-permissions.js +25 -1
  432. package/dist/layout/module-permissions.js.map +1 -1
  433. package/dist/layout/modules-extended.d.ts +28 -1
  434. package/dist/layout/modules-extended.d.ts.map +1 -1
  435. package/dist/layout/modules-extended.js +73 -1
  436. package/dist/layout/modules-extended.js.map +1 -1
  437. package/dist/layout/modules.d.ts.map +1 -1
  438. package/dist/layout/modules.js +9 -1
  439. package/dist/layout/modules.js.map +1 -1
  440. package/dist/layout/personalization.d.ts +83 -0
  441. package/dist/layout/personalization.d.ts.map +1 -1
  442. package/dist/layout/personalization.js +250 -4
  443. package/dist/layout/personalization.js.map +1 -1
  444. package/dist/layout/registry.d.ts.map +1 -1
  445. package/dist/layout/registry.js +20 -0
  446. package/dist/layout/registry.js.map +1 -1
  447. package/dist/layout/renderer.d.ts +29 -2
  448. package/dist/layout/renderer.d.ts.map +1 -1
  449. package/dist/layout/renderer.js +23 -6
  450. package/dist/layout/renderer.js.map +1 -1
  451. package/dist/layout/types.d.ts +17 -0
  452. package/dist/layout/types.d.ts.map +1 -1
  453. package/dist/layout/types.js +7 -0
  454. package/dist/layout/types.js.map +1 -1
  455. package/dist/media/inline-risk.d.ts +26 -0
  456. package/dist/media/inline-risk.d.ts.map +1 -0
  457. package/dist/media/inline-risk.js +142 -0
  458. package/dist/media/inline-risk.js.map +1 -0
  459. package/dist/nav/builder.d.ts.map +1 -1
  460. package/dist/nav/builder.js +15 -3
  461. package/dist/nav/builder.js.map +1 -1
  462. package/dist/nav/index.d.ts +1 -1
  463. package/dist/nav/index.d.ts.map +1 -1
  464. package/dist/nav/index.js +1 -1
  465. package/dist/nav/index.js.map +1 -1
  466. package/dist/nav/menu-resolver.d.ts +11 -0
  467. package/dist/nav/menu-resolver.d.ts.map +1 -1
  468. package/dist/nav/menu-resolver.js +49 -9
  469. package/dist/nav/menu-resolver.js.map +1 -1
  470. package/dist/nav/paths.d.ts +37 -0
  471. package/dist/nav/paths.d.ts.map +1 -0
  472. package/dist/nav/paths.js +48 -0
  473. package/dist/nav/paths.js.map +1 -0
  474. package/dist/nav/types.d.ts +6 -0
  475. package/dist/nav/types.d.ts.map +1 -1
  476. package/dist/nav/url-resolver.d.ts +1 -5
  477. package/dist/nav/url-resolver.d.ts.map +1 -1
  478. package/dist/nav/url-resolver.js +6 -12
  479. package/dist/nav/url-resolver.js.map +1 -1
  480. package/dist/schema/base.d.ts +41 -4
  481. package/dist/schema/base.d.ts.map +1 -1
  482. package/dist/schema/base.js +23 -4
  483. package/dist/schema/base.js.map +1 -1
  484. package/dist/schema/components.d.ts +90 -9
  485. package/dist/schema/components.d.ts.map +1 -1
  486. package/dist/schema/components.js +113 -22
  487. package/dist/schema/components.js.map +1 -1
  488. package/dist/schema/mysql-tables.d.ts +5775 -48
  489. package/dist/schema/mysql-tables.d.ts.map +1 -1
  490. package/dist/schema/mysql-tables.js +621 -46
  491. package/dist/schema/mysql-tables.js.map +1 -1
  492. package/dist/scope/kywi-form.d.ts +11 -0
  493. package/dist/scope/kywi-form.d.ts.map +1 -1
  494. package/dist/scope/kywi-form.js +11 -1
  495. package/dist/scope/kywi-form.js.map +1 -1
  496. package/dist/scope/kywi-wizard-form.d.ts.map +1 -1
  497. package/dist/scope/kywi-wizard-form.js +76 -2
  498. package/dist/scope/kywi-wizard-form.js.map +1 -1
  499. package/dist/scope/sticky-offset.d.ts +34 -13
  500. package/dist/scope/sticky-offset.d.ts.map +1 -1
  501. package/dist/scope/sticky-offset.js +236 -43
  502. package/dist/scope/sticky-offset.js.map +1 -1
  503. package/dist/site/styles.css +61 -15
  504. package/dist/versioning/scheduler.d.ts +28 -0
  505. package/dist/versioning/scheduler.d.ts.map +1 -1
  506. package/dist/versioning/scheduler.js +50 -3
  507. package/dist/versioning/scheduler.js.map +1 -1
  508. package/package.json +7 -2
@@ -2,6 +2,46 @@ import { isModuleVariantContainer } from '../../../layout/types.js';
2
2
  import { validateComponentDefinition } from '../../../layout/component-refs.js';
3
3
  /** The single region a definition canvas document has. */
4
4
  export const DEFINITION_REGION = 'main';
5
+ /**
6
+ * The synthetic host a MODULE-level container definition is edited inside
7
+ * (kywi-cms#170).
8
+ *
9
+ * A module container is not a region node — it lives in a COLUMN — so unlike the
10
+ * other two region kinds it cannot be handed to the canvas as-is. It is wrapped
11
+ * in a one-section, one-column shell on the way in and unwrapped on the way out,
12
+ * and the shell's own ids are derived from the container's so two successive
13
+ * saves of an untouched component still produce identical rows.
14
+ *
15
+ * The wrapper is NOT stored: `extractDefinition` returns the container alone, so
16
+ * the row's `definition` stays exactly the shape `componentDetachSource` and the
17
+ * renderer read.
18
+ */
19
+ const DEFINITION_WRAPPER_SUFFIX = '-definition-host';
20
+ function wrapModuleVariantContainer(container) {
21
+ return {
22
+ id: `${container.id}${DEFINITION_WRAPPER_SUFFIX}`,
23
+ type: 'section',
24
+ style: {},
25
+ columns: [
26
+ { id: `${container.id}${DEFINITION_WRAPPER_SUFFIX}-column`, width: 12, nodes: [container] },
27
+ ],
28
+ };
29
+ }
30
+ /**
31
+ * The stored definition of a `moduleVariantContainer` component, or null when it
32
+ * doesn't match the row's type.
33
+ *
34
+ * Structural, like {@link readRegionNode}: a module's `type` is a registry name a
35
+ * host pack chooses, so the discriminant alone is not proof of shape.
36
+ */
37
+ export function readModuleVariantContainerDefinition(component) {
38
+ if (component.type !== 'moduleVariantContainer')
39
+ return null;
40
+ const def = component.definition;
41
+ if (typeof def !== 'object' || def === null || Array.isArray(def))
42
+ return null;
43
+ return isModuleVariantContainer(def) ? def : null;
44
+ }
5
45
  /**
6
46
  * Wrap a section/container definition as a one-node, one-region document.
7
47
  *
@@ -12,11 +52,25 @@ export const DEFINITION_REGION = 'main';
12
52
  * caller surfaces the mismatch separately.
13
53
  */
14
54
  export function seedDefinitionDocument(component) {
55
+ const moduleContainer = readModuleVariantContainerDefinition(component);
56
+ if (moduleContainer) {
57
+ return { regions: { [DEFINITION_REGION]: [wrapModuleVariantContainer(moduleContainer)] } };
58
+ }
15
59
  const node = readRegionNode(component);
16
- return { regions: { [DEFINITION_REGION]: node ? [node] : [] } };
60
+ // `readRegionNode` also answers for the module-container kind (see its note),
61
+ // but that branch returned above, so what is left here really is a region node.
62
+ const regionNode = node && node.type !== 'moduleVariantContainer' ? node : null;
63
+ return { regions: { [DEFINITION_REGION]: regionNode ? [regionNode] : [] } };
17
64
  }
18
65
  /** The definition as a region node, or null when it doesn't match the row's type. */
19
66
  export function readRegionNode(component) {
67
+ // The fourth kind is not a region node, but "does the stored definition match
68
+ // the row's declared type" is the question every caller is really asking —
69
+ // `component-edit.tsx` gates its whole error state on it — so answer it here
70
+ // rather than making each caller learn a second function (kywi-cms#170).
71
+ const moduleContainer = readModuleVariantContainerDefinition(component);
72
+ if (moduleContainer)
73
+ return moduleContainer;
20
74
  const def = component.definition;
21
75
  if (typeof def !== 'object' || def === null || Array.isArray(def))
22
76
  return null;
@@ -42,11 +96,11 @@ export function readRegionNode(component) {
42
96
  * a module-level container inside a section-level one, because a stored row that
43
97
  * predates that refusal reaches here without ever having been validated.
44
98
  */
45
- function holdsModuleVariantContainer(node) {
99
+ function holdsAbTestedModule(node) {
46
100
  const sections = node.type === 'section'
47
101
  ? [node]
48
102
  : [...(node.defaultSections ?? []), ...(node.variants ?? []).flatMap(v => v.sections ?? [])];
49
- return sections.some(section => (section.columns ?? []).some(column => (column.nodes ?? []).some(isModuleVariantContainer)));
103
+ return sections.some(section => (section.columns ?? []).some(column => (column.nodes ?? []).some(n => isModuleVariantContainer(n) && n.mode === 'ab_test')));
50
104
  }
51
105
  /**
52
106
  * Read the edited document back as a definition for a component of `type`, or
@@ -100,19 +154,47 @@ export function extractDefinition(doc, component) {
100
154
  'Personalize it again, or save it as a new component.',
101
155
  };
102
156
  }
103
- // A promoted MODULE is the same rule one level down (kywi-cms#161 final
104
- // review): a `moduleVariantContainer` stored in a definition holds ONE
105
- // `experimentId` for every page that places the component, so two placements
106
- // share a single experiment's buckets and exposures. Nothing scopes it —
107
- // `rekeyResolvedSection` re-keys arm MODULE ids per placement, never the
108
- // binding. The editor withholds promote on this canvas (`canvasKind`); this is
109
- // the fail-safe for a document that arrives holding one anyway (MCP, a direct
110
- // API write, a row stored before this refusal).
111
- if (holdsModuleVariantContainer(node)) {
157
+ // The fourth kind edits inside a synthetic one-section/one-column host
158
+ // (kywi-cms#170). Unwrap it here, so everything below the binding pin and the
159
+ // real validator sees the container the row actually stores.
160
+ if (component.type === 'moduleVariantContainer') {
161
+ const unwrapped = unwrapModuleVariantContainer(node);
162
+ if (!unwrapped.ok)
163
+ return unwrapped;
164
+ const pinned = pinDefinitionBinding(unwrapped.container, readModuleVariantContainerDefinition({
165
+ type: 'moduleVariantContainer',
166
+ definition: component.definition,
167
+ }), 'module');
168
+ if (!pinned.ok)
169
+ return pinned;
170
+ const check = validateComponentDefinition({
171
+ type: component.type,
172
+ moduleType: component.moduleType,
173
+ definition: pinned.container,
174
+ });
175
+ if (!check.success)
176
+ return { ok: false, error: check.error };
177
+ return { ok: true, definition: pinned.container };
178
+ }
179
+ // An A/B TESTED module is the same rule one level down (kywi-cms#161 final
180
+ // review, narrowed in #170): an `ab_test` `moduleVariantContainer` stored in a
181
+ // section/container definition holds ONE `experimentId` for every page that
182
+ // places the component, so two placements share a single experiment's buckets
183
+ // and exposures. Nothing scopes it — `rekeyResolvedSection` re-keys the
184
+ // container and its arms per placement, never the binding.
185
+ //
186
+ // A merely PERSONALIZED module is no longer refused: its arms are audiences,
187
+ // and audiences are content that travels with a component perfectly well. The
188
+ // editor withholds promote on this canvas (`canvasKind`); this is the
189
+ // fail-safe for a document that arrives holding an A/B one anyway (MCP, a
190
+ // direct API write, a row stored before this refusal).
191
+ if (holdsAbTestedModule(node)) {
112
192
  return {
113
193
  ok: false,
114
- error: 'A component cannot hold a personalized module. Remove the personalization before saving — ' +
115
- 'personalize the module on the page that places this component instead.',
194
+ error: 'A component cannot hold an A/B tested module. Remove the test before saving — every page ' +
195
+ 'placing this component would report into that one experiment, and a winner picked on any ' +
196
+ 'of them would decide them all. Save the module itself as a component instead, or A/B test ' +
197
+ 'the whole section.',
116
198
  };
117
199
  }
118
200
  // An experiment binding is the PLACEMENT's, never the definition's own to mint
@@ -169,7 +251,9 @@ export function extractDefinition(doc, component) {
169
251
  * made elsewhere, so the rule is flat — an A/B test is built on a page and saved
170
252
  * from there, which is also the only route that gives each placement its own run.
171
253
  */
172
- function pinDefinitionBinding(container, stored) {
254
+ function pinDefinitionBinding(container, stored,
255
+ /** What the refusal calls the thing, since the rule serves both kinds now. */
256
+ what = 'section') {
173
257
  const { experimentId: _canvasRun, winnerId: _canvasWinner, ...rest } = container;
174
258
  if (container.mode !== 'ab_test') {
175
259
  if (container.experimentId === undefined && container.winnerId === undefined) {
@@ -182,10 +266,10 @@ function pinDefinitionBinding(container, stored) {
182
266
  if (stored?.mode !== 'ab_test') {
183
267
  return {
184
268
  ok: false,
185
- error: 'This component cannot be turned into an A/B tested section here. An experiment belongs to ' +
269
+ error: `This component cannot be turned into an A/B tested ${what} here. An experiment belongs to ` +
186
270
  'one placement — every page that places this component and has no experiment of its own ' +
187
271
  'would be pulled into a single shared run. Build the A/B test on a page, then save that ' +
188
- 'section as a component: each placement gets its own experiment.',
272
+ `${what} as a component: each placement gets its own experiment.`,
189
273
  };
190
274
  }
191
275
  const experimentId = stored.experimentId;
@@ -210,6 +294,43 @@ function pinDefinitionBinding(container, stored) {
210
294
  },
211
295
  };
212
296
  }
297
+ /**
298
+ * Read the single module container back out of the synthetic host the canvas
299
+ * edits it in (kywi-cms#170), or explain what the author built instead.
300
+ *
301
+ * The messages are the same shape the region kinds' own mismatches use: say what
302
+ * the canvas is holding and what to do about it, rather than dropping the extra
303
+ * content silently.
304
+ */
305
+ function unwrapModuleVariantContainer(node) {
306
+ if (node.type !== 'section') {
307
+ return {
308
+ ok: false,
309
+ error: 'This is a personalized module component, but the canvas holds a personalized section. ' +
310
+ 'Remove the section-level personalization, or save it as a new component.',
311
+ };
312
+ }
313
+ const nodes = (node.columns ?? []).flatMap(column => column.nodes ?? []);
314
+ if (nodes.length === 0) {
315
+ return { ok: false, error: 'This component is empty. Add a module before saving.' };
316
+ }
317
+ if (nodes.length > 1) {
318
+ return {
319
+ ok: false,
320
+ error: `A personalized module component is a single module, but the canvas holds ${nodes.length}. ` +
321
+ 'Delete the extra modules, or save them as components of their own.',
322
+ };
323
+ }
324
+ const only = nodes[0];
325
+ if (!isModuleVariantContainer(only)) {
326
+ return {
327
+ ok: false,
328
+ error: 'This is a personalized module component, but the canvas holds a plain module. ' +
329
+ 'Personalize it again, or save it as a new component.',
330
+ };
331
+ }
332
+ return { ok: true, container: only };
333
+ }
213
334
  /**
214
335
  * A module component's definition: exactly the `{ props, style }` pair the
215
336
  * renderer reads (`componentDetachSource`). Nothing else is stored, so nothing
@@ -1 +1 @@
1
- {"version":3,"file":"definition-canvas.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/components/definition-canvas.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"definition-canvas.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/components/definition-canvas.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-index.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/dashboard/dashboard-index.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAsGrD,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,MAAM,EAAE,YAAY,2CAiGjE"}
1
+ {"version":3,"file":"dashboard-index.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/dashboard/dashboard-index.tsx"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAsGrD,MAAM,CAAC,OAAO,UAAU,qBAAqB,CAAC,MAAM,EAAE,YAAY,2CAgGjE"}
@@ -21,6 +21,7 @@ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-run
21
21
  */
22
22
  import { useEffect, useState } from 'react';
23
23
  import { useAdminContext } from '../../context.js';
24
+ import { runtimeContentTypes } from '../content/runtime-content-types.js';
24
25
  // Rendered when the aggregate endpoint is unreachable — the "API unreachable"
25
26
  // badge below signals the degraded state rather than blanking the whole page.
26
27
  const OFFLINE = {
@@ -87,7 +88,6 @@ function Metric({ label, value }) {
87
88
  }
88
89
  export default function DashboardIndexSurface(_props) {
89
90
  const { fetch: adminFetch, runtime } = useAdminContext();
90
- const runtimeContentTypes = runtime?.contentTypes ?? [];
91
91
  const [inventory, setInventory] = useState(null);
92
92
  useEffect(() => {
93
93
  let cancelled = false;
@@ -102,7 +102,7 @@ export default function DashboardIndexSurface(_props) {
102
102
  .catch(() => { });
103
103
  return () => { cancelled = true; };
104
104
  }, [adminFetch]);
105
- const contentTypes = inventory && inventory.length > 0 ? inventory : runtimeContentTypes;
105
+ const contentTypes = inventory && inventory.length > 0 ? inventory : runtimeContentTypes(runtime);
106
106
  const typeLabel = (name) => contentTypes.find(ct => ct.name === name)?.label ?? name;
107
107
  const [data, setData] = useState(null);
108
108
  useEffect(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"dashboard-index.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/dashboard/dashboard-index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dashboard-index.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/dashboard/dashboard-index.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"layout-editor-client.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/layouts/layout-editor-client.tsx"],"names":[],"mappings":"AA2BA,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE5F,UAAU,uBAAuB;IAC/B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,2CAkJrE"}
1
+ {"version":3,"file":"layout-editor-client.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/layouts/layout-editor-client.tsx"],"names":[],"mappings":"AA2BA,OAAO,EAA4C,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAE5F,UAAU,uBAAuB;IAC/B,6DAA6D;IAC7D,MAAM,CAAC,EAAE,SAAS,CAAA;CACnB;AAED,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,uBAAuB,2CAmJrE"}
@@ -87,17 +87,18 @@ export function LayoutEditorClient({ layout }) {
87
87
  }
88
88
  }, [name, category, isEdit, layout, navigate, adminFetch]);
89
89
  return (_jsxs("div", { className: "kywi-layout-editor-page", children: [_jsxs("div", { className: "kywi-admin-page-header", children: [_jsxs("div", { children: [_jsx("h1", { children: isEdit ? `Edit layout: ${layout.name}` : 'New layout' }), _jsxs("p", { className: "kywi-text-muted", children: ["Build a reusable layout, then click ", _jsx("strong", { children: "Save" }), " in the editor toolbar to persist it."] })] }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary", onClick: () => navigate('/admin/layouts'), children: "Back to layouts" })] }), error && _jsx(ErrorState, { message: error }), saving && _jsx("p", { className: "kywi-text-muted", role: "status", children: "Saving\u2026" }), _jsxs("div", { className: "kywi-layout-editor-meta", children: [_jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "layout-name", className: "kywi-field-label", children: "Layout name" }), _jsx("input", { id: "layout-name", type: "text", className: "kywi-input", value: name, onChange: e => setName(e.target.value), placeholder: "Landing hero + features" })] }), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "layout-category", className: "kywi-field-label", children: "Category" }), _jsx("input", { id: "layout-category", type: "text", className: "kywi-input", value: category, onChange: e => setCategory(e.target.value), placeholder: "general" })] })] }), _jsx("div", { className: "kywi-layout-editor-host", children: _jsx(LayoutEditor, { initialLayout: initialLayout, contentId: layout?.id ?? 'new', contentType: "layout", moduleRegistry: moduleRegistry, moduleComponents: layoutModuleComponents, audiences: audiences,
90
- // A saved layout is a BLUEPRINT, not a page (kywi-cms#147 final review,
91
- // M2). It is never placed, and `kywi_component_instances` indexes
92
- // placements in content only (the reasoning is at the decision site in
93
- // `api/section-template-routes.ts`), so a component minted here and
94
- // linked from the blueprint it came out of — would be a link the usage
95
- // count and the delete confirmation cannot see: "0 instances across 0
96
- // pages" while a blueprint still renders it. So the component actions are
97
- // withheld here exactly as they are on the definition canvas, with copy
98
- // that says why and where they do live. Saving a component out of a
99
- // blueprint is a coherent feature; it needs the index to reach blueprints
100
- // first.
90
+ // A saved layout is a BLUEPRINT, not a page — and since kywi-cms#156 it
91
+ // is a HOLDER in `kywi_component_instances` all the same. Minting a
92
+ // component here, linking one, and the save fork all work exactly as
93
+ // they do on a page: the placement is counted, it appears in the
94
+ // component's usage under "saved layouts", it blocks the component's
95
+ // delete, and detach-all rewrites it.
96
+ //
97
+ // This prop still matters. `layout-editor.tsx` reads it for the
98
+ // promote-in-place gate, which is a different question from the index:
99
+ // a variant container stored in a blueprint would carry one
100
+ // `experimentId` shared by every page stamped out of it
101
+ // (`extractDefinition` refuses the shape). That gate stays.
101
102
  canvasKind: "blueprint", onSave: persist, onCancel: () => navigate('/admin/layouts'), ...(user?.role ? { userRole: user.role } : {}) }) })] }));
102
103
  }
103
104
  //# sourceMappingURL=layout-editor-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"layout-editor-client.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/layouts/layout-editor-client.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layout-editor-client.js","sourceRoot":"","sources":["../../../../src/admin/surfaces/layouts/layout-editor-client.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/admin/surfaces/login.tsx"],"names":[],"mappings":"AA+BA,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,QAAQ,SAAW,GAAG,MAAM,CAWrF;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,2CA8F/D"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/admin/surfaces/login.tsx"],"names":[],"mappings":"AAgCA,MAAM,WAAW,iBAAiB;IAChC;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CACrB;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,QAAQ,SAAW,GAAG,MAAM,CAWrF;AAED,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,EAAE,iBAAiB,2CAyG/D"}
@@ -26,6 +26,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
26
26
  */
27
27
  import { useState } from 'react';
28
28
  import { setAuth } from '../../host-client/index.js';
29
+ import { ACCOUNT_PASSWORD_PATH } from '../registry.js';
29
30
  import { KywiLogoDark } from '../kywi-logo.js';
30
31
  /**
31
32
  * Validate a candidate post-login redirect target. Only an internal
@@ -62,6 +63,13 @@ export default function LoginSurface({ next }) {
62
63
  });
63
64
  const body = await res.json();
64
65
  if (!res.ok) {
66
+ // A flagged user can still sign in (§2), but any follow-up call the host
67
+ // makes on the way in can come back through the hard gate. That is not an
68
+ // auth failure — it is an instruction, so follow it instead of showing it.
69
+ if (body.error?.code === 'PASSWORD_RESET_REQUIRED') {
70
+ window.location.href = ACCOUNT_PASSWORD_PATH;
71
+ return;
72
+ }
65
73
  setError(body.error?.message ?? 'Login failed');
66
74
  return;
67
75
  }
@@ -73,7 +81,11 @@ export default function LoginSurface({ next }) {
73
81
  // The access token is set by the server as an httpOnly cookie; we only
74
82
  // keep the (non-sensitive) user descriptor for rendering the chrome.
75
83
  setAuth(body.data.user);
76
- window.location.href = safeNext(next);
84
+ // A forced-reset user lands on the set-password screen regardless of
85
+ // `next` — the API gate would refuse whatever `next` pointed at anyway.
86
+ window.location.href = body.data.user.passwordResetRequired === true
87
+ ? ACCOUNT_PASSWORD_PATH
88
+ : safeNext(next);
77
89
  }
78
90
  catch {
79
91
  setError('Network error — is the server running?');
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/admin/surfaces/login.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/admin/surfaces/login.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"menu-editor.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/menus/menu-editor.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAqLrD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,2CA0ajE"}
1
+ {"version":3,"file":"menu-editor.d.ts","sourceRoot":"","sources":["../../../../src/admin/surfaces/menus/menu-editor.tsx"],"names":[],"mappings":"AAoCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAuLrD,MAAM,CAAC,OAAO,UAAU,iBAAiB,CAAC,EAAE,MAAM,EAAE,EAAE,YAAY,2CAscjE"}
@@ -28,7 +28,8 @@ function MenuItemRow({ item, depth, selected, onSelect }) {
28
28
  const { attributes, listeners, setNodeRef, transform, transition, isDragging } = useSortable({
29
29
  id: item.key,
30
30
  });
31
- const broken = item.contentMissing || (!item.contentId && !item.externalUrl);
31
+ const isLabel = item.kind === 'label';
32
+ const broken = !isLabel && (item.contentMissing || (!item.contentId && !item.externalUrl));
32
33
  const unpublished = !broken && item.contentStatus !== null && item.contentStatus !== 'published';
33
34
  const classes = [
34
35
  'kywi-tree-node',
@@ -50,7 +51,7 @@ function MenuItemRow({ item, depth, selected, onSelect }) {
50
51
  e.preventDefault();
51
52
  onSelect(item.key);
52
53
  }
53
- }, children: [_jsx("button", { type: "button", className: "kywi-menu-item-handle", "aria-label": `Reorder ${item.label}`, onClick: e => e.stopPropagation(), ...attributes, ...listeners, children: '≡' }), _jsx("span", { className: "kywi-tree-title", children: item.label }), _jsx("span", { className: "kywi-menu-item-target", children: item.contentId ? item.href ?? '—' : item.externalUrl ?? '—' }), item.externalUrl && _jsx("span", { className: "kywi-chip", children: "External" }), item.openInNewWindow && _jsx("span", { className: "kywi-chip", children: "New window" }), unpublished && (_jsx("span", { className: `kywi-status-badge kywi-status-${item.contentStatus}`, children: statusLabel(item.contentStatus) })), broken && (_jsxs("span", { className: "kywi-menu-item-warning", role: "status", children: ['⚠', " Link broken"] }))] }));
54
+ }, children: [_jsx("button", { type: "button", className: "kywi-menu-item-handle", "aria-label": `Reorder ${item.label}`, onClick: e => e.stopPropagation(), ...attributes, ...listeners, children: '≡' }), _jsx("span", { className: "kywi-tree-title", children: item.label }), _jsx("span", { className: "kywi-menu-item-target", children: isLabel ? 'No link' : item.contentId ? item.href ?? '—' : item.externalUrl ?? '—' }), isLabel && _jsx("span", { className: "kywi-chip", children: "Heading" }), item.externalUrl && _jsx("span", { className: "kywi-chip", children: "External" }), item.openInNewWindow && _jsx("span", { className: "kywi-chip", children: "New window" }), unpublished && (_jsx("span", { className: `kywi-status-badge kywi-status-${item.contentStatus}`, children: statusLabel(item.contentStatus) })), broken && (_jsxs("span", { className: "kywi-menu-item-warning", role: "status", children: ['⚠', " Link broken"] }))] }));
54
55
  }
55
56
  // ── External-link dialog ──────────────────────────────────────────────────────
56
57
  function ExternalLinkModal({ onAdd, onClose, }) {
@@ -201,6 +202,17 @@ export default function MenuEditorSurface({ params }) {
201
202
  setSelectedKey(item.key);
202
203
  setPicker(null);
203
204
  }, []);
205
+ /**
206
+ * A structural heading — a mega-panel column title or a footer group title
207
+ * that names a group with no page of its own (kywi-cms#116). It links
208
+ * nowhere on purpose, so it is exempt from the save-time target check.
209
+ */
210
+ const addHeadingItem = useCallback(() => {
211
+ const item = makeItem({ label: 'Heading', kind: 'label' });
212
+ setSaved(false);
213
+ setItems(prev => appendItem(prev, item));
214
+ setSelectedKey(item.key);
215
+ }, []);
204
216
  const confirmRemove = useCallback(() => {
205
217
  if (!pendingRemove)
206
218
  return;
@@ -253,8 +265,9 @@ export default function MenuEditorSurface({ params }) {
253
265
  flat.filter(f => f.parentKey === selectedEntry.parentKey)[0]?.key !== selectedEntry.key &&
254
266
  selectedEntry.depth + 1 + subtreeHeight(selectedEntry.item) <= MAX_MENU_DEPTH - 1;
255
267
  const canOutdent = selectedEntry !== undefined && selectedEntry.parentKey !== null;
256
- return (_jsxs("div", { className: "kywi-menu-editor", children: [_jsxs("div", { className: "kywi-admin-page-header", children: [_jsxs("div", { children: [_jsx("h1", { children: menu ? `Edit menu: ${menu.name}` : 'Edit menu' }), _jsxs("p", { className: "kywi-text-muted", children: [countItems(items), " item", countItems(items) === 1 ? '' : 's', menu ? _jsxs(_Fragment, { children: [" \u00B7 slug ", _jsx("code", { children: menu.slug })] }) : null, " \u00B7 drag a row to reorder, drag it sideways to nest it under the row above (up to ", MAX_MENU_DEPTH, " levels)."] })] }), _jsxs("div", { className: "kywi-admin-button-row", children: [_jsx("button", { type: "button", className: "kywi-btn kywi-btn-ghost", onClick: leave, children: "Back to menus" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary", onClick: load, disabled: saving || !dirty, children: "Cancel" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-primary", onClick: handleSave, disabled: saving || !dirty, children: saving ? 'Saving…' : 'Save menu' })] })] }), dirty && _jsx("p", { className: "kywi-menu-editor-dirty", role: "status", children: "Unsaved changes" }), saved && !dirty && (_jsx("p", { className: "kywi-menu-editor-saved", role: "status", children: "Menu saved." })), saveError && _jsx(ErrorState, { message: saveError }), _jsxs("div", { className: "kywi-menu-editor-grid", children: [_jsxs("section", { className: "kywi-menu-editor-tree", "aria-label": "Menu structure", children: [flat.length === 0 && (_jsx("div", { className: "kywi-empty-state", children: _jsx("p", { children: "This menu has no items yet. Add a page or an external link below." }) })), _jsxs(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragStart: handleDragStart, onDragEnd: handleDragEnd, children: [_jsx(SortableContext, { items: flat.map(f => f.key), strategy: verticalListSortingStrategy, children: _jsx("div", { className: "kywi-menu-item-list", role: "tree", "aria-label": "Menu items", children: flat.map(entry => (_jsx(MenuItemRow, { item: entry.item, depth: entry.depth, selected: entry.key === selectedKey, onSelect: setSelectedKey }, entry.key))) }) }), _jsx(DragOverlay, { children: activeKey ? (_jsx("div", { className: "kywi-tree-drag-overlay", children: _jsx("span", { className: "kywi-tree-title", children: findItem(items, activeKey)?.label }) })) : null })] }), _jsxs("div", { className: "kywi-menu-editor-add", children: [_jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary kywi-btn-sm", onClick: openPagePicker, children: "Add page link" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary kywi-btn-sm", onClick: () => setPicker('external'), children: "Add external link" })] })] }), _jsx("aside", { className: "kywi-menu-item-panel", "aria-label": "Item settings", children: !selected ? (_jsx("div", { className: "kywi-empty-state", children: _jsx("p", { children: "Select an item to edit its label, description and link behaviour." }) })) : (_jsxs(_Fragment, { children: [_jsx("h2", { className: "kywi-section-heading", children: "Item" }), selected.contentMissing && (_jsxs("p", { className: "kywi-menu-item-warning", role: "alert", children: ['⚠', " The page this item linked to has been deleted. Remove the item or turn it into an external link."] })), !selected.contentMissing &&
268
+ return (_jsxs("div", { className: "kywi-menu-editor", children: [_jsxs("div", { className: "kywi-admin-page-header", children: [_jsxs("div", { children: [_jsx("h1", { children: menu ? `Edit menu: ${menu.name}` : 'Edit menu' }), _jsxs("p", { className: "kywi-text-muted", children: [countItems(items), " item", countItems(items) === 1 ? '' : 's', menu ? _jsxs(_Fragment, { children: [" \u00B7 slug ", _jsx("code", { children: menu.slug })] }) : null, " \u00B7 drag a row to reorder, drag it sideways to nest it under the row above (up to ", MAX_MENU_DEPTH, " levels). A heading groups items without linking anywhere."] })] }), _jsxs("div", { className: "kywi-admin-button-row", children: [_jsx("button", { type: "button", className: "kywi-btn kywi-btn-ghost", onClick: leave, children: "Back to menus" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary", onClick: load, disabled: saving || !dirty, children: "Cancel" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-primary", onClick: handleSave, disabled: saving || !dirty, children: saving ? 'Saving…' : 'Save menu' })] })] }), dirty && _jsx("p", { className: "kywi-menu-editor-dirty", role: "status", children: "Unsaved changes" }), saved && !dirty && (_jsx("p", { className: "kywi-menu-editor-saved", role: "status", children: "Menu saved." })), saveError && _jsx(ErrorState, { message: saveError }), _jsxs("div", { className: "kywi-menu-editor-grid", children: [_jsxs("section", { className: "kywi-menu-editor-tree", "aria-label": "Menu structure", children: [flat.length === 0 && (_jsx("div", { className: "kywi-empty-state", children: _jsx("p", { children: "This menu has no items yet. Add a page or an external link below." }) })), _jsxs(DndContext, { sensors: sensors, collisionDetection: closestCenter, onDragStart: handleDragStart, onDragEnd: handleDragEnd, children: [_jsx(SortableContext, { items: flat.map(f => f.key), strategy: verticalListSortingStrategy, children: _jsx("div", { className: "kywi-menu-item-list", role: "tree", "aria-label": "Menu items", children: flat.map(entry => (_jsx(MenuItemRow, { item: entry.item, depth: entry.depth, selected: entry.key === selectedKey, onSelect: setSelectedKey }, entry.key))) }) }), _jsx(DragOverlay, { children: activeKey ? (_jsx("div", { className: "kywi-tree-drag-overlay", children: _jsx("span", { className: "kywi-tree-title", children: findItem(items, activeKey)?.label }) })) : null })] }), _jsxs("div", { className: "kywi-menu-editor-add", children: [_jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary kywi-btn-sm", onClick: openPagePicker, children: "Add page link" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary kywi-btn-sm", onClick: () => setPicker('external'), children: "Add external link" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-secondary kywi-btn-sm", onClick: addHeadingItem, children: "Add heading" })] })] }), _jsx("aside", { className: "kywi-menu-item-panel", "aria-label": "Item settings", children: !selected ? (_jsx("div", { className: "kywi-empty-state", children: _jsx("p", { children: "Select an item to edit its label, description and link behaviour." }) })) : (_jsxs(_Fragment, { children: [_jsx("h2", { className: "kywi-section-heading", children: selected.kind === 'label' ? 'Heading' : 'Item' }), selected.kind !== 'label' && selected.contentMissing && (_jsxs("p", { className: "kywi-menu-item-warning", role: "alert", children: ['⚠', " The page this item linked to has been deleted. Remove the item or turn it into an external link."] })), selected.kind !== 'label' &&
269
+ !selected.contentMissing &&
257
270
  selected.contentStatus !== null &&
258
- selected.contentStatus !== 'published' && (_jsxs("p", { className: "kywi-menu-item-warning", role: "status", children: ['⚠', " This page is ", statusLabel(selected.contentStatus).toLowerCase(), ", so the item is hidden from visitors until it is published."] })), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "kywi-menu-item-label", className: "kywi-field-label", children: "Label" }), _jsx("input", { id: "kywi-menu-item-label", type: "text", className: "kywi-input", value: selected.label, onChange: e => patchSelected({ label: e.target.value }) })] }), _jsxs("div", { className: "kywi-field", children: [_jsx("span", { className: "kywi-field-label", children: "Link" }), selected.contentId ? (_jsxs("p", { className: "kywi-field-hint", children: ["Page \u00B7 ", _jsx("code", { children: selected.href ?? 'unresolved' }), " \u2014 the link follows the page if it is renamed or moved."] })) : (_jsx("input", { type: "text", className: "kywi-input", "aria-label": "External URL", value: selected.externalUrl ?? '', onChange: e => patchSelected({ externalUrl: e.target.value, href: e.target.value }) }))] }), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "kywi-menu-item-description", className: "kywi-field-label", children: "Description" }), _jsx("textarea", { id: "kywi-menu-item-description", className: "kywi-input kywi-textarea", rows: 3, value: selected.description, onChange: e => patchSelected({ description: e.target.value }) }), _jsx("span", { className: "kywi-field-hint", children: "Shown beside the label in mega-menu panels. Ignored by compact nav variants." })] }), _jsxs("label", { className: "kywi-checkbox-label", children: [_jsx("input", { type: "checkbox", checked: selected.openInNewWindow, onChange: e => patchSelected({ openInNewWindow: e.target.checked }) }), _jsx("span", { children: "Open in a new window" })] }), _jsxs("div", { className: "kywi-admin-form-actions kywi-menu-item-nesting", children: [_jsx("button", { type: "button", className: "kywi-btn kywi-btn-ghost kywi-btn-sm", disabled: !canOutdent, onClick: () => { setSaved(false); setItems(prev => outdentItem(prev, selected.key)); }, children: "Move out one level" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-ghost kywi-btn-sm", disabled: !canIndent, onClick: () => { setSaved(false); setItems(prev => indentItem(prev, selected.key)); }, children: "Nest under previous" })] }), _jsx("div", { className: "kywi-admin-form-actions", children: _jsx("button", { type: "button", className: "kywi-btn kywi-btn-danger kywi-btn-sm", onClick: () => handleRemove(selected), children: "Remove item" }) })] })) })] }), picker === 'page' && (pickerError ? (_jsx(Modal, { title: "Link to a page", onClose: () => setPicker(null), children: _jsx(ErrorState, { message: pickerError }) })) : contentTree === null ? (_jsx(Modal, { title: "Link to a page", onClose: () => setPicker(null), children: _jsx(LoadingState, { label: "Loading content\u2026" }) })) : (_jsx(PagePicker, { nodes: contentTree, navLabels: navLabels, onSelect: addPageItem, onClose: () => setPicker(null) }))), picker === 'external' && (_jsx(ExternalLinkModal, { onAdd: addExternalItem, onClose: () => setPicker(null) })), pendingRemove && (_jsx(ConfirmDialog, { title: "Remove item", message: _jsxs(_Fragment, { children: ["Remove \u201C", pendingRemove.label, "\u201D and the ", countItems(pendingRemove.children), " item", countItems(pendingRemove.children) === 1 ? '' : 's', " nested under it? The change applies when you save the menu."] }), confirmLabel: "Remove", onCancel: () => setPendingRemove(null), onConfirm: confirmRemove }))] }));
271
+ selected.contentStatus !== 'published' && (_jsxs("p", { className: "kywi-menu-item-warning", role: "status", children: ['⚠', " This page is ", statusLabel(selected.contentStatus).toLowerCase(), ", so the item is hidden from visitors until it is published."] })), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "kywi-menu-item-label", className: "kywi-field-label", children: "Label" }), _jsx("input", { id: "kywi-menu-item-label", type: "text", className: "kywi-input", value: selected.label, onChange: e => patchSelected({ label: e.target.value }) })] }), selected.kind === 'label' ? (_jsx("p", { className: "kywi-field-hint kywi-menu-item-heading-hint", children: "A heading \u2014 it renders as plain text, not a link, and the items nested under it still render. Use it for a mega-menu or footer column title." })) : (_jsxs("div", { className: "kywi-field", children: [_jsx("span", { className: "kywi-field-label", children: "Link" }), selected.contentId ? (_jsxs("p", { className: "kywi-field-hint", children: ["Page \u00B7 ", _jsx("code", { children: selected.href ?? 'unresolved' }), " \u2014 the link follows the page if it is renamed or moved."] })) : (_jsx("input", { type: "text", className: "kywi-input", "aria-label": "External URL", value: selected.externalUrl ?? '', onChange: e => patchSelected({ externalUrl: e.target.value, href: e.target.value }) }))] })), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "kywi-menu-item-description", className: "kywi-field-label", children: "Description" }), _jsx("textarea", { id: "kywi-menu-item-description", className: "kywi-input kywi-textarea", rows: 3, value: selected.description, onChange: e => patchSelected({ description: e.target.value }) }), _jsx("span", { className: "kywi-field-hint", children: "Shown beside the label in mega-menu panels. Ignored by compact nav variants." })] }), selected.kind !== 'label' && (_jsxs("label", { className: "kywi-checkbox-label", children: [_jsx("input", { type: "checkbox", checked: selected.openInNewWindow, onChange: e => patchSelected({ openInNewWindow: e.target.checked }) }), _jsx("span", { children: "Open in a new window" })] })), _jsxs("div", { className: "kywi-admin-form-actions kywi-menu-item-nesting", children: [_jsx("button", { type: "button", className: "kywi-btn kywi-btn-ghost kywi-btn-sm", disabled: !canOutdent, onClick: () => { setSaved(false); setItems(prev => outdentItem(prev, selected.key)); }, children: "Move out one level" }), _jsx("button", { type: "button", className: "kywi-btn kywi-btn-ghost kywi-btn-sm", disabled: !canIndent, onClick: () => { setSaved(false); setItems(prev => indentItem(prev, selected.key)); }, children: "Nest under previous" })] }), _jsx("div", { className: "kywi-admin-form-actions", children: _jsx("button", { type: "button", className: "kywi-btn kywi-btn-danger kywi-btn-sm", onClick: () => handleRemove(selected), children: "Remove item" }) })] })) })] }), picker === 'page' && (pickerError ? (_jsx(Modal, { title: "Link to a page", onClose: () => setPicker(null), children: _jsx(ErrorState, { message: pickerError }) })) : contentTree === null ? (_jsx(Modal, { title: "Link to a page", onClose: () => setPicker(null), children: _jsx(LoadingState, { label: "Loading content\u2026" }) })) : (_jsx(PagePicker, { nodes: contentTree, navLabels: navLabels, onSelect: addPageItem, onClose: () => setPicker(null) }))), picker === 'external' && (_jsx(ExternalLinkModal, { onAdd: addExternalItem, onClose: () => setPicker(null) })), pendingRemove && (_jsx(ConfirmDialog, { title: "Remove item", message: _jsxs(_Fragment, { children: ["Remove \u201C", pendingRemove.label, "\u201D and the ", countItems(pendingRemove.children), " item", countItems(pendingRemove.children) === 1 ? '' : 's', " nested under it? The change applies when you save the menu."] }), confirmLabel: "Remove", onCancel: () => setPendingRemove(null), onConfirm: confirmRemove }))] }));
259
272
  }
260
273
  //# sourceMappingURL=menu-editor.js.map