@elytracms/studio 0.0.85 → 0.0.87

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 (248) hide show
  1. package/convex/asset-revalidate.test.ts +186 -0
  2. package/convex/assets.ts +53 -19
  3. package/convex/cms.ts +22 -0
  4. package/convex/delivery.ts +54 -116
  5. package/convex/engine-version.test.ts +31 -0
  6. package/convex/functions.ts +3 -3
  7. package/convex/rail-write-parity.test.ts +180 -0
  8. package/convex/redirects.ts +33 -11
  9. package/convex/revalidate.ts +7 -5
  10. package/convex/triggers.ts +53 -3
  11. package/dist/components/ai/ai-chat-panel.js +13 -2
  12. package/dist/components/ai/ai-chat-panel.js.map +1 -1
  13. package/dist/components/app-views/default-modules.d.ts +20 -20
  14. package/dist/components/app-views/default-modules.js +27 -48
  15. package/dist/components/app-views/default-modules.js.map +1 -1
  16. package/dist/components/app-views/studio-config.d.ts +5 -6
  17. package/dist/components/app-views/studio-config.js.map +1 -1
  18. package/dist/components/assets/asset-metadata.d.ts +28 -19
  19. package/dist/components/assets/asset-metadata.js +24 -31
  20. package/dist/components/assets/asset-metadata.js.map +1 -1
  21. package/dist/components/assets/asset-selection.d.ts +24 -5
  22. package/dist/components/assets/asset-selection.js +39 -9
  23. package/dist/components/assets/asset-selection.js.map +1 -1
  24. package/dist/components/assets/assets-collection-view-source.d.ts +17 -14
  25. package/dist/components/assets/assets-collection-view-source.js +25 -31
  26. package/dist/components/assets/assets-collection-view-source.js.map +1 -1
  27. package/dist/components/builder/blocks-model.d.ts +5 -4
  28. package/dist/components/builder/blocks-model.js +5 -4
  29. package/dist/components/builder/blocks-model.js.map +1 -1
  30. package/dist/components/builder/blocks-panel.js +3 -3
  31. package/dist/components/builder/blocks-panel.js.map +1 -1
  32. package/dist/components/builder/builder-store.d.ts +25 -1
  33. package/dist/components/builder/builder-store.js +3 -2
  34. package/dist/components/builder/builder-store.js.map +1 -1
  35. package/dist/components/builder/canvas-chrome-css.js +0 -17
  36. package/dist/components/builder/canvas-chrome-css.js.map +1 -1
  37. package/dist/components/builder/canvas-chrome.d.ts +10 -12
  38. package/dist/components/builder/canvas-chrome.js +12 -13
  39. package/dist/components/builder/canvas-chrome.js.map +1 -1
  40. package/dist/components/builder/canvas-dnd.d.ts +8 -0
  41. package/dist/components/builder/canvas-dnd.js +5 -3
  42. package/dist/components/builder/canvas-dnd.js.map +1 -1
  43. package/dist/components/builder/canvas-render-context.d.ts +12 -24
  44. package/dist/components/builder/canvas-render-context.js +15 -44
  45. package/dist/components/builder/canvas-render-context.js.map +1 -1
  46. package/dist/components/builder/canvas.js +5 -11
  47. package/dist/components/builder/canvas.js.map +1 -1
  48. package/dist/components/builder/clipboard-actions.d.ts +15 -1
  49. package/dist/components/builder/clipboard-actions.js +35 -12
  50. package/dist/components/builder/clipboard-actions.js.map +1 -1
  51. package/dist/components/builder/composition-field-editor.d.ts +32 -26
  52. package/dist/components/builder/composition-field-editor.js +47 -54
  53. package/dist/components/builder/composition-field-editor.js.map +1 -1
  54. package/dist/components/builder/insert-context.d.ts +3 -1
  55. package/dist/components/builder/insert-context.js +19 -12
  56. package/dist/components/builder/insert-context.js.map +1 -1
  57. package/dist/components/builder/page-tree.d.ts +29 -0
  58. package/dist/components/builder/page-tree.js +56 -58
  59. package/dist/components/builder/page-tree.js.map +1 -1
  60. package/dist/components/builder/reuse.js +5 -2
  61. package/dist/components/builder/reuse.js.map +1 -1
  62. package/dist/components/cms/asset-field.js +20 -32
  63. package/dist/components/cms/asset-field.js.map +1 -1
  64. package/dist/components/cms/cell-edit.d.ts +7 -0
  65. package/dist/components/cms/cell-edit.js +9 -1
  66. package/dist/components/cms/cell-edit.js.map +1 -1
  67. package/dist/components/cms/cms-composition-validators.js +11 -2
  68. package/dist/components/cms/cms-composition-validators.js.map +1 -1
  69. package/dist/components/cms/collection-table.js +11 -0
  70. package/dist/components/cms/collection-table.js.map +1 -1
  71. package/dist/components/cms/document-url-path.d.ts +7 -4
  72. package/dist/components/cms/document-url-path.js +15 -1
  73. package/dist/components/cms/document-url-path.js.map +1 -1
  74. package/dist/components/cms/editable-cell.js +5 -2
  75. package/dist/components/cms/editable-cell.js.map +1 -1
  76. package/dist/components/cms/field-control.js +4 -0
  77. package/dist/components/cms/field-control.js.map +1 -1
  78. package/dist/components/cms/inline-field-errors.d.ts +36 -0
  79. package/dist/components/cms/inline-field-errors.js +13 -5
  80. package/dist/components/cms/inline-field-errors.js.map +1 -1
  81. package/dist/components/cms/rich-text/insert.d.ts +6 -3
  82. package/dist/components/cms/rich-text/insert.js +9 -6
  83. package/dist/components/cms/rich-text/insert.js.map +1 -1
  84. package/dist/components/cms/use-document-versions.js +1 -0
  85. package/dist/components/cms/use-document-versions.js.map +1 -1
  86. package/dist/components/cms/use-live-url.d.ts +18 -6
  87. package/dist/components/cms/use-live-url.js +10 -0
  88. package/dist/components/cms/use-live-url.js.map +1 -1
  89. package/dist/components/cms/versions-model.d.ts +0 -12
  90. package/dist/components/cms/versions-model.js +3 -15
  91. package/dist/components/cms/versions-model.js.map +1 -1
  92. package/dist/components/components/component-detail.js +1 -1
  93. package/dist/components/components/component-detail.js.map +1 -1
  94. package/dist/components/components/transfer-dialog.js +2 -4
  95. package/dist/components/components/transfer-dialog.js.map +1 -1
  96. package/dist/components/components/transfer.d.ts +19 -15
  97. package/dist/components/components/transfer.js +28 -25
  98. package/dist/components/components/transfer.js.map +1 -1
  99. package/dist/components/deployment-setup-gate.js +9 -3
  100. package/dist/components/deployment-setup-gate.js.map +1 -1
  101. package/dist/components/project-session.d.ts +9 -0
  102. package/dist/components/project-session.js +1 -1
  103. package/dist/components/project-session.js.map +1 -1
  104. package/dist/components/redirects/redirects-collection-view-source.d.ts +17 -2
  105. package/dist/components/redirects/redirects-collection-view-source.js +20 -6
  106. package/dist/components/redirects/redirects-collection-view-source.js.map +1 -1
  107. package/dist/components/section-surface.js +3 -2
  108. package/dist/components/section-surface.js.map +1 -1
  109. package/dist/components/settings-form.js +1 -2
  110. package/dist/components/settings-form.js.map +1 -1
  111. package/dist/components/studio-context.js +1 -18
  112. package/dist/components/studio-context.js.map +1 -1
  113. package/dist/components/studio-project-screen.js +3 -5
  114. package/dist/components/studio-project-screen.js.map +1 -1
  115. package/dist/lib/ai/apply-content.js +73 -29
  116. package/dist/lib/ai/apply-content.js.map +1 -1
  117. package/dist/lib/ai/constraints.d.ts +35 -0
  118. package/dist/lib/ai/constraints.js +155 -72
  119. package/dist/lib/ai/constraints.js.map +1 -1
  120. package/dist/lib/ai/index.d.ts +1 -0
  121. package/dist/lib/ai/index.js +1 -0
  122. package/dist/lib/ai/index.js.map +1 -1
  123. package/dist/lib/ai/route-fetch.d.ts +58 -0
  124. package/dist/lib/ai/route-fetch.js +98 -0
  125. package/dist/lib/ai/route-fetch.js.map +1 -0
  126. package/dist/lib/ai/route-provider.d.ts +5 -22
  127. package/dist/lib/ai/route-provider.js +23 -1
  128. package/dist/lib/ai/route-provider.js.map +1 -1
  129. package/dist/lib/ai/route.js +4 -1
  130. package/dist/lib/ai/route.js.map +1 -1
  131. package/dist/lib/ai/shape.d.ts +3 -2
  132. package/dist/lib/ai/shape.js +16 -24
  133. package/dist/lib/ai/shape.js.map +1 -1
  134. package/dist/lib/ai/types.d.ts +8 -0
  135. package/dist/lib/ai/types.js.map +1 -1
  136. package/dist/lib/ai/update-fields.js +33 -12
  137. package/dist/lib/ai/update-fields.js.map +1 -1
  138. package/dist/lib/assets/asset-placements.d.ts +35 -0
  139. package/dist/lib/assets/asset-placements.js +74 -0
  140. package/dist/lib/assets/asset-placements.js.map +1 -0
  141. package/dist/lib/assets/backfill-thumbs.d.ts +9 -8
  142. package/dist/lib/assets/backfill-thumbs.js +13 -25
  143. package/dist/lib/assets/backfill-thumbs.js.map +1 -1
  144. package/dist/lib/clipboard/paste-issues.d.ts +17 -15
  145. package/dist/lib/clipboard/paste-issues.js +8 -45
  146. package/dist/lib/clipboard/paste-issues.js.map +1 -1
  147. package/dist/lib/clipboard/paste-target.d.ts +47 -1
  148. package/dist/lib/clipboard/paste-target.js +19 -11
  149. package/dist/lib/clipboard/paste-target.js.map +1 -1
  150. package/dist/lib/cms/document-gate.d.ts +19 -9
  151. package/dist/lib/cms/document-gate.js +25 -4
  152. package/dist/lib/cms/document-gate.js.map +1 -1
  153. package/dist/lib/cms/published-documents.js +1 -0
  154. package/dist/lib/cms/published-documents.js.map +1 -1
  155. package/dist/lib/cms-views/view-model.d.ts +3 -3
  156. package/dist/lib/data/index.d.ts +0 -3
  157. package/dist/lib/data/index.js +4 -6
  158. package/dist/lib/data/index.js.map +1 -1
  159. package/dist/lib/dnd/drop-rules.d.ts +45 -2
  160. package/dist/lib/dnd/drop-rules.js +64 -9
  161. package/dist/lib/dnd/drop-rules.js.map +1 -1
  162. package/dist/lib/engine-version.d.ts +16 -0
  163. package/dist/lib/engine-version.js +17 -0
  164. package/dist/lib/engine-version.js.map +1 -0
  165. package/dist/lib/i18n/messages.de.js +8 -56
  166. package/dist/lib/i18n/messages.de.js.map +1 -1
  167. package/dist/lib/i18n/messages.en.d.ts +8 -53
  168. package/dist/lib/i18n/messages.en.js +15 -57
  169. package/dist/lib/i18n/messages.en.js.map +1 -1
  170. package/dist/lib/locale/fallback.js +8 -2
  171. package/dist/lib/locale/fallback.js.map +1 -1
  172. package/dist/lib/locale/index.d.ts +0 -1
  173. package/dist/lib/locale/index.js +0 -1
  174. package/dist/lib/locale/index.js.map +1 -1
  175. package/dist/lib/locale/locale-store.d.ts +10 -3
  176. package/dist/lib/locale/locale-store.js +12 -5
  177. package/dist/lib/locale/locale-store.js.map +1 -1
  178. package/dist/lib/operations/session-hydration.d.ts +9 -5
  179. package/dist/lib/operations/session-hydration.js +10 -10
  180. package/dist/lib/operations/session-hydration.js.map +1 -1
  181. package/dist/lib/operations/studio-operations.js +4 -2
  182. package/dist/lib/operations/studio-operations.js.map +1 -1
  183. package/dist/lib/persistence/convex-adapter.js +63 -75
  184. package/dist/lib/persistence/convex-adapter.js.map +1 -1
  185. package/dist/lib/persistence/deployment-readiness.d.ts +8 -1
  186. package/dist/lib/persistence/deployment-readiness.js +4 -0
  187. package/dist/lib/persistence/deployment-readiness.js.map +1 -1
  188. package/dist/lib/persona/labels.d.ts +0 -2
  189. package/dist/lib/persona/labels.js +1 -7
  190. package/dist/lib/persona/labels.js.map +1 -1
  191. package/dist/lib/registry/index.d.ts +4 -2
  192. package/dist/lib/registry/index.js +26 -21
  193. package/dist/lib/registry/index.js.map +1 -1
  194. package/dist/lib/registry/project-components.js +0 -3
  195. package/dist/lib/registry/project-components.js.map +1 -1
  196. package/dist/lib/routes/route-issues.js +4 -5
  197. package/dist/lib/routes/route-issues.js.map +1 -1
  198. package/dist/lib/theme.js +3 -2
  199. package/dist/lib/theme.js.map +1 -1
  200. package/dist/lib/webhooks/tags.js +11 -14
  201. package/dist/lib/webhooks/tags.js.map +1 -1
  202. package/dist/lib/workspace/index.d.ts +1 -1
  203. package/dist/lib/workspace/index.js +1 -1
  204. package/dist/lib/workspace/index.js.map +1 -1
  205. package/dist/previews/enumerate.d.ts +27 -9
  206. package/dist/previews/enumerate.js +27 -6
  207. package/dist/previews/enumerate.js.map +1 -1
  208. package/dist/previews/manifest-format.d.ts +16 -7
  209. package/dist/previews/manifest-format.js +0 -21
  210. package/dist/previews/manifest-format.js.map +1 -1
  211. package/dist/router/match.d.ts +0 -2
  212. package/dist/router/match.js +0 -2
  213. package/dist/router/match.js.map +1 -1
  214. package/dist/ui/badge.d.ts +1 -1
  215. package/package.json +2 -2
  216. package/src/styles/studio.css +5 -4
  217. package/src/styles/tokens.css +72 -55
  218. package/convex/content.ts +0 -291
  219. package/dist/components/collab/collab-context.d.ts +0 -27
  220. package/dist/components/collab/collab-context.js +0 -39
  221. package/dist/components/collab/collab-context.js.map +0 -1
  222. package/dist/components/collab/collab-seed.d.ts +0 -15
  223. package/dist/components/collab/collab-seed.js +0 -20
  224. package/dist/components/collab/collab-seed.js.map +0 -1
  225. package/dist/components/extensions/extensions-view.d.ts +0 -7
  226. package/dist/components/extensions/extensions-view.js +0 -127
  227. package/dist/components/extensions/extensions-view.js.map +0 -1
  228. package/dist/lib/bindings/section-bindings.d.ts +0 -24
  229. package/dist/lib/bindings/section-bindings.js +0 -9
  230. package/dist/lib/bindings/section-bindings.js.map +0 -1
  231. package/dist/lib/data/data-store.d.ts +0 -98
  232. package/dist/lib/data/data-store.js +0 -211
  233. package/dist/lib/data/data-store.js.map +0 -1
  234. package/dist/lib/data/providers.d.ts +0 -143
  235. package/dist/lib/data/providers.js +0 -255
  236. package/dist/lib/data/providers.js.map +0 -1
  237. package/dist/lib/data/sample-capture.d.ts +0 -30
  238. package/dist/lib/data/sample-capture.js +0 -70
  239. package/dist/lib/data/sample-capture.js.map +0 -1
  240. package/dist/lib/data/sources-store.d.ts +0 -42
  241. package/dist/lib/data/sources-store.js +0 -120
  242. package/dist/lib/data/sources-store.js.map +0 -1
  243. package/dist/lib/locale/binding-fallback.d.ts +0 -35
  244. package/dist/lib/locale/binding-fallback.js +0 -73
  245. package/dist/lib/locale/binding-fallback.js.map +0 -1
  246. package/dist/lib/starters/kit-session.d.ts +0 -5
  247. package/dist/lib/starters/kit-session.js +0 -17
  248. package/dist/lib/starters/kit-session.js.map +0 -1
@@ -58,8 +58,6 @@ declare const MESSAGES: {
58
58
  'nav.assets.description': import("./types.js").SourceMessage;
59
59
  'nav.users.label': import("./types.js").SourceMessage;
60
60
  'nav.users.description': import("./types.js").SourceMessage;
61
- 'nav.extensions.label': import("./types.js").SourceMessage;
62
- 'nav.extensions.description': import("./types.js").SourceMessage;
63
61
  'nav.settings.label': import("./types.js").SourceMessage;
64
62
  'nav.settings.description': import("./types.js").SourceMessage;
65
63
  'userMenu.accountMenu': import("./types.js").SourceMessage;
@@ -409,6 +407,7 @@ declare const MESSAGES: {
409
407
  'cms.issue.unknown-alias': import("./types.js").SourceMessage;
410
408
  'cms.issue.unfilled-slot': import("./types.js").SourceMessage;
411
409
  'cms.issue.custom-validation': import("./types.js").SourceMessage;
410
+ 'cms.issue.hidden-predicate-error': import("./types.js").SourceMessage;
412
411
  'cms.issue.unaddressable-url': import("./types.js").SourceMessage;
413
412
  'cms.issue.unknown-version': import("./types.js").SourceMessage;
414
413
  'cms.issueBody.missing-required-field': import("./types.js").SourceMessage;
@@ -421,6 +420,8 @@ declare const MESSAGES: {
421
420
  'cms.issueMessage.duplicateDocument': import("./types.js").SourceMessage;
422
421
  'cms.issueMessage.fieldDetail': import("./types.js").SourceMessage;
423
422
  'cms.issueMessage.fieldReason': import("./types.js").SourceMessage;
423
+ 'cms.issueMessage.fieldHiddenPredicateThrew': import("./types.js").SourceMessage;
424
+ 'cms.issueMessage.groupHiddenPredicateThrew': import("./types.js").SourceMessage;
424
425
  'cms.issueMessage.propDetail': import("./types.js").SourceMessage;
425
426
  'cms.issueMessage.propReason': import("./types.js").SourceMessage;
426
427
  'cms.issueMessage.relationUnknownTargetCollection': import("./types.js").SourceMessage;
@@ -441,6 +442,7 @@ declare const MESSAGES: {
441
442
  'cms.issueMessage.preConvergenceV1': import("./types.js").SourceMessage;
442
443
  'cms.issueMessage.preConvergenceBareBlocks': import("./types.js").SourceMessage;
443
444
  'cms.issueMessage.preConvergencePlaintext': import("./types.js").SourceMessage;
445
+ 'cms.issueMessage.noValidationSession': import("./types.js").SourceMessage;
444
446
  'cms.issueMessage.richTextHoldsObject': import("./types.js").SourceMessage;
445
447
  'cms.issueMessage.unknownCollectionForDocument': import("./types.js").SourceMessage;
446
448
  'cms.issueMessage.localizedPlainValue': import("./types.js").SourceMessage;
@@ -759,7 +761,6 @@ declare const MESSAGES: {
759
761
  'components.detail.notFound.body': import("./types.js").SourceMessage;
760
762
  'components.detail.notFound.back': import("./types.js").SourceMessage;
761
763
  'components.detail.allComponents': import("./types.js").SourceMessage;
762
- 'components.detail.designTokens': import("./types.js").SourceMessage;
763
764
  'components.status.valid': import("./types.js").SourceMessage;
764
765
  'components.status.incompatible': import("./types.js").SourceMessage;
765
766
  'components.status.invalid': import("./types.js").SourceMessage;
@@ -819,49 +820,6 @@ declare const MESSAGES: {
819
820
  'components.browser.project': import("./types.js").SourceMessage;
820
821
  'components.browser.noMatchQuery': import("./types.js").SourceMessage;
821
822
  'components.browser.noMatchFilters': import("./types.js").SourceMessage;
822
- 'extensions.tab.marketplace': import("./types.js").SourceMessage;
823
- 'extensions.tab.installed': import("./types.js").SourceMessage;
824
- 'extensions.tab.registered': import("./types.js").SourceMessage;
825
- 'extensions.header.title': import("./types.js").SourceMessage;
826
- 'extensions.header.subtitle': import("./types.js").SourceMessage;
827
- 'extensions.search.placeholder': import("./types.js").SourceMessage;
828
- 'extensions.search.aria': import("./types.js").SourceMessage;
829
- 'extensions.token.placeholder': import("./types.js").SourceMessage;
830
- 'extensions.token.unlocked': import("./types.js").SourceMessage;
831
- 'extensions.empty.noMatch.title': import("./types.js").SourceMessage;
832
- 'extensions.empty.noMatch.body': import("./types.js").SourceMessage;
833
- 'extensions.listing.private': import("./types.js").SourceMessage;
834
- 'extensions.listing.noDescription': import("./types.js").SourceMessage;
835
- 'extensions.listing.unknownAuthor': import("./types.js").SourceMessage;
836
- 'extensions.action.installed': import("./types.js").SourceMessage;
837
- 'extensions.action.install': import("./types.js").SourceMessage;
838
- 'extensions.error.accessDenied': import("./types.js").SourceMessage;
839
- 'extensions.error.installFailed': import("./types.js").SourceMessage;
840
- 'extensions.empty.installed.title': import("./types.js").SourceMessage;
841
- 'extensions.empty.installed.body': import("./types.js").SourceMessage;
842
- 'extensions.contrib.components': import("./types.js").SourceMessage;
843
- 'extensions.contrib.fieldTypes': import("./types.js").SourceMessage;
844
- 'extensions.contrib.dataSources': import("./types.js").SourceMessage;
845
- 'extensions.contrib.assetStorage': import("./types.js").SourceMessage;
846
- 'extensions.contrib.exportTargets': import("./types.js").SourceMessage;
847
- 'extensions.contrib.templates': import("./types.js").SourceMessage;
848
- 'extensions.contrib.hooks': import("./types.js").SourceMessage;
849
- 'extensions.registered.intro': import("./types.js").SourceMessage;
850
- 'extensions.registered.components.title': import("./types.js").SourceMessage;
851
- 'extensions.registered.components.empty': import("./types.js").SourceMessage;
852
- 'extensions.registered.fieldTypes.title': import("./types.js").SourceMessage;
853
- 'extensions.registered.dataSources.title': import("./types.js").SourceMessage;
854
- 'extensions.registered.assetStorage.title': import("./types.js").SourceMessage;
855
- 'extensions.registered.assetStorage.empty': import("./types.js").SourceMessage;
856
- 'extensions.registered.exportTargets.title': import("./types.js").SourceMessage;
857
- 'extensions.registered.hookPoints.title': import("./types.js").SourceMessage;
858
- 'extensions.kind.plugin': import("./types.js").SourceMessage;
859
- 'extensions.kind.componentPackage': import("./types.js").SourceMessage;
860
- 'extensions.kind.fieldType': import("./types.js").SourceMessage;
861
- 'extensions.kind.dataSource': import("./types.js").SourceMessage;
862
- 'extensions.kind.assetStorage': import("./types.js").SourceMessage;
863
- 'extensions.kind.exportTarget': import("./types.js").SourceMessage;
864
- 'extensions.kind.template': import("./types.js").SourceMessage;
865
823
  'settings.identity.title': import("./types.js").SourceMessage;
866
824
  'settings.identity.name': import("./types.js").SourceMessage;
867
825
  'settings.identity.urlKey': import("./types.js").SourceMessage;
@@ -871,7 +829,6 @@ declare const MESSAGES: {
871
829
  'settings.locales.defaultSuffix': import("./types.js").SourceMessage;
872
830
  'settings.environments.title': import("./types.js").SourceMessage;
873
831
  'settings.environments.label': import("./types.js").SourceMessage;
874
- 'settings.exportTarget': import("./types.js").SourceMessage;
875
832
  'appViews.singleton.opening': import("./types.js").SourceMessage;
876
833
  'builder.canvas.loading': import("./types.js").SourceMessage;
877
834
  'builder.blocksPanel.title': import("./types.js").SourceMessage;
@@ -891,8 +848,6 @@ declare const MESSAGES: {
891
848
  'builder.blocksPanel.variantsHeading': import("./types.js").SourceMessage;
892
849
  'builder.blocksPanel.variantIssuesHint': import("./types.js").SourceMessage;
893
850
  'builder.pageTree.title': import("./types.js").SourceMessage;
894
- 'builder.pageTree.hiddenByCondition': import("./types.js").SourceMessage;
895
- 'builder.pageTree.conditional': import("./types.js").SourceMessage;
896
851
  'builder.pageTree.addChild': import("./types.js").SourceMessage;
897
852
  'builder.pageTree.moreActions': import("./types.js").SourceMessage;
898
853
  'builder.pageTree.moveUp': import("./types.js").SourceMessage;
@@ -904,8 +859,9 @@ declare const MESSAGES: {
904
859
  'builder.clipboard.copied': import("./types.js").SourceMessage;
905
860
  'builder.clipboard.cutNotice': import("./types.js").SourceMessage;
906
861
  'builder.clipboard.pastedInto': import("./types.js").SourceMessage;
862
+ 'builder.clipboard.notAllowed': import("./types.js").SourceMessage;
863
+ 'builder.clipboard.notAllowedByField': import("./types.js").SourceMessage;
907
864
  'builder.clipboard.issueComponent': import("./types.js").SourceMessage;
908
- 'builder.clipboard.issueBinding': import("./types.js").SourceMessage;
909
865
  'builder.clipboard.error.corruptJson': import("./types.js").SourceMessage;
910
866
  'builder.clipboard.error.notEnvelope': import("./types.js").SourceMessage;
911
867
  'builder.clipboard.error.foreignFormat': import("./types.js").SourceMessage;
@@ -914,12 +870,9 @@ declare const MESSAGES: {
914
870
  'builder.clipboard.error.invalidPayload': import("./types.js").SourceMessage;
915
871
  'builder.clipboard.error.nodeNotFound': import("./types.js").SourceMessage;
916
872
  'builder.clipboard.error.fixtureNotFound': import("./types.js").SourceMessage;
917
- 'builder.clipboard.issue.unresolvedBinding': import("./types.js").SourceMessage;
918
873
  'builder.clipboard.issue.missingComponent': import("./types.js").SourceMessage;
919
874
  'builder.clipboard.summary.pasted': import("./types.js").SourceMessage;
920
875
  'builder.clipboard.summary.pastedWith': import("./types.js").SourceMessage;
921
- 'builder.clipboard.summary.bindingUnresolvedOne': import("./types.js").SourceMessage;
922
- 'builder.clipboard.summary.bindingsUnresolved': import("./types.js").SourceMessage;
923
876
  'builder.clipboard.summary.componentMissingOne': import("./types.js").SourceMessage;
924
877
  'builder.clipboard.summary.componentsMissing': import("./types.js").SourceMessage;
925
878
  'builder.reuse.makeReusable': import("./types.js").SourceMessage;
@@ -989,6 +942,7 @@ declare const MESSAGES: {
989
942
  'builder.canvasTheme.stylesheetErrorNotice': import("./types.js").SourceMessage;
990
943
  'builder.canvasTheme.noThemeTokensNotice': import("./types.js").SourceMessage;
991
944
  'builder.canvasTheme.noStylesheetNotice': import("./types.js").SourceMessage;
945
+ 'builder.composition.preservedNotice': import("./types.js").SourceMessage;
992
946
  'builder.spacing.gapAfterChild': import("./types.js").SourceMessage;
993
947
  'builder.richText.toolbarLabel': import("./types.js").SourceMessage;
994
948
  'builder.richText.linkPlaceholder': import("./types.js").SourceMessage;
@@ -1085,6 +1039,7 @@ declare const MESSAGES: {
1085
1039
  'ai.proposal.expandReview': import("./types.js").SourceMessage;
1086
1040
  'ai.proposal.collapseReview': import("./types.js").SourceMessage;
1087
1041
  'ai.error.route': import("./types.js").SourceMessage;
1042
+ 'ai.error.routeNotMounted': import("./types.js").SourceMessage;
1088
1043
  'ai.error.generic': import("./types.js").SourceMessage;
1089
1044
  'ai.error.applyFailed': import("./types.js").SourceMessage;
1090
1045
  'ai.error.applyInvalid': import("./types.js").SourceMessage;
@@ -64,8 +64,6 @@ const MESSAGES = {
64
64
  'nav.assets.description': msg('Manage uploaded media and metadata.'),
65
65
  'nav.users.label': msg('Users'),
66
66
  'nav.users.description': msg('Manage who has access to this deployment and their role.'),
67
- 'nav.extensions.label': msg('Extensions'),
68
- 'nav.extensions.description': msg('Install components, field types, adapters, and templates from the marketplace.'),
69
67
  'nav.settings.label': msg('Settings'),
70
68
  'nav.settings.description': msg('Configure project metadata and locales.'),
71
69
  // ─────────────────────────────────────────────────────────────────────────
@@ -513,6 +511,7 @@ const MESSAGES = {
513
511
  'cms.issue.unknown-alias': msg('Unknown slot'),
514
512
  'cms.issue.unfilled-slot': msg('Empty slot'),
515
513
  'cms.issue.custom-validation': msg('Validation rule'),
514
+ 'cms.issue.hidden-predicate-error': msg('Broken visibility rule'),
516
515
  'cms.issue.unaddressable-url': msg('Unreachable URL'),
517
516
  'cms.issue.unknown-version': msg('Unknown version'),
518
517
  // EC-443 — issue-card BODY templates, only for codes whose full body derives
@@ -546,6 +545,10 @@ const MESSAGES = {
546
545
  'cms.issueMessage.duplicateDocument': msg('Duplicate document "{id}" in collection "{collection}".'),
547
546
  'cms.issueMessage.fieldDetail': msg('Field "{field}" {detail}.'),
548
547
  'cms.issueMessage.fieldReason': msg('Field "{field}": {reason}'),
548
+ // EC-598 — a config `hidden` predicate threw. {reason} is the thrown message: author
549
+ // prose, kept verbatim (like a `validate` message inside cms.issueMessage.fieldReason).
550
+ 'cms.issueMessage.fieldHiddenPredicateThrew': msg('The visibility rule of field "{field}" threw an error ("{reason}"), so the field is shown and validated. Fix the rule in the project config.', 'A developer-authored show/hide rule crashed. {field} is a field id, {reason} the error text the rule threw (untranslated).'),
551
+ 'cms.issueMessage.groupHiddenPredicateThrew': msg('The visibility rule of group "{group}" threw an error ("{reason}"), so its fields are shown and validated. Fix the rule in the project config.', 'A developer-authored show/hide rule of a form section crashed. {group} is the section id, {reason} the error text the rule threw (untranslated).'),
549
552
  'cms.issueMessage.propDetail': msg('Prop "{field}" {detail}.'),
550
553
  'cms.issueMessage.propReason': msg('Prop "{field}": {reason}'),
551
554
  'cms.issueMessage.relationUnknownTargetCollection': msg('Relation field "{field}" targets unknown collection "{target}".'),
@@ -566,6 +569,7 @@ const MESSAGES = {
566
569
  'cms.issueMessage.preConvergenceV1': msg('Field "{field}" holds a pre-convergence content shape (the v1 "{ version, doc }" envelope) — the engine reads only the converged "{ version: 2, content }" sequence. Re-seed this content.'),
567
570
  'cms.issueMessage.preConvergenceBareBlocks': msg('Field "{field}" holds a pre-convergence content shape (a bare composition node list) — the engine reads only the converged "{ version: 2, content }" sequence. Re-seed this content.'),
568
571
  'cms.issueMessage.preConvergencePlaintext': msg('Field "{field}" holds a pre-convergence content shape (legacy plain text) — the engine reads only the converged "{ version: 2, content }" sequence. Re-seed this content.'),
572
+ 'cms.issueMessage.noValidationSession': msg('No validation session is mounted — refusing to publish unvalidated.', 'EC-546: the publish gate\'s refusal when no CMS session is mounted to validate with; a host-level rule, not a finding about the document.'),
569
573
  'cms.issueMessage.richTextHoldsObject': msg('Rich-text field "{field}" expects a rich-text value ("{ version: 2, content }") but holds an object with keys "{keys}".'),
570
574
  'cms.issueMessage.unknownCollectionForDocument': msg('Document "{id}" references unknown collection "{collection}".'),
571
575
  'cms.issueMessage.localizedPlainValue': msg('Localized field "{field}" holds a plain value in the shared "values" bag — expected per-locale values under "localized.<locale>.{field}". The plain value serves only as a last-resort fallback.'),
@@ -950,7 +954,6 @@ const MESSAGES = {
950
954
  'components.detail.notFound.body': msg('No component is registered with id {id}.'),
951
955
  'components.detail.notFound.back': msg('Back to components'),
952
956
  'components.detail.allComponents': msg('All components'),
953
- 'components.detail.designTokens': msg('DESIGN TOKENS'),
954
957
  'components.status.valid': msg('valid'),
955
958
  'components.status.incompatible': msg('incompatible'),
956
959
  'components.status.invalid': msg('invalid'),
@@ -1011,52 +1014,6 @@ const MESSAGES = {
1011
1014
  'components.browser.noMatchQuery': msg('No components match “{query}”.'),
1012
1015
  'components.browser.noMatchFilters': msg('No components match the selected filters.'),
1013
1016
  // ─────────────────────────────────────────────────────────────────────────
1014
- // Extensions (marketplace)
1015
- // ─────────────────────────────────────────────────────────────────────────
1016
- 'extensions.tab.marketplace': msg('Marketplace'),
1017
- 'extensions.tab.installed': msg('Installed'),
1018
- 'extensions.tab.registered': msg('Registered'),
1019
- 'extensions.header.title': msg('Extensibility'),
1020
- 'extensions.header.subtitle': msg('Components · field types · data sources · asset storage · export targets · templates · hooks'),
1021
- 'extensions.search.placeholder': msg('Search extensions…'),
1022
- 'extensions.search.aria': msg('Search extensions'),
1023
- 'extensions.token.placeholder': msg('Private registry token'),
1024
- 'extensions.token.unlocked': msg('unlocked'),
1025
- 'extensions.empty.noMatch.title': msg('No extensions match'),
1026
- 'extensions.empty.noMatch.body': msg('Try a different search term.'),
1027
- 'extensions.listing.private': msg('private'),
1028
- 'extensions.listing.noDescription': msg('No description provided.'),
1029
- 'extensions.listing.unknownAuthor': msg('Unknown author'),
1030
- 'extensions.action.installed': msg('Installed'),
1031
- 'extensions.action.install': msg('Install'),
1032
- 'extensions.error.accessDenied': msg('Access denied — a valid token is required.'),
1033
- 'extensions.error.installFailed': msg('Installation failed.'),
1034
- 'extensions.empty.installed.title': msg('Nothing installed yet'),
1035
- 'extensions.empty.installed.body': msg('Install an extension from the marketplace to see what it contributes here.'),
1036
- 'extensions.contrib.components': msg('components'),
1037
- 'extensions.contrib.fieldTypes': msg('field types'),
1038
- 'extensions.contrib.dataSources': msg('data sources'),
1039
- 'extensions.contrib.assetStorage': msg('asset storage'),
1040
- 'extensions.contrib.exportTargets': msg('export targets'),
1041
- 'extensions.contrib.templates': msg('templates'),
1042
- 'extensions.contrib.hooks': msg('hooks'),
1043
- 'extensions.registered.intro': msg('Live registries on the plugin host. Built-in capabilities are always present; installing an extension adds to them.'),
1044
- 'extensions.registered.components.title': msg('Components'),
1045
- 'extensions.registered.components.empty': msg('No project components registered.'),
1046
- 'extensions.registered.fieldTypes.title': msg('Field types'),
1047
- 'extensions.registered.dataSources.title': msg('Data source kinds'),
1048
- 'extensions.registered.assetStorage.title': msg('Asset storage backends'),
1049
- 'extensions.registered.assetStorage.empty': msg('No storage adapters installed.'),
1050
- 'extensions.registered.exportTargets.title': msg('Export targets'),
1051
- 'extensions.registered.hookPoints.title': msg('Hook points'),
1052
- 'extensions.kind.plugin': msg('plugin'),
1053
- 'extensions.kind.componentPackage': msg('components'),
1054
- 'extensions.kind.fieldType': msg('field type'),
1055
- 'extensions.kind.dataSource': msg('data source'),
1056
- 'extensions.kind.assetStorage': msg('asset storage'),
1057
- 'extensions.kind.exportTarget': msg('export target'),
1058
- 'extensions.kind.template': msg('template'),
1059
- // ─────────────────────────────────────────────────────────────────────────
1060
1017
  // Settings
1061
1018
  // ─────────────────────────────────────────────────────────────────────────
1062
1019
  'settings.identity.title': msg('Identity'),
@@ -1068,7 +1025,6 @@ const MESSAGES = {
1068
1025
  'settings.locales.defaultSuffix': msg(' · default'),
1069
1026
  'settings.environments.title': msg('Environments & export'),
1070
1027
  'settings.environments.label': msg('Environments'),
1071
- 'settings.exportTarget': msg('Export target'),
1072
1028
  // ─────────────────────────────────────────────────────────────────────────
1073
1029
  // App-views shell
1074
1030
  // ─────────────────────────────────────────────────────────────────────────
@@ -1096,8 +1052,6 @@ const MESSAGES = {
1096
1052
  'builder.blocksPanel.variantsHeading': msg('Variants'),
1097
1053
  'builder.blocksPanel.variantIssuesHint': msg('Some variants have validation issues.'),
1098
1054
  'builder.pageTree.title': msg('Page tree'),
1099
- 'builder.pageTree.hiddenByCondition': msg('Hidden by condition'),
1100
- 'builder.pageTree.conditional': msg('Conditional'),
1101
1055
  'builder.pageTree.addChild': msg('Add child'),
1102
1056
  'builder.pageTree.moreActions': msg('More actions'),
1103
1057
  'builder.pageTree.moveUp': msg('Move up'),
@@ -1109,8 +1063,10 @@ const MESSAGES = {
1109
1063
  'builder.clipboard.copied': msg('Copied {label}'),
1110
1064
  'builder.clipboard.cutNotice': msg('Cut {label}'),
1111
1065
  'builder.clipboard.pastedInto': msg('{summary} · into {destination}'),
1066
+ 'builder.clipboard.notAllowed': msg('{component} cannot be pasted into {destination} — the slot does not allow it.', '{component} is the pasted root’s short component name (e.g. “Hero”); {destination} is “Parent · slot” (e.g. “Section · body”).'),
1067
+ // EC-554 — the composition FIELD's top-level `allow` refuses the pasted root.
1068
+ 'builder.clipboard.notAllowedByField': msg('{component} cannot be pasted at the top level of "{field}" — the field does not allow it.', '{component} is the pasted root’s short component name (e.g. “Container”); {field} is the composition field’s label (e.g. “Canvas”).'),
1112
1069
  'builder.clipboard.issueComponent': msg('component'),
1113
- 'builder.clipboard.issueBinding': msg('binding'),
1114
1070
  // EC-494 — the engine-built clipboard failures (`core/clipboard`), which carry a
1115
1071
  // catalog ref because that subpath may not import this catalog, plus the studio-side
1116
1072
  // paste diff and its summary (translated in place — it already holds the locale).
@@ -1122,12 +1078,9 @@ const MESSAGES = {
1122
1078
  'builder.clipboard.error.invalidPayload': msg('Clipboard fragment violates the fragment schema.'),
1123
1079
  'builder.clipboard.error.nodeNotFound': msg('No node "{nodeId}" exists in the composition.'),
1124
1080
  'builder.clipboard.error.fixtureNotFound': msg('Component "{component}" declares no fixture named "{fixture}".'),
1125
- 'builder.clipboard.issue.unresolvedBinding': msg('Binding source "{sourceId}" is not available in this project.'),
1126
1081
  'builder.clipboard.issue.missingComponent': msg('Component "{componentId}" is not registered in this project.'),
1127
1082
  'builder.clipboard.summary.pasted': msg('Pasted'),
1128
- 'builder.clipboard.summary.pastedWith': msg('Pasted — {parts}', '{parts} is the comma-joined list of the two summary fragments below.'),
1129
- 'builder.clipboard.summary.bindingUnresolvedOne': msg('{count} binding unresolved'),
1130
- 'builder.clipboard.summary.bindingsUnresolved': msg('{count} bindings unresolved'),
1083
+ 'builder.clipboard.summary.pastedWith': msg('Pasted — {parts}', '{parts} is the comma-joined list of the summary fragments below.'),
1131
1084
  'builder.clipboard.summary.componentMissingOne': msg('{count} component missing'),
1132
1085
  'builder.clipboard.summary.componentsMissing': msg('{count} components missing'),
1133
1086
  'builder.reuse.makeReusable': msg('Make reusable'),
@@ -1201,6 +1154,10 @@ const MESSAGES = {
1201
1154
  'builder.canvasTheme.stylesheetErrorNotice': msg('The canvas stylesheet failed to load — blocks render unstyled. Check the studio’s canvas.css build.'),
1202
1155
  'builder.canvasTheme.noThemeTokensNotice': msg('The canvas stylesheet defines no theme tokens. Make canvas.css import your site’s full-Tailwind theme entry (see docs/theming.md).'),
1203
1156
  'builder.canvasTheme.noStylesheetNotice': msg('No canvas stylesheet is configured — blocks render unstyled. The app must supply one via setCanvasStylesheetUrl (the create-elytra template wires this).'),
1157
+ // Mixed-sequence honesty notice (EC-549 interim): a blocks value carrying
1158
+ // typography items the canvas cannot render yet must SAY so — count + pointer,
1159
+ // never silence (EC-500 D3's canvas contract, scope item 3).
1160
+ 'builder.composition.preservedNotice': msg('This composition carries {count} text item(s) the canvas can’t display yet. They keep their position between the blocks, are untouched by canvas edits, and publish normally.', '{count} is the number of preserved non-component sequence items (prose paragraphs, quotes, …).'),
1204
1161
  'builder.spacing.gapAfterChild': msg('Gap after child {index}'),
1205
1162
  'builder.richText.toolbarLabel': msg('Text formatting'),
1206
1163
  'builder.richText.linkPlaceholder': msg('https://… (empty removes)'),
@@ -1310,6 +1267,7 @@ const MESSAGES = {
1310
1267
  'ai.proposal.expandReview': msg('Expand review'),
1311
1268
  'ai.proposal.collapseReview': msg('Close review'),
1312
1269
  'ai.error.route': msg('The assistant is unavailable right now. Please try again.'),
1270
+ 'ai.error.routeNotMounted': msg('No assistant route is mounted at {endpoint} — the request was answered by the page instead of the AI route. Check the host’s route mount; on a dev server the studio build output may be missing.', 'EC-514: the AI route answered with HTML (or another non-route shape) at the configured path — a developer-facing deploy/dev defect, not a provider outage. {endpoint} is the route path, e.g. /api/ai.'),
1313
1271
  'ai.error.generic': msg('Something went wrong. Please try again.'),
1314
1272
  'ai.error.applyFailed': msg('The draft could not be applied.'),
1315
1273
  'ai.error.applyInvalid': msg('The proposal no longer fits the current document: {issues}', 'Shown when a re-validation at apply time finds errors the apply would introduce (the document changed since the proposal was built). {issues} is a short list of issue messages.'),