@elytracms/studio 0.0.101 → 0.0.102
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.
- package/convex/asset-meta-patch.test.ts +7 -27
- package/convex/assets.ts +6 -41
- package/convex/cms.ts +2 -29
- package/convex/delivery.ts +2 -2
- package/convex/record-functions.ts +15 -82
- package/convex/redirects.ts +11 -116
- package/convex/schema.ts +4 -23
- package/convex/triggers.ts +7 -14
- package/dist/components/ai/ai-chat-panel.js +8 -5
- package/dist/components/ai/ai-chat-panel.js.map +1 -1
- package/dist/components/ai/translate-skipped.js +1 -0
- package/dist/components/ai/translate-skipped.js.map +1 -1
- package/dist/components/assets/asset-detail.js +1 -2
- package/dist/components/assets/asset-detail.js.map +1 -1
- package/dist/components/assets/asset-metadata.d.ts +2 -9
- package/dist/components/assets/asset-metadata.js +3 -10
- package/dist/components/assets/asset-metadata.js.map +1 -1
- package/dist/components/assets/asset-search.js +1 -1
- package/dist/components/assets/asset-search.js.map +1 -1
- package/dist/components/assets/asset-selection.js +2 -2
- package/dist/components/assets/asset-selection.js.map +1 -1
- package/dist/components/assets/assets-collection-view-source.d.ts +2 -3
- package/dist/components/assets/assets-collection-view-source.js +2 -3
- package/dist/components/assets/assets-collection-view-source.js.map +1 -1
- package/dist/components/builder/__fixtures__/reuse-race.d.ts +30 -0
- package/dist/components/builder/__fixtures__/reuse-race.js +77 -0
- package/dist/components/builder/__fixtures__/reuse-race.js.map +1 -0
- package/dist/components/builder/composition-field-editor.js +3 -3
- package/dist/components/builder/composition-field-editor.js.map +1 -1
- package/dist/components/builder/reuse-context.d.ts +2 -1
- package/dist/components/builder/reuse-context.js +5 -20
- package/dist/components/builder/reuse-context.js.map +1 -1
- package/dist/components/builder/reuse.d.ts +18 -11
- package/dist/components/builder/reuse.js +12 -14
- package/dist/components/builder/reuse.js.map +1 -1
- package/dist/components/cms/asset-field.js +1 -3
- package/dist/components/cms/asset-field.js.map +1 -1
- package/dist/components/cms/cell.d.ts +2 -2
- package/dist/components/cms/cell.js +8 -18
- package/dist/components/cms/cell.js.map +1 -1
- package/dist/components/cms/detail-editor.js +2 -1
- package/dist/components/cms/detail-editor.js.map +1 -1
- package/dist/components/cms/field-control.js +13 -1
- package/dist/components/cms/field-control.js.map +1 -1
- package/dist/lib/ai/chat-context.d.ts +6 -2
- package/dist/lib/ai/chat-context.js +11 -5
- package/dist/lib/ai/chat-context.js.map +1 -1
- package/dist/lib/ai/knowledge.d.ts +9 -9
- package/dist/lib/ai/knowledge.js +22 -0
- package/dist/lib/ai/knowledge.js.map +1 -1
- package/dist/lib/ai/tools.d.ts +8 -1
- package/dist/lib/ai/tools.js +33 -15
- package/dist/lib/ai/tools.js.map +1 -1
- package/dist/lib/ai/translate-document.d.ts +8 -1
- package/dist/lib/ai/translate-document.js +20 -5
- package/dist/lib/ai/translate-document.js.map +1 -1
- package/dist/lib/ai/update-fields.js +5 -12
- package/dist/lib/ai/update-fields.js.map +1 -1
- package/dist/lib/ai/writer-form.d.ts +61 -0
- package/dist/lib/ai/writer-form.js +218 -27
- package/dist/lib/ai/writer-form.js.map +1 -1
- package/dist/lib/assets/upload.d.ts +1 -2
- package/dist/lib/assets/upload.js +1 -2
- package/dist/lib/assets/upload.js.map +1 -1
- package/dist/lib/engine-version.d.ts +1 -1
- package/dist/lib/engine-version.js +1 -1
- package/dist/lib/engine-version.js.map +1 -1
- package/dist/lib/i18n/messages.de.js +9 -1
- package/dist/lib/i18n/messages.de.js.map +1 -1
- package/dist/lib/i18n/messages.en.d.ts +7 -0
- package/dist/lib/i18n/messages.en.js +11 -1
- package/dist/lib/i18n/messages.en.js.map +1 -1
- package/dist/lib/operations/cms-persistence.d.ts +20 -10
- package/dist/lib/operations/cms-persistence.js +11 -3
- package/dist/lib/operations/cms-persistence.js.map +1 -1
- package/dist/lib/persistence/convex-adapter.js +7 -2
- package/dist/lib/persistence/convex-adapter.js.map +1 -1
- package/package.json +3 -3
- package/convex/asset-alt-migration.test.ts +0 -127
- package/convex/redirect-migration.test.ts +0 -205
- package/convex/version-kind-stamping.test.ts +0 -118
|
@@ -222,6 +222,8 @@ declare const MESSAGES: {
|
|
|
222
222
|
'operations.error.documentSchemaViolation': import("./types.js").SourceMessage;
|
|
223
223
|
'operations.error.strictReferencesBlockDelete': import("./types.js").SourceMessage;
|
|
224
224
|
'operations.error.strictReferencesBlockDeleteOne': import("./types.js").SourceMessage;
|
|
225
|
+
'operations.error.referencesBlockDelete': import("./types.js").SourceMessage;
|
|
226
|
+
'operations.error.referencesBlockDeleteOne': import("./types.js").SourceMessage;
|
|
225
227
|
'operations.error.strictReferencesBlockUnpublish': import("./types.js").SourceMessage;
|
|
226
228
|
'operations.error.strictReferencesBlockUnpublishOne': import("./types.js").SourceMessage;
|
|
227
229
|
'operations.error.strictTargetsUnpublishedOne': import("./types.js").SourceMessage;
|
|
@@ -481,6 +483,7 @@ declare const MESSAGES: {
|
|
|
481
483
|
'cms.issueMessage.preConvergenceV1': import("./types.js").SourceMessage;
|
|
482
484
|
'cms.issueMessage.preConvergenceBareBlocks': import("./types.js").SourceMessage;
|
|
483
485
|
'cms.issueMessage.preConvergencePlaintext': import("./types.js").SourceMessage;
|
|
486
|
+
'cms.issueMessage.untaggedSequenceComponent': import("./types.js").SourceMessage;
|
|
484
487
|
'cms.issueMessage.gateUnknownCollection': import("./types.js").SourceMessage;
|
|
485
488
|
'cms.issueMessage.gateAssetLibraryUnready': import("./types.js").SourceMessage;
|
|
486
489
|
'cms.issueMessage.gateNoLocales': import("./types.js").SourceMessage;
|
|
@@ -664,6 +667,8 @@ declare const MESSAGES: {
|
|
|
664
667
|
'cms.reference.publishedBadge': import("./types.js").SourceMessage;
|
|
665
668
|
'cms.field.rendererCrashed': import("./types.js").SourceMessage;
|
|
666
669
|
'cms.field.noRenderer': import("./types.js").SourceMessage;
|
|
670
|
+
'cms.field.blocksInFieldRow': import("./types.js").SourceMessage;
|
|
671
|
+
'cms.field.noControlForType': import("./types.js").SourceMessage;
|
|
667
672
|
'cms.field.itemActions': import("./types.js").SourceMessage;
|
|
668
673
|
'cms.field.moveUp': import("./types.js").SourceMessage;
|
|
669
674
|
'cms.field.moveDown': import("./types.js").SourceMessage;
|
|
@@ -1157,6 +1162,7 @@ declare const MESSAGES: {
|
|
|
1157
1162
|
'ai.translate.skipped.unreadable': import("./types.js").SourceMessage;
|
|
1158
1163
|
'ai.translate.skipped.notReturned': import("./types.js").SourceMessage;
|
|
1159
1164
|
'ai.translate.skipped.structureChanged': import("./types.js").SourceMessage;
|
|
1165
|
+
'ai.translate.skipped.locked': import("./types.js").SourceMessage;
|
|
1160
1166
|
'ai.update.proposalTitle': import("./types.js").SourceMessage;
|
|
1161
1167
|
'ai.update.diffBefore': import("./types.js").SourceMessage;
|
|
1162
1168
|
'ai.update.diffAfter': import("./types.js").SourceMessage;
|
|
@@ -1172,6 +1178,7 @@ declare const MESSAGES: {
|
|
|
1172
1178
|
'cms.issueMessage.nonCanonicalValue': import("./types.js").SourceMessage;
|
|
1173
1179
|
'cms.issueMessage.propsNotJudged': import("./types.js").SourceMessage;
|
|
1174
1180
|
'cms.issueMessage.assetHoldsUrl': import("./types.js").SourceMessage;
|
|
1181
|
+
'cms.issueMessage.slugNotSegment': import("./types.js").SourceMessage;
|
|
1175
1182
|
'cms.issueMessage.emptyAllow': import("./types.js").SourceMessage;
|
|
1176
1183
|
'cms.issueMessage.unknownAllowComponent': import("./types.js").SourceMessage;
|
|
1177
1184
|
'cms.issueMessage.blocksNotTopLevel': import("./types.js").SourceMessage;
|
|
@@ -291,6 +291,9 @@ const MESSAGES = {
|
|
|
291
291
|
'operations.error.documentSchemaViolation': msg('Document “{collection}:{id}” violates its collection schema.', 'The publish gate rejected the draft; the per-field lines follow beneath it.'),
|
|
292
292
|
'operations.error.strictReferencesBlockDelete': msg('Cannot delete “{target}”: {count} documents reference it through strict relation fields — {named}{more}. Remove these references first.', '{named} is an identifier list “collection:id” (field); {more} is the andMore fragment or empty.'),
|
|
293
293
|
'operations.error.strictReferencesBlockDeleteOne': msg('Cannot delete “{target}”: {count} document references it through strict relation fields — {named}. Remove these references first.'),
|
|
294
|
+
// EC-739 — an UNREFERENCED delete (a cleanup, e.g. Make reusable's Undo): refused by a reference of any strictness.
|
|
295
|
+
'operations.error.referencesBlockDelete': msg('Cannot delete “{target}”: {count} documents reference it — {named}{more}. This delete runs only while nothing references it.', '{named} is an identifier list “collection:id” (field); {more} is the andMore fragment or empty.'),
|
|
296
|
+
'operations.error.referencesBlockDeleteOne': msg('Cannot delete “{target}”: {count} document references it — {named}. This delete runs only while nothing references it.'),
|
|
294
297
|
'operations.error.strictReferencesBlockUnpublish': msg('Cannot unpublish “{target}”: {count} documents reference it through strict relation fields — {named}{more}. Remove these references first.'),
|
|
295
298
|
'operations.error.strictReferencesBlockUnpublishOne': msg('Cannot unpublish “{target}”: {count} document references it through strict relation fields — {named}. Remove these references first.'),
|
|
296
299
|
// EC-589 — the referrer direction of `strict: true`: publish refused while a strict target is missing or unpublished.
|
|
@@ -621,6 +624,7 @@ const MESSAGES = {
|
|
|
621
624
|
'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.'),
|
|
622
625
|
'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.'),
|
|
623
626
|
'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.'),
|
|
627
|
+
'cms.issueMessage.untaggedSequenceComponent': msg('Field "{field}" holds the component "{component}" (node "{node}") without its "elytra/component" tag in a content list — the engine reads only tagged components there, so the whole value renders its invalid-content fallback. It was written past the write path; save the field again through the editor or re-seed it.'),
|
|
624
628
|
'cms.issueMessage.gateUnknownCollection': msg('The project declares no collection “{collection}” — there are no rules to publish it by.', 'EC-595 A2 (F23): the publish gate refuses a document of a collection the project config does not declare. {collection} is the collection id.'),
|
|
625
629
|
'cms.issueMessage.gateAssetLibraryUnready': msg('The asset library could not be read — refusing to publish unverified asset references. Try again.', 'EC-595 A2 (EC-588, ruled 1f): the publish gate could not read the asset library, so a document that references assets is refused instead of published with the asset checks off.'),
|
|
626
630
|
'cms.issueMessage.gateNoLocales': msg('The project declares no locales — refusing to publish without them.', 'EC-595 A2: the publish gate refuses when the project config declares no locales (the storage key of every localized value).'),
|
|
@@ -827,6 +831,8 @@ const MESSAGES = {
|
|
|
827
831
|
// ─────────────────────────────────────────────────────────────────────────
|
|
828
832
|
'cms.field.rendererCrashed': msg('Custom renderer crashed — showing the built-in control.'),
|
|
829
833
|
'cms.field.noRenderer': msg('No field renderer registered for control “{control}”.'),
|
|
834
|
+
'cms.field.blocksInFieldRow': msg('A blocks field is edited as the page canvas on a form tab of its own — it has no field row here.', 'EC-740: notice in place of a field row for a blocks (composition) field, e.g. one placed in the Details pane.'),
|
|
835
|
+
'cms.field.noControlForType': msg('No built-in control for the field type “{type}”.'),
|
|
830
836
|
'cms.field.itemActions': msg('Item actions'),
|
|
831
837
|
'cms.field.moveUp': msg('Move up'),
|
|
832
838
|
'cms.field.moveDown': msg('Move down'),
|
|
@@ -1411,6 +1417,8 @@ const MESSAGES = {
|
|
|
1411
1417
|
'ai.translate.skipped.unreadable': msg('its stored value could not be read'),
|
|
1412
1418
|
'ai.translate.skipped.notReturned': msg('the assistant returned no text for it'),
|
|
1413
1419
|
'ai.translate.skipped.structureChanged': msg('the translation lost formatting, links or embedded items — the original was kept'),
|
|
1420
|
+
// EC-738 — a bucket whose read-only (or AI-excluded) content is shaped differently from the source's.
|
|
1421
|
+
'ai.translate.skipped.locked': msg('it holds content that cannot be changed here, arranged differently from the source — left as it is'),
|
|
1414
1422
|
// EC-378 — the update (edit-existing) proposal
|
|
1415
1423
|
'ai.update.proposalTitle': msg('Changes to {collection}'),
|
|
1416
1424
|
'ai.update.diffBefore': msg('Current'),
|
|
@@ -1430,9 +1438,11 @@ const MESSAGES = {
|
|
|
1430
1438
|
'builder.inspector.unset': msg('Not set', 'An inspector prop with no value — the component uses its own default.'),
|
|
1431
1439
|
'builder.inspector.unsetWithHint': msg('Not set (default: {hint})', '{hint} is the manifest default shown as a suggestion, e.g. "vertical" or "2".'),
|
|
1432
1440
|
// EC-586 / EC-581 (wave-0092, zone A) — canonical values and the per-FieldType definition
|
|
1433
|
-
'cms.issueMessage.nonCanonicalValue': msg('Field "{field}" is stored in a non-canonical form for a "{type}" field — it was written past the write path that stores one form per field type.
|
|
1441
|
+
'cms.issueMessage.nonCanonicalValue': msg('Field "{field}" is stored in a non-canonical form for a "{type}" field — it was written past the write path that stores one form per field type. Save the field again through the editor or an operation to store the canonical form.'),
|
|
1434
1442
|
'cms.issueMessage.propsNotJudged': msg('The component props in field "{field}" were not judged: the page was resolved without a component registry, so they are delivered as stored and their issues are not reported.'),
|
|
1435
1443
|
'cms.issueMessage.assetHoldsUrl': msg('Asset field "{field}" holds a URL — an asset value is a library asset, never a URL. Upload the image to the library and pick it, or put an external image’s address in the component’s URL prop (the Image’s “Image URL”).'),
|
|
1444
|
+
// EC-733 — the slug role holds what the slug rule writes
|
|
1445
|
+
'cms.issueMessage.slugNotSegment': msg('Slug field "{field}" holds "{value}", which is not a URL segment — the slug rule writes "{slug}" for it. The live URL is built from the stored slug as written; store the slug the rule writes.'),
|
|
1436
1446
|
// EC-584 — the AllowList parse (config load / registration).
|
|
1437
1447
|
'cms.issueMessage.emptyAllow': msg('Field "{field}" declares an empty "allow" — a list permits exactly the ids it names, so an empty one permits nothing. Omit "allow" for the type\'s default vocabulary, or list the component ids.'),
|
|
1438
1448
|
'cms.issueMessage.unknownAllowComponent': msg('Field "{field}" allows "{component}", which is not a component of this project — check the id, or remove it from "allow".', '{component} is the component id as declared in the field\'s allow list.'),
|