nebula-cms 0.1.3 → 0.1.5
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/README.md +3 -1
- package/dist/astro/index.d.ts +43 -0
- package/dist/astro/index.d.ts.map +1 -0
- package/dist/astro/index.js +223 -0
- package/{src → dist}/client/Admin.svelte +20 -11
- package/dist/client/Admin.svelte.d.ts +11 -0
- package/dist/client/Admin.svelte.d.ts.map +1 -0
- package/dist/client/components/BackendPicker.svelte.d.ts +4 -0
- package/dist/client/components/BackendPicker.svelte.d.ts.map +1 -0
- package/dist/client/components/DraftChip.svelte.d.ts +10 -0
- package/dist/client/components/DraftChip.svelte.d.ts.map +1 -0
- package/dist/client/components/MetadataForm.svelte.d.ts +12 -0
- package/dist/client/components/MetadataForm.svelte.d.ts.map +1 -0
- package/dist/client/components/ThemeToggle.svelte.d.ts +19 -0
- package/dist/client/components/ThemeToggle.svelte.d.ts.map +1 -0
- package/dist/client/components/dialogs/DeleteDraftDialog.svelte.d.ts +11 -0
- package/dist/client/components/dialogs/DeleteDraftDialog.svelte.d.ts.map +1 -0
- package/{src → dist}/client/components/dialogs/FilenameDialog.svelte +1 -2
- package/dist/client/components/dialogs/FilenameDialog.svelte.d.ts +13 -0
- package/dist/client/components/dialogs/FilenameDialog.svelte.d.ts.map +1 -0
- package/dist/client/components/editor/EditorPane.svelte.d.ts +4 -0
- package/dist/client/components/editor/EditorPane.svelte.d.ts.map +1 -0
- package/dist/client/components/editor/EditorTabs.svelte.d.ts +8 -0
- package/dist/client/components/editor/EditorTabs.svelte.d.ts.map +1 -0
- package/dist/client/components/editor/EditorToolbar.svelte.d.ts +4 -0
- package/dist/client/components/editor/EditorToolbar.svelte.d.ts.map +1 -0
- package/dist/client/components/editor/FormatSelector.svelte.d.ts +4 -0
- package/dist/client/components/editor/FormatSelector.svelte.d.ts.map +1 -0
- package/dist/client/components/editor/Toolbar.svelte.d.ts +19 -0
- package/dist/client/components/editor/Toolbar.svelte.d.ts.map +1 -0
- package/dist/client/components/fields/ArrayField.svelte.d.ts +15 -0
- package/dist/client/components/fields/ArrayField.svelte.d.ts.map +1 -0
- package/dist/client/components/fields/ArrayItem.svelte.d.ts +28 -0
- package/dist/client/components/fields/ArrayItem.svelte.d.ts.map +1 -0
- package/dist/client/components/fields/BooleanField.svelte.d.ts +16 -0
- package/dist/client/components/fields/BooleanField.svelte.d.ts.map +1 -0
- package/dist/client/components/fields/DateField.svelte.d.ts +16 -0
- package/dist/client/components/fields/DateField.svelte.d.ts.map +1 -0
- package/dist/client/components/fields/EnumField.svelte.d.ts +17 -0
- package/dist/client/components/fields/EnumField.svelte.d.ts.map +1 -0
- package/dist/client/components/fields/FieldWrapper.svelte.d.ts +18 -0
- package/dist/client/components/fields/FieldWrapper.svelte.d.ts.map +1 -0
- package/dist/client/components/fields/NumberField.svelte.d.ts +16 -0
- package/dist/client/components/fields/NumberField.svelte.d.ts.map +1 -0
- package/dist/client/components/fields/ObjectField.svelte.d.ts +16 -0
- package/dist/client/components/fields/ObjectField.svelte.d.ts.map +1 -0
- package/dist/client/components/fields/SchemaField.svelte.d.ts +16 -0
- package/dist/client/components/fields/SchemaField.svelte.d.ts.map +1 -0
- package/dist/client/components/fields/StringField.svelte.d.ts +16 -0
- package/dist/client/components/fields/StringField.svelte.d.ts.map +1 -0
- package/{src → dist}/client/components/sidebar/AdminSidebar.svelte +2 -4
- package/dist/client/components/sidebar/AdminSidebar.svelte.d.ts +19 -0
- package/dist/client/components/sidebar/AdminSidebar.svelte.d.ts.map +1 -0
- package/dist/client/components/sidebar/AdminSidebarSort.svelte.d.ts +12 -0
- package/dist/client/components/sidebar/AdminSidebarSort.svelte.d.ts.map +1 -0
- package/dist/client/css/icons.css +29 -0
- package/dist/client/index.d.ts +2 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/js/drafts/merge.svelte.d.ts +24 -0
- package/dist/client/js/drafts/merge.svelte.d.ts.map +1 -0
- package/dist/client/js/drafts/merge.svelte.js +106 -0
- package/dist/client/js/drafts/ops.svelte.d.ts +31 -0
- package/dist/client/js/drafts/ops.svelte.d.ts.map +1 -0
- package/dist/client/js/drafts/ops.svelte.js +182 -0
- package/dist/client/js/drafts/storage.d.ts +45 -0
- package/dist/client/js/drafts/storage.d.ts.map +1 -0
- package/dist/client/js/drafts/storage.js +76 -0
- package/dist/client/js/drafts/workers/diff.d.ts +2 -0
- package/dist/client/js/drafts/workers/diff.d.ts.map +1 -0
- package/dist/client/js/drafts/workers/diff.js +20 -0
- package/dist/client/js/editor/editor.svelte.d.ts +124 -0
- package/dist/client/js/editor/editor.svelte.d.ts.map +1 -0
- package/dist/client/js/editor/editor.svelte.js +294 -0
- package/dist/client/js/editor/languages.d.ts +11 -0
- package/dist/client/js/editor/languages.d.ts.map +1 -0
- package/dist/client/js/editor/languages.js +93 -0
- package/dist/client/js/editor/link-wrap.d.ts +6 -0
- package/dist/client/js/editor/link-wrap.d.ts.map +1 -0
- package/{src/client/js/editor/link-wrap.ts → dist/client/js/editor/link-wrap.js} +17 -24
- package/dist/client/js/editor/markdown-shortcuts.d.ts +4 -0
- package/dist/client/js/editor/markdown-shortcuts.d.ts.map +1 -0
- package/dist/client/js/editor/markdown-shortcuts.js +219 -0
- package/dist/client/js/handlers/admin.d.ts +64 -0
- package/dist/client/js/handlers/admin.d.ts.map +1 -0
- package/dist/client/js/handlers/admin.js +186 -0
- package/dist/client/js/state/dialogs.svelte.d.ts +16 -0
- package/dist/client/js/state/dialogs.svelte.d.ts.map +1 -0
- package/dist/client/js/state/dialogs.svelte.js +28 -0
- package/dist/client/js/state/router.svelte.d.ts +44 -0
- package/dist/client/js/state/router.svelte.d.ts.map +1 -0
- package/dist/client/js/state/router.svelte.js +141 -0
- package/dist/client/js/state/schema.svelte.d.ts +51 -0
- package/dist/client/js/state/schema.svelte.d.ts.map +1 -0
- package/{src/client/js/state/schema.svelte.ts → dist/client/js/state/schema.svelte.js} +55 -70
- package/dist/client/js/state/state.svelte.d.ts +68 -0
- package/dist/client/js/state/state.svelte.d.ts.map +1 -0
- package/dist/client/js/state/state.svelte.js +300 -0
- package/dist/client/js/state/theme.svelte.d.ts +24 -0
- package/dist/client/js/state/theme.svelte.d.ts.map +1 -0
- package/{src/client/js/state/theme.svelte.ts → dist/client/js/state/theme.svelte.js} +54 -91
- package/dist/client/js/storage/adapter.d.ts +130 -0
- package/dist/client/js/storage/adapter.d.ts.map +1 -0
- package/dist/client/js/storage/adapter.js +5 -0
- package/dist/client/js/storage/client.d.ts +72 -0
- package/dist/client/js/storage/client.d.ts.map +1 -0
- package/dist/client/js/storage/client.js +121 -0
- package/dist/client/js/storage/db.d.ts +8 -0
- package/dist/client/js/storage/db.d.ts.map +1 -0
- package/dist/client/js/storage/db.js +35 -0
- package/dist/client/js/storage/fsa.d.ts +51 -0
- package/dist/client/js/storage/fsa.d.ts.map +1 -0
- package/dist/client/js/storage/fsa.js +91 -0
- package/dist/client/js/storage/github.d.ts +62 -0
- package/dist/client/js/storage/github.d.ts.map +1 -0
- package/dist/client/js/storage/github.js +216 -0
- package/dist/client/js/storage/storage.d.ts +32 -0
- package/dist/client/js/storage/storage.d.ts.map +1 -0
- package/dist/client/js/storage/storage.js +68 -0
- package/dist/client/js/storage/workers/frontmatter.d.ts +2 -0
- package/dist/client/js/storage/workers/frontmatter.d.ts.map +1 -0
- package/dist/client/js/storage/workers/frontmatter.js +253 -0
- package/dist/client/js/storage/workers/storage.d.ts +2 -0
- package/dist/client/js/storage/workers/storage.d.ts.map +1 -0
- package/dist/client/js/storage/workers/storage.js +167 -0
- package/dist/client/js/storage/workers/toml-parser.d.ts +2 -0
- package/dist/client/js/storage/workers/toml-parser.d.ts.map +1 -0
- package/dist/client/js/storage/workers/toml-parser.js +75 -0
- package/dist/client/js/storage/workers/yaml-parser.d.ts +2 -0
- package/dist/client/js/storage/workers/yaml-parser.d.ts.map +1 -0
- package/dist/client/js/storage/workers/yaml-parser.js +100 -0
- package/dist/client/js/utils/file-types.d.ts +58 -0
- package/dist/client/js/utils/file-types.d.ts.map +1 -0
- package/{src/client/js/utils/file-types.ts → dist/client/js/utils/file-types.js} +75 -107
- package/dist/client/js/utils/format.d.ts +8 -0
- package/dist/client/js/utils/format.d.ts.map +1 -0
- package/{src/client/js/utils/format.ts → dist/client/js/utils/format.js} +5 -6
- package/dist/client/js/utils/frontmatter.d.ts +12 -0
- package/dist/client/js/utils/frontmatter.d.ts.map +1 -0
- package/dist/client/js/utils/frontmatter.js +29 -0
- package/dist/client/js/utils/schema-utils.d.ts +110 -0
- package/dist/client/js/utils/schema-utils.d.ts.map +1 -0
- package/dist/client/js/utils/schema-utils.js +242 -0
- package/dist/client/js/utils/slug.d.ts +8 -0
- package/dist/client/js/utils/slug.d.ts.map +1 -0
- package/{src/client/js/utils/slug.ts → dist/client/js/utils/slug.js} +6 -7
- package/dist/client/js/utils/sort.d.ts +41 -0
- package/dist/client/js/utils/sort.d.ts.map +1 -0
- package/dist/client/js/utils/sort.js +65 -0
- package/dist/client/js/utils/stable-stringify.d.ts +8 -0
- package/dist/client/js/utils/stable-stringify.d.ts.map +1 -0
- package/dist/client/js/utils/stable-stringify.js +23 -0
- package/dist/client/js/utils/url-utils.d.ts +11 -0
- package/dist/client/js/utils/url-utils.d.ts.map +1 -0
- package/{src/client/js/utils/url-utils.ts → dist/client/js/utils/url-utils.js} +22 -23
- package/dist/client/types/browser-apis.d.ts +39 -0
- package/dist/types.d.ts +22 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +1 -0
- package/package.json +13 -3
- package/.github/workflows/ci.yml +0 -27
- package/.github/workflows/publish.yml +0 -34
- package/.mcp.json +0 -12
- package/.prettierignore +0 -5
- package/.prettierrc.cjs +0 -22
- package/AGENTS.md +0 -183
- package/playground/astro.config.mjs +0 -7
- package/playground/node_modules/.bin/astro +0 -21
- package/playground/node_modules/.vite/deps/@astrojs_svelte_client__js.js +0 -85
- package/playground/node_modules/.vite/deps/@astrojs_svelte_client__js.js.map +0 -7
- package/playground/node_modules/.vite/deps/_metadata.json +0 -184
- package/playground/node_modules/.vite/deps/astro___aria-query.js +0 -6776
- package/playground/node_modules/.vite/deps/astro___aria-query.js.map +0 -7
- package/playground/node_modules/.vite/deps/astro___axobject-query.js +0 -3754
- package/playground/node_modules/.vite/deps/astro___axobject-query.js.map +0 -7
- package/playground/node_modules/.vite/deps/astro___html-escaper.js +0 -34
- package/playground/node_modules/.vite/deps/astro___html-escaper.js.map +0 -7
- package/playground/node_modules/.vite/deps/chunk-AJXJMYAF.js +0 -0
- package/playground/node_modules/.vite/deps/chunk-AJXJMYAF.js.map +0 -7
- package/playground/node_modules/.vite/deps/chunk-BUSYA2B4.js +0 -8
- package/playground/node_modules/.vite/deps/chunk-BUSYA2B4.js.map +0 -7
- package/playground/node_modules/.vite/deps/chunk-CNYJBM5F.js +0 -21
- package/playground/node_modules/.vite/deps/chunk-CNYJBM5F.js.map +0 -7
- package/playground/node_modules/.vite/deps/chunk-DBPNBGEI.js +0 -223
- package/playground/node_modules/.vite/deps/chunk-DBPNBGEI.js.map +0 -7
- package/playground/node_modules/.vite/deps/chunk-FPEUJ7DG.js +0 -27
- package/playground/node_modules/.vite/deps/chunk-FPEUJ7DG.js.map +0 -7
- package/playground/node_modules/.vite/deps/chunk-MHDZ3SK7.js +0 -1005
- package/playground/node_modules/.vite/deps/chunk-MHDZ3SK7.js.map +0 -7
- package/playground/node_modules/.vite/deps/chunk-RBDTDTPY.js +0 -204
- package/playground/node_modules/.vite/deps/chunk-RBDTDTPY.js.map +0 -7
- package/playground/node_modules/.vite/deps/chunk-RJGEXL5C.js +0 -688
- package/playground/node_modules/.vite/deps/chunk-RJGEXL5C.js.map +0 -7
- package/playground/node_modules/.vite/deps/chunk-YL4MIWGJ.js +0 -5099
- package/playground/node_modules/.vite/deps/chunk-YL4MIWGJ.js.map +0 -7
- package/playground/node_modules/.vite/deps/chunk-ZOV3DWEJ.js +0 -4376
- package/playground/node_modules/.vite/deps/chunk-ZOV3DWEJ.js.map +0 -7
- package/playground/node_modules/.vite/deps/chunk-ZP4UNCSN.js +0 -23
- package/playground/node_modules/.vite/deps/chunk-ZP4UNCSN.js.map +0 -7
- package/playground/node_modules/.vite/deps/chunk-ZREFNRZZ.js +0 -148
- package/playground/node_modules/.vite/deps/chunk-ZREFNRZZ.js.map +0 -7
- package/playground/node_modules/.vite/deps/package.json +0 -3
- package/playground/node_modules/.vite/deps/smol-toml.js +0 -843
- package/playground/node_modules/.vite/deps/smol-toml.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte.js +0 -55
- package/playground/node_modules/.vite/deps/svelte.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte___clsx.js +0 -9
- package/playground/node_modules/.vite/deps/svelte___clsx.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte_animate.js +0 -57
- package/playground/node_modules/.vite/deps/svelte_animate.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte_attachments.js +0 -15
- package/playground/node_modules/.vite/deps/svelte_attachments.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte_easing.js +0 -67
- package/playground/node_modules/.vite/deps/svelte_easing.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte_events.js +0 -11
- package/playground/node_modules/.vite/deps/svelte_events.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte_internal.js +0 -5
- package/playground/node_modules/.vite/deps/svelte_internal.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte_internal_client.js +0 -402
- package/playground/node_modules/.vite/deps/svelte_internal_client.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte_internal_disclose-version.js +0 -10
- package/playground/node_modules/.vite/deps/svelte_internal_disclose-version.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte_internal_flags_async.js +0 -8
- package/playground/node_modules/.vite/deps/svelte_internal_flags_async.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte_internal_flags_legacy.js +0 -8
- package/playground/node_modules/.vite/deps/svelte_internal_flags_legacy.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte_internal_flags_tracing.js +0 -8
- package/playground/node_modules/.vite/deps/svelte_internal_flags_tracing.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte_legacy.js +0 -35
- package/playground/node_modules/.vite/deps/svelte_legacy.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte_motion.js +0 -545
- package/playground/node_modules/.vite/deps/svelte_motion.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte_reactivity.js +0 -29
- package/playground/node_modules/.vite/deps/svelte_reactivity.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte_reactivity_window.js +0 -127
- package/playground/node_modules/.vite/deps/svelte_reactivity_window.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte_store.js +0 -103
- package/playground/node_modules/.vite/deps/svelte_store.js.map +0 -7
- package/playground/node_modules/.vite/deps/svelte_transition.js +0 -208
- package/playground/node_modules/.vite/deps/svelte_transition.js.map +0 -7
- package/playground/package.json +0 -16
- package/playground/pnpm-lock.yaml +0 -3167
- package/playground/src/content/authors/jane-doe.json +0 -8
- package/playground/src/content/config/build.toml +0 -2
- package/playground/src/content/courses/web-fundamentals.json +0 -29
- package/playground/src/content/docs/advanced.mdx +0 -6
- package/playground/src/content/docs/intro.md +0 -6
- package/playground/src/content/guides/getting-started.mdx +0 -6
- package/playground/src/content/posts/hello-world.md +0 -7
- package/playground/src/content/products/t-shirt.json +0 -16
- package/playground/src/content/recipes/pancakes.mdoc +0 -8
- package/playground/src/content/settings/site.yml +0 -2
- package/playground/src/content.config.ts +0 -198
- package/playground/src/env.d.ts +0 -1
- package/playground/src/pages/index.astro +0 -11
- package/playground/src/pages/nebula.astro +0 -14
- package/pnpm-workspace.yaml +0 -2
- package/scripts/subset-icons.mjs +0 -178
- package/src/astro/index.ts +0 -295
- package/src/client/js/drafts/merge.svelte.ts +0 -121
- package/src/client/js/drafts/ops.svelte.ts +0 -227
- package/src/client/js/drafts/storage.ts +0 -108
- package/src/client/js/drafts/workers/diff.ts +0 -40
- package/src/client/js/editor/editor.svelte.ts +0 -343
- package/src/client/js/editor/languages.ts +0 -98
- package/src/client/js/editor/markdown-shortcuts.ts +0 -261
- package/src/client/js/handlers/admin.ts +0 -246
- package/src/client/js/state/dialogs.svelte.ts +0 -35
- package/src/client/js/state/router.svelte.ts +0 -156
- package/src/client/js/state/state.svelte.ts +0 -334
- package/src/client/js/storage/adapter.ts +0 -102
- package/src/client/js/storage/client.ts +0 -150
- package/src/client/js/storage/db.ts +0 -36
- package/src/client/js/storage/fsa.ts +0 -110
- package/src/client/js/storage/github.ts +0 -297
- package/src/client/js/storage/storage.ts +0 -83
- package/src/client/js/storage/workers/frontmatter.ts +0 -320
- package/src/client/js/storage/workers/storage.ts +0 -177
- package/src/client/js/storage/workers/toml-parser.ts +0 -106
- package/src/client/js/storage/workers/yaml-parser.ts +0 -132
- package/src/client/js/utils/frontmatter.ts +0 -38
- package/src/client/js/utils/schema-utils.ts +0 -295
- package/src/client/js/utils/sort.ts +0 -84
- package/src/client/js/utils/stable-stringify.ts +0 -27
- package/src/types.ts +0 -25
- package/svelte.config.js +0 -4
- package/tests/astro/build.test.ts +0 -63
- package/tests/astro/index.test.ts +0 -689
- package/tests/client/components/Admin.test.ts +0 -446
- package/tests/client/components/BackendPicker.test.ts +0 -239
- package/tests/client/components/DraftChip.test.ts +0 -53
- package/tests/client/components/MetadataForm.test.ts +0 -164
- package/tests/client/components/dialogs/DeleteDraftDialog.test.ts +0 -91
- package/tests/client/components/dialogs/FilenameDialog.test.ts +0 -209
- package/tests/client/components/dialogs/dialog-stubs.ts +0 -19
- package/tests/client/components/editor/EditorPane.test.ts +0 -100
- package/tests/client/components/editor/EditorTabs.test.ts +0 -253
- package/tests/client/components/editor/EditorToolbar.test.ts +0 -252
- package/tests/client/components/editor/fixtures.ts +0 -31
- package/tests/client/components/fields/ArrayField.test.ts +0 -197
- package/tests/client/components/fields/BooleanField.test.ts +0 -206
- package/tests/client/components/fields/DateField.test.ts +0 -210
- package/tests/client/components/fields/EnumField.test.ts +0 -246
- package/tests/client/components/fields/NumberField.test.ts +0 -240
- package/tests/client/components/fields/ObjectField.test.ts +0 -157
- package/tests/client/components/fields/SchemaField.test.ts +0 -190
- package/tests/client/components/fields/StringField.test.ts +0 -223
- package/tests/client/components/sidebar/AdminSidebar.test.ts +0 -285
- package/tests/client/components/sidebar/AdminSidebarSort.test.ts +0 -135
- package/tests/client/components/sidebar/sort-mock.ts +0 -23
- package/tests/client/js/drafts/fixtures.ts +0 -22
- package/tests/client/js/drafts/merge.test.ts +0 -282
- package/tests/client/js/drafts/ops.test.ts +0 -658
- package/tests/client/js/drafts/storage.test.ts +0 -200
- package/tests/client/js/drafts/workers/diff.test.ts +0 -165
- package/tests/client/js/editor/editor.test.ts +0 -616
- package/tests/client/js/editor/link-wrap.test.ts +0 -225
- package/tests/client/js/editor/markdown-shortcuts.test.ts +0 -370
- package/tests/client/js/handlers/admin.test.ts +0 -467
- package/tests/client/js/state/router.test.ts +0 -619
- package/tests/client/js/state/schema.test.ts +0 -266
- package/tests/client/js/state/state.test.ts +0 -328
- package/tests/client/js/storage/adapter.test.ts +0 -115
- package/tests/client/js/storage/client.test.ts +0 -250
- package/tests/client/js/storage/db.test.ts +0 -59
- package/tests/client/js/storage/fsa.test.ts +0 -284
- package/tests/client/js/storage/github.test.ts +0 -349
- package/tests/client/js/storage/mock-port.ts +0 -95
- package/tests/client/js/storage/storage.test.ts +0 -77
- package/tests/client/js/storage/workers/frontmatter.test.ts +0 -479
- package/tests/client/js/storage/workers/storage.test.ts +0 -299
- package/tests/client/js/storage/workers/toml-parser.test.ts +0 -169
- package/tests/client/js/storage/workers/yaml-parser.test.ts +0 -168
- package/tests/client/js/utils/file-types.test.ts +0 -268
- package/tests/client/js/utils/frontmatter.test.ts +0 -87
- package/tests/client/js/utils/schema-utils.test.ts +0 -318
- package/tests/client/js/utils/slug.test.ts +0 -58
- package/tests/client/js/utils/sort.test.ts +0 -276
- package/tests/client/js/utils/stable-stringify.test.ts +0 -68
- package/tests/client/js/utils/url-utils.test.ts +0 -70
- package/tests/e2e/backend-connection.test.ts +0 -301
- package/tests/e2e/draft-lifecycle.test.ts +0 -388
- package/tests/e2e/editing.test.ts +0 -355
- package/tests/e2e/github-adapter.test.ts +0 -330
- package/tests/e2e/helpers/mock-adapter.ts +0 -166
- package/tests/e2e/helpers/test-app.ts +0 -155
- package/tests/e2e/navigation.test.ts +0 -358
- package/tests/e2e/publishing.test.ts +0 -345
- package/tests/e2e/unsaved-changes.test.ts +0 -317
- package/tests/setup.ts +0 -2
- package/tests/stubs/codemirror.ts +0 -197
- package/tsconfig.json +0 -19
- package/vitest.config.ts +0 -178
- /package/{src → dist}/client/components/BackendPicker.svelte +0 -0
- /package/{src → dist}/client/components/DraftChip.svelte +0 -0
- /package/{src → dist}/client/components/MetadataForm.svelte +0 -0
- /package/{src → dist}/client/components/ThemeToggle.svelte +0 -0
- /package/{src → dist}/client/components/dialogs/DeleteDraftDialog.svelte +0 -0
- /package/{src → dist}/client/components/editor/EditorPane.svelte +0 -0
- /package/{src → dist}/client/components/editor/EditorTabs.svelte +0 -0
- /package/{src → dist}/client/components/editor/EditorToolbar.svelte +0 -0
- /package/{src → dist}/client/components/editor/FormatSelector.svelte +0 -0
- /package/{src → dist}/client/components/editor/Toolbar.svelte +0 -0
- /package/{src → dist}/client/components/fields/ArrayField.svelte +0 -0
- /package/{src → dist}/client/components/fields/ArrayItem.svelte +0 -0
- /package/{src → dist}/client/components/fields/BooleanField.svelte +0 -0
- /package/{src → dist}/client/components/fields/DateField.svelte +0 -0
- /package/{src → dist}/client/components/fields/EnumField.svelte +0 -0
- /package/{src → dist}/client/components/fields/FieldWrapper.svelte +0 -0
- /package/{src → dist}/client/components/fields/NumberField.svelte +0 -0
- /package/{src → dist}/client/components/fields/ObjectField.svelte +0 -0
- /package/{src → dist}/client/components/fields/SchemaField.svelte +0 -0
- /package/{src → dist}/client/components/fields/StringField.svelte +0 -0
- /package/{src → dist}/client/components/sidebar/AdminSidebarSort.svelte +0 -0
- /package/{src → dist}/client/css/a11y.css +0 -0
- /package/{src → dist}/client/css/btn.css +0 -0
- /package/{src → dist}/client/css/dialog.css +0 -0
- /package/{src → dist}/client/css/field-input.css +0 -0
- /package/{src → dist}/client/css/reset.css +0 -0
- /package/{src → dist}/client/css/theme.css +0 -0
- /package/{src/client/index.ts → dist/client/index.js} +0 -0
- /package/{src → dist}/virtual.d.ts +0 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* SharedWorker entry point for storage operations.
|
|
3
|
+
* Receives requests over MessagePort, dispatches to the active StorageAdapter,
|
|
4
|
+
* and posts responses back to each connected client.
|
|
5
|
+
*/
|
|
6
|
+
// The single active adapter instance shared across all connected ports
|
|
7
|
+
let adapter = null;
|
|
8
|
+
/**
|
|
9
|
+
* Handles a request message and returns the appropriate response.
|
|
10
|
+
* @param {StorageRequest} msg - The incoming request message
|
|
11
|
+
* @return {Promise<StorageResponse>} The response to send back
|
|
12
|
+
*/
|
|
13
|
+
async function handleMessage(msg) {
|
|
14
|
+
switch (msg.type) {
|
|
15
|
+
case 'init': {
|
|
16
|
+
try {
|
|
17
|
+
if (msg.backend.type === 'fsa') {
|
|
18
|
+
const { FsaAdapter } = await import('../fsa');
|
|
19
|
+
adapter = new FsaAdapter(msg.backend.handle);
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
const { GitHubAdapter } = await import('../github');
|
|
23
|
+
const gh = new GitHubAdapter(msg.backend.token, msg.backend.repo);
|
|
24
|
+
await gh.validate();
|
|
25
|
+
adapter = gh;
|
|
26
|
+
}
|
|
27
|
+
return { type: 'init', ok: true };
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
31
|
+
return { type: 'init', ok: false, error };
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
case 'listFiles': {
|
|
35
|
+
if (!adapter)
|
|
36
|
+
return {
|
|
37
|
+
type: 'listFiles',
|
|
38
|
+
ok: false,
|
|
39
|
+
error: 'No backend initialized',
|
|
40
|
+
};
|
|
41
|
+
try {
|
|
42
|
+
const files = await adapter.listFiles(msg.collection, msg.extensions);
|
|
43
|
+
return { type: 'listFiles', ok: true, files };
|
|
44
|
+
}
|
|
45
|
+
catch (err) {
|
|
46
|
+
return {
|
|
47
|
+
type: 'listFiles',
|
|
48
|
+
ok: false,
|
|
49
|
+
error: err instanceof Error ? err.message : String(err),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
case 'readFile': {
|
|
54
|
+
if (!adapter)
|
|
55
|
+
return { type: 'readFile', ok: false, error: 'No backend initialized' };
|
|
56
|
+
try {
|
|
57
|
+
const content = await adapter.readFile(msg.collection, msg.filename);
|
|
58
|
+
return { type: 'readFile', ok: true, content };
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
return {
|
|
62
|
+
type: 'readFile',
|
|
63
|
+
ok: false,
|
|
64
|
+
error: err instanceof Error ? err.message : String(err),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
case 'writeFile': {
|
|
69
|
+
if (!adapter)
|
|
70
|
+
return {
|
|
71
|
+
type: 'writeFile',
|
|
72
|
+
ok: false,
|
|
73
|
+
error: 'No backend initialized',
|
|
74
|
+
};
|
|
75
|
+
try {
|
|
76
|
+
await adapter.writeFile(msg.collection, msg.filename, msg.content);
|
|
77
|
+
return { type: 'writeFile', ok: true };
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
return {
|
|
81
|
+
type: 'writeFile',
|
|
82
|
+
ok: false,
|
|
83
|
+
error: err instanceof Error ? err.message : String(err),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
case 'writeFiles': {
|
|
88
|
+
if (!adapter)
|
|
89
|
+
return {
|
|
90
|
+
type: 'writeFiles',
|
|
91
|
+
ok: false,
|
|
92
|
+
error: 'No backend initialized',
|
|
93
|
+
};
|
|
94
|
+
try {
|
|
95
|
+
await adapter.writeFiles(msg.files);
|
|
96
|
+
return { type: 'writeFiles', ok: true };
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
return {
|
|
100
|
+
type: 'writeFiles',
|
|
101
|
+
ok: false,
|
|
102
|
+
error: err instanceof Error ? err.message : String(err),
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
case 'deleteFile': {
|
|
107
|
+
if (!adapter)
|
|
108
|
+
return {
|
|
109
|
+
type: 'deleteFile',
|
|
110
|
+
ok: false,
|
|
111
|
+
error: 'No backend initialized',
|
|
112
|
+
};
|
|
113
|
+
try {
|
|
114
|
+
await adapter.deleteFile(msg.collection, msg.filename);
|
|
115
|
+
return { type: 'deleteFile', ok: true };
|
|
116
|
+
}
|
|
117
|
+
catch (err) {
|
|
118
|
+
return {
|
|
119
|
+
type: 'deleteFile',
|
|
120
|
+
ok: false,
|
|
121
|
+
error: err instanceof Error ? err.message : String(err),
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
case 'teardown': {
|
|
126
|
+
adapter = null;
|
|
127
|
+
return { type: 'teardown', ok: true };
|
|
128
|
+
}
|
|
129
|
+
default: {
|
|
130
|
+
// Prevents silent hangs if an unrecognized message type arrives
|
|
131
|
+
const exhaustive = msg;
|
|
132
|
+
return {
|
|
133
|
+
type: exhaustive.type,
|
|
134
|
+
ok: false,
|
|
135
|
+
error: 'Unknown message type',
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Wires up message handling for a connected port. Passes through `_id` from requests so the StorageClient can correlate responses.
|
|
142
|
+
* @param {MessagePort} port - The port to listen on
|
|
143
|
+
* @return {void}
|
|
144
|
+
*/
|
|
145
|
+
function setupPort(port) {
|
|
146
|
+
port.addEventListener('message', async (event) => {
|
|
147
|
+
const { _id, ...msg } = event.data;
|
|
148
|
+
// Handle port bridging — main thread transfers ports for dedicated workers
|
|
149
|
+
if (msg.type === 'connect-port') {
|
|
150
|
+
const transferredPort = event.ports[0];
|
|
151
|
+
if (transferredPort)
|
|
152
|
+
setupPort(transferredPort);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const response = await handleMessage(msg);
|
|
156
|
+
port.postMessage({ ...response, _id });
|
|
157
|
+
});
|
|
158
|
+
port.start();
|
|
159
|
+
// Acknowledge the connection so the caller knows the port is ready
|
|
160
|
+
port.postMessage({ type: 'port-connected' });
|
|
161
|
+
}
|
|
162
|
+
// SharedWorker entry — handle direct connections from Window contexts
|
|
163
|
+
self.addEventListener('connect', (event) => {
|
|
164
|
+
const port = event.ports[0];
|
|
165
|
+
setupPort(port);
|
|
166
|
+
});
|
|
167
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toml-parser.d.ts","sourceRoot":"","sources":["../../../../../src/client/js/storage/workers/toml-parser.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* TOML parser worker
|
|
3
|
+
*
|
|
4
|
+
* Runs as a dedicated Worker. Handles three message types — parse, parse-batch,
|
|
5
|
+
* stringify — and posts results back to the main thread via self.postMessage.
|
|
6
|
+
* All handlers are wrapped in try/catch so errors are returned as structured
|
|
7
|
+
* failure messages rather than unhandled rejections.
|
|
8
|
+
*/
|
|
9
|
+
import { parse, stringify } from 'smol-toml';
|
|
10
|
+
/**
|
|
11
|
+
* Handles a 'parse' request: parses a single TOML string and posts the result.
|
|
12
|
+
* @param {ParseMessage} msg - The inbound parse message
|
|
13
|
+
* @return {void}
|
|
14
|
+
*/
|
|
15
|
+
function handleParse(msg) {
|
|
16
|
+
const { id, content } = msg;
|
|
17
|
+
try {
|
|
18
|
+
const data = parse(content);
|
|
19
|
+
self.postMessage({ type: 'parse-result', id, ok: true, data });
|
|
20
|
+
}
|
|
21
|
+
catch (err) {
|
|
22
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
23
|
+
self.postMessage({ type: 'parse-result', id, ok: false, error });
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Handles a 'parse-batch' request: parses multiple TOML strings keyed by
|
|
28
|
+
* a caller-supplied key, and posts a single result containing all parsed values.
|
|
29
|
+
* @param {ParseBatchMessage} msg - The inbound parse-batch message
|
|
30
|
+
* @return {void}
|
|
31
|
+
*/
|
|
32
|
+
function handleParseBatch(msg) {
|
|
33
|
+
const { id, items } = msg;
|
|
34
|
+
try {
|
|
35
|
+
const results = {};
|
|
36
|
+
for (const item of items) {
|
|
37
|
+
results[item.key] = parse(item.content);
|
|
38
|
+
}
|
|
39
|
+
self.postMessage({ type: 'parse-batch-result', id, ok: true, results });
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
43
|
+
self.postMessage({ type: 'parse-batch-result', id, ok: false, error });
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Handles a 'stringify' request: serializes a plain object to a TOML string
|
|
48
|
+
* and posts the result.
|
|
49
|
+
* @param {StringifyMessage} msg - The inbound stringify message
|
|
50
|
+
* @return {void}
|
|
51
|
+
*/
|
|
52
|
+
function handleStringify(msg) {
|
|
53
|
+
const { id, data } = msg;
|
|
54
|
+
try {
|
|
55
|
+
const content = stringify(data);
|
|
56
|
+
self.postMessage({ type: 'stringify-result', id, ok: true, content });
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
60
|
+
self.postMessage({ type: 'stringify-result', id, ok: false, error });
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Dispatch incoming messages by type
|
|
64
|
+
self.addEventListener('message', (event) => {
|
|
65
|
+
const msg = event.data;
|
|
66
|
+
if (msg.type === 'parse') {
|
|
67
|
+
handleParse(msg);
|
|
68
|
+
}
|
|
69
|
+
else if (msg.type === 'parse-batch') {
|
|
70
|
+
handleParseBatch(msg);
|
|
71
|
+
}
|
|
72
|
+
else if (msg.type === 'stringify') {
|
|
73
|
+
handleStringify(msg);
|
|
74
|
+
}
|
|
75
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"yaml-parser.d.ts","sourceRoot":"","sources":["../../../../../src/client/js/storage/workers/yaml-parser.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* YAML Parser Worker
|
|
3
|
+
*
|
|
4
|
+
* Handles YAML parsing and serialization on behalf of the main thread.
|
|
5
|
+
* Messages are dispatched by type: 'parse', 'parse-batch', 'stringify'.
|
|
6
|
+
* Each handler wraps its logic in try/catch and always posts a typed result.
|
|
7
|
+
*/
|
|
8
|
+
import { load, dump } from 'js-yaml';
|
|
9
|
+
/*
|
|
10
|
+
//////////////////////////////
|
|
11
|
+
// Message handler
|
|
12
|
+
//////////////////////////////
|
|
13
|
+
*/
|
|
14
|
+
/**
|
|
15
|
+
* Handles a single YAML parse request. Parses the provided content string
|
|
16
|
+
* and posts a parse-result message with the resulting data object or error.
|
|
17
|
+
* @param {ParseMessage} msg - The inbound parse message
|
|
18
|
+
* @return {void}
|
|
19
|
+
*/
|
|
20
|
+
function handleParse(msg) {
|
|
21
|
+
try {
|
|
22
|
+
const data = load(msg.content);
|
|
23
|
+
self.postMessage({ type: 'parse-result', id: msg.id, ok: true, data });
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
27
|
+
self.postMessage({ type: 'parse-result', id: msg.id, ok: false, error });
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Handles a batch YAML parse request. Iterates over all items, parses each
|
|
32
|
+
* one, and posts a parse-batch-result with a key-to-data results map.
|
|
33
|
+
* If any item fails to parse, the entire batch result is marked as failed.
|
|
34
|
+
* @param {ParseBatchMessage} msg - The inbound parse-batch message
|
|
35
|
+
* @return {void}
|
|
36
|
+
*/
|
|
37
|
+
function handleParseBatch(msg) {
|
|
38
|
+
try {
|
|
39
|
+
const results = {};
|
|
40
|
+
for (const item of msg.items) {
|
|
41
|
+
results[item.key] = load(item.content);
|
|
42
|
+
}
|
|
43
|
+
self.postMessage({
|
|
44
|
+
type: 'parse-batch-result',
|
|
45
|
+
id: msg.id,
|
|
46
|
+
ok: true,
|
|
47
|
+
results,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
52
|
+
self.postMessage({
|
|
53
|
+
type: 'parse-batch-result',
|
|
54
|
+
id: msg.id,
|
|
55
|
+
ok: false,
|
|
56
|
+
error,
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Handles a YAML stringify request. Serializes the provided data object to
|
|
62
|
+
* a YAML string and posts a stringify-result message with the content.
|
|
63
|
+
* lineWidth: -1 disables js-yaml's automatic line folding so long values
|
|
64
|
+
* are not wrapped across lines, which would corrupt multi-line string values.
|
|
65
|
+
* @param {StringifyMessage} msg - The inbound stringify message
|
|
66
|
+
* @return {void}
|
|
67
|
+
*/
|
|
68
|
+
function handleStringify(msg) {
|
|
69
|
+
try {
|
|
70
|
+
const content = dump(msg.data, { lineWidth: -1 });
|
|
71
|
+
self.postMessage({
|
|
72
|
+
type: 'stringify-result',
|
|
73
|
+
id: msg.id,
|
|
74
|
+
ok: true,
|
|
75
|
+
content,
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
catch (err) {
|
|
79
|
+
const error = err instanceof Error ? err.message : String(err);
|
|
80
|
+
self.postMessage({
|
|
81
|
+
type: 'stringify-result',
|
|
82
|
+
id: msg.id,
|
|
83
|
+
ok: false,
|
|
84
|
+
error,
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
// Listen for messages from the main thread and dispatch by type
|
|
89
|
+
self.addEventListener('message', (event) => {
|
|
90
|
+
const msg = event.data;
|
|
91
|
+
if (msg.type === 'parse') {
|
|
92
|
+
handleParse(msg);
|
|
93
|
+
}
|
|
94
|
+
else if (msg.type === 'parse-batch') {
|
|
95
|
+
handleParseBatch(msg);
|
|
96
|
+
}
|
|
97
|
+
else if (msg.type === 'stringify') {
|
|
98
|
+
handleStringify(msg);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
export type FileTypeConfig = {
|
|
2
|
+
extensions: string[];
|
|
3
|
+
hasBody: boolean;
|
|
4
|
+
category: 'frontmatter' | 'data';
|
|
5
|
+
dataFormat?: 'json' | 'yaml' | 'toml';
|
|
6
|
+
};
|
|
7
|
+
export declare const FILE_TYPES: Record<string, FileTypeConfig>;
|
|
8
|
+
/**
|
|
9
|
+
* Resolves a schema's `files` array of type identifiers to a flat list of file extensions.
|
|
10
|
+
* Used by storage adapters for file discovery filtering.
|
|
11
|
+
* @param {Record<string, unknown>} schema - A collection JSON Schema with an optional `files` array
|
|
12
|
+
* @return {string[]} Ordered list of extensions (e.g. ['.md', '.markdown', '.json'])
|
|
13
|
+
*/
|
|
14
|
+
export declare function getExtensionsForSchema(schema: Record<string, unknown>): string[];
|
|
15
|
+
/**
|
|
16
|
+
* Returns whether a file should show the body editor panel.
|
|
17
|
+
* True for markdown, MDX, and Markdoc files; false for pure data files.
|
|
18
|
+
* @param {string} filename - The filename to check
|
|
19
|
+
* @return {boolean} True if the file type has a body editor
|
|
20
|
+
*/
|
|
21
|
+
export declare function hasBodyEditor(filename: string): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Returns the category of a file based on its extension.
|
|
24
|
+
* Used to determine whether to render frontmatter fields or data-only fields.
|
|
25
|
+
* @param {string} filename - The filename to categorise
|
|
26
|
+
* @return {'frontmatter' | 'data' | null} The file category, or null for unrecognised extensions
|
|
27
|
+
*/
|
|
28
|
+
export declare function getFileCategory(filename: string): 'frontmatter' | 'data' | null;
|
|
29
|
+
/**
|
|
30
|
+
* Returns the serialization format for a data file.
|
|
31
|
+
* Returns null for frontmatter files and unrecognised extensions.
|
|
32
|
+
* @param {string} filename - The filename to inspect
|
|
33
|
+
* @return {'json' | 'yaml' | 'toml' | null} The data format, or null if not a data file
|
|
34
|
+
*/
|
|
35
|
+
export declare function getDataFormat(filename: string): 'json' | 'yaml' | 'toml' | null;
|
|
36
|
+
/**
|
|
37
|
+
* Strips the file extension from a filename when the extension is a known type.
|
|
38
|
+
* Returns the filename unchanged if the extension is not recognised.
|
|
39
|
+
* Used for generating URL slugs from filenames.
|
|
40
|
+
* @param {string} filename - The filename to strip the extension from
|
|
41
|
+
* @return {string} The filename without its known extension, or the original filename
|
|
42
|
+
*/
|
|
43
|
+
export declare function stripExtension(filename: string): string;
|
|
44
|
+
/**
|
|
45
|
+
* Returns the default (first) file extension for a given type identifier.
|
|
46
|
+
* Used when creating new files to pick the canonical extension for a format.
|
|
47
|
+
* @param {string} type - A type identifier (e.g. 'md', 'yaml', 'toml')
|
|
48
|
+
* @return {string | null} The default extension including the leading dot, or null for unknown types
|
|
49
|
+
*/
|
|
50
|
+
export declare function getDefaultExtension(type: string): string | null;
|
|
51
|
+
/**
|
|
52
|
+
* Returns the type identifier for a given filename by looking up its extension.
|
|
53
|
+
* Used when the active file's type must be determined for the format selector.
|
|
54
|
+
* @param {string} filename - The filename to look up
|
|
55
|
+
* @return {string | null} The type identifier (e.g. 'md', 'yaml'), or null for unrecognised extensions
|
|
56
|
+
*/
|
|
57
|
+
export declare function getTypeForFilename(filename: string): string | null;
|
|
58
|
+
//# sourceMappingURL=file-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-types.d.ts","sourceRoot":"","sources":["../../../../src/client/js/utils/file-types.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,cAAc,GAAG;IAE3B,UAAU,EAAE,MAAM,EAAE,CAAC;IAErB,OAAO,EAAE,OAAO,CAAC;IAEjB,QAAQ,EAAE,aAAa,GAAG,MAAM,CAAC;IAEjC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;CACvC,CAAC;AAGF,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAkCrD,CAAC;AA6CF;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,MAAM,EAAE,CAYV;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAGvD;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,GACf,aAAa,GAAG,MAAM,GAAG,IAAI,CAG/B;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,GACf,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,IAAI,CAGjC;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMvD;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAE/D;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAElE"}
|