@kywi-software/core 0.14.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 (478) 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 +6 -7
  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/layout-editor/chrome-env.d.ts +35 -0
  13. package/dist/admin/layout-editor/chrome-env.d.ts.map +1 -0
  14. package/dist/admin/layout-editor/chrome-env.js +13 -0
  15. package/dist/admin/layout-editor/chrome-env.js.map +1 -0
  16. package/dist/admin/layout-editor/component-actions.d.ts +58 -7
  17. package/dist/admin/layout-editor/component-actions.d.ts.map +1 -1
  18. package/dist/admin/layout-editor/component-actions.js +131 -5
  19. package/dist/admin/layout-editor/component-actions.js.map +1 -1
  20. package/dist/admin/layout-editor/component-fork.d.ts +4 -4
  21. package/dist/admin/layout-editor/component-fork.d.ts.map +1 -1
  22. package/dist/admin/layout-editor/component-fork.js +76 -10
  23. package/dist/admin/layout-editor/component-fork.js.map +1 -1
  24. package/dist/admin/layout-editor/component-picker-field.d.ts +17 -3
  25. package/dist/admin/layout-editor/component-picker-field.d.ts.map +1 -1
  26. package/dist/admin/layout-editor/component-picker-field.js +5 -2
  27. package/dist/admin/layout-editor/component-picker-field.js.map +1 -1
  28. package/dist/admin/layout-editor/drag-feedback.d.ts +25 -1
  29. package/dist/admin/layout-editor/drag-feedback.d.ts.map +1 -1
  30. package/dist/admin/layout-editor/drag-feedback.js +9 -0
  31. package/dist/admin/layout-editor/drag-feedback.js.map +1 -1
  32. package/dist/admin/layout-editor/drag-utils.d.ts +103 -5
  33. package/dist/admin/layout-editor/drag-utils.d.ts.map +1 -1
  34. package/dist/admin/layout-editor/drag-utils.js +131 -4
  35. package/dist/admin/layout-editor/drag-utils.js.map +1 -1
  36. package/dist/admin/layout-editor/editor-canvas.d.ts +11 -0
  37. package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
  38. package/dist/admin/layout-editor/editor-canvas.js +134 -20
  39. package/dist/admin/layout-editor/editor-canvas.js.map +1 -1
  40. package/dist/admin/layout-editor/editor-dialog.d.ts +58 -3
  41. package/dist/admin/layout-editor/editor-dialog.d.ts.map +1 -1
  42. package/dist/admin/layout-editor/editor-dialog.js +71 -9
  43. package/dist/admin/layout-editor/editor-dialog.js.map +1 -1
  44. package/dist/admin/layout-editor/editor-state.d.ts +119 -0
  45. package/dist/admin/layout-editor/editor-state.d.ts.map +1 -1
  46. package/dist/admin/layout-editor/editor-state.js +188 -6
  47. package/dist/admin/layout-editor/editor-state.js.map +1 -1
  48. package/dist/admin/layout-editor/editor-toolbar.d.ts +10 -1
  49. package/dist/admin/layout-editor/editor-toolbar.d.ts.map +1 -1
  50. package/dist/admin/layout-editor/editor-toolbar.js +2 -2
  51. package/dist/admin/layout-editor/editor-toolbar.js.map +1 -1
  52. package/dist/admin/layout-editor/editor.css +216 -8
  53. package/dist/admin/layout-editor/inline-text.d.ts +15 -1
  54. package/dist/admin/layout-editor/inline-text.d.ts.map +1 -1
  55. package/dist/admin/layout-editor/inline-text.js +30 -2
  56. package/dist/admin/layout-editor/inline-text.js.map +1 -1
  57. package/dist/admin/layout-editor/layout-editor.d.ts +21 -16
  58. package/dist/admin/layout-editor/layout-editor.d.ts.map +1 -1
  59. package/dist/admin/layout-editor/layout-editor.js +40 -17
  60. package/dist/admin/layout-editor/layout-editor.js.map +1 -1
  61. package/dist/admin/layout-editor/linked-component-notes.d.ts +88 -0
  62. package/dist/admin/layout-editor/linked-component-notes.d.ts.map +1 -0
  63. package/dist/admin/layout-editor/linked-component-notes.js +88 -0
  64. package/dist/admin/layout-editor/linked-component-notes.js.map +1 -0
  65. package/dist/admin/layout-editor/module-overlay.d.ts +23 -4
  66. package/dist/admin/layout-editor/module-overlay.d.ts.map +1 -1
  67. package/dist/admin/layout-editor/module-overlay.js +56 -10
  68. package/dist/admin/layout-editor/module-overlay.js.map +1 -1
  69. package/dist/admin/layout-editor/module-variant-container-config.d.ts.map +1 -1
  70. package/dist/admin/layout-editor/module-variant-container-config.js +9 -2
  71. package/dist/admin/layout-editor/module-variant-container-config.js.map +1 -1
  72. package/dist/admin/layout-editor/module-variant-container-panel.d.ts +75 -0
  73. package/dist/admin/layout-editor/module-variant-container-panel.d.ts.map +1 -0
  74. package/dist/admin/layout-editor/module-variant-container-panel.js +29 -0
  75. package/dist/admin/layout-editor/module-variant-container-panel.js.map +1 -0
  76. package/dist/admin/layout-editor/node-lookup.d.ts.map +1 -1
  77. package/dist/admin/layout-editor/node-lookup.js +33 -3
  78. package/dist/admin/layout-editor/node-lookup.js.map +1 -1
  79. package/dist/admin/layout-editor/overlay-shell.d.ts.map +1 -1
  80. package/dist/admin/layout-editor/overlay-shell.js +19 -4
  81. package/dist/admin/layout-editor/overlay-shell.js.map +1 -1
  82. package/dist/admin/layout-editor/props-panel.d.ts +28 -11
  83. package/dist/admin/layout-editor/props-panel.d.ts.map +1 -1
  84. package/dist/admin/layout-editor/props-panel.js +75 -125
  85. package/dist/admin/layout-editor/props-panel.js.map +1 -1
  86. package/dist/admin/layout-editor/section-variant-container-config.d.ts.map +1 -1
  87. package/dist/admin/layout-editor/section-variant-container-config.js +11 -2
  88. package/dist/admin/layout-editor/section-variant-container-config.js.map +1 -1
  89. package/dist/admin/layout-editor/use-chrome-flip.d.ts +99 -11
  90. package/dist/admin/layout-editor/use-chrome-flip.d.ts.map +1 -1
  91. package/dist/admin/layout-editor/use-chrome-flip.js +268 -97
  92. package/dist/admin/layout-editor/use-chrome-flip.js.map +1 -1
  93. package/dist/admin/layout-editor/use-component-connect.d.ts +13 -0
  94. package/dist/admin/layout-editor/use-component-connect.d.ts.map +1 -1
  95. package/dist/admin/layout-editor/use-component-connect.js +116 -20
  96. package/dist/admin/layout-editor/use-component-connect.js.map +1 -1
  97. package/dist/admin/layout-editor/use-component-fork.d.ts +49 -19
  98. package/dist/admin/layout-editor/use-component-fork.d.ts.map +1 -1
  99. package/dist/admin/layout-editor/use-component-fork.js +28 -19
  100. package/dist/admin/layout-editor/use-component-fork.js.map +1 -1
  101. package/dist/admin/layout-editor/use-component-library.d.ts +4 -4
  102. package/dist/admin/layout-editor/use-component-library.d.ts.map +1 -1
  103. package/dist/admin/layout-editor/use-component-library.js +1 -1
  104. package/dist/admin/layout-editor/use-component-library.js.map +1 -1
  105. package/dist/admin/layout-editor/use-editor-dnd.d.ts +10 -0
  106. package/dist/admin/layout-editor/use-editor-dnd.d.ts.map +1 -1
  107. package/dist/admin/layout-editor/use-editor-dnd.js +234 -14
  108. package/dist/admin/layout-editor/use-editor-dnd.js.map +1 -1
  109. package/dist/admin/layout-editor/variant-container-config.d.ts.map +1 -1
  110. package/dist/admin/layout-editor/variant-container-config.js +1 -1
  111. package/dist/admin/layout-editor/variant-container-config.js.map +1 -1
  112. package/dist/admin/layout-editor/variant-editor.d.ts +16 -15
  113. package/dist/admin/layout-editor/variant-editor.d.ts.map +1 -1
  114. package/dist/admin/layout-editor/variant-editor.js +16 -5
  115. package/dist/admin/layout-editor/variant-editor.js.map +1 -1
  116. package/dist/admin/primitives.d.ts.map +1 -1
  117. package/dist/admin/primitives.js +1 -1
  118. package/dist/admin/primitives.js.map +1 -1
  119. package/dist/admin/registry.d.ts +12 -0
  120. package/dist/admin/registry.d.ts.map +1 -1
  121. package/dist/admin/registry.js +12 -0
  122. package/dist/admin/registry.js.map +1 -1
  123. package/dist/admin/server.d.ts +10 -1
  124. package/dist/admin/server.d.ts.map +1 -1
  125. package/dist/admin/server.js +4 -1
  126. package/dist/admin/server.js.map +1 -1
  127. package/dist/admin/site-switcher.d.ts +16 -3
  128. package/dist/admin/site-switcher.d.ts.map +1 -1
  129. package/dist/admin/site-switcher.js +18 -3
  130. package/dist/admin/site-switcher.js.map +1 -1
  131. package/dist/admin/styles/admin.css +0 -3
  132. package/dist/admin/surface-matcher.d.ts +6 -2
  133. package/dist/admin/surface-matcher.d.ts.map +1 -1
  134. package/dist/admin/surface-matcher.js +42 -5
  135. package/dist/admin/surface-matcher.js.map +1 -1
  136. package/dist/admin/surfaces/components/components-data.d.ts +31 -11
  137. package/dist/admin/surfaces/components/components-data.d.ts.map +1 -1
  138. package/dist/admin/surfaces/components/components-data.js +17 -4
  139. package/dist/admin/surfaces/components/components-data.js.map +1 -1
  140. package/dist/admin/surfaces/components/components-list.d.ts.map +1 -1
  141. package/dist/admin/surfaces/components/components-list.js +20 -7
  142. package/dist/admin/surfaces/components/components-list.js.map +1 -1
  143. package/dist/admin/surfaces/components/definition-canvas.d.ts +11 -3
  144. package/dist/admin/surfaces/components/definition-canvas.d.ts.map +1 -1
  145. package/dist/admin/surfaces/components/definition-canvas.js +138 -17
  146. package/dist/admin/surfaces/components/definition-canvas.js.map +1 -1
  147. package/dist/admin/surfaces/dashboard/dashboard-index.d.ts.map +1 -1
  148. package/dist/admin/surfaces/dashboard/dashboard-index.js +2 -2
  149. package/dist/admin/surfaces/dashboard/dashboard-index.js.map +1 -1
  150. package/dist/admin/surfaces/layouts/layout-editor-client.d.ts.map +1 -1
  151. package/dist/admin/surfaces/layouts/layout-editor-client.js +12 -11
  152. package/dist/admin/surfaces/layouts/layout-editor-client.js.map +1 -1
  153. package/dist/admin/surfaces/menus/menu-editor.d.ts.map +1 -1
  154. package/dist/admin/surfaces/menus/menu-editor.js +17 -4
  155. package/dist/admin/surfaces/menus/menu-editor.js.map +1 -1
  156. package/dist/admin/surfaces/menus/menu-tree.d.ts +18 -4
  157. package/dist/admin/surfaces/menus/menu-tree.d.ts.map +1 -1
  158. package/dist/admin/surfaces/menus/menu-tree.js +18 -3
  159. package/dist/admin/surfaces/menus/menu-tree.js.map +1 -1
  160. package/dist/admin/surfaces/menus/menus-data.d.ts +18 -0
  161. package/dist/admin/surfaces/menus/menus-data.d.ts.map +1 -1
  162. package/dist/admin/surfaces/menus/menus-data.js +4 -0
  163. package/dist/admin/surfaces/menus/menus-data.js.map +1 -1
  164. package/dist/admin/surfaces/menus/menus-list.d.ts.map +1 -1
  165. package/dist/admin/surfaces/menus/menus-list.js +2 -12
  166. package/dist/admin/surfaces/menus/menus-list.js.map +1 -1
  167. package/dist/admin/surfaces/users/users-data.d.ts +14 -0
  168. package/dist/admin/surfaces/users/users-data.d.ts.map +1 -1
  169. package/dist/admin/surfaces/users/users-data.js +19 -0
  170. package/dist/admin/surfaces/users/users-data.js.map +1 -1
  171. package/dist/admin/surfaces/users/users-detail.d.ts.map +1 -1
  172. package/dist/admin/surfaces/users/users-detail.js +40 -4
  173. package/dist/admin/surfaces/users/users-detail.js.map +1 -1
  174. package/dist/admin/surfaces/users/users-new.d.ts.map +1 -1
  175. package/dist/admin/surfaces/users/users-new.js +8 -5
  176. package/dist/admin/surfaces/users/users-new.js.map +1 -1
  177. package/dist/admin/user-form.d.ts +10 -1
  178. package/dist/admin/user-form.d.ts.map +1 -1
  179. package/dist/admin/user-form.js +2 -2
  180. package/dist/admin/user-form.js.map +1 -1
  181. package/dist/api/admin-features-routes.js +2 -2
  182. package/dist/api/admin-features-routes.js.map +1 -1
  183. package/dist/api/audience-preview-routes.d.ts +7 -0
  184. package/dist/api/audience-preview-routes.d.ts.map +1 -1
  185. package/dist/api/audience-preview-routes.js +4 -4
  186. package/dist/api/audience-preview-routes.js.map +1 -1
  187. package/dist/api/audience-routes.d.ts +7 -0
  188. package/dist/api/audience-routes.d.ts.map +1 -1
  189. package/dist/api/audience-routes.js +21 -15
  190. package/dist/api/audience-routes.js.map +1 -1
  191. package/dist/api/audience-runtime-routes.d.ts +6 -0
  192. package/dist/api/audience-runtime-routes.d.ts.map +1 -1
  193. package/dist/api/audience-runtime-routes.js +38 -3
  194. package/dist/api/audience-runtime-routes.js.map +1 -1
  195. package/dist/api/auth-routes.d.ts.map +1 -1
  196. package/dist/api/auth-routes.js +10 -4
  197. package/dist/api/auth-routes.js.map +1 -1
  198. package/dist/api/auth.d.ts +1 -0
  199. package/dist/api/auth.d.ts.map +1 -1
  200. package/dist/api/auth.js +43 -3
  201. package/dist/api/auth.js.map +1 -1
  202. package/dist/api/bulk-routes.d.ts.map +1 -1
  203. package/dist/api/bulk-routes.js +7 -7
  204. package/dist/api/bulk-routes.js.map +1 -1
  205. package/dist/api/category-routes.js +3 -3
  206. package/dist/api/category-routes.js.map +1 -1
  207. package/dist/api/comment-routes.js +8 -8
  208. package/dist/api/comment-routes.js.map +1 -1
  209. package/dist/api/component-routes.d.ts +25 -0
  210. package/dist/api/component-routes.d.ts.map +1 -1
  211. package/dist/api/component-routes.js +41 -16
  212. package/dist/api/component-routes.js.map +1 -1
  213. package/dist/api/content-routes.js +13 -13
  214. package/dist/api/content-routes.js.map +1 -1
  215. package/dist/api/dashboard-routes.js +1 -1
  216. package/dist/api/dashboard-routes.js.map +1 -1
  217. package/dist/api/experiment-routes.d.ts +7 -0
  218. package/dist/api/experiment-routes.d.ts.map +1 -1
  219. package/dist/api/experiment-routes.js +8 -8
  220. package/dist/api/experiment-routes.js.map +1 -1
  221. package/dist/api/experiment-runtime-routes.d.ts +6 -0
  222. package/dist/api/experiment-runtime-routes.d.ts.map +1 -1
  223. package/dist/api/experiment-runtime-routes.js +47 -11
  224. package/dist/api/experiment-runtime-routes.js.map +1 -1
  225. package/dist/api/feed-routes.d.ts +2 -2
  226. package/dist/api/feed-routes.js +3 -3
  227. package/dist/api/feed-routes.js.map +1 -1
  228. package/dist/api/form-routes.js +4 -4
  229. package/dist/api/form-routes.js.map +1 -1
  230. package/dist/api/graphql/resolvers.d.ts +1 -1
  231. package/dist/api/graphql/resolvers.d.ts.map +1 -1
  232. package/dist/api/graphql/resolvers.js +68 -33
  233. package/dist/api/graphql/resolvers.js.map +1 -1
  234. package/dist/api/group-routes.js +6 -6
  235. package/dist/api/group-routes.js.map +1 -1
  236. package/dist/api/index.d.ts +1 -0
  237. package/dist/api/index.d.ts.map +1 -1
  238. package/dist/api/index.js +39 -6
  239. package/dist/api/index.js.map +1 -1
  240. package/dist/api/layout-routes.d.ts.map +1 -1
  241. package/dist/api/layout-routes.js +27 -3
  242. package/dist/api/layout-routes.js.map +1 -1
  243. package/dist/api/media-routes.d.ts.map +1 -1
  244. package/dist/api/media-routes.js +50 -26
  245. package/dist/api/media-routes.js.map +1 -1
  246. package/dist/api/menu-routes.d.ts +9 -1
  247. package/dist/api/menu-routes.d.ts.map +1 -1
  248. package/dist/api/menu-routes.js +44 -10
  249. package/dist/api/menu-routes.js.map +1 -1
  250. package/dist/api/nav-routes.d.ts +6 -0
  251. package/dist/api/nav-routes.d.ts.map +1 -1
  252. package/dist/api/nav-routes.js +24 -3
  253. package/dist/api/nav-routes.js.map +1 -1
  254. package/dist/api/openapi.d.ts.map +1 -1
  255. package/dist/api/openapi.js +68 -33
  256. package/dist/api/openapi.js.map +1 -1
  257. package/dist/api/search-routes.js +2 -2
  258. package/dist/api/search-routes.js.map +1 -1
  259. package/dist/api/section-template-routes.d.ts.map +1 -1
  260. package/dist/api/section-template-routes.js +35 -18
  261. package/dist/api/section-template-routes.js.map +1 -1
  262. package/dist/api/site-admin-routes.d.ts +10 -1
  263. package/dist/api/site-admin-routes.d.ts.map +1 -1
  264. package/dist/api/site-admin-routes.js +21 -1
  265. package/dist/api/site-admin-routes.js.map +1 -1
  266. package/dist/api/site-context.d.ts +35 -5
  267. package/dist/api/site-context.d.ts.map +1 -1
  268. package/dist/api/site-context.js +21 -6
  269. package/dist/api/site-context.js.map +1 -1
  270. package/dist/api/tag-routes.js +3 -3
  271. package/dist/api/tag-routes.js.map +1 -1
  272. package/dist/api/translation-routes.js +5 -5
  273. package/dist/api/translation-routes.js.map +1 -1
  274. package/dist/api/user-routes.d.ts.map +1 -1
  275. package/dist/api/user-routes.js +134 -19
  276. package/dist/api/user-routes.js.map +1 -1
  277. package/dist/api/webhook-routes.js +5 -5
  278. package/dist/api/webhook-routes.js.map +1 -1
  279. package/dist/api/workflow-routes.js +8 -8
  280. package/dist/api/workflow-routes.js.map +1 -1
  281. package/dist/audiences/collectors/identity.d.ts +14 -1
  282. package/dist/audiences/collectors/identity.d.ts.map +1 -1
  283. package/dist/audiences/collectors/identity.js +16 -3
  284. package/dist/audiences/collectors/identity.js.map +1 -1
  285. package/dist/audiences/collectors/index.d.ts +12 -2
  286. package/dist/audiences/collectors/index.d.ts.map +1 -1
  287. package/dist/audiences/collectors/index.js +16 -5
  288. package/dist/audiences/collectors/index.js.map +1 -1
  289. package/dist/audiences/collectors/pinned-audience.d.ts +28 -2
  290. package/dist/audiences/collectors/pinned-audience.d.ts.map +1 -1
  291. package/dist/audiences/collectors/pinned-audience.js +35 -5
  292. package/dist/audiences/collectors/pinned-audience.js.map +1 -1
  293. package/dist/audiences/collectors/utm.d.ts +15 -1
  294. package/dist/audiences/collectors/utm.d.ts.map +1 -1
  295. package/dist/audiences/collectors/utm.js +16 -2
  296. package/dist/audiences/collectors/utm.js.map +1 -1
  297. package/dist/audiences/consent-config.d.ts +21 -0
  298. package/dist/audiences/consent-config.d.ts.map +1 -0
  299. package/dist/audiences/consent-config.js +15 -0
  300. package/dist/audiences/consent-config.js.map +1 -0
  301. package/dist/audiences/consent-startup.d.ts +39 -0
  302. package/dist/audiences/consent-startup.d.ts.map +1 -0
  303. package/dist/audiences/consent-startup.js +105 -0
  304. package/dist/audiences/consent-startup.js.map +1 -0
  305. package/dist/audiences/consent.d.ts +192 -0
  306. package/dist/audiences/consent.d.ts.map +1 -0
  307. package/dist/audiences/consent.js +322 -0
  308. package/dist/audiences/consent.js.map +1 -0
  309. package/dist/audiences/engine.d.ts +7 -0
  310. package/dist/audiences/engine.d.ts.map +1 -1
  311. package/dist/audiences/engine.js +6 -2
  312. package/dist/audiences/engine.js.map +1 -1
  313. package/dist/audiences/index.d.ts +3 -0
  314. package/dist/audiences/index.d.ts.map +1 -1
  315. package/dist/audiences/index.js +6 -0
  316. package/dist/audiences/index.js.map +1 -1
  317. package/dist/audiences/server-eval.d.ts +13 -1
  318. package/dist/audiences/server-eval.d.ts.map +1 -1
  319. package/dist/audiences/server-eval.js +18 -2
  320. package/dist/audiences/server-eval.js.map +1 -1
  321. package/dist/audiences/ssr.d.ts +18 -1
  322. package/dist/audiences/ssr.d.ts.map +1 -1
  323. package/dist/audiences/ssr.js +18 -1
  324. package/dist/audiences/ssr.js.map +1 -1
  325. package/dist/audiences/utm-persistence.d.ts +20 -7
  326. package/dist/audiences/utm-persistence.d.ts.map +1 -1
  327. package/dist/audiences/utm-persistence.js +20 -7
  328. package/dist/audiences/utm-persistence.js.map +1 -1
  329. package/dist/auth/roles.d.ts +11 -0
  330. package/dist/auth/roles.d.ts.map +1 -1
  331. package/dist/auth/roles.js +13 -0
  332. package/dist/auth/roles.js.map +1 -1
  333. package/dist/auth/tokens.d.ts +7 -0
  334. package/dist/auth/tokens.d.ts.map +1 -1
  335. package/dist/auth/tokens.js +24 -2
  336. package/dist/auth/tokens.js.map +1 -1
  337. package/dist/config/types.d.ts +43 -0
  338. package/dist/config/types.d.ts.map +1 -1
  339. package/dist/config/types.js.map +1 -1
  340. package/dist/config/validate.d.ts.map +1 -1
  341. package/dist/config/validate.js +3 -0
  342. package/dist/config/validate.js.map +1 -1
  343. package/dist/db/apply-snapshot.d.ts +18 -0
  344. package/dist/db/apply-snapshot.d.ts.map +1 -1
  345. package/dist/db/apply-snapshot.js +41 -16
  346. package/dist/db/apply-snapshot.js.map +1 -1
  347. package/dist/db/component-instance-queries.d.ts +79 -19
  348. package/dist/db/component-instance-queries.d.ts.map +1 -1
  349. package/dist/db/component-instance-queries.js +266 -83
  350. package/dist/db/component-instance-queries.js.map +1 -1
  351. package/dist/db/component-queries.d.ts +1 -16
  352. package/dist/db/component-queries.d.ts.map +1 -1
  353. package/dist/db/component-queries.js +7 -56
  354. package/dist/db/component-queries.js.map +1 -1
  355. package/dist/db/content-queries.d.ts.map +1 -1
  356. package/dist/db/content-queries.js +1 -2
  357. package/dist/db/content-queries.js.map +1 -1
  358. package/dist/db/extension-queries.d.ts +2 -2
  359. package/dist/db/feed-queries.d.ts +3 -3
  360. package/dist/db/index.d.ts +1 -0
  361. package/dist/db/index.d.ts.map +1 -1
  362. package/dist/db/index.js +1 -0
  363. package/dist/db/index.js.map +1 -1
  364. package/dist/db/layout-queries.d.ts +2 -1
  365. package/dist/db/layout-queries.d.ts.map +1 -1
  366. package/dist/db/layout-queries.js +3 -3
  367. package/dist/db/layout-queries.js.map +1 -1
  368. package/dist/db/menu-queries.d.ts +69 -5
  369. package/dist/db/menu-queries.d.ts.map +1 -1
  370. package/dist/db/menu-queries.js +120 -13
  371. package/dist/db/menu-queries.js.map +1 -1
  372. package/dist/db/section-template-queries.d.ts +62 -0
  373. package/dist/db/section-template-queries.d.ts.map +1 -0
  374. package/dist/db/section-template-queries.js +178 -0
  375. package/dist/db/section-template-queries.js.map +1 -0
  376. package/dist/db/site-plugin-queries.d.ts +2 -2
  377. package/dist/db/tree-queries.d.ts.map +1 -1
  378. package/dist/db/tree-queries.js +5 -0
  379. package/dist/db/tree-queries.js.map +1 -1
  380. package/dist/db/webhook-queries.d.ts +3 -3
  381. package/dist/db/workflow-queries.d.ts.map +1 -1
  382. package/dist/db/workflow-queries.js +5 -20
  383. package/dist/db/workflow-queries.js.map +1 -1
  384. package/dist/experiments/runtime.d.ts +21 -3
  385. package/dist/experiments/runtime.d.ts.map +1 -1
  386. package/dist/experiments/runtime.js +21 -3
  387. package/dist/experiments/runtime.js.map +1 -1
  388. package/dist/layout/component-refs.d.ts +90 -2
  389. package/dist/layout/component-refs.d.ts.map +1 -1
  390. package/dist/layout/component-refs.js +293 -16
  391. package/dist/layout/component-refs.js.map +1 -1
  392. package/dist/layout/index.d.ts +4 -3
  393. package/dist/layout/index.d.ts.map +1 -1
  394. package/dist/layout/index.js +3 -2
  395. package/dist/layout/index.js.map +1 -1
  396. package/dist/layout/legacy-variant-container.d.ts +123 -0
  397. package/dist/layout/legacy-variant-container.d.ts.map +1 -0
  398. package/dist/layout/legacy-variant-container.js +397 -0
  399. package/dist/layout/legacy-variant-container.js.map +1 -0
  400. package/dist/layout/module-permissions.d.ts.map +1 -1
  401. package/dist/layout/module-permissions.js +25 -1
  402. package/dist/layout/module-permissions.js.map +1 -1
  403. package/dist/layout/modules-extended.d.ts +28 -1
  404. package/dist/layout/modules-extended.d.ts.map +1 -1
  405. package/dist/layout/modules-extended.js +73 -1
  406. package/dist/layout/modules-extended.js.map +1 -1
  407. package/dist/layout/modules.d.ts.map +1 -1
  408. package/dist/layout/modules.js +9 -1
  409. package/dist/layout/modules.js.map +1 -1
  410. package/dist/layout/personalization.d.ts +83 -0
  411. package/dist/layout/personalization.d.ts.map +1 -1
  412. package/dist/layout/personalization.js +250 -4
  413. package/dist/layout/personalization.js.map +1 -1
  414. package/dist/layout/registry.d.ts.map +1 -1
  415. package/dist/layout/registry.js +20 -0
  416. package/dist/layout/registry.js.map +1 -1
  417. package/dist/layout/renderer.d.ts +29 -2
  418. package/dist/layout/renderer.d.ts.map +1 -1
  419. package/dist/layout/renderer.js +23 -6
  420. package/dist/layout/renderer.js.map +1 -1
  421. package/dist/layout/types.d.ts +17 -0
  422. package/dist/layout/types.d.ts.map +1 -1
  423. package/dist/layout/types.js +7 -0
  424. package/dist/layout/types.js.map +1 -1
  425. package/dist/media/inline-risk.d.ts +26 -0
  426. package/dist/media/inline-risk.d.ts.map +1 -0
  427. package/dist/media/inline-risk.js +142 -0
  428. package/dist/media/inline-risk.js.map +1 -0
  429. package/dist/nav/builder.d.ts.map +1 -1
  430. package/dist/nav/builder.js +15 -3
  431. package/dist/nav/builder.js.map +1 -1
  432. package/dist/nav/index.d.ts +1 -1
  433. package/dist/nav/index.d.ts.map +1 -1
  434. package/dist/nav/index.js +1 -1
  435. package/dist/nav/index.js.map +1 -1
  436. package/dist/nav/menu-resolver.d.ts +11 -0
  437. package/dist/nav/menu-resolver.d.ts.map +1 -1
  438. package/dist/nav/menu-resolver.js +49 -9
  439. package/dist/nav/menu-resolver.js.map +1 -1
  440. package/dist/nav/paths.d.ts +37 -0
  441. package/dist/nav/paths.d.ts.map +1 -0
  442. package/dist/nav/paths.js +48 -0
  443. package/dist/nav/paths.js.map +1 -0
  444. package/dist/nav/types.d.ts +6 -0
  445. package/dist/nav/types.d.ts.map +1 -1
  446. package/dist/nav/url-resolver.d.ts +1 -5
  447. package/dist/nav/url-resolver.d.ts.map +1 -1
  448. package/dist/nav/url-resolver.js +6 -12
  449. package/dist/nav/url-resolver.js.map +1 -1
  450. package/dist/schema/base.d.ts +24 -4
  451. package/dist/schema/base.d.ts.map +1 -1
  452. package/dist/schema/base.js +17 -4
  453. package/dist/schema/base.js.map +1 -1
  454. package/dist/schema/components.d.ts +90 -9
  455. package/dist/schema/components.d.ts.map +1 -1
  456. package/dist/schema/components.js +113 -22
  457. package/dist/schema/components.js.map +1 -1
  458. package/dist/schema/mysql-tables.d.ts +5758 -48
  459. package/dist/schema/mysql-tables.d.ts.map +1 -1
  460. package/dist/schema/mysql-tables.js +620 -46
  461. package/dist/schema/mysql-tables.js.map +1 -1
  462. package/dist/scope/kywi-form.d.ts +11 -0
  463. package/dist/scope/kywi-form.d.ts.map +1 -1
  464. package/dist/scope/kywi-form.js +11 -1
  465. package/dist/scope/kywi-form.js.map +1 -1
  466. package/dist/scope/kywi-wizard-form.d.ts.map +1 -1
  467. package/dist/scope/kywi-wizard-form.js +76 -2
  468. package/dist/scope/kywi-wizard-form.js.map +1 -1
  469. package/dist/scope/sticky-offset.d.ts +34 -13
  470. package/dist/scope/sticky-offset.d.ts.map +1 -1
  471. package/dist/scope/sticky-offset.js +236 -43
  472. package/dist/scope/sticky-offset.js.map +1 -1
  473. package/dist/site/styles.css +61 -15
  474. package/dist/versioning/scheduler.d.ts +28 -0
  475. package/dist/versioning/scheduler.d.ts.map +1 -1
  476. package/dist/versioning/scheduler.js +50 -3
  477. package/dist/versioning/scheduler.js.map +1 -1
  478. package/package.json +7 -2
@@ -0,0 +1,123 @@
1
+ /**
2
+ * legacy-variant-container.ts — the pure conversion behind
3
+ * `kywi upgrade:variant-containers` (kywi-cms#172).
4
+ *
5
+ * The deprecated `variantContainer` MODULE (`registry.ts`, `deprecated: true`)
6
+ * ships every arm's HTML to the browser and swaps them client-side with
7
+ * `patchVariantContainers` from `@kywi-software/js`. Its successor, the
8
+ * `ModuleVariantContainer` COLUMN NODE (`types.ts`), resolves server-side and
9
+ * edits in place. This module turns the first into the second.
10
+ *
11
+ * It is pure and lives in core rather than in the CLI for two reasons: it is the
12
+ * only part of the migration worth unit-testing exhaustively, and the same
13
+ * conversion has to run over two different stores — `kywi_content.layout` and
14
+ * the blueprint `kywi_section_templates.definition` — which are both plain
15
+ * `LayoutDocument`s. The CLI is only the driver.
16
+ *
17
+ * NOTHING here touches the database, the filesystem, or the clock.
18
+ */
19
+ import { type LayoutDocument, type ModuleNode, type ModuleVariantContainer } from './types.js';
20
+ /** The deprecated registry name. Not a `ModuleVariantContainer`'s `type`. */
21
+ export declare const LEGACY_VARIANT_CONTAINER_TYPE = "variantContainer";
22
+ /** The module type a migrated HTML arm becomes (owner decision D1(a)). */
23
+ export declare const LEGACY_ARM_MODULE_TYPE = "richText";
24
+ /** Where in a document a legacy placement sits. */
25
+ export type LegacyPlacementScope = 'regions' | 'pageVariant' | 'abExperiment';
26
+ /**
27
+ * One legacy `variantContainer` module found in a document, with everything the
28
+ * CLI report prints about it — and, when it cannot be migrated, why.
29
+ */
30
+ export interface LegacyVariantContainerPlacement {
31
+ moduleId: string;
32
+ instanceId: string;
33
+ scope: LegacyPlacementScope;
34
+ /** The page-variant / experiment-variant id, or null for the main regions. */
35
+ scopeId: string | null;
36
+ region: string;
37
+ sectionId: string;
38
+ columnId: string;
39
+ /** Position within `column.nodes` — the slot the container replaces 1:1. */
40
+ index: number;
41
+ mode: 'personalization' | 'ab_test';
42
+ armCount: number;
43
+ /** Arms whose `audienceId` is empty: real content bound to no audience. */
44
+ unboundArms: number;
45
+ /** Default arm + every arm's HTML, in bytes. */
46
+ htmlBytes: number;
47
+ /** Non-null when the placement was reported but deliberately left alone. */
48
+ refusal: string | null;
49
+ }
50
+ export interface LegacyMigrationOptions {
51
+ /** Id minter; injected so tests can assert exact ids. */
52
+ newId?: () => string;
53
+ /**
54
+ * Restrict the migration to these legacy module ids — the CLI's `--node`,
55
+ * which exists because the issue asks for per-placement, owner-invoked
56
+ * migration. Placements outside the selection are neither converted nor
57
+ * reported. Omit to take every placement in the document.
58
+ */
59
+ moduleIds?: readonly string[];
60
+ }
61
+ export interface LegacyMigrationResult {
62
+ /** The migrated document. Structurally shared with the input where nothing changed. */
63
+ document: LayoutDocument;
64
+ /** Every placement considered, converted or refused, in document order. */
65
+ placements: LegacyVariantContainerPlacement[];
66
+ converted: number;
67
+ /** False when `document` is the input unchanged — nothing to write. */
68
+ changed: boolean;
69
+ }
70
+ /**
71
+ * One legacy `variantContainer` module → one `ModuleVariantContainer`.
72
+ *
73
+ * The container takes a FRESH id: it is a different node kind, and reusing the
74
+ * module's id would collide with the Default arm, which keeps it. The Default
75
+ * arm inherits the legacy module's `id`, `instanceId` and `style` — that arm is
76
+ * the one that rendered by default, so `data-instance-id`, any pinned selector
77
+ * and any hand-written style targeting the block all survive one level.
78
+ *
79
+ * `props.skeleton` is dropped: the target resolves server-side, so there is no
80
+ * client swap left to hide behind a placeholder.
81
+ *
82
+ * Callers should refuse a node carrying a `componentId` before reaching here —
83
+ * see {@link migrateLegacyVariantContainers}.
84
+ */
85
+ export declare function convertLegacyVariantContainer(node: ModuleNode, options?: {
86
+ newId?: () => string;
87
+ }): ModuleVariantContainer;
88
+ /**
89
+ * Convert every legacy `variantContainer` module in a document.
90
+ *
91
+ * Pure: the input is never mutated, and the returned document shares every
92
+ * untouched branch with it, so `result.document === input` (by identity of its
93
+ * parts) wherever nothing changed. `changed` says whether there is anything to
94
+ * write at all.
95
+ *
96
+ * IDEMPOTENT BY CONSTRUCTION: the output holds no node satisfying
97
+ * `isModuleNode(n) && n.type === 'variantContainer'`, so a second run finds
98
+ * nothing. Re-running after a changeset publishes re-introduces the shape is the
99
+ * documented remedy, and it costs nothing when there is nothing to do.
100
+ *
101
+ * The three region maps walked — `regions`, `pageVariants[].regions` and
102
+ * `abExperiments[].variants[].regions` — are exactly the three
103
+ * `collectComponentInstances` walks, for the same reason: content stored in any
104
+ * of them is content that can render.
105
+ */
106
+ export declare function migrateLegacyVariantContainers(document: LayoutDocument | null | undefined, options?: LegacyMigrationOptions): LegacyMigrationResult;
107
+ /**
108
+ * Every legacy `variantContainer` module a document holds, with the refusal
109
+ * reason for any that cannot be migrated.
110
+ *
111
+ * A projection of {@link migrateLegacyVariantContainers} rather than a second
112
+ * walk, so "what would be migrated" and "what is migrated" can never drift.
113
+ */
114
+ export declare function findLegacyVariantContainers(document: LayoutDocument | null | undefined): LegacyVariantContainerPlacement[];
115
+ /**
116
+ * Does this document hold a legacy placement at all?
117
+ *
118
+ * The cheap structural confirm behind the CLI's `layout::text like
119
+ * '%"variantContainer"%'` candidate query, which over-selects: the same string
120
+ * is the section-level `VariantContainer`'s `type`.
121
+ */
122
+ export declare function hasLegacyVariantContainer(document: LayoutDocument | null | undefined): boolean;
123
+ //# sourceMappingURL=legacy-variant-container.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-variant-container.d.ts","sourceRoot":"","sources":["../../src/layout/legacy-variant-container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EAIL,KAAK,cAAc,EAEnB,KAAK,UAAU,EACf,KAAK,sBAAsB,EAG5B,MAAM,YAAY,CAAA;AAOnB,6EAA6E;AAC7E,eAAO,MAAM,6BAA6B,qBAAqB,CAAA;AAE/D,0EAA0E;AAC1E,eAAO,MAAM,sBAAsB,aAAa,CAAA;AAEhD,mDAAmD;AACnD,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,aAAa,GAAG,cAAc,CAAA;AAE7E;;;GAGG;AACH,MAAM,WAAW,+BAA+B;IAC9C,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,oBAAoB,CAAA;IAC3B,8EAA8E;IAC9E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,4EAA4E;IAC5E,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAAA;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAA;IACnB,gDAAgD;IAChD,SAAS,EAAE,MAAM,CAAA;IACjB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;IACpB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,qBAAqB;IACpC,uFAAuF;IACvF,QAAQ,EAAE,cAAc,CAAA;IACxB,2EAA2E;IAC3E,UAAU,EAAE,+BAA+B,EAAE,CAAA;IAC7C,SAAS,EAAE,MAAM,CAAA;IACjB,uEAAuE;IACvE,OAAO,EAAE,OAAO,CAAA;CACjB;AAiHD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,UAAU,EAChB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,MAAM,CAAA;CAAO,GACrC,sBAAsB,CA+BxB;AAuKD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EAC3C,OAAO,GAAE,sBAA2B,GACnC,qBAAqB,CAsEvB;AAED;;;;;;GAMG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAC1C,+BAA+B,EAAE,CAEnC;AAED;;;;;;GAMG;AACH,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAET"}
@@ -0,0 +1,397 @@
1
+ /**
2
+ * legacy-variant-container.ts — the pure conversion behind
3
+ * `kywi upgrade:variant-containers` (kywi-cms#172).
4
+ *
5
+ * The deprecated `variantContainer` MODULE (`registry.ts`, `deprecated: true`)
6
+ * ships every arm's HTML to the browser and swaps them client-side with
7
+ * `patchVariantContainers` from `@kywi-software/js`. Its successor, the
8
+ * `ModuleVariantContainer` COLUMN NODE (`types.ts`), resolves server-side and
9
+ * edits in place. This module turns the first into the second.
10
+ *
11
+ * It is pure and lives in core rather than in the CLI for two reasons: it is the
12
+ * only part of the migration worth unit-testing exhaustively, and the same
13
+ * conversion has to run over two different stores — `kywi_content.layout` and
14
+ * the blueprint `kywi_section_templates.definition` — which are both plain
15
+ * `LayoutDocument`s. The CLI is only the driver.
16
+ *
17
+ * NOTHING here touches the database, the filesystem, or the clock.
18
+ */
19
+ import { isModuleNode, } from './types.js';
20
+ // The editor's id minter, imported rather than re-declared so a migrated node
21
+ // is keyed exactly as an author-created one. `generate-id.ts` is deliberately
22
+ // dependency-free (see its header), so reaching it from here pulls nothing
23
+ // client-only into the layout graph.
24
+ import { generateId } from '../admin/layout-editor/generate-id.js';
25
+ /** The deprecated registry name. Not a `ModuleVariantContainer`'s `type`. */
26
+ export const LEGACY_VARIANT_CONTAINER_TYPE = 'variantContainer';
27
+ /** The module type a migrated HTML arm becomes (owner decision D1(a)). */
28
+ export const LEGACY_ARM_MODULE_TYPE = 'richText';
29
+ // ── Refusals ─────────────────────────────────────────────────────────────────
30
+ //
31
+ // A refused placement is REPORTED and left exactly as it is. Both refusals below
32
+ // exist because converting would be worse than not converting.
33
+ /**
34
+ * `validateLayoutDocument` rejects a `moduleVariantContainer` inside a
35
+ * SECTION-level `VariantContainer` arm outright — containers never nest. So a
36
+ * conversion there does not produce a slightly-worse document, it produces one
37
+ * that fails validation, which skips (and so blocks) the whole page. Refusing
38
+ * the one placement keeps the rest of the document migratable.
39
+ */
40
+ const REFUSAL_NESTED = 'sits inside a section-level variantContainer arm — module containers never nest; ' +
41
+ 'move it out of the personalized band first';
42
+ /**
43
+ * A module carrying a `componentId` takes its props FROM the component
44
+ * definition, not from the node (`ModuleNode.componentId`). Converting from the
45
+ * node's own props would therefore silently produce a container with no arms,
46
+ * and dropping the link would detach an instance the author never asked to
47
+ * detach. Migrating the definition is a separate job.
48
+ */
49
+ const REFUSAL_LINKED = 'is linked to a saved component — its arms live in the component definition; ' +
50
+ 'detach the instance first';
51
+ /**
52
+ * `variants` as stored: an array, or a JSON string of one.
53
+ *
54
+ * Both spellings are real — `parseVariants` in `variant-container-config.tsx`
55
+ * accepts either, so both reached the database. A malformed string is no arms,
56
+ * never a throw: this runs over stored data that no schema ever guarded, and a
57
+ * parse error must not take a whole migration run down.
58
+ */
59
+ function readArms(raw) {
60
+ let list = [];
61
+ if (Array.isArray(raw))
62
+ list = raw;
63
+ else if (typeof raw === 'string' && raw.trim()) {
64
+ try {
65
+ const parsed = JSON.parse(raw);
66
+ if (Array.isArray(parsed))
67
+ list = parsed;
68
+ }
69
+ catch {
70
+ list = [];
71
+ }
72
+ }
73
+ return list.map((entry) => {
74
+ const arm = (entry ?? {});
75
+ // The legacy weight is a PERCENT (0-100, "Weight %" in the props rail); the
76
+ // target's is a fraction of 1, the same units the section-level container
77
+ // and `validateArmWeights` use. Anything non-numeric is not a weight at all,
78
+ // so the field is omitted rather than coerced to a misleading 0.
79
+ const rawWeight = arm.weight;
80
+ const numeric = typeof rawWeight === 'number' ? rawWeight : Number(rawWeight);
81
+ return {
82
+ audienceId: String(arm.audienceId ?? ''),
83
+ label: String(arm.label ?? ''),
84
+ content: String(arm.content ?? ''),
85
+ weight: rawWeight === undefined || rawWeight === null || rawWeight === '' || !Number.isFinite(numeric)
86
+ ? undefined
87
+ : numeric / 100,
88
+ };
89
+ });
90
+ }
91
+ function readMode(raw) {
92
+ // Mirrors the renderer's own coercion: anything that is not exactly 'ab_test'
93
+ // rendered as personalization, so anything else migrates as personalization.
94
+ return raw === 'ab_test' ? 'ab_test' : 'personalization';
95
+ }
96
+ function byteLength(text) {
97
+ return new TextEncoder().encode(text).length;
98
+ }
99
+ // ── Conversion ───────────────────────────────────────────────────────────────
100
+ /**
101
+ * An HTML arm as a module.
102
+ *
103
+ * `richText` and not `html` (owner decision D1(a)): both run the same
104
+ * `sanitizeHtml` over their input, so the markup inside the arm is unchanged,
105
+ * but `richText` is not in `ADMIN_ONLY_MODULE_TYPES` — so the migration
106
+ * introduces nothing privileged and needs no role — and the arm stays
107
+ * inline-editable afterwards, which is most of the point of migrating.
108
+ */
109
+ function armModule(html, newId, identity) {
110
+ return {
111
+ id: identity?.id ?? newId(),
112
+ type: LEGACY_ARM_MODULE_TYPE,
113
+ instanceId: identity?.instanceId ?? newId(),
114
+ props: { content: html },
115
+ style: { ...(identity?.style ?? {}) },
116
+ };
117
+ }
118
+ /**
119
+ * One legacy `variantContainer` module → one `ModuleVariantContainer`.
120
+ *
121
+ * The container takes a FRESH id: it is a different node kind, and reusing the
122
+ * module's id would collide with the Default arm, which keeps it. The Default
123
+ * arm inherits the legacy module's `id`, `instanceId` and `style` — that arm is
124
+ * the one that rendered by default, so `data-instance-id`, any pinned selector
125
+ * and any hand-written style targeting the block all survive one level.
126
+ *
127
+ * `props.skeleton` is dropped: the target resolves server-side, so there is no
128
+ * client swap left to hide behind a placeholder.
129
+ *
130
+ * Callers should refuse a node carrying a `componentId` before reaching here —
131
+ * see {@link migrateLegacyVariantContainers}.
132
+ */
133
+ export function convertLegacyVariantContainer(node, options = {}) {
134
+ const newId = options.newId ?? generateId;
135
+ const props = node.props ?? {};
136
+ const mode = readMode(props.mode);
137
+ const variants = readArms(props.variants).map((arm) => ({
138
+ id: newId(),
139
+ label: arm.label,
140
+ // Kept even when empty. `''` is the single legal spelling of an unbound
141
+ // draft arm (`ModuleVariantEntry`); the legacy renderer filtered these out,
142
+ // so surfacing them is strictly additive — the content was always there,
143
+ // it just had nowhere to show.
144
+ audienceId: arm.audienceId,
145
+ ...(arm.weight === undefined ? {} : { weight: arm.weight }),
146
+ module: armModule(arm.content, newId),
147
+ }));
148
+ return {
149
+ id: newId(),
150
+ type: 'moduleVariantContainer',
151
+ mode,
152
+ // Never inherited — the legacy module has no experiment binding at all, and
153
+ // `validateModuleVariantContainerNode` requires one in ab_test mode.
154
+ ...(mode === 'ab_test' ? { experimentId: newId() } : {}),
155
+ defaultModule: armModule(String(props.defaultContent ?? ''), newId, {
156
+ id: node.id,
157
+ instanceId: node.instanceId,
158
+ style: node.style ?? {},
159
+ }),
160
+ variants,
161
+ };
162
+ }
163
+ // ── Walking ──────────────────────────────────────────────────────────────────
164
+ /** Is this column node a legacy `variantContainer` MODULE? */
165
+ function isLegacyNode(node) {
166
+ // Structural, via `isModuleNode`: the section-level `VariantContainer` shares
167
+ // the literal type string, and a bare `type ===` would catch it. A region node
168
+ // is never reached by a COLUMN walk, so this is belt and braces — but the two
169
+ // shapes having one name is exactly the trap worth guarding twice.
170
+ return isModuleNode(node) && node.type === LEGACY_VARIANT_CONTAINER_TYPE;
171
+ }
172
+ function describe(node, ctx, column, section, index, refusal) {
173
+ const props = node.props ?? {};
174
+ const arms = readArms(props.variants);
175
+ return {
176
+ moduleId: node.id,
177
+ instanceId: node.instanceId,
178
+ scope: ctx.scope,
179
+ scopeId: ctx.scopeId,
180
+ region: ctx.region,
181
+ sectionId: section.id,
182
+ columnId: column.id,
183
+ index,
184
+ mode: readMode(props.mode),
185
+ armCount: arms.length,
186
+ unboundArms: arms.filter((arm) => arm.audienceId === '').length,
187
+ htmlBytes: byteLength(String(props.defaultContent ?? '')) +
188
+ arms.reduce((sum, arm) => sum + byteLength(arm.content), 0),
189
+ refusal,
190
+ };
191
+ }
192
+ /** Returns the column unchanged when it holds nothing to migrate. */
193
+ function walkColumn(column, section, ctx, walker) {
194
+ // `nodes` is guarded because this runs over STORED documents that never went
195
+ // through `validateLayoutDocument` — the same reason `columnModules` guards it.
196
+ const nodes = column.nodes ?? [];
197
+ let next = null;
198
+ for (let index = 0; index < nodes.length; index++) {
199
+ const node = nodes[index];
200
+ if (!isLegacyNode(node))
201
+ continue;
202
+ if (walker.selected && !walker.selected.has(node.id))
203
+ continue;
204
+ const refusal = ctx.nested
205
+ ? REFUSAL_NESTED
206
+ : node.componentId
207
+ ? REFUSAL_LINKED
208
+ : null;
209
+ walker.placements.push(describe(node, ctx, column, section, index, refusal));
210
+ if (refusal)
211
+ continue;
212
+ next ??= [...nodes];
213
+ next[index] = convertLegacyVariantContainer(node, { newId: walker.newId });
214
+ walker.converted++;
215
+ }
216
+ return next ? { ...column, nodes: next } : column;
217
+ }
218
+ function walkSection(section, ctx, walker) {
219
+ const columns = section.columns ?? [];
220
+ let next = null;
221
+ for (let i = 0; i < columns.length; i++) {
222
+ const column = columns[i];
223
+ const migrated = walkColumn(column, section, ctx, walker);
224
+ if (migrated === column)
225
+ continue;
226
+ next ??= [...columns];
227
+ next[i] = migrated;
228
+ }
229
+ return next ? { ...section, columns: next } : section;
230
+ }
231
+ function walkSections(sections, ctx, walker) {
232
+ let next = null;
233
+ for (let i = 0; i < sections.length; i++) {
234
+ const section = sections[i];
235
+ const migrated = walkSection(section, ctx, walker);
236
+ if (migrated === section)
237
+ continue;
238
+ next ??= [...sections];
239
+ next[i] = migrated;
240
+ }
241
+ return next ?? sections;
242
+ }
243
+ function walkRegionNode(node, ctx, walker) {
244
+ if (node.type === 'section')
245
+ return walkSection(node, ctx, walker);
246
+ if (node.type !== 'variantContainer')
247
+ return node;
248
+ // A section-level container. Its arm sections are walked so a legacy module
249
+ // hiding in one is still REPORTED — but with `nested`, so it is refused rather
250
+ // than converted into a document that can no longer be saved.
251
+ const nestedCtx = { ...ctx, nested: true };
252
+ const defaultSections = walkSections(node.defaultSections ?? [], nestedCtx, walker);
253
+ let variants = node.variants ?? [];
254
+ let variantsNext = null;
255
+ for (let i = 0; i < variants.length; i++) {
256
+ const variant = variants[i];
257
+ const sections = walkSections(variant.sections ?? [], nestedCtx, walker);
258
+ if (sections === variant.sections)
259
+ continue;
260
+ variantsNext ??= [...variants];
261
+ variantsNext[i] = { ...variant, sections };
262
+ }
263
+ variants = variantsNext ?? variants;
264
+ if (defaultSections === node.defaultSections && variants === node.variants)
265
+ return node;
266
+ return { ...node, defaultSections, variants };
267
+ }
268
+ function walkRegions(regions, scope, scopeId, walker) {
269
+ if (!regions)
270
+ return regions;
271
+ let next = null;
272
+ for (const [region, nodes] of Object.entries(regions)) {
273
+ const ctx = { scope, scopeId, region, nested: false };
274
+ const list = nodes ?? [];
275
+ let listNext = null;
276
+ for (let i = 0; i < list.length; i++) {
277
+ const node = list[i];
278
+ const migrated = walkRegionNode(node, ctx, walker);
279
+ if (migrated === node)
280
+ continue;
281
+ listNext ??= [...list];
282
+ listNext[i] = migrated;
283
+ }
284
+ if (!listNext)
285
+ continue;
286
+ next ??= { ...regions };
287
+ next[region] = listNext;
288
+ }
289
+ return next ?? regions;
290
+ }
291
+ /**
292
+ * Convert every legacy `variantContainer` module in a document.
293
+ *
294
+ * Pure: the input is never mutated, and the returned document shares every
295
+ * untouched branch with it, so `result.document === input` (by identity of its
296
+ * parts) wherever nothing changed. `changed` says whether there is anything to
297
+ * write at all.
298
+ *
299
+ * IDEMPOTENT BY CONSTRUCTION: the output holds no node satisfying
300
+ * `isModuleNode(n) && n.type === 'variantContainer'`, so a second run finds
301
+ * nothing. Re-running after a changeset publishes re-introduces the shape is the
302
+ * documented remedy, and it costs nothing when there is nothing to do.
303
+ *
304
+ * The three region maps walked — `regions`, `pageVariants[].regions` and
305
+ * `abExperiments[].variants[].regions` — are exactly the three
306
+ * `collectComponentInstances` walks, for the same reason: content stored in any
307
+ * of them is content that can render.
308
+ */
309
+ export function migrateLegacyVariantContainers(document, options = {}) {
310
+ const empty = {
311
+ document: document ?? { regions: {} },
312
+ placements: [],
313
+ converted: 0,
314
+ changed: false,
315
+ };
316
+ if (!document || typeof document !== 'object')
317
+ return empty;
318
+ const walker = {
319
+ newId: options.newId ?? generateId,
320
+ selected: options.moduleIds ? new Set(options.moduleIds) : null,
321
+ placements: [],
322
+ converted: 0,
323
+ };
324
+ const regions = walkRegions(document.regions, 'regions', null, walker) ?? {};
325
+ let pageVariants = document.pageVariants;
326
+ if (pageVariants) {
327
+ let next = null;
328
+ for (let i = 0; i < pageVariants.length; i++) {
329
+ const variant = pageVariants[i];
330
+ const migrated = walkRegions(variant.regions, 'pageVariant', variant.id, walker);
331
+ if (migrated === variant.regions)
332
+ continue;
333
+ next ??= [...pageVariants];
334
+ next[i] = { ...variant, regions: migrated ?? {} };
335
+ }
336
+ pageVariants = next ?? pageVariants;
337
+ }
338
+ let abExperiments = document.abExperiments;
339
+ if (abExperiments) {
340
+ let next = null;
341
+ for (let i = 0; i < abExperiments.length; i++) {
342
+ const experiment = abExperiments[i];
343
+ const armVariants = experiment.variants ?? [];
344
+ let armsNext = null;
345
+ for (let j = 0; j < armVariants.length; j++) {
346
+ const arm = armVariants[j];
347
+ const migrated = walkRegions(arm.regions, 'abExperiment', arm.id, walker);
348
+ if (migrated === arm.regions)
349
+ continue;
350
+ armsNext ??= [...armVariants];
351
+ armsNext[j] = { ...arm, regions: migrated ?? {} };
352
+ }
353
+ if (!armsNext)
354
+ continue;
355
+ next ??= [...abExperiments];
356
+ next[i] = { ...experiment, variants: armsNext };
357
+ }
358
+ abExperiments = next ?? abExperiments;
359
+ }
360
+ const changed = regions !== document.regions ||
361
+ pageVariants !== document.pageVariants ||
362
+ abExperiments !== document.abExperiments;
363
+ return {
364
+ document: changed
365
+ ? {
366
+ ...document,
367
+ regions,
368
+ ...(pageVariants ? { pageVariants } : {}),
369
+ ...(abExperiments ? { abExperiments } : {}),
370
+ }
371
+ : document,
372
+ placements: walker.placements,
373
+ converted: walker.converted,
374
+ changed,
375
+ };
376
+ }
377
+ /**
378
+ * Every legacy `variantContainer` module a document holds, with the refusal
379
+ * reason for any that cannot be migrated.
380
+ *
381
+ * A projection of {@link migrateLegacyVariantContainers} rather than a second
382
+ * walk, so "what would be migrated" and "what is migrated" can never drift.
383
+ */
384
+ export function findLegacyVariantContainers(document) {
385
+ return migrateLegacyVariantContainers(document).placements;
386
+ }
387
+ /**
388
+ * Does this document hold a legacy placement at all?
389
+ *
390
+ * The cheap structural confirm behind the CLI's `layout::text like
391
+ * '%"variantContainer"%'` candidate query, which over-selects: the same string
392
+ * is the section-level `VariantContainer`'s `type`.
393
+ */
394
+ export function hasLegacyVariantContainer(document) {
395
+ return findLegacyVariantContainers(document).length > 0;
396
+ }
397
+ //# sourceMappingURL=legacy-variant-container.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"legacy-variant-container.js","sourceRoot":"","sources":["../../src/layout/legacy-variant-container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,EACL,YAAY,GASb,MAAM,YAAY,CAAA;AACnB,8EAA8E;AAC9E,8EAA8E;AAC9E,2EAA2E;AAC3E,qCAAqC;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAA;AAElE,6EAA6E;AAC7E,MAAM,CAAC,MAAM,6BAA6B,GAAG,kBAAkB,CAAA;AAE/D,0EAA0E;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAAG,UAAU,CAAA;AAoDhD,gFAAgF;AAChF,EAAE;AACF,iFAAiF;AACjF,+DAA+D;AAE/D;;;;;;GAMG;AACH,MAAM,cAAc,GAClB,mFAAmF;IACnF,4CAA4C,CAAA;AAE9C;;;;;;GAMG;AACH,MAAM,cAAc,GAClB,8EAA8E;IAC9E,2BAA2B,CAAA;AAY7B;;;;;;;GAOG;AACH,SAAS,QAAQ,CAAC,GAAY;IAC5B,IAAI,IAAI,GAAc,EAAE,CAAA;IACxB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;QAAE,IAAI,GAAG,GAAG,CAAA;SAC7B,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QAC/C,IAAI,CAAC;YACH,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;YACvC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,IAAI,GAAG,MAAM,CAAA;QAC1C,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,GAAG,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACxB,MAAM,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,CAA4B,CAAA;QACpD,4EAA4E;QAC5E,0EAA0E;QAC1E,6EAA6E;QAC7E,iEAAiE;QACjE,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAA;QAC5B,MAAM,OAAO,GAAG,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QAC7E,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;YACxC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;YAC9B,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC;YAClC,MAAM,EACJ,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAC5F,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,OAAO,GAAG,GAAG;SACpB,CAAA;IACH,CAAC,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,GAAY;IAC5B,8EAA8E;IAC9E,6EAA6E;IAC7E,OAAO,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,iBAAiB,CAAA;AAC1D,CAAC;AAED,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAA;AAC9C,CAAC;AAED,gFAAgF;AAEhF;;;;;;;;GAQG;AACH,SAAS,SAAS,CAChB,IAAY,EACZ,KAAmB,EACnB,QAA0D;IAE1D,OAAO;QACL,EAAE,EAAE,QAAQ,EAAE,EAAE,IAAI,KAAK,EAAE;QAC3B,IAAI,EAAE,sBAAsB;QAC5B,UAAU,EAAE,QAAQ,EAAE,UAAU,IAAI,KAAK,EAAE;QAC3C,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;QACxB,KAAK,EAAE,EAAE,GAAG,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;KACtC,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,6BAA6B,CAC3C,IAAgB,EAChB,UAAoC,EAAE;IAEtC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAA;IACzC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA;IAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAEjC,MAAM,QAAQ,GAAyB,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAC5E,EAAE,EAAE,KAAK,EAAE;QACX,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,wEAAwE;QACxE,4EAA4E;QAC5E,yEAAyE;QACzE,+BAA+B;QAC/B,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,GAAG,CAAC,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC;QAC3D,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;KACtC,CAAC,CAAC,CAAA;IAEH,OAAO;QACL,EAAE,EAAE,KAAK,EAAE;QACX,IAAI,EAAE,wBAAwB;QAC9B,IAAI;QACJ,4EAA4E;QAC5E,qEAAqE;QACrE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACxD,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE;YAClE,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;SACxB,CAAC;QACF,QAAQ;KACT,CAAA;AACH,CAAC;AAED,gFAAgF;AAEhF,8DAA8D;AAC9D,SAAS,YAAY,CAAC,IAAgB;IACpC,8EAA8E;IAC9E,+EAA+E;IAC/E,8EAA8E;IAC9E,mEAAmE;IACnE,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,6BAA6B,CAAA;AAC1E,CAAC;AAoBD,SAAS,QAAQ,CACf,IAAgB,EAChB,GAAgB,EAChB,MAAoB,EACpB,OAAsB,EACtB,KAAa,EACb,OAAsB;IAEtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAA;IAC9B,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IACrC,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,EAAE;QACjB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,SAAS,EAAE,OAAO,CAAC,EAAE;QACrB,QAAQ,EAAE,MAAM,CAAC,EAAE;QACnB,KAAK;QACL,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QAC1B,QAAQ,EAAE,IAAI,CAAC,MAAM;QACrB,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,KAAK,EAAE,CAAC,CAAC,MAAM;QAC/D,SAAS,EACP,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,IAAI,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC7D,OAAO;KACR,CAAA;AACH,CAAC;AAED,qEAAqE;AACrE,SAAS,UAAU,CACjB,MAAoB,EACpB,OAAsB,EACtB,GAAgB,EAChB,MAAc;IAEd,6EAA6E;IAC7E,gFAAgF;IAChF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE,CAAA;IAChC,IAAI,IAAI,GAAwB,IAAI,CAAA;IAEpC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAE,CAAA;QAC1B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;YAAE,SAAQ;QACjC,IAAI,MAAM,CAAC,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YAAE,SAAQ;QAE9D,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM;YACxB,CAAC,CAAC,cAAc;YAChB,CAAC,CAAC,IAAI,CAAC,WAAW;gBAChB,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,IAAI,CAAA;QACV,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAA;QAC5E,IAAI,OAAO;YAAE,SAAQ;QAErB,IAAI,KAAK,CAAC,GAAG,KAAK,CAAC,CAAA;QACnB,IAAI,CAAC,KAAK,CAAC,GAAG,6BAA6B,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;QAC1E,MAAM,CAAC,SAAS,EAAE,CAAA;IACpB,CAAC;IAED,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;AACnD,CAAC;AAED,SAAS,WAAW,CAAC,OAAsB,EAAE,GAAgB,EAAE,MAAc;IAC3E,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,EAAE,CAAA;IACrC,IAAI,IAAI,GAA0B,IAAI,CAAA;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAE,CAAA;QAC1B,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;QACzD,IAAI,QAAQ,KAAK,MAAM;YAAE,SAAQ;QACjC,IAAI,KAAK,CAAC,GAAG,OAAO,CAAC,CAAA;QACrB,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAA;IACpB,CAAC;IACD,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;AACvD,CAAC;AAED,SAAS,YAAY,CAAC,QAAyB,EAAE,GAAgB,EAAE,MAAc;IAC/E,IAAI,IAAI,GAA2B,IAAI,CAAA;IACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAA;QAC5B,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;QAClD,IAAI,QAAQ,KAAK,OAAO;YAAE,SAAQ;QAClC,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAA;QACtB,IAAI,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAA;IACpB,CAAC;IACD,OAAO,IAAI,IAAI,QAAQ,CAAA;AACzB,CAAC;AAED,SAAS,cAAc,CAAC,IAAgB,EAAE,GAAgB,EAAE,MAAc;IACxE,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,WAAW,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;IAClE,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB;QAAE,OAAO,IAAI,CAAA;IAEjD,4EAA4E;IAC5E,+EAA+E;IAC/E,8DAA8D;IAC9D,MAAM,SAAS,GAAgB,EAAE,GAAG,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;IACvD,MAAM,eAAe,GAAG,YAAY,CAAC,IAAI,CAAC,eAAe,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;IACnF,IAAI,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAA;IAClC,IAAI,YAAY,GAA2B,IAAI,CAAA;IAC/C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAA;QAC5B,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,EAAE,SAAS,EAAE,MAAM,CAAC,CAAA;QACxE,IAAI,QAAQ,KAAK,OAAO,CAAC,QAAQ;YAAE,SAAQ;QAC3C,YAAY,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAA;QAC9B,YAAY,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAA;IAC5C,CAAC;IACD,QAAQ,GAAG,YAAY,IAAI,QAAQ,CAAA;IACnC,IAAI,eAAe,KAAK,IAAI,CAAC,eAAe,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAA;IACvF,OAAO,EAAE,GAAG,IAAI,EAAE,eAAe,EAAE,QAAQ,EAAE,CAAA;AAC/C,CAAC;AAED,SAAS,WAAW,CAClB,OAAiD,EACjD,KAA2B,EAC3B,OAAsB,EACtB,MAAc;IAEd,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAA;IAC5B,IAAI,IAAI,GAAwC,IAAI,CAAA;IACpD,KAAK,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACtD,MAAM,GAAG,GAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;QAClE,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE,CAAA;QACxB,IAAI,QAAQ,GAAwB,IAAI,CAAA;QACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;YACrB,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,CAAA;YAClD,IAAI,QAAQ,KAAK,IAAI;gBAAE,SAAQ;YAC/B,QAAQ,KAAK,CAAC,GAAG,IAAI,CAAC,CAAA;YACtB,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAA;QACxB,CAAC;QACD,IAAI,CAAC,QAAQ;YAAE,SAAQ;QACvB,IAAI,KAAK,EAAE,GAAG,OAAO,EAAE,CAAA;QACvB,IAAI,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAA;IACzB,CAAC;IACD,OAAO,IAAI,IAAI,OAAO,CAAA;AACxB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,8BAA8B,CAC5C,QAA2C,EAC3C,UAAkC,EAAE;IAEpC,MAAM,KAAK,GAA0B;QACnC,QAAQ,EAAE,QAAQ,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACrC,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,KAAK;KACf,CAAA;IACD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAA;IAE3D,MAAM,MAAM,GAAW;QACrB,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,UAAU;QAClC,QAAQ,EAAE,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI;QAC/D,UAAU,EAAE,EAAE;QACd,SAAS,EAAE,CAAC;KACb,CAAA;IAED,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAA;IAE5E,IAAI,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAA;IACxC,IAAI,YAAY,EAAE,CAAC;QACjB,IAAI,IAAI,GAA+B,IAAI,CAAA;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,CAAE,CAAA;YAChC,MAAM,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,aAAa,EAAE,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;YAChF,IAAI,QAAQ,KAAK,OAAO,CAAC,OAAO;gBAAE,SAAQ;YAC1C,IAAI,KAAK,CAAC,GAAG,YAAY,CAAC,CAAA;YAC1B,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAA;QACnD,CAAC;QACD,YAAY,GAAG,IAAI,IAAI,YAAY,CAAA;IACrC,CAAC;IAED,IAAI,aAAa,GAAG,QAAQ,CAAC,aAAa,CAAA;IAC1C,IAAI,aAAa,EAAE,CAAC;QAClB,IAAI,IAAI,GAAgC,IAAI,CAAA;QAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9C,MAAM,UAAU,GAAG,aAAa,CAAC,CAAC,CAAE,CAAA;YACpC,MAAM,WAAW,GAAG,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAA;YAC7C,IAAI,QAAQ,GAA8B,IAAI,CAAA;YAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,GAAG,GAAG,WAAW,CAAC,CAAC,CAAE,CAAA;gBAC3B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;gBACzE,IAAI,QAAQ,KAAK,GAAG,CAAC,OAAO;oBAAE,SAAQ;gBACtC,QAAQ,KAAK,CAAC,GAAG,WAAW,CAAC,CAAA;gBAC7B,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,CAAA;YACnD,CAAC;YACD,IAAI,CAAC,QAAQ;gBAAE,SAAQ;YACvB,IAAI,KAAK,CAAC,GAAG,aAAa,CAAC,CAAA;YAC3B,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAA;QACjD,CAAC;QACD,aAAa,GAAG,IAAI,IAAI,aAAa,CAAA;IACvC,CAAC;IAED,MAAM,OAAO,GACX,OAAO,KAAK,QAAQ,CAAC,OAAO;QAC5B,YAAY,KAAK,QAAQ,CAAC,YAAY;QACtC,aAAa,KAAK,QAAQ,CAAC,aAAa,CAAA;IAE1C,OAAO;QACL,QAAQ,EAAE,OAAO;YACf,CAAC,CAAC;gBACE,GAAG,QAAQ;gBACX,OAAO;gBACP,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC5C;YACH,CAAC,CAAC,QAAQ;QACZ,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO;KACR,CAAA;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,2BAA2B,CACzC,QAA2C;IAE3C,OAAO,8BAA8B,CAAC,QAAQ,CAAC,CAAC,UAAU,CAAA;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,yBAAyB,CACvC,QAA2C;IAE3C,OAAO,2BAA2B,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,CAAA;AACzD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"module-permissions.d.ts","sourceRoot":"","sources":["../../src/layout/module-permissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,YAAY,CAAA;AAIvF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAAqB,CAAA;AAoF7E,6DAA6D;AAC7D,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACtC,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,yEAAyE;AACzE,MAAM,MAAM,yBAAyB,GAAG,CACtC,WAAW,EAAE,MAAM,KAChB,2BAA2B,GAAG,IAAI,GAAG,SAAS,CAAA;AAKnD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,2BAA2B,GAAG,IAAI,GAAG,SAAS,GACxD,cAAc,GAAG,IAAI,CA6CvB;AASD;;;;;;;;;;GAUG;AACH,wBAAgB,yCAAyC,CACvD,QAAQ,EAAE,2BAA2B,EACrC,MAAM,EAAE,2BAA2B,GAAG,IAAI,GAAG,SAAS,GACrD,MAAM,EAAE,CAIV;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EACzC,gBAAgB,CAAC,EAAE,yBAAyB,GAC3C,MAAM,EAAE,CAkBV"}
1
+ {"version":3,"file":"module-permissions.d.ts","sourceRoot":"","sources":["../../src/layout/module-permissions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAyC,MAAM,YAAY,CAAA;AAIvF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAAqB,CAAA;AAoF7E,6DAA6D;AAC7D,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAA;IACtC,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,yEAAyE;AACzE,MAAM,MAAM,yBAAyB,GAAG,CACtC,WAAW,EAAE,MAAM,KAChB,2BAA2B,GAAG,IAAI,GAAG,SAAS,CAAA;AAKnD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,2BAA2B,GAAG,IAAI,GAAG,SAAS,GACxD,cAAc,GAAG,IAAI,CAoEvB;AASD;;;;;;;;;;GAUG;AACH,wBAAgB,yCAAyC,CACvD,QAAQ,EAAE,2BAA2B,EACrC,MAAM,EAAE,2BAA2B,GAAG,IAAI,GAAG,SAAS,GACrD,MAAM,EAAE,CAIV;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,cAAc,EACxB,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EACzC,gBAAgB,CAAC,EAAE,yBAAyB,GAC3C,MAAM,EAAE,CAkBV"}
@@ -1,4 +1,4 @@
1
- import { columnModules, validateLayoutSection, validateVariantContainer } from './types.js';
1
+ import { columnModules, validateLayoutSection, validateModuleVariantContainer, validateVariantContainer } from './types.js';
2
2
  import { diffComponentRefs } from './component-refs.js';
3
3
  /**
4
4
  * Module types that expose privileged capabilities (raw HTML injection) and must
@@ -145,6 +145,30 @@ export function componentDefinitionAsDocument(component) {
145
145
  const parsed = validateVariantContainer(definition);
146
146
  return parsed.success ? { regions: { [DEFINITION_REGION]: [parsed.data] } } : null;
147
147
  }
148
+ if (component.type === 'moduleVariantContainer') {
149
+ // The fourth kind (kywi-cms#170). A module container is a COLUMN node, so it
150
+ // becomes a one-section, one-column document — the shape it really lives in
151
+ // — and `iterModuleNodes` then reaches every arm's module through
152
+ // `columnModules`, exactly as it reaches a plain module beside one on a page.
153
+ // Without this branch a promoted `html` block inside a component definition
154
+ // would be invisible to the gate, which is precisely the laundering the gate
155
+ // exists to stop.
156
+ const parsed = validateModuleVariantContainer(definition);
157
+ if (!parsed.success)
158
+ return null;
159
+ return {
160
+ regions: {
161
+ [DEFINITION_REGION]: [
162
+ {
163
+ id: 'definition:section',
164
+ type: 'section',
165
+ style: {},
166
+ columns: [{ id: 'definition:column', width: 12, nodes: [parsed.data] }],
167
+ },
168
+ ],
169
+ },
170
+ };
171
+ }
148
172
  return null;
149
173
  }
150
174
  /** Every admin-only module type contained in a definition, ignoring identity. */
@@ -1 +1 @@
1
- {"version":3,"file":"module-permissions.js","sourceRoot":"","sources":["../../src/layout/module-permissions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module-permissions.js","sourceRoot":"","sources":["../../src/layout/module-permissions.ts"],"names":[],"mappings":"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"}
@@ -66,7 +66,34 @@ export declare function NavigationModule({ props }: ModuleProps): React.JSX.Elem
66
66
  export declare function SearchModule({ props }: ModuleProps): import("react/jsx-runtime").JSX.Element;
67
67
  export declare function ComponentModule({ props }: ModuleProps): import("react/jsx-runtime").JSX.Element;
68
68
  export declare function FormModule({ props }: ModuleProps): import("react/jsx-runtime").JSX.Element;
69
- export declare function CookieConsentModule({ props }: ModuleProps): import("react/jsx-runtime").JSX.Element;
69
+ /**
70
+ * The consent banner. Its three buttons write the `kywi_consent` cookie through
71
+ * `setConsent()`, which is what every gated cookie write then reads
72
+ * (`audiences/consent.ts` owns the category map and the gate) — before
73
+ * kywi-cms#91 they were inert and the banner solicited a decision it discarded.
74
+ *
75
+ * Accept All / Reject All decide immediately. Customize reveals the per-category
76
+ * checkboxes (collapsed by default so the banner stays a one-line ask) and adds
77
+ * a Save Preferences button that records exactly what is ticked. `Essential` is
78
+ * checked and disabled throughout: necessary cookies are never gated, and the
79
+ * control says so rather than accepting a choice it would ignore.
80
+ *
81
+ * Rendering is decided AFTER mount, never during SSR: the server does not know
82
+ * this visitor's decision at render time, so the banner is always in the HTML
83
+ * and an effect resolves it. That keeps hydration deterministic and keeps the
84
+ * module cacheable.
85
+ *
86
+ * Which is why the markup ships HIDDEN, as `kywi-consent-pending`, and the
87
+ * effect unhides it only for a visitor with no decision on file. Rendering it
88
+ * visible and then removing it would flash a consent banner at every returning
89
+ * visitor on every page — soliciting a decision they already made, for the
90
+ * length of a paint. Better to reveal late than to ask twice.
91
+ *
92
+ * Inside the admin layout-editor canvas the banner always renders and its
93
+ * buttons record nothing — an editor placing the module must be able to see and
94
+ * arrange it, and clicking it there is not a visitor's consent.
95
+ */
96
+ export declare function CookieConsentModule({ props }: ModuleProps): import("react/jsx-runtime").JSX.Element | null;
70
97
  /**
71
98
  * Module-level variantContainer. Renders every arm into the DOM — the Default
72
99
  * arm visible, audience arms hidden — each tagged with `data-kywi-variant`. The