nebula-cms 0.1.0 → 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 (386) 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 +8 -1
  156. package/.claude/settings.local.json +0 -42
  157. package/.github/workflows/ci.yml +0 -31
  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/.claude/settings.local.json +0 -5
  163. package/playground/astro.config.mjs +0 -7
  164. package/playground/node_modules/.bin/astro +0 -21
  165. package/playground/node_modules/.bin/rollup +0 -21
  166. package/playground/node_modules/.bin/tsc +0 -21
  167. package/playground/node_modules/.bin/tsserver +0 -21
  168. package/playground/node_modules/.bin/vite +0 -21
  169. package/playground/node_modules/.vite/_svelte_metadata.json +0 -1
  170. package/playground/node_modules/.vite/deps/@astrojs_svelte_client__js.js +0 -80
  171. package/playground/node_modules/.vite/deps/@astrojs_svelte_client__js.js.map +0 -7
  172. package/playground/node_modules/.vite/deps/_metadata.json +0 -184
  173. package/playground/node_modules/.vite/deps/astro___aria-query.js +0 -6776
  174. package/playground/node_modules/.vite/deps/astro___aria-query.js.map +0 -7
  175. package/playground/node_modules/.vite/deps/astro___axobject-query.js +0 -3754
  176. package/playground/node_modules/.vite/deps/astro___axobject-query.js.map +0 -7
  177. package/playground/node_modules/.vite/deps/astro___html-escaper.js +0 -34
  178. package/playground/node_modules/.vite/deps/astro___html-escaper.js.map +0 -7
  179. package/playground/node_modules/.vite/deps/chunk-AJXJMYAF.js +0 -0
  180. package/playground/node_modules/.vite/deps/chunk-AJXJMYAF.js.map +0 -7
  181. package/playground/node_modules/.vite/deps/chunk-ALJIOON6.js +0 -1005
  182. package/playground/node_modules/.vite/deps/chunk-ALJIOON6.js.map +0 -7
  183. package/playground/node_modules/.vite/deps/chunk-BUSYA2B4.js +0 -8
  184. package/playground/node_modules/.vite/deps/chunk-BUSYA2B4.js.map +0 -7
  185. package/playground/node_modules/.vite/deps/chunk-CNYJBM5F.js +0 -21
  186. package/playground/node_modules/.vite/deps/chunk-CNYJBM5F.js.map +0 -7
  187. package/playground/node_modules/.vite/deps/chunk-DBPNBGEI.js +0 -223
  188. package/playground/node_modules/.vite/deps/chunk-DBPNBGEI.js.map +0 -7
  189. package/playground/node_modules/.vite/deps/chunk-G3C2FXJT.js +0 -204
  190. package/playground/node_modules/.vite/deps/chunk-G3C2FXJT.js.map +0 -7
  191. package/playground/node_modules/.vite/deps/chunk-GKDKFWC5.js +0 -27
  192. package/playground/node_modules/.vite/deps/chunk-GKDKFWC5.js.map +0 -7
  193. package/playground/node_modules/.vite/deps/chunk-HNCLEOC5.js +0 -4376
  194. package/playground/node_modules/.vite/deps/chunk-HNCLEOC5.js.map +0 -7
  195. package/playground/node_modules/.vite/deps/chunk-JICYXBFU.js +0 -688
  196. package/playground/node_modules/.vite/deps/chunk-JICYXBFU.js.map +0 -7
  197. package/playground/node_modules/.vite/deps/chunk-KCUTL6DD.js +0 -5099
  198. package/playground/node_modules/.vite/deps/chunk-KCUTL6DD.js.map +0 -7
  199. package/playground/node_modules/.vite/deps/chunk-ZP4UNCSN.js +0 -23
  200. package/playground/node_modules/.vite/deps/chunk-ZP4UNCSN.js.map +0 -7
  201. package/playground/node_modules/.vite/deps/chunk-ZREFNRZZ.js +0 -148
  202. package/playground/node_modules/.vite/deps/chunk-ZREFNRZZ.js.map +0 -7
  203. package/playground/node_modules/.vite/deps/package.json +0 -3
  204. package/playground/node_modules/.vite/deps/smol-toml.js +0 -843
  205. package/playground/node_modules/.vite/deps/smol-toml.js.map +0 -7
  206. package/playground/node_modules/.vite/deps/svelte.js +0 -55
  207. package/playground/node_modules/.vite/deps/svelte.js.map +0 -7
  208. package/playground/node_modules/.vite/deps/svelte___clsx.js +0 -9
  209. package/playground/node_modules/.vite/deps/svelte___clsx.js.map +0 -7
  210. package/playground/node_modules/.vite/deps/svelte_animate.js +0 -57
  211. package/playground/node_modules/.vite/deps/svelte_animate.js.map +0 -7
  212. package/playground/node_modules/.vite/deps/svelte_attachments.js +0 -15
  213. package/playground/node_modules/.vite/deps/svelte_attachments.js.map +0 -7
  214. package/playground/node_modules/.vite/deps/svelte_easing.js +0 -67
  215. package/playground/node_modules/.vite/deps/svelte_easing.js.map +0 -7
  216. package/playground/node_modules/.vite/deps/svelte_events.js +0 -11
  217. package/playground/node_modules/.vite/deps/svelte_events.js.map +0 -7
  218. package/playground/node_modules/.vite/deps/svelte_internal.js +0 -5
  219. package/playground/node_modules/.vite/deps/svelte_internal.js.map +0 -7
  220. package/playground/node_modules/.vite/deps/svelte_internal_client.js +0 -402
  221. package/playground/node_modules/.vite/deps/svelte_internal_client.js.map +0 -7
  222. package/playground/node_modules/.vite/deps/svelte_internal_disclose-version.js +0 -10
  223. package/playground/node_modules/.vite/deps/svelte_internal_disclose-version.js.map +0 -7
  224. package/playground/node_modules/.vite/deps/svelte_internal_flags_async.js +0 -8
  225. package/playground/node_modules/.vite/deps/svelte_internal_flags_async.js.map +0 -7
  226. package/playground/node_modules/.vite/deps/svelte_internal_flags_legacy.js +0 -8
  227. package/playground/node_modules/.vite/deps/svelte_internal_flags_legacy.js.map +0 -7
  228. package/playground/node_modules/.vite/deps/svelte_internal_flags_tracing.js +0 -8
  229. package/playground/node_modules/.vite/deps/svelte_internal_flags_tracing.js.map +0 -7
  230. package/playground/node_modules/.vite/deps/svelte_legacy.js +0 -35
  231. package/playground/node_modules/.vite/deps/svelte_legacy.js.map +0 -7
  232. package/playground/node_modules/.vite/deps/svelte_motion.js +0 -545
  233. package/playground/node_modules/.vite/deps/svelte_motion.js.map +0 -7
  234. package/playground/node_modules/.vite/deps/svelte_reactivity.js +0 -29
  235. package/playground/node_modules/.vite/deps/svelte_reactivity.js.map +0 -7
  236. package/playground/node_modules/.vite/deps/svelte_reactivity_window.js +0 -127
  237. package/playground/node_modules/.vite/deps/svelte_reactivity_window.js.map +0 -7
  238. package/playground/node_modules/.vite/deps/svelte_store.js +0 -103
  239. package/playground/node_modules/.vite/deps/svelte_store.js.map +0 -7
  240. package/playground/node_modules/.vite/deps/svelte_transition.js +0 -208
  241. package/playground/node_modules/.vite/deps/svelte_transition.js.map +0 -7
  242. package/playground/package.json +0 -16
  243. package/playground/pnpm-lock.yaml +0 -3167
  244. package/playground/src/content/authors/jane-doe.json +0 -8
  245. package/playground/src/content/config/build.toml +0 -2
  246. package/playground/src/content/courses/web-fundamentals.json +0 -29
  247. package/playground/src/content/docs/advanced.mdx +0 -6
  248. package/playground/src/content/docs/intro.md +0 -6
  249. package/playground/src/content/guides/getting-started.mdx +0 -6
  250. package/playground/src/content/posts/hello-world.md +0 -7
  251. package/playground/src/content/products/t-shirt.json +0 -16
  252. package/playground/src/content/recipes/pancakes.mdoc +0 -8
  253. package/playground/src/content/settings/site.yml +0 -2
  254. package/playground/src/content.config.ts +0 -198
  255. package/playground/src/env.d.ts +0 -1
  256. package/playground/src/pages/index.astro +0 -11
  257. package/playground/src/pages/nebula.astro +0 -14
  258. package/pnpm-workspace.yaml +0 -2
  259. package/scripts/subset-icons.mjs +0 -178
  260. package/src/astro/index.ts +0 -295
  261. package/src/client/js/drafts/merge.svelte.ts +0 -121
  262. package/src/client/js/drafts/ops.svelte.ts +0 -227
  263. package/src/client/js/drafts/storage.ts +0 -108
  264. package/src/client/js/drafts/workers/diff.ts +0 -40
  265. package/src/client/js/editor/editor.svelte.ts +0 -343
  266. package/src/client/js/editor/languages.ts +0 -98
  267. package/src/client/js/editor/markdown-shortcuts.ts +0 -261
  268. package/src/client/js/handlers/admin.ts +0 -246
  269. package/src/client/js/state/dialogs.svelte.ts +0 -35
  270. package/src/client/js/state/router.svelte.ts +0 -156
  271. package/src/client/js/state/state.svelte.ts +0 -334
  272. package/src/client/js/storage/adapter.ts +0 -102
  273. package/src/client/js/storage/client.ts +0 -150
  274. package/src/client/js/storage/db.ts +0 -36
  275. package/src/client/js/storage/fsa.ts +0 -110
  276. package/src/client/js/storage/github.ts +0 -297
  277. package/src/client/js/storage/storage.ts +0 -83
  278. package/src/client/js/storage/workers/frontmatter.ts +0 -320
  279. package/src/client/js/storage/workers/storage.ts +0 -177
  280. package/src/client/js/storage/workers/toml-parser.ts +0 -106
  281. package/src/client/js/storage/workers/yaml-parser.ts +0 -132
  282. package/src/client/js/utils/frontmatter.ts +0 -38
  283. package/src/client/js/utils/schema-utils.ts +0 -295
  284. package/src/client/js/utils/sort.ts +0 -84
  285. package/src/client/js/utils/stable-stringify.ts +0 -27
  286. package/src/types.ts +0 -25
  287. package/svelte.config.js +0 -4
  288. package/tests/astro/build.test.ts +0 -63
  289. package/tests/astro/index.test.ts +0 -689
  290. package/tests/client/components/Admin.test.ts +0 -446
  291. package/tests/client/components/BackendPicker.test.ts +0 -239
  292. package/tests/client/components/DraftChip.test.ts +0 -53
  293. package/tests/client/components/MetadataForm.test.ts +0 -164
  294. package/tests/client/components/dialogs/DeleteDraftDialog.test.ts +0 -91
  295. package/tests/client/components/dialogs/FilenameDialog.test.ts +0 -209
  296. package/tests/client/components/dialogs/dialog-stubs.ts +0 -19
  297. package/tests/client/components/editor/EditorPane.test.ts +0 -100
  298. package/tests/client/components/editor/EditorTabs.test.ts +0 -253
  299. package/tests/client/components/editor/EditorToolbar.test.ts +0 -252
  300. package/tests/client/components/editor/fixtures.ts +0 -31
  301. package/tests/client/components/fields/ArrayField.test.ts +0 -197
  302. package/tests/client/components/fields/BooleanField.test.ts +0 -206
  303. package/tests/client/components/fields/DateField.test.ts +0 -210
  304. package/tests/client/components/fields/EnumField.test.ts +0 -246
  305. package/tests/client/components/fields/NumberField.test.ts +0 -240
  306. package/tests/client/components/fields/ObjectField.test.ts +0 -157
  307. package/tests/client/components/fields/SchemaField.test.ts +0 -190
  308. package/tests/client/components/fields/StringField.test.ts +0 -223
  309. package/tests/client/components/sidebar/AdminSidebar.test.ts +0 -285
  310. package/tests/client/components/sidebar/AdminSidebarSort.test.ts +0 -135
  311. package/tests/client/components/sidebar/sort-mock.ts +0 -23
  312. package/tests/client/js/drafts/fixtures.ts +0 -22
  313. package/tests/client/js/drafts/merge.test.ts +0 -282
  314. package/tests/client/js/drafts/ops.test.ts +0 -658
  315. package/tests/client/js/drafts/storage.test.ts +0 -200
  316. package/tests/client/js/drafts/workers/diff.test.ts +0 -165
  317. package/tests/client/js/editor/editor.test.ts +0 -616
  318. package/tests/client/js/editor/link-wrap.test.ts +0 -225
  319. package/tests/client/js/editor/markdown-shortcuts.test.ts +0 -370
  320. package/tests/client/js/handlers/admin.test.ts +0 -467
  321. package/tests/client/js/state/router.test.ts +0 -619
  322. package/tests/client/js/state/schema.test.ts +0 -266
  323. package/tests/client/js/state/state.test.ts +0 -328
  324. package/tests/client/js/storage/adapter.test.ts +0 -115
  325. package/tests/client/js/storage/client.test.ts +0 -250
  326. package/tests/client/js/storage/db.test.ts +0 -59
  327. package/tests/client/js/storage/fsa.test.ts +0 -284
  328. package/tests/client/js/storage/github.test.ts +0 -349
  329. package/tests/client/js/storage/mock-port.ts +0 -95
  330. package/tests/client/js/storage/storage.test.ts +0 -77
  331. package/tests/client/js/storage/workers/frontmatter.test.ts +0 -479
  332. package/tests/client/js/storage/workers/storage.test.ts +0 -299
  333. package/tests/client/js/storage/workers/toml-parser.test.ts +0 -169
  334. package/tests/client/js/storage/workers/yaml-parser.test.ts +0 -168
  335. package/tests/client/js/utils/file-types.test.ts +0 -268
  336. package/tests/client/js/utils/frontmatter.test.ts +0 -87
  337. package/tests/client/js/utils/schema-utils.test.ts +0 -318
  338. package/tests/client/js/utils/slug.test.ts +0 -58
  339. package/tests/client/js/utils/sort.test.ts +0 -276
  340. package/tests/client/js/utils/stable-stringify.test.ts +0 -68
  341. package/tests/client/js/utils/url-utils.test.ts +0 -70
  342. package/tests/e2e/backend-connection.test.ts +0 -301
  343. package/tests/e2e/draft-lifecycle.test.ts +0 -388
  344. package/tests/e2e/editing.test.ts +0 -355
  345. package/tests/e2e/github-adapter.test.ts +0 -330
  346. package/tests/e2e/helpers/mock-adapter.ts +0 -166
  347. package/tests/e2e/helpers/test-app.ts +0 -155
  348. package/tests/e2e/navigation.test.ts +0 -358
  349. package/tests/e2e/publishing.test.ts +0 -345
  350. package/tests/e2e/unsaved-changes.test.ts +0 -317
  351. package/tests/setup.ts +0 -2
  352. package/tests/stubs/codemirror.ts +0 -197
  353. package/tsconfig.json +0 -19
  354. package/vitest.config.ts +0 -178
  355. /package/{src → dist}/client/Admin.svelte +0 -0
  356. /package/{src → dist}/client/components/BackendPicker.svelte +0 -0
  357. /package/{src → dist}/client/components/DraftChip.svelte +0 -0
  358. /package/{src → dist}/client/components/MetadataForm.svelte +0 -0
  359. /package/{src → dist}/client/components/ThemeToggle.svelte +0 -0
  360. /package/{src → dist}/client/components/dialogs/DeleteDraftDialog.svelte +0 -0
  361. /package/{src → dist}/client/components/dialogs/FilenameDialog.svelte +0 -0
  362. /package/{src → dist}/client/components/editor/EditorPane.svelte +0 -0
  363. /package/{src → dist}/client/components/editor/EditorTabs.svelte +0 -0
  364. /package/{src → dist}/client/components/editor/EditorToolbar.svelte +0 -0
  365. /package/{src → dist}/client/components/editor/FormatSelector.svelte +0 -0
  366. /package/{src → dist}/client/components/editor/Toolbar.svelte +0 -0
  367. /package/{src → dist}/client/components/fields/ArrayField.svelte +0 -0
  368. /package/{src → dist}/client/components/fields/ArrayItem.svelte +0 -0
  369. /package/{src → dist}/client/components/fields/BooleanField.svelte +0 -0
  370. /package/{src → dist}/client/components/fields/DateField.svelte +0 -0
  371. /package/{src → dist}/client/components/fields/EnumField.svelte +0 -0
  372. /package/{src → dist}/client/components/fields/FieldWrapper.svelte +0 -0
  373. /package/{src → dist}/client/components/fields/NumberField.svelte +0 -0
  374. /package/{src → dist}/client/components/fields/ObjectField.svelte +0 -0
  375. /package/{src → dist}/client/components/fields/SchemaField.svelte +0 -0
  376. /package/{src → dist}/client/components/fields/StringField.svelte +0 -0
  377. /package/{src → dist}/client/components/sidebar/AdminSidebar.svelte +0 -0
  378. /package/{src → dist}/client/components/sidebar/AdminSidebarSort.svelte +0 -0
  379. /package/{src → dist}/client/css/a11y.css +0 -0
  380. /package/{src → dist}/client/css/btn.css +0 -0
  381. /package/{src → dist}/client/css/dialog.css +0 -0
  382. /package/{src → dist}/client/css/field-input.css +0 -0
  383. /package/{src → dist}/client/css/reset.css +0 -0
  384. /package/{src → dist}/client/css/theme.css +0 -0
  385. /package/{src/client/index.ts → dist/client/index.js} +0 -0
  386. /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}`);