@kywi-software/core 0.11.0 → 0.12.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 (216) hide show
  1. package/AGENT-PATTERNS.md +96 -10
  2. package/dist/admin/content-form.d.ts.map +1 -1
  3. package/dist/admin/content-form.js +97 -10
  4. package/dist/admin/content-form.js.map +1 -1
  5. package/dist/admin/layout-editor/component-actions.d.ts +219 -22
  6. package/dist/admin/layout-editor/component-actions.d.ts.map +1 -1
  7. package/dist/admin/layout-editor/component-actions.js +356 -36
  8. package/dist/admin/layout-editor/component-actions.js.map +1 -1
  9. package/dist/admin/layout-editor/component-fork.d.ts +224 -0
  10. package/dist/admin/layout-editor/component-fork.d.ts.map +1 -0
  11. package/dist/admin/layout-editor/component-fork.js +342 -0
  12. package/dist/admin/layout-editor/component-fork.js.map +1 -0
  13. package/dist/admin/layout-editor/editor-canvas.d.ts +8 -0
  14. package/dist/admin/layout-editor/editor-canvas.d.ts.map +1 -1
  15. package/dist/admin/layout-editor/editor-canvas.js +120 -12
  16. package/dist/admin/layout-editor/editor-canvas.js.map +1 -1
  17. package/dist/admin/layout-editor/editor-dialog.d.ts +164 -0
  18. package/dist/admin/layout-editor/editor-dialog.d.ts.map +1 -0
  19. package/dist/admin/layout-editor/editor-dialog.js +195 -0
  20. package/dist/admin/layout-editor/editor-dialog.js.map +1 -0
  21. package/dist/admin/layout-editor/editor-state.d.ts +76 -0
  22. package/dist/admin/layout-editor/editor-state.d.ts.map +1 -1
  23. package/dist/admin/layout-editor/editor-state.js +47 -1
  24. package/dist/admin/layout-editor/editor-state.js.map +1 -1
  25. package/dist/admin/layout-editor/editor.css +279 -2
  26. package/dist/admin/layout-editor/index.d.ts +10 -1
  27. package/dist/admin/layout-editor/index.d.ts.map +1 -1
  28. package/dist/admin/layout-editor/index.js +11 -1
  29. package/dist/admin/layout-editor/index.js.map +1 -1
  30. package/dist/admin/layout-editor/layout-editor.d.ts +58 -1
  31. package/dist/admin/layout-editor/layout-editor.d.ts.map +1 -1
  32. package/dist/admin/layout-editor/layout-editor.js +160 -190
  33. package/dist/admin/layout-editor/layout-editor.js.map +1 -1
  34. package/dist/admin/layout-editor/linked-component.d.ts +39 -0
  35. package/dist/admin/layout-editor/linked-component.d.ts.map +1 -0
  36. package/dist/admin/layout-editor/linked-component.js +42 -0
  37. package/dist/admin/layout-editor/linked-component.js.map +1 -0
  38. package/dist/admin/layout-editor/module-overlay.d.ts +10 -1
  39. package/dist/admin/layout-editor/module-overlay.d.ts.map +1 -1
  40. package/dist/admin/layout-editor/module-overlay.js +33 -4
  41. package/dist/admin/layout-editor/module-overlay.js.map +1 -1
  42. package/dist/admin/layout-editor/node-lookup.d.ts +35 -0
  43. package/dist/admin/layout-editor/node-lookup.d.ts.map +1 -1
  44. package/dist/admin/layout-editor/node-lookup.js +91 -0
  45. package/dist/admin/layout-editor/node-lookup.js.map +1 -1
  46. package/dist/admin/layout-editor/overlay-shell.d.ts.map +1 -1
  47. package/dist/admin/layout-editor/overlay-shell.js +114 -23
  48. package/dist/admin/layout-editor/overlay-shell.js.map +1 -1
  49. package/dist/admin/layout-editor/props-panel.d.ts +54 -1
  50. package/dist/admin/layout-editor/props-panel.d.ts.map +1 -1
  51. package/dist/admin/layout-editor/props-panel.js +118 -9
  52. package/dist/admin/layout-editor/props-panel.js.map +1 -1
  53. package/dist/admin/layout-editor/section-overlay.d.ts +9 -1
  54. package/dist/admin/layout-editor/section-overlay.d.ts.map +1 -1
  55. package/dist/admin/layout-editor/section-overlay.js +14 -4
  56. package/dist/admin/layout-editor/section-overlay.js.map +1 -1
  57. package/dist/admin/layout-editor/section-template-picker.d.ts +27 -1
  58. package/dist/admin/layout-editor/section-template-picker.d.ts.map +1 -1
  59. package/dist/admin/layout-editor/section-template-picker.js +71 -17
  60. package/dist/admin/layout-editor/section-template-picker.js.map +1 -1
  61. package/dist/admin/layout-editor/use-component-connect.d.ts +61 -0
  62. package/dist/admin/layout-editor/use-component-connect.d.ts.map +1 -0
  63. package/dist/admin/layout-editor/use-component-connect.js +292 -0
  64. package/dist/admin/layout-editor/use-component-connect.js.map +1 -0
  65. package/dist/admin/layout-editor/use-component-fork.d.ts +123 -0
  66. package/dist/admin/layout-editor/use-component-fork.d.ts.map +1 -0
  67. package/dist/admin/layout-editor/use-component-fork.js +346 -0
  68. package/dist/admin/layout-editor/use-component-fork.js.map +1 -0
  69. package/dist/admin/layout-editor/use-component-library.d.ts +94 -0
  70. package/dist/admin/layout-editor/use-component-library.d.ts.map +1 -0
  71. package/dist/admin/layout-editor/use-component-library.js +55 -0
  72. package/dist/admin/layout-editor/use-component-library.js.map +1 -0
  73. package/dist/admin/registry.d.ts +11 -2
  74. package/dist/admin/registry.d.ts.map +1 -1
  75. package/dist/admin/registry.js +40 -4
  76. package/dist/admin/registry.js.map +1 -1
  77. package/dist/admin/server.d.ts +1 -0
  78. package/dist/admin/server.d.ts.map +1 -1
  79. package/dist/admin/server.js +5 -0
  80. package/dist/admin/server.js.map +1 -1
  81. package/dist/admin/styles/admin.css +43 -0
  82. package/dist/admin/surfaces/components/component-edit.d.ts +3 -0
  83. package/dist/admin/surfaces/components/component-edit.d.ts.map +1 -0
  84. package/dist/admin/surfaces/components/component-edit.js +235 -0
  85. package/dist/admin/surfaces/components/component-edit.js.map +1 -0
  86. package/dist/admin/surfaces/components/components-data.d.ts +153 -0
  87. package/dist/admin/surfaces/components/components-data.d.ts.map +1 -0
  88. package/dist/admin/surfaces/components/components-data.js +154 -0
  89. package/dist/admin/surfaces/components/components-data.js.map +1 -0
  90. package/dist/admin/surfaces/components/components-list.d.ts +3 -0
  91. package/dist/admin/surfaces/components/components-list.d.ts.map +1 -0
  92. package/dist/admin/surfaces/components/components-list.js +196 -0
  93. package/dist/admin/surfaces/components/components-list.js.map +1 -0
  94. package/dist/admin/surfaces/components/definition-canvas.d.ts +73 -0
  95. package/dist/admin/surfaces/components/definition-canvas.d.ts.map +1 -0
  96. package/dist/admin/surfaces/components/definition-canvas.js +207 -0
  97. package/dist/admin/surfaces/components/definition-canvas.js.map +1 -0
  98. package/dist/admin/surfaces/layouts/layout-editor-client.d.ts.map +1 -1
  99. package/dist/admin/surfaces/layouts/layout-editor-client.js +14 -2
  100. package/dist/admin/surfaces/layouts/layout-editor-client.js.map +1 -1
  101. package/dist/admin/surfaces/layouts/layouts-data.d.ts +3 -14
  102. package/dist/admin/surfaces/layouts/layouts-data.d.ts.map +1 -1
  103. package/dist/admin/surfaces/layouts/layouts-data.js +4 -7
  104. package/dist/admin/surfaces/layouts/layouts-data.js.map +1 -1
  105. package/dist/admin/surfaces/layouts/layouts-list.d.ts.map +1 -1
  106. package/dist/admin/surfaces/layouts/layouts-list.js +16 -22
  107. package/dist/admin/surfaces/layouts/layouts-list.js.map +1 -1
  108. package/dist/admin/surfaces/settings/admin-features.d.ts.map +1 -1
  109. package/dist/admin/surfaces/settings/admin-features.js +1 -0
  110. package/dist/admin/surfaces/settings/admin-features.js.map +1 -1
  111. package/dist/api/bulk-routes.d.ts.map +1 -1
  112. package/dist/api/bulk-routes.js +25 -0
  113. package/dist/api/bulk-routes.js.map +1 -1
  114. package/dist/api/changeset-routes.d.ts.map +1 -1
  115. package/dist/api/changeset-routes.js +17 -3
  116. package/dist/api/changeset-routes.js.map +1 -1
  117. package/dist/api/component-routes.d.ts.map +1 -1
  118. package/dist/api/component-routes.js +228 -8
  119. package/dist/api/component-routes.js.map +1 -1
  120. package/dist/api/content-routes.d.ts.map +1 -1
  121. package/dist/api/content-routes.js +64 -0
  122. package/dist/api/content-routes.js.map +1 -1
  123. package/dist/api/feed-routes.d.ts +6 -6
  124. package/dist/api/graphql/resolvers.d.ts +4 -4
  125. package/dist/api/layout-routes.d.ts.map +1 -1
  126. package/dist/api/layout-routes.js +4 -17
  127. package/dist/api/layout-routes.js.map +1 -1
  128. package/dist/api/layout-write-guard.d.ts +80 -0
  129. package/dist/api/layout-write-guard.d.ts.map +1 -0
  130. package/dist/api/layout-write-guard.js +88 -0
  131. package/dist/api/layout-write-guard.js.map +1 -0
  132. package/dist/api/section-template-routes.d.ts.map +1 -1
  133. package/dist/api/section-template-routes.js +11 -0
  134. package/dist/api/section-template-routes.js.map +1 -1
  135. package/dist/api/translation-routes.d.ts.map +1 -1
  136. package/dist/api/translation-routes.js +8 -0
  137. package/dist/api/translation-routes.js.map +1 -1
  138. package/dist/api/version-routes.d.ts.map +1 -1
  139. package/dist/api/version-routes.js +20 -8
  140. package/dist/api/version-routes.js.map +1 -1
  141. package/dist/api/workflow-routes.d.ts.map +1 -1
  142. package/dist/api/workflow-routes.js +53 -8
  143. package/dist/api/workflow-routes.js.map +1 -1
  144. package/dist/db/analytics-queries.d.ts +3 -3
  145. package/dist/db/apply-snapshot.d.ts +75 -8
  146. package/dist/db/apply-snapshot.d.ts.map +1 -1
  147. package/dist/db/apply-snapshot.js +104 -8
  148. package/dist/db/apply-snapshot.js.map +1 -1
  149. package/dist/db/audit-queries.d.ts +12 -12
  150. package/dist/db/category-queries.d.ts +3 -3
  151. package/dist/db/changeset-audit-queries.d.ts +4 -4
  152. package/dist/db/changeset-queries.d.ts +7 -7
  153. package/dist/db/comment-queries.d.ts +8 -8
  154. package/dist/db/comment-subscription-queries.d.ts +2 -2
  155. package/dist/db/component-instance-queries.d.ts +197 -0
  156. package/dist/db/component-instance-queries.d.ts.map +1 -0
  157. package/dist/db/component-instance-queries.js +405 -0
  158. package/dist/db/component-instance-queries.js.map +1 -0
  159. package/dist/db/content-queries.d.ts.map +1 -1
  160. package/dist/db/content-queries.js +39 -2
  161. package/dist/db/content-queries.js.map +1 -1
  162. package/dist/db/extension-queries.d.ts +7 -7
  163. package/dist/db/feed-queries.d.ts +3 -3
  164. package/dist/db/index.d.ts +1 -0
  165. package/dist/db/index.d.ts.map +1 -1
  166. package/dist/db/index.js +1 -0
  167. package/dist/db/index.js.map +1 -1
  168. package/dist/db/layout-queries.d.ts +13 -1
  169. package/dist/db/layout-queries.d.ts.map +1 -1
  170. package/dist/db/layout-queries.js +52 -7
  171. package/dist/db/layout-queries.js.map +1 -1
  172. package/dist/db/locale-queries.d.ts.map +1 -1
  173. package/dist/db/locale-queries.js +0 -0
  174. package/dist/db/locale-queries.js.map +1 -1
  175. package/dist/db/media-queries.d.ts +12 -12
  176. package/dist/db/revision-queries.d.ts +3 -3
  177. package/dist/db/site-admin-queries.d.ts +2 -2
  178. package/dist/db/site-membership-queries.d.ts +3 -3
  179. package/dist/db/site-plugin-queries.d.ts +2 -2
  180. package/dist/db/site-queries.d.ts +6 -6
  181. package/dist/db/version-queries.d.ts +12 -12
  182. package/dist/db/webhook-queries.d.ts +11 -11
  183. package/dist/db/workflow-queries.d.ts +6 -6
  184. package/dist/db/workflow-queries.d.ts.map +1 -1
  185. package/dist/db/workflow-queries.js +11 -2
  186. package/dist/db/workflow-queries.js.map +1 -1
  187. package/dist/layout/component-refs.d.ts +465 -0
  188. package/dist/layout/component-refs.d.ts.map +1 -0
  189. package/dist/layout/component-refs.js +848 -0
  190. package/dist/layout/component-refs.js.map +1 -0
  191. package/dist/layout/index.d.ts +2 -1
  192. package/dist/layout/index.d.ts.map +1 -1
  193. package/dist/layout/index.js +1 -0
  194. package/dist/layout/index.js.map +1 -1
  195. package/dist/layout/module-permissions.d.ts +49 -1
  196. package/dist/layout/module-permissions.d.ts.map +1 -1
  197. package/dist/layout/module-permissions.js +117 -6
  198. package/dist/layout/module-permissions.js.map +1 -1
  199. package/dist/layout/renderer.d.ts +51 -4
  200. package/dist/layout/renderer.d.ts.map +1 -1
  201. package/dist/layout/renderer.js +36 -38
  202. package/dist/layout/renderer.js.map +1 -1
  203. package/dist/layout/types.d.ts +42 -0
  204. package/dist/layout/types.d.ts.map +1 -1
  205. package/dist/layout/types.js +54 -11
  206. package/dist/layout/types.js.map +1 -1
  207. package/dist/schema/base.d.ts +1 -1
  208. package/dist/schema/components.d.ts +150 -0
  209. package/dist/schema/components.d.ts.map +1 -1
  210. package/dist/schema/components.js +50 -4
  211. package/dist/schema/components.js.map +1 -1
  212. package/dist/versioning/scheduler.d.ts +8 -0
  213. package/dist/versioning/scheduler.d.ts.map +1 -1
  214. package/dist/versioning/scheduler.js +21 -7
  215. package/dist/versioning/scheduler.js.map +1 -1
  216. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"module-overlay.d.ts","sourceRoot":"","sources":["../../../src/admin/layout-editor/module-overlay.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAG/E;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,MAAM,EAAE,OAAO,CAAA;IACf;;;;;OAKG;IACH,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,KAAK,uBAAuB,GAAG,IAAI,CAAA;IACzF,8EAA8E;IAC9E,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,uEAAuE;IACvE,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAA;IAC3D,uEAAuE;IACvE,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB;;;;;sDAKkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IACzB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iFAAiF;IACjF,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACrC;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,KAAK,EACL,UAAU,EACV,QAAQ,EACR,OAAO,EACP,SAAS,EACT,OAAe,EACf,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,QAAQ,GACT,EAAE,kBAAkB,2CAiYpB"}
1
+ {"version":3,"file":"module-overlay.d.ts","sourceRoot":"","sources":["../../../src/admin/layout-editor/module-overlay.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAA;AAGzB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAI/E;;;;;;;;;;GAUG;AACH,MAAM,WAAW,iBAAiB;IAChC,2DAA2D;IAC3D,MAAM,EAAE,OAAO,CAAA;IACf;;;;;OAKG;IACH,OAAO,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,GAAG,IAAI,KAAK,uBAAuB,GAAG,IAAI,CAAA;IACzF,8EAA8E;IAC9E,UAAU,EAAE,MAAM,IAAI,CAAA;IACtB,uEAAuE;IACvE,QAAQ,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAA;IAC3D,uEAAuE;IACvE,QAAQ,EAAE,MAAM,IAAI,CAAA;CACrB;AAED,UAAU,kBAAkB;IAC1B,QAAQ,EAAE,MAAM,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB;;;;;sDAKkD;IAClD,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,OAAO,CAAA;IACnB,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,CAAC,EAAE,aAAa,EAAE,CAAA;IACzB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,iFAAiF;IACjF,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;IACrC;;;;;;;;;;OAUG;IACH,gBAAgB,CAAC,EAAE,MAAM,IAAI,CAAA;IAC7B;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAED,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,UAAU,EACV,QAAQ,EACR,KAAK,EACL,UAAU,EACV,QAAQ,EACR,OAAO,EACP,SAAS,EACT,OAAe,EACf,UAAU,EACV,UAAU,EACV,gBAAgB,EAChB,WAAW,EACX,aAAa,EACb,QAAQ,GACT,EAAE,kBAAkB,2CAqapB"}
@@ -4,7 +4,8 @@ import React from 'react';
4
4
  import { useSortable } from '@dnd-kit/sortable';
5
5
  import { CSS } from '@dnd-kit/utilities';
6
6
  import { EditorIcon } from './editor-icons.js';
7
- export function ModuleOverlay({ moduleId, instanceId, columnId, index, isSelected, onSelect, actions, typeLabel, inPlace = false, moduleType, inlineText, onInlineFallback, children, }) {
7
+ import { LinkedComponentPill } from './linked-component.js';
8
+ export function ModuleOverlay({ moduleId, instanceId, columnId, index, isSelected, onSelect, actions, typeLabel, inPlace = false, moduleType, inlineText, onInlineFallback, componentId, componentName, children, }) {
8
9
  const { attributes, listeners, setNodeRef, transform, transition } = useSortable({
9
10
  id: moduleId,
10
11
  // `moduleType` (kywi-cms#139 review): without it, `useEditorDnd`'s
@@ -188,6 +189,21 @@ export function ModuleOverlay({ moduleId, instanceId, columnId, index, isSelecte
188
189
  React.useEffect(() => {
189
190
  if (!isEditing || abandonedRef.current)
190
191
  return;
192
+ // …but only while this module is still IN the document. When the whole
193
+ // wrapper has been detached — the React tree is still mounted, its DOM is
194
+ // not: a host that removed the editor's container node, a test root whose
195
+ // container was taken out of `document.body` — then every element
196
+ // re-resolution could find lives inside that same detached wrapper, so it
197
+ // comes back disconnected too, this effect fires again on the render
198
+ // `reattach()` just caused, and the two effects ping-pong forever: an
199
+ // unbounded render loop that pins a core and exhausts the heap. Latent
200
+ // since kywi-cms#145 (it needs one render AFTER the detach to start, and
201
+ // nothing used to produce one); the component library loading in the shell
202
+ // is such a render, which is how kywi-cms#147 found it. There is nothing on
203
+ // screen to recover onto in that state anyway, and if the wrapper is
204
+ // re-attached the next render reaches the recovery again.
205
+ if (!hostRef.current?.isConnected)
206
+ return;
191
207
  if (!isOrphanedEdit())
192
208
  return;
193
209
  reattach();
@@ -300,7 +316,13 @@ export function ModuleOverlay({ moduleId, instanceId, columnId, index, isSelecte
300
316
  : onInlineFallback
301
317
  ? { onDoubleClick: handleDoubleClick }
302
318
  : {};
303
- const chrome = (_jsxs(_Fragment, { children: [typeLabel && (_jsx("span", { className: inPlace ? 'kywi-ip-chip' : 'kywi-editor-module-type-chip', "data-kywi-editor-chrome": "", contentEditable: false, children: typeLabel })), _jsxs("div", { className: inPlace ? 'kywi-ip-chrome kywi-ip-module-actions' : 'kywi-editor-module-actions', "data-kywi-editor-chrome": "", contentEditable: false, children: [_jsx("button", { type: "button", className: "kywi-editor-module-action-btn kywi-editor-module-drag-handle", "aria-label": "Drag to reorder", title: "Drag to reorder", ...listeners, children: _jsx(EditorIcon, { name: "grip", size: 14 }) }), actions?.map((action, i) => (_jsx("button", { type: "button", className: "kywi-editor-module-action-btn", onClick: (e) => {
319
+ const chrome = (_jsxs(_Fragment, { children: [typeLabel && (_jsx("span", { className: inPlace ? 'kywi-ip-chip' : 'kywi-editor-module-type-chip', "data-kywi-editor-chrome": "", contentEditable: false, children: typeLabel })), componentId && (
320
+ // Deliberately NOT `.kywi-ip-chrome`: that class is invisible and
321
+ // click-through until its owner is hovered or selected, and a linked
322
+ // instance must announce itself BEFORE anyone reaches for it. It takes
323
+ // the same z-tier through its own rule, exactly as `.kywi-ip-insert-btn`
324
+ // does (see the stacking contract in editor.css).
325
+ _jsx("span", { className: inPlace ? 'kywi-ip-module-linked-tag' : 'kywi-editor-module-linked-tag', "data-kywi-editor-chrome": "", contentEditable: false, children: _jsx(LinkedComponentPill, { name: componentName }) })), _jsxs("div", { className: inPlace ? 'kywi-ip-chrome kywi-ip-module-actions' : 'kywi-editor-module-actions', "data-kywi-editor-chrome": "", contentEditable: false, children: [_jsx("button", { type: "button", className: "kywi-editor-module-action-btn kywi-editor-module-drag-handle", "aria-label": "Drag to reorder", title: "Drag to reorder", ...listeners, children: _jsx(EditorIcon, { name: "grip", size: 14 }) }), actions?.map((action, i) => (_jsx("button", { type: "button", className: "kywi-editor-module-action-btn", onClick: (e) => {
304
326
  e.stopPropagation();
305
327
  action.onClick();
306
328
  }, title: action.label, "aria-label": action.label, children: _jsx(EditorIcon, { name: action.icon, size: 14 }) }, i)))] })] }));
@@ -311,10 +333,17 @@ export function ModuleOverlay({ moduleId, instanceId, columnId, index, isSelecte
311
333
  'kywi-ip-module',
312
334
  isSelected ? 'kywi-ip-module--selected' : null,
313
335
  isEditing ? 'kywi-ip-module--editing' : null,
336
+ componentId ? 'kywi-ip-module--linked' : null,
314
337
  ]
315
338
  .filter(Boolean)
316
339
  .join(' ')
317
- : `kywi-editor-module${isSelected ? ' kywi-editor-module--selected' : ''}`;
318
- return (_jsxs("div", { ref: setRefs, className: className, style: style, onClick: handleClick, "data-module-id": moduleId, "data-kywi-module-slot": "", ...(inPlace ? { 'data-instance-id': instanceId } : {}), ...(inPlace && moduleType ? { 'data-kywi-module': moduleType } : {}), ...attributes, ...editingProps, children: [chrome, children] }));
340
+ : [
341
+ 'kywi-editor-module',
342
+ isSelected ? 'kywi-editor-module--selected' : null,
343
+ componentId ? 'kywi-editor-module--linked' : null,
344
+ ]
345
+ .filter(Boolean)
346
+ .join(' ');
347
+ return (_jsxs("div", { ref: setRefs, className: className, style: style, onClick: handleClick, "data-module-id": moduleId, "data-kywi-module-slot": "", ...(componentId ? { 'data-component-id': componentId } : {}), ...(inPlace ? { 'data-instance-id': instanceId } : {}), ...(inPlace && moduleType ? { 'data-kywi-module': moduleType } : {}), ...attributes, ...editingProps, children: [chrome, children] }));
319
348
  }
320
349
  //# sourceMappingURL=module-overlay.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"module-overlay.js","sourceRoot":"","sources":["../../../src/admin/layout-editor/module-overlay.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"module-overlay.js","sourceRoot":"","sources":["../../../src/admin/layout-editor/module-overlay.tsx"],"names":[],"mappings":"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"}
@@ -88,6 +88,41 @@ export declare function findColumnIn(regions: Record<string, RegionNode[]>, colu
88
88
  export declare function findModuleIn(regions: Record<string, RegionNode[]>, moduleId: string): ModuleLocation | null;
89
89
  /** Find a variant container by id. Containers only ever live at region level. */
90
90
  export declare function findVariantContainerIn(regions: Record<string, RegionNode[]>, containerId: string): VariantContainerLocation | null;
91
+ /**
92
+ * The `componentId` of the nearest ANCESTOR of `nodeId` that is itself a linked
93
+ * component instance, or null when every ancestor is ordinary content.
94
+ *
95
+ * WHY THIS EXISTS (kywi-cms#147 T3 review, I1). Connecting a node that lives
96
+ * inside an already-linked ancestor silently destroys data:
97
+ *
98
+ * - the connect writes the node as a CLEAN instance (`props: { componentId }`),
99
+ * replacing the content stored for it in the page's document — but that
100
+ * document is the ancestor's inline FALLBACK copy, so what was overwritten is
101
+ * the only thing the page can render when the ancestor's component cannot be
102
+ * resolved;
103
+ * - `collectComponentRefs` deliberately stops at a connected node, so the new
104
+ * link is invisible to the instance index, the usage counts and the delete
105
+ * gate, and the render-side placement pass strips it structurally;
106
+ * - so the moment the outer component becomes unresolvable, the inner node
107
+ * renders EMPTY, with nothing left to recover it from.
108
+ *
109
+ * A node's OWN `componentId` is deliberately not considered: this answers "is
110
+ * this node inside somebody ELSE's component?", which is the question both the
111
+ * chrome gating and the hard refusal in `useComponentConnect` ask. A linked
112
+ * SIBLING is not an ancestor and must not block anything.
113
+ */
114
+ export declare function findLinkedAncestor(regions: Record<string, RegionNode[]>, nodeId: string): string | null;
115
+ /**
116
+ * {@link findLinkedAncestor} as a yes/no, over a document's own regions.
117
+ *
118
+ * Regions only, exactly like the document readers below and for the same reason:
119
+ * the shells resolve their selection from `layout.regions` too, so a node living
120
+ * in a `pageVariants` / `abExperiments` region cannot be saved or linked through
121
+ * them at all (the lookup fails first). The canvas's own gating does not depend on
122
+ * this function — it threads `linkedAncestor` structurally, from where it is
123
+ * rendering — so variant regions are gated in the UI regardless.
124
+ */
125
+ export declare function hasLinkedAncestor(layout: LayoutDocument, nodeId: string): boolean;
91
126
  export declare function findModuleInDocument(layout: LayoutDocument, moduleId: string): ModuleNode | null;
92
127
  export declare function findSectionInDocument(layout: LayoutDocument, sectionId: string): LayoutSection | null;
93
128
  export declare function findVariantContainerInDocument(layout: LayoutDocument, containerId: string): VariantContainer | null;
@@ -1 +1 @@
1
- {"version":3,"file":"node-lookup.d.ts","sourceRoot":"","sources":["../../../src/admin/layout-editor/node-lookup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-lookup.d.ts","sourceRoot":"","sources":["../../../src/admin/layout-editor/node-lookup.ts"],"names":[],"mappings":"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"}
@@ -125,6 +125,97 @@ export function findVariantContainerIn(regions, containerId) {
125
125
  }
126
126
  return null;
127
127
  }
128
+ // ── Linked ancestry (kywi-cms#147) ───────────────────────────────────────────
129
+ /**
130
+ * Search one array of sections for `nodeId`, carrying the link inherited from
131
+ * whatever holds those sections. Returns a WRAPPER so "found, no linked
132
+ * ancestor" (`{ value: null }`) stays distinguishable from "not here" (`null`).
133
+ */
134
+ function linkedAncestorInSections(sections, nodeId, inherited) {
135
+ for (const section of sections) {
136
+ if (!isLayoutSection(section))
137
+ continue;
138
+ // The section itself: its own componentId is not an ANCESTOR's.
139
+ if (section.id === nodeId)
140
+ return { value: inherited };
141
+ // Nearest first — a module inside a linked section reports that section,
142
+ // not the linked container two levels up.
143
+ const nearest = section.componentId ?? inherited ?? null;
144
+ for (const column of section.columns) {
145
+ if (column.id === nodeId)
146
+ return { value: nearest };
147
+ for (const module of column.nodes) {
148
+ if (module.id === nodeId)
149
+ return { value: nearest };
150
+ }
151
+ }
152
+ }
153
+ return null;
154
+ }
155
+ /**
156
+ * The `componentId` of the nearest ANCESTOR of `nodeId` that is itself a linked
157
+ * component instance, or null when every ancestor is ordinary content.
158
+ *
159
+ * WHY THIS EXISTS (kywi-cms#147 T3 review, I1). Connecting a node that lives
160
+ * inside an already-linked ancestor silently destroys data:
161
+ *
162
+ * - the connect writes the node as a CLEAN instance (`props: { componentId }`),
163
+ * replacing the content stored for it in the page's document — but that
164
+ * document is the ancestor's inline FALLBACK copy, so what was overwritten is
165
+ * the only thing the page can render when the ancestor's component cannot be
166
+ * resolved;
167
+ * - `collectComponentRefs` deliberately stops at a connected node, so the new
168
+ * link is invisible to the instance index, the usage counts and the delete
169
+ * gate, and the render-side placement pass strips it structurally;
170
+ * - so the moment the outer component becomes unresolvable, the inner node
171
+ * renders EMPTY, with nothing left to recover it from.
172
+ *
173
+ * A node's OWN `componentId` is deliberately not considered: this answers "is
174
+ * this node inside somebody ELSE's component?", which is the question both the
175
+ * chrome gating and the hard refusal in `useComponentConnect` ask. A linked
176
+ * SIBLING is not an ancestor and must not block anything.
177
+ */
178
+ export function findLinkedAncestor(regions, nodeId) {
179
+ for (const nodes of Object.values(regions)) {
180
+ for (const node of nodes) {
181
+ // Region level: a section or container sitting here has no ancestor at all.
182
+ if (node.id === nodeId)
183
+ return null;
184
+ if (isVariantContainer(node)) {
185
+ const containerLink = node.componentId ?? null;
186
+ const arms = [
187
+ node.defaultSections,
188
+ ...node.variants.map(variant => variant.sections),
189
+ ];
190
+ for (const arm of arms) {
191
+ const hit = linkedAncestorInSections(arm, nodeId, containerLink);
192
+ if (hit)
193
+ return hit.value;
194
+ }
195
+ continue;
196
+ }
197
+ if (isLayoutSection(node)) {
198
+ const hit = linkedAncestorInSections([node], nodeId, null);
199
+ if (hit)
200
+ return hit.value;
201
+ }
202
+ }
203
+ }
204
+ return null;
205
+ }
206
+ /**
207
+ * {@link findLinkedAncestor} as a yes/no, over a document's own regions.
208
+ *
209
+ * Regions only, exactly like the document readers below and for the same reason:
210
+ * the shells resolve their selection from `layout.regions` too, so a node living
211
+ * in a `pageVariants` / `abExperiments` region cannot be saved or linked through
212
+ * them at all (the lookup fails first). The canvas's own gating does not depend on
213
+ * this function — it threads `linkedAncestor` structurally, from where it is
214
+ * rendering — so variant regions are gated in the UI regardless.
215
+ */
216
+ export function hasLinkedAncestor(layout, nodeId) {
217
+ return findLinkedAncestor(layout.regions, nodeId) !== null;
218
+ }
128
219
  // ── Document-level readers ───────────────────────────────────────────────────
129
220
  //
130
221
  // Read-only convenience for the editor shells, which resolve the current
@@ -1 +1 @@
1
- {"version":3,"file":"node-lookup.js","sourceRoot":"","sources":["../../../src/admin/layout-editor/node-lookup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"node-lookup.js","sourceRoot":"","sources":["../../../src/admin/layout-editor/node-lookup.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"overlay-shell.d.ts","sourceRoot":"","sources":["../../../src/admin/layout-editor/overlay-shell.tsx"],"names":[],"mappings":"AACA,OAAO,KAAwE,MAAM,OAAO,CAAA;AAE5F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAqBvE,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAA;AAClE,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE/D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,aAAa,EAAE,cAAc,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,aAAa,CAAA;IAC5B,cAAc,EAAE,cAAc,CAAA;IAC9B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC,CAAA;IACzH;;;;;;;OAOG;IACH,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IAChG,SAAS,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IACnG,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IACtG,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAChD;AA0BD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,aAAa,EACb,SAAS,EACT,WAAW,EACX,SAAS,EACT,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,cAAc,EAC7B,cAAc,EACd,gBAAgB,EAChB,MAAM,EACN,SAAS,EACT,UAAU,EACV,QAAQ,EACR,aAAa,EACb,SAAS,GACV,EAAE,iBAAiB,kDAqkBnB"}
1
+ {"version":3,"file":"overlay-shell.d.ts","sourceRoot":"","sources":["../../../src/admin/layout-editor/overlay-shell.tsx"],"names":[],"mappings":"AACA,OAAO,KAAwE,MAAM,OAAO,CAAA;AAE5F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC3D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAwBvE,OAAO,cAAc,CAAA;AAIrB,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAA;AAClE,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAA;AAE/D,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,aAAa,EAAE,cAAc,CAAA;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,aAAa,CAAA;IAC5B,cAAc,EAAE,cAAc,CAAA;IAC9B,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC,CAAC,CAAA;IACzH;;;;;;;OAOG;IACH,MAAM,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IAChG,SAAS,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IACnG,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC,CAAA;IACtG,qEAAqE;IACrE,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB;;;;;;OAMG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAChD;AA0BD;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,EAC3B,QAAQ,EACR,aAAa,EACb,SAAS,EACT,WAAW,EACX,SAAS,EACT,SAAS,EAAE,UAAU,EACrB,aAAa,EAAE,cAAc,EAC7B,cAAc,EACd,gBAAgB,EAChB,MAAM,EACN,SAAS,EACT,UAAU,EACV,QAAQ,EACR,aAAa,EACb,SAAS,GACV,EAAE,iBAAiB,kDA+qBnB"}
@@ -12,6 +12,9 @@ import { PropsPanel } from './props-panel.js';
12
12
  import { SectionTemplatePicker } from './section-template-picker.js';
13
13
  import { EditorIcon } from './editor-icons.js';
14
14
  import { ConfirmDialog } from '../primitives.js';
15
+ import { useComponentLibrary } from './use-component-library.js';
16
+ import { useComponentConnect } from './use-component-connect.js';
17
+ import { useComponentFork } from './use-component-fork.js';
15
18
  import { resolveInlineBinding, listInlineTextProps, readInlineTextValue } from './inline-text.js';
16
19
  import { applyStickyOffset, EDIT_BAR_HEIGHT_VAR, EDIT_BAR_HEIGHT_PX } from '../../scope/sticky-offset.js';
17
20
  import { adminFetch } from '../../host-client/index.js';
@@ -126,6 +129,31 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
126
129
  return () => { cancelled = true; };
127
130
  }, [audiences]);
128
131
  const audienceList = audiences ?? fetchedAudiences;
132
+ // ── Reusable components (kywi-cms#147) ─────────────────────────────────────
133
+ //
134
+ // The front editor is the PRIMARY editing surface (kywi-cms#94) but had no
135
+ // component affordances at all: no way to save a band as a component, no way to
136
+ // tell a linked instance from ordinary content, and no Detach — all of which
137
+ // existed only in the admin Layout tab. Both shells now share one library and
138
+ // one connect/detach implementation.
139
+ const library = useComponentLibrary();
140
+ const connect = useComponentConnect({ layout: state.layout, dispatch, library });
141
+ // The save fork (kywi-cms#147 T4). Every save path below goes through it: an
142
+ // edited linked instance is a decision the owner has to make, and Save Draft
143
+ // writes the same layout Save does, so exempting one would let the fork be
144
+ // skipped by pressing the other button.
145
+ const fork = useComponentFork({
146
+ layout: state.layout,
147
+ originalLayout: state.originalLayout,
148
+ dispatch,
149
+ library,
150
+ // kywi-cms#147 T4 review round 2 — see `inlineEditActive`'s doc on the hook:
151
+ // a live inline-text session's keystrokes never reach `state.isDirty` until
152
+ // commit, so a library-driven fallback-copy refresh landing mid-session
153
+ // would silently overwrite them. `textEdit.id` is exactly OverlayShell's own
154
+ // "is one open right now" state.
155
+ inlineEditActive: textEdit.id !== null,
156
+ });
129
157
  // ── Handlers ───────────────────────────────────────────────────────────────
130
158
  // One set of drag wiring — sensors, collision detection and drop handling —
131
159
  // shared with the admin editor (kywi-cms#134, see use-editor-dnd.ts). The
@@ -148,6 +176,10 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
148
176
  // while a save is in flight, so baselining `state.layout` at resolve time
149
177
  // would adopt a mid-save edit as saved and let Done exit without a confirm
150
178
  // (see the MARK_SAVED action doc in editor-state.ts).
179
+ //
180
+ // The result is also returned to the caller, so the save fork can tell a page
181
+ // save that failed from one that landed: by then it may already have written a
182
+ // component definition, and closing as if all was well would hide that.
151
183
  const markSavedIfOk = useCallback((saved, result) => {
152
184
  void Promise.resolve(result)
153
185
  .then(ok => {
@@ -155,29 +187,33 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
155
187
  dispatch({ type: 'MARK_SAVED', layout: saved });
156
188
  })
157
189
  .catch(() => { });
190
+ return result;
158
191
  }, []);
192
+ // Each of these hands the fork a persist step over the document the fork ends
193
+ // up with — the edited one when nothing is linked, the resolved one when the
194
+ // owner has answered.
159
195
  const handleSave = useCallback(() => {
160
- const saved = state.layout;
161
- markSavedIfOk(saved, onSave(saved, 'save'));
162
- }, [onSave, state.layout, markSavedIfOk]);
196
+ fork.guardSave(saved => markSavedIfOk(saved, onSave(saved, 'save')));
197
+ }, [fork, onSave, markSavedIfOk]);
163
198
  const handlePublish = useCallback(() => {
164
- const saved = state.layout;
165
- markSavedIfOk(saved, onPublish(saved, 'publish'));
166
- }, [onPublish, state.layout, markSavedIfOk]);
199
+ fork.guardSave(saved => markSavedIfOk(saved, onPublish(saved, 'publish')));
200
+ }, [fork, onPublish, markSavedIfOk]);
167
201
  const handleSchedule = useCallback(() => {
168
202
  // kywi-cms#135 review: the Schedule button renders on `editMode.canPublish`
169
203
  // alone, and the shipped scaffold never passes `onSchedule` — a click with
170
- // no handler wired must do NOTHING (not persist, not mark saved), or it
171
- // would silently clear `isDirty` for edits nothing actually captured.
204
+ // no handler wired must do NOTHING (not persist, not mark saved, and not
205
+ // open the fork), or it would silently clear `isDirty` for edits nothing
206
+ // actually captured.
172
207
  if (!onSchedule)
173
208
  return;
174
- const saved = state.layout;
175
- markSavedIfOk(saved, onSchedule(saved, new Date().toISOString()));
176
- }, [onSchedule, state.layout, markSavedIfOk]);
209
+ fork.guardSave(saved => markSavedIfOk(saved, onSchedule(saved, new Date().toISOString())), 'schedule');
210
+ }, [fork, onSchedule, markSavedIfOk]);
211
+ // Save Draft goes through the fork like every other save — and says so, because
212
+ // "draft" is exactly the word that implies nothing has gone live yet, which for a
213
+ // component is not true (see SAVE_MODE_NOTICE in editor-dialog.tsx).
177
214
  const handleDraft = useCallback(() => {
178
- const saved = state.layout;
179
- markSavedIfOk(saved, onSave(saved, 'draft'));
180
- }, [onSave, state.layout, markSavedIfOk]);
215
+ fork.guardSave(saved => markSavedIfOk(saved, onSave(saved, 'draft')), 'draft');
216
+ }, [fork, onSave, markSavedIfOk]);
181
217
  const handleInsertSection = useCallback((regionName) => {
182
218
  setTemplateRegion(regionName);
183
219
  setShowTemplatePicker(true);
@@ -218,14 +254,20 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
218
254
  : undefined;
219
255
  if (node && editable) {
220
256
  const next = readInlineTextValue(host, editable.html);
257
+ // Compared against what the module RENDERS, not against its own props
258
+ // (kywi-cms#147 T4): a clean linked instance has no props of its own, so
259
+ // comparing there would report every no-op click on a linked module as an
260
+ // edit — and an edit of a linked instance opens the save fork. Same
261
+ // projection the rail and the canvas preview use.
262
+ const current = library.renderedModule(node).props[prop.name];
221
263
  // Same prop, same action, same history the props panel writes — typing
222
264
  // on the page and typing in the rail are one save path.
223
- if (next !== String(node.props[prop.name] ?? '')) {
265
+ if (next !== String(current ?? '')) {
224
266
  dispatch({ type: 'UPDATE_PROPS', moduleId, props: { [prop.name]: next } });
225
267
  }
226
268
  }
227
269
  endTextEdit(moduleId);
228
- }, [state.layout, moduleRegistry, endTextEdit]);
270
+ }, [state.layout, moduleRegistry, endTextEdit, library]);
229
271
  const handleInlineCancel = useCallback(() => {
230
272
  endTextEdit(null);
231
273
  }, [endTextEdit]);
@@ -297,9 +339,12 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
297
339
  const selectedModule = state.selectedId
298
340
  ? findModuleById(state.layout, state.selectedId)
299
341
  : null;
300
- const selectedConfig = selectedModule
301
- ? moduleRegistry.get(selectedModule.type)
302
- : null;
342
+ // Which registry entry describes this node's FIELDS: for a linked instance the
343
+ // component's own moduleType, not the placeholder node's `type` (kywi-cms#147 T4
344
+ // review, I2 — see `fieldModuleType`). Null means there is nothing honest to show,
345
+ // and the rail renders no content fields at all.
346
+ const selectedFieldType = selectedModule ? library.fieldModuleType(selectedModule) : null;
347
+ const selectedConfig = selectedFieldType ? moduleRegistry.get(selectedFieldType) : null;
303
348
  const selectedSection = state.selectedType === 'section' && state.selectedId
304
349
  ? findSectionById(state.layout, state.selectedId)
305
350
  : null;
@@ -307,6 +352,12 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
307
352
  const selectedVariantContainer = state.selectedType === 'variantContainer' && state.selectedId
308
353
  ? findVariantContainerInDocument(state.layout, state.selectedId)
309
354
  : null;
355
+ // Inside another node's linked component instance every component action is
356
+ // refused (see `useComponentConnect`), so the rail withdraws them — exactly as
357
+ // the canvas chrome does via its own `linkedAncestor` threading.
358
+ const selectionInsideLinkedComponent = state.selectedId
359
+ ? connect.isInsideLinkedComponent(state.selectedId)
360
+ : false;
310
361
  // The props rail opens itself the moment something is selected, and closes
311
362
  // (deselect) from its own × — that IS its collapse control.
312
363
  const propsRailOpen = Boolean(selectedModule || selectedSection || selectedVariantContainer);
@@ -321,16 +372,48 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
321
372
  // section's controls render underneath it. Telling the canvas
322
373
  // whether the rail is out is what lets the chrome step aside
323
374
  // (kywi-cms#132).
324
- paletteOpen: paletteOpen, inlineEdit: inlineEdit }) }) }), _jsx("aside", { className: `kywi-overlay-chrome kywi-overlay-rail kywi-overlay-rail--left${paletteOpen ? '' : ' kywi-overlay-rail--collapsed'}`, "aria-label": "Modules", "aria-hidden": !paletteOpen, children: _jsx(ModulePalette, { modules: moduleRegistry.list(), ...(userRole ? { userRole } : {}) }) }), _jsx("aside", { className: `kywi-overlay-chrome kywi-overlay-rail kywi-overlay-rail--right${propsRailOpen ? '' : ' kywi-overlay-rail--collapsed'}`, "aria-label": "Properties", "aria-hidden": !propsRailOpen, children: _jsx(PropsPanel, { module: selectedModule, moduleConfig: selectedConfig, onUpdateProps: (props) => dispatch({ type: 'UPDATE_PROPS', moduleId: state.selectedId, props }), onUpdateStyle: (style) => dispatch({ type: 'UPDATE_STYLE', moduleId: state.selectedId, style }), onDelete: () => dispatch({ type: 'REMOVE_MODULE', moduleId: state.selectedId }), section: selectedSection, onDeleteSection: () => {
375
+ paletteOpen: paletteOpen, inlineEdit: inlineEdit, resolveComponent: library.resolveModule, componentAffordances: connect.affordances }) }) }), _jsx("aside", { className: `kywi-overlay-chrome kywi-overlay-rail kywi-overlay-rail--left${paletteOpen ? '' : ' kywi-overlay-rail--collapsed'}`, "aria-label": "Modules", "aria-hidden": !paletteOpen, children: _jsx(ModulePalette, { modules: moduleRegistry.list(), ...(userRole ? { userRole } : {}) }) }), _jsx("aside", { className: `kywi-overlay-chrome kywi-overlay-rail kywi-overlay-rail--right${propsRailOpen ? '' : ' kywi-overlay-rail--collapsed'}`, "aria-label": "Properties", "aria-hidden": !propsRailOpen, children: _jsx(PropsPanel, { module: selectedModule, moduleConfig: selectedConfig, onUpdateProps: (props) => dispatch({ type: 'UPDATE_PROPS', moduleId: state.selectedId, props }), onUpdateStyle: (style) => dispatch({ type: 'UPDATE_STYLE', moduleId: state.selectedId, style }), onDelete: () => dispatch({ type: 'REMOVE_MODULE', moduleId: state.selectedId }), components: library.optionsFor('module'),
376
+ // What a linked module renders, so its fields show the component's
377
+ // content rather than an empty form (kywi-cms#147 T4).
378
+ linkedModuleRender: selectedModule ? library.renderedModule(selectedModule) : null, onSaveAsComponent: () => {
379
+ if (state.selectedId)
380
+ connect.saveModule(state.selectedId);
381
+ }, onLinkComponent: (componentId) => {
382
+ if (state.selectedId)
383
+ connect.linkModule(state.selectedId, componentId);
384
+ }, onDetach: () => {
385
+ if (state.selectedId)
386
+ connect.detachModule(state.selectedId);
387
+ }, insideLinkedComponent: selectionInsideLinkedComponent, section: selectedSection, sectionComponents: library.optionsFor('section'), onSaveSectionAsComponent: () => {
388
+ if (state.selectedId)
389
+ connect.saveSection(state.selectedId);
390
+ }, onDetachSection: () => {
391
+ if (state.selectedId)
392
+ connect.detachSection(state.selectedId);
393
+ }, onDeleteSection: () => {
325
394
  dispatch({ type: 'REMOVE_SECTION', sectionId: state.selectedId });
326
395
  dispatch({ type: 'DESELECT' });
327
- }, variantContainer: selectedVariantContainer, onUpdateVariantContainer: (patch) => dispatch({ type: 'UPDATE_VARIANT_CONTAINER', containerId: state.selectedId, patch }), onDeleteVariantContainer: () => {
396
+ }, variantContainer: selectedVariantContainer, variantContainerComponents: library.optionsFor('variantContainer'), onSaveVariantContainerAsComponent: () => {
397
+ if (state.selectedId)
398
+ connect.saveVariantContainer(state.selectedId);
399
+ }, onDetachVariantContainer: () => {
400
+ if (state.selectedId)
401
+ connect.detachVariantContainer(state.selectedId);
402
+ }, onUpdateVariantContainer: (patch) => dispatch({ type: 'UPDATE_VARIANT_CONTAINER', containerId: state.selectedId, patch }), onDeleteVariantContainer: () => {
328
403
  dispatch({ type: 'REMOVE_VARIANT_CONTAINER', containerId: state.selectedId });
329
404
  dispatch({ type: 'DESELECT' });
330
405
  }, onUnwrapVariantContainer: (containerId) => {
331
406
  dispatch({ type: 'UNWRAP_VARIANT_CONTAINER', containerId });
332
407
  dispatch({ type: 'DESELECT' });
333
- }, onClose: () => dispatch({ type: 'DESELECT' }), ...(audienceList ? { audiences: audienceList } : {}) }) }), _jsxs("div", { className: "kywi-admin-shell kywi-overlay-dialog-host", children: [showTemplatePicker && (_jsx(SectionTemplatePicker, { onSelect: (columns) => {
408
+ }, onClose: () => dispatch({ type: 'DESELECT' }), ...(audienceList ? { audiences: audienceList } : {}) }) }), _jsxs("div", { className: "kywi-admin-shell kywi-overlay-dialog-host", children: [showTemplatePicker && (_jsx(SectionTemplatePicker
409
+ // Already loaded by this shell — the picker fetching its own
410
+ // `?type=` copies made three requests of one library
411
+ // (kywi-cms#147 T3 review, I3).
412
+ , {
413
+ // Already loaded by this shell — the picker fetching its own
414
+ // `?type=` copies made three requests of one library
415
+ // (kywi-cms#147 T3 review, I3).
416
+ componentLibrary: library.components, onSelect: (columns) => {
334
417
  if (templateRegion) {
335
418
  dispatch({ type: 'ADD_SECTION', regionName: templateRegion, columns });
336
419
  }
@@ -344,9 +427,17 @@ export function OverlayShell({ editMode, initialLayout, contentId, contentType,
344
427
  }
345
428
  setShowTemplatePicker(false);
346
429
  setTemplateRegion(null);
430
+ }, onInsertVariantContainer: (container) => {
431
+ // Insert a linked container component (kywi-cms#147) — same
432
+ // region-level affordance, the only place a container can live.
433
+ if (templateRegion) {
434
+ dispatch({ type: 'ADD_VARIANT_CONTAINER', regionName: templateRegion, container });
435
+ }
436
+ setShowTemplatePicker(false);
437
+ setTemplateRegion(null);
347
438
  }, onClose: () => {
348
439
  setShowTemplatePicker(false);
349
440
  setTemplateRegion(null);
350
- } })), confirmExit && (_jsx(ConfirmDialog, { title: "Leave the editor?", message: "This page has changes you haven't saved yet. Leaving now discards them.", confirmLabel: "Discard changes", onConfirm: exitEditor, onCancel: () => setConfirmExit(false) }))] })] })] }));
441
+ } })), connect.dialog, fork.dialog, confirmExit && (_jsx(ConfirmDialog, { title: "Leave the editor?", message: "This page has changes you haven't saved yet. Leaving now discards them.", confirmLabel: "Discard changes", onConfirm: exitEditor, onCancel: () => setConfirmExit(false) }))] })] })] }));
351
442
  }
352
443
  //# sourceMappingURL=overlay-shell.js.map