@velastack/cms 0.1.0

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 (327) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +644 -0
  3. package/dist/cms.d.ts +6 -0
  4. package/dist/cms.js +30 -0
  5. package/dist/components/admin-bar/admin-bar-internal.svelte +1697 -0
  6. package/dist/components/admin-bar/admin-bar-internal.svelte.d.ts +12 -0
  7. package/dist/components/admin-bar/admin-bar.css +5 -0
  8. package/dist/components/admin-bar/admin-bar.svelte +355 -0
  9. package/dist/components/admin-bar/admin-bar.svelte.d.ts +7 -0
  10. package/dist/components/admin-bar/click-outside.d.ts +8 -0
  11. package/dist/components/admin-bar/click-outside.js +17 -0
  12. package/dist/components/admin-bar/css-root.svelte +23 -0
  13. package/dist/components/admin-bar/css-root.svelte.d.ts +19 -0
  14. package/dist/components/admin-bar/delete-page-dialog.svelte +326 -0
  15. package/dist/components/admin-bar/delete-page-dialog.svelte.d.ts +32 -0
  16. package/dist/components/admin-bar/history-panel.svelte +264 -0
  17. package/dist/components/admin-bar/history-panel.svelte.d.ts +8 -0
  18. package/dist/components/admin-bar/icons/bold.svelte +13 -0
  19. package/dist/components/admin-bar/icons/bold.svelte.d.ts +3 -0
  20. package/dist/components/admin-bar/icons/check.svelte +11 -0
  21. package/dist/components/admin-bar/icons/check.svelte.d.ts +3 -0
  22. package/dist/components/admin-bar/icons/chevron-down.svelte +11 -0
  23. package/dist/components/admin-bar/icons/chevron-down.svelte.d.ts +3 -0
  24. package/dist/components/admin-bar/icons/chevron-right.svelte +11 -0
  25. package/dist/components/admin-bar/icons/chevron-right.svelte.d.ts +3 -0
  26. package/dist/components/admin-bar/icons/chevron-up.svelte +11 -0
  27. package/dist/components/admin-bar/icons/chevron-up.svelte.d.ts +3 -0
  28. package/dist/components/admin-bar/icons/code.svelte +14 -0
  29. package/dist/components/admin-bar/icons/code.svelte.d.ts +3 -0
  30. package/dist/components/admin-bar/icons/external-link.svelte +15 -0
  31. package/dist/components/admin-bar/icons/external-link.svelte.d.ts +3 -0
  32. package/dist/components/admin-bar/icons/file.svelte +19 -0
  33. package/dist/components/admin-bar/icons/file.svelte.d.ts +3 -0
  34. package/dist/components/admin-bar/icons/heading-2.svelte +16 -0
  35. package/dist/components/admin-bar/icons/heading-2.svelte.d.ts +3 -0
  36. package/dist/components/admin-bar/icons/heading-3.svelte +17 -0
  37. package/dist/components/admin-bar/icons/heading-3.svelte.d.ts +3 -0
  38. package/dist/components/admin-bar/icons/icon.svelte +41 -0
  39. package/dist/components/admin-bar/icons/icon.svelte.d.ts +21 -0
  40. package/dist/components/admin-bar/icons/images.svelte +16 -0
  41. package/dist/components/admin-bar/icons/images.svelte.d.ts +3 -0
  42. package/dist/components/admin-bar/icons/italic.svelte +15 -0
  43. package/dist/components/admin-bar/icons/italic.svelte.d.ts +3 -0
  44. package/dist/components/admin-bar/icons/link-2-off.svelte +16 -0
  45. package/dist/components/admin-bar/icons/link-2-off.svelte.d.ts +3 -0
  46. package/dist/components/admin-bar/icons/link.svelte +14 -0
  47. package/dist/components/admin-bar/icons/link.svelte.d.ts +3 -0
  48. package/dist/components/admin-bar/icons/list-ordered.svelte +18 -0
  49. package/dist/components/admin-bar/icons/list-ordered.svelte.d.ts +3 -0
  50. package/dist/components/admin-bar/icons/list.svelte +18 -0
  51. package/dist/components/admin-bar/icons/list.svelte.d.ts +3 -0
  52. package/dist/components/admin-bar/icons/loader-circle.svelte +11 -0
  53. package/dist/components/admin-bar/icons/loader-circle.svelte.d.ts +3 -0
  54. package/dist/components/admin-bar/icons/minus.svelte +11 -0
  55. package/dist/components/admin-bar/icons/minus.svelte.d.ts +3 -0
  56. package/dist/components/admin-bar/icons/quote.svelte +24 -0
  57. package/dist/components/admin-bar/icons/quote.svelte.d.ts +3 -0
  58. package/dist/components/admin-bar/icons/search.svelte +14 -0
  59. package/dist/components/admin-bar/icons/search.svelte.d.ts +3 -0
  60. package/dist/components/admin-bar/icons/trash-2.svelte +17 -0
  61. package/dist/components/admin-bar/icons/trash-2.svelte.d.ts +3 -0
  62. package/dist/components/admin-bar/icons/triangle-alert.svelte +15 -0
  63. package/dist/components/admin-bar/icons/triangle-alert.svelte.d.ts +3 -0
  64. package/dist/components/admin-bar/icons/types.d.ts +7 -0
  65. package/dist/components/admin-bar/icons/types.js +1 -0
  66. package/dist/components/admin-bar/icons/undo-2.svelte +14 -0
  67. package/dist/components/admin-bar/icons/undo-2.svelte.d.ts +3 -0
  68. package/dist/components/admin-bar/icons/upload.svelte +15 -0
  69. package/dist/components/admin-bar/icons/upload.svelte.d.ts +3 -0
  70. package/dist/components/admin-bar/icons/x.svelte +14 -0
  71. package/dist/components/admin-bar/icons/x.svelte.d.ts +3 -0
  72. package/dist/components/admin-bar/keyboard-shortcuts-dialog.svelte +96 -0
  73. package/dist/components/admin-bar/keyboard-shortcuts-dialog.svelte.d.ts +7 -0
  74. package/dist/components/admin-bar/locales-panel.svelte +137 -0
  75. package/dist/components/admin-bar/locales-panel.svelte.d.ts +9 -0
  76. package/dist/components/admin-bar/media-panel.svelte +282 -0
  77. package/dist/components/admin-bar/media-panel.svelte.d.ts +7 -0
  78. package/dist/components/admin-bar/new-page-chooser-dialog.svelte +56 -0
  79. package/dist/components/admin-bar/new-page-chooser-dialog.svelte.d.ts +10 -0
  80. package/dist/components/admin-bar/new-page-dialog.svelte +126 -0
  81. package/dist/components/admin-bar/new-page-dialog.svelte.d.ts +14 -0
  82. package/dist/components/admin-bar/page-config.d.ts +61 -0
  83. package/dist/components/admin-bar/page-config.js +24 -0
  84. package/dist/components/admin-bar/pages-panel.svelte +639 -0
  85. package/dist/components/admin-bar/pages-panel.svelte.d.ts +13 -0
  86. package/dist/components/admin-bar/panel-footer.svelte +21 -0
  87. package/dist/components/admin-bar/panel-footer.svelte.d.ts +8 -0
  88. package/dist/components/admin-bar/panel-header.svelte +29 -0
  89. package/dist/components/admin-bar/panel-header.svelte.d.ts +10 -0
  90. package/dist/components/admin-bar/panel.svelte +41 -0
  91. package/dist/components/admin-bar/panel.svelte.d.ts +10 -0
  92. package/dist/components/admin-bar/publish-dialog.svelte +387 -0
  93. package/dist/components/admin-bar/publish-dialog.svelte.d.ts +16 -0
  94. package/dist/components/admin-bar/resolve-route.d.ts +20 -0
  95. package/dist/components/admin-bar/resolve-route.js +50 -0
  96. package/dist/components/admin-bar/seo-panel.svelte +387 -0
  97. package/dist/components/admin-bar/seo-panel.svelte.d.ts +7 -0
  98. package/dist/components/admin-bar/share-preview-link-dialog.svelte +97 -0
  99. package/dist/components/admin-bar/share-preview-link-dialog.svelte.d.ts +9 -0
  100. package/dist/components/admin-bar/site-settings-panel.svelte +225 -0
  101. package/dist/components/admin-bar/site-settings-panel.svelte.d.ts +7 -0
  102. package/dist/components/admin-bar/status-pill.svelte +49 -0
  103. package/dist/components/admin-bar/status-pill.svelte.d.ts +11 -0
  104. package/dist/components/admin-bar/theme.svelte.d.ts +16 -0
  105. package/dist/components/admin-bar/theme.svelte.js +39 -0
  106. package/dist/components/admin-bar/ui/badge/badge.svelte +57 -0
  107. package/dist/components/admin-bar/ui/badge/badge.svelte.d.ts +16 -0
  108. package/dist/components/admin-bar/ui/badge/index.d.ts +4 -0
  109. package/dist/components/admin-bar/ui/badge/index.js +4 -0
  110. package/dist/components/admin-bar/ui/button/button.svelte +73 -0
  111. package/dist/components/admin-bar/ui/button/button.svelte.d.ts +16 -0
  112. package/dist/components/admin-bar/ui/button/index.d.ts +4 -0
  113. package/dist/components/admin-bar/ui/button/index.js +4 -0
  114. package/dist/components/admin-bar/ui/collapsible/collapsible-content.svelte +7 -0
  115. package/dist/components/admin-bar/ui/collapsible/collapsible-content.svelte.d.ts +4 -0
  116. package/dist/components/admin-bar/ui/collapsible/collapsible-trigger.svelte +7 -0
  117. package/dist/components/admin-bar/ui/collapsible/collapsible-trigger.svelte.d.ts +4 -0
  118. package/dist/components/admin-bar/ui/collapsible/collapsible.svelte +7 -0
  119. package/dist/components/admin-bar/ui/collapsible/collapsible.svelte.d.ts +4 -0
  120. package/dist/components/admin-bar/ui/collapsible/index.d.ts +4 -0
  121. package/dist/components/admin-bar/ui/collapsible/index.js +6 -0
  122. package/dist/components/admin-bar/ui/dialog/dialog-close.svelte +7 -0
  123. package/dist/components/admin-bar/ui/dialog/dialog-close.svelte.d.ts +4 -0
  124. package/dist/components/admin-bar/ui/dialog/dialog-content.svelte +46 -0
  125. package/dist/components/admin-bar/ui/dialog/dialog-content.svelte.d.ts +11 -0
  126. package/dist/components/admin-bar/ui/dialog/dialog-description.svelte +17 -0
  127. package/dist/components/admin-bar/ui/dialog/dialog-description.svelte.d.ts +4 -0
  128. package/dist/components/admin-bar/ui/dialog/dialog-footer.svelte +23 -0
  129. package/dist/components/admin-bar/ui/dialog/dialog-footer.svelte.d.ts +5 -0
  130. package/dist/components/admin-bar/ui/dialog/dialog-header.svelte +20 -0
  131. package/dist/components/admin-bar/ui/dialog/dialog-header.svelte.d.ts +5 -0
  132. package/dist/components/admin-bar/ui/dialog/dialog-overlay.svelte +20 -0
  133. package/dist/components/admin-bar/ui/dialog/dialog-overlay.svelte.d.ts +4 -0
  134. package/dist/components/admin-bar/ui/dialog/dialog-portal.svelte +7 -0
  135. package/dist/components/admin-bar/ui/dialog/dialog-portal.svelte.d.ts +3 -0
  136. package/dist/components/admin-bar/ui/dialog/dialog-title.svelte +17 -0
  137. package/dist/components/admin-bar/ui/dialog/dialog-title.svelte.d.ts +4 -0
  138. package/dist/components/admin-bar/ui/dialog/dialog-trigger.svelte +7 -0
  139. package/dist/components/admin-bar/ui/dialog/dialog-trigger.svelte.d.ts +4 -0
  140. package/dist/components/admin-bar/ui/dialog/dialog.svelte +7 -0
  141. package/dist/components/admin-bar/ui/dialog/dialog.svelte.d.ts +3 -0
  142. package/dist/components/admin-bar/ui/dialog/index.d.ts +11 -0
  143. package/dist/components/admin-bar/ui/dialog/index.js +13 -0
  144. package/dist/components/admin-bar/ui/input/index.d.ts +3 -0
  145. package/dist/components/admin-bar/ui/input/index.js +3 -0
  146. package/dist/components/admin-bar/ui/input/input.svelte +24 -0
  147. package/dist/components/admin-bar/ui/input/input.svelte.d.ts +5 -0
  148. package/dist/components/admin-bar/ui/kbd/index.d.ts +4 -0
  149. package/dist/components/admin-bar/ui/kbd/index.js +6 -0
  150. package/dist/components/admin-bar/ui/kbd/kbd-group.svelte +20 -0
  151. package/dist/components/admin-bar/ui/kbd/kbd-group.svelte.d.ts +5 -0
  152. package/dist/components/admin-bar/ui/kbd/kbd-shortcut.svelte +52 -0
  153. package/dist/components/admin-bar/ui/kbd/kbd-shortcut.svelte.d.ts +8 -0
  154. package/dist/components/admin-bar/ui/kbd/kbd.svelte +27 -0
  155. package/dist/components/admin-bar/ui/kbd/kbd.svelte.d.ts +5 -0
  156. package/dist/components/admin-bar/ui/label/index.d.ts +3 -0
  157. package/dist/components/admin-bar/ui/label/index.js +3 -0
  158. package/dist/components/admin-bar/ui/label/label.svelte +20 -0
  159. package/dist/components/admin-bar/ui/label/label.svelte.d.ts +4 -0
  160. package/dist/components/admin-bar/ui/menubar/index.d.ts +18 -0
  161. package/dist/components/admin-bar/ui/menubar/index.js +20 -0
  162. package/dist/components/admin-bar/ui/menubar/menubar-checkbox-item.svelte +46 -0
  163. package/dist/components/admin-bar/ui/menubar/menubar-checkbox-item.svelte.d.ts +10 -0
  164. package/dist/components/admin-bar/ui/menubar/menubar-content.svelte +28 -0
  165. package/dist/components/admin-bar/ui/menubar/menubar-content.svelte.d.ts +4 -0
  166. package/dist/components/admin-bar/ui/menubar/menubar-group-heading.svelte +25 -0
  167. package/dist/components/admin-bar/ui/menubar/menubar-group-heading.svelte.d.ts +8 -0
  168. package/dist/components/admin-bar/ui/menubar/menubar-group.svelte +12 -0
  169. package/dist/components/admin-bar/ui/menubar/menubar-group.svelte.d.ts +7 -0
  170. package/dist/components/admin-bar/ui/menubar/menubar-item.svelte +27 -0
  171. package/dist/components/admin-bar/ui/menubar/menubar-item.svelte.d.ts +8 -0
  172. package/dist/components/admin-bar/ui/menubar/menubar-label.svelte +25 -0
  173. package/dist/components/admin-bar/ui/menubar/menubar-label.svelte.d.ts +8 -0
  174. package/dist/components/admin-bar/ui/menubar/menubar-menu.svelte +7 -0
  175. package/dist/components/admin-bar/ui/menubar/menubar-menu.svelte.d.ts +3 -0
  176. package/dist/components/admin-bar/ui/menubar/menubar-portal.svelte +7 -0
  177. package/dist/components/admin-bar/ui/menubar/menubar-portal.svelte.d.ts +3 -0
  178. package/dist/components/admin-bar/ui/menubar/menubar-radio-group.svelte +11 -0
  179. package/dist/components/admin-bar/ui/menubar/menubar-radio-group.svelte.d.ts +4 -0
  180. package/dist/components/admin-bar/ui/menubar/menubar-radio-item.svelte +37 -0
  181. package/dist/components/admin-bar/ui/menubar/menubar-radio-item.svelte.d.ts +8 -0
  182. package/dist/components/admin-bar/ui/menubar/menubar-separator.svelte +17 -0
  183. package/dist/components/admin-bar/ui/menubar/menubar-separator.svelte.d.ts +4 -0
  184. package/dist/components/admin-bar/ui/menubar/menubar-shortcut.svelte +23 -0
  185. package/dist/components/admin-bar/ui/menubar/menubar-shortcut.svelte.d.ts +5 -0
  186. package/dist/components/admin-bar/ui/menubar/menubar-sub-content.svelte +20 -0
  187. package/dist/components/admin-bar/ui/menubar/menubar-sub-content.svelte.d.ts +4 -0
  188. package/dist/components/admin-bar/ui/menubar/menubar-sub-trigger.svelte +29 -0
  189. package/dist/components/admin-bar/ui/menubar/menubar-sub-trigger.svelte.d.ts +8 -0
  190. package/dist/components/admin-bar/ui/menubar/menubar-sub.svelte +7 -0
  191. package/dist/components/admin-bar/ui/menubar/menubar-sub.svelte.d.ts +4 -0
  192. package/dist/components/admin-bar/ui/menubar/menubar-trigger.svelte +20 -0
  193. package/dist/components/admin-bar/ui/menubar/menubar-trigger.svelte.d.ts +4 -0
  194. package/dist/components/admin-bar/ui/menubar/menubar.svelte +20 -0
  195. package/dist/components/admin-bar/ui/menubar/menubar.svelte.d.ts +4 -0
  196. package/dist/components/admin-bar/ui/select/index.d.ts +12 -0
  197. package/dist/components/admin-bar/ui/select/index.js +14 -0
  198. package/dist/components/admin-bar/ui/select/select-content.svelte +45 -0
  199. package/dist/components/admin-bar/ui/select/select-content.svelte.d.ts +11 -0
  200. package/dist/components/admin-bar/ui/select/select-group-heading.svelte +21 -0
  201. package/dist/components/admin-bar/ui/select/select-group-heading.svelte.d.ts +10 -0
  202. package/dist/components/admin-bar/ui/select/select-group.svelte +17 -0
  203. package/dist/components/admin-bar/ui/select/select-group.svelte.d.ts +4 -0
  204. package/dist/components/admin-bar/ui/select/select-item.svelte +40 -0
  205. package/dist/components/admin-bar/ui/select/select-item.svelte.d.ts +5 -0
  206. package/dist/components/admin-bar/ui/select/select-label.svelte +20 -0
  207. package/dist/components/admin-bar/ui/select/select-label.svelte.d.ts +6 -0
  208. package/dist/components/admin-bar/ui/select/select-portal.svelte +7 -0
  209. package/dist/components/admin-bar/ui/select/select-portal.svelte.d.ts +3 -0
  210. package/dist/components/admin-bar/ui/select/select-scroll-down-button.svelte +23 -0
  211. package/dist/components/admin-bar/ui/select/select-scroll-down-button.svelte.d.ts +5 -0
  212. package/dist/components/admin-bar/ui/select/select-scroll-up-button.svelte +23 -0
  213. package/dist/components/admin-bar/ui/select/select-scroll-up-button.svelte.d.ts +5 -0
  214. package/dist/components/admin-bar/ui/select/select-separator.svelte +21 -0
  215. package/dist/components/admin-bar/ui/select/select-separator.svelte.d.ts +4 -0
  216. package/dist/components/admin-bar/ui/select/select-trigger.svelte +31 -0
  217. package/dist/components/admin-bar/ui/select/select-trigger.svelte.d.ts +8 -0
  218. package/dist/components/admin-bar/ui/select/select.svelte +11 -0
  219. package/dist/components/admin-bar/ui/select/select.svelte.d.ts +3 -0
  220. package/dist/components/admin-bar/ui/separator/index.d.ts +2 -0
  221. package/dist/components/admin-bar/ui/separator/index.js +4 -0
  222. package/dist/components/admin-bar/ui/separator/separator.svelte +21 -0
  223. package/dist/components/admin-bar/ui/separator/separator.svelte.d.ts +4 -0
  224. package/dist/components/admin-bar/ui/textarea/index.d.ts +3 -0
  225. package/dist/components/admin-bar/ui/textarea/index.js +3 -0
  226. package/dist/components/admin-bar/ui/textarea/textarea.svelte +21 -0
  227. package/dist/components/admin-bar/ui/textarea/textarea.svelte.d.ts +5 -0
  228. package/dist/components/admin-bar/user-avatar.svelte +29 -0
  229. package/dist/components/admin-bar/user-avatar.svelte.d.ts +7 -0
  230. package/dist/components/admin-bar/utils.d.ts +10 -0
  231. package/dist/components/admin-bar/utils.js +46 -0
  232. package/dist/components/admin-bar/variants.d.ts +20 -0
  233. package/dist/components/admin-bar/variants.js +14 -0
  234. package/dist/components/cms/cms-boolean.svelte +102 -0
  235. package/dist/components/cms/cms-boolean.svelte.d.ts +10 -0
  236. package/dist/components/cms/cms-date-time-editable.svelte +66 -0
  237. package/dist/components/cms/cms-date-time-editable.svelte.d.ts +11 -0
  238. package/dist/components/cms/cms-date-time.svelte +67 -0
  239. package/dist/components/cms/cms-date-time.svelte.d.ts +19 -0
  240. package/dist/components/cms/cms-entries.svelte +24 -0
  241. package/dist/components/cms/cms-entries.svelte.d.ts +31 -0
  242. package/dist/components/cms/cms-image-editable.svelte +439 -0
  243. package/dist/components/cms/cms-image-editable.svelte.d.ts +11 -0
  244. package/dist/components/cms/cms-image.svelte +78 -0
  245. package/dist/components/cms/cms-image.svelte.d.ts +18 -0
  246. package/dist/components/cms/cms-link-editable.svelte +429 -0
  247. package/dist/components/cms/cms-link-editable.svelte.d.ts +13 -0
  248. package/dist/components/cms/cms-link.svelte +92 -0
  249. package/dist/components/cms/cms-link.svelte.d.ts +25 -0
  250. package/dist/components/cms/cms-markdown-editable.svelte +74 -0
  251. package/dist/components/cms/cms-markdown-editable.svelte.d.ts +9 -0
  252. package/dist/components/cms/cms-markdown.svelte +56 -0
  253. package/dist/components/cms/cms-markdown.svelte.d.ts +10 -0
  254. package/dist/components/cms/cms-media-picker.svelte +150 -0
  255. package/dist/components/cms/cms-media-picker.svelte.d.ts +8 -0
  256. package/dist/components/cms/cms-number-editable.svelte +77 -0
  257. package/dist/components/cms/cms-number-editable.svelte.d.ts +13 -0
  258. package/dist/components/cms/cms-number.svelte +63 -0
  259. package/dist/components/cms/cms-number.svelte.d.ts +16 -0
  260. package/dist/components/cms/cms-repeater-editable.svelte +137 -0
  261. package/dist/components/cms/cms-repeater-editable.svelte.d.ts +31 -0
  262. package/dist/components/cms/cms-repeater.svelte +55 -0
  263. package/dist/components/cms/cms-repeater.svelte.d.ts +30 -0
  264. package/dist/components/cms/cms-rich-text-editable.svelte +101 -0
  265. package/dist/components/cms/cms-rich-text-editable.svelte.d.ts +9 -0
  266. package/dist/components/cms/cms-rich-text-toolbar.svelte +246 -0
  267. package/dist/components/cms/cms-rich-text-toolbar.svelte.d.ts +9 -0
  268. package/dist/components/cms/cms-rich-text.svelte +74 -0
  269. package/dist/components/cms/cms-rich-text.svelte.d.ts +10 -0
  270. package/dist/components/cms/cms-store.svelte.d.ts +294 -0
  271. package/dist/components/cms/cms-store.svelte.js +625 -0
  272. package/dist/components/cms/cms-text.svelte +131 -0
  273. package/dist/components/cms/cms-text.svelte.d.ts +11 -0
  274. package/dist/components/cms/index.d.ts +13 -0
  275. package/dist/components/cms/index.js +11 -0
  276. package/dist/components/cms/install-scope.svelte.d.ts +7 -0
  277. package/dist/components/cms/install-scope.svelte.js +33 -0
  278. package/dist/components/cms/locale-merge.d.ts +41 -0
  279. package/dist/components/cms/locale-merge.js +77 -0
  280. package/dist/components/cms/overlay-sync.d.ts +82 -0
  281. package/dist/components/cms/overlay-sync.js +76 -0
  282. package/dist/components/cms/path.d.ts +30 -0
  283. package/dist/components/cms/path.js +156 -0
  284. package/dist/components/cms/scope.d.ts +120 -0
  285. package/dist/components/cms/scope.js +23 -0
  286. package/dist/index.d.ts +27 -0
  287. package/dist/index.js +28 -0
  288. package/dist/srv/README.md +341 -0
  289. package/dist/srv/api-adapter.d.ts +20 -0
  290. package/dist/srv/api-adapter.js +178 -0
  291. package/dist/srv/cms.d.ts +62 -0
  292. package/dist/srv/cms.js +35 -0
  293. package/dist/srv/index.d.ts +5 -0
  294. package/dist/srv/index.js +4 -0
  295. package/dist/srv/load-cms.d.ts +105 -0
  296. package/dist/srv/load-cms.js +227 -0
  297. package/dist/srv/mock-adapter.d.ts +96 -0
  298. package/dist/srv/mock-adapter.js +171 -0
  299. package/dist/srv/types.d.ts +114 -0
  300. package/dist/srv/types.js +1 -0
  301. package/package.json +116 -0
  302. package/plugin/README.md +137 -0
  303. package/plugin/dist/adapter.d.ts +35 -0
  304. package/plugin/dist/adapter.js +346 -0
  305. package/plugin/dist/adapter.js.map +1 -0
  306. package/plugin/dist/build-state.d.ts +10 -0
  307. package/plugin/dist/build-state.js +26 -0
  308. package/plugin/dist/build-state.js.map +1 -0
  309. package/plugin/dist/fallback-shim.js +194 -0
  310. package/plugin/dist/index.d.ts +56 -0
  311. package/plugin/dist/index.js +396 -0
  312. package/plugin/dist/index.js.map +1 -0
  313. package/plugin/dist/manifest.d.ts +76 -0
  314. package/plugin/dist/manifest.js +367 -0
  315. package/plugin/dist/manifest.js.map +1 -0
  316. package/plugin/dist/media.d.ts +36 -0
  317. package/plugin/dist/media.js +153 -0
  318. package/plugin/dist/media.js.map +1 -0
  319. package/plugin/dist/parse-svelte.d.ts +35 -0
  320. package/plugin/dist/parse-svelte.js +120 -0
  321. package/plugin/dist/parse-svelte.js.map +1 -0
  322. package/plugin/dist/route-tree.d.ts +27 -0
  323. package/plugin/dist/route-tree.js +69 -0
  324. package/plugin/dist/route-tree.js.map +1 -0
  325. package/plugin/dist/transforms.d.ts +42 -0
  326. package/plugin/dist/transforms.js +95 -0
  327. package/plugin/dist/transforms.js.map +1 -0
@@ -0,0 +1,96 @@
1
+ <script lang="ts" module>
2
+ type ShortcutEntry = { keys: string; label: string };
3
+ type ShortcutGroup = { heading: string; entries: ShortcutEntry[] };
4
+
5
+ // Mirrors DESIGN.md §9. Grouped to match the menubar's mental model so
6
+ // users can scan to the right section by what they're trying to do.
7
+ const SHORTCUT_GROUPS: ShortcutGroup[] = [
8
+ {
9
+ heading: 'Editing',
10
+ entries: [
11
+ { keys: '⌘E', label: 'Enter edit mode' },
12
+ { keys: '⌘S', label: 'Save' },
13
+ { keys: 'esc', label: 'Cancel edit / close panel' },
14
+ { keys: '⌘Z', label: 'Revert last edit' }
15
+ ]
16
+ },
17
+ {
18
+ heading: 'Page',
19
+ entries: [
20
+ { keys: '⌘I', label: 'SEO & metadata for this page' },
21
+ { keys: '⌘↵', label: 'Open current page in new tab' },
22
+ { keys: '⌘P', label: 'Review & publish' }
23
+ ]
24
+ },
25
+ {
26
+ heading: 'Navigate',
27
+ entries: [
28
+ { keys: '⌘K', label: 'All pages' },
29
+ { keys: '⌘M', label: 'Media library' },
30
+ { keys: '⌘L', label: 'Locales' },
31
+ { keys: '⌘H', label: 'Recent releases' },
32
+ { keys: '/', label: 'Focus search (when a panel is open)' }
33
+ ]
34
+ },
35
+ {
36
+ heading: 'Site',
37
+ entries: [
38
+ { keys: '⌘N', label: 'New page' },
39
+ { keys: '⌘,', label: 'Site settings' }
40
+ ]
41
+ },
42
+ {
43
+ heading: 'View',
44
+ entries: [
45
+ { keys: '⌘.', label: 'Hide / show bar' },
46
+ { keys: '⌘⇧E', label: 'Toggle highlight editable areas' },
47
+ { keys: '⌘G', label: 'Toggle grid & spacing overlay' },
48
+ { keys: '?', label: 'Show this list' }
49
+ ]
50
+ }
51
+ ];
52
+ </script>
53
+
54
+ <script lang="ts">
55
+ import * as Dialog from './ui/dialog/index.js';
56
+ import { KbdShortcut } from './ui/kbd/index.js';
57
+
58
+ type Props = {
59
+ open: boolean;
60
+ onOpenChange: (open: boolean) => void;
61
+ };
62
+ let { open, onOpenChange }: Props = $props();
63
+ </script>
64
+
65
+ <Dialog.Root {open} {onOpenChange}>
66
+ <Dialog.Content class="vela:max-w-[34rem]">
67
+ <Dialog.Header>
68
+ <Dialog.Title>Keyboard shortcuts</Dialog.Title>
69
+ <Dialog.Description>
70
+ Single-letter shortcuts only fire when no input is focused.
71
+ </Dialog.Description>
72
+ </Dialog.Header>
73
+
74
+ <div class="vela:px-6 vela:pb-5 vela:flex vela:flex-col vela:gap-5">
75
+ {#each SHORTCUT_GROUPS as group}
76
+ <section class="vela:flex vela:flex-col vela:gap-1.5">
77
+ <h3
78
+ class="vela:text-[10px] vela:font-semibold vela:uppercase vela:tracking-widest vela:text-bar-text-tertiary vela:m-0"
79
+ >
80
+ {group.heading}
81
+ </h3>
82
+ <ul class="vela:flex vela:flex-col vela:m-0 vela:p-0 vela:list-none">
83
+ {#each group.entries as entry}
84
+ <li
85
+ class="vela:flex vela:items-center vela:justify-between vela:gap-3 vela:py-1.5 vela:text-[13px] vela:text-bar-text"
86
+ >
87
+ <span>{entry.label}</span>
88
+ <KbdShortcut keys={entry.keys} />
89
+ </li>
90
+ {/each}
91
+ </ul>
92
+ </section>
93
+ {/each}
94
+ </div>
95
+ </Dialog.Content>
96
+ </Dialog.Root>
@@ -0,0 +1,7 @@
1
+ type Props = {
2
+ open: boolean;
3
+ onOpenChange: (open: boolean) => void;
4
+ };
5
+ declare const KeyboardShortcutsDialog: import("svelte").Component<Props, {}, "">;
6
+ type KeyboardShortcutsDialog = ReturnType<typeof KeyboardShortcutsDialog>;
7
+ export default KeyboardShortcutsDialog;
@@ -0,0 +1,137 @@
1
+ <script lang="ts">
2
+ import { cmsStore, type ReleaseItem } from '../cms/cms-store.svelte.js';
3
+ import PanelFooter from './panel-footer.svelte';
4
+ import PanelHeader from './panel-header.svelte';
5
+ import Panel from './panel.svelte';
6
+ import { Badge } from './ui/badge/index.js';
7
+ import { Button } from './ui/button/index.js';
8
+
9
+ type Props = {
10
+ currentLocale: string;
11
+ locales: string[];
12
+ onClose: () => void;
13
+ onSelectLocale: (locale: string) => void;
14
+ };
15
+ let { currentLocale, locales, onClose, onSelectLocale }: Props = $props();
16
+
17
+ const defaultLocale = $derived(locales[0] ?? '');
18
+
19
+ // Group an item to a stable identity across locales: a same-(kind, routeId,
20
+ // params) item in EN and ES describes "the same thing" in both languages.
21
+ // Site items don't belong to any locale and never appear in this panel —
22
+ // callers filter them out before invoking `itemKey`.
23
+ const itemKey = (item: Exclude<ReleaseItem, { kind: 'site' }>): string => {
24
+ if (item.kind === 'layout') return `layout|${item.routeId}`;
25
+ const keys = Object.keys(item.params).sort();
26
+ const qp = keys.map((k) => `${k}=${item.params[k]}`).join('&');
27
+ return `${item.kind}|${item.routeId}|${qp}`;
28
+ };
29
+
30
+ // Per-locale: which "things" (item keys) have edits in this locale.
31
+ const editsByLocale = $derived.by(() => {
32
+ const out = new Map<string, Set<string>>();
33
+ for (const locale of locales) out.set(locale, new Set<string>());
34
+ for (const item of cmsStore.openRelease?.items ?? []) {
35
+ if (item.kind === 'site') continue;
36
+ const set = out.get(item.locale);
37
+ if (!set) continue;
38
+ set.add(itemKey(item));
39
+ }
40
+ return out;
41
+ });
42
+
43
+ const counts = $derived(cmsStore.workingCopyCountsByLocale);
44
+
45
+ type Row = {
46
+ locale: string;
47
+ isDefault: boolean;
48
+ isCurrent: boolean;
49
+ edits: number;
50
+ missing: number;
51
+ };
52
+
53
+ const rows = $derived.by<Row[]>(() => {
54
+ const defaultEdits = editsByLocale.get(defaultLocale) ?? new Set<string>();
55
+ return locales.map((locale) => {
56
+ const edits = editsByLocale.get(locale) ?? new Set<string>();
57
+ let missing = 0;
58
+ if (locale !== defaultLocale) {
59
+ for (const k of defaultEdits) {
60
+ if (!edits.has(k)) missing += 1;
61
+ }
62
+ }
63
+ return {
64
+ locale,
65
+ isDefault: locale === defaultLocale,
66
+ isCurrent: locale === currentLocale,
67
+ edits: counts[locale]?.total ?? 0,
68
+ missing
69
+ };
70
+ });
71
+ });
72
+ </script>
73
+
74
+ <Panel ariaLabel="Locales" {onClose}>
75
+ <PanelHeader title="Locales" {onClose}>
76
+ {#snippet subtitle()}
77
+ <span class="vela:text-[12px] vela:text-bar-text-secondary">
78
+ preview locale &amp; translation progress
79
+ </span>
80
+ {/snippet}
81
+ </PanelHeader>
82
+
83
+ <div class="vela:overflow-y-auto vela:px-4 vela:pb-2">
84
+ {#if rows.length === 0}
85
+ <p class="vela:text-[13px] vela:text-bar-text-tertiary vela:py-2">No locales configured.</p>
86
+ {:else}
87
+ <ol class="vela:list-none vela:pl-0 vela:m-0 vela:flex vela:flex-col">
88
+ {#each rows as row (row.locale)}
89
+ <li class="vela:relative vela:py-2.5">
90
+ <div class="vela:flex vela:items-start vela:justify-between vela:gap-3">
91
+ <div class="vela:flex vela:flex-col vela:min-w-0 vela:flex-1">
92
+ <div class="vela:flex vela:items-center vela:gap-2 vela:min-w-0">
93
+ <span class="vela:font-mono vela:text-[13px] vela:font-medium vela:text-bar-text">
94
+ {row.locale}
95
+ </span>
96
+ {#if row.isDefault}
97
+ <Badge variant="default" size="sm">default</Badge>
98
+ {/if}
99
+ {#if row.isCurrent}
100
+ <Badge variant="edit" size="sm">previewing</Badge>
101
+ {/if}
102
+ </div>
103
+ <div class="vela:text-[11px] vela:text-bar-text-tertiary vela:mt-0.5">
104
+ {row.edits}
105
+ {row.edits === 1 ? 'edit' : 'edits'}
106
+ {#if !row.isDefault && row.missing > 0}
107
+ · <span class="vela:text-[var(--cms-status-warn-text)]">
108
+ missing {row.missing} from {defaultLocale}
109
+ </span>
110
+ {/if}
111
+ </div>
112
+ </div>
113
+ <div class="vela:flex vela:items-center vela:gap-1.5 vela:shrink-0">
114
+ <Button
115
+ variant="outline"
116
+ size="pill"
117
+ disabled={row.isCurrent}
118
+ onclick={() => onSelectLocale(row.locale)}
119
+ >
120
+ {row.isCurrent ? 'Current' : 'Preview'}
121
+ </Button>
122
+ </div>
123
+ </div>
124
+ </li>
125
+ {/each}
126
+ </ol>
127
+ {/if}
128
+ </div>
129
+
130
+ <PanelFooter>
131
+ <span>
132
+ {rows.length}
133
+ {rows.length === 1 ? 'locale' : 'locales'}
134
+ </span>
135
+ <span class="vela:text-bar-text-tertiary"> Edits ride in one release across all locales. </span>
136
+ </PanelFooter>
137
+ </Panel>
@@ -0,0 +1,9 @@
1
+ type Props = {
2
+ currentLocale: string;
3
+ locales: string[];
4
+ onClose: () => void;
5
+ onSelectLocale: (locale: string) => void;
6
+ };
7
+ declare const LocalesPanel: import("svelte").Component<Props, {}, "">;
8
+ type LocalesPanel = ReturnType<typeof LocalesPanel>;
9
+ export default LocalesPanel;
@@ -0,0 +1,282 @@
1
+ <script lang="ts">
2
+ import UploadIcon from './icons/upload.svelte';
3
+ import TrashIcon from './icons/trash-2.svelte';
4
+ import LoaderIcon from './icons/loader-circle.svelte';
5
+ import AlertIcon from './icons/triangle-alert.svelte';
6
+ import CheckIcon from './icons/check.svelte';
7
+ import { cmsStore } from '../cms/cms-store.svelte.js';
8
+ import type { MediaItem } from '../cms/cms-store.svelte.js';
9
+ import PanelFooter from './panel-footer.svelte';
10
+ import PanelHeader from './panel-header.svelte';
11
+ import Panel from './panel.svelte';
12
+ import { Button } from './ui/button/index.js';
13
+
14
+ type Props = {
15
+ endpoint: string;
16
+ onClose: () => void;
17
+ };
18
+ let { endpoint, onClose }: Props = $props();
19
+
20
+ const PAGE_SIZE = 24;
21
+
22
+ let items = $state<MediaItem[]>([]);
23
+ let total = $state(0);
24
+ let offset = $state(0);
25
+ let loading = $state(true);
26
+ let error = $state<string | null>(null);
27
+
28
+ let dragDepth = $state(0);
29
+ const dragging = $derived(dragDepth > 0);
30
+
31
+ let uploading = $state(false);
32
+ let copiedId = $state<string | null>(null);
33
+ let fileInputEl: HTMLInputElement | null = $state(null);
34
+
35
+ const fetchPage = async () => {
36
+ loading = true;
37
+ try {
38
+ const res = await cmsStore.listMedia(endpoint, { offset, limit: PAGE_SIZE });
39
+ items = res.items;
40
+ total = res.total;
41
+ error = null;
42
+ } catch {
43
+ error = 'Could not load media.';
44
+ } finally {
45
+ loading = false;
46
+ }
47
+ };
48
+
49
+ $effect(() => {
50
+ void offset; // re-run when offset changes
51
+ void fetchPage();
52
+ });
53
+
54
+ const upload = async (file: File) => {
55
+ if (!file.type.startsWith('image/')) {
56
+ error = 'Only image files are supported.';
57
+ return;
58
+ }
59
+ error = null;
60
+ uploading = true;
61
+ try {
62
+ const item = await cmsStore.uploadMedia(endpoint, file);
63
+ // Optimistic prepend; reset to first page so it's visible.
64
+ if (offset === 0) {
65
+ items = [item, ...items].slice(0, PAGE_SIZE);
66
+ total += 1;
67
+ } else {
68
+ offset = 0;
69
+ }
70
+ } catch (e) {
71
+ error = e instanceof Error ? e.message : 'Upload failed';
72
+ } finally {
73
+ uploading = false;
74
+ }
75
+ };
76
+
77
+ const onPickerChange = () => {
78
+ const files = fileInputEl?.files;
79
+ if (!files) return;
80
+ for (const f of files) void upload(f);
81
+ if (fileInputEl) fileInputEl.value = '';
82
+ };
83
+
84
+ const remove = async (item: MediaItem) => {
85
+ try {
86
+ await cmsStore.deleteMedia(endpoint, item.id);
87
+ items = items.filter((i) => i.id !== item.id);
88
+ total = Math.max(0, total - 1);
89
+ } catch (e) {
90
+ error = e instanceof Error ? e.message : 'Delete failed';
91
+ }
92
+ };
93
+
94
+ const copyUrl = async (item: MediaItem) => {
95
+ try {
96
+ await navigator.clipboard.writeText(item.url);
97
+ copiedId = item.id;
98
+ setTimeout(() => {
99
+ if (copiedId === item.id) copiedId = null;
100
+ }, 1500);
101
+ } catch {
102
+ // clipboard may be unavailable; ignore silently
103
+ }
104
+ };
105
+
106
+ const onDragEnter = (e: DragEvent) => {
107
+ if (!e.dataTransfer?.types.includes('Files')) return;
108
+ e.preventDefault();
109
+ dragDepth++;
110
+ };
111
+ const onDragOver = (e: DragEvent) => {
112
+ if (!e.dataTransfer?.types.includes('Files')) return;
113
+ e.preventDefault();
114
+ if (e.dataTransfer) e.dataTransfer.dropEffect = 'copy';
115
+ };
116
+ const onDragLeave = (e: DragEvent) => {
117
+ e.preventDefault();
118
+ dragDepth = Math.max(0, dragDepth - 1);
119
+ };
120
+ const onDrop = (e: DragEvent) => {
121
+ e.preventDefault();
122
+ dragDepth = 0;
123
+ const files = e.dataTransfer?.files;
124
+ if (!files) return;
125
+ for (const f of files) void upload(f);
126
+ };
127
+
128
+ const rangeLabel = $derived.by(() => {
129
+ if (total === 0) return '0 of 0';
130
+ const start = offset + 1;
131
+ const end = Math.min(offset + items.length, total);
132
+ return `${start}–${end} of ${total}`;
133
+ });
134
+
135
+ const canPrev = $derived(offset > 0);
136
+ const canNext = $derived(offset + items.length < total);
137
+
138
+ const formatSize = (bytes: number): string => {
139
+ if (bytes < 1024) return `${bytes} B`;
140
+ if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`;
141
+ return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
142
+ };
143
+ </script>
144
+
145
+ <Panel ariaLabel="Media Library" {onClose}>
146
+ <PanelHeader title="Media Library" {onClose} />
147
+
148
+ <div
149
+ class="vela:relative vela:flex vela:flex-col vela:gap-3 vela:px-4 vela:pb-3 vela:overflow-y-auto"
150
+ class:dragging
151
+ ondragenter={onDragEnter}
152
+ ondragover={onDragOver}
153
+ ondragleave={onDragLeave}
154
+ ondrop={onDrop}
155
+ role="region"
156
+ aria-label="Media uploads"
157
+ >
158
+ <div class="vela:flex vela:items-center vela:gap-2">
159
+ <Button size="sm" variant="default" onclick={() => fileInputEl?.click()}>
160
+ <UploadIcon class="vela:size-3.5" />
161
+ Upload
162
+ </Button>
163
+ <span class="vela:text-[12px] vela:text-bar-text-tertiary">
164
+ or drag &amp; drop images here
165
+ </span>
166
+ </div>
167
+
168
+ <input
169
+ bind:this={fileInputEl}
170
+ type="file"
171
+ accept="image/*"
172
+ multiple
173
+ hidden
174
+ onchange={onPickerChange}
175
+ />
176
+
177
+ {#if error}
178
+ <div
179
+ class="vela:flex vela:items-center vela:gap-2 vela:px-2.5 vela:py-1.5 vela:rounded-md vela:text-[12px]"
180
+ style:background="var(--cms-status-error-bg-hover)"
181
+ style:color="var(--cms-status-error-text-base)"
182
+ role="alert"
183
+ >
184
+ <AlertIcon class="vela:size-3.5" />
185
+ <span>{error}</span>
186
+ </div>
187
+ {/if}
188
+
189
+ {#if loading && items.length === 0}
190
+ <div
191
+ class="vela:flex vela:items-center vela:justify-center vela:py-12 vela:text-bar-text-tertiary"
192
+ >
193
+ <LoaderIcon class="vela:size-5 vela:animate-spin" />
194
+ </div>
195
+ {:else if items.length === 0}
196
+ <div
197
+ class="vela:flex vela:flex-col vela:items-center vela:justify-center vela:py-12 vela:text-[13px] vela:text-bar-text-tertiary"
198
+ >
199
+ <UploadIcon class="vela:size-6 vela:mb-2 vela:opacity-50" />
200
+ <span>No media yet — upload an image to get started.</span>
201
+ </div>
202
+ {:else}
203
+ <div class="vela:grid vela:grid-cols-3 vela:sm:grid-cols-4 vela:gap-2">
204
+ {#each items as item (item.id)}
205
+ <div
206
+ class="vela:relative vela:group vela:aspect-square vela:rounded-md vela:overflow-hidden vela:bg-[var(--cms-bar-bg-hover)]"
207
+ >
208
+ <button
209
+ type="button"
210
+ class="vela:block vela:size-full vela:cursor-pointer vela:bg-transparent vela:border-0 vela:p-0"
211
+ title={`${item.originalName} · ${formatSize(item.size)} — click to copy URL`}
212
+ onclick={() => copyUrl(item)}
213
+ >
214
+ <img
215
+ src={item.url}
216
+ alt={item.originalName}
217
+ loading="lazy"
218
+ class="vela:size-full vela:object-cover"
219
+ />
220
+ </button>
221
+ <button
222
+ type="button"
223
+ class="vela:absolute vela:top-1 vela:right-1 vela:size-6 vela:rounded vela:bg-black/60 vela:text-white vela:flex vela:items-center vela:justify-center vela:cursor-pointer vela:opacity-0 vela:group-hover:opacity-100 vela:transition-opacity"
224
+ aria-label={`Delete ${item.originalName}`}
225
+ onclick={() => remove(item)}
226
+ >
227
+ <TrashIcon class="vela:size-3.5" />
228
+ </button>
229
+ {#if copiedId === item.id}
230
+ <div
231
+ class="vela:absolute vela:inset-0 vela:flex vela:items-center vela:justify-center vela:bg-black/55 vela:text-white vela:text-[12px] vela:font-medium vela:gap-1"
232
+ >
233
+ <CheckIcon class="vela:size-4" />
234
+ Copied
235
+ </div>
236
+ {/if}
237
+ </div>
238
+ {/each}
239
+ </div>
240
+ {/if}
241
+
242
+ {#if uploading}
243
+ <div
244
+ class="vela:absolute vela:inset-0 vela:flex vela:items-center vela:justify-center vela:bg-black/35 vela:pointer-events-none"
245
+ >
246
+ <LoaderIcon class="vela:size-6 vela:animate-spin vela:text-white" />
247
+ </div>
248
+ {/if}
249
+
250
+ {#if dragging}
251
+ <div
252
+ class="vela:absolute vela:inset-0 vela:flex vela:flex-col vela:items-center vela:justify-center vela:gap-2 vela:text-white vela:font-semibold vela:pointer-events-none"
253
+ style:background="rgba(83, 74, 183, 0.85)"
254
+ >
255
+ <UploadIcon class="vela:size-6" />
256
+ <span>Drop to upload</span>
257
+ </div>
258
+ {/if}
259
+ </div>
260
+
261
+ <PanelFooter>
262
+ <span>{rangeLabel}</span>
263
+ <div class="vela:flex vela:items-center vela:gap-1">
264
+ <Button
265
+ size="xs"
266
+ variant="ghost"
267
+ disabled={!canPrev}
268
+ onclick={() => (offset = Math.max(0, offset - PAGE_SIZE))}
269
+ >
270
+ Prev
271
+ </Button>
272
+ <Button
273
+ size="xs"
274
+ variant="ghost"
275
+ disabled={!canNext}
276
+ onclick={() => (offset = offset + PAGE_SIZE)}
277
+ >
278
+ Next
279
+ </Button>
280
+ </div>
281
+ </PanelFooter>
282
+ </Panel>
@@ -0,0 +1,7 @@
1
+ type Props = {
2
+ endpoint: string;
3
+ onClose: () => void;
4
+ };
5
+ declare const MediaPanel: import("svelte").Component<Props, {}, "">;
6
+ type MediaPanel = ReturnType<typeof MediaPanel>;
7
+ export default MediaPanel;
@@ -0,0 +1,56 @@
1
+ <script lang="ts">
2
+ import ChevronRightIcon from './icons/chevron-right.svelte';
3
+ import type { CmsCreatablePageConfigWithRouteId } from './page-config.js';
4
+ import { resolveRouteOnlyParams } from './resolve-route.js';
5
+ import { Button } from './ui/button/index.js';
6
+ import * as Dialog from './ui/dialog/index.js';
7
+
8
+ type Props = {
9
+ open: boolean;
10
+ onOpenChange: (open: boolean) => void;
11
+ creatablePages: CmsCreatablePageConfigWithRouteId[];
12
+ onSelect: (config: CmsCreatablePageConfigWithRouteId) => void;
13
+ };
14
+ let { open, onOpenChange, creatablePages, onSelect }: Props = $props();
15
+ </script>
16
+
17
+ <Dialog.Root {open} {onOpenChange}>
18
+ <Dialog.Content showCloseButton={false} class="vela:max-w-[28rem]">
19
+ <Dialog.Header>
20
+ <Dialog.Title>New page</Dialog.Title>
21
+ <Dialog.Description>Choose a template.</Dialog.Description>
22
+ </Dialog.Header>
23
+
24
+ <ul class="vela:list-none vela:m-0 vela:px-3 vela:pb-2 vela:flex vela:flex-col vela:gap-1">
25
+ {#each creatablePages as cfg (cfg.routeId)}
26
+ <li>
27
+ <button
28
+ type="button"
29
+ onclick={() => onSelect(cfg)}
30
+ class="vela:group vela:flex vela:items-center vela:gap-3 vela:w-full vela:px-3 vela:py-2.5 vela:rounded-md
31
+ vela:text-left vela:cursor-pointer vela:focus:outline-none
32
+ vela:hover:bg-[var(--cms-bar-bg-hover)] vela:focus-visible:bg-[var(--cms-bar-bg-hover)]"
33
+ >
34
+ <div class="vela:flex vela:flex-col vela:min-w-0 vela:flex-1">
35
+ <span class="vela:text-[13px] vela:font-medium vela:text-bar-text vela:capitalize">
36
+ {cfg.type}
37
+ </span>
38
+ <span
39
+ class="vela:font-mono vela:text-[12px] vela:text-bar-text-secondary vela:truncate"
40
+ >
41
+ {resolveRouteOnlyParams(cfg.routeId)}
42
+ </span>
43
+ </div>
44
+ <ChevronRightIcon
45
+ class="vela:size-4 vela:text-bar-text-tertiary vela:group-hover:text-bar-text"
46
+ />
47
+ </button>
48
+ </li>
49
+ {/each}
50
+ </ul>
51
+
52
+ <Dialog.Footer class="vela:justify-end vela:pt-3">
53
+ <Button variant="ghost" onclick={() => onOpenChange(false)}>Cancel</Button>
54
+ </Dialog.Footer>
55
+ </Dialog.Content>
56
+ </Dialog.Root>
@@ -0,0 +1,10 @@
1
+ import type { CmsCreatablePageConfigWithRouteId } from './page-config.js';
2
+ type Props = {
3
+ open: boolean;
4
+ onOpenChange: (open: boolean) => void;
5
+ creatablePages: CmsCreatablePageConfigWithRouteId[];
6
+ onSelect: (config: CmsCreatablePageConfigWithRouteId) => void;
7
+ };
8
+ declare const NewPageChooserDialog: import("svelte").Component<Props, {}, "">;
9
+ type NewPageChooserDialog = ReturnType<typeof NewPageChooserDialog>;
10
+ export default NewPageChooserDialog;