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.
Files changed (381) hide show
  1. package/README.md +3 -1
  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/{src → dist}/client/Admin.svelte +20 -11
  6. package/dist/client/Admin.svelte.d.ts +11 -0
  7. package/dist/client/Admin.svelte.d.ts.map +1 -0
  8. package/dist/client/components/BackendPicker.svelte.d.ts +4 -0
  9. package/dist/client/components/BackendPicker.svelte.d.ts.map +1 -0
  10. package/dist/client/components/DraftChip.svelte.d.ts +10 -0
  11. package/dist/client/components/DraftChip.svelte.d.ts.map +1 -0
  12. package/dist/client/components/MetadataForm.svelte.d.ts +12 -0
  13. package/dist/client/components/MetadataForm.svelte.d.ts.map +1 -0
  14. package/dist/client/components/ThemeToggle.svelte.d.ts +19 -0
  15. package/dist/client/components/ThemeToggle.svelte.d.ts.map +1 -0
  16. package/dist/client/components/dialogs/DeleteDraftDialog.svelte.d.ts +11 -0
  17. package/dist/client/components/dialogs/DeleteDraftDialog.svelte.d.ts.map +1 -0
  18. package/{src → dist}/client/components/dialogs/FilenameDialog.svelte +1 -2
  19. package/dist/client/components/dialogs/FilenameDialog.svelte.d.ts +13 -0
  20. package/dist/client/components/dialogs/FilenameDialog.svelte.d.ts.map +1 -0
  21. package/dist/client/components/editor/EditorPane.svelte.d.ts +4 -0
  22. package/dist/client/components/editor/EditorPane.svelte.d.ts.map +1 -0
  23. package/dist/client/components/editor/EditorTabs.svelte.d.ts +8 -0
  24. package/dist/client/components/editor/EditorTabs.svelte.d.ts.map +1 -0
  25. package/dist/client/components/editor/EditorToolbar.svelte.d.ts +4 -0
  26. package/dist/client/components/editor/EditorToolbar.svelte.d.ts.map +1 -0
  27. package/dist/client/components/editor/FormatSelector.svelte.d.ts +4 -0
  28. package/dist/client/components/editor/FormatSelector.svelte.d.ts.map +1 -0
  29. package/dist/client/components/editor/Toolbar.svelte.d.ts +19 -0
  30. package/dist/client/components/editor/Toolbar.svelte.d.ts.map +1 -0
  31. package/dist/client/components/fields/ArrayField.svelte.d.ts +15 -0
  32. package/dist/client/components/fields/ArrayField.svelte.d.ts.map +1 -0
  33. package/dist/client/components/fields/ArrayItem.svelte.d.ts +28 -0
  34. package/dist/client/components/fields/ArrayItem.svelte.d.ts.map +1 -0
  35. package/dist/client/components/fields/BooleanField.svelte.d.ts +16 -0
  36. package/dist/client/components/fields/BooleanField.svelte.d.ts.map +1 -0
  37. package/dist/client/components/fields/DateField.svelte.d.ts +16 -0
  38. package/dist/client/components/fields/DateField.svelte.d.ts.map +1 -0
  39. package/dist/client/components/fields/EnumField.svelte.d.ts +17 -0
  40. package/dist/client/components/fields/EnumField.svelte.d.ts.map +1 -0
  41. package/dist/client/components/fields/FieldWrapper.svelte.d.ts +18 -0
  42. package/dist/client/components/fields/FieldWrapper.svelte.d.ts.map +1 -0
  43. package/dist/client/components/fields/NumberField.svelte.d.ts +16 -0
  44. package/dist/client/components/fields/NumberField.svelte.d.ts.map +1 -0
  45. package/dist/client/components/fields/ObjectField.svelte.d.ts +16 -0
  46. package/dist/client/components/fields/ObjectField.svelte.d.ts.map +1 -0
  47. package/dist/client/components/fields/SchemaField.svelte.d.ts +16 -0
  48. package/dist/client/components/fields/SchemaField.svelte.d.ts.map +1 -0
  49. package/dist/client/components/fields/StringField.svelte.d.ts +16 -0
  50. package/dist/client/components/fields/StringField.svelte.d.ts.map +1 -0
  51. package/{src → dist}/client/components/sidebar/AdminSidebar.svelte +2 -4
  52. package/dist/client/components/sidebar/AdminSidebar.svelte.d.ts +19 -0
  53. package/dist/client/components/sidebar/AdminSidebar.svelte.d.ts.map +1 -0
  54. package/dist/client/components/sidebar/AdminSidebarSort.svelte.d.ts +12 -0
  55. package/dist/client/components/sidebar/AdminSidebarSort.svelte.d.ts.map +1 -0
  56. package/dist/client/css/icons.css +29 -0
  57. package/dist/client/index.d.ts +2 -0
  58. package/dist/client/index.d.ts.map +1 -0
  59. package/dist/client/js/drafts/merge.svelte.d.ts +24 -0
  60. package/dist/client/js/drafts/merge.svelte.d.ts.map +1 -0
  61. package/dist/client/js/drafts/merge.svelte.js +106 -0
  62. package/dist/client/js/drafts/ops.svelte.d.ts +31 -0
  63. package/dist/client/js/drafts/ops.svelte.d.ts.map +1 -0
  64. package/dist/client/js/drafts/ops.svelte.js +182 -0
  65. package/dist/client/js/drafts/storage.d.ts +45 -0
  66. package/dist/client/js/drafts/storage.d.ts.map +1 -0
  67. package/dist/client/js/drafts/storage.js +76 -0
  68. package/dist/client/js/drafts/workers/diff.d.ts +2 -0
  69. package/dist/client/js/drafts/workers/diff.d.ts.map +1 -0
  70. package/dist/client/js/drafts/workers/diff.js +20 -0
  71. package/dist/client/js/editor/editor.svelte.d.ts +124 -0
  72. package/dist/client/js/editor/editor.svelte.d.ts.map +1 -0
  73. package/dist/client/js/editor/editor.svelte.js +294 -0
  74. package/dist/client/js/editor/languages.d.ts +11 -0
  75. package/dist/client/js/editor/languages.d.ts.map +1 -0
  76. package/dist/client/js/editor/languages.js +93 -0
  77. package/dist/client/js/editor/link-wrap.d.ts +6 -0
  78. package/dist/client/js/editor/link-wrap.d.ts.map +1 -0
  79. package/{src/client/js/editor/link-wrap.ts → dist/client/js/editor/link-wrap.js} +17 -24
  80. package/dist/client/js/editor/markdown-shortcuts.d.ts +4 -0
  81. package/dist/client/js/editor/markdown-shortcuts.d.ts.map +1 -0
  82. package/dist/client/js/editor/markdown-shortcuts.js +219 -0
  83. package/dist/client/js/handlers/admin.d.ts +64 -0
  84. package/dist/client/js/handlers/admin.d.ts.map +1 -0
  85. package/dist/client/js/handlers/admin.js +186 -0
  86. package/dist/client/js/state/dialogs.svelte.d.ts +16 -0
  87. package/dist/client/js/state/dialogs.svelte.d.ts.map +1 -0
  88. package/dist/client/js/state/dialogs.svelte.js +28 -0
  89. package/dist/client/js/state/router.svelte.d.ts +44 -0
  90. package/dist/client/js/state/router.svelte.d.ts.map +1 -0
  91. package/dist/client/js/state/router.svelte.js +141 -0
  92. package/dist/client/js/state/schema.svelte.d.ts +51 -0
  93. package/dist/client/js/state/schema.svelte.d.ts.map +1 -0
  94. package/{src/client/js/state/schema.svelte.ts → dist/client/js/state/schema.svelte.js} +55 -70
  95. package/dist/client/js/state/state.svelte.d.ts +68 -0
  96. package/dist/client/js/state/state.svelte.d.ts.map +1 -0
  97. package/dist/client/js/state/state.svelte.js +300 -0
  98. package/dist/client/js/state/theme.svelte.d.ts +24 -0
  99. package/dist/client/js/state/theme.svelte.d.ts.map +1 -0
  100. package/{src/client/js/state/theme.svelte.ts → dist/client/js/state/theme.svelte.js} +54 -91
  101. package/dist/client/js/storage/adapter.d.ts +130 -0
  102. package/dist/client/js/storage/adapter.d.ts.map +1 -0
  103. package/dist/client/js/storage/adapter.js +5 -0
  104. package/dist/client/js/storage/client.d.ts +72 -0
  105. package/dist/client/js/storage/client.d.ts.map +1 -0
  106. package/dist/client/js/storage/client.js +121 -0
  107. package/dist/client/js/storage/db.d.ts +8 -0
  108. package/dist/client/js/storage/db.d.ts.map +1 -0
  109. package/dist/client/js/storage/db.js +35 -0
  110. package/dist/client/js/storage/fsa.d.ts +51 -0
  111. package/dist/client/js/storage/fsa.d.ts.map +1 -0
  112. package/dist/client/js/storage/fsa.js +91 -0
  113. package/dist/client/js/storage/github.d.ts +62 -0
  114. package/dist/client/js/storage/github.d.ts.map +1 -0
  115. package/dist/client/js/storage/github.js +216 -0
  116. package/dist/client/js/storage/storage.d.ts +32 -0
  117. package/dist/client/js/storage/storage.d.ts.map +1 -0
  118. package/dist/client/js/storage/storage.js +68 -0
  119. package/dist/client/js/storage/workers/frontmatter.d.ts +2 -0
  120. package/dist/client/js/storage/workers/frontmatter.d.ts.map +1 -0
  121. package/dist/client/js/storage/workers/frontmatter.js +253 -0
  122. package/dist/client/js/storage/workers/storage.d.ts +2 -0
  123. package/dist/client/js/storage/workers/storage.d.ts.map +1 -0
  124. package/dist/client/js/storage/workers/storage.js +167 -0
  125. package/dist/client/js/storage/workers/toml-parser.d.ts +2 -0
  126. package/dist/client/js/storage/workers/toml-parser.d.ts.map +1 -0
  127. package/dist/client/js/storage/workers/toml-parser.js +75 -0
  128. package/dist/client/js/storage/workers/yaml-parser.d.ts +2 -0
  129. package/dist/client/js/storage/workers/yaml-parser.d.ts.map +1 -0
  130. package/dist/client/js/storage/workers/yaml-parser.js +100 -0
  131. package/dist/client/js/utils/file-types.d.ts +58 -0
  132. package/dist/client/js/utils/file-types.d.ts.map +1 -0
  133. package/{src/client/js/utils/file-types.ts → dist/client/js/utils/file-types.js} +75 -107
  134. package/dist/client/js/utils/format.d.ts +8 -0
  135. package/dist/client/js/utils/format.d.ts.map +1 -0
  136. package/{src/client/js/utils/format.ts → dist/client/js/utils/format.js} +5 -6
  137. package/dist/client/js/utils/frontmatter.d.ts +12 -0
  138. package/dist/client/js/utils/frontmatter.d.ts.map +1 -0
  139. package/dist/client/js/utils/frontmatter.js +29 -0
  140. package/dist/client/js/utils/schema-utils.d.ts +110 -0
  141. package/dist/client/js/utils/schema-utils.d.ts.map +1 -0
  142. package/dist/client/js/utils/schema-utils.js +242 -0
  143. package/dist/client/js/utils/slug.d.ts +8 -0
  144. package/dist/client/js/utils/slug.d.ts.map +1 -0
  145. package/{src/client/js/utils/slug.ts → dist/client/js/utils/slug.js} +6 -7
  146. package/dist/client/js/utils/sort.d.ts +41 -0
  147. package/dist/client/js/utils/sort.d.ts.map +1 -0
  148. package/dist/client/js/utils/sort.js +65 -0
  149. package/dist/client/js/utils/stable-stringify.d.ts +8 -0
  150. package/dist/client/js/utils/stable-stringify.d.ts.map +1 -0
  151. package/dist/client/js/utils/stable-stringify.js +23 -0
  152. package/dist/client/js/utils/url-utils.d.ts +11 -0
  153. package/dist/client/js/utils/url-utils.d.ts.map +1 -0
  154. package/{src/client/js/utils/url-utils.ts → dist/client/js/utils/url-utils.js} +22 -23
  155. package/dist/client/types/browser-apis.d.ts +39 -0
  156. package/dist/types.d.ts +22 -0
  157. package/dist/types.d.ts.map +1 -0
  158. package/dist/types.js +1 -0
  159. package/package.json +13 -3
  160. package/.github/workflows/ci.yml +0 -27
  161. package/.github/workflows/publish.yml +0 -34
  162. package/.mcp.json +0 -12
  163. package/.prettierignore +0 -5
  164. package/.prettierrc.cjs +0 -22
  165. package/AGENTS.md +0 -183
  166. package/playground/astro.config.mjs +0 -7
  167. package/playground/node_modules/.bin/astro +0 -21
  168. package/playground/node_modules/.vite/deps/@astrojs_svelte_client__js.js +0 -85
  169. package/playground/node_modules/.vite/deps/@astrojs_svelte_client__js.js.map +0 -7
  170. package/playground/node_modules/.vite/deps/_metadata.json +0 -184
  171. package/playground/node_modules/.vite/deps/astro___aria-query.js +0 -6776
  172. package/playground/node_modules/.vite/deps/astro___aria-query.js.map +0 -7
  173. package/playground/node_modules/.vite/deps/astro___axobject-query.js +0 -3754
  174. package/playground/node_modules/.vite/deps/astro___axobject-query.js.map +0 -7
  175. package/playground/node_modules/.vite/deps/astro___html-escaper.js +0 -34
  176. package/playground/node_modules/.vite/deps/astro___html-escaper.js.map +0 -7
  177. package/playground/node_modules/.vite/deps/chunk-AJXJMYAF.js +0 -0
  178. package/playground/node_modules/.vite/deps/chunk-AJXJMYAF.js.map +0 -7
  179. package/playground/node_modules/.vite/deps/chunk-BUSYA2B4.js +0 -8
  180. package/playground/node_modules/.vite/deps/chunk-BUSYA2B4.js.map +0 -7
  181. package/playground/node_modules/.vite/deps/chunk-CNYJBM5F.js +0 -21
  182. package/playground/node_modules/.vite/deps/chunk-CNYJBM5F.js.map +0 -7
  183. package/playground/node_modules/.vite/deps/chunk-DBPNBGEI.js +0 -223
  184. package/playground/node_modules/.vite/deps/chunk-DBPNBGEI.js.map +0 -7
  185. package/playground/node_modules/.vite/deps/chunk-FPEUJ7DG.js +0 -27
  186. package/playground/node_modules/.vite/deps/chunk-FPEUJ7DG.js.map +0 -7
  187. package/playground/node_modules/.vite/deps/chunk-MHDZ3SK7.js +0 -1005
  188. package/playground/node_modules/.vite/deps/chunk-MHDZ3SK7.js.map +0 -7
  189. package/playground/node_modules/.vite/deps/chunk-RBDTDTPY.js +0 -204
  190. package/playground/node_modules/.vite/deps/chunk-RBDTDTPY.js.map +0 -7
  191. package/playground/node_modules/.vite/deps/chunk-RJGEXL5C.js +0 -688
  192. package/playground/node_modules/.vite/deps/chunk-RJGEXL5C.js.map +0 -7
  193. package/playground/node_modules/.vite/deps/chunk-YL4MIWGJ.js +0 -5099
  194. package/playground/node_modules/.vite/deps/chunk-YL4MIWGJ.js.map +0 -7
  195. package/playground/node_modules/.vite/deps/chunk-ZOV3DWEJ.js +0 -4376
  196. package/playground/node_modules/.vite/deps/chunk-ZOV3DWEJ.js.map +0 -7
  197. package/playground/node_modules/.vite/deps/chunk-ZP4UNCSN.js +0 -23
  198. package/playground/node_modules/.vite/deps/chunk-ZP4UNCSN.js.map +0 -7
  199. package/playground/node_modules/.vite/deps/chunk-ZREFNRZZ.js +0 -148
  200. package/playground/node_modules/.vite/deps/chunk-ZREFNRZZ.js.map +0 -7
  201. package/playground/node_modules/.vite/deps/package.json +0 -3
  202. package/playground/node_modules/.vite/deps/smol-toml.js +0 -843
  203. package/playground/node_modules/.vite/deps/smol-toml.js.map +0 -7
  204. package/playground/node_modules/.vite/deps/svelte.js +0 -55
  205. package/playground/node_modules/.vite/deps/svelte.js.map +0 -7
  206. package/playground/node_modules/.vite/deps/svelte___clsx.js +0 -9
  207. package/playground/node_modules/.vite/deps/svelte___clsx.js.map +0 -7
  208. package/playground/node_modules/.vite/deps/svelte_animate.js +0 -57
  209. package/playground/node_modules/.vite/deps/svelte_animate.js.map +0 -7
  210. package/playground/node_modules/.vite/deps/svelte_attachments.js +0 -15
  211. package/playground/node_modules/.vite/deps/svelte_attachments.js.map +0 -7
  212. package/playground/node_modules/.vite/deps/svelte_easing.js +0 -67
  213. package/playground/node_modules/.vite/deps/svelte_easing.js.map +0 -7
  214. package/playground/node_modules/.vite/deps/svelte_events.js +0 -11
  215. package/playground/node_modules/.vite/deps/svelte_events.js.map +0 -7
  216. package/playground/node_modules/.vite/deps/svelte_internal.js +0 -5
  217. package/playground/node_modules/.vite/deps/svelte_internal.js.map +0 -7
  218. package/playground/node_modules/.vite/deps/svelte_internal_client.js +0 -402
  219. package/playground/node_modules/.vite/deps/svelte_internal_client.js.map +0 -7
  220. package/playground/node_modules/.vite/deps/svelte_internal_disclose-version.js +0 -10
  221. package/playground/node_modules/.vite/deps/svelte_internal_disclose-version.js.map +0 -7
  222. package/playground/node_modules/.vite/deps/svelte_internal_flags_async.js +0 -8
  223. package/playground/node_modules/.vite/deps/svelte_internal_flags_async.js.map +0 -7
  224. package/playground/node_modules/.vite/deps/svelte_internal_flags_legacy.js +0 -8
  225. package/playground/node_modules/.vite/deps/svelte_internal_flags_legacy.js.map +0 -7
  226. package/playground/node_modules/.vite/deps/svelte_internal_flags_tracing.js +0 -8
  227. package/playground/node_modules/.vite/deps/svelte_internal_flags_tracing.js.map +0 -7
  228. package/playground/node_modules/.vite/deps/svelte_legacy.js +0 -35
  229. package/playground/node_modules/.vite/deps/svelte_legacy.js.map +0 -7
  230. package/playground/node_modules/.vite/deps/svelte_motion.js +0 -545
  231. package/playground/node_modules/.vite/deps/svelte_motion.js.map +0 -7
  232. package/playground/node_modules/.vite/deps/svelte_reactivity.js +0 -29
  233. package/playground/node_modules/.vite/deps/svelte_reactivity.js.map +0 -7
  234. package/playground/node_modules/.vite/deps/svelte_reactivity_window.js +0 -127
  235. package/playground/node_modules/.vite/deps/svelte_reactivity_window.js.map +0 -7
  236. package/playground/node_modules/.vite/deps/svelte_store.js +0 -103
  237. package/playground/node_modules/.vite/deps/svelte_store.js.map +0 -7
  238. package/playground/node_modules/.vite/deps/svelte_transition.js +0 -208
  239. package/playground/node_modules/.vite/deps/svelte_transition.js.map +0 -7
  240. package/playground/package.json +0 -16
  241. package/playground/pnpm-lock.yaml +0 -3167
  242. package/playground/src/content/authors/jane-doe.json +0 -8
  243. package/playground/src/content/config/build.toml +0 -2
  244. package/playground/src/content/courses/web-fundamentals.json +0 -29
  245. package/playground/src/content/docs/advanced.mdx +0 -6
  246. package/playground/src/content/docs/intro.md +0 -6
  247. package/playground/src/content/guides/getting-started.mdx +0 -6
  248. package/playground/src/content/posts/hello-world.md +0 -7
  249. package/playground/src/content/products/t-shirt.json +0 -16
  250. package/playground/src/content/recipes/pancakes.mdoc +0 -8
  251. package/playground/src/content/settings/site.yml +0 -2
  252. package/playground/src/content.config.ts +0 -198
  253. package/playground/src/env.d.ts +0 -1
  254. package/playground/src/pages/index.astro +0 -11
  255. package/playground/src/pages/nebula.astro +0 -14
  256. package/pnpm-workspace.yaml +0 -2
  257. package/scripts/subset-icons.mjs +0 -178
  258. package/src/astro/index.ts +0 -295
  259. package/src/client/js/drafts/merge.svelte.ts +0 -121
  260. package/src/client/js/drafts/ops.svelte.ts +0 -227
  261. package/src/client/js/drafts/storage.ts +0 -108
  262. package/src/client/js/drafts/workers/diff.ts +0 -40
  263. package/src/client/js/editor/editor.svelte.ts +0 -343
  264. package/src/client/js/editor/languages.ts +0 -98
  265. package/src/client/js/editor/markdown-shortcuts.ts +0 -261
  266. package/src/client/js/handlers/admin.ts +0 -246
  267. package/src/client/js/state/dialogs.svelte.ts +0 -35
  268. package/src/client/js/state/router.svelte.ts +0 -156
  269. package/src/client/js/state/state.svelte.ts +0 -334
  270. package/src/client/js/storage/adapter.ts +0 -102
  271. package/src/client/js/storage/client.ts +0 -150
  272. package/src/client/js/storage/db.ts +0 -36
  273. package/src/client/js/storage/fsa.ts +0 -110
  274. package/src/client/js/storage/github.ts +0 -297
  275. package/src/client/js/storage/storage.ts +0 -83
  276. package/src/client/js/storage/workers/frontmatter.ts +0 -320
  277. package/src/client/js/storage/workers/storage.ts +0 -177
  278. package/src/client/js/storage/workers/toml-parser.ts +0 -106
  279. package/src/client/js/storage/workers/yaml-parser.ts +0 -132
  280. package/src/client/js/utils/frontmatter.ts +0 -38
  281. package/src/client/js/utils/schema-utils.ts +0 -295
  282. package/src/client/js/utils/sort.ts +0 -84
  283. package/src/client/js/utils/stable-stringify.ts +0 -27
  284. package/src/types.ts +0 -25
  285. package/svelte.config.js +0 -4
  286. package/tests/astro/build.test.ts +0 -63
  287. package/tests/astro/index.test.ts +0 -689
  288. package/tests/client/components/Admin.test.ts +0 -446
  289. package/tests/client/components/BackendPicker.test.ts +0 -239
  290. package/tests/client/components/DraftChip.test.ts +0 -53
  291. package/tests/client/components/MetadataForm.test.ts +0 -164
  292. package/tests/client/components/dialogs/DeleteDraftDialog.test.ts +0 -91
  293. package/tests/client/components/dialogs/FilenameDialog.test.ts +0 -209
  294. package/tests/client/components/dialogs/dialog-stubs.ts +0 -19
  295. package/tests/client/components/editor/EditorPane.test.ts +0 -100
  296. package/tests/client/components/editor/EditorTabs.test.ts +0 -253
  297. package/tests/client/components/editor/EditorToolbar.test.ts +0 -252
  298. package/tests/client/components/editor/fixtures.ts +0 -31
  299. package/tests/client/components/fields/ArrayField.test.ts +0 -197
  300. package/tests/client/components/fields/BooleanField.test.ts +0 -206
  301. package/tests/client/components/fields/DateField.test.ts +0 -210
  302. package/tests/client/components/fields/EnumField.test.ts +0 -246
  303. package/tests/client/components/fields/NumberField.test.ts +0 -240
  304. package/tests/client/components/fields/ObjectField.test.ts +0 -157
  305. package/tests/client/components/fields/SchemaField.test.ts +0 -190
  306. package/tests/client/components/fields/StringField.test.ts +0 -223
  307. package/tests/client/components/sidebar/AdminSidebar.test.ts +0 -285
  308. package/tests/client/components/sidebar/AdminSidebarSort.test.ts +0 -135
  309. package/tests/client/components/sidebar/sort-mock.ts +0 -23
  310. package/tests/client/js/drafts/fixtures.ts +0 -22
  311. package/tests/client/js/drafts/merge.test.ts +0 -282
  312. package/tests/client/js/drafts/ops.test.ts +0 -658
  313. package/tests/client/js/drafts/storage.test.ts +0 -200
  314. package/tests/client/js/drafts/workers/diff.test.ts +0 -165
  315. package/tests/client/js/editor/editor.test.ts +0 -616
  316. package/tests/client/js/editor/link-wrap.test.ts +0 -225
  317. package/tests/client/js/editor/markdown-shortcuts.test.ts +0 -370
  318. package/tests/client/js/handlers/admin.test.ts +0 -467
  319. package/tests/client/js/state/router.test.ts +0 -619
  320. package/tests/client/js/state/schema.test.ts +0 -266
  321. package/tests/client/js/state/state.test.ts +0 -328
  322. package/tests/client/js/storage/adapter.test.ts +0 -115
  323. package/tests/client/js/storage/client.test.ts +0 -250
  324. package/tests/client/js/storage/db.test.ts +0 -59
  325. package/tests/client/js/storage/fsa.test.ts +0 -284
  326. package/tests/client/js/storage/github.test.ts +0 -349
  327. package/tests/client/js/storage/mock-port.ts +0 -95
  328. package/tests/client/js/storage/storage.test.ts +0 -77
  329. package/tests/client/js/storage/workers/frontmatter.test.ts +0 -479
  330. package/tests/client/js/storage/workers/storage.test.ts +0 -299
  331. package/tests/client/js/storage/workers/toml-parser.test.ts +0 -169
  332. package/tests/client/js/storage/workers/yaml-parser.test.ts +0 -168
  333. package/tests/client/js/utils/file-types.test.ts +0 -268
  334. package/tests/client/js/utils/frontmatter.test.ts +0 -87
  335. package/tests/client/js/utils/schema-utils.test.ts +0 -318
  336. package/tests/client/js/utils/slug.test.ts +0 -58
  337. package/tests/client/js/utils/sort.test.ts +0 -276
  338. package/tests/client/js/utils/stable-stringify.test.ts +0 -68
  339. package/tests/client/js/utils/url-utils.test.ts +0 -70
  340. package/tests/e2e/backend-connection.test.ts +0 -301
  341. package/tests/e2e/draft-lifecycle.test.ts +0 -388
  342. package/tests/e2e/editing.test.ts +0 -355
  343. package/tests/e2e/github-adapter.test.ts +0 -330
  344. package/tests/e2e/helpers/mock-adapter.ts +0 -166
  345. package/tests/e2e/helpers/test-app.ts +0 -155
  346. package/tests/e2e/navigation.test.ts +0 -358
  347. package/tests/e2e/publishing.test.ts +0 -345
  348. package/tests/e2e/unsaved-changes.test.ts +0 -317
  349. package/tests/setup.ts +0 -2
  350. package/tests/stubs/codemirror.ts +0 -197
  351. package/tsconfig.json +0 -19
  352. package/vitest.config.ts +0 -178
  353. /package/{src → dist}/client/components/BackendPicker.svelte +0 -0
  354. /package/{src → dist}/client/components/DraftChip.svelte +0 -0
  355. /package/{src → dist}/client/components/MetadataForm.svelte +0 -0
  356. /package/{src → dist}/client/components/ThemeToggle.svelte +0 -0
  357. /package/{src → dist}/client/components/dialogs/DeleteDraftDialog.svelte +0 -0
  358. /package/{src → dist}/client/components/editor/EditorPane.svelte +0 -0
  359. /package/{src → dist}/client/components/editor/EditorTabs.svelte +0 -0
  360. /package/{src → dist}/client/components/editor/EditorToolbar.svelte +0 -0
  361. /package/{src → dist}/client/components/editor/FormatSelector.svelte +0 -0
  362. /package/{src → dist}/client/components/editor/Toolbar.svelte +0 -0
  363. /package/{src → dist}/client/components/fields/ArrayField.svelte +0 -0
  364. /package/{src → dist}/client/components/fields/ArrayItem.svelte +0 -0
  365. /package/{src → dist}/client/components/fields/BooleanField.svelte +0 -0
  366. /package/{src → dist}/client/components/fields/DateField.svelte +0 -0
  367. /package/{src → dist}/client/components/fields/EnumField.svelte +0 -0
  368. /package/{src → dist}/client/components/fields/FieldWrapper.svelte +0 -0
  369. /package/{src → dist}/client/components/fields/NumberField.svelte +0 -0
  370. /package/{src → dist}/client/components/fields/ObjectField.svelte +0 -0
  371. /package/{src → dist}/client/components/fields/SchemaField.svelte +0 -0
  372. /package/{src → dist}/client/components/fields/StringField.svelte +0 -0
  373. /package/{src → dist}/client/components/sidebar/AdminSidebarSort.svelte +0 -0
  374. /package/{src → dist}/client/css/a11y.css +0 -0
  375. /package/{src → dist}/client/css/btn.css +0 -0
  376. /package/{src → dist}/client/css/dialog.css +0 -0
  377. /package/{src → dist}/client/css/field-input.css +0 -0
  378. /package/{src → dist}/client/css/reset.css +0 -0
  379. /package/{src → dist}/client/css/theme.css +0 -0
  380. /package/{src/client/index.ts → dist/client/index.js} +0 -0
  381. /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}`);