@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,7 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from 'bits-ui';
3
+
4
+ let { to = '.vela-admin-bar', ...restProps }: SelectPrimitive.PortalProps = $props();
5
+ </script>
6
+
7
+ <SelectPrimitive.Portal {to} {...restProps} />
@@ -0,0 +1,3 @@
1
+ declare const SelectPortal: import("svelte").Component<import("bits-ui").PortalProps, {}, "">;
2
+ type SelectPortal = ReturnType<typeof SelectPortal>;
3
+ export default SelectPortal;
@@ -0,0 +1,23 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from 'bits-ui';
3
+ import { cn, type WithoutChildrenOrChild } from '../../utils.js';
4
+ import ChevronDownIcon from '../../icons/chevron-down.svelte';
5
+
6
+ let {
7
+ ref = $bindable(null),
8
+ class: className,
9
+ ...restProps
10
+ }: WithoutChildrenOrChild<SelectPrimitive.ScrollDownButtonProps> = $props();
11
+ </script>
12
+
13
+ <SelectPrimitive.ScrollDownButton
14
+ bind:ref
15
+ data-slot="select-scroll-down-button"
16
+ class={cn(
17
+ 'vela:bg-bar-bg vela:z-10 vela:flex vela:cursor-default vela:items-center vela:justify-center vela:py-1 vela:bottom-0 vela:w-full',
18
+ className
19
+ )}
20
+ {...restProps}
21
+ >
22
+ <ChevronDownIcon class="vela:size-3.5" />
23
+ </SelectPrimitive.ScrollDownButton>
@@ -0,0 +1,5 @@
1
+ import { Select as SelectPrimitive } from 'bits-ui';
2
+ import { type WithoutChildrenOrChild } from '../../utils.js';
3
+ declare const SelectScrollDownButton: import("svelte").Component<WithoutChildrenOrChild<SelectPrimitive.ScrollDownButtonProps>, {}, "ref">;
4
+ type SelectScrollDownButton = ReturnType<typeof SelectScrollDownButton>;
5
+ export default SelectScrollDownButton;
@@ -0,0 +1,23 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from 'bits-ui';
3
+ import { cn, type WithoutChildrenOrChild } from '../../utils.js';
4
+ import ChevronUpIcon from '../../icons/chevron-up.svelte';
5
+
6
+ let {
7
+ ref = $bindable(null),
8
+ class: className,
9
+ ...restProps
10
+ }: WithoutChildrenOrChild<SelectPrimitive.ScrollUpButtonProps> = $props();
11
+ </script>
12
+
13
+ <SelectPrimitive.ScrollUpButton
14
+ bind:ref
15
+ data-slot="select-scroll-up-button"
16
+ class={cn(
17
+ 'vela:bg-bar-bg vela:z-10 vela:flex vela:cursor-default vela:items-center vela:justify-center vela:py-1 vela:top-0 vela:w-full',
18
+ className
19
+ )}
20
+ {...restProps}
21
+ >
22
+ <ChevronUpIcon class="vela:size-3.5" />
23
+ </SelectPrimitive.ScrollUpButton>
@@ -0,0 +1,5 @@
1
+ import { Select as SelectPrimitive } from 'bits-ui';
2
+ import { type WithoutChildrenOrChild } from '../../utils.js';
3
+ declare const SelectScrollUpButton: import("svelte").Component<WithoutChildrenOrChild<SelectPrimitive.ScrollUpButtonProps>, {}, "ref">;
4
+ type SelectScrollUpButton = ReturnType<typeof SelectScrollUpButton>;
5
+ export default SelectScrollUpButton;
@@ -0,0 +1,21 @@
1
+ <script lang="ts">
2
+ import type { Separator as SeparatorPrimitive } from 'bits-ui';
3
+ import { Separator } from '../separator/index.js';
4
+ import { cn } from '../../utils.js';
5
+
6
+ let {
7
+ ref = $bindable(null),
8
+ class: className,
9
+ ...restProps
10
+ }: SeparatorPrimitive.RootProps = $props();
11
+ </script>
12
+
13
+ <Separator
14
+ bind:ref
15
+ data-slot="select-separator"
16
+ class={cn(
17
+ 'vela:bg-[var(--cms-bar-divider)] vela:-mx-1 vela:my-1 vela:h-px vela:pointer-events-none',
18
+ className
19
+ )}
20
+ {...restProps}
21
+ />
@@ -0,0 +1,4 @@
1
+ import type { Separator as SeparatorPrimitive } from 'bits-ui';
2
+ declare const SelectSeparator: import("svelte").Component<SeparatorPrimitive.RootProps, {}, "ref">;
3
+ type SelectSeparator = ReturnType<typeof SelectSeparator>;
4
+ export default SelectSeparator;
@@ -0,0 +1,31 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from 'bits-ui';
3
+ import { cn, type WithoutChild } from '../../utils.js';
4
+ import ChevronDownIcon from '../../icons/chevron-down.svelte';
5
+
6
+ let {
7
+ ref = $bindable(null),
8
+ class: className,
9
+ children,
10
+ size = 'default',
11
+ ...restProps
12
+ }: WithoutChild<SelectPrimitive.TriggerProps> & {
13
+ size?: 'sm' | 'default';
14
+ } = $props();
15
+ </script>
16
+
17
+ <SelectPrimitive.Trigger
18
+ bind:ref
19
+ data-slot="select-trigger"
20
+ data-size={size}
21
+ class={cn(
22
+ 'vela:flex vela:w-fit vela:items-center vela:justify-between vela:gap-1.5 vela:whitespace-nowrap vela:rounded-md vela:border vela:border-[var(--cms-bar-divider)] vela:bg-transparent vela:py-1 vela:pr-2 vela:pl-2.5 vela:text-xs vela:text-bar-text vela:transition-colors vela:select-none vela:outline-none vela:cursor-pointer vela:hover:bg-[var(--cms-bar-bg-hover)] vela:focus-visible:ring-2 vela:focus-visible:ring-[var(--cms-accent)] vela:disabled:cursor-not-allowed vela:disabled:opacity-50 vela:data-[size=default]:h-7 vela:data-[size=sm]:h-6 vela:data-placeholder:text-bar-text-tertiary',
23
+ className
24
+ )}
25
+ {...restProps}
26
+ >
27
+ {@render children?.()}
28
+ <ChevronDownIcon
29
+ class="vela:size-3.5 vela:text-bar-text-secondary vela:pointer-events-none vela:shrink-0"
30
+ />
31
+ </SelectPrimitive.Trigger>
@@ -0,0 +1,8 @@
1
+ import { Select as SelectPrimitive } from 'bits-ui';
2
+ import { type WithoutChild } from '../../utils.js';
3
+ type $$ComponentProps = WithoutChild<SelectPrimitive.TriggerProps> & {
4
+ size?: 'sm' | 'default';
5
+ };
6
+ declare const SelectTrigger: import("svelte").Component<$$ComponentProps, {}, "ref">;
7
+ type SelectTrigger = ReturnType<typeof SelectTrigger>;
8
+ export default SelectTrigger;
@@ -0,0 +1,11 @@
1
+ <script lang="ts">
2
+ import { Select as SelectPrimitive } from 'bits-ui';
3
+
4
+ let {
5
+ open = $bindable(false),
6
+ value = $bindable(),
7
+ ...restProps
8
+ }: SelectPrimitive.RootProps = $props();
9
+ </script>
10
+
11
+ <SelectPrimitive.Root bind:open bind:value={value as never} {...restProps} />
@@ -0,0 +1,3 @@
1
+ declare const Select: import("svelte").Component<import("bits-ui").SelectRootPropsWithoutHTML, {}, "value" | "open">;
2
+ type Select = ReturnType<typeof Select>;
3
+ export default Select;
@@ -0,0 +1,2 @@
1
+ import Root from './separator.svelte';
2
+ export { Root, Root as Separator };
@@ -0,0 +1,4 @@
1
+ import Root from './separator.svelte';
2
+ export { Root,
3
+ //
4
+ Root as Separator };
@@ -0,0 +1,21 @@
1
+ <script lang="ts">
2
+ import { Separator as SeparatorPrimitive } from 'bits-ui';
3
+ import { cn } from '../../utils.js';
4
+
5
+ let {
6
+ ref = $bindable(null),
7
+ class: className,
8
+ 'data-slot': dataSlot = 'separator',
9
+ ...restProps
10
+ }: SeparatorPrimitive.RootProps = $props();
11
+ </script>
12
+
13
+ <SeparatorPrimitive.Root
14
+ bind:ref
15
+ data-slot={dataSlot}
16
+ class={cn(
17
+ 'vela:bg-[var(--cms-bar-divider)] vela:shrink-0 vela:data-[orientation=horizontal]:h-px vela:data-[orientation=horizontal]:w-full vela:data-[orientation=vertical]:w-px vela:data-[orientation=vertical]:h-full',
18
+ className
19
+ )}
20
+ {...restProps}
21
+ />
@@ -0,0 +1,4 @@
1
+ import { Separator as SeparatorPrimitive } from 'bits-ui';
2
+ declare const Separator: import("svelte").Component<SeparatorPrimitive.RootProps, {}, "ref">;
3
+ type Separator = ReturnType<typeof Separator>;
4
+ export default Separator;
@@ -0,0 +1,3 @@
1
+ import Root from './textarea.svelte';
2
+ export { Root, Root as Textarea };
3
+ export default Root;
@@ -0,0 +1,3 @@
1
+ import Root from './textarea.svelte';
2
+ export { Root, Root as Textarea };
3
+ export default Root;
@@ -0,0 +1,21 @@
1
+ <script lang="ts">
2
+ import type { HTMLTextareaAttributes } from 'svelte/elements';
3
+ import { cn, type WithElementRef } from '../../utils.js';
4
+
5
+ let {
6
+ ref = $bindable(null),
7
+ value = $bindable(),
8
+ class: className,
9
+ ...restProps
10
+ }: WithElementRef<HTMLTextareaAttributes> = $props();
11
+ </script>
12
+
13
+ <textarea
14
+ bind:this={ref}
15
+ bind:value
16
+ data-slot="textarea"
17
+ class={cn(
18
+ 'vela:flex vela:min-h-[56px] vela:w-full vela:rounded-md vela:border vela:border-[var(--cms-bar-divider)] vela:bg-transparent vela:px-3 vela:py-2 vela:text-[13px] vela:text-bar-text vela:placeholder:text-bar-text-tertiary vela:font-sans vela:transition-colors vela:focus:outline-none vela:focus:border-[var(--cms-accent)] vela:disabled:opacity-60 vela:disabled:cursor-not-allowed vela:resize-y',
19
+ className
20
+ )}
21
+ {...restProps}></textarea>
@@ -0,0 +1,5 @@
1
+ import type { HTMLTextareaAttributes } from 'svelte/elements';
2
+ import { type WithElementRef } from '../../utils.js';
3
+ declare const Textarea: import("svelte").Component<WithElementRef<HTMLTextareaAttributes>, {}, "value" | "ref">;
4
+ type Textarea = ReturnType<typeof Textarea>;
5
+ export default Textarea;
@@ -0,0 +1,29 @@
1
+ <script lang="ts">
2
+ import { cn } from './utils.js';
3
+
4
+ type Props = {
5
+ name: string;
6
+ class?: string;
7
+ };
8
+ let { name, class: className }: Props = $props();
9
+
10
+ const initials = $derived(
11
+ name
12
+ .trim()
13
+ .split(/\s+/)
14
+ .slice(0, 2)
15
+ .map((w) => w[0]?.toUpperCase() ?? '')
16
+ .join('')
17
+ );
18
+ </script>
19
+
20
+ <span
21
+ class={cn(
22
+ 'vela:inline-flex vela:items-center vela:justify-center vela:w-7 vela:h-7 vela:rounded-full',
23
+ 'vela:bg-[var(--cms-accent)] vela:text-white vela:text-[11px] vela:font-semibold',
24
+ className
25
+ )}
26
+ title={name}
27
+ >
28
+ {initials}
29
+ </span>
@@ -0,0 +1,7 @@
1
+ type Props = {
2
+ name: string;
3
+ class?: string;
4
+ };
5
+ declare const UserAvatar: import("svelte").Component<Props, {}, "">;
6
+ type UserAvatar = ReturnType<typeof UserAvatar>;
7
+ export default UserAvatar;
@@ -0,0 +1,10 @@
1
+ import type { WithElementRef as BitsWithElementRef } from 'bits-ui';
2
+ export type ClassValue = string | number | bigint | null | undefined | boolean | ClassValue[] | {
3
+ [key: string]: unknown;
4
+ };
5
+ export declare const clsx: (...inputs: ClassValue[]) => string;
6
+ export declare function cn(...inputs: ClassValue[]): string;
7
+ export type WithElementRef<T, U extends HTMLElement = HTMLElement> = BitsWithElementRef<T, U>;
8
+ export type WithoutChild<T> = Omit<T, 'child'>;
9
+ export type WithoutChildren<T> = Omit<T, 'children'>;
10
+ export type WithoutChildrenOrChild<T> = Omit<T, 'children' | 'child'>;
@@ -0,0 +1,46 @@
1
+ import { extendTailwindMerge } from 'tailwind-merge';
2
+ /**
3
+ * Joins class values the way `clsx` does — strings and numbers pass through,
4
+ * arrays flatten, and object keys are emitted for truthy values.
5
+ *
6
+ * Vendored (a port of clsx, MIT, Copyright (c) Luke Edwards) rather than
7
+ * depended on: it's ~20 lines, and the bar is the only consumer.
8
+ */
9
+ const toValue = (mix) => {
10
+ if (typeof mix === 'string' || typeof mix === 'number' || typeof mix === 'bigint') {
11
+ return String(mix);
12
+ }
13
+ if (typeof mix !== 'object' || mix === null)
14
+ return '';
15
+ let str = '';
16
+ if (Array.isArray(mix)) {
17
+ for (const item of mix) {
18
+ if (!item)
19
+ continue;
20
+ const next = toValue(item);
21
+ if (next)
22
+ str += (str && ' ') + next;
23
+ }
24
+ return str;
25
+ }
26
+ for (const key in mix) {
27
+ if (mix[key])
28
+ str += (str && ' ') + key;
29
+ }
30
+ return str;
31
+ };
32
+ export const clsx = (...inputs) => {
33
+ let str = '';
34
+ for (const input of inputs) {
35
+ if (!input)
36
+ continue;
37
+ const next = toValue(input);
38
+ if (next)
39
+ str += (str && ' ') + next;
40
+ }
41
+ return str;
42
+ };
43
+ const twMerge = extendTailwindMerge({ prefix: 'vela' });
44
+ export function cn(...inputs) {
45
+ return twMerge(clsx(...inputs));
46
+ }
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Minimal stand-in for `tailwind-variants`.
3
+ *
4
+ * The bar only ever uses the flat case: a `base` string, one or more variant
5
+ * groups whose values are class strings, and `defaultVariants`. No slots, no
6
+ * compound variants, no responsive variants — so the real package isn't worth
7
+ * a runtime dependency for two components.
8
+ */
9
+ type VariantGroups = Record<string, Record<string, string>>;
10
+ type Selection<V extends VariantGroups> = {
11
+ [K in keyof V]?: keyof V[K];
12
+ };
13
+ /** Infers the accepted variant props from a `variants()` result. */
14
+ export type VariantProps<F> = F extends (props?: infer P) => string ? NonNullable<P> : never;
15
+ export declare const variants: <V extends VariantGroups>(config: {
16
+ base?: string;
17
+ variants: V;
18
+ defaultVariants?: Selection<V>;
19
+ }) => (props?: Selection<V>) => string;
20
+ export {};
@@ -0,0 +1,14 @@
1
+ export const variants = (config) => (props = {}) => {
2
+ const out = [];
3
+ if (config.base)
4
+ out.push(config.base);
5
+ for (const group of Object.keys(config.variants)) {
6
+ const key = props[group] ?? config.defaultVariants?.[group];
7
+ if (key == null)
8
+ continue;
9
+ const cls = config.variants[group][key];
10
+ if (cls)
11
+ out.push(cls);
12
+ }
13
+ return out.join(' ');
14
+ };
@@ -0,0 +1,102 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import { getCmsScope } from './scope.js';
4
+ import { cmsStore, type CmsScopeRef } from './cms-store.svelte.js';
5
+
6
+ type Props = {
7
+ name: string;
8
+ initial?: boolean;
9
+ value?: unknown;
10
+ children?: Snippet<[boolean]>;
11
+ };
12
+ let { name, initial = false, value, children }: Props = $props();
13
+
14
+ const scope = getCmsScope();
15
+ const ref = $derived<CmsScopeRef | null>(
16
+ scope ? { scopeId: scope.scopeId, routeId: scope.routeId, params: scope.params } : null
17
+ );
18
+
19
+ const resolved = $derived.by(() => {
20
+ if (value !== undefined) return value;
21
+ return ref ? cmsStore.getValue(ref, name) : undefined;
22
+ });
23
+
24
+ const current = $derived(typeof resolved === 'boolean' ? resolved : initial);
25
+ const editable = $derived(cmsStore.isEditing && value === undefined && !!ref);
26
+
27
+ const toggle = () => {
28
+ if (ref) cmsStore.setValue(ref, name, !current);
29
+ };
30
+ </script>
31
+
32
+ {#if editable && ref}
33
+ <span class="cms-boolean-edit">
34
+ {@render children?.(current)}
35
+ <button
36
+ type="button"
37
+ role="switch"
38
+ aria-checked={current}
39
+ aria-label={`${name}: ${current ? 'on' : 'off'}`}
40
+ class="cms-boolean-toggle"
41
+ data-on={current}
42
+ onclick={toggle}
43
+ >
44
+ <span class="cms-boolean-toggle__name">{name}</span>
45
+ <span class="cms-boolean-toggle__pip"></span>
46
+ </button>
47
+ </span>
48
+ {:else}
49
+ {@render children?.(current)}
50
+ {/if}
51
+
52
+ <style>
53
+ .cms-boolean-edit {
54
+ display: contents;
55
+ }
56
+ .cms-boolean-toggle {
57
+ display: inline-flex;
58
+ align-items: center;
59
+ gap: 0.375rem;
60
+ padding: 0.125rem 0.5rem;
61
+ margin: 0 0.25rem;
62
+ background: var(--cms-bar-bg, #1f1f1f);
63
+ color: var(--cms-bar-text, #f5f5f5);
64
+ border: 1px solid var(--cms-bar-divider, #3a3a3a);
65
+ border-radius: 999px;
66
+ cursor: pointer;
67
+ font: inherit;
68
+ font-size: 0.6875rem;
69
+ font-family: ui-monospace, monospace;
70
+ line-height: 1;
71
+ vertical-align: middle;
72
+ }
73
+ .cms-boolean-toggle:hover {
74
+ background: var(--cms-bar-bg-hover, #2e2e2e);
75
+ }
76
+ .cms-boolean-toggle__pip {
77
+ display: inline-block;
78
+ width: 18px;
79
+ height: 10px;
80
+ border-radius: 999px;
81
+ background: rgba(127, 127, 127, 0.4);
82
+ position: relative;
83
+ transition: background-color 120ms;
84
+ }
85
+ .cms-boolean-toggle__pip::after {
86
+ content: '';
87
+ position: absolute;
88
+ top: 1px;
89
+ left: 1px;
90
+ width: 8px;
91
+ height: 8px;
92
+ border-radius: 50%;
93
+ background: white;
94
+ transition: transform 120ms;
95
+ }
96
+ .cms-boolean-toggle[data-on='true'] .cms-boolean-toggle__pip {
97
+ background: var(--cms-accent, #534ab7);
98
+ }
99
+ .cms-boolean-toggle[data-on='true'] .cms-boolean-toggle__pip::after {
100
+ transform: translateX(8px);
101
+ }
102
+ </style>
@@ -0,0 +1,10 @@
1
+ import type { Snippet } from 'svelte';
2
+ type Props = {
3
+ name: string;
4
+ initial?: boolean;
5
+ value?: unknown;
6
+ children?: Snippet<[boolean]>;
7
+ };
8
+ declare const CmsBoolean: import("svelte").Component<Props, {}, "">;
9
+ type CmsBoolean = ReturnType<typeof CmsBoolean>;
10
+ export default CmsBoolean;
@@ -0,0 +1,66 @@
1
+ <script lang="ts">
2
+ import { cmsStore, type CmsScopeRef } from './cms-store.svelte.js';
3
+ import type { CmsDateTimeMode } from './cms-date-time.svelte';
4
+
5
+ type Props = {
6
+ scope: CmsScopeRef;
7
+ name: string;
8
+ mode: CmsDateTimeMode;
9
+ initial?: string;
10
+ };
11
+
12
+ let { scope, name, mode, initial }: Props = $props();
13
+
14
+ const inputType = $derived(
15
+ mode === 'date' ? 'date' : mode === 'time' ? 'time' : 'datetime-local'
16
+ );
17
+
18
+ const live = $derived(cmsStore.getValue(scope, name));
19
+ const display = $derived(typeof live === 'string' ? live : (initial ?? ''));
20
+
21
+ let el = $state<HTMLInputElement>();
22
+
23
+ $effect(() => {
24
+ if (!el) return;
25
+ if (document.activeElement === el) return;
26
+ if (el.value === display) return;
27
+ el.value = display;
28
+ });
29
+
30
+ const onInput = (e: Event) => {
31
+ const raw = (e.currentTarget as HTMLInputElement).value;
32
+ if (raw === '') return;
33
+ cmsStore.setValue(scope, name, raw);
34
+ };
35
+ </script>
36
+
37
+ <input
38
+ bind:this={el}
39
+ class="cms-date-time-editable"
40
+ type={inputType}
41
+ data-cms-name={name}
42
+ data-cms-scope={scope.scopeId}
43
+ aria-label={name}
44
+ oninput={onInput}
45
+ />
46
+
47
+ <style>
48
+ .cms-date-time-editable {
49
+ display: inline-block;
50
+ padding: 0.125rem 0.375rem;
51
+ margin: 0 0.125rem;
52
+ font: inherit;
53
+ font-family: ui-monospace, monospace;
54
+ font-size: 0.875em;
55
+ line-height: 1;
56
+ background: var(--cms-bar-bg, #1f1f1f);
57
+ color: var(--cms-bar-text, #f5f5f5);
58
+ border: 1px solid var(--cms-bar-divider, #3a3a3a);
59
+ border-radius: 0.25rem;
60
+ vertical-align: middle;
61
+ }
62
+ .cms-date-time-editable:focus {
63
+ outline: 2px solid var(--cms-accent, #534ab7);
64
+ outline-offset: 1px;
65
+ }
66
+ </style>
@@ -0,0 +1,11 @@
1
+ import { type CmsScopeRef } from './cms-store.svelte.js';
2
+ import type { CmsDateTimeMode } from './cms-date-time.svelte';
3
+ type Props = {
4
+ scope: CmsScopeRef;
5
+ name: string;
6
+ mode: CmsDateTimeMode;
7
+ initial?: string;
8
+ };
9
+ declare const CmsDateTimeEditable: import("svelte").Component<Props, {}, "">;
10
+ type CmsDateTimeEditable = ReturnType<typeof CmsDateTimeEditable>;
11
+ export default CmsDateTimeEditable;
@@ -0,0 +1,67 @@
1
+ <script lang="ts" module>
2
+ import type { Snippet } from 'svelte';
3
+
4
+ export type CmsDateTimeMode = 'datetime' | 'date' | 'time';
5
+
6
+ export type CmsDateTimeProps = {
7
+ name: string;
8
+ /**
9
+ * `'datetime'` (default) → `<input type="datetime-local">`, stores
10
+ * `YYYY-MM-DDTHH:MM`. `'date'` → `<input type="date">`, stores
11
+ * `YYYY-MM-DD`. `'time'` → `<input type="time">`, stores `HH:MM`.
12
+ * Storage is the raw native input string — no timezone conversion.
13
+ */
14
+ mode?: CmsDateTimeMode;
15
+ fallback?: string;
16
+ /** Per-item override used by `CmsRepeater`. */
17
+ value?: unknown;
18
+ children?: Snippet<[string]>;
19
+ };
20
+ </script>
21
+
22
+ <script lang="ts">
23
+ import { getCmsScope } from './scope.js';
24
+ import { cmsStore, type CmsScopeRef } from './cms-store.svelte.js';
25
+
26
+ let { name, mode = 'datetime', fallback, value, children }: CmsDateTimeProps = $props();
27
+
28
+ const scope = getCmsScope();
29
+ const ref = $derived<CmsScopeRef | null>(
30
+ scope ? { scopeId: scope.scopeId, routeId: scope.routeId, params: scope.params } : null
31
+ );
32
+
33
+ const resolved = $derived.by(() => {
34
+ if (value !== undefined) return value;
35
+ return ref ? cmsStore.getValue(ref, name) : undefined;
36
+ });
37
+
38
+ const current = $derived(typeof resolved === 'string' ? resolved : fallback);
39
+ const editable = $derived(cmsStore.isEditing && value === undefined && !!ref);
40
+ </script>
41
+
42
+ {#if editable && ref}
43
+ {#await import('./cms-date-time-editable.svelte') then { default: Editable }}
44
+ <Editable scope={ref} {name} {mode} initial={current} />
45
+ {/await}
46
+ {:else if current && children}
47
+ {@render children(current)}
48
+ {:else if current}
49
+ {current}
50
+ {:else if children}
51
+ {@render children('')}
52
+ {:else}
53
+ <span class="cms-missing" data-cms-name={name} data-cms-scope={scope?.scopeId ?? '?'}>{name}</span
54
+ >
55
+ {/if}
56
+
57
+ <style>
58
+ .cms-missing {
59
+ display: inline-block;
60
+ padding: 0 0.25rem;
61
+ border: 1px dashed rgba(127, 127, 127, 0.6);
62
+ border-radius: 0.25rem;
63
+ font-family: ui-monospace, monospace;
64
+ font-size: 0.85em;
65
+ color: rgba(127, 127, 127, 0.9);
66
+ }
67
+ </style>
@@ -0,0 +1,19 @@
1
+ import type { Snippet } from 'svelte';
2
+ export type CmsDateTimeMode = 'datetime' | 'date' | 'time';
3
+ export type CmsDateTimeProps = {
4
+ name: string;
5
+ /**
6
+ * `'datetime'` (default) → `<input type="datetime-local">`, stores
7
+ * `YYYY-MM-DDTHH:MM`. `'date'` → `<input type="date">`, stores
8
+ * `YYYY-MM-DD`. `'time'` → `<input type="time">`, stores `HH:MM`.
9
+ * Storage is the raw native input string — no timezone conversion.
10
+ */
11
+ mode?: CmsDateTimeMode;
12
+ fallback?: string;
13
+ /** Per-item override used by `CmsRepeater`. */
14
+ value?: unknown;
15
+ children?: Snippet<[string]>;
16
+ };
17
+ declare const CmsDateTime: import("svelte").Component<CmsDateTimeProps, {}, "">;
18
+ type CmsDateTime = ReturnType<typeof CmsDateTime>;
19
+ export default CmsDateTime;