@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,326 @@
1
+ <script lang="ts">
2
+ import { Button } from './ui/button/index.js';
3
+ import * as Dialog from './ui/dialog/index.js';
4
+ import { Input } from './ui/input/index.js';
5
+ import { Label } from './ui/label/index.js';
6
+ import * as Select from './ui/select/index.js';
7
+
8
+ export type DeletePageMode = 'delete' | 'gone' | 'redirect';
9
+
10
+ export type RedirectTarget = {
11
+ url: string;
12
+ routeId: string;
13
+ params: Record<string, string>;
14
+ };
15
+
16
+ type Props = {
17
+ open: boolean;
18
+ onOpenChange: (open: boolean) => void;
19
+ /** The URL being deleted, shown in the heading and used for self-redirect detection. */
20
+ url: string;
21
+ /**
22
+ * `true` when the page exists only as a draft in the open release. Disables
23
+ * gone/redirect options — the page was never live so there's no equity to
24
+ * preserve and "discard draft" is the only meaningful action.
25
+ */
26
+ isDraft: boolean;
27
+ /** Selectable redirect targets — pages-panel passes the filtered page list. */
28
+ targets: RedirectTarget[];
29
+ /**
30
+ * Map of source-url → terminal-redirect-url for chains in the working
31
+ * release plus any published tombstones. Used to auto-flatten if the user
32
+ * picks a target that's itself redirected.
33
+ */
34
+ redirectsByUrl: Record<string, string>;
35
+ deleting: boolean;
36
+ error: string | null;
37
+ onConfirm: (mode: DeletePageMode, target?: string) => void;
38
+ };
39
+
40
+ let {
41
+ open,
42
+ onOpenChange,
43
+ url,
44
+ isDraft,
45
+ targets,
46
+ redirectsByUrl,
47
+ deleting,
48
+ error,
49
+ onConfirm
50
+ }: Props = $props();
51
+
52
+ let mode = $state<DeletePageMode>('delete');
53
+ let pageTargetValue = $state('');
54
+ let externalUrl = $state('');
55
+ let useExternal = $state(false);
56
+
57
+ $effect.pre(() => {
58
+ if (!open) return;
59
+ mode = 'delete';
60
+ pageTargetValue = '';
61
+ externalUrl = '';
62
+ useExternal = false;
63
+ });
64
+
65
+ const optionValueFor = (t: RedirectTarget) => `${t.routeId}::${JSON.stringify(t.params)}`;
66
+
67
+ const selectableTargets = $derived(targets.filter((t) => t.url !== url));
68
+
69
+ const pickedRawTarget = $derived.by((): string => {
70
+ if (mode !== 'redirect') return '';
71
+ if (useExternal) return externalUrl.trim();
72
+ const opt = selectableTargets.find((t) => optionValueFor(t) === pageTargetValue);
73
+ return opt?.url ?? '';
74
+ });
75
+
76
+ /**
77
+ * Walk the redirect chain from `target` until we hit a URL that isn't itself
78
+ * a redirect, or we revisit a URL (cycle). Returns the terminal URL plus the
79
+ * number of hops taken — when hops > 0 the dialog surfaces a notice that the
80
+ * stored target will be the flattened terminal.
81
+ */
82
+ const resolved = $derived.by((): { terminal: string; hops: number; cycle: boolean } => {
83
+ const t = pickedRawTarget;
84
+ if (!t) return { terminal: '', hops: 0, cycle: false };
85
+ const seen = new Set<string>([url]);
86
+ let cur = t;
87
+ let hops = 0;
88
+ while (redirectsByUrl[cur]) {
89
+ if (seen.has(cur)) return { terminal: cur, hops, cycle: true };
90
+ seen.add(cur);
91
+ cur = redirectsByUrl[cur];
92
+ hops += 1;
93
+ if (hops > 50) return { terminal: cur, hops, cycle: true };
94
+ }
95
+ return {
96
+ terminal: cur,
97
+ hops,
98
+ cycle: cur === url
99
+ };
100
+ });
101
+
102
+ const isSelfRedirect = $derived(
103
+ mode === 'redirect' && pickedRawTarget !== '' && resolved.terminal === url
104
+ );
105
+
106
+ const canSubmit = $derived.by(() => {
107
+ if (deleting) return false;
108
+ if (mode === 'redirect') {
109
+ if (resolved.terminal === '') return false;
110
+ if (isSelfRedirect) return false;
111
+ }
112
+ return true;
113
+ });
114
+
115
+ const submit = () => {
116
+ if (!canSubmit) return;
117
+ if (mode === 'redirect') onConfirm('redirect', resolved.terminal);
118
+ else onConfirm(mode);
119
+ };
120
+ </script>
121
+
122
+ <Dialog.Root
123
+ {open}
124
+ onOpenChange={(next) => {
125
+ if (!next && deleting) return;
126
+ onOpenChange(next);
127
+ }}
128
+ >
129
+ <Dialog.Content showCloseButton={false} class="vela:max-w-[28rem]">
130
+ <form
131
+ class="vela:flex vela:flex-col vela:gap-0"
132
+ onsubmit={(e) => {
133
+ e.preventDefault();
134
+ submit();
135
+ }}
136
+ >
137
+ <Dialog.Header>
138
+ <Dialog.Title>{isDraft ? 'Discard draft page' : 'Delete page'}</Dialog.Title>
139
+ <Dialog.Description>
140
+ <span class="vela:font-mono">{url}</span>
141
+ </Dialog.Description>
142
+ </Dialog.Header>
143
+
144
+ <div class="vela:px-6 vela:pb-2 vela:flex vela:flex-col vela:gap-3">
145
+ {#if isDraft}
146
+ <p class="vela:text-[13px] vela:text-bar-text-secondary">
147
+ This page is unpublished. Discarding removes the draft entirely.
148
+ </p>
149
+ {:else}
150
+ <fieldset class="vela:flex vela:flex-col vela:gap-2 vela:m-0 vela:p-0 vela:border-0">
151
+ <legend class="vela:sr-only">Choose deletion mode</legend>
152
+
153
+ <label
154
+ class="vela:flex vela:items-start vela:gap-2 vela:cursor-pointer vela:p-2 vela:rounded-md vela:hover:bg-[var(--cms-bar-bg-hover)]"
155
+ >
156
+ <input
157
+ type="radio"
158
+ name="delete-mode"
159
+ value="delete"
160
+ checked={mode === 'delete'}
161
+ onchange={() => (mode = 'delete')}
162
+ disabled={deleting}
163
+ class="vela:mt-0.5"
164
+ />
165
+ <span class="vela:flex vela:flex-col vela:gap-0.5">
166
+ <span class="vela:text-[13px] vela:text-bar-text">
167
+ Delete page (404 Not Found)
168
+ </span>
169
+ <span class="vela:text-[12px] vela:text-bar-text-secondary">
170
+ The URL becomes a regular not-found.
171
+ </span>
172
+ </span>
173
+ </label>
174
+
175
+ <label
176
+ class="vela:flex vela:items-start vela:gap-2 vela:cursor-pointer vela:p-2 vela:rounded-md vela:hover:bg-[var(--cms-bar-bg-hover)]"
177
+ >
178
+ <input
179
+ type="radio"
180
+ name="delete-mode"
181
+ value="gone"
182
+ checked={mode === 'gone'}
183
+ onchange={() => (mode = 'gone')}
184
+ disabled={deleting}
185
+ class="vela:mt-0.5"
186
+ />
187
+ <span class="vela:flex vela:flex-col vela:gap-0.5">
188
+ <span class="vela:text-[13px] vela:text-bar-text">
189
+ Mark as permanently gone (410)
190
+ </span>
191
+ <span class="vela:text-[12px] vela:text-bar-text-secondary">
192
+ Tells crawlers the URL is intentionally removed.
193
+ </span>
194
+ </span>
195
+ </label>
196
+
197
+ <label
198
+ class="vela:flex vela:items-start vela:gap-2 vela:cursor-pointer vela:p-2 vela:rounded-md vela:hover:bg-[var(--cms-bar-bg-hover)]"
199
+ >
200
+ <input
201
+ type="radio"
202
+ name="delete-mode"
203
+ value="redirect"
204
+ checked={mode === 'redirect'}
205
+ onchange={() => (mode = 'redirect')}
206
+ disabled={deleting}
207
+ class="vela:mt-0.5"
208
+ />
209
+ <span class="vela:flex vela:flex-col vela:gap-0.5">
210
+ <span class="vela:text-[13px] vela:text-bar-text">
211
+ Replace with redirect (308)
212
+ </span>
213
+ <span class="vela:text-[12px] vela:text-bar-text-secondary">
214
+ Send visitors to another URL. Preserves SEO equity.
215
+ </span>
216
+ </span>
217
+ </label>
218
+ </fieldset>
219
+
220
+ {#if mode === 'redirect'}
221
+ <div
222
+ class="vela:flex vela:flex-col vela:gap-2 vela:pl-7 vela:border-l vela:border-[var(--cms-bar-divider)] vela:ml-2"
223
+ >
224
+ <div class="vela:flex vela:items-center vela:gap-3">
225
+ <Label class="vela:text-[12px] vela:text-bar-text-secondary">Target:</Label>
226
+ <label class="vela:text-[12px] vela:flex vela:items-center vela:gap-1">
227
+ <input
228
+ type="radio"
229
+ name="target-source"
230
+ checked={!useExternal}
231
+ onchange={() => (useExternal = false)}
232
+ disabled={deleting}
233
+ />
234
+ Page
235
+ </label>
236
+ <label class="vela:text-[12px] vela:flex vela:items-center vela:gap-1">
237
+ <input
238
+ type="radio"
239
+ name="target-source"
240
+ checked={useExternal}
241
+ onchange={() => (useExternal = true)}
242
+ disabled={deleting}
243
+ />
244
+ External URL
245
+ </label>
246
+ </div>
247
+
248
+ {#if useExternal}
249
+ <Input
250
+ type="url"
251
+ placeholder="https://other-site.com/page"
252
+ bind:value={externalUrl}
253
+ disabled={deleting}
254
+ />
255
+ {:else if selectableTargets.length === 0}
256
+ <p class="vela:text-[12px] vela:text-bar-text-tertiary">
257
+ No other pages available — switch to External URL.
258
+ </p>
259
+ {:else}
260
+ <Select.Root
261
+ type="single"
262
+ value={pageTargetValue}
263
+ onValueChange={(v) => (pageTargetValue = v)}
264
+ >
265
+ <Select.Trigger size="sm">
266
+ <span data-slot="select-value" class="vela:truncate">
267
+ {selectableTargets.find((t) => optionValueFor(t) === pageTargetValue)?.url ??
268
+ '— Select page —'}
269
+ </span>
270
+ </Select.Trigger>
271
+ <Select.Content sideOffset={6}>
272
+ {#each selectableTargets as t (optionValueFor(t))}
273
+ <Select.Item value={optionValueFor(t)} label={t.url}>
274
+ {t.url}
275
+ </Select.Item>
276
+ {/each}
277
+ </Select.Content>
278
+ </Select.Root>
279
+ {/if}
280
+
281
+ {#if isSelfRedirect}
282
+ <p class="vela:text-[12px] vela:text-[var(--cms-status-error-text)]" role="alert">
283
+ This would redirect to itself.
284
+ </p>
285
+ {:else if resolved.hops > 0 && resolved.terminal !== ''}
286
+ <p class="vela:text-[12px] vela:text-bar-text-secondary">
287
+ Will redirect directly to <span class="vela:font-mono">{resolved.terminal}</span>
288
+ (skipping {resolved.hops} chained redirect{resolved.hops === 1 ? '' : 's'}).
289
+ </p>
290
+ {/if}
291
+ </div>
292
+ {/if}
293
+ {/if}
294
+ </div>
295
+
296
+ {#if error}
297
+ <p
298
+ role="alert"
299
+ class="vela:mx-6 vela:mt-2 vela:px-3 vela:py-2 vela:rounded-md
300
+ vela:bg-[var(--cms-status-error-bg)] vela:text-[var(--cms-status-error-text)] vela:text-[12px]"
301
+ >
302
+ {error}
303
+ </p>
304
+ {/if}
305
+
306
+ <Dialog.Footer class="vela:justify-end vela:pt-4">
307
+ <Button variant="ghost" onclick={() => onOpenChange(false)} disabled={deleting}>
308
+ Cancel
309
+ </Button>
310
+ <Button type="submit" variant="outline-destructive" disabled={!canSubmit}>
311
+ {#if deleting}
312
+ Working…
313
+ {:else if isDraft}
314
+ Discard
315
+ {:else if mode === 'redirect'}
316
+ Stage redirect
317
+ {:else if mode === 'gone'}
318
+ Stage 410
319
+ {:else}
320
+ Stage delete
321
+ {/if}
322
+ </Button>
323
+ </Dialog.Footer>
324
+ </form>
325
+ </Dialog.Content>
326
+ </Dialog.Root>
@@ -0,0 +1,32 @@
1
+ export type DeletePageMode = 'delete' | 'gone' | 'redirect';
2
+ export type RedirectTarget = {
3
+ url: string;
4
+ routeId: string;
5
+ params: Record<string, string>;
6
+ };
7
+ type Props = {
8
+ open: boolean;
9
+ onOpenChange: (open: boolean) => void;
10
+ /** The URL being deleted, shown in the heading and used for self-redirect detection. */
11
+ url: string;
12
+ /**
13
+ * `true` when the page exists only as a draft in the open release. Disables
14
+ * gone/redirect options — the page was never live so there's no equity to
15
+ * preserve and "discard draft" is the only meaningful action.
16
+ */
17
+ isDraft: boolean;
18
+ /** Selectable redirect targets — pages-panel passes the filtered page list. */
19
+ targets: RedirectTarget[];
20
+ /**
21
+ * Map of source-url → terminal-redirect-url for chains in the working
22
+ * release plus any published tombstones. Used to auto-flatten if the user
23
+ * picks a target that's itself redirected.
24
+ */
25
+ redirectsByUrl: Record<string, string>;
26
+ deleting: boolean;
27
+ error: string | null;
28
+ onConfirm: (mode: DeletePageMode, target?: string) => void;
29
+ };
30
+ declare const DeletePageDialog: import("svelte").Component<Props, {}, "">;
31
+ type DeletePageDialog = ReturnType<typeof DeletePageDialog>;
32
+ export default DeletePageDialog;
@@ -0,0 +1,264 @@
1
+ <script lang="ts">
2
+ import { goto } from '$app/navigation';
3
+ import { page } from '$app/state';
4
+ import PanelFooter from './panel-footer.svelte';
5
+ import PanelHeader from './panel-header.svelte';
6
+ import Panel from './panel.svelte';
7
+ import { resolveRouteOnlyParams, resolveRouteUrl } from './resolve-route.js';
8
+ import { Badge } from './ui/badge/index.js';
9
+ import { Button } from './ui/button/index.js';
10
+
11
+ type ReleaseItem =
12
+ | {
13
+ kind: 'page';
14
+ routeId: string;
15
+ params: Record<string, string>;
16
+ fields: Record<string, unknown>;
17
+ }
18
+ | {
19
+ kind: 'page-delete';
20
+ routeId: string;
21
+ params: Record<string, string>;
22
+ outcome?: { kind: 'gone' } | { kind: 'redirect'; to: string };
23
+ }
24
+ | { kind: 'layout'; routeId: string; fields: Record<string, unknown> };
25
+
26
+ type PublishedRelease = {
27
+ id: string;
28
+ name?: string;
29
+ publishedBy: string;
30
+ publishedAt: string;
31
+ preview_key: string;
32
+ revertedAt?: string;
33
+ items: ReleaseItem[];
34
+ };
35
+
36
+ type Props = {
37
+ endpoint: string;
38
+ onClose: () => void;
39
+ onChanged: () => Promise<void> | void;
40
+ };
41
+ let { endpoint, onClose, onChanged }: Props = $props();
42
+
43
+ let history = $state<PublishedRelease[]>([]);
44
+ let loading = $state(false);
45
+ let reverting = $state<string | null>(null);
46
+
47
+ const load = async () => {
48
+ loading = true;
49
+ try {
50
+ const res = await fetch(`${endpoint}/release/history`, { credentials: 'include' });
51
+ if (!res.ok) return;
52
+ const data = (await res.json()) as { history: PublishedRelease[] };
53
+ history = data.history;
54
+ } finally {
55
+ loading = false;
56
+ }
57
+ };
58
+
59
+ $effect(() => {
60
+ void load();
61
+ });
62
+
63
+ const onRevert = async (release: PublishedRelease) => {
64
+ const label = release.name ?? release.id.slice(0, 8);
65
+ if (
66
+ !confirm(`Revert release "${label}"? This will create a new release that undoes its changes.`)
67
+ )
68
+ return;
69
+ reverting = release.id;
70
+ try {
71
+ const res = await fetch(`${endpoint}/release/history/${release.id}/revert`, {
72
+ credentials: 'include',
73
+ method: 'POST'
74
+ });
75
+ if (!res.ok) return;
76
+ await load();
77
+ await onChanged();
78
+ } finally {
79
+ reverting = null;
80
+ }
81
+ };
82
+
83
+ const formatDate = (iso: string): string => {
84
+ try {
85
+ const d = new Date(iso);
86
+ const now = new Date();
87
+ const sameDay =
88
+ d.getFullYear() === now.getFullYear() &&
89
+ d.getMonth() === now.getMonth() &&
90
+ d.getDate() === now.getDate();
91
+ const yesterday = new Date(now);
92
+ yesterday.setDate(yesterday.getDate() - 1);
93
+ const isYesterday =
94
+ d.getFullYear() === yesterday.getFullYear() &&
95
+ d.getMonth() === yesterday.getMonth() &&
96
+ d.getDate() === yesterday.getDate();
97
+ const time = d.toLocaleTimeString(undefined, { hour: 'numeric', minute: '2-digit' });
98
+ if (sameDay) return `Today, ${time}`;
99
+ if (isYesterday) return `Yesterday`;
100
+ return d.toLocaleDateString(undefined, { month: 'short', day: 'numeric' });
101
+ } catch {
102
+ return iso;
103
+ }
104
+ };
105
+
106
+ const isCommitHash = (s: string): boolean => /^[a-f0-9]{6,40}$/i.test(s);
107
+
108
+ type DisplayRelease = {
109
+ release: PublishedRelease;
110
+ title: string;
111
+ titleIsHash: boolean;
112
+ isLive: boolean;
113
+ paths: string[];
114
+ extraPaths: number;
115
+ };
116
+
117
+ const displayList = $derived.by<DisplayRelease[]>(() =>
118
+ history.map((release, idx) => {
119
+ const title = release.name ?? release.id.slice(0, 8);
120
+ const titleIsHash = !release.name && isCommitHash(title);
121
+ const isLive = idx === 0 && !release.revertedAt;
122
+
123
+ const seen = new Set<string>();
124
+ const allPaths: string[] = [];
125
+ for (const item of release.items) {
126
+ let path: string;
127
+ if (item.kind === 'layout') {
128
+ path = resolveRouteOnlyParams(item.routeId);
129
+ } else {
130
+ try {
131
+ path = resolveRouteUrl(item.routeId, item.params);
132
+ } catch {
133
+ path = resolveRouteOnlyParams(item.routeId);
134
+ }
135
+ }
136
+ if (!seen.has(path)) {
137
+ seen.add(path);
138
+ allPaths.push(path);
139
+ }
140
+ }
141
+ const cap = 3;
142
+ const paths = allPaths.slice(0, cap);
143
+ const extraPaths = Math.max(0, allPaths.length - cap);
144
+ return { release, title, titleIsHash, isLive, paths, extraPaths };
145
+ })
146
+ );
147
+
148
+ const onView = async (release: PublishedRelease) => {
149
+ const url = new URL(page.url);
150
+ url.searchParams.delete('preview');
151
+ url.searchParams.delete('edit');
152
+ url.searchParams.set('version', release.preview_key);
153
+ await goto(url.pathname + url.search + url.hash, { keepFocus: true, noScroll: true });
154
+ onClose();
155
+ };
156
+ </script>
157
+
158
+ <Panel ariaLabel="Recent releases" {onClose}>
159
+ <PanelHeader title="Recent releases" {onClose}>
160
+ {#snippet subtitle()}
161
+ <span class="vela:text-[12px] vela:text-bar-text-secondary">last 30 days</span>
162
+ {/snippet}
163
+ </PanelHeader>
164
+
165
+ <div class="vela:overflow-y-auto vela:px-4 vela:pb-2">
166
+ {#if loading && history.length === 0}
167
+ <p class="vela:text-[13px] vela:text-bar-text-tertiary vela:py-2">Loading…</p>
168
+ {:else if history.length === 0}
169
+ <p class="vela:text-[13px] vela:text-bar-text-tertiary vela:py-2">
170
+ No published releases yet.
171
+ </p>
172
+ {:else}
173
+ <ol class="vela:list-none vela:pl-0 vela:m-0 vela:relative vela:flex vela:flex-col">
174
+ <span
175
+ class="vela:absolute vela:left-[5px] vela:top-2 vela:bottom-2 vela:w-px vela:bg-[var(--cms-bar-divider)]"
176
+ aria-hidden="true"
177
+ ></span>
178
+ {#each displayList as { release, title, titleIsHash, isLive, paths, extraPaths } (release.id)}
179
+ <li class="vela:relative vela:pl-6 vela:pr-1 vela:py-2.5">
180
+ <span
181
+ class="vela:absolute vela:left-0 vela:top-3.5 vela:w-[11px] vela:h-[11px]
182
+ vela:rounded-full vela:bg-bar-bg vela:flex vela:items-center vela:justify-center"
183
+ aria-hidden="true"
184
+ >
185
+ <span
186
+ class="vela:w-2 vela:h-2 vela:rounded-full"
187
+ style:background-color={isLive ? 'var(--cms-status-clean-dot)' : '#444'}
188
+ ></span>
189
+ </span>
190
+ <div class="vela:flex vela:items-start vela:justify-between vela:gap-3">
191
+ <div class="vela:flex vela:flex-col vela:min-w-0 vela:flex-1">
192
+ <div class="vela:flex vela:items-center vela:gap-2 vela:min-w-0">
193
+ {#if titleIsHash}
194
+ <span class="vela:font-mono vela:text-[12px] vela:text-bar-text vela:truncate">
195
+ {title}
196
+ </span>
197
+ {:else}
198
+ <span
199
+ class="vela:text-[13px] vela:font-medium vela:text-bar-text vela:truncate"
200
+ >
201
+ {title}
202
+ </span>
203
+ {/if}
204
+ {#if release.revertedAt}
205
+ <Badge variant="warn" size="sm">reverted</Badge>
206
+ {/if}
207
+ </div>
208
+ <div class="vela:text-[11px] vela:text-bar-text-tertiary vela:mt-0.5">
209
+ {formatDate(release.publishedAt)} · published by {release.publishedBy}{isLive
210
+ ? ' · '
211
+ : ''}{#if isLive}<span class="vela:text-[var(--cms-status-clean-dot)]"
212
+ >live now</span
213
+ >{/if}
214
+ </div>
215
+ {#if paths.length > 0}
216
+ <div class="vela:flex vela:flex-wrap vela:gap-1.5 vela:mt-2">
217
+ {#each paths as path}
218
+ <span
219
+ class="vela:font-mono vela:text-[11px] vela:px-1.5 vela:py-0.5 vela:rounded
220
+ vela:bg-[var(--cms-bar-bg-hover)] vela:text-bar-text-secondary"
221
+ >
222
+ {path}
223
+ </span>
224
+ {/each}
225
+ {#if extraPaths > 0}
226
+ <span
227
+ class="vela:text-[11px] vela:text-bar-text-tertiary vela:px-1 vela:py-0.5"
228
+ >
229
+ +{extraPaths} more
230
+ </span>
231
+ {/if}
232
+ </div>
233
+ {/if}
234
+ </div>
235
+ <div class="vela:flex vela:items-center vela:gap-1.5 vela:shrink-0">
236
+ <Button variant="outline" size="pill" onclick={() => onView(release)}>View</Button>
237
+ {#if !isLive}
238
+ <Button
239
+ variant="outline"
240
+ size="pill"
241
+ disabled={reverting === release.id || !!release.revertedAt}
242
+ onclick={() => onRevert(release)}
243
+ >
244
+ {reverting === release.id ? '…' : 'Revert'}
245
+ </Button>
246
+ {/if}
247
+ </div>
248
+ </div>
249
+ </li>
250
+ {/each}
251
+ </ol>
252
+ {/if}
253
+ </div>
254
+
255
+ <PanelFooter>
256
+ <span>
257
+ {history.length}
258
+ {history.length === 1 ? 'release' : 'releases'} shown
259
+ </span>
260
+ <Button variant="link" size="xs" disabled class="vela:text-bar-text-tertiary">
261
+ Load older →
262
+ </Button>
263
+ </PanelFooter>
264
+ </Panel>
@@ -0,0 +1,8 @@
1
+ type Props = {
2
+ endpoint: string;
3
+ onClose: () => void;
4
+ onChanged: () => Promise<void> | void;
5
+ };
6
+ declare const HistoryPanel: import("svelte").Component<Props, {}, "">;
7
+ type HistoryPanel = ReturnType<typeof HistoryPanel>;
8
+ export default HistoryPanel;
@@ -0,0 +1,13 @@
1
+ <script lang="ts">
2
+ // Lucide `bold` icon path data (https://lucide.dev) — ISC License,
3
+ // Copyright (c) Lucide Icons and Contributors. See ./types.ts.
4
+ import Icon from './icon.svelte';
5
+ import type { IconNode } from './types.js';
6
+
7
+ const iconNode: IconNode = [
8
+ ['path', { d: 'M6 12h9a4 4 0 0 1 0 8H7a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1h7a4 4 0 0 1 0 8' }]
9
+ ];
10
+ let props = $props();
11
+ </script>
12
+
13
+ <Icon {iconNode} {...props} />
@@ -0,0 +1,3 @@
1
+ declare const Bold: import("svelte").Component<$$ComponentProps, {}, "">;
2
+ type Bold = ReturnType<typeof Bold>;
3
+ export default Bold;
@@ -0,0 +1,11 @@
1
+ <script lang="ts">
2
+ // Lucide `check` icon path data (https://lucide.dev) — ISC License,
3
+ // Copyright (c) Lucide Icons and Contributors. See ./types.ts.
4
+ import Icon from './icon.svelte';
5
+ import type { IconNode } from './types.js';
6
+
7
+ const iconNode: IconNode = [['path', { d: 'M20 6 9 17l-5-5' }]];
8
+ let props = $props();
9
+ </script>
10
+
11
+ <Icon {iconNode} {...props} />
@@ -0,0 +1,3 @@
1
+ declare const Check: import("svelte").Component<$$ComponentProps, {}, "">;
2
+ type Check = ReturnType<typeof Check>;
3
+ export default Check;
@@ -0,0 +1,11 @@
1
+ <script lang="ts">
2
+ // Lucide `chevron-down` icon path data (https://lucide.dev) — ISC License,
3
+ // Copyright (c) Lucide Icons and Contributors. See ./types.ts.
4
+ import Icon from './icon.svelte';
5
+ import type { IconNode } from './types.js';
6
+
7
+ const iconNode: IconNode = [['path', { d: 'm6 9 6 6 6-6' }]];
8
+ let props = $props();
9
+ </script>
10
+
11
+ <Icon {iconNode} {...props} />
@@ -0,0 +1,3 @@
1
+ declare const ChevronDown: import("svelte").Component<$$ComponentProps, {}, "">;
2
+ type ChevronDown = ReturnType<typeof ChevronDown>;
3
+ export default ChevronDown;