@kywi-software/core 0.14.0 → 0.15.1

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 (633) hide show
  1. package/AGENT-PATTERNS.md +200 -17
  2. package/README.md +38 -12
  3. package/dist/admin/audience-editor.d.ts +2 -0
  4. package/dist/admin/audience-editor.d.ts.map +1 -1
  5. package/dist/admin/audience-editor.js +4 -2
  6. package/dist/admin/audience-editor.js.map +1 -1
  7. package/dist/admin/chrome.d.ts.map +1 -1
  8. package/dist/admin/chrome.js +6 -7
  9. package/dist/admin/chrome.js.map +1 -1
  10. package/dist/admin/condition-builder.d.ts.map +1 -1
  11. package/dist/admin/condition-builder.js +16 -3
  12. package/dist/admin/condition-builder.js.map +1 -1
  13. package/dist/admin/field-components.d.ts.map +1 -1
  14. package/dist/admin/field-components.js +27 -1
  15. package/dist/admin/field-components.js.map +1 -1
  16. package/dist/admin/form-helpers.d.ts.map +1 -1
  17. package/dist/admin/form-helpers.js +6 -1
  18. package/dist/admin/form-helpers.js.map +1 -1
  19. package/dist/admin/layout-editor/chrome-env.d.ts +35 -0
  20. package/dist/admin/layout-editor/chrome-env.d.ts.map +1 -0
  21. package/dist/admin/layout-editor/chrome-env.js +13 -0
  22. package/dist/admin/layout-editor/chrome-env.js.map +1 -0
  23. package/dist/admin/layout-editor/component-actions.d.ts +58 -7
  24. package/dist/admin/layout-editor/component-actions.d.ts.map +1 -1
  25. package/dist/admin/layout-editor/component-actions.js +131 -5
  26. package/dist/admin/layout-editor/component-actions.js.map +1 -1
  27. package/dist/admin/layout-editor/component-fork.d.ts +4 -4
  28. package/dist/admin/layout-editor/component-fork.d.ts.map +1 -1
  29. package/dist/admin/layout-editor/component-fork.js +76 -10
  30. package/dist/admin/layout-editor/component-fork.js.map +1 -1
  31. package/dist/admin/layout-editor/component-picker-field.d.ts +17 -3
  32. package/dist/admin/layout-editor/component-picker-field.d.ts.map +1 -1
  33. package/dist/admin/layout-editor/component-picker-field.js +5 -2
  34. package/dist/admin/layout-editor/component-picker-field.js.map +1 -1
  35. package/dist/admin/layout-editor/drag-feedback.d.ts +25 -1
  36. package/dist/admin/layout-editor/drag-feedback.d.ts.map +1 -1
  37. package/dist/admin/layout-editor/drag-feedback.js +9 -0
  38. package/dist/admin/layout-editor/drag-feedback.js.map +1 -1
  39. package/dist/admin/layout-editor/drag-utils.d.ts +103 -5
  40. package/dist/admin/layout-editor/drag-utils.d.ts.map +1 -1
  41. package/dist/admin/layout-editor/drag-utils.js +131 -4
  42. package/dist/admin/layout-editor/drag-utils.js.map +1 -1
  43. package/dist/admin/layout-editor/editor-canvas.d.ts +11 -0
  44. package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
  45. package/dist/admin/layout-editor/editor-canvas.js +134 -20
  46. package/dist/admin/layout-editor/editor-canvas.js.map +1 -1
  47. package/dist/admin/layout-editor/editor-dialog.d.ts +58 -3
  48. package/dist/admin/layout-editor/editor-dialog.d.ts.map +1 -1
  49. package/dist/admin/layout-editor/editor-dialog.js +71 -9
  50. package/dist/admin/layout-editor/editor-dialog.js.map +1 -1
  51. package/dist/admin/layout-editor/editor-state.d.ts +119 -0
  52. package/dist/admin/layout-editor/editor-state.d.ts.map +1 -1
  53. package/dist/admin/layout-editor/editor-state.js +188 -6
  54. package/dist/admin/layout-editor/editor-state.js.map +1 -1
  55. package/dist/admin/layout-editor/editor-toolbar.d.ts +10 -1
  56. package/dist/admin/layout-editor/editor-toolbar.d.ts.map +1 -1
  57. package/dist/admin/layout-editor/editor-toolbar.js +2 -2
  58. package/dist/admin/layout-editor/editor-toolbar.js.map +1 -1
  59. package/dist/admin/layout-editor/editor.css +216 -8
  60. package/dist/admin/layout-editor/inline-text.d.ts +15 -1
  61. package/dist/admin/layout-editor/inline-text.d.ts.map +1 -1
  62. package/dist/admin/layout-editor/inline-text.js +30 -2
  63. package/dist/admin/layout-editor/inline-text.js.map +1 -1
  64. package/dist/admin/layout-editor/layout-editor.d.ts +21 -16
  65. package/dist/admin/layout-editor/layout-editor.d.ts.map +1 -1
  66. package/dist/admin/layout-editor/layout-editor.js +40 -17
  67. package/dist/admin/layout-editor/layout-editor.js.map +1 -1
  68. package/dist/admin/layout-editor/linked-component-notes.d.ts +88 -0
  69. package/dist/admin/layout-editor/linked-component-notes.d.ts.map +1 -0
  70. package/dist/admin/layout-editor/linked-component-notes.js +88 -0
  71. package/dist/admin/layout-editor/linked-component-notes.js.map +1 -0
  72. package/dist/admin/layout-editor/module-overlay.d.ts +23 -4
  73. package/dist/admin/layout-editor/module-overlay.d.ts.map +1 -1
  74. package/dist/admin/layout-editor/module-overlay.js +56 -10
  75. package/dist/admin/layout-editor/module-overlay.js.map +1 -1
  76. package/dist/admin/layout-editor/module-variant-container-config.d.ts.map +1 -1
  77. package/dist/admin/layout-editor/module-variant-container-config.js +9 -2
  78. package/dist/admin/layout-editor/module-variant-container-config.js.map +1 -1
  79. package/dist/admin/layout-editor/module-variant-container-panel.d.ts +75 -0
  80. package/dist/admin/layout-editor/module-variant-container-panel.d.ts.map +1 -0
  81. package/dist/admin/layout-editor/module-variant-container-panel.js +29 -0
  82. package/dist/admin/layout-editor/module-variant-container-panel.js.map +1 -0
  83. package/dist/admin/layout-editor/node-lookup.d.ts.map +1 -1
  84. package/dist/admin/layout-editor/node-lookup.js +33 -3
  85. package/dist/admin/layout-editor/node-lookup.js.map +1 -1
  86. package/dist/admin/layout-editor/overlay-shell.d.ts.map +1 -1
  87. package/dist/admin/layout-editor/overlay-shell.js +19 -4
  88. package/dist/admin/layout-editor/overlay-shell.js.map +1 -1
  89. package/dist/admin/layout-editor/props-panel.d.ts +28 -11
  90. package/dist/admin/layout-editor/props-panel.d.ts.map +1 -1
  91. package/dist/admin/layout-editor/props-panel.js +75 -125
  92. package/dist/admin/layout-editor/props-panel.js.map +1 -1
  93. package/dist/admin/layout-editor/section-variant-container-config.d.ts.map +1 -1
  94. package/dist/admin/layout-editor/section-variant-container-config.js +11 -2
  95. package/dist/admin/layout-editor/section-variant-container-config.js.map +1 -1
  96. package/dist/admin/layout-editor/use-chrome-flip.d.ts +99 -11
  97. package/dist/admin/layout-editor/use-chrome-flip.d.ts.map +1 -1
  98. package/dist/admin/layout-editor/use-chrome-flip.js +268 -97
  99. package/dist/admin/layout-editor/use-chrome-flip.js.map +1 -1
  100. package/dist/admin/layout-editor/use-component-connect.d.ts +13 -0
  101. package/dist/admin/layout-editor/use-component-connect.d.ts.map +1 -1
  102. package/dist/admin/layout-editor/use-component-connect.js +116 -20
  103. package/dist/admin/layout-editor/use-component-connect.js.map +1 -1
  104. package/dist/admin/layout-editor/use-component-fork.d.ts +49 -19
  105. package/dist/admin/layout-editor/use-component-fork.d.ts.map +1 -1
  106. package/dist/admin/layout-editor/use-component-fork.js +28 -19
  107. package/dist/admin/layout-editor/use-component-fork.js.map +1 -1
  108. package/dist/admin/layout-editor/use-component-library.d.ts +4 -4
  109. package/dist/admin/layout-editor/use-component-library.d.ts.map +1 -1
  110. package/dist/admin/layout-editor/use-component-library.js +1 -1
  111. package/dist/admin/layout-editor/use-component-library.js.map +1 -1
  112. package/dist/admin/layout-editor/use-editor-dnd.d.ts +10 -0
  113. package/dist/admin/layout-editor/use-editor-dnd.d.ts.map +1 -1
  114. package/dist/admin/layout-editor/use-editor-dnd.js +234 -14
  115. package/dist/admin/layout-editor/use-editor-dnd.js.map +1 -1
  116. package/dist/admin/layout-editor/variant-container-config.d.ts.map +1 -1
  117. package/dist/admin/layout-editor/variant-container-config.js +1 -1
  118. package/dist/admin/layout-editor/variant-container-config.js.map +1 -1
  119. package/dist/admin/layout-editor/variant-editor.d.ts +16 -15
  120. package/dist/admin/layout-editor/variant-editor.d.ts.map +1 -1
  121. package/dist/admin/layout-editor/variant-editor.js +16 -5
  122. package/dist/admin/layout-editor/variant-editor.js.map +1 -1
  123. package/dist/admin/primitives.d.ts.map +1 -1
  124. package/dist/admin/primitives.js +1 -1
  125. package/dist/admin/primitives.js.map +1 -1
  126. package/dist/admin/registry.d.ts +12 -0
  127. package/dist/admin/registry.d.ts.map +1 -1
  128. package/dist/admin/registry.js +12 -0
  129. package/dist/admin/registry.js.map +1 -1
  130. package/dist/admin/rule-tester.d.ts +1 -0
  131. package/dist/admin/rule-tester.d.ts.map +1 -1
  132. package/dist/admin/rule-tester.js +7 -4
  133. package/dist/admin/rule-tester.js.map +1 -1
  134. package/dist/admin/server.d.ts +10 -1
  135. package/dist/admin/server.d.ts.map +1 -1
  136. package/dist/admin/server.js +4 -1
  137. package/dist/admin/server.js.map +1 -1
  138. package/dist/admin/signal-options.d.ts +17 -0
  139. package/dist/admin/signal-options.d.ts.map +1 -1
  140. package/dist/admin/signal-options.js +28 -0
  141. package/dist/admin/signal-options.js.map +1 -1
  142. package/dist/admin/site-switcher.d.ts +16 -3
  143. package/dist/admin/site-switcher.d.ts.map +1 -1
  144. package/dist/admin/site-switcher.js +18 -3
  145. package/dist/admin/site-switcher.js.map +1 -1
  146. package/dist/admin/styles/admin.css +0 -3
  147. package/dist/admin/surface-matcher.d.ts +6 -2
  148. package/dist/admin/surface-matcher.d.ts.map +1 -1
  149. package/dist/admin/surface-matcher.js +42 -5
  150. package/dist/admin/surface-matcher.js.map +1 -1
  151. package/dist/admin/surfaces/audiences/audiences-data.d.ts +5 -0
  152. package/dist/admin/surfaces/audiences/audiences-data.d.ts.map +1 -1
  153. package/dist/admin/surfaces/audiences/audiences-data.js +3 -0
  154. package/dist/admin/surfaces/audiences/audiences-data.js.map +1 -1
  155. package/dist/admin/surfaces/components/components-data.d.ts +31 -11
  156. package/dist/admin/surfaces/components/components-data.d.ts.map +1 -1
  157. package/dist/admin/surfaces/components/components-data.js +17 -4
  158. package/dist/admin/surfaces/components/components-data.js.map +1 -1
  159. package/dist/admin/surfaces/components/components-list.d.ts.map +1 -1
  160. package/dist/admin/surfaces/components/components-list.js +20 -7
  161. package/dist/admin/surfaces/components/components-list.js.map +1 -1
  162. package/dist/admin/surfaces/components/definition-canvas.d.ts +11 -3
  163. package/dist/admin/surfaces/components/definition-canvas.d.ts.map +1 -1
  164. package/dist/admin/surfaces/components/definition-canvas.js +138 -17
  165. package/dist/admin/surfaces/components/definition-canvas.js.map +1 -1
  166. package/dist/admin/surfaces/dashboard/dashboard-index.d.ts.map +1 -1
  167. package/dist/admin/surfaces/dashboard/dashboard-index.js +2 -2
  168. package/dist/admin/surfaces/dashboard/dashboard-index.js.map +1 -1
  169. package/dist/admin/surfaces/layouts/layout-editor-client.d.ts.map +1 -1
  170. package/dist/admin/surfaces/layouts/layout-editor-client.js +12 -11
  171. package/dist/admin/surfaces/layouts/layout-editor-client.js.map +1 -1
  172. package/dist/admin/surfaces/menus/menu-editor.d.ts.map +1 -1
  173. package/dist/admin/surfaces/menus/menu-editor.js +17 -4
  174. package/dist/admin/surfaces/menus/menu-editor.js.map +1 -1
  175. package/dist/admin/surfaces/menus/menu-tree.d.ts +18 -4
  176. package/dist/admin/surfaces/menus/menu-tree.d.ts.map +1 -1
  177. package/dist/admin/surfaces/menus/menu-tree.js +18 -3
  178. package/dist/admin/surfaces/menus/menu-tree.js.map +1 -1
  179. package/dist/admin/surfaces/menus/menus-data.d.ts +18 -0
  180. package/dist/admin/surfaces/menus/menus-data.d.ts.map +1 -1
  181. package/dist/admin/surfaces/menus/menus-data.js +4 -0
  182. package/dist/admin/surfaces/menus/menus-data.js.map +1 -1
  183. package/dist/admin/surfaces/menus/menus-list.d.ts.map +1 -1
  184. package/dist/admin/surfaces/menus/menus-list.js +2 -12
  185. package/dist/admin/surfaces/menus/menus-list.js.map +1 -1
  186. package/dist/admin/surfaces/users/users-data.d.ts +14 -0
  187. package/dist/admin/surfaces/users/users-data.d.ts.map +1 -1
  188. package/dist/admin/surfaces/users/users-data.js +19 -0
  189. package/dist/admin/surfaces/users/users-data.js.map +1 -1
  190. package/dist/admin/surfaces/users/users-detail.d.ts.map +1 -1
  191. package/dist/admin/surfaces/users/users-detail.js +40 -4
  192. package/dist/admin/surfaces/users/users-detail.js.map +1 -1
  193. package/dist/admin/surfaces/users/users-new.d.ts.map +1 -1
  194. package/dist/admin/surfaces/users/users-new.js +8 -5
  195. package/dist/admin/surfaces/users/users-new.js.map +1 -1
  196. package/dist/admin/user-form.d.ts +10 -1
  197. package/dist/admin/user-form.d.ts.map +1 -1
  198. package/dist/admin/user-form.js +2 -2
  199. package/dist/admin/user-form.js.map +1 -1
  200. package/dist/api/admin-features-routes.js +2 -2
  201. package/dist/api/admin-features-routes.js.map +1 -1
  202. package/dist/api/api-key-routes.js +2 -2
  203. package/dist/api/api-key-routes.js.map +1 -1
  204. package/dist/api/audience-preview-routes.d.ts +7 -0
  205. package/dist/api/audience-preview-routes.d.ts.map +1 -1
  206. package/dist/api/audience-preview-routes.js +4 -4
  207. package/dist/api/audience-preview-routes.js.map +1 -1
  208. package/dist/api/audience-routes.d.ts +7 -0
  209. package/dist/api/audience-routes.d.ts.map +1 -1
  210. package/dist/api/audience-routes.js +31 -19
  211. package/dist/api/audience-routes.js.map +1 -1
  212. package/dist/api/audience-runtime-routes.d.ts +23 -0
  213. package/dist/api/audience-runtime-routes.d.ts.map +1 -1
  214. package/dist/api/audience-runtime-routes.js +511 -25
  215. package/dist/api/audience-runtime-routes.js.map +1 -1
  216. package/dist/api/auth-routes.d.ts.map +1 -1
  217. package/dist/api/auth-routes.js +10 -4
  218. package/dist/api/auth-routes.js.map +1 -1
  219. package/dist/api/auth.d.ts +1 -0
  220. package/dist/api/auth.d.ts.map +1 -1
  221. package/dist/api/auth.js +43 -3
  222. package/dist/api/auth.js.map +1 -1
  223. package/dist/api/ax-routes.d.ts.map +1 -1
  224. package/dist/api/ax-routes.js +7 -3
  225. package/dist/api/ax-routes.js.map +1 -1
  226. package/dist/api/bulk-routes.d.ts.map +1 -1
  227. package/dist/api/bulk-routes.js +7 -7
  228. package/dist/api/bulk-routes.js.map +1 -1
  229. package/dist/api/category-routes.js +6 -6
  230. package/dist/api/category-routes.js.map +1 -1
  231. package/dist/api/changeset-routes.js +2 -2
  232. package/dist/api/changeset-routes.js.map +1 -1
  233. package/dist/api/comment-routes.js +12 -12
  234. package/dist/api/comment-routes.js.map +1 -1
  235. package/dist/api/component-routes.d.ts +25 -0
  236. package/dist/api/component-routes.d.ts.map +1 -1
  237. package/dist/api/component-routes.js +44 -19
  238. package/dist/api/component-routes.js.map +1 -1
  239. package/dist/api/config-routes.js +4 -4
  240. package/dist/api/config-routes.js.map +1 -1
  241. package/dist/api/content-permission-routes.js +2 -2
  242. package/dist/api/content-permission-routes.js.map +1 -1
  243. package/dist/api/content-routes.d.ts.map +1 -1
  244. package/dist/api/content-routes.js +21 -16
  245. package/dist/api/content-routes.js.map +1 -1
  246. package/dist/api/content-type-routes.js +3 -3
  247. package/dist/api/content-type-routes.js.map +1 -1
  248. package/dist/api/dashboard-routes.js +1 -1
  249. package/dist/api/dashboard-routes.js.map +1 -1
  250. package/dist/api/experiment-routes.d.ts +7 -0
  251. package/dist/api/experiment-routes.d.ts.map +1 -1
  252. package/dist/api/experiment-routes.js +10 -10
  253. package/dist/api/experiment-routes.js.map +1 -1
  254. package/dist/api/experiment-runtime-routes.d.ts +6 -0
  255. package/dist/api/experiment-runtime-routes.d.ts.map +1 -1
  256. package/dist/api/experiment-runtime-routes.js +47 -11
  257. package/dist/api/experiment-runtime-routes.js.map +1 -1
  258. package/dist/api/extension-routes.js +4 -4
  259. package/dist/api/extension-routes.js.map +1 -1
  260. package/dist/api/feed-routes.d.ts +2 -2
  261. package/dist/api/feed-routes.js +5 -5
  262. package/dist/api/feed-routes.js.map +1 -1
  263. package/dist/api/form-routes.js +6 -6
  264. package/dist/api/form-routes.js.map +1 -1
  265. package/dist/api/graphql/resolvers.d.ts +1 -1
  266. package/dist/api/graphql/resolvers.d.ts.map +1 -1
  267. package/dist/api/graphql/resolvers.js +68 -33
  268. package/dist/api/graphql/resolvers.js.map +1 -1
  269. package/dist/api/group-routes.js +9 -9
  270. package/dist/api/group-routes.js.map +1 -1
  271. package/dist/api/index.d.ts +1 -0
  272. package/dist/api/index.d.ts.map +1 -1
  273. package/dist/api/index.js +43 -7
  274. package/dist/api/index.js.map +1 -1
  275. package/dist/api/layout-routes.d.ts +19 -1
  276. package/dist/api/layout-routes.d.ts.map +1 -1
  277. package/dist/api/layout-routes.js +92 -8
  278. package/dist/api/layout-routes.js.map +1 -1
  279. package/dist/api/layout-write-guard.d.ts +3 -2
  280. package/dist/api/layout-write-guard.d.ts.map +1 -1
  281. package/dist/api/layout-write-guard.js +12 -4
  282. package/dist/api/layout-write-guard.js.map +1 -1
  283. package/dist/api/media-routes.d.ts.map +1 -1
  284. package/dist/api/media-routes.js +100 -35
  285. package/dist/api/media-routes.js.map +1 -1
  286. package/dist/api/menu-routes.d.ts +9 -1
  287. package/dist/api/menu-routes.d.ts.map +1 -1
  288. package/dist/api/menu-routes.js +46 -12
  289. package/dist/api/menu-routes.js.map +1 -1
  290. package/dist/api/nav-routes.d.ts +6 -0
  291. package/dist/api/nav-routes.d.ts.map +1 -1
  292. package/dist/api/nav-routes.js +25 -4
  293. package/dist/api/nav-routes.js.map +1 -1
  294. package/dist/api/oauth-routes.js +2 -2
  295. package/dist/api/oauth-routes.js.map +1 -1
  296. package/dist/api/openapi.d.ts.map +1 -1
  297. package/dist/api/openapi.js +82 -34
  298. package/dist/api/openapi.js.map +1 -1
  299. package/dist/api/pagination.d.ts +10 -0
  300. package/dist/api/pagination.d.ts.map +1 -1
  301. package/dist/api/pagination.js +7 -1
  302. package/dist/api/pagination.js.map +1 -1
  303. package/dist/api/response.d.ts +29 -0
  304. package/dist/api/response.d.ts.map +1 -1
  305. package/dist/api/response.js +23 -3
  306. package/dist/api/response.js.map +1 -1
  307. package/dist/api/search-routes.d.ts.map +1 -1
  308. package/dist/api/search-routes.js +19 -5
  309. package/dist/api/search-routes.js.map +1 -1
  310. package/dist/api/section-template-routes.d.ts.map +1 -1
  311. package/dist/api/section-template-routes.js +37 -20
  312. package/dist/api/section-template-routes.js.map +1 -1
  313. package/dist/api/site-admin-routes.d.ts +10 -1
  314. package/dist/api/site-admin-routes.d.ts.map +1 -1
  315. package/dist/api/site-admin-routes.js +21 -1
  316. package/dist/api/site-admin-routes.js.map +1 -1
  317. package/dist/api/site-context.d.ts +35 -5
  318. package/dist/api/site-context.d.ts.map +1 -1
  319. package/dist/api/site-context.js +21 -6
  320. package/dist/api/site-context.js.map +1 -1
  321. package/dist/api/site-routes.js +2 -2
  322. package/dist/api/site-routes.js.map +1 -1
  323. package/dist/api/tag-routes.d.ts.map +1 -1
  324. package/dist/api/tag-routes.js +5 -5
  325. package/dist/api/tag-routes.js.map +1 -1
  326. package/dist/api/translation-routes.js +5 -5
  327. package/dist/api/translation-routes.js.map +1 -1
  328. package/dist/api/user-routes.d.ts.map +1 -1
  329. package/dist/api/user-routes.js +136 -21
  330. package/dist/api/user-routes.js.map +1 -1
  331. package/dist/api/version-routes.js +2 -2
  332. package/dist/api/version-routes.js.map +1 -1
  333. package/dist/api/webhook-routes.js +8 -8
  334. package/dist/api/webhook-routes.js.map +1 -1
  335. package/dist/api/workflow-routes.d.ts.map +1 -1
  336. package/dist/api/workflow-routes.js +23 -14
  337. package/dist/api/workflow-routes.js.map +1 -1
  338. package/dist/audiences/collectors/identity.d.ts +14 -1
  339. package/dist/audiences/collectors/identity.d.ts.map +1 -1
  340. package/dist/audiences/collectors/identity.js +16 -3
  341. package/dist/audiences/collectors/identity.js.map +1 -1
  342. package/dist/audiences/collectors/index.d.ts +16 -2
  343. package/dist/audiences/collectors/index.d.ts.map +1 -1
  344. package/dist/audiences/collectors/index.js +29 -5
  345. package/dist/audiences/collectors/index.js.map +1 -1
  346. package/dist/audiences/collectors/pinned-audience.d.ts +28 -2
  347. package/dist/audiences/collectors/pinned-audience.d.ts.map +1 -1
  348. package/dist/audiences/collectors/pinned-audience.js +35 -5
  349. package/dist/audiences/collectors/pinned-audience.js.map +1 -1
  350. package/dist/audiences/collectors/selfid.d.ts +25 -0
  351. package/dist/audiences/collectors/selfid.d.ts.map +1 -0
  352. package/dist/audiences/collectors/selfid.js +46 -0
  353. package/dist/audiences/collectors/selfid.js.map +1 -0
  354. package/dist/audiences/collectors/session.d.ts +41 -0
  355. package/dist/audiences/collectors/session.d.ts.map +1 -0
  356. package/dist/audiences/collectors/session.js +50 -0
  357. package/dist/audiences/collectors/session.js.map +1 -0
  358. package/dist/audiences/collectors/utm.d.ts +15 -1
  359. package/dist/audiences/collectors/utm.d.ts.map +1 -1
  360. package/dist/audiences/collectors/utm.js +16 -2
  361. package/dist/audiences/collectors/utm.js.map +1 -1
  362. package/dist/audiences/consent-config.d.ts +21 -0
  363. package/dist/audiences/consent-config.d.ts.map +1 -0
  364. package/dist/audiences/consent-config.js +15 -0
  365. package/dist/audiences/consent-config.js.map +1 -0
  366. package/dist/audiences/consent-startup.d.ts +39 -0
  367. package/dist/audiences/consent-startup.d.ts.map +1 -0
  368. package/dist/audiences/consent-startup.js +105 -0
  369. package/dist/audiences/consent-startup.js.map +1 -0
  370. package/dist/audiences/consent.d.ts +205 -0
  371. package/dist/audiences/consent.d.ts.map +1 -0
  372. package/dist/audiences/consent.js +335 -0
  373. package/dist/audiences/consent.js.map +1 -0
  374. package/dist/audiences/cookies.d.ts +21 -0
  375. package/dist/audiences/cookies.d.ts.map +1 -1
  376. package/dist/audiences/cookies.js +26 -0
  377. package/dist/audiences/cookies.js.map +1 -1
  378. package/dist/audiences/engine.d.ts +7 -0
  379. package/dist/audiences/engine.d.ts.map +1 -1
  380. package/dist/audiences/engine.js +7 -2
  381. package/dist/audiences/engine.js.map +1 -1
  382. package/dist/audiences/entry-page.d.ts +89 -0
  383. package/dist/audiences/entry-page.d.ts.map +1 -0
  384. package/dist/audiences/entry-page.js +116 -0
  385. package/dist/audiences/entry-page.js.map +1 -0
  386. package/dist/audiences/evaluator/instant-match.d.ts.map +1 -1
  387. package/dist/audiences/evaluator/instant-match.js +7 -0
  388. package/dist/audiences/evaluator/instant-match.js.map +1 -1
  389. package/dist/audiences/index.d.ts +6 -2
  390. package/dist/audiences/index.d.ts.map +1 -1
  391. package/dist/audiences/index.js +12 -2
  392. package/dist/audiences/index.js.map +1 -1
  393. package/dist/audiences/queries.d.ts +16 -0
  394. package/dist/audiences/queries.d.ts.map +1 -1
  395. package/dist/audiences/queries.js +28 -1
  396. package/dist/audiences/queries.js.map +1 -1
  397. package/dist/audiences/schema.d.ts +17 -0
  398. package/dist/audiences/schema.d.ts.map +1 -1
  399. package/dist/audiences/schema.js +7 -0
  400. package/dist/audiences/schema.js.map +1 -1
  401. package/dist/audiences/server-eval.d.ts +32 -1
  402. package/dist/audiences/server-eval.d.ts.map +1 -1
  403. package/dist/audiences/server-eval.js +35 -3
  404. package/dist/audiences/server-eval.js.map +1 -1
  405. package/dist/audiences/ssr.d.ts +18 -1
  406. package/dist/audiences/ssr.d.ts.map +1 -1
  407. package/dist/audiences/ssr.js +18 -1
  408. package/dist/audiences/ssr.js.map +1 -1
  409. package/dist/audiences/types.d.ts +22 -1
  410. package/dist/audiences/types.d.ts.map +1 -1
  411. package/dist/audiences/types.js +1 -0
  412. package/dist/audiences/types.js.map +1 -1
  413. package/dist/audiences/utm-persistence.d.ts +20 -7
  414. package/dist/audiences/utm-persistence.d.ts.map +1 -1
  415. package/dist/audiences/utm-persistence.js +20 -7
  416. package/dist/audiences/utm-persistence.js.map +1 -1
  417. package/dist/auth/roles.d.ts +11 -0
  418. package/dist/auth/roles.d.ts.map +1 -1
  419. package/dist/auth/roles.js +13 -0
  420. package/dist/auth/roles.js.map +1 -1
  421. package/dist/auth/tokens.d.ts +7 -0
  422. package/dist/auth/tokens.d.ts.map +1 -1
  423. package/dist/auth/tokens.js +24 -2
  424. package/dist/auth/tokens.js.map +1 -1
  425. package/dist/ax/content-source.d.ts +10 -2
  426. package/dist/ax/content-source.d.ts.map +1 -1
  427. package/dist/ax/content-source.js +81 -5
  428. package/dist/ax/content-source.js.map +1 -1
  429. package/dist/ax/effective-body.d.ts +28 -0
  430. package/dist/ax/effective-body.d.ts.map +1 -0
  431. package/dist/ax/effective-body.js +47 -0
  432. package/dist/ax/effective-body.js.map +1 -0
  433. package/dist/ax/index.d.ts +3 -1
  434. package/dist/ax/index.d.ts.map +1 -1
  435. package/dist/ax/index.js +2 -0
  436. package/dist/ax/index.js.map +1 -1
  437. package/dist/ax/jsonld.d.ts +31 -1
  438. package/dist/ax/jsonld.d.ts.map +1 -1
  439. package/dist/ax/jsonld.js +35 -22
  440. package/dist/ax/jsonld.js.map +1 -1
  441. package/dist/ax/layout-to-html.d.ts +127 -0
  442. package/dist/ax/layout-to-html.d.ts.map +1 -0
  443. package/dist/ax/layout-to-html.js +545 -0
  444. package/dist/ax/layout-to-html.js.map +1 -0
  445. package/dist/ax/llms-full-txt.d.ts +3 -1
  446. package/dist/ax/llms-full-txt.d.ts.map +1 -1
  447. package/dist/ax/llms-full-txt.js +5 -2
  448. package/dist/ax/llms-full-txt.js.map +1 -1
  449. package/dist/ax/page-markdown.d.ts +10 -2
  450. package/dist/ax/page-markdown.d.ts.map +1 -1
  451. package/dist/ax/page-markdown.js +16 -3
  452. package/dist/ax/page-markdown.js.map +1 -1
  453. package/dist/ax/summary.d.ts +4 -0
  454. package/dist/ax/summary.d.ts.map +1 -1
  455. package/dist/ax/summary.js +6 -1
  456. package/dist/ax/summary.js.map +1 -1
  457. package/dist/ax/types.d.ts +24 -0
  458. package/dist/ax/types.d.ts.map +1 -1
  459. package/dist/cache/content-invalidation.d.ts.map +1 -1
  460. package/dist/cache/content-invalidation.js +11 -0
  461. package/dist/cache/content-invalidation.js.map +1 -1
  462. package/dist/config/types.d.ts +43 -0
  463. package/dist/config/types.d.ts.map +1 -1
  464. package/dist/config/types.js.map +1 -1
  465. package/dist/config/validate.d.ts.map +1 -1
  466. package/dist/config/validate.js +3 -0
  467. package/dist/config/validate.js.map +1 -1
  468. package/dist/db/apply-snapshot.d.ts +25 -0
  469. package/dist/db/apply-snapshot.d.ts.map +1 -1
  470. package/dist/db/apply-snapshot.js +48 -16
  471. package/dist/db/apply-snapshot.js.map +1 -1
  472. package/dist/db/ax-queries.d.ts +6 -0
  473. package/dist/db/ax-queries.d.ts.map +1 -1
  474. package/dist/db/ax-queries.js +6 -0
  475. package/dist/db/ax-queries.js.map +1 -1
  476. package/dist/db/component-instance-queries.d.ts +79 -19
  477. package/dist/db/component-instance-queries.d.ts.map +1 -1
  478. package/dist/db/component-instance-queries.js +266 -83
  479. package/dist/db/component-instance-queries.js.map +1 -1
  480. package/dist/db/component-queries.d.ts +1 -16
  481. package/dist/db/component-queries.d.ts.map +1 -1
  482. package/dist/db/component-queries.js +7 -56
  483. package/dist/db/component-queries.js.map +1 -1
  484. package/dist/db/content-queries.d.ts.map +1 -1
  485. package/dist/db/content-queries.js +9 -2
  486. package/dist/db/content-queries.js.map +1 -1
  487. package/dist/db/extension-queries.d.ts +2 -2
  488. package/dist/db/feed-queries.d.ts +3 -3
  489. package/dist/db/index.d.ts +1 -0
  490. package/dist/db/index.d.ts.map +1 -1
  491. package/dist/db/index.js +1 -0
  492. package/dist/db/index.js.map +1 -1
  493. package/dist/db/layout-queries.d.ts +21 -3
  494. package/dist/db/layout-queries.d.ts.map +1 -1
  495. package/dist/db/layout-queries.js +14 -6
  496. package/dist/db/layout-queries.js.map +1 -1
  497. package/dist/db/menu-queries.d.ts +69 -5
  498. package/dist/db/menu-queries.d.ts.map +1 -1
  499. package/dist/db/menu-queries.js +120 -13
  500. package/dist/db/menu-queries.js.map +1 -1
  501. package/dist/db/search-queries.d.ts.map +1 -1
  502. package/dist/db/search-queries.js +24 -1
  503. package/dist/db/search-queries.js.map +1 -1
  504. package/dist/db/section-template-queries.d.ts +62 -0
  505. package/dist/db/section-template-queries.d.ts.map +1 -0
  506. package/dist/db/section-template-queries.js +178 -0
  507. package/dist/db/section-template-queries.js.map +1 -0
  508. package/dist/db/site-plugin-queries.d.ts +2 -2
  509. package/dist/db/tree-queries.d.ts.map +1 -1
  510. package/dist/db/tree-queries.js +5 -0
  511. package/dist/db/tree-queries.js.map +1 -1
  512. package/dist/db/webhook-queries.d.ts +3 -3
  513. package/dist/db/workflow-queries.d.ts.map +1 -1
  514. package/dist/db/workflow-queries.js +5 -20
  515. package/dist/db/workflow-queries.js.map +1 -1
  516. package/dist/experiments/runtime.d.ts +21 -3
  517. package/dist/experiments/runtime.d.ts.map +1 -1
  518. package/dist/experiments/runtime.js +21 -3
  519. package/dist/experiments/runtime.js.map +1 -1
  520. package/dist/hooks/ax-invalidation.d.ts.map +1 -1
  521. package/dist/hooks/ax-invalidation.js +4 -0
  522. package/dist/hooks/ax-invalidation.js.map +1 -1
  523. package/dist/layout/component-refs.d.ts +90 -2
  524. package/dist/layout/component-refs.d.ts.map +1 -1
  525. package/dist/layout/component-refs.js +293 -16
  526. package/dist/layout/component-refs.js.map +1 -1
  527. package/dist/layout/index.d.ts +7 -4
  528. package/dist/layout/index.d.ts.map +1 -1
  529. package/dist/layout/index.js +6 -3
  530. package/dist/layout/index.js.map +1 -1
  531. package/dist/layout/legacy-variant-container.d.ts +123 -0
  532. package/dist/layout/legacy-variant-container.d.ts.map +1 -0
  533. package/dist/layout/legacy-variant-container.js +397 -0
  534. package/dist/layout/legacy-variant-container.js.map +1 -0
  535. package/dist/layout/module-permissions.d.ts.map +1 -1
  536. package/dist/layout/module-permissions.js +26 -38
  537. package/dist/layout/module-permissions.js.map +1 -1
  538. package/dist/layout/modules-extended.d.ts +28 -1
  539. package/dist/layout/modules-extended.d.ts.map +1 -1
  540. package/dist/layout/modules-extended.js +73 -1
  541. package/dist/layout/modules-extended.js.map +1 -1
  542. package/dist/layout/modules.d.ts.map +1 -1
  543. package/dist/layout/modules.js +9 -1
  544. package/dist/layout/modules.js.map +1 -1
  545. package/dist/layout/personalization.d.ts +83 -0
  546. package/dist/layout/personalization.d.ts.map +1 -1
  547. package/dist/layout/personalization.js +250 -4
  548. package/dist/layout/personalization.js.map +1 -1
  549. package/dist/layout/registry.d.ts.map +1 -1
  550. package/dist/layout/registry.js +20 -0
  551. package/dist/layout/registry.js.map +1 -1
  552. package/dist/layout/renderer.d.ts +29 -2
  553. package/dist/layout/renderer.d.ts.map +1 -1
  554. package/dist/layout/renderer.js +23 -6
  555. package/dist/layout/renderer.js.map +1 -1
  556. package/dist/layout/seed-defaults.d.ts +45 -0
  557. package/dist/layout/seed-defaults.d.ts.map +1 -0
  558. package/dist/layout/seed-defaults.js +75 -0
  559. package/dist/layout/seed-defaults.js.map +1 -0
  560. package/dist/layout/types.d.ts +17 -0
  561. package/dist/layout/types.d.ts.map +1 -1
  562. package/dist/layout/types.js +7 -0
  563. package/dist/layout/types.js.map +1 -1
  564. package/dist/layout/walk.d.ts +14 -0
  565. package/dist/layout/walk.d.ts.map +1 -0
  566. package/dist/layout/walk.js +49 -0
  567. package/dist/layout/walk.js.map +1 -0
  568. package/dist/media/index.d.ts +1 -1
  569. package/dist/media/index.d.ts.map +1 -1
  570. package/dist/media/index.js +1 -1
  571. package/dist/media/index.js.map +1 -1
  572. package/dist/media/inline-risk.d.ts +26 -0
  573. package/dist/media/inline-risk.d.ts.map +1 -0
  574. package/dist/media/inline-risk.js +142 -0
  575. package/dist/media/inline-risk.js.map +1 -0
  576. package/dist/media/upload-allowlist.d.ts +23 -0
  577. package/dist/media/upload-allowlist.d.ts.map +1 -1
  578. package/dist/media/upload-allowlist.js +29 -0
  579. package/dist/media/upload-allowlist.js.map +1 -1
  580. package/dist/nav/builder.d.ts.map +1 -1
  581. package/dist/nav/builder.js +15 -3
  582. package/dist/nav/builder.js.map +1 -1
  583. package/dist/nav/index.d.ts +1 -1
  584. package/dist/nav/index.d.ts.map +1 -1
  585. package/dist/nav/index.js +1 -1
  586. package/dist/nav/index.js.map +1 -1
  587. package/dist/nav/menu-resolver.d.ts +11 -0
  588. package/dist/nav/menu-resolver.d.ts.map +1 -1
  589. package/dist/nav/menu-resolver.js +49 -9
  590. package/dist/nav/menu-resolver.js.map +1 -1
  591. package/dist/nav/paths.d.ts +37 -0
  592. package/dist/nav/paths.d.ts.map +1 -0
  593. package/dist/nav/paths.js +48 -0
  594. package/dist/nav/paths.js.map +1 -0
  595. package/dist/nav/types.d.ts +6 -0
  596. package/dist/nav/types.d.ts.map +1 -1
  597. package/dist/nav/url-resolver.d.ts +1 -5
  598. package/dist/nav/url-resolver.d.ts.map +1 -1
  599. package/dist/nav/url-resolver.js +6 -12
  600. package/dist/nav/url-resolver.js.map +1 -1
  601. package/dist/schema/base.d.ts +24 -4
  602. package/dist/schema/base.d.ts.map +1 -1
  603. package/dist/schema/base.js +17 -4
  604. package/dist/schema/base.js.map +1 -1
  605. package/dist/schema/components.d.ts +90 -9
  606. package/dist/schema/components.d.ts.map +1 -1
  607. package/dist/schema/components.js +113 -22
  608. package/dist/schema/components.js.map +1 -1
  609. package/dist/schema/mysql-tables.d.ts +5775 -48
  610. package/dist/schema/mysql-tables.d.ts.map +1 -1
  611. package/dist/schema/mysql-tables.js +622 -46
  612. package/dist/schema/mysql-tables.js.map +1 -1
  613. package/dist/scope/jsonld.d.ts +18 -3
  614. package/dist/scope/jsonld.d.ts.map +1 -1
  615. package/dist/scope/jsonld.js +6 -4
  616. package/dist/scope/jsonld.js.map +1 -1
  617. package/dist/scope/kywi-form.d.ts +11 -0
  618. package/dist/scope/kywi-form.d.ts.map +1 -1
  619. package/dist/scope/kywi-form.js +11 -1
  620. package/dist/scope/kywi-form.js.map +1 -1
  621. package/dist/scope/kywi-wizard-form.d.ts.map +1 -1
  622. package/dist/scope/kywi-wizard-form.js +76 -2
  623. package/dist/scope/kywi-wizard-form.js.map +1 -1
  624. package/dist/scope/sticky-offset.d.ts +34 -13
  625. package/dist/scope/sticky-offset.d.ts.map +1 -1
  626. package/dist/scope/sticky-offset.js +236 -43
  627. package/dist/scope/sticky-offset.js.map +1 -1
  628. package/dist/site/styles.css +61 -15
  629. package/dist/versioning/scheduler.d.ts +28 -0
  630. package/dist/versioning/scheduler.d.ts.map +1 -1
  631. package/dist/versioning/scheduler.js +50 -3
  632. package/dist/versioning/scheduler.js.map +1 -1
  633. package/package.json +12 -2
package/AGENT-PATTERNS.md CHANGED
@@ -185,16 +185,36 @@ every request — so writing a new definition changes every page that uses it
185
185
  immediately, published pages included, with nothing to re-publish. That is the
186
186
  whole point, and it is also the thing to be careful with.
187
187
 
188
- **What can be one.** A single module, a whole section (band), or a personalized /
189
- A-B tested band with its variants intact the three `type` values are `module`,
190
- `section` and `variantContainer`. A band's variants travel with it; which arm a
191
- visitor sees is still decided per request, per placement, so the same personalized
192
- component can sit on five pages and target correctly on each.
188
+ **What can be one.** A single module, a whole section (band), a personalized /
189
+ A-B tested band with its variants intact, or a personalized / A-B tested **module**
190
+ the four `type` values are `module`, `section`, `variantContainer` (section
191
+ level) and `moduleVariantContainer` (column level). Variants travel with the
192
+ component in both container kinds; which arm a visitor sees is still decided per
193
+ request, per placement, so the same personalized component can sit on five pages
194
+ and target correctly on each.
195
+
196
+ **Which container kind?** `variantContainer` is a whole band that varies —
197
+ different sections, different layouts per audience. `moduleVariantContainer` is
198
+ ONE module in a column that varies while everything around it stays put: a hero
199
+ headline that changes for paid traffic, a CTA button that is A/B tested inside an
200
+ otherwise fixed section. Reach for the module-level one when only the content of
201
+ a single block differs; personalizing the whole band to change one headline makes
202
+ every other module in it a copy the owner has to maintain twice.
203
+
204
+ **Arms are never independently linkable.** A variant arm's module cannot be saved
205
+ as a component of its own, and cannot be pointed at one. An arm is a challenger
206
+ the owner edits freely; wiring it to shared content would mean editing one page's
207
+ variant rewrote every other page's, which is the opposite of what a variant is
208
+ for. Save the whole container instead — that is what the fourth kind is.
193
209
 
194
210
  **In the editors** (front-of-site overlay or the admin Layout tab): select the
195
- module, section or band → **Save as component** → name it. The selection is
196
- replaced in place by a linked instance, marked with an outline and a pill naming
197
- the component. Place it again from the section picker's *Components* rows.
211
+ module, section, band or personalized module → **Save as component** → name it.
212
+ The selection is replaced in place by a linked instance, marked with an outline
213
+ and a pill naming the component. Place a section or band again from the section
214
+ picker's *Components* rows; place a module or a personalized module by dropping
215
+ the palette's **Component** block into a column and choosing it in the props
216
+ rail — one list, both kinds, because the owner's question there is "which saved
217
+ thing goes here".
198
218
 
199
219
  **Editing a linked instance ends in a question.** There are no per-prop overrides
200
220
  in v1: an instance renders its component exactly. So when you edit one and save,
@@ -224,8 +244,10 @@ per-site authorization applies.
224
244
 
225
245
  1. `POST /api/v1/components` — `{ name, type, definition, moduleType?, description? }`.
226
246
  The `definition` is the node itself: a `section` component stores the whole
227
- `LayoutSection`, a `variantContainer` the whole container, a `module` component
228
- stores `{ props, style }` and names its `moduleType`.
247
+ `LayoutSection`, a `variantContainer` the whole section-level container, a
248
+ `moduleVariantContainer` the whole column-level one (its `defaultModule` and
249
+ `variants`), and a `module` component stores `{ props, style }` and names its
250
+ `moduleType`.
229
251
  2. **Place it** by writing a layout that carries the link. There is no separate
230
252
  "insert" endpoint: `PUT /api/v1/content/:type/:id/layout` with the definition's
231
253
  own shape plus `componentId` on the node, giving the placement a fresh `id` of
@@ -247,8 +269,26 @@ per-site authorization applies.
247
269
  definition saved from an editor carries no `winnerId` at all; a definition
248
270
  POSTed straight over the API can, so read what you are placing. A
249
271
  `personalization` container has no binding and needs none.
272
+
273
+ **The same rule, word for word, for `moduleVariantContainer`.** It is a
274
+ placement root exactly as its section-level sibling is: the placement's
275
+ `experimentId` / `winnerId` win over the definition's, so an `ab_test`
276
+ placement you write over the API must carry a fresh `experimentId` and no
277
+ `winnerId`. The node goes in a COLUMN (`section.columns[].nodes[]`), not in a
278
+ region, and it carries its own `id` plus `componentId`, with the definition's
279
+ `defaultModule` / `variants` copied inline as the fallback copy.
280
+
281
+ **Do not bury an `ab_test` module container inside a `section` component.**
282
+ There it is not a placement root, nothing re-binds it per placement, and every
283
+ page placing that section reports into one shared run with one `winnerId`
284
+ deciding them all. Both editors refuse it and so does `POST /components`. A
285
+ `personalization` module container inside a section component is fine —
286
+ audiences are content and travel with the component.
250
287
  3. `GET /api/v1/components/:id/usage` — where it is placed (`instances`, `pages`,
251
- the page ids and node ids, and trashed pages counted separately). This is the
288
+ the page ids and node ids, with trashed pages and **saved layouts** each
289
+ counted separately: `trashedInstances`/`trashedPages` and
290
+ `blueprints`/`blueprintInstances`/`blueprintItems`). `instances`/`pages` mean
291
+ live pages only, so the three partitions never double-count. This is the
252
292
  blast radius; read it *before* changing a definition.
253
293
  4. `PUT /api/v1/components/:id` — a body with `definition` **is the propagation
254
294
  write**: every linked instance renders the new definition on its next request.
@@ -257,15 +297,20 @@ per-site authorization applies.
257
297
  5. `POST /api/v1/components/:id/detach-all` — materialize the definition into every
258
298
  page that links it and drop the links; each page keeps rendering identically.
259
299
  6. `DELETE /api/v1/components/:id` — refuses (409) while instances exist; add
260
- `?detachAll=1` to detach-then-delete. `GET /api/v1/components?withUsage=1` folds
300
+ `?detachAll=1` to detach-then-delete. "Instances" includes placements held by
301
+ trashed pages **and by saved layouts** (kywi-cms#156), so a component nothing
302
+ live uses can still refuse to delete — check `blueprints` in the usage payload
303
+ before assuming a one-step delete. `GET /api/v1/components?withUsage=1` folds
261
304
  the counts into a list, in one read.
262
305
 
263
- **Two refusals to design around.** A component definition may not link to another
306
+ **Three refusals to design around.** A component definition may not link to another
264
307
  component (one level only, deliberately: a nested link is invisible to usage counts
265
308
  and the delete gate, so the editors *materialize* an inner component when you save
266
309
  a section that contains one — the inner instance stops following its own source, and
267
310
  the dialog says so). And a stored layout that a live layout could not hold is
268
311
  rejected at the door, because detaching would copy it into every page that links it.
312
+ And a `section` or `variantContainer` definition may not contain an **A/B tested**
313
+ module container, for the shared-run reason above.
269
314
 
270
315
  **Component writes bypass approvals in v1.** They are not routed through
271
316
  changesets or the review workflow — a `PUT` with a definition is live on publish
@@ -286,6 +331,32 @@ reads as a styled document rather than a site. Sections are bands (each owns its
286
331
  background and padding), `columns` splits them, and the object modules below do
287
332
  the rest.
288
333
 
334
+ ### Module props: omitted takes the default, `''` stays blank
335
+
336
+ Every module declares its props, and most declare a `defaultValue` — the copy or
337
+ setting the module ships with so it renders as *something* the moment it is
338
+ placed. That default is applied on the **write path**, so it applies however the
339
+ module got there: dragged in by the editor, added with MCP `add_module`, or
340
+ written straight into a layout document.
341
+
342
+ The rule has two halves, and the second is the one that matters:
343
+
344
+ - **A prop you OMIT takes the module's declared default.** You do not need to
345
+ restate a module's own defaults to make it look right, and a custom module
346
+ does not need a second copy of them baked into its component.
347
+ - **A prop you write as `''` stays `''`.** An empty string is an instruction —
348
+ "blank on purpose" — not an absent value. Same for `null`, `0` and `false`:
349
+ presence of the key is the whole signal.
350
+
351
+ So `add_module` with no `props` gives you a module that renders; `add_module`
352
+ with `props: { eyebrow: '' }` gives you one with a deliberately empty eyebrow
353
+ and every other prop defaulted. To find out what a module's defaults actually
354
+ are, call `list_module_types` — each prop reports its `default`.
355
+
356
+ Defaults are seeded onto modules a write **adds**, never re-applied to modules
357
+ already on the page. Saving a page for an unrelated reason will not put back a
358
+ prop that someone deliberately left off an existing module.
359
+
289
360
  ### The built-in palette
290
361
 
291
362
  `name` is the exact `type` value in a layout node and in MCP `add_module`. A
@@ -360,11 +431,66 @@ authored elsewhere in the admin).
360
431
  | `personalizationBadge` | Optional inline status pill that opens the global transparency panel — not needed on ordinary pages (§8) |
361
432
  | `socialShare` | Share links for a URL/title across networks |
362
433
  | `map` | Embedded map at a lat/lng or address |
363
- | `cookieConsent` | Consent banner with message + privacy-policy link |
434
+ | `cookieConsent` | Consent banner with message + privacy-policy link. Accept All / Reject All / Customize write the `kywi_consent` cookie, and the engine's optional cookie writes are gated on it (see below) |
364
435
  | `component` | Places a saved reusable component by slug (§4) |
365
436
  | `form` | Renders a form built in the Forms admin (§6) |
366
437
  | `formEmbed` | Embeds a form by slug — lighter-weight placement of the same |
367
438
 
439
+ #### Cookie consent is enforced, not decorative
440
+
441
+ `cookieConsent` is wired to the engine. Its buttons write `kywi_consent`, and
442
+ `@kywi-software/core`'s `audiences/consent.ts` holds the one map from cookie name
443
+ to category that every optional write is gated on:
444
+
445
+ | Cookie | Category | Gated? |
446
+ |---|---|---|
447
+ | `kywi_visitor`, `kywi_signals`, `kywi_utm`, `kywi_audience`, `kywi_known` | `personalization` | yes |
448
+ | `kywi_consent`, `kywi_optout`, `kywi_preview_init` | `essential` | no — necessary cookies are never gated |
449
+
450
+ A gated cookie is neither **written** nor **read** without consent: a visitor who
451
+ accepted last month and rejects today has those cookies deleted, and any that
452
+ survive (`kywi_signals` is HttpOnly) are ignored on the way in. Rejecting is a
453
+ revocation, not just a pause.
454
+
455
+ One exemption: an audience the visitor picks **by hand** in the transparency
456
+ panel is stored as an `essential` preference, on the same argument as
457
+ `kywi_optout` — a control they operated deliberately has to be honoured, or the
458
+ panel is lying about what its buttons do. Only the runtime's automatic
459
+ "remember what I resolved" write is gated. The cookie records which it was
460
+ (`switcher:<id>` vs a bare id), so the read side and the revocation sweep apply
461
+ the same rule: rejecting personalization deletes an automatic pin but keeps one
462
+ the visitor chose.
463
+
464
+ **Undecided means not consented.** Until a visitor answers the banner, none of
465
+ the personalization cookies are written: pages still render, audiences still
466
+ resolve for the request in hand, experiments still return a variant — nothing is
467
+ persisted, so the visitor keeps seeing default content instead of being tracked.
468
+ A site that wants personalization to persist must place this module (or write
469
+ `kywi_consent` some other way). Adding a new cookie without classifying it in
470
+ that map fails closed, and a core test catches the omission.
471
+
472
+ **The escape hatch.** `theme.personalization.requireConsent` in `kywi.config.ts`
473
+ defaults to `true` — the behaviour above. Set it to `false` only when this site
474
+ collects consent with EXTERNAL tooling (a third-party CMP) that suppresses
475
+ cookies its own way; the gate then treats every category as allowed and the site
476
+ takes responsibility for compliance. Because Next.js edge middleware cannot read
477
+ `kywi.config.ts`, mirror the same value as `KYWI_REQUIRE_CONSENT=false` in the
478
+ environment. **Set both or neither** — `createKywiApiHandler` throws at startup
479
+ when they disagree, so a mismatch fails the deploy rather than silently leaving
480
+ the middleware and the API at odds about whether a visitor may be tracked. On a
481
+ site with no other consent mechanism, `false` is simply the non-compliant
482
+ setting.
483
+
484
+ The banner ships **hidden** (`kywi-consent-pending` on the wrapper) and reveals
485
+ itself after mount only for a visitor with no decision on file — a theme must not
486
+ force it visible, or every returning visitor gets a flash of a consent ask they
487
+ already answered.
488
+
489
+ When consent is required and no page places the module, the API logs a one-time
490
+ warning on its first request: nobody can grant consent, so every personalization
491
+ cookie stays suppressed and audiences, A/B bucketing and UTM attribution serve
492
+ default content to everyone.
493
+
368
494
  ### Which do I reach for? (in order)
369
495
 
370
496
  1. **A built-in already does it** → use it. Read the tables before inventing
@@ -409,9 +535,12 @@ module's *first* prop inline-editable on the page when its type is `text`,
409
535
  directly on the live page, and `props: { variant, headline, … }` cannot.
410
536
 
411
537
  Also: create **saved layouts** (Layouts admin) as page templates — "Landing
412
- page", "Case study" — so new pages start from a consistent skeleton. Hand-written
413
- JSX stays fine for genuinely fixed chrome (a bespoke 404, legal boilerplate)
414
- but if marketing will ever want to swap a headline, it's a layout page.
538
+ page", "Case study" — so new pages start from a consistent skeleton. A saved
539
+ layout may link reusable components like any page: the link is indexed, counted
540
+ in the component's usage under "saved layouts", and carried into every page
541
+ stamped out of that layout. Hand-written JSX stays fine for genuinely fixed
542
+ chrome (a bespoke 404, legal boilerplate) — but if marketing will ever want to
543
+ swap a headline, it's a layout page.
415
544
 
416
545
  ### Navigation: menus vs. the site tree
417
546
 
@@ -550,6 +679,27 @@ interchangeable. Two of them are current.
550
679
  forced — so a page that already has one is not broken, it is simply not the
551
680
  shape to add more of.
552
681
 
682
+ **Two signals make campaign handoffs and site-owned self-ID cheap
683
+ (kywi-cms#196/#200).** `query.<param>` matches the query string of the request
684
+ being served — `/developers?from=marketer` is the rule `query.from equals
685
+ marketer`, matched on that very request with no reload — and `session.entryPage`
686
+ is the session's first page (path + query), so the rule survives the visitor
687
+ navigating on. For an explicit control instead of the built-in self-ID widget,
688
+ `Kywi.setSelfId({ role: 'marketer' })` records the answer, resolves and PINS the
689
+ audience server-side and reloads; the pin is the part that matters, because the
690
+ losing arms are pruned on the server (see #167 below) and only a fresh server
691
+ render can show them. A plain form post to `/api/v1/kywi/self-id` with a
692
+ `returnTo` field does the same with JavaScript off. Two rules that decide
693
+ whether it works at all: **the endpoint stores only self-ID fields the site
694
+ declared** (Audiences → Self-ID Fields), so an undeclared key is dropped; and
695
+ **an audience with no rules never matches from answers**, because resolution
696
+ runs the same rules everything else does. For a chooser whose options ARE
697
+ audiences, flag them **public**, read the options from
698
+ `GET /api/v1/kywi/audiences` (which publishes only `{ id, name, label }`), and
699
+ pass the id straight back — `Kywi.setSelfId({}, { audienceId })`, or a hidden
700
+ `audienceId` input on the form — which pins the visitor's pick directly, rules
701
+ or no rules.
702
+
553
703
  **Neither container ever nests.** Not one inside the other, not one inside
554
704
  itself. A module already sitting in a personalized section's arm cannot be
555
705
  promoted — the editor withholds the action, `personalize_module` returns a
@@ -582,6 +732,39 @@ Four traps, each of which fails silently:
582
732
  Standing rule: **the default arm must be complete on its own.** It is what
583
733
  search engines, answer engines, and every opted-out visitor receive.
584
734
 
735
+ **What actually reaches the visitor (kywi-cms#167).** A published page ships
736
+ only the arm that visitor is served — the other arms of every section- and
737
+ module-level container are stripped on the server, before the document crosses
738
+ into the client renderer (`pruneLayoutToServedArms`, run last in the public
739
+ render path). So view-source shows one arm, not all of them, and the same is
740
+ true of page variants (`applyPageVariant` has always dropped those). Two things
741
+ follow. First, arm copy is not shared with the people it is not for, so an
742
+ unlaunched offer or a segment-specific price is not sitting in the HTML of
743
+ everyone else's page. Second, **the audience RULES still are** — the client
744
+ runtime is handed the active audiences so it can re-evaluate on client signals,
745
+ so how a visitor is classified remains public even though the content each class
746
+ gets is not. Author rules accordingly: they are readable.
747
+
748
+ **One exception, and it is a live one: the retired `variantContainer` MODULE.**
749
+ Pruning covers the two container NODES. It cannot cover the legacy module,
750
+ because that module's arms are not arms of a container at all — they are HTML
751
+ strings in its own props, and it renders every one of them into the DOM by
752
+ design, hiding the losing ones with `display: none` for the client runtime to
753
+ reveal. So a page that still carries one keeps publishing all of its arms in
754
+ plain markup, where `view-source` and "inspect element" both find them
755
+ immediately. Nothing about #167 changed that, and no amount of server-side
756
+ resolution can: the shape is client-swap by construction. If a page you are
757
+ working on has one, converting it is the fix — `kywi upgrade:variant-containers`
758
+ (landing separately, for kywi-cms#172) rewrites existing placements into the
759
+ `moduleVariantContainer` node, which is server-resolved and therefore pruned.
760
+ Until it is converted, treat that module's arms as public, whatever the audience
761
+ binding says.
762
+
763
+ The editor is the deliberate exception — the front-edit overlay and the admin
764
+ layout editor are handed the STORED document, every arm intact, because that is
765
+ what is being edited. If you are writing a host page, keep the two apart: prune
766
+ what you pass to `<KywiLayout>`, and pass the editor the layout you loaded.
767
+
585
768
  ### Transparency: automatic, not something you place
586
769
 
587
770
  Once the client runtime is loaded, every personalized (or opted-out-with-a-
package/README.md CHANGED
@@ -46,6 +46,12 @@ export default defineKywiConfig({
46
46
  })
47
47
  ```
48
48
 
49
+ `auth` takes one optional flag beyond `secret`/`providers`:
50
+ `strictSiteMembership` (default `false`). It makes per-site authorization
51
+ deny-by-default for users with no `kywi_site_memberships` rows, instead of
52
+ treating them as unscoped — safe to turn on once every user has real
53
+ memberships, and documented in full in `DEVELOPMENT.md`.
54
+
49
55
  `app/api/v1/[...kywi]/route.ts` — mounts the generated REST API:
50
56
 
51
57
  ```ts
@@ -82,18 +88,38 @@ exposes `content(id)`, `contentBySlug(slug, siteId)`,
82
88
  **Auth.** The endpoint reads the same `Authorization: Bearer <token>` header
83
89
  as the REST API. A missing/invalid header resolves to an anonymous caller
84
90
  rather than a 401 — anonymous access to published content is legal, matching
85
- `GET /search?status=published`. Requesting elevated (draft-visible) content —
86
- an explicit non-published `status`, or omitting `status` on `contentList`,
87
- `contentBySlug`, or `search` requires an authenticated caller who is a
88
- member of the query's `siteId`; otherwise the field returns a GraphQL error
89
- **before** any row is fetched. `contentBySlug` exposes no `status` arg, so
90
- every call implicitly requests elevated access and is checked against
91
- `siteId` membership up front an authenticated non-member is rejected with
92
- an error regardless of the row's actual status, since the membership check
93
- runs before the row is even looked up. Only `content(id)` differs, because
94
- it takes no `siteId` argument to check membership against up front it
95
- fetches the row first and then post-filters: a non-published row resolves
96
- to `null` for a caller without draft access, rather than erroring.
91
+ `GET /search?status=published`.
92
+
93
+ There are two tiers. **Members of the query's `siteId`** get what they ask
94
+ for, drafts included. **Everyone else** anonymous callers and authenticated
95
+ callers who are not members of that site alike gets the public tier: an
96
+ absent `status` narrows silently to `published`, and an EXPLICIT
97
+ non-published `status` is a GraphQL error raised **before** any row is
98
+ fetched. `contentBySlug` and `search` expose no `status` arg, so they always
99
+ land on one of those two tiers; a non-member simply sees published content,
100
+ the same as an anonymous caller (an API key scoped to site B can search site
101
+ A's published content, matching REST). `content(id)` differs only in
102
+ mechanism: it takes no `siteId` to check up front, so it fetches the row and
103
+ post-filters — a non-published row resolves to `null` for a caller without
104
+ draft access, rather than erroring.
105
+
106
+ `siteId` arguments accept either the config site id (slug) or the site's DB
107
+ UUID; they are normalized before any membership check or query, exactly as
108
+ the REST routes do.
109
+
110
+ "Member" means the same thing here as on the REST routes: `superAdmin`, or a
111
+ row in `kywi_site_memberships` for that site. A user with **zero** rows counts
112
+ as a member of every site unless the install opts into
113
+ `auth.strictSiteMembership: true`, which makes zero rows mean zero sites — see
114
+ `DEVELOPMENT.md`. Membership is read from the access token's `sites` claim, so
115
+ a change to it takes effect within the 15-minute access-token TTL.
116
+
117
+ `media(id)` is the one field with no public tier. Media rows carry no
118
+ publication status, so there is nothing to fall back to — the row is returned
119
+ only to a caller with access to the row's own site, and `null` to everyone
120
+ else, anonymous callers included. The public way to reach a file is the REST
121
+ serve route `GET /media/:id/file`, which is scoped to the site the request
122
+ addresses rather than to a caller-supplied UUID.
97
123
 
98
124
  **Per-content-type opt-in (default-deny).** A content type is only
99
125
  queryable through GraphQL when its config sets `graphql: true`:
@@ -7,6 +7,8 @@ interface AudienceEditorValues {
7
7
  status?: AudienceStatus;
8
8
  priority?: number;
9
9
  scoreThreshold?: number | null;
10
+ /** List this audience's name to the public runtime (kywi-cms#200). */
11
+ public?: boolean;
10
12
  conditionGroups?: ConditionGroupInput[];
11
13
  }
12
14
  interface AudienceEditorProps {
@@ -1 +1 @@
1
- {"version":3,"file":"audience-editor.d.ts","sourceRoot":"","sources":["../../src/admin/audience-editor.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,UAAU,oBAAoB;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,eAAe,CAAC,EAAE,mBAAmB,EAAE,CAAA;CACxC;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,oBAAoB,CAAA;IACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9D,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,qFAAqF;IACrF,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;CAC/B;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAoB,EAAE,aAAa,GAC7E,EAAE,mBAAmB,2CA8HrB"}
1
+ {"version":3,"file":"audience-editor.d.ts","sourceRoot":"","sources":["../../src/admin/audience-editor.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAEvD,UAAU,oBAAoB;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,MAAM,CAAC,EAAE,cAAc,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,sEAAsE;IACtE,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,eAAe,CAAC,EAAE,mBAAmB,EAAE,CAAA;CACxC;AAED,UAAU,mBAAmB;IAC3B,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAA;IACvB,aAAa,CAAC,EAAE,oBAAoB,CAAA;IACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,oBAAoB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC9D,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAA;IACrB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,qFAAqF;IACrF,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;CAC/B;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,QAAQ,EAAE,YAAoB,EAAE,aAAa,GAC7E,EAAE,mBAAmB,2CAiJrB"}
@@ -7,6 +7,7 @@ export function AudienceEditor({ mode, initialValues, onSubmit, onCancel, isSubm
7
7
  const [status, setStatus] = useState(initialValues?.status ?? 'draft');
8
8
  const [priority, setPriority] = useState(initialValues?.priority ?? 1);
9
9
  const [scoreThreshold, setScoreThreshold] = useState(initialValues?.scoreThreshold != null ? String(initialValues.scoreThreshold) : '');
10
+ const [isPublic, setIsPublic] = useState(initialValues?.public ?? false);
10
11
  const [conditionGroups, setConditionGroups] = useState(initialValues?.conditionGroups ?? []);
11
12
  const handleSubmit = useCallback((e) => {
12
13
  e.preventDefault();
@@ -16,9 +17,10 @@ export function AudienceEditor({ mode, initialValues, onSubmit, onCancel, isSubm
16
17
  status,
17
18
  priority,
18
19
  scoreThreshold: scoreThreshold !== '' ? Number(scoreThreshold) : null,
20
+ public: isPublic,
19
21
  conditionGroups,
20
22
  });
21
- }, [name, description, status, priority, scoreThreshold, conditionGroups, onSubmit]);
22
- return (_jsxs("form", { onSubmit: handleSubmit, className: "kywi-admin-audience-editor", children: [_jsx("div", { className: "kywi-admin-page-header", children: _jsx("h1", { children: mode === 'create' ? 'New Audience' : 'Edit Audience' }) }), _jsxs("div", { className: "kywi-admin-form-section", children: [_jsx("h2", { children: "Basic Info" }), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "audience-name", className: "kywi-field-label", children: "Name" }), _jsx("input", { id: "audience-name", type: "text", className: "kywi-input", value: name, onChange: e => setName(e.target.value), placeholder: "Audience name\u2026", required: true })] }), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "audience-description", className: "kywi-field-label", children: "Description" }), _jsx("textarea", { id: "audience-description", className: "kywi-textarea", value: description, onChange: e => setDescription(e.target.value), placeholder: "Optional description\u2026", rows: 3 })] }), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "audience-status", className: "kywi-field-label", children: "Status" }), _jsxs("select", { id: "audience-status", className: "kywi-select", value: status, onChange: e => setStatus(e.target.value), children: [_jsx("option", { value: "draft", children: "Draft" }), _jsx("option", { value: "active", children: "Active" }), _jsx("option", { value: "archived", children: "Archived" })] })] }), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "audience-priority", className: "kywi-field-label", children: "Priority" }), _jsx("input", { id: "audience-priority", type: "number", className: "kywi-input kywi-input-narrow", value: priority, onChange: e => setPriority(Number(e.target.value)), min: 1 }), _jsx("p", { className: "kywi-field-hint", children: "Lower number = higher priority" })] }), _jsxs("div", { className: "kywi-field", children: [_jsxs("label", { htmlFor: "audience-score-threshold", className: "kywi-field-label", children: ["Score Threshold ", _jsx("span", { className: "kywi-field-optional", children: "(optional)" })] }), _jsx("input", { id: "audience-score-threshold", type: "number", className: "kywi-input kywi-input-narrow", value: scoreThreshold, onChange: e => setScoreThreshold(e.target.value), placeholder: "e.g. 50", min: 0 }), _jsx("p", { className: "kywi-field-hint", children: "Minimum score required for audience match" })] })] }), _jsxs("div", { className: "kywi-admin-form-section", children: [_jsx("h2", { children: "Condition Groups" }), _jsx("p", { className: "kywi-admin-section-hint", children: "Visitors match this audience when ANY group's conditions are all met." }), _jsx(ConditionGroupEditor, { groups: conditionGroups, onChange: setConditionGroups, ...(signalOptions ? { signalOptions } : {}) })] }), _jsxs("div", { className: "kywi-admin-form-actions", children: [_jsx("button", { type: "submit", className: "kywi-btn kywi-btn-primary", disabled: isSubmitting, children: isSubmitting ? 'Saving…' : mode === 'create' ? 'Create Audience' : 'Save Audience' }), onCancel && (_jsx("button", { type: "button", onClick: onCancel, className: "kywi-btn kywi-btn-secondary", children: "Cancel" }))] })] }));
23
+ }, [name, description, status, priority, scoreThreshold, isPublic, conditionGroups, onSubmit]);
24
+ return (_jsxs("form", { onSubmit: handleSubmit, className: "kywi-admin-audience-editor", children: [_jsx("div", { className: "kywi-admin-page-header", children: _jsx("h1", { children: mode === 'create' ? 'New Audience' : 'Edit Audience' }) }), _jsxs("div", { className: "kywi-admin-form-section", children: [_jsx("h2", { children: "Basic Info" }), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "audience-name", className: "kywi-field-label", children: "Name" }), _jsx("input", { id: "audience-name", type: "text", className: "kywi-input", value: name, onChange: e => setName(e.target.value), placeholder: "Audience name\u2026", required: true })] }), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "audience-description", className: "kywi-field-label", children: "Description" }), _jsx("textarea", { id: "audience-description", className: "kywi-textarea", value: description, onChange: e => setDescription(e.target.value), placeholder: "Optional description\u2026", rows: 3 })] }), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "audience-status", className: "kywi-field-label", children: "Status" }), _jsxs("select", { id: "audience-status", className: "kywi-select", value: status, onChange: e => setStatus(e.target.value), children: [_jsx("option", { value: "draft", children: "Draft" }), _jsx("option", { value: "active", children: "Active" }), _jsx("option", { value: "archived", children: "Archived" })] })] }), _jsxs("div", { className: "kywi-field", children: [_jsx("label", { htmlFor: "audience-priority", className: "kywi-field-label", children: "Priority" }), _jsx("input", { id: "audience-priority", type: "number", className: "kywi-input kywi-input-narrow", value: priority, onChange: e => setPriority(Number(e.target.value)), min: 1 }), _jsx("p", { className: "kywi-field-hint", children: "Lower number = higher priority" })] }), _jsxs("div", { className: "kywi-field", children: [_jsxs("label", { htmlFor: "audience-score-threshold", className: "kywi-field-label", children: ["Score Threshold ", _jsx("span", { className: "kywi-field-optional", children: "(optional)" })] }), _jsx("input", { id: "audience-score-threshold", type: "number", className: "kywi-input kywi-input-narrow", value: scoreThreshold, onChange: e => setScoreThreshold(e.target.value), placeholder: "e.g. 50", min: 0 }), _jsx("p", { className: "kywi-field-hint", children: "Minimum score required for audience match" })] }), _jsxs("div", { className: "kywi-field kywi-field-checkbox", children: [_jsx("input", { id: "audience-public", type: "checkbox", checked: isPublic, onChange: e => setIsPublic(e.target.checked) }), _jsx("label", { htmlFor: "audience-public", className: "kywi-field-label", children: "Let pages offer this audience to visitors" }), _jsxs("p", { className: "kywi-field-hint", children: ["Adds this audience\u2019s id and name to the public", ' ', _jsx("code", { children: "GET /api/v1/kywi/audiences" }), " list, so a page can ask visitors which one they are. Only the name is published \u2014 never the conditions."] })] })] }), _jsxs("div", { className: "kywi-admin-form-section", children: [_jsx("h2", { children: "Condition Groups" }), _jsx("p", { className: "kywi-admin-section-hint", children: "Visitors match this audience when ANY group's conditions are all met." }), _jsx(ConditionGroupEditor, { groups: conditionGroups, onChange: setConditionGroups, ...(signalOptions ? { signalOptions } : {}) })] }), _jsxs("div", { className: "kywi-admin-form-actions", children: [_jsx("button", { type: "submit", className: "kywi-btn kywi-btn-primary", disabled: isSubmitting, children: isSubmitting ? 'Saving…' : mode === 'create' ? 'Create Audience' : 'Save Audience' }), onCancel && (_jsx("button", { type: "button", onClick: onCancel, className: "kywi-btn kywi-btn-secondary", children: "Cancel" }))] })] }));
23
25
  }
24
26
  //# sourceMappingURL=audience-editor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"audience-editor.js","sourceRoot":"","sources":["../../src/admin/audience-editor.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audience-editor.js","sourceRoot":"","sources":["../../src/admin/audience-editor.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chrome.d.ts","sourceRoot":"","sources":["../../src/admin/chrome.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAA;AAElD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAOrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAY5D,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,OAAO,EAAE,kBAAkB,CAAA;IAC3B,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAA;IACnB,gDAAgD;IAChD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,kBAAkB,CAAA;CACtC;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,gBAAgB,2CAuO3G"}
1
+ {"version":3,"file":"chrome.d.ts","sourceRoot":"","sources":["../../src/admin/chrome.tsx"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAA8B,MAAM,OAAO,CAAA;AAElD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAOrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA;AAY5D,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,OAAO,EAAE,kBAAkB,CAAA;IAC3B,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAA;IACnB,gDAAgD;IAChD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB;;;OAGG;IACH,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACjC;;;OAGG;IACH,gBAAgB,CAAC,EAAE,kBAAkB,CAAA;CACtC;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,EAAE,EAAE,gBAAgB,2CAyO3G"}
@@ -145,7 +145,8 @@ export function AdminChrome({ runtime, currentPath, children, navigate, moduleCo
145
145
  }
146
146
  // F2c-J09-G1: populate the site switcher. Sites come from the DB (their UUIDs
147
147
  // are what every site-scoped route accepts as ?siteId=). A superAdmin sees all
148
- // sites; any other role is filtered to its memberships via filterSitesForUser.
148
+ // sites; any other role is filtered to its memberships via filterSitesForUser,
149
+ // which needs the auth policy to read zero memberships the way the API does.
149
150
  async function loadSites(u) {
150
151
  try {
151
152
  const sitesRes = await adminFetch('/api/v1/sites');
@@ -166,12 +167,10 @@ export function AdminChrome({ runtime, currentPath, children, navigate, moduleCo
166
167
  catch {
167
168
  // Membership lookup is best-effort; superAdmin ignores it anyway.
168
169
  }
169
- const allowed = filterSitesForUser(all, {
170
- id: u.id,
171
- role: u.role,
172
- groups: u.groups,
173
- siteMemberships: memberships,
174
- });
170
+ const allowed = filterSitesForUser(all, { id: u.id, role: u.role, groups: u.groups, siteMemberships: memberships },
171
+ // Match the server's reading of "zero memberships" (kywi-cms#74) —
172
+ // unrestricted by default, nothing under strictSiteMembership.
173
+ runtime.overview.auth);
175
174
  setSites(allowed);
176
175
  // Establish the effective active site: the stored cookie if it still
177
176
  // points at an allowed site, else the first allowed site.
@@ -1 +1 @@
1
- {"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../src/admin/chrome.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chrome.js","sourceRoot":"","sources":["../../src/admin/chrome.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"condition-builder.d.ts","sourceRoot":"","sources":["../../src/admin/condition-builder.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAC5F,OAAO,EAAuB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAA;AAE5E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,GAAG,OAAO,CAAA;IACzB,MAAM,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAA;IAClC,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,CAAA;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,cAAc,EAAE,CAAA;CAC7B;AAmLD,UAAU,yBAAyB;IACjC,MAAM,EAAE,mBAAmB,EAAE,CAAA;IAC7B,QAAQ,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,KAAK,IAAI,CAAA;IACjD;;;;OAIG;IACH,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;CAC/B;AAED,wBAAgB,oBAAoB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAmC,EAAE,EAAE,yBAAyB,2CAiGxH"}
1
+ {"version":3,"file":"condition-builder.d.ts","sourceRoot":"","sources":["../../src/admin/condition-builder.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAC5F,OAAO,EAML,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAA;AAE5B,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,SAAS,GAAG,OAAO,CAAA;IACzB,MAAM,CAAC,EAAE,gBAAgB,GAAG,MAAM,CAAA;IAClC,QAAQ,CAAC,EAAE,eAAe,GAAG,MAAM,CAAA;IACnC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,cAAc,EAAE,CAAA;CAC7B;AA2ND,UAAU,yBAAyB;IACjC,MAAM,EAAE,mBAAmB,EAAE,CAAA;IAC7B,QAAQ,EAAE,CAAC,MAAM,EAAE,mBAAmB,EAAE,KAAK,IAAI,CAAA;IACjD;;;;OAIG;IACH,aAAa,CAAC,EAAE,YAAY,EAAE,CAAA;CAC/B;AAED,wBAAgB,oBAAoB,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAmC,EAAE,EAAE,yBAAyB,2CAiGxH"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { useCallback } from 'react';
3
- import { BASE_SIGNAL_OPTIONS } from './signal-options.js';
3
+ import { BASE_SIGNAL_OPTIONS, QUERY_SIGNAL_PREFIX, isQuerySignal, queryParamName, querySignalRef, } from './signal-options.js';
4
4
  /**
5
5
  * Render a `<select>` of signal options grouped by category via <optgroup>.
6
6
  * Shared by instant conditions and signalMatch score conditions.
@@ -14,6 +14,19 @@ function SignalSelect({ value, options, onChange, }) {
14
14
  }
15
15
  return (_jsxs("select", { className: "kywi-select", value: value, onChange: e => onChange(e.target.value), children: [_jsx("option", { value: "", children: "Select signal\u2026" }), Array.from(groups.entries()).map(([group, opts]) => (_jsx("optgroup", { label: group, children: opts.map(opt => (_jsx("option", { value: opt.value, children: opt.label }, opt.value))) }, group)))] }));
16
16
  }
17
+ /**
18
+ * The signal picker: the grouped `<select>`, plus the param-name input the
19
+ * `query.<param>` family needs (kywi-cms#196).
20
+ *
21
+ * Query parameters cannot be enumerated in advance — a campaign invents its own
22
+ * — so the catalogue carries one placeholder option (`query.`) and the name is
23
+ * typed here. A stored `query.from` selects that placeholder and pre-fills the
24
+ * input, so an existing rule round-trips through the editor unchanged.
25
+ */
26
+ function SignalPicker({ value, options, onChange, }) {
27
+ const isQuery = isQuerySignal(value);
28
+ return (_jsxs(_Fragment, { children: [_jsx(SignalSelect, { value: isQuery ? QUERY_SIGNAL_PREFIX : value, options: options, onChange: onChange }), isQuery && (_jsx("input", { type: "text", className: "kywi-input kywi-input-narrow", placeholder: "param name\u2026", "aria-label": "Query parameter key", value: queryParamName(value), onChange: e => onChange(querySignalRef(e.target.value)) }))] }));
29
+ }
17
30
  const OPERATOR_OPTIONS = [
18
31
  { value: 'equals', label: 'Equals' },
19
32
  { value: 'not_equals', label: 'Does not equal' },
@@ -36,12 +49,12 @@ const SCORE_TRIGGER_OPTIONS = [
36
49
  ];
37
50
  function ConditionRow({ condition, onChange, onRemove, signalOptions }) {
38
51
  if (condition.type === 'score') {
39
- return (_jsxs("div", { className: "kywi-admin-condition-row kywi-admin-condition-score", children: [_jsxs("select", { className: "kywi-select", value: condition.trigger ?? '', onChange: e => onChange({ ...condition, trigger: e.target.value }), children: [_jsx("option", { value: "", children: "Select trigger\u2026" }), SCORE_TRIGGER_OPTIONS.map(opt => (_jsx("option", { value: opt.value, children: opt.label }, opt.value)))] }), condition.trigger === 'signalMatch' && (_jsxs(_Fragment, { children: [_jsx(SignalSelect, { value: condition.signal ?? '', options: signalOptions, onChange: v => onChange({ ...condition, signal: v }) }), _jsxs("select", { className: "kywi-select", value: condition.operator ?? '', onChange: e => onChange({ ...condition, operator: e.target.value }), children: [_jsx("option", { value: "", children: "Select operator\u2026" }), OPERATOR_OPTIONS.map(opt => (_jsx("option", { value: opt.value, children: opt.label }, opt.value)))] }), condition.operator !== 'is_true' && condition.operator !== 'is_false' && (_jsx("input", { type: "text", className: "kywi-input", placeholder: "Value\u2026", value: condition.value ?? '', onChange: e => onChange({ ...condition, value: e.target.value }) }))] })), _jsx("input", { type: "number", className: "kywi-input kywi-input-narrow", placeholder: "Points", value: condition.points ?? '', onChange: e => onChange({ ...condition, points: Number(e.target.value) }) }), (condition.trigger === 'urlMatch' || condition.trigger === 'categoryViewed') && (_jsx("input", { type: "text", className: "kywi-input", placeholder: condition.trigger === 'urlMatch' ? 'URL pattern…' : 'Category name…', value: condition.pattern ?? condition.category ?? '', onChange: e => onChange({
52
+ return (_jsxs("div", { className: "kywi-admin-condition-row kywi-admin-condition-score", children: [_jsxs("select", { className: "kywi-select", value: condition.trigger ?? '', onChange: e => onChange({ ...condition, trigger: e.target.value }), children: [_jsx("option", { value: "", children: "Select trigger\u2026" }), SCORE_TRIGGER_OPTIONS.map(opt => (_jsx("option", { value: opt.value, children: opt.label }, opt.value)))] }), condition.trigger === 'signalMatch' && (_jsxs(_Fragment, { children: [_jsx(SignalPicker, { value: condition.signal ?? '', options: signalOptions, onChange: v => onChange({ ...condition, signal: v }) }), _jsxs("select", { className: "kywi-select", value: condition.operator ?? '', onChange: e => onChange({ ...condition, operator: e.target.value }), children: [_jsx("option", { value: "", children: "Select operator\u2026" }), OPERATOR_OPTIONS.map(opt => (_jsx("option", { value: opt.value, children: opt.label }, opt.value)))] }), condition.operator !== 'is_true' && condition.operator !== 'is_false' && (_jsx("input", { type: "text", className: "kywi-input", placeholder: "Value\u2026", value: condition.value ?? '', onChange: e => onChange({ ...condition, value: e.target.value }) }))] })), _jsx("input", { type: "number", className: "kywi-input kywi-input-narrow", placeholder: "Points", value: condition.points ?? '', onChange: e => onChange({ ...condition, points: Number(e.target.value) }) }), (condition.trigger === 'urlMatch' || condition.trigger === 'categoryViewed') && (_jsx("input", { type: "text", className: "kywi-input", placeholder: condition.trigger === 'urlMatch' ? 'URL pattern…' : 'Category name…', value: condition.pattern ?? condition.category ?? '', onChange: e => onChange({
40
53
  ...condition,
41
54
  ...(condition.trigger === 'urlMatch' ? { pattern: e.target.value } : { category: e.target.value }),
42
55
  }) })), (condition.trigger === 'pageViewCount' || condition.trigger === 'totalPageViews' || condition.trigger === 'timeOnSite') && (_jsx("input", { type: "number", className: "kywi-input kywi-input-narrow", placeholder: "Threshold", value: condition.threshold ?? '', onChange: e => onChange({ ...condition, threshold: Number(e.target.value) }) })), _jsx("button", { type: "button", onClick: onRemove, className: "kywi-btn kywi-btn-danger kywi-btn-sm", children: "Remove" })] }));
43
56
  }
44
- return (_jsxs("div", { className: "kywi-admin-condition-row kywi-admin-condition-instant", children: [_jsx(SignalSelect, { value: condition.signal ?? '', options: signalOptions, onChange: v => onChange({ ...condition, signal: v }) }), _jsxs("select", { className: "kywi-select", value: condition.operator ?? '', onChange: e => onChange({ ...condition, operator: e.target.value }), children: [_jsx("option", { value: "", children: "Select operator\u2026" }), OPERATOR_OPTIONS.map(opt => (_jsx("option", { value: opt.value, children: opt.label }, opt.value)))] }), condition.operator !== 'is_true' && condition.operator !== 'is_false' && (_jsx("input", { type: "text", className: "kywi-input", placeholder: "Value\u2026", value: condition.value ?? '', onChange: e => onChange({ ...condition, value: e.target.value }) })), _jsx("button", { type: "button", onClick: onRemove, className: "kywi-btn kywi-btn-danger kywi-btn-sm", children: "Remove" })] }));
57
+ return (_jsxs("div", { className: "kywi-admin-condition-row kywi-admin-condition-instant", children: [_jsx(SignalPicker, { value: condition.signal ?? '', options: signalOptions, onChange: v => onChange({ ...condition, signal: v }) }), _jsxs("select", { className: "kywi-select", value: condition.operator ?? '', onChange: e => onChange({ ...condition, operator: e.target.value }), children: [_jsx("option", { value: "", children: "Select operator\u2026" }), OPERATOR_OPTIONS.map(opt => (_jsx("option", { value: opt.value, children: opt.label }, opt.value)))] }), condition.operator !== 'is_true' && condition.operator !== 'is_false' && (_jsx("input", { type: "text", className: "kywi-input", placeholder: "Value\u2026", value: condition.value ?? '', onChange: e => onChange({ ...condition, value: e.target.value }) })), _jsx("button", { type: "button", onClick: onRemove, className: "kywi-btn kywi-btn-danger kywi-btn-sm", children: "Remove" })] }));
45
58
  }
46
59
  export function ConditionGroupEditor({ groups, onChange, signalOptions = BASE_SIGNAL_OPTIONS }) {
47
60
  const addGroup = useCallback(() => {
@@ -1 +1 @@
1
- {"version":3,"file":"condition-builder.js","sourceRoot":"","sources":["../../src/admin/condition-builder.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"condition-builder.js","sourceRoot":"","sources":["../../src/admin/condition-builder.tsx"],"names":[],"mappings":"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"}