@elytracms/studio 0.0.95 → 0.0.96
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/cms.ts +124 -8
- package/convex/strict-reference-race.test.ts +139 -0
- package/dist/components/ai/ai-chat-panel.js +15 -2
- package/dist/components/ai/ai-chat-panel.js.map +1 -1
- package/dist/components/ai/translate-document-action.d.ts +6 -0
- package/dist/components/ai/translate-document-action.js.map +1 -1
- package/dist/components/ai/translate-document-dialog.d.ts +1 -1
- package/dist/components/ai/translate-document-dialog.js +5 -5
- package/dist/components/ai/translate-document-dialog.js.map +1 -1
- package/dist/components/assets/asset-detail.js +5 -2
- package/dist/components/assets/asset-detail.js.map +1 -1
- package/dist/components/assets/asset-locale.d.ts +7 -0
- package/dist/components/assets/asset-locale.js +16 -2
- package/dist/components/assets/asset-locale.js.map +1 -1
- package/dist/components/assets/asset-meta-drift-notice.d.ts +13 -0
- package/dist/components/assets/asset-meta-drift-notice.js +22 -0
- package/dist/components/assets/asset-meta-drift-notice.js.map +1 -0
- package/dist/components/assets/asset-meta-label.d.ts +2 -1
- package/dist/components/assets/asset-meta-label.js +4 -2
- package/dist/components/assets/asset-meta-label.js.map +1 -1
- package/dist/components/assets/asset-metadata.d.ts +33 -13
- package/dist/components/assets/asset-metadata.js +46 -22
- package/dist/components/assets/asset-metadata.js.map +1 -1
- package/dist/components/assets/asset-search.d.ts +6 -2
- package/dist/components/assets/asset-search.js +15 -5
- package/dist/components/assets/asset-search.js.map +1 -1
- package/dist/components/assets/assets-collection-view-source.d.ts +5 -3
- package/dist/components/assets/assets-collection-view-source.js +7 -5
- package/dist/components/assets/assets-collection-view-source.js.map +1 -1
- package/dist/components/builder/canvas-rebase.d.ts +36 -12
- package/dist/components/builder/canvas-rebase.js +13 -3
- package/dist/components/builder/canvas-rebase.js.map +1 -1
- package/dist/components/builder/canvas-render-context.js +5 -4
- package/dist/components/builder/canvas-render-context.js.map +1 -1
- package/dist/components/builder/composition-field-editor.d.ts +12 -6
- package/dist/components/builder/composition-field-editor.js +6 -5
- package/dist/components/builder/composition-field-editor.js.map +1 -1
- package/dist/components/cms/asset-picker-core.d.ts +2 -2
- package/dist/components/cms/asset-picker-core.js +2 -2
- package/dist/components/cms/asset-picker-core.js.map +1 -1
- package/dist/components/cms/asset-picker.js +3 -1
- package/dist/components/cms/asset-picker.js.map +1 -1
- package/dist/components/cms/canvas-commit.d.ts +6 -0
- package/dist/components/cms/canvas-commit.js +5 -1
- package/dist/components/cms/canvas-commit.js.map +1 -1
- package/dist/components/cms/cms-store.d.ts +21 -8
- package/dist/components/cms/cms-store.js +19 -10
- package/dist/components/cms/cms-store.js.map +1 -1
- package/dist/components/cms/collection-table.js +4 -11
- package/dist/components/cms/collection-table.js.map +1 -1
- package/dist/components/cms/detail-editor.js +2 -2
- package/dist/components/cms/detail-editor.js.map +1 -1
- package/dist/components/cms/draft-commit.d.ts +16 -3
- package/dist/components/cms/draft-commit.js +3 -2
- package/dist/components/cms/draft-commit.js.map +1 -1
- package/dist/components/cms/use-document-draft.d.ts +67 -9
- package/dist/components/cms/use-document-draft.js +112 -39
- package/dist/components/cms/use-document-draft.js.map +1 -1
- package/dist/components/collection-view/cms-collection-view-source.js +6 -4
- package/dist/components/collection-view/cms-collection-view-source.js.map +1 -1
- package/dist/components/components/transfer-dialog.js +6 -4
- package/dist/components/components/transfer-dialog.js.map +1 -1
- package/dist/lib/ai/chat-state.d.ts +7 -0
- package/dist/lib/ai/chat-state.js.map +1 -1
- package/dist/lib/ai/tools.d.ts +8 -0
- package/dist/lib/ai/tools.js +4 -0
- package/dist/lib/ai/tools.js.map +1 -1
- package/dist/lib/cms-views/view-model.d.ts +15 -8
- package/dist/lib/cms-views/view-model.js +19 -5
- package/dist/lib/cms-views/view-model.js.map +1 -1
- package/dist/lib/collection-view/__fixtures__/document-writes.js +1 -0
- package/dist/lib/collection-view/__fixtures__/document-writes.js.map +1 -1
- package/dist/lib/collection-view/collection-view-source.d.ts +15 -7
- package/dist/lib/collection-view/collection-view-source.js.map +1 -1
- package/dist/lib/data/collection-content.js +5 -0
- package/dist/lib/data/collection-content.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 +13 -1
- package/dist/lib/i18n/messages.de.js.map +1 -1
- package/dist/lib/i18n/messages.en.d.ts +11 -0
- package/dist/lib/i18n/messages.en.js +14 -1
- package/dist/lib/i18n/messages.en.js.map +1 -1
- package/dist/lib/operations/cms-persistence.d.ts +80 -35
- package/dist/lib/operations/cms-persistence.js +348 -85
- package/dist/lib/operations/cms-persistence.js.map +1 -1
- package/dist/lib/persistence/convex-adapter.js +54 -8
- package/dist/lib/persistence/convex-adapter.js.map +1 -1
- package/dist/lib/persona/labels.js +1 -0
- package/dist/lib/persona/labels.js.map +1 -1
- package/package.json +3 -3
|
@@ -206,6 +206,8 @@ declare const MESSAGES: {
|
|
|
206
206
|
'operations.error.strictTargetsUnpublished': import("./types.js").SourceMessage;
|
|
207
207
|
'operations.error.publishNeedsLocales': import("./types.js").SourceMessage;
|
|
208
208
|
'operations.error.versionNotPinnable': import("./types.js").SourceMessage;
|
|
209
|
+
'operations.error.changesetBlocked': import("./types.js").SourceMessage;
|
|
210
|
+
'operations.error.changesetDeleteNotReversible': import("./types.js").SourceMessage;
|
|
209
211
|
'operations.errorDetail.andMore': import("./types.js").SourceMessage;
|
|
210
212
|
'content.queryError.nonFilterableField': import("./types.js").SourceMessage;
|
|
211
213
|
'content.queryError.unknownField': import("./types.js").SourceMessage;
|
|
@@ -220,6 +222,10 @@ declare const MESSAGES: {
|
|
|
220
222
|
'content.queryError.sortNotFilterable': import("./types.js").SourceMessage;
|
|
221
223
|
'content.queryError.sortUnknownField': import("./types.js").SourceMessage;
|
|
222
224
|
'content.queryError.sortDirection': import("./types.js").SourceMessage;
|
|
225
|
+
'content.queryError.sortShape': import("./types.js").SourceMessage;
|
|
226
|
+
'content.queryError.sortFieldName': import("./types.js").SourceMessage;
|
|
227
|
+
'content.queryError.sortKeyRenamed': import("./types.js").SourceMessage;
|
|
228
|
+
'content.queryError.sortUnknownKey': import("./types.js").SourceMessage;
|
|
223
229
|
'content.queryError.limitPositiveInteger': import("./types.js").SourceMessage;
|
|
224
230
|
'cms.index.heading': import("./types.js").SourceMessage;
|
|
225
231
|
'cms.index.description': import("./types.js").SourceMessage;
|
|
@@ -401,6 +407,7 @@ declare const MESSAGES: {
|
|
|
401
407
|
'cms.issue.cardinality-violation': import("./types.js").SourceMessage;
|
|
402
408
|
'cms.issue.unknown-asset': import("./types.js").SourceMessage;
|
|
403
409
|
'cms.issue.asset-without-url': import("./types.js").SourceMessage;
|
|
410
|
+
'cms.issue.asset-meta-drift': import("./types.js").SourceMessage;
|
|
404
411
|
'cms.issue.duplicate-document': import("./types.js").SourceMessage;
|
|
405
412
|
'cms.issue.unknown-locale': import("./types.js").SourceMessage;
|
|
406
413
|
'cms.issue.missing-localized-value': import("./types.js").SourceMessage;
|
|
@@ -463,6 +470,7 @@ declare const MESSAGES: {
|
|
|
463
470
|
'cms.conflict.empty': import("./types.js").SourceMessage;
|
|
464
471
|
'cms.conflict.structured': import("./types.js").SourceMessage;
|
|
465
472
|
'cms.conflict.cellRefused': import("./types.js").SourceMessage;
|
|
473
|
+
'cms.conflict.unauthored': import("./types.js").SourceMessage;
|
|
466
474
|
'cms.presence.inField': import("./types.js").SourceMessage;
|
|
467
475
|
'cms.presence.inFieldMany': import("./types.js").SourceMessage;
|
|
468
476
|
'cms.presence.someone': import("./types.js").SourceMessage;
|
|
@@ -482,6 +490,7 @@ declare const MESSAGES: {
|
|
|
482
490
|
'cms.issueMessage.duplicateAlias': import("./types.js").SourceMessage;
|
|
483
491
|
'cms.issueMessage.unfilledSlot': import("./types.js").SourceMessage;
|
|
484
492
|
'cms.issueMessage.reservedFieldName': import("./types.js").SourceMessage;
|
|
493
|
+
'cms.issueMessage.reservedFieldTypeOption': import("./types.js").SourceMessage;
|
|
485
494
|
'cms.issueMessage.duplicateSelectOption': import("./types.js").SourceMessage;
|
|
486
495
|
'cms.issueMessage.duplicateObjectField': import("./types.js").SourceMessage;
|
|
487
496
|
'cms.issueMessage.assetCollectionSingleton': import("./types.js").SourceMessage;
|
|
@@ -700,6 +709,8 @@ declare const MESSAGES: {
|
|
|
700
709
|
'assets.viewToggle.grid': import("./types.js").SourceMessage;
|
|
701
710
|
'assets.detail.metadataHeading': import("./types.js").SourceMessage;
|
|
702
711
|
'assets.detail.noFileUrl': import("./types.js").SourceMessage;
|
|
712
|
+
'assets.detail.metaDriftNotLocalized': import("./types.js").SourceMessage;
|
|
713
|
+
'assets.detail.metaDriftUndeclared': import("./types.js").SourceMessage;
|
|
703
714
|
'assets.references.buttonLabel': import("./types.js").SourceMessage;
|
|
704
715
|
'assets.references.title': import("./types.js").SourceMessage;
|
|
705
716
|
'assets.references.description': import("./types.js").SourceMessage;
|
|
@@ -272,6 +272,9 @@ const MESSAGES = {
|
|
|
272
272
|
'operations.error.strictTargetsUnpublished': msg('Document “{target}” cannot be published: strict relation targets are missing or unpublished — publish them first.'),
|
|
273
273
|
'operations.error.publishNeedsLocales': msg('“{target}” cannot be published: its collection declares localized fields ({fields}), and no locale config was given to judge their hidden values in.', 'EC-585: a headless runtime publishing a localized collection without the project locale config; {fields} is a comma-separated list of field names.'),
|
|
274
274
|
'operations.error.versionNotPinnable': msg('Version {version} of “{target}” was not recorded by a publish, so it cannot be pinned live — restore it into the draft and publish that instead.', 'EC-585: only a version a publish recorded can be re-pinned; {version} is a number.'),
|
|
275
|
+
// EC-648 — changesets: apply blocked by an issue, and the step a changeset refuses because no undo can reverse it.
|
|
276
|
+
'operations.error.changesetBlocked': msg('Changeset “{changeset}” has blocking validation issues and cannot be applied.', '{changeset} is a changeset id, e.g. cs-0001; the blocking issues follow beneath it.'),
|
|
277
|
+
'operations.error.changesetDeleteNotReversible': msg('Step {step}: “{target}” cannot be deleted inside a changeset — a delete removes its version history and publication, which no undo can restore. Delete it on its own.', 'EC-648: {step} is the 0-based step number; {target} is the document key collection:id.'),
|
|
275
278
|
'operations.errorDetail.andMore': msg(', and {count} more', 'Truncation fragment spliced into the strict-reference sentences; keeps its leading comma and space.'),
|
|
276
279
|
// EC-494 — content-query errors (`core/content`'s validateWhere/validateSort/
|
|
277
280
|
// validateLimit). Two studio surfaces render them: the filter builder's per-clause
|
|
@@ -289,6 +292,11 @@ const MESSAGES = {
|
|
|
289
292
|
'content.queryError.sortNotFilterable': msg('Sort field "{field}" on "{collection}" is not declared filterable.'),
|
|
290
293
|
'content.queryError.sortUnknownField': msg('Sort field "{field}" does not exist on "{collection}".'),
|
|
291
294
|
'content.queryError.sortDirection': msg('Sort direction must be "asc" or "desc".'),
|
|
295
|
+
// EC-660 — THE sort shape (`{ field, direction? }`, strict) judged by validateSort.
|
|
296
|
+
'content.queryError.sortShape': msg('Sort must be an object { field, direction? }.', 'The braces are code — the literal shape of a sort; keep them and the key names untranslated.'),
|
|
297
|
+
'content.queryError.sortFieldName': msg('Sort field must be a non-empty field name.'),
|
|
298
|
+
'content.queryError.sortKeyRenamed': msg('Sort key "{key}" is spelled "{replacement}".', '{key} is a retired key name (dir), {replacement} the key that replaced it (direction) — identifiers.'),
|
|
299
|
+
'content.queryError.sortUnknownKey': msg('Sort key "{key}" is not read — a sort is { field, direction? }.', 'The braces are code — the literal shape of a sort; keep them and the key names untranslated.'),
|
|
292
300
|
'content.queryError.limitPositiveInteger': msg('Limit must be a positive integer.'),
|
|
293
301
|
// ─────────────────────────────────────────────────────────────────────────
|
|
294
302
|
// CMS — collection list / view bar / filters / cells
|
|
@@ -511,6 +519,7 @@ const MESSAGES = {
|
|
|
511
519
|
'cms.issue.cardinality-violation': msg('Wrong number of values'),
|
|
512
520
|
'cms.issue.unknown-asset': msg('Missing asset'),
|
|
513
521
|
'cms.issue.asset-without-url': msg('Asset without a file'),
|
|
522
|
+
'cms.issue.asset-meta-drift': msg('Unused asset translation', 'EC-659: an asset keeps a translated value (e.g. of its alt text) for a field that is no longer translatable — the shared value is shown; the stored translation is kept but not used.'),
|
|
514
523
|
'cms.issue.duplicate-document': msg('Duplicate entry'),
|
|
515
524
|
'cms.issue.unknown-locale': msg('Unknown language'),
|
|
516
525
|
'cms.issue.missing-localized-value': msg('Missing translation'),
|
|
@@ -598,6 +607,7 @@ const MESSAGES = {
|
|
|
598
607
|
'cms.conflict.empty': msg('(empty)', 'EC-595 A2: {value} when the stored value is empty.'),
|
|
599
608
|
'cms.conflict.structured': msg('a structured value', 'EC-595 A2: {value} when the stored value is not plain text (an object, a list, rich text).'),
|
|
600
609
|
'cms.conflict.cellRefused': msg('This field was changed by someone else since you loaded it — their value is shown.', 'EC-595 A2: a table cell or bulk edit refused because the field changed meanwhile; the stored value is kept.'),
|
|
610
|
+
'cms.conflict.unauthored': msg('A change was not saved: it does not say which version of the document it was made on, so it could overwrite a newer change. Reload the document and make it again.', 'EC-647: a write that names no revision it was authored against is refused, never sent at the newest one (it could silently overwrite a colleague). Shown on the persistence error banner.'),
|
|
601
611
|
'cms.presence.inField': msg('{name} is in this field', 'EC-595 A2 thin presence: another session has this field focused. {name} is their name.'),
|
|
602
612
|
'cms.presence.inFieldMany': msg('{names} are in this field', 'EC-595 A2 thin presence: several sessions have this field focused. {names} is a comma-separated list of names.'),
|
|
603
613
|
'cms.presence.someone': msg('Someone', 'EC-595 A2 thin presence: the name of a present session that carries no name.'),
|
|
@@ -616,7 +626,8 @@ const MESSAGES = {
|
|
|
616
626
|
'cms.issueMessage.unknownAlias.other': msg('{count} documents are assigned the alias "{alias}", which is not a declared slot of "{collection}" ({declared}). Reassign to a valid slot.'),
|
|
617
627
|
'cms.issueMessage.duplicateAlias': msg('{count} documents share the alias "{alias}" in "{collection}". Each slot must be assigned to one document — reassign or clear the duplicates.'),
|
|
618
628
|
'cms.issueMessage.unfilledSlot': msg('The "{slot}" slot of "{collection}" has no document yet. Assign one so code that resolves "{slot}" finds it.'),
|
|
619
|
-
'cms.issueMessage.reservedFieldName': msg('Field name "{field}" is reserved (the self-describing node discriminator).'),
|
|
629
|
+
'cms.issueMessage.reservedFieldName': msg('Field name "{field}" is reserved (the self-describing node discriminator): a field named "{field}" may only be a select whose options exclude the engine\'s node types (reference, asset, block, elytra/*), and this one is a "{kind}" field.', 'EC-654: {kind} is a field type identifier (text, object, …); the parenthesised list is code — keep it untranslated.'),
|
|
630
|
+
'cms.issueMessage.reservedFieldTypeOption': msg('Select field "{field}" lists the option "{option}", an engine node type — a "{field}" of "{option}" would read as an engine node (reference, asset, block, elytra/*). Rename the option.', 'EC-654: {option} is the option value as declared; the parenthesised list is code — keep it untranslated.'),
|
|
620
631
|
'cms.issueMessage.duplicateSelectOption': msg('Duplicate select option "{option}" on field "{field}".'),
|
|
621
632
|
'cms.issueMessage.duplicateObjectField': msg('Duplicate field "{field}" in object field "{parent}".'),
|
|
622
633
|
'cms.issueMessage.assetCollectionSingleton': msg('Asset collection "{collection}" cannot be a singleton.'),
|
|
@@ -867,6 +878,8 @@ const MESSAGES = {
|
|
|
867
878
|
'assets.viewToggle.grid': msg('Grid view'),
|
|
868
879
|
'assets.detail.metadataHeading': msg('Metadata'),
|
|
869
880
|
'assets.detail.noFileUrl': msg('This asset has no file to serve — it renders as an empty image everywhere it is used. Replace the file.'),
|
|
881
|
+
'assets.detail.metaDriftNotLocalized': msg('Old translations are stored for {fields}, but the field is no longer translatable — every page shows its shared value. Saving the field removes them.', 'EC-659: {fields} lists field names with the locales holding an old translation, e.g. “alt (de, fr)”.'),
|
|
882
|
+
'assets.detail.metaDriftUndeclared': msg('Translated values are stored for {fields}, which this asset collection does not declare — they are not used anywhere.', 'EC-659: {fields} lists stored field names with their locales, e.g. “caption (de)”.'),
|
|
870
883
|
'assets.references.buttonLabel': msg('References'),
|
|
871
884
|
'assets.references.title': msg('Used by — {name}'),
|
|
872
885
|
'assets.references.description': msg('Everything referencing this asset, with deep links to the exact field or node.'),
|