@phtngyn/cms 0.1.0-beta.2 → 0.1.0-beta.3

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 (77) hide show
  1. package/README.md +52 -35
  2. package/bin/cms.mjs +2 -0
  3. package/package.json +5 -5
  4. package/src/{Configuration-CA_jvQKG.js → Configuration-CDMYfTre.js} +3 -3
  5. package/src/{Configuration-CA_jvQKG.js.map → Configuration-CDMYfTre.js.map} +1 -1
  6. package/src/Configuration.d.ts +60 -2
  7. package/src/Configuration.js.map +1 -1
  8. package/src/ContentTransfer-C3Av9sWz.js +53 -0
  9. package/src/ContentTransfer-C3Av9sWz.js.map +1 -0
  10. package/src/{DocumentEngine-CgiBQU4g.js → DocumentEngine-J7g-emdf.js} +4 -4
  11. package/src/{DocumentEngine-CgiBQU4g.js.map → DocumentEngine-J7g-emdf.js.map} +1 -1
  12. package/src/DocumentModel.d.ts +33 -2
  13. package/src/{Forms-DxbkU3_5.js → Forms-Dj6NuW66.js} +2 -2
  14. package/src/{Forms-DxbkU3_5.js.map → Forms-Dj6NuW66.js.map} +1 -1
  15. package/src/Forms.d.ts +17 -1
  16. package/src/Forms.js.map +1 -1
  17. package/src/I18n.d.ts +20 -2
  18. package/src/Module.js +2 -3
  19. package/src/Module.js.map +1 -1
  20. package/src/{S3MediaObjects-JKMAWyVB.js → S3MediaObjects-CpPSzJto.js} +219 -106
  21. package/src/S3MediaObjects-CpPSzJto.js.map +1 -0
  22. package/src/cli/content.js +258 -0
  23. package/src/cli/content.js.map +1 -0
  24. package/src/cli.js +71 -0
  25. package/src/cli.js.map +1 -0
  26. package/src/{connection-B-iz0Y9Y.js → connection-CBAy2qGy.js} +2 -2
  27. package/src/{connection-B-iz0Y9Y.js.map → connection-CBAy2qGy.js.map} +1 -1
  28. package/src/{installation-DgF2M1gL.js → installation-CNfIriVm.js} +21 -23
  29. package/src/installation-CNfIriVm.js.map +1 -0
  30. package/src/internal/authoring-catalog.js +2 -2
  31. package/src/internal/authoring-metadata.js +1 -1
  32. package/src/internal/configuration.js +6 -10
  33. package/src/internal/configuration.js.map +1 -1
  34. package/src/internal/document-model.js +7 -4
  35. package/src/internal/document-model.js.map +1 -1
  36. package/src/{location-CFKTeK1K.js → location-BTqdfIzX.js} +2 -2
  37. package/src/{location-CFKTeK1K.js.map → location-BTqdfIzX.js.map} +1 -1
  38. package/src/{models-BWm1pTAf.js → models-B4IoTmp7.js} +2 -2
  39. package/src/{models-BWm1pTAf.js.map → models-B4IoTmp7.js.map} +1 -1
  40. package/src/{models-DwYioyNV.js → models-Bah5B3bT.js} +4 -21
  41. package/src/models-Bah5B3bT.js.map +1 -0
  42. package/src/runtime/delivery/context.js +1 -1
  43. package/src/runtime/delivery/plugin.js +9 -3
  44. package/src/runtime/delivery/plugin.js.map +1 -1
  45. package/src/runtime/delivery/useCmsDocumentSeo.d.ts +3 -0
  46. package/src/runtime/delivery/useCmsDocumentSeo.js +3 -1
  47. package/src/runtime/delivery/useCmsDocumentSeo.js.map +1 -1
  48. package/src/runtime/forms/document.js +1 -1
  49. package/src/runtime/forms/useCmsForm.js +43 -2
  50. package/src/runtime/forms/useCmsForm.js.map +1 -1
  51. package/src/runtime/i18n/translator.js +31 -2
  52. package/src/runtime/i18n/translator.js.map +1 -1
  53. package/src/runtime/i18n/useCmsI18n.d.ts +3 -1
  54. package/src/runtime/i18n/useCmsI18n.js +9 -1
  55. package/src/runtime/i18n/useCmsI18n.js.map +1 -1
  56. package/src/runtime/installation.js +1 -1
  57. package/src/runtime/plugin.js +3 -3
  58. package/src/runtime/plugin.js.map +1 -1
  59. package/src/runtime/preview/connection.js +1 -1
  60. package/src/runtime/preview/controller.js +2 -2
  61. package/src/runtime/preview/plugin.client.js +3 -3
  62. package/src/runtime/preview/store.js +1 -1
  63. package/src/runtime/sitemap.js +1 -1
  64. package/src/{store-DjJs3I7k.js → store-b2CSXgMt.js} +3 -3
  65. package/src/{store-DjJs3I7k.js.map → store-b2CSXgMt.js.map} +1 -1
  66. package/studio/{CreateDocumentDialog-CTeIFlPb.js → CreateDocumentDialog-GGey1uBc.js} +1 -1
  67. package/studio/{documentPlanning-Bfv-d7OU.js → documentPlanning-DRErYmBU.js} +1490 -1450
  68. package/studio/host.js +2 -2
  69. package/src/Configuration-Br7tE9Qt.d.ts +0 -68
  70. package/src/DocumentModel-BB9igGC7.d.ts +0 -34
  71. package/src/I18n-DZK4CkJF.d.ts +0 -21
  72. package/src/S3MediaObjects-JKMAWyVB.js.map +0 -1
  73. package/src/Seed.d.ts +0 -6
  74. package/src/Seed.js +0 -34
  75. package/src/Seed.js.map +0 -1
  76. package/src/installation-DgF2M1gL.js.map +0 -1
  77. package/src/models-DwYioyNV.js.map +0 -1
package/README.md CHANGED
@@ -30,7 +30,7 @@ Create `cms.config.ts` beside `nuxt.config.ts`:
30
30
 
31
31
  ```ts
32
32
  import { defineCmsConfig } from '@phtngyn/cms/Configuration'
33
- import { Schema } from 'effect'
33
+ import { pageSchema } from './page.schema'
34
34
 
35
35
  function env(name: string): string {
36
36
  const value = process.env[name]
@@ -48,7 +48,7 @@ export default defineCmsConfig({
48
48
  pages: {
49
49
  label: 'Page',
50
50
  route: '/:path*',
51
- schema: Schema.Struct({ title: Schema.NonEmptyString }),
51
+ schema: pageSchema,
52
52
  source: '.',
53
53
  },
54
54
  },
@@ -74,6 +74,25 @@ These environment variable names are examples; configuration is executable TypeS
74
74
 
75
75
  For storage using the AWS credential chain, omit `credentials`. To create a missing bucket automatically, set `provisionBucket: true` and grant bucket-creation permission. Set `media: false` to start without uploads.
76
76
 
77
+ ## Content CLI
78
+
79
+ The installed package provides a `cms` command for importing a plain Markdown folder, exporting Studio-authored Markdown, and moving content between running CMS installations. Create the first administrator in Studio, then sign in to the CLI with that administrator's email and password. The CLI prompts for the site URL, administrator email, and password when they are missing. For noninteractive use, set `CMS_URL`, `CMS_EMAIL`, and `CMS_PASSWORD`; `--url` and `--email` can replace the first two variables. Use HTTPS outside localhost.
80
+
81
+ ```sh
82
+ CMS_URL=https://source.example.com CMS_EMAIL=admin@example.com cms content export ./content
83
+ CMS_URL=https://target.example.com CMS_EMAIL=admin@example.com cms content diff ./content
84
+ CMS_URL=https://target.example.com CMS_EMAIL=admin@example.com cms content plan ./content
85
+ CMS_URL=https://target.example.com CMS_EMAIL=admin@example.com cms content apply ./content
86
+ CMS_URL=https://target.example.com CMS_EMAIL=admin@example.com cms content plan ./seed --publish
87
+ CMS_URL=https://target.example.com CMS_EMAIL=admin@example.com cms content apply ./seed --publish
88
+ ```
89
+
90
+ Export writes each authored source at its CMS path and a `.cms-content.json` index with content hashes and the exact-revision publication state. Commit both to Git to review changes. Export refuses to replace locally edited Markdown or index entries. It does not delete files that disappeared from the CMS; remove stale files and index entries yourself after review. `diff` compares local Markdown and publication state with the current target and reports target-only documents. `plan` validates the whole incoming set and lists creates, updates, publications, and conflicts without writing. `apply` plans again, then commits the batch atomically against the generation it just inspected. Run `plan` and `diff` before applying, especially when targeting another environment.
91
+
92
+ For a folder without `.cms-content.json`, the CLI reads nested `.md` and `.mdc` files and uses folder-relative document paths. These sources are eligible for publication with `--publish`. Imports create drafts by default. Existing content with different Markdown is a conflict until you pass `--overwrite` to `plan` and `apply`. For an exported folder, `--publish` publishes only index entries marked `published: true`; without it, they remain drafts on the target. A newly imported draft does not unpublish an older target revision. The CLI does not delete target documents or move a target-only document. A concurrent change after planning causes `apply` to fail; review and retry.
93
+
94
+ The command tree is intentionally shared: future CMS operations can be added beside `content` without separate executables.
95
+
77
96
  ## Search and sharing
78
97
 
79
98
  The module installs the focused Nuxt robots, sitemap, schema.org, and SEO utility modules. Published CMS pages receive canonical, robots, social-sharing, and structured-data metadata automatically. The sitemap contains only published, indexable documents and uses their publication revision time for `lastmod`; localized variants are emitted as alternatives when they share a document key.
@@ -109,7 +128,25 @@ Keep raw robots directives and Nuxt module configuration in application code. Th
109
128
 
110
129
  ## Collection schemas
111
130
 
112
- Effect schemas work directly. The CMS derives Studio inputs from their encoded structure and runs the original decoder when validating documents, preserving defaults, transformations, and asynchronous validation. Decoders must not require external Effect services, and their output must be a JSON-compatible object.
131
+ Collections use **Standard Schema V1** for validation and **Standard JSON Schema V1** for the input structure Studio renders. This lets you keep your chosen validation library. Both contracts must be available on the collection schema; Standard Schema validation alone cannot describe controls. Studio requests draft 2020-12 JSON Schema input, resolves non-recursive local references, and runs the original validator when validating documents.
132
+
133
+ For a validator that already implements both standards, pass it directly as `schema`. Otherwise, adapt its validator and input/output JSON Schema converters:
134
+
135
+ ```ts
136
+ const pageSchema = {
137
+ '~standard': {
138
+ ...validator['~standard'],
139
+ jsonSchema: {
140
+ input: () => inputJsonSchema,
141
+ output: () => outputJsonSchema,
142
+ },
143
+ },
144
+ }
145
+ ```
146
+
147
+ Supply actual draft 2020-12 schemas from the chosen library, using its input and output conversion modes respectively. Studio reads the input structure; the validator remains responsible for execution. A missing input converter produces a configuration error naming Standard JSON Schema V1. Foreign schemas use JSON Schema `title`, `description`, `default`, and `x-cms-input` for presentation.
148
+
149
+ Effect schemas are also accepted directly. The CMS derives Studio inputs from their encoded structure and runs the original decoder, preserving defaults, transformations, and asynchronous validation. Decoders must not require external Effect services, and their output must be a JSON-compatible object.
113
150
 
114
151
  ```ts
115
152
  import { Effect, Schema } from 'effect'
@@ -126,24 +163,6 @@ const pageSchema = Schema.Struct({
126
163
 
127
164
  Use `Schema.optionalKey` for optional fields and `Schema.Finite` for numeric fields. An encoded `default` annotation supplies Studio's initial value; `Schema.withDecodingDefaultKey` applies that default during validation. `CalendarDate` validates calendar dates stored as `YYYY-MM-DD` strings. `field` adds presentation annotations to the encoded side of an Effect schema.
128
165
 
129
- Other libraries are supported through a schema implementing **both Standard Schema V1 and Standard JSON Schema V1**. Standard Schema supplies validation and typed output; Standard JSON Schema's `jsonSchema.input({ target: 'draft-2020-12' })` supplies the editor structure. A library that only implements validation needs an adapter adding JSON Schema conversion; Standard Schema alone cannot generate a form.
130
-
131
- For example, an existing Standard Schema validator can be adapted with its library's JSON Schema converters:
132
-
133
- ```ts
134
- const collectionSchema = {
135
- '~standard': {
136
- ...validator['~standard'],
137
- jsonSchema: {
138
- input: () => inputJsonSchema,
139
- output: () => outputJsonSchema,
140
- },
141
- },
142
- }
143
- ```
144
-
145
- Supply actual draft 2020-12 schemas from the chosen library, using its input and output conversion modes respectively. Foreign schemas use JSON Schema `title`, `description`, `default`, and `x-cms-input` for presentation. The CMS reads only the input structure and retains the original validator for execution.
146
-
147
166
  Studio supports strings, calendar dates, finite numbers, booleans, string arrays, choices, and nested objects. Non-recursive local references are resolved. Ambiguous unions, structural intersections, recursive schemas, and unsupported field shapes fail configuration rather than producing incomplete forms.
148
167
 
149
168
  ## Start editing
@@ -165,12 +184,7 @@ Draft delivery requires the current Studio session and document access permissio
165
184
  - Define collections with Effect Schema in `documents.collections`. Import `field` from `@phtngyn/cms/DocumentModel` to add field labels and input hints.
166
185
  - Use the auto-imported `useDocument` and `useDocumentQuery` composables and `DocumentRenderer`, `DocumentScope`, and `DocumentField` components for custom rendering.
167
186
  - Import `defineCmsBlock` from `@phtngyn/cms/Authoring` to declare editable props and slots in your Nuxt Vue components.
168
- - Optionally provide `initialSources` to import Markdown documents once when the installation is first claimed.
169
-
170
- For a folder of published Markdown files, import `seedFromDirectory` from `@phtngyn/cms/Seed` and set
171
- `initialSources: seedFromDirectory(new URL('./seed/', import.meta.url))` in `cms.config.ts`.
172
- The folder is read when Nuxt loads the configuration. Paths within it become document source paths;
173
- for example, `seed/en/index.md` becomes `en/index.md`. Files are published on the first claim.
187
+ - Import Markdown folders with `cms content plan` and `cms content apply` after creating the first administrator.
174
188
 
175
189
  ## Studio and authoring during development
176
190
 
@@ -208,6 +222,8 @@ String props can declare `input: 'image'` or `input: 'link'`. Studio uses the ex
208
222
 
209
223
  Slots with `input: 'blocks'` accept nested components. Optional `blocks` and `groups` selectors restrict direct children; omitting both permits all collection-allowed blocks. Collection permissions apply at every depth. Studio offers insertion, selection, deletion and sibling reordering inside each region. Existing content is retained when a schema change makes it invalid.
210
224
 
225
+ For repeatable cards or chapters with formatted copy, give the parent a blocks slot restricted to an item block. Declare the item's title, icon, link, and layout choices as props, and its copy as a `rich-text` slot. Studio keeps each child block's identity and order, so the item needs no separate `id` prop. The [example section](../../examples/nuxt/app/components/documents/ContentSection.vue) hosts repeatable [cards](../../examples/nuxt/app/components/documents/ContentCard.vue); the English and German homepages show their Markdown source.
226
+
211
227
  Use object props for structured data and slots for composed content:
212
228
 
213
229
  ```ts
@@ -235,8 +251,6 @@ Every list item needs a required `id: string` in its Vue type. Studio generates
235
251
 
236
252
  Collaboration merges object fields and list-item fields independently. List ordering is separate from item values; simultaneous insertions at the same position retain both items in deterministic identity order. Removing an item takes precedence over concurrent edits to it. Competing edits to the same field use Yjs conflict resolution. Authoring schemas and controls update through the existing HMR path without reseeding content.
237
253
 
238
- See the example's `ContentSection.vue` for a complete component-local declaration with images, links, layout settings, repeatable features and nested blocks.
239
-
240
254
  ## Headless forms
241
255
 
242
256
  Register a form under the kebab-case name of your Nuxt Vue renderer. `defineCmsForm` is a normal TypeScript helper, not a compiler macro. It declares the question types and validation rules editors may use:
@@ -283,6 +297,7 @@ const {
283
297
  isSuccess,
284
298
  isPreview,
285
299
  error,
300
+ fieldState,
286
301
  next,
287
302
  previous,
288
303
  validate,
@@ -291,7 +306,9 @@ const {
291
306
  } = useCmsForm(() => props.definition)
292
307
  ```
293
308
 
294
- The composable accepts a value, ref, or getter and returns destructurable refs and functions. Bind controls to `values[field.id]`. Number answers must be numbers or null, checkbox answers booleans, and other answers strings. Empty optional answers reach the server handler as null; a required checkbox must be checked. `next()` validates the current step, `previous()` preserves answers, and `submit()` validates every step and returns whether submission succeeded. Validation errors are keyed by question ID; `_form` holds a form-wide error. Render accessible labels, error announcements, progress, and focus behavior in your application.
309
+ The composable accepts a value, ref, or getter and returns destructurable refs and functions. Use `fieldState(field)` for each visible question. It returns the current `value`, `error`, normalized `setValue(input)`, and `inputAttrs` with an ID, name, required state, and ARIA error/help references. Render help with `id=state.helpId` and errors with `id=state.errorId` so those references have matching elements. For example, a native control can use `v-bind="state.inputAttrs"`, `:value="state.value"`, and `@input="state.setValue($event.target.value)"`. Checkbox controls should pass their checked boolean. Valid number answers become numbers, empty answers become null, and invalid number text remains visible to validation. Empty optional answers reach the server handler as null. `values` and `errors` remain available for custom renderers; `_form` holds a form-wide error. Render accessible labels, error announcements, progress, and focus behavior in your application.
310
+
311
+ `next()` validates the current step, `previous()` preserves answers, and `submit()` validates every step and returns whether submission succeeded. A required checkbox must be checked.
295
312
 
296
313
  Definition replacements preserve answers for matching IDs and field types within the same form, clear validation state, and cancel pending client requests. `reset()` clears answers and submission state. The composable prevents overlapping submissions and repeat submission after success until reset. Scope disposal cancels client work. Cancellation cannot undo a server handler that has already started. An optional `submit(payload, signal)` transport override supports advanced integrations; it must return `CmsFormResult` and preserve server-side validation.
297
314
 
@@ -322,18 +339,18 @@ i18n: {
322
339
  },
323
340
  ```
324
341
 
325
- Locale codes also define the first directory of document source paths: `en/index.md` serves `/`, and `de/index.md` serves `/de`. Collection source matching starts after that directory. Markdown contains the editor-authored language already; it needs no translation key. Markdown and source paths remain stored in document revisions, with collaborative working edits checkpointed into Markdown. Seed files import once; changing them does not synchronize an existing database.
342
+ Locale codes also define the first directory of document source paths: `en/index.md` serves `/`, and `de/index.md` serves `/de`. Collection source matching starts after that directory. Markdown contains the editor-authored language already; it needs no translation key. Markdown and source paths remain stored in document revisions, with collaborative working edits checkpointed into Markdown. Import a Markdown folder with the admin CLI; subsequent changes require another plan and apply, with `--overwrite` for different Markdown.
326
343
 
327
344
  Use the auto-imported composable in website components:
328
345
 
329
346
  ```ts
330
- const { t, locale } = useCmsI18n()
331
- const navigation = computed(() => [{ label: t('navigation.home'), to: locale.value === 'de' ? '/de' : '/' }])
347
+ const { t, locale, localePath, switchLocalePath } = useCmsI18n()
348
+ const navigation = computed(() => [{ label: t('navigation.home'), to: localePath('/') }])
349
+ const germanVersion = computed(() => switchLocalePath('de'))
332
350
  t('footer.copyright', { year: 2026 })
333
- useHead({ htmlAttrs: { lang: locale } })
334
351
  ```
335
352
 
336
- `locale` is a read-only computed value derived from the current URL, including in Studio's website preview. Switch languages by navigating to a localized URL. For documents with different authored slugs, supply their actual destinations. Lists can explicitly pass `locale.value` to `useDocumentQuery`.
353
+ `locale` is a read-only computed value derived from the current URL, including in Studio's website preview. `localePath(path, code?)` builds a path using the configured locale prefix policy; the code defaults to the current locale. `switchLocalePath(code)` changes the current URL's prefix while preserving its query and fragment. For documents with different authored slugs, pass the destination's unprefixed path as the second argument: `switchLocalePath('de', '/ueber-uns')`. The CMS does not infer relationships between different slugs. The Nuxt module sets the document's HTML `lang` automatically. Lists can explicitly pass `locale.value` to `useDocumentQuery`.
337
354
 
338
355
  Message keys receive generated TypeScript completion. Dictionaries contain nested plain strings; dots are reserved for key paths. Named `{parameters}` accept strings and numbers; missing parameters remain visible. Messages fall back from the URL locale to `fallbackLocale`, then to the key. Omit `fallbackLocale` (or set it to `null`) to disable fallback. The same explicit fallback policy applies to document lookup. Development warns about missing requested-locale messages. Render messages as text, and use native `Intl` for date and number formatting.
339
356
 
package/bin/cms.mjs ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import '../src/cli.js'
package/package.json CHANGED
@@ -1,5 +1,8 @@
1
1
  {
2
2
  "author": "Phat (phtngyn)",
3
+ "bin": {
4
+ "cms": "./bin/cms.mjs"
5
+ },
3
6
  "description": "A Nuxt CMS with an embedded Studio, collaborative editing, PostgreSQL, and S3-compatible media storage.",
4
7
  "homepage": "https://github.com/phtngyn/cms",
5
8
  "keywords": [
@@ -14,9 +17,10 @@
14
17
  "directory": "packages/nuxt"
15
18
  },
16
19
  "name": "@phtngyn/cms",
17
- "version": "0.1.0-beta.2",
20
+ "version": "0.1.0-beta.3",
18
21
  "type": "module",
19
22
  "files": [
23
+ "bin",
20
24
  "studio",
21
25
  "src",
22
26
  "README.md",
@@ -39,10 +43,6 @@
39
43
  "types": "./src/DocumentModel.d.ts",
40
44
  "import": "./src/DocumentModel.js"
41
45
  },
42
- "./Seed": {
43
- "types": "./src/Seed.d.ts",
44
- "import": "./src/Seed.js"
45
- },
46
46
  "./I18n": {
47
47
  "types": "./src/I18n.d.ts",
48
48
  "import": "./src/I18n.js"
@@ -1,6 +1,6 @@
1
1
  import { r as FormCapabilities } from "./Forms-CfcI3tPU.js";
2
- import { c as resolveCmsComarkAttributes, d as createCmsComarkRenderData, l as withCmsComarkProps, r as formStructureIssues, s as projectCmsEditorComponentAttributes } from "./Forms-DxbkU3_5.js";
3
- import { C as MarkdownNode, Dt as Locale, Et as CollectionName, Ot as SourceDirectory, Tt as AddressPattern, n as CmsMarkdownDocument } from "./models-DwYioyNV.js";
2
+ import { c as resolveCmsComarkAttributes, d as createCmsComarkRenderData, l as withCmsComarkProps, r as formStructureIssues, s as projectCmsEditorComponentAttributes } from "./Forms-Dj6NuW66.js";
3
+ import { Ct as CollectionName, St as AddressPattern, Tt as SourceDirectory, b as MarkdownNode, n as CmsMarkdownDocument, wt as Locale } from "./models-Bah5B3bT.js";
4
4
  import { a as createEditorNodeId, n as editorMetadata, o as editorNodeId } from "./metadata-BEZPWh-3.js";
5
5
  import { Effect, Option, Predicate, Schema } from "effect";
6
6
  import { Extension } from "@tiptap/core";
@@ -1030,4 +1030,4 @@ const MediaConfiguration = Schema.Struct({
1030
1030
 
1031
1031
  //#endregion
1032
1032
  export { finiteNumberAttribute as C, compactJsonAttributes as S, comarkTagForEditorMark as _, BlockAuthoring as a, encodeEditorImageAttributes as b, parseAuthoringContent as c, EditorRenderFailed as d, DOCUMENT_ENGINE_FINGERPRINT as f, EDITOR_MARK_TYPES as g, comarkToEditor as h, MediaConfiguration as i, validateCollectionBody as l, SOURCE_MAPPINGS_META_KEY as m, ComponentDefinition as n, createAuthoringDocumentValidator as o, createDocumentParser as p, DocumentConfiguration as r, createAuthoringSchema as s, AuthoringCatalog as t, EditorDocumentInvalid as u, isEditorMark as v, nonEmptyStringAttribute as w, normalizeEditorImageLayout as x, EDITOR_IMAGE_LAYOUT_ATTRIBUTE as y };
1033
- //# sourceMappingURL=Configuration-CA_jvQKG.js.map
1033
+ //# sourceMappingURL=Configuration-CDMYfTre.js.map