nebula-cms 0.1.3 → 0.1.4

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 (380) hide show
  1. package/README.md +2 -0
  2. package/dist/astro/index.d.ts +43 -0
  3. package/dist/astro/index.d.ts.map +1 -0
  4. package/dist/astro/index.js +223 -0
  5. package/dist/client/Admin.svelte.d.ts +11 -0
  6. package/dist/client/Admin.svelte.d.ts.map +1 -0
  7. package/dist/client/components/BackendPicker.svelte.d.ts +4 -0
  8. package/dist/client/components/BackendPicker.svelte.d.ts.map +1 -0
  9. package/dist/client/components/DraftChip.svelte.d.ts +10 -0
  10. package/dist/client/components/DraftChip.svelte.d.ts.map +1 -0
  11. package/dist/client/components/MetadataForm.svelte.d.ts +12 -0
  12. package/dist/client/components/MetadataForm.svelte.d.ts.map +1 -0
  13. package/dist/client/components/ThemeToggle.svelte.d.ts +19 -0
  14. package/dist/client/components/ThemeToggle.svelte.d.ts.map +1 -0
  15. package/dist/client/components/dialogs/DeleteDraftDialog.svelte.d.ts +11 -0
  16. package/dist/client/components/dialogs/DeleteDraftDialog.svelte.d.ts.map +1 -0
  17. package/dist/client/components/dialogs/FilenameDialog.svelte.d.ts +13 -0
  18. package/dist/client/components/dialogs/FilenameDialog.svelte.d.ts.map +1 -0
  19. package/dist/client/components/editor/EditorPane.svelte.d.ts +4 -0
  20. package/dist/client/components/editor/EditorPane.svelte.d.ts.map +1 -0
  21. package/dist/client/components/editor/EditorTabs.svelte.d.ts +8 -0
  22. package/dist/client/components/editor/EditorTabs.svelte.d.ts.map +1 -0
  23. package/dist/client/components/editor/EditorToolbar.svelte.d.ts +4 -0
  24. package/dist/client/components/editor/EditorToolbar.svelte.d.ts.map +1 -0
  25. package/dist/client/components/editor/FormatSelector.svelte.d.ts +4 -0
  26. package/dist/client/components/editor/FormatSelector.svelte.d.ts.map +1 -0
  27. package/dist/client/components/editor/Toolbar.svelte.d.ts +19 -0
  28. package/dist/client/components/editor/Toolbar.svelte.d.ts.map +1 -0
  29. package/dist/client/components/fields/ArrayField.svelte.d.ts +15 -0
  30. package/dist/client/components/fields/ArrayField.svelte.d.ts.map +1 -0
  31. package/dist/client/components/fields/ArrayItem.svelte.d.ts +28 -0
  32. package/dist/client/components/fields/ArrayItem.svelte.d.ts.map +1 -0
  33. package/dist/client/components/fields/BooleanField.svelte.d.ts +16 -0
  34. package/dist/client/components/fields/BooleanField.svelte.d.ts.map +1 -0
  35. package/dist/client/components/fields/DateField.svelte.d.ts +16 -0
  36. package/dist/client/components/fields/DateField.svelte.d.ts.map +1 -0
  37. package/dist/client/components/fields/EnumField.svelte.d.ts +17 -0
  38. package/dist/client/components/fields/EnumField.svelte.d.ts.map +1 -0
  39. package/dist/client/components/fields/FieldWrapper.svelte.d.ts +18 -0
  40. package/dist/client/components/fields/FieldWrapper.svelte.d.ts.map +1 -0
  41. package/dist/client/components/fields/NumberField.svelte.d.ts +16 -0
  42. package/dist/client/components/fields/NumberField.svelte.d.ts.map +1 -0
  43. package/dist/client/components/fields/ObjectField.svelte.d.ts +16 -0
  44. package/dist/client/components/fields/ObjectField.svelte.d.ts.map +1 -0
  45. package/dist/client/components/fields/SchemaField.svelte.d.ts +16 -0
  46. package/dist/client/components/fields/SchemaField.svelte.d.ts.map +1 -0
  47. package/dist/client/components/fields/StringField.svelte.d.ts +16 -0
  48. package/dist/client/components/fields/StringField.svelte.d.ts.map +1 -0
  49. package/dist/client/components/sidebar/AdminSidebar.svelte.d.ts +19 -0
  50. package/dist/client/components/sidebar/AdminSidebar.svelte.d.ts.map +1 -0
  51. package/dist/client/components/sidebar/AdminSidebarSort.svelte.d.ts +12 -0
  52. package/dist/client/components/sidebar/AdminSidebarSort.svelte.d.ts.map +1 -0
  53. package/dist/client/css/icons.css +29 -0
  54. package/dist/client/index.d.ts +2 -0
  55. package/dist/client/index.d.ts.map +1 -0
  56. package/dist/client/js/drafts/merge.svelte.d.ts +24 -0
  57. package/dist/client/js/drafts/merge.svelte.d.ts.map +1 -0
  58. package/dist/client/js/drafts/merge.svelte.js +106 -0
  59. package/dist/client/js/drafts/ops.svelte.d.ts +31 -0
  60. package/dist/client/js/drafts/ops.svelte.d.ts.map +1 -0
  61. package/dist/client/js/drafts/ops.svelte.js +182 -0
  62. package/dist/client/js/drafts/storage.d.ts +45 -0
  63. package/dist/client/js/drafts/storage.d.ts.map +1 -0
  64. package/dist/client/js/drafts/storage.js +76 -0
  65. package/dist/client/js/drafts/workers/diff.d.ts +2 -0
  66. package/dist/client/js/drafts/workers/diff.d.ts.map +1 -0
  67. package/dist/client/js/drafts/workers/diff.js +20 -0
  68. package/dist/client/js/editor/editor.svelte.d.ts +124 -0
  69. package/dist/client/js/editor/editor.svelte.d.ts.map +1 -0
  70. package/dist/client/js/editor/editor.svelte.js +294 -0
  71. package/dist/client/js/editor/languages.d.ts +11 -0
  72. package/dist/client/js/editor/languages.d.ts.map +1 -0
  73. package/dist/client/js/editor/languages.js +93 -0
  74. package/dist/client/js/editor/link-wrap.d.ts +6 -0
  75. package/dist/client/js/editor/link-wrap.d.ts.map +1 -0
  76. package/{src/client/js/editor/link-wrap.ts → dist/client/js/editor/link-wrap.js} +17 -24
  77. package/dist/client/js/editor/markdown-shortcuts.d.ts +4 -0
  78. package/dist/client/js/editor/markdown-shortcuts.d.ts.map +1 -0
  79. package/dist/client/js/editor/markdown-shortcuts.js +219 -0
  80. package/dist/client/js/handlers/admin.d.ts +64 -0
  81. package/dist/client/js/handlers/admin.d.ts.map +1 -0
  82. package/dist/client/js/handlers/admin.js +186 -0
  83. package/dist/client/js/state/dialogs.svelte.d.ts +16 -0
  84. package/dist/client/js/state/dialogs.svelte.d.ts.map +1 -0
  85. package/dist/client/js/state/dialogs.svelte.js +28 -0
  86. package/dist/client/js/state/router.svelte.d.ts +44 -0
  87. package/dist/client/js/state/router.svelte.d.ts.map +1 -0
  88. package/dist/client/js/state/router.svelte.js +135 -0
  89. package/dist/client/js/state/schema.svelte.d.ts +51 -0
  90. package/dist/client/js/state/schema.svelte.d.ts.map +1 -0
  91. package/{src/client/js/state/schema.svelte.ts → dist/client/js/state/schema.svelte.js} +55 -70
  92. package/dist/client/js/state/state.svelte.d.ts +68 -0
  93. package/dist/client/js/state/state.svelte.d.ts.map +1 -0
  94. package/dist/client/js/state/state.svelte.js +291 -0
  95. package/dist/client/js/state/theme.svelte.d.ts +24 -0
  96. package/dist/client/js/state/theme.svelte.d.ts.map +1 -0
  97. package/{src/client/js/state/theme.svelte.ts → dist/client/js/state/theme.svelte.js} +54 -91
  98. package/dist/client/js/storage/adapter.d.ts +130 -0
  99. package/dist/client/js/storage/adapter.d.ts.map +1 -0
  100. package/dist/client/js/storage/adapter.js +5 -0
  101. package/dist/client/js/storage/client.d.ts +72 -0
  102. package/dist/client/js/storage/client.d.ts.map +1 -0
  103. package/dist/client/js/storage/client.js +121 -0
  104. package/dist/client/js/storage/db.d.ts +8 -0
  105. package/dist/client/js/storage/db.d.ts.map +1 -0
  106. package/dist/client/js/storage/db.js +35 -0
  107. package/dist/client/js/storage/fsa.d.ts +51 -0
  108. package/dist/client/js/storage/fsa.d.ts.map +1 -0
  109. package/dist/client/js/storage/fsa.js +91 -0
  110. package/dist/client/js/storage/github.d.ts +62 -0
  111. package/dist/client/js/storage/github.d.ts.map +1 -0
  112. package/dist/client/js/storage/github.js +216 -0
  113. package/dist/client/js/storage/storage.d.ts +32 -0
  114. package/dist/client/js/storage/storage.d.ts.map +1 -0
  115. package/dist/client/js/storage/storage.js +68 -0
  116. package/dist/client/js/storage/workers/frontmatter.d.ts +2 -0
  117. package/dist/client/js/storage/workers/frontmatter.d.ts.map +1 -0
  118. package/dist/client/js/storage/workers/frontmatter.js +253 -0
  119. package/dist/client/js/storage/workers/storage.d.ts +2 -0
  120. package/dist/client/js/storage/workers/storage.d.ts.map +1 -0
  121. package/dist/client/js/storage/workers/storage.js +167 -0
  122. package/dist/client/js/storage/workers/toml-parser.d.ts +2 -0
  123. package/dist/client/js/storage/workers/toml-parser.d.ts.map +1 -0
  124. package/dist/client/js/storage/workers/toml-parser.js +75 -0
  125. package/dist/client/js/storage/workers/yaml-parser.d.ts +2 -0
  126. package/dist/client/js/storage/workers/yaml-parser.d.ts.map +1 -0
  127. package/dist/client/js/storage/workers/yaml-parser.js +100 -0
  128. package/dist/client/js/utils/file-types.d.ts +58 -0
  129. package/dist/client/js/utils/file-types.d.ts.map +1 -0
  130. package/{src/client/js/utils/file-types.ts → dist/client/js/utils/file-types.js} +75 -107
  131. package/dist/client/js/utils/format.d.ts +8 -0
  132. package/dist/client/js/utils/format.d.ts.map +1 -0
  133. package/{src/client/js/utils/format.ts → dist/client/js/utils/format.js} +5 -6
  134. package/dist/client/js/utils/frontmatter.d.ts +12 -0
  135. package/dist/client/js/utils/frontmatter.d.ts.map +1 -0
  136. package/dist/client/js/utils/frontmatter.js +29 -0
  137. package/dist/client/js/utils/schema-utils.d.ts +110 -0
  138. package/dist/client/js/utils/schema-utils.d.ts.map +1 -0
  139. package/dist/client/js/utils/schema-utils.js +242 -0
  140. package/dist/client/js/utils/slug.d.ts +8 -0
  141. package/dist/client/js/utils/slug.d.ts.map +1 -0
  142. package/{src/client/js/utils/slug.ts → dist/client/js/utils/slug.js} +6 -7
  143. package/dist/client/js/utils/sort.d.ts +41 -0
  144. package/dist/client/js/utils/sort.d.ts.map +1 -0
  145. package/dist/client/js/utils/sort.js +65 -0
  146. package/dist/client/js/utils/stable-stringify.d.ts +8 -0
  147. package/dist/client/js/utils/stable-stringify.d.ts.map +1 -0
  148. package/dist/client/js/utils/stable-stringify.js +23 -0
  149. package/dist/client/js/utils/url-utils.d.ts +11 -0
  150. package/dist/client/js/utils/url-utils.d.ts.map +1 -0
  151. package/{src/client/js/utils/url-utils.ts → dist/client/js/utils/url-utils.js} +22 -23
  152. package/dist/types.d.ts +22 -0
  153. package/dist/types.d.ts.map +1 -0
  154. package/dist/types.js +1 -0
  155. package/package.json +4 -1
  156. package/.github/workflows/ci.yml +0 -27
  157. package/.github/workflows/publish.yml +0 -34
  158. package/.mcp.json +0 -12
  159. package/.prettierignore +0 -5
  160. package/.prettierrc.cjs +0 -22
  161. package/AGENTS.md +0 -183
  162. package/playground/astro.config.mjs +0 -7
  163. package/playground/node_modules/.bin/astro +0 -21
  164. package/playground/node_modules/.vite/deps/@astrojs_svelte_client__js.js +0 -85
  165. package/playground/node_modules/.vite/deps/@astrojs_svelte_client__js.js.map +0 -7
  166. package/playground/node_modules/.vite/deps/_metadata.json +0 -184
  167. package/playground/node_modules/.vite/deps/astro___aria-query.js +0 -6776
  168. package/playground/node_modules/.vite/deps/astro___aria-query.js.map +0 -7
  169. package/playground/node_modules/.vite/deps/astro___axobject-query.js +0 -3754
  170. package/playground/node_modules/.vite/deps/astro___axobject-query.js.map +0 -7
  171. package/playground/node_modules/.vite/deps/astro___html-escaper.js +0 -34
  172. package/playground/node_modules/.vite/deps/astro___html-escaper.js.map +0 -7
  173. package/playground/node_modules/.vite/deps/chunk-AJXJMYAF.js +0 -0
  174. package/playground/node_modules/.vite/deps/chunk-AJXJMYAF.js.map +0 -7
  175. package/playground/node_modules/.vite/deps/chunk-BUSYA2B4.js +0 -8
  176. package/playground/node_modules/.vite/deps/chunk-BUSYA2B4.js.map +0 -7
  177. package/playground/node_modules/.vite/deps/chunk-CNYJBM5F.js +0 -21
  178. package/playground/node_modules/.vite/deps/chunk-CNYJBM5F.js.map +0 -7
  179. package/playground/node_modules/.vite/deps/chunk-DBPNBGEI.js +0 -223
  180. package/playground/node_modules/.vite/deps/chunk-DBPNBGEI.js.map +0 -7
  181. package/playground/node_modules/.vite/deps/chunk-FPEUJ7DG.js +0 -27
  182. package/playground/node_modules/.vite/deps/chunk-FPEUJ7DG.js.map +0 -7
  183. package/playground/node_modules/.vite/deps/chunk-MHDZ3SK7.js +0 -1005
  184. package/playground/node_modules/.vite/deps/chunk-MHDZ3SK7.js.map +0 -7
  185. package/playground/node_modules/.vite/deps/chunk-RBDTDTPY.js +0 -204
  186. package/playground/node_modules/.vite/deps/chunk-RBDTDTPY.js.map +0 -7
  187. package/playground/node_modules/.vite/deps/chunk-RJGEXL5C.js +0 -688
  188. package/playground/node_modules/.vite/deps/chunk-RJGEXL5C.js.map +0 -7
  189. package/playground/node_modules/.vite/deps/chunk-YL4MIWGJ.js +0 -5099
  190. package/playground/node_modules/.vite/deps/chunk-YL4MIWGJ.js.map +0 -7
  191. package/playground/node_modules/.vite/deps/chunk-ZOV3DWEJ.js +0 -4376
  192. package/playground/node_modules/.vite/deps/chunk-ZOV3DWEJ.js.map +0 -7
  193. package/playground/node_modules/.vite/deps/chunk-ZP4UNCSN.js +0 -23
  194. package/playground/node_modules/.vite/deps/chunk-ZP4UNCSN.js.map +0 -7
  195. package/playground/node_modules/.vite/deps/chunk-ZREFNRZZ.js +0 -148
  196. package/playground/node_modules/.vite/deps/chunk-ZREFNRZZ.js.map +0 -7
  197. package/playground/node_modules/.vite/deps/package.json +0 -3
  198. package/playground/node_modules/.vite/deps/smol-toml.js +0 -843
  199. package/playground/node_modules/.vite/deps/smol-toml.js.map +0 -7
  200. package/playground/node_modules/.vite/deps/svelte.js +0 -55
  201. package/playground/node_modules/.vite/deps/svelte.js.map +0 -7
  202. package/playground/node_modules/.vite/deps/svelte___clsx.js +0 -9
  203. package/playground/node_modules/.vite/deps/svelte___clsx.js.map +0 -7
  204. package/playground/node_modules/.vite/deps/svelte_animate.js +0 -57
  205. package/playground/node_modules/.vite/deps/svelte_animate.js.map +0 -7
  206. package/playground/node_modules/.vite/deps/svelte_attachments.js +0 -15
  207. package/playground/node_modules/.vite/deps/svelte_attachments.js.map +0 -7
  208. package/playground/node_modules/.vite/deps/svelte_easing.js +0 -67
  209. package/playground/node_modules/.vite/deps/svelte_easing.js.map +0 -7
  210. package/playground/node_modules/.vite/deps/svelte_events.js +0 -11
  211. package/playground/node_modules/.vite/deps/svelte_events.js.map +0 -7
  212. package/playground/node_modules/.vite/deps/svelte_internal.js +0 -5
  213. package/playground/node_modules/.vite/deps/svelte_internal.js.map +0 -7
  214. package/playground/node_modules/.vite/deps/svelte_internal_client.js +0 -402
  215. package/playground/node_modules/.vite/deps/svelte_internal_client.js.map +0 -7
  216. package/playground/node_modules/.vite/deps/svelte_internal_disclose-version.js +0 -10
  217. package/playground/node_modules/.vite/deps/svelte_internal_disclose-version.js.map +0 -7
  218. package/playground/node_modules/.vite/deps/svelte_internal_flags_async.js +0 -8
  219. package/playground/node_modules/.vite/deps/svelte_internal_flags_async.js.map +0 -7
  220. package/playground/node_modules/.vite/deps/svelte_internal_flags_legacy.js +0 -8
  221. package/playground/node_modules/.vite/deps/svelte_internal_flags_legacy.js.map +0 -7
  222. package/playground/node_modules/.vite/deps/svelte_internal_flags_tracing.js +0 -8
  223. package/playground/node_modules/.vite/deps/svelte_internal_flags_tracing.js.map +0 -7
  224. package/playground/node_modules/.vite/deps/svelte_legacy.js +0 -35
  225. package/playground/node_modules/.vite/deps/svelte_legacy.js.map +0 -7
  226. package/playground/node_modules/.vite/deps/svelte_motion.js +0 -545
  227. package/playground/node_modules/.vite/deps/svelte_motion.js.map +0 -7
  228. package/playground/node_modules/.vite/deps/svelte_reactivity.js +0 -29
  229. package/playground/node_modules/.vite/deps/svelte_reactivity.js.map +0 -7
  230. package/playground/node_modules/.vite/deps/svelte_reactivity_window.js +0 -127
  231. package/playground/node_modules/.vite/deps/svelte_reactivity_window.js.map +0 -7
  232. package/playground/node_modules/.vite/deps/svelte_store.js +0 -103
  233. package/playground/node_modules/.vite/deps/svelte_store.js.map +0 -7
  234. package/playground/node_modules/.vite/deps/svelte_transition.js +0 -208
  235. package/playground/node_modules/.vite/deps/svelte_transition.js.map +0 -7
  236. package/playground/package.json +0 -16
  237. package/playground/pnpm-lock.yaml +0 -3167
  238. package/playground/src/content/authors/jane-doe.json +0 -8
  239. package/playground/src/content/config/build.toml +0 -2
  240. package/playground/src/content/courses/web-fundamentals.json +0 -29
  241. package/playground/src/content/docs/advanced.mdx +0 -6
  242. package/playground/src/content/docs/intro.md +0 -6
  243. package/playground/src/content/guides/getting-started.mdx +0 -6
  244. package/playground/src/content/posts/hello-world.md +0 -7
  245. package/playground/src/content/products/t-shirt.json +0 -16
  246. package/playground/src/content/recipes/pancakes.mdoc +0 -8
  247. package/playground/src/content/settings/site.yml +0 -2
  248. package/playground/src/content.config.ts +0 -198
  249. package/playground/src/env.d.ts +0 -1
  250. package/playground/src/pages/index.astro +0 -11
  251. package/playground/src/pages/nebula.astro +0 -14
  252. package/pnpm-workspace.yaml +0 -2
  253. package/scripts/subset-icons.mjs +0 -178
  254. package/src/astro/index.ts +0 -295
  255. package/src/client/js/drafts/merge.svelte.ts +0 -121
  256. package/src/client/js/drafts/ops.svelte.ts +0 -227
  257. package/src/client/js/drafts/storage.ts +0 -108
  258. package/src/client/js/drafts/workers/diff.ts +0 -40
  259. package/src/client/js/editor/editor.svelte.ts +0 -343
  260. package/src/client/js/editor/languages.ts +0 -98
  261. package/src/client/js/editor/markdown-shortcuts.ts +0 -261
  262. package/src/client/js/handlers/admin.ts +0 -246
  263. package/src/client/js/state/dialogs.svelte.ts +0 -35
  264. package/src/client/js/state/router.svelte.ts +0 -156
  265. package/src/client/js/state/state.svelte.ts +0 -334
  266. package/src/client/js/storage/adapter.ts +0 -102
  267. package/src/client/js/storage/client.ts +0 -150
  268. package/src/client/js/storage/db.ts +0 -36
  269. package/src/client/js/storage/fsa.ts +0 -110
  270. package/src/client/js/storage/github.ts +0 -297
  271. package/src/client/js/storage/storage.ts +0 -83
  272. package/src/client/js/storage/workers/frontmatter.ts +0 -320
  273. package/src/client/js/storage/workers/storage.ts +0 -177
  274. package/src/client/js/storage/workers/toml-parser.ts +0 -106
  275. package/src/client/js/storage/workers/yaml-parser.ts +0 -132
  276. package/src/client/js/utils/frontmatter.ts +0 -38
  277. package/src/client/js/utils/schema-utils.ts +0 -295
  278. package/src/client/js/utils/sort.ts +0 -84
  279. package/src/client/js/utils/stable-stringify.ts +0 -27
  280. package/src/types.ts +0 -25
  281. package/svelte.config.js +0 -4
  282. package/tests/astro/build.test.ts +0 -63
  283. package/tests/astro/index.test.ts +0 -689
  284. package/tests/client/components/Admin.test.ts +0 -446
  285. package/tests/client/components/BackendPicker.test.ts +0 -239
  286. package/tests/client/components/DraftChip.test.ts +0 -53
  287. package/tests/client/components/MetadataForm.test.ts +0 -164
  288. package/tests/client/components/dialogs/DeleteDraftDialog.test.ts +0 -91
  289. package/tests/client/components/dialogs/FilenameDialog.test.ts +0 -209
  290. package/tests/client/components/dialogs/dialog-stubs.ts +0 -19
  291. package/tests/client/components/editor/EditorPane.test.ts +0 -100
  292. package/tests/client/components/editor/EditorTabs.test.ts +0 -253
  293. package/tests/client/components/editor/EditorToolbar.test.ts +0 -252
  294. package/tests/client/components/editor/fixtures.ts +0 -31
  295. package/tests/client/components/fields/ArrayField.test.ts +0 -197
  296. package/tests/client/components/fields/BooleanField.test.ts +0 -206
  297. package/tests/client/components/fields/DateField.test.ts +0 -210
  298. package/tests/client/components/fields/EnumField.test.ts +0 -246
  299. package/tests/client/components/fields/NumberField.test.ts +0 -240
  300. package/tests/client/components/fields/ObjectField.test.ts +0 -157
  301. package/tests/client/components/fields/SchemaField.test.ts +0 -190
  302. package/tests/client/components/fields/StringField.test.ts +0 -223
  303. package/tests/client/components/sidebar/AdminSidebar.test.ts +0 -285
  304. package/tests/client/components/sidebar/AdminSidebarSort.test.ts +0 -135
  305. package/tests/client/components/sidebar/sort-mock.ts +0 -23
  306. package/tests/client/js/drafts/fixtures.ts +0 -22
  307. package/tests/client/js/drafts/merge.test.ts +0 -282
  308. package/tests/client/js/drafts/ops.test.ts +0 -658
  309. package/tests/client/js/drafts/storage.test.ts +0 -200
  310. package/tests/client/js/drafts/workers/diff.test.ts +0 -165
  311. package/tests/client/js/editor/editor.test.ts +0 -616
  312. package/tests/client/js/editor/link-wrap.test.ts +0 -225
  313. package/tests/client/js/editor/markdown-shortcuts.test.ts +0 -370
  314. package/tests/client/js/handlers/admin.test.ts +0 -467
  315. package/tests/client/js/state/router.test.ts +0 -619
  316. package/tests/client/js/state/schema.test.ts +0 -266
  317. package/tests/client/js/state/state.test.ts +0 -328
  318. package/tests/client/js/storage/adapter.test.ts +0 -115
  319. package/tests/client/js/storage/client.test.ts +0 -250
  320. package/tests/client/js/storage/db.test.ts +0 -59
  321. package/tests/client/js/storage/fsa.test.ts +0 -284
  322. package/tests/client/js/storage/github.test.ts +0 -349
  323. package/tests/client/js/storage/mock-port.ts +0 -95
  324. package/tests/client/js/storage/storage.test.ts +0 -77
  325. package/tests/client/js/storage/workers/frontmatter.test.ts +0 -479
  326. package/tests/client/js/storage/workers/storage.test.ts +0 -299
  327. package/tests/client/js/storage/workers/toml-parser.test.ts +0 -169
  328. package/tests/client/js/storage/workers/yaml-parser.test.ts +0 -168
  329. package/tests/client/js/utils/file-types.test.ts +0 -268
  330. package/tests/client/js/utils/frontmatter.test.ts +0 -87
  331. package/tests/client/js/utils/schema-utils.test.ts +0 -318
  332. package/tests/client/js/utils/slug.test.ts +0 -58
  333. package/tests/client/js/utils/sort.test.ts +0 -276
  334. package/tests/client/js/utils/stable-stringify.test.ts +0 -68
  335. package/tests/client/js/utils/url-utils.test.ts +0 -70
  336. package/tests/e2e/backend-connection.test.ts +0 -301
  337. package/tests/e2e/draft-lifecycle.test.ts +0 -388
  338. package/tests/e2e/editing.test.ts +0 -355
  339. package/tests/e2e/github-adapter.test.ts +0 -330
  340. package/tests/e2e/helpers/mock-adapter.ts +0 -166
  341. package/tests/e2e/helpers/test-app.ts +0 -155
  342. package/tests/e2e/navigation.test.ts +0 -358
  343. package/tests/e2e/publishing.test.ts +0 -345
  344. package/tests/e2e/unsaved-changes.test.ts +0 -317
  345. package/tests/setup.ts +0 -2
  346. package/tests/stubs/codemirror.ts +0 -197
  347. package/tsconfig.json +0 -19
  348. package/vitest.config.ts +0 -178
  349. /package/{src → dist}/client/Admin.svelte +0 -0
  350. /package/{src → dist}/client/components/BackendPicker.svelte +0 -0
  351. /package/{src → dist}/client/components/DraftChip.svelte +0 -0
  352. /package/{src → dist}/client/components/MetadataForm.svelte +0 -0
  353. /package/{src → dist}/client/components/ThemeToggle.svelte +0 -0
  354. /package/{src → dist}/client/components/dialogs/DeleteDraftDialog.svelte +0 -0
  355. /package/{src → dist}/client/components/dialogs/FilenameDialog.svelte +0 -0
  356. /package/{src → dist}/client/components/editor/EditorPane.svelte +0 -0
  357. /package/{src → dist}/client/components/editor/EditorTabs.svelte +0 -0
  358. /package/{src → dist}/client/components/editor/EditorToolbar.svelte +0 -0
  359. /package/{src → dist}/client/components/editor/FormatSelector.svelte +0 -0
  360. /package/{src → dist}/client/components/editor/Toolbar.svelte +0 -0
  361. /package/{src → dist}/client/components/fields/ArrayField.svelte +0 -0
  362. /package/{src → dist}/client/components/fields/ArrayItem.svelte +0 -0
  363. /package/{src → dist}/client/components/fields/BooleanField.svelte +0 -0
  364. /package/{src → dist}/client/components/fields/DateField.svelte +0 -0
  365. /package/{src → dist}/client/components/fields/EnumField.svelte +0 -0
  366. /package/{src → dist}/client/components/fields/FieldWrapper.svelte +0 -0
  367. /package/{src → dist}/client/components/fields/NumberField.svelte +0 -0
  368. /package/{src → dist}/client/components/fields/ObjectField.svelte +0 -0
  369. /package/{src → dist}/client/components/fields/SchemaField.svelte +0 -0
  370. /package/{src → dist}/client/components/fields/StringField.svelte +0 -0
  371. /package/{src → dist}/client/components/sidebar/AdminSidebar.svelte +0 -0
  372. /package/{src → dist}/client/components/sidebar/AdminSidebarSort.svelte +0 -0
  373. /package/{src → dist}/client/css/a11y.css +0 -0
  374. /package/{src → dist}/client/css/btn.css +0 -0
  375. /package/{src → dist}/client/css/dialog.css +0 -0
  376. /package/{src → dist}/client/css/field-input.css +0 -0
  377. /package/{src → dist}/client/css/reset.css +0 -0
  378. /package/{src → dist}/client/css/theme.css +0 -0
  379. /package/{src/client/index.ts → dist/client/index.js} +0 -0
  380. /package/{src → dist}/virtual.d.ts +0 -0
@@ -1,8 +0,0 @@
1
- {
2
- "name": "Jane Doe",
3
- "bio": "Technical writer and web developer.",
4
- "social": {
5
- "github": "janedoe",
6
- "twitter": "janedoe"
7
- }
8
- }
@@ -1,2 +0,0 @@
1
- name = "production"
2
- debug = false
@@ -1,29 +0,0 @@
1
- {
2
- "title": "Web Fundamentals",
3
- "instructor": {
4
- "name": "Dr. Smith",
5
- "credentials": [
6
- {
7
- "institution": "MIT",
8
- "year": 2015
9
- }
10
- ]
11
- },
12
- "modules": [
13
- {
14
- "title": "HTML Basics",
15
- "lessons": [
16
- {
17
- "title": "Document Structure",
18
- "duration": 30,
19
- "resources": [
20
- {
21
- "type": "video",
22
- "url": "https://example.com/html-structure"
23
- }
24
- ]
25
- }
26
- ]
27
- }
28
- ]
29
- }
@@ -1,6 +0,0 @@
1
- ---
2
- title: Advanced Usage
3
- category: advanced
4
- ---
5
-
6
- This guide covers advanced topics.
@@ -1,6 +0,0 @@
1
- ---
2
- title: Introduction
3
- category: basics
4
- ---
5
-
6
- Welcome to the documentation.
@@ -1,6 +0,0 @@
1
- ---
2
- title: Getting Started
3
- order: 1
4
- ---
5
-
6
- Welcome to the **getting started** guide.
@@ -1,7 +0,0 @@
1
- ---
2
- title: Hello World
3
- date: 2026-01-15
4
- author: jane-doe
5
- ---
6
-
7
- A sample post for development testing.
@@ -1,16 +0,0 @@
1
- {
2
- "name": "Logo T-Shirt",
3
- "price": 29.99,
4
- "variants": [
5
- {
6
- "sku": "TS-BLK-M",
7
- "color": "black",
8
- "sizes": ["S", "M", "L", "XL"]
9
- },
10
- {
11
- "sku": "TS-WHT-M",
12
- "color": "white",
13
- "sizes": ["S", "M", "L"]
14
- }
15
- ]
16
- }
@@ -1,8 +0,0 @@
1
- ---
2
- title: Fluffy Pancakes
3
- servings: 4
4
- ---
5
-
6
- # Fluffy Pancakes
7
-
8
- Mix dry ingredients, add wet, cook on griddle.
@@ -1,2 +0,0 @@
1
- siteName: My Blog
2
- maxPosts: 10
@@ -1,198 +0,0 @@
1
- import { defineCollection, reference } from 'astro:content';
2
- import { glob } from 'astro/loaders';
3
- import { z } from 'astro/zod';
4
-
5
- //////////////////////////////
6
- // Content collection definitions for the playground.
7
- //
8
- // These exercise a range of schema shapes: flat fields, cross-collection references, nested objects, and deeply nested arrays of objects.
9
- //////////////////////////////
10
-
11
- // Simple flat schema with a cross-collection reference
12
- const posts = defineCollection({
13
- loader: glob({ base: './src/content/posts', pattern: '**/*.md' }),
14
- schema: z
15
- .object({
16
- title: z.string(),
17
- date: z.date(),
18
- draft: z.boolean().optional(),
19
- author: reference('authors'),
20
- })
21
- .meta({
22
- title: 'Posts',
23
- description: 'Blog posts',
24
- files: ['md'],
25
- }),
26
- });
27
-
28
- // Nested object — social has optional string fields
29
- const authors = defineCollection({
30
- loader: glob({ base: './src/content/authors', pattern: '**/*.json' }),
31
- schema: z
32
- .object({
33
- name: z.string(),
34
- bio: z.string(),
35
- social: z.object({
36
- twitter: z.string().optional(),
37
- github: z.string().optional(),
38
- website: z.string().optional(),
39
- }),
40
- })
41
- .meta({
42
- title: 'Authors',
43
- description: 'Those who write',
44
- files: ['json'],
45
- }),
46
- });
47
-
48
- // Array of nested objects, each containing a nested array
49
- const products = defineCollection({
50
- loader: glob({ base: './src/content/products', pattern: '**/*.json' }),
51
- schema: z
52
- .object({
53
- name: z.string(),
54
- price: z.number(),
55
- variants: z.array(
56
- z.object({
57
- sku: z.string(),
58
- color: z.string(),
59
- sizes: z.array(z.string()),
60
- }),
61
- ),
62
- })
63
- .meta({
64
- title: 'Products',
65
- description: 'Things to buy',
66
- files: ['json'],
67
- }),
68
- });
69
-
70
- // Deep nesting: object with array, array of objects with nested arrays of objects
71
- const courses = defineCollection({
72
- loader: glob({ base: './src/content/courses', pattern: '**/*.json' }),
73
- schema: z
74
- .object({
75
- title: z.string(),
76
- instructor: z.object({
77
- name: z.string(),
78
- credentials: z.array(
79
- z.object({
80
- institution: z.string(),
81
- year: z.number(),
82
- }),
83
- ),
84
- }),
85
- modules: z.array(
86
- z.object({
87
- title: z.string(),
88
- lessons: z.array(
89
- z.object({
90
- title: z.string(),
91
- duration: z.number(),
92
- resources: z.array(
93
- z.object({
94
- type: z.string(),
95
- url: z.string(),
96
- }),
97
- ),
98
- }),
99
- ),
100
- }),
101
- ),
102
- })
103
- .meta({
104
- title: 'Courses',
105
- description: 'Things to learn',
106
- files: ['json'],
107
- }),
108
- });
109
-
110
- // How-to guides authored in MDX
111
- const guides = defineCollection({
112
- loader: glob({ base: './src/content/guides', pattern: '**/*.mdx' }),
113
- schema: z
114
- .object({
115
- title: z.string(),
116
- order: z.number(),
117
- })
118
- .meta({
119
- title: 'Guides',
120
- description: 'How-to guides in MDX',
121
- files: ['mdx'],
122
- }),
123
- });
124
-
125
- // Cooking recipes authored in Markdoc
126
- const recipes = defineCollection({
127
- loader: glob({
128
- base: './src/content/recipes',
129
- pattern: '**/*.{mdoc,markdoc}',
130
- }),
131
- schema: z
132
- .object({
133
- title: z.string(),
134
- servings: z.number(),
135
- })
136
- .meta({
137
- title: 'Recipes',
138
- description: 'Cooking recipes in Markdoc',
139
- files: ['markdoc'],
140
- }),
141
- });
142
-
143
- // Site configuration stored as YAML
144
- const settings = defineCollection({
145
- loader: glob({ base: './src/content/settings', pattern: '**/*.{yml,yaml}' }),
146
- schema: z
147
- .object({
148
- siteName: z.string(),
149
- maxPosts: z.number(),
150
- })
151
- .meta({
152
- title: 'Settings',
153
- description: 'Site configuration in YAML',
154
- files: ['yaml'],
155
- }),
156
- });
157
-
158
- // Build configuration stored as TOML
159
- const config = defineCollection({
160
- loader: glob({ base: './src/content/config', pattern: '**/*.toml' }),
161
- schema: z
162
- .object({
163
- name: z.string(),
164
- debug: z.boolean(),
165
- })
166
- .meta({
167
- title: 'Config',
168
- description: 'Build configuration in TOML',
169
- files: ['toml'],
170
- }),
171
- });
172
-
173
- // Documentation pages supporting both MD and MDX
174
- const docs = defineCollection({
175
- loader: glob({ base: './src/content/docs', pattern: '**/*.{md,mdx}' }),
176
- schema: z
177
- .object({
178
- title: z.string(),
179
- category: z.string(),
180
- })
181
- .meta({
182
- title: 'Documentation',
183
- description: 'Docs in MD and MDX',
184
- files: ['md', 'mdx'],
185
- }),
186
- });
187
-
188
- export const collections = {
189
- posts,
190
- authors,
191
- products,
192
- courses,
193
- guides,
194
- recipes,
195
- settings,
196
- config,
197
- docs,
198
- };
@@ -1 +0,0 @@
1
- /// <reference types="nebula-cms/virtual" />
@@ -1,11 +0,0 @@
1
- <html lang="en">
2
- <head>
3
- <meta charset="utf-8" />
4
- <meta name="viewport" content="width=device-width, initial-scale=1" />
5
- <title>Nebula CMS playground</title>
6
- </head>
7
- <body>
8
- <h1>Nebula CMS</h1>
9
- <a href="/nebula">Nebula Admin Page</a>
10
- </body>
11
- </html>
@@ -1,14 +0,0 @@
1
- ---
2
- import Admin from 'nebula-cms/client';
3
- ---
4
-
5
- <html lang="en">
6
- <head>
7
- <meta charset="utf-8" />
8
- <meta name="viewport" content="width=device-width, initial-scale=1" />
9
- <title>nebula-cms playground</title>
10
- </head>
11
- <body>
12
- <Admin client:only="svelte" />
13
- </body>
14
- </html>
@@ -1,2 +0,0 @@
1
- packages:
2
- - playground
@@ -1,178 +0,0 @@
1
- /*
2
- * Fetches a subsetted Material Symbols Outlined woff2 font from Google Fonts
3
- * and inlines it as base64 in a self-contained CSS file. Run this script
4
- * whenever the icon set changes to regenerate src/client/css/icons.css.
5
- *
6
- * Usage: node scripts/subset-icons.mjs
7
- */
8
-
9
- import { writeFileSync, mkdirSync } from 'fs';
10
- import { fileURLToPath } from 'url';
11
- import { dirname, join } from 'path';
12
-
13
- //////////////////////////////
14
- // Icon set definition
15
- //////////////////////////////
16
-
17
- // Icons used across the admin UI — keep sorted alphabetically.
18
- const ICON_NAMES = [
19
- 'add',
20
- 'arrow_downward',
21
- 'arrow_upward',
22
- 'brightness_auto',
23
- 'chevron_right',
24
- 'close',
25
- 'dark_mode',
26
- 'drag_indicator',
27
- 'hourglass_arrow_down',
28
- 'hourglass_arrow_up',
29
- 'info',
30
- 'light_mode',
31
- 'logout',
32
- 'sort_by_alpha',
33
- ];
34
-
35
- //////////////////////////////
36
- // Path resolution
37
- //////////////////////////////
38
-
39
- const __filename = fileURLToPath(import.meta.url);
40
- const __dirname = dirname(__filename);
41
-
42
- // Absolute path where the generated CSS will be written.
43
- const OUTPUT_PATH = join(__dirname, '../src/client/css/icons.css');
44
-
45
- //////////////////////////////
46
- // Font fetch helpers
47
- //////////////////////////////
48
-
49
- /**
50
- * Builds the Google Fonts CSS2 API URL for the subsetted icon font.
51
- * @param {string[]} names - Sorted array of icon ligature names
52
- * @return {string} The fully-formed Google Fonts API URL
53
- */
54
- function buildFontsURL(names) {
55
- const joined = names.sort().join(',');
56
- return `https://fonts.googleapis.com/css2?family=Material+Symbols+Outlined&icon_names=${joined}&display=block`;
57
- }
58
-
59
- /**
60
- * Fetches the Google Fonts CSS stylesheet for the icon subset.
61
- * @param {string} url - The Google Fonts API URL to fetch
62
- * @return {Promise<string>} The CSS text returned by Google Fonts
63
- */
64
- async function fetchFontCSS(url) {
65
- // Spoof a modern browser UA — Google Fonts returns woff2 for modern UAs.
66
- const res = await fetch(url, {
67
- headers: {
68
- 'User-Agent':
69
- 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
70
- },
71
- });
72
-
73
- if (!res.ok) {
74
- throw new Error(
75
- `Google Fonts API returned ${res.status}: ${res.statusText}`,
76
- );
77
- }
78
-
79
- return res.text();
80
- }
81
-
82
- /**
83
- * Extracts the woff2 font binary URL from the Google Fonts CSS response.
84
- * Google Fonts returns unquoted urls in the form: url(https://fonts.gstatic.com/...)
85
- * The URL does not end in .woff2 — it is a signed CDN path — so we match on
86
- * the format hint that follows it instead.
87
- * @param {string} css - The CSS text returned by Google Fonts
88
- * @return {string} The absolute woff2 URL
89
- */
90
- function extractWoff2URL(css) {
91
- // Match unquoted url(...) followed by format('woff2')
92
- const match = css.match(/url\((https:\/\/[^)]+)\)\s+format\('woff2'\)/);
93
- if (!match) {
94
- throw new Error('Could not find woff2 URL in Google Fonts CSS response');
95
- }
96
- return match[1];
97
- }
98
-
99
- /**
100
- * Downloads the woff2 binary and returns it as a base64-encoded string.
101
- * @param {string} url - The absolute URL to the woff2 font file
102
- * @return {Promise<string>} Base64-encoded woff2 binary data
103
- */
104
- async function fetchWoff2AsBase64(url) {
105
- const res = await fetch(url);
106
-
107
- if (!res.ok) {
108
- throw new Error(
109
- `Font binary fetch returned ${res.status}: ${res.statusText}`,
110
- );
111
- }
112
-
113
- const arrayBuffer = await res.arrayBuffer();
114
- return Buffer.from(arrayBuffer).toString('base64');
115
- }
116
-
117
- //////////////////////////////
118
- // CSS generation
119
- //////////////////////////////
120
-
121
- /**
122
- * Generates the full icons.css content with an inlined base64 woff2 font.
123
- * @param {string} base64Font - The base64-encoded woff2 font data
124
- * @return {string} Complete CSS file content
125
- */
126
- function generateCSS(base64Font) {
127
- return `/* Material Symbols Outlined, Subsetted
128
- * Icons: ${ICON_NAMES.sort().join(', ')}
129
- */
130
-
131
- @font-face {
132
- font-family: 'Material Symbols Outlined';
133
- font-style: normal;
134
- font-weight: 400;
135
- font-display: block;
136
- src: url('data:font/woff2;base64,${base64Font}') format('woff2');
137
- }
138
-
139
- .icon {
140
- font-family: 'Material Symbols Outlined';
141
- font-weight: normal;
142
- font-style: normal;
143
- font-size: 1.5rem;
144
- line-height: 1;
145
- letter-spacing: normal;
146
- text-transform: none;
147
- display: inline-block;
148
- white-space: nowrap;
149
- word-wrap: normal;
150
- direction: ltr;
151
- -webkit-font-smoothing: antialiased;
152
- text-rendering: optimizeLegibility;
153
- -moz-osx-font-smoothing: grayscale;
154
- font-feature-settings: 'liga';
155
- }
156
- `;
157
- }
158
-
159
- //////////////////////////////
160
- // Entry point
161
- //////////////////////////////
162
-
163
- const fontsURL = buildFontsURL(ICON_NAMES);
164
- console.log(`Fetching icon subset CSS from Google Fonts...`);
165
- console.log(`URL: ${fontsURL}`);
166
-
167
- const fontCSS = await fetchFontCSS(fontsURL);
168
- const woff2URL = extractWoff2URL(fontCSS);
169
- console.log(`Found woff2 URL: ${woff2URL}`);
170
-
171
- console.log(`Downloading woff2 binary...`);
172
- const base64Font = await fetchWoff2AsBase64(woff2URL);
173
- console.log(`Base64-encoded font: ${base64Font.length} characters`);
174
-
175
- const css = generateCSS(base64Font);
176
- mkdirSync(dirname(OUTPUT_PATH), { recursive: true });
177
- writeFileSync(OUTPUT_PATH, css, 'utf8');
178
- console.log(`Written to: ${OUTPUT_PATH}`);