@xleddyl/nuxt-cms 0.1.11 → 0.1.13

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 (407) hide show
  1. package/dist/module.json +1 -1
  2. package/dist/module.mjs +6 -27
  3. package/dist/runtime/app/components/cms/Alert.d.vue.ts +18 -0
  4. package/dist/runtime/app/components/cms/Alert.vue +14 -0
  5. package/dist/runtime/app/components/cms/Alert.vue.d.ts +18 -0
  6. package/dist/runtime/app/components/cms/BlocksField.vue +23 -26
  7. package/dist/runtime/app/components/cms/Button.d.vue.ts +25 -0
  8. package/dist/runtime/app/components/cms/Button.vue +33 -0
  9. package/dist/runtime/app/components/cms/Button.vue.d.ts +25 -0
  10. package/dist/runtime/app/components/cms/ConfirmModal.d.vue.ts +1 -18
  11. package/dist/runtime/app/components/cms/ConfirmModal.vue +20 -21
  12. package/dist/runtime/app/components/cms/ConfirmModal.vue.d.ts +1 -18
  13. package/dist/runtime/app/components/cms/DropdownMenu.d.vue.ts +29 -0
  14. package/dist/runtime/app/components/cms/DropdownMenu.vue +57 -0
  15. package/dist/runtime/app/components/cms/DropdownMenu.vue.d.ts +29 -0
  16. package/dist/runtime/app/components/cms/EmptyState.vue +3 -3
  17. package/dist/runtime/app/components/cms/EntryForm.vue +9 -22
  18. package/dist/runtime/app/components/cms/FieldInput.vue +15 -8
  19. package/dist/runtime/app/components/cms/Form.d.vue.ts +35 -0
  20. package/dist/runtime/app/components/cms/Form.vue +42 -0
  21. package/dist/runtime/app/components/cms/Form.vue.d.ts +35 -0
  22. package/dist/runtime/app/components/cms/FormField.d.vue.ts +21 -0
  23. package/dist/runtime/app/components/cms/FormField.vue +22 -0
  24. package/dist/runtime/app/components/cms/FormField.vue.d.ts +21 -0
  25. package/dist/runtime/app/components/cms/Icon.d.vue.ts +6 -0
  26. package/dist/runtime/app/components/cms/Icon.vue +18 -0
  27. package/dist/runtime/app/components/cms/Icon.vue.d.ts +6 -0
  28. package/dist/runtime/app/components/cms/Input.d.vue.ts +28 -0
  29. package/dist/runtime/app/components/cms/Input.vue +43 -0
  30. package/dist/runtime/app/components/cms/Input.vue.d.ts +28 -0
  31. package/dist/runtime/app/components/cms/JsonField.vue +3 -6
  32. package/dist/runtime/app/components/cms/MediaField.vue +14 -15
  33. package/dist/runtime/app/components/cms/MediaGallery.vue +52 -49
  34. package/dist/runtime/app/components/cms/MediaUpload.vue +9 -8
  35. package/dist/runtime/app/components/cms/Modal.d.vue.ts +34 -0
  36. package/dist/runtime/app/components/cms/Modal.vue +54 -0
  37. package/dist/runtime/app/components/cms/Modal.vue.d.ts +34 -0
  38. package/dist/runtime/app/components/cms/PageHeader.vue +1 -1
  39. package/dist/runtime/app/components/cms/Pagination.d.vue.ts +15 -0
  40. package/dist/runtime/app/components/cms/Pagination.vue +51 -0
  41. package/dist/runtime/app/components/cms/Pagination.vue.d.ts +15 -0
  42. package/dist/runtime/app/components/cms/Popover.d.vue.ts +22 -0
  43. package/dist/runtime/app/components/cms/Popover.vue +27 -0
  44. package/dist/runtime/app/components/cms/Popover.vue.d.ts +22 -0
  45. package/dist/runtime/app/components/cms/RelationField.vue +6 -6
  46. package/dist/runtime/app/components/cms/RichTextField.vue +38 -39
  47. package/dist/runtime/app/components/cms/Select.d.vue.ts +16 -0
  48. package/dist/runtime/app/components/cms/Select.vue +19 -0
  49. package/dist/runtime/app/components/cms/Select.vue.d.ts +16 -0
  50. package/dist/runtime/app/components/cms/SelectMenu.d.vue.ts +25 -0
  51. package/dist/runtime/app/components/cms/SelectMenu.vue +110 -0
  52. package/dist/runtime/app/components/cms/SelectMenu.vue.d.ts +25 -0
  53. package/dist/runtime/app/components/cms/SlugField.vue +4 -4
  54. package/dist/runtime/app/components/cms/Switch.d.vue.ts +10 -0
  55. package/dist/runtime/app/components/cms/Switch.vue +14 -0
  56. package/dist/runtime/app/components/cms/Switch.vue.d.ts +10 -0
  57. package/dist/runtime/app/components/cms/Table.d.vue.ts +48 -0
  58. package/dist/runtime/app/components/cms/Table.vue +47 -0
  59. package/dist/runtime/app/components/cms/Table.vue.d.ts +48 -0
  60. package/dist/runtime/app/components/cms/Textarea.d.vue.ts +16 -0
  61. package/dist/runtime/app/components/cms/Textarea.vue +17 -0
  62. package/dist/runtime/app/components/cms/Textarea.vue.d.ts +16 -0
  63. package/dist/runtime/app/components/cms/Toaster.d.vue.ts +3 -0
  64. package/dist/runtime/app/components/cms/Toaster.vue +42 -0
  65. package/dist/runtime/app/components/cms/Toaster.vue.d.ts +3 -0
  66. package/dist/runtime/app/components/cms/TranslatableField.vue +5 -5
  67. package/dist/runtime/app/composables/cms-confirm.d.ts +8 -0
  68. package/dist/runtime/app/composables/cms-confirm.js +14 -5
  69. package/dist/runtime/app/composables/cms-toast.d.ts +13 -0
  70. package/dist/runtime/app/composables/cms-toast.js +18 -0
  71. package/dist/runtime/app/layouts/cms-admin.vue +21 -21
  72. package/dist/runtime/app/middleware/cms-auth.d.ts +1 -1
  73. package/dist/runtime/app/pages/admin-collection.vue +40 -53
  74. package/dist/runtime/app/pages/admin-entry.vue +15 -19
  75. package/dist/runtime/app/pages/admin-login.vue +16 -24
  76. package/dist/runtime/app/pages/admin-media.vue +2 -3
  77. package/dist/runtime/app/utils/ui.d.ts +4 -0
  78. package/dist/runtime/app/utils/ui.js +1 -0
  79. package/dist/runtime/assets/main.css +1 -1
  80. package/dist/runtime/assets/svg/academic-cap.svg +3 -0
  81. package/dist/runtime/assets/svg/adjustments-horizontal.svg +3 -0
  82. package/dist/runtime/assets/svg/adjustments-vertical.svg +3 -0
  83. package/dist/runtime/assets/svg/archive-box-arrow-down.svg +3 -0
  84. package/dist/runtime/assets/svg/archive-box-x-mark.svg +3 -0
  85. package/dist/runtime/assets/svg/archive-box.svg +3 -0
  86. package/dist/runtime/assets/svg/arrow-down-circle.svg +3 -0
  87. package/dist/runtime/assets/svg/arrow-down-left.svg +3 -0
  88. package/dist/runtime/assets/svg/arrow-down-on-square-stack.svg +3 -0
  89. package/dist/runtime/assets/svg/arrow-down-on-square.svg +3 -0
  90. package/dist/runtime/assets/svg/arrow-down-right.svg +3 -0
  91. package/dist/runtime/assets/svg/arrow-down-tray.svg +3 -0
  92. package/dist/runtime/assets/svg/arrow-down.svg +3 -0
  93. package/dist/runtime/assets/svg/arrow-left-circle.svg +3 -0
  94. package/dist/runtime/assets/svg/arrow-left-end-on-rectangle.svg +3 -0
  95. package/dist/runtime/assets/svg/arrow-left-on-rectangle.svg +3 -0
  96. package/dist/runtime/assets/svg/arrow-left-start-on-rectangle.svg +3 -0
  97. package/dist/runtime/assets/svg/arrow-left.svg +3 -0
  98. package/dist/runtime/assets/svg/arrow-long-down.svg +3 -0
  99. package/dist/runtime/assets/svg/arrow-long-left.svg +3 -0
  100. package/dist/runtime/assets/svg/arrow-long-right.svg +3 -0
  101. package/dist/runtime/assets/svg/arrow-long-up.svg +3 -0
  102. package/dist/runtime/assets/svg/arrow-path-rounded-square.svg +3 -0
  103. package/dist/runtime/assets/svg/arrow-path.svg +3 -0
  104. package/dist/runtime/assets/svg/arrow-right-circle.svg +3 -0
  105. package/dist/runtime/assets/svg/arrow-right-end-on-rectangle.svg +3 -0
  106. package/dist/runtime/assets/svg/arrow-right-on-rectangle.svg +3 -0
  107. package/dist/runtime/assets/svg/arrow-right-start-on-rectangle.svg +3 -0
  108. package/dist/runtime/assets/svg/arrow-right.svg +3 -0
  109. package/dist/runtime/assets/svg/arrow-small-down.svg +3 -0
  110. package/dist/runtime/assets/svg/arrow-small-left.svg +3 -0
  111. package/dist/runtime/assets/svg/arrow-small-right.svg +3 -0
  112. package/dist/runtime/assets/svg/arrow-small-up.svg +3 -0
  113. package/dist/runtime/assets/svg/arrow-top-right-on-square.svg +3 -0
  114. package/dist/runtime/assets/svg/arrow-trending-down.svg +3 -0
  115. package/dist/runtime/assets/svg/arrow-trending-up.svg +3 -0
  116. package/dist/runtime/assets/svg/arrow-turn-down-left.svg +3 -0
  117. package/dist/runtime/assets/svg/arrow-turn-down-right.svg +3 -0
  118. package/dist/runtime/assets/svg/arrow-turn-left-down.svg +3 -0
  119. package/dist/runtime/assets/svg/arrow-turn-left-up.svg +3 -0
  120. package/dist/runtime/assets/svg/arrow-turn-right-down.svg +3 -0
  121. package/dist/runtime/assets/svg/arrow-turn-right-up.svg +3 -0
  122. package/dist/runtime/assets/svg/arrow-turn-up-left.svg +3 -0
  123. package/dist/runtime/assets/svg/arrow-turn-up-right.svg +3 -0
  124. package/dist/runtime/assets/svg/arrow-up-circle.svg +3 -0
  125. package/dist/runtime/assets/svg/arrow-up-left.svg +3 -0
  126. package/dist/runtime/assets/svg/arrow-up-on-square-stack.svg +3 -0
  127. package/dist/runtime/assets/svg/arrow-up-on-square.svg +3 -0
  128. package/dist/runtime/assets/svg/arrow-up-right.svg +3 -0
  129. package/dist/runtime/assets/svg/arrow-up-tray.svg +3 -0
  130. package/dist/runtime/assets/svg/arrow-up.svg +3 -0
  131. package/dist/runtime/assets/svg/arrow-uturn-down.svg +3 -0
  132. package/dist/runtime/assets/svg/arrow-uturn-left.svg +3 -0
  133. package/dist/runtime/assets/svg/arrow-uturn-right.svg +3 -0
  134. package/dist/runtime/assets/svg/arrow-uturn-up.svg +3 -0
  135. package/dist/runtime/assets/svg/arrows-pointing-in.svg +3 -0
  136. package/dist/runtime/assets/svg/arrows-pointing-out.svg +3 -0
  137. package/dist/runtime/assets/svg/arrows-right-left.svg +3 -0
  138. package/dist/runtime/assets/svg/arrows-up-down.svg +3 -0
  139. package/dist/runtime/assets/svg/at-symbol.svg +3 -0
  140. package/dist/runtime/assets/svg/backspace.svg +3 -0
  141. package/dist/runtime/assets/svg/backward.svg +3 -0
  142. package/dist/runtime/assets/svg/banknotes.svg +3 -0
  143. package/dist/runtime/assets/svg/bars-2.svg +3 -0
  144. package/dist/runtime/assets/svg/bars-3-bottom-left.svg +3 -0
  145. package/dist/runtime/assets/svg/bars-3-bottom-right.svg +3 -0
  146. package/dist/runtime/assets/svg/bars-3-center-left.svg +3 -0
  147. package/dist/runtime/assets/svg/bars-3.svg +3 -0
  148. package/dist/runtime/assets/svg/bars-4.svg +3 -0
  149. package/dist/runtime/assets/svg/bars-arrow-down.svg +3 -0
  150. package/dist/runtime/assets/svg/bars-arrow-up.svg +3 -0
  151. package/dist/runtime/assets/svg/battery-0.svg +3 -0
  152. package/dist/runtime/assets/svg/battery-100.svg +3 -0
  153. package/dist/runtime/assets/svg/battery-50.svg +3 -0
  154. package/dist/runtime/assets/svg/beaker.svg +3 -0
  155. package/dist/runtime/assets/svg/bell-alert.svg +3 -0
  156. package/dist/runtime/assets/svg/bell-slash.svg +3 -0
  157. package/dist/runtime/assets/svg/bell-snooze.svg +3 -0
  158. package/dist/runtime/assets/svg/bell.svg +3 -0
  159. package/dist/runtime/assets/svg/bold.svg +3 -0
  160. package/dist/runtime/assets/svg/bolt-slash.svg +3 -0
  161. package/dist/runtime/assets/svg/bolt.svg +3 -0
  162. package/dist/runtime/assets/svg/book-open.svg +3 -0
  163. package/dist/runtime/assets/svg/bookmark-slash.svg +3 -0
  164. package/dist/runtime/assets/svg/bookmark-square.svg +3 -0
  165. package/dist/runtime/assets/svg/bookmark.svg +3 -0
  166. package/dist/runtime/assets/svg/briefcase.svg +3 -0
  167. package/dist/runtime/assets/svg/bug-ant.svg +3 -0
  168. package/dist/runtime/assets/svg/building-library.svg +3 -0
  169. package/dist/runtime/assets/svg/building-office-2.svg +3 -0
  170. package/dist/runtime/assets/svg/building-office.svg +3 -0
  171. package/dist/runtime/assets/svg/building-storefront.svg +3 -0
  172. package/dist/runtime/assets/svg/cake.svg +3 -0
  173. package/dist/runtime/assets/svg/calculator.svg +3 -0
  174. package/dist/runtime/assets/svg/calendar-date-range.svg +3 -0
  175. package/dist/runtime/assets/svg/calendar-days.svg +3 -0
  176. package/dist/runtime/assets/svg/calendar.svg +3 -0
  177. package/dist/runtime/assets/svg/camera.svg +4 -0
  178. package/dist/runtime/assets/svg/chart-bar-square.svg +3 -0
  179. package/dist/runtime/assets/svg/chart-bar.svg +3 -0
  180. package/dist/runtime/assets/svg/chart-pie.svg +4 -0
  181. package/dist/runtime/assets/svg/chat-bubble-bottom-center-text.svg +3 -0
  182. package/dist/runtime/assets/svg/chat-bubble-bottom-center.svg +3 -0
  183. package/dist/runtime/assets/svg/chat-bubble-left-ellipsis.svg +3 -0
  184. package/dist/runtime/assets/svg/chat-bubble-left-right.svg +3 -0
  185. package/dist/runtime/assets/svg/chat-bubble-left.svg +3 -0
  186. package/dist/runtime/assets/svg/chat-bubble-oval-left-ellipsis.svg +3 -0
  187. package/dist/runtime/assets/svg/chat-bubble-oval-left.svg +3 -0
  188. package/dist/runtime/assets/svg/check-badge.svg +3 -0
  189. package/dist/runtime/assets/svg/check-circle.svg +3 -0
  190. package/dist/runtime/assets/svg/check.svg +3 -0
  191. package/dist/runtime/assets/svg/chevron-double-down.svg +3 -0
  192. package/dist/runtime/assets/svg/chevron-double-left.svg +3 -0
  193. package/dist/runtime/assets/svg/chevron-double-right.svg +3 -0
  194. package/dist/runtime/assets/svg/chevron-double-up.svg +4 -0
  195. package/dist/runtime/assets/svg/chevron-down.svg +3 -0
  196. package/dist/runtime/assets/svg/chevron-left.svg +3 -0
  197. package/dist/runtime/assets/svg/chevron-right.svg +3 -0
  198. package/dist/runtime/assets/svg/chevron-up-down.svg +3 -0
  199. package/dist/runtime/assets/svg/chevron-up.svg +3 -0
  200. package/dist/runtime/assets/svg/circle-stack.svg +3 -0
  201. package/dist/runtime/assets/svg/clipboard-document-check.svg +3 -0
  202. package/dist/runtime/assets/svg/clipboard-document-list.svg +3 -0
  203. package/dist/runtime/assets/svg/clipboard-document.svg +3 -0
  204. package/dist/runtime/assets/svg/clipboard.svg +3 -0
  205. package/dist/runtime/assets/svg/clock.svg +3 -0
  206. package/dist/runtime/assets/svg/cloud-arrow-down.svg +3 -0
  207. package/dist/runtime/assets/svg/cloud-arrow-up.svg +3 -0
  208. package/dist/runtime/assets/svg/cloud.svg +3 -0
  209. package/dist/runtime/assets/svg/code-bracket-square.svg +3 -0
  210. package/dist/runtime/assets/svg/code-bracket.svg +3 -0
  211. package/dist/runtime/assets/svg/cog-6-tooth.svg +4 -0
  212. package/dist/runtime/assets/svg/cog-8-tooth.svg +4 -0
  213. package/dist/runtime/assets/svg/cog.svg +3 -0
  214. package/dist/runtime/assets/svg/command-line.svg +3 -0
  215. package/dist/runtime/assets/svg/computer-desktop.svg +3 -0
  216. package/dist/runtime/assets/svg/cpu-chip.svg +3 -0
  217. package/dist/runtime/assets/svg/credit-card.svg +3 -0
  218. package/dist/runtime/assets/svg/cube-transparent.svg +3 -0
  219. package/dist/runtime/assets/svg/cube.svg +3 -0
  220. package/dist/runtime/assets/svg/currency-bangladeshi.svg +3 -0
  221. package/dist/runtime/assets/svg/currency-dollar.svg +3 -0
  222. package/dist/runtime/assets/svg/currency-euro.svg +3 -0
  223. package/dist/runtime/assets/svg/currency-pound.svg +3 -0
  224. package/dist/runtime/assets/svg/currency-rupee.svg +3 -0
  225. package/dist/runtime/assets/svg/currency-yen.svg +3 -0
  226. package/dist/runtime/assets/svg/cursor-arrow-rays.svg +3 -0
  227. package/dist/runtime/assets/svg/cursor-arrow-ripple.svg +3 -0
  228. package/dist/runtime/assets/svg/device-phone-mobile.svg +3 -0
  229. package/dist/runtime/assets/svg/device-tablet.svg +3 -0
  230. package/dist/runtime/assets/svg/divide.svg +3 -0
  231. package/dist/runtime/assets/svg/document-arrow-down.svg +3 -0
  232. package/dist/runtime/assets/svg/document-arrow-up.svg +3 -0
  233. package/dist/runtime/assets/svg/document-chart-bar.svg +3 -0
  234. package/dist/runtime/assets/svg/document-check.svg +3 -0
  235. package/dist/runtime/assets/svg/document-currency-bangladeshi.svg +3 -0
  236. package/dist/runtime/assets/svg/document-currency-dollar.svg +3 -0
  237. package/dist/runtime/assets/svg/document-currency-euro.svg +3 -0
  238. package/dist/runtime/assets/svg/document-currency-pound.svg +3 -0
  239. package/dist/runtime/assets/svg/document-currency-rupee.svg +3 -0
  240. package/dist/runtime/assets/svg/document-currency-yen.svg +3 -0
  241. package/dist/runtime/assets/svg/document-duplicate.svg +3 -0
  242. package/dist/runtime/assets/svg/document-magnifying-glass.svg +3 -0
  243. package/dist/runtime/assets/svg/document-minus.svg +3 -0
  244. package/dist/runtime/assets/svg/document-plus.svg +3 -0
  245. package/dist/runtime/assets/svg/document-text.svg +3 -0
  246. package/dist/runtime/assets/svg/document.svg +3 -0
  247. package/dist/runtime/assets/svg/ellipsis-horizontal-circle.svg +3 -0
  248. package/dist/runtime/assets/svg/ellipsis-horizontal.svg +3 -0
  249. package/dist/runtime/assets/svg/ellipsis-vertical.svg +3 -0
  250. package/dist/runtime/assets/svg/envelope-open.svg +3 -0
  251. package/dist/runtime/assets/svg/envelope.svg +3 -0
  252. package/dist/runtime/assets/svg/equals.svg +3 -0
  253. package/dist/runtime/assets/svg/exclamation-circle.svg +3 -0
  254. package/dist/runtime/assets/svg/exclamation-triangle.svg +3 -0
  255. package/dist/runtime/assets/svg/eye-dropper.svg +3 -0
  256. package/dist/runtime/assets/svg/eye-slash.svg +3 -0
  257. package/dist/runtime/assets/svg/eye.svg +4 -0
  258. package/dist/runtime/assets/svg/face-frown.svg +3 -0
  259. package/dist/runtime/assets/svg/face-smile.svg +3 -0
  260. package/dist/runtime/assets/svg/film.svg +3 -0
  261. package/dist/runtime/assets/svg/finger-print.svg +3 -0
  262. package/dist/runtime/assets/svg/fire.svg +4 -0
  263. package/dist/runtime/assets/svg/flag.svg +3 -0
  264. package/dist/runtime/assets/svg/folder-arrow-down.svg +3 -0
  265. package/dist/runtime/assets/svg/folder-minus.svg +3 -0
  266. package/dist/runtime/assets/svg/folder-open.svg +3 -0
  267. package/dist/runtime/assets/svg/folder-plus.svg +3 -0
  268. package/dist/runtime/assets/svg/folder.svg +3 -0
  269. package/dist/runtime/assets/svg/forward.svg +3 -0
  270. package/dist/runtime/assets/svg/funnel.svg +3 -0
  271. package/dist/runtime/assets/svg/gif.svg +3 -0
  272. package/dist/runtime/assets/svg/gift-top.svg +3 -0
  273. package/dist/runtime/assets/svg/gift.svg +3 -0
  274. package/dist/runtime/assets/svg/globe-alt.svg +3 -0
  275. package/dist/runtime/assets/svg/globe-americas.svg +3 -0
  276. package/dist/runtime/assets/svg/globe-asia-australia.svg +3 -0
  277. package/dist/runtime/assets/svg/globe-europe-africa.svg +3 -0
  278. package/dist/runtime/assets/svg/h1.svg +3 -0
  279. package/dist/runtime/assets/svg/h2.svg +3 -0
  280. package/dist/runtime/assets/svg/h3.svg +3 -0
  281. package/dist/runtime/assets/svg/hand-raised.svg +3 -0
  282. package/dist/runtime/assets/svg/hand-thumb-down.svg +3 -0
  283. package/dist/runtime/assets/svg/hand-thumb-up.svg +3 -0
  284. package/dist/runtime/assets/svg/hashtag.svg +3 -0
  285. package/dist/runtime/assets/svg/heart.svg +3 -0
  286. package/dist/runtime/assets/svg/home-modern.svg +3 -0
  287. package/dist/runtime/assets/svg/home.svg +3 -0
  288. package/dist/runtime/assets/svg/identification.svg +3 -0
  289. package/dist/runtime/assets/svg/inbox-arrow-down.svg +3 -0
  290. package/dist/runtime/assets/svg/inbox-stack.svg +3 -0
  291. package/dist/runtime/assets/svg/inbox.svg +3 -0
  292. package/dist/runtime/assets/svg/information-circle.svg +3 -0
  293. package/dist/runtime/assets/svg/italic.svg +3 -0
  294. package/dist/runtime/assets/svg/key.svg +3 -0
  295. package/dist/runtime/assets/svg/language.svg +3 -0
  296. package/dist/runtime/assets/svg/lifebuoy.svg +3 -0
  297. package/dist/runtime/assets/svg/light-bulb.svg +3 -0
  298. package/dist/runtime/assets/svg/link-slash.svg +3 -0
  299. package/dist/runtime/assets/svg/link.svg +3 -0
  300. package/dist/runtime/assets/svg/list-bullet.svg +3 -0
  301. package/dist/runtime/assets/svg/lock-closed.svg +3 -0
  302. package/dist/runtime/assets/svg/lock-open.svg +3 -0
  303. package/dist/runtime/assets/svg/magnifying-glass-circle.svg +3 -0
  304. package/dist/runtime/assets/svg/magnifying-glass-minus.svg +3 -0
  305. package/dist/runtime/assets/svg/magnifying-glass-plus.svg +3 -0
  306. package/dist/runtime/assets/svg/magnifying-glass.svg +3 -0
  307. package/dist/runtime/assets/svg/map-pin.svg +4 -0
  308. package/dist/runtime/assets/svg/map.svg +3 -0
  309. package/dist/runtime/assets/svg/megaphone.svg +3 -0
  310. package/dist/runtime/assets/svg/microphone.svg +3 -0
  311. package/dist/runtime/assets/svg/minus-circle.svg +3 -0
  312. package/dist/runtime/assets/svg/minus-small.svg +3 -0
  313. package/dist/runtime/assets/svg/minus.svg +3 -0
  314. package/dist/runtime/assets/svg/moon.svg +3 -0
  315. package/dist/runtime/assets/svg/musical-note.svg +3 -0
  316. package/dist/runtime/assets/svg/newspaper.svg +3 -0
  317. package/dist/runtime/assets/svg/no-symbol.svg +3 -0
  318. package/dist/runtime/assets/svg/numbered-list.svg +3 -0
  319. package/dist/runtime/assets/svg/paint-brush.svg +3 -0
  320. package/dist/runtime/assets/svg/paper-airplane.svg +3 -0
  321. package/dist/runtime/assets/svg/paper-clip.svg +3 -0
  322. package/dist/runtime/assets/svg/pause-circle.svg +3 -0
  323. package/dist/runtime/assets/svg/pause.svg +3 -0
  324. package/dist/runtime/assets/svg/pencil-square.svg +3 -0
  325. package/dist/runtime/assets/svg/pencil.svg +3 -0
  326. package/dist/runtime/assets/svg/percent-badge.svg +3 -0
  327. package/dist/runtime/assets/svg/phone-arrow-down-left.svg +3 -0
  328. package/dist/runtime/assets/svg/phone-arrow-up-right.svg +3 -0
  329. package/dist/runtime/assets/svg/phone-x-mark.svg +3 -0
  330. package/dist/runtime/assets/svg/phone.svg +3 -0
  331. package/dist/runtime/assets/svg/photo.svg +3 -0
  332. package/dist/runtime/assets/svg/play-circle.svg +4 -0
  333. package/dist/runtime/assets/svg/play-pause.svg +3 -0
  334. package/dist/runtime/assets/svg/play.svg +3 -0
  335. package/dist/runtime/assets/svg/plus-circle.svg +3 -0
  336. package/dist/runtime/assets/svg/plus-small.svg +3 -0
  337. package/dist/runtime/assets/svg/plus.svg +3 -0
  338. package/dist/runtime/assets/svg/power.svg +3 -0
  339. package/dist/runtime/assets/svg/presentation-chart-bar.svg +3 -0
  340. package/dist/runtime/assets/svg/presentation-chart-line.svg +3 -0
  341. package/dist/runtime/assets/svg/printer.svg +3 -0
  342. package/dist/runtime/assets/svg/puzzle-piece.svg +3 -0
  343. package/dist/runtime/assets/svg/qr-code.svg +4 -0
  344. package/dist/runtime/assets/svg/question-mark-circle.svg +3 -0
  345. package/dist/runtime/assets/svg/queue-list.svg +3 -0
  346. package/dist/runtime/assets/svg/radio.svg +3 -0
  347. package/dist/runtime/assets/svg/receipt-percent.svg +3 -0
  348. package/dist/runtime/assets/svg/receipt-refund.svg +3 -0
  349. package/dist/runtime/assets/svg/rectangle-group.svg +3 -0
  350. package/dist/runtime/assets/svg/rectangle-stack.svg +3 -0
  351. package/dist/runtime/assets/svg/rocket-launch.svg +3 -0
  352. package/dist/runtime/assets/svg/rss.svg +3 -0
  353. package/dist/runtime/assets/svg/scale.svg +3 -0
  354. package/dist/runtime/assets/svg/scissors.svg +3 -0
  355. package/dist/runtime/assets/svg/server-stack.svg +3 -0
  356. package/dist/runtime/assets/svg/server.svg +3 -0
  357. package/dist/runtime/assets/svg/share.svg +3 -0
  358. package/dist/runtime/assets/svg/shield-check.svg +3 -0
  359. package/dist/runtime/assets/svg/shield-exclamation.svg +3 -0
  360. package/dist/runtime/assets/svg/shopping-bag.svg +3 -0
  361. package/dist/runtime/assets/svg/shopping-cart.svg +3 -0
  362. package/dist/runtime/assets/svg/signal-slash.svg +3 -0
  363. package/dist/runtime/assets/svg/signal.svg +3 -0
  364. package/dist/runtime/assets/svg/slash.svg +3 -0
  365. package/dist/runtime/assets/svg/sparkles.svg +3 -0
  366. package/dist/runtime/assets/svg/speaker-wave.svg +3 -0
  367. package/dist/runtime/assets/svg/speaker-x-mark.svg +3 -0
  368. package/dist/runtime/assets/svg/square-2-stack.svg +3 -0
  369. package/dist/runtime/assets/svg/square-3-stack-3d.svg +3 -0
  370. package/dist/runtime/assets/svg/squares-2x2.svg +3 -0
  371. package/dist/runtime/assets/svg/squares-plus.svg +3 -0
  372. package/dist/runtime/assets/svg/star.svg +3 -0
  373. package/dist/runtime/assets/svg/stop-circle.svg +4 -0
  374. package/dist/runtime/assets/svg/stop.svg +3 -0
  375. package/dist/runtime/assets/svg/strikethrough.svg +3 -0
  376. package/dist/runtime/assets/svg/sun.svg +3 -0
  377. package/dist/runtime/assets/svg/swatch.svg +3 -0
  378. package/dist/runtime/assets/svg/table-cells.svg +3 -0
  379. package/dist/runtime/assets/svg/tag.svg +4 -0
  380. package/dist/runtime/assets/svg/ticket.svg +3 -0
  381. package/dist/runtime/assets/svg/trash.svg +3 -0
  382. package/dist/runtime/assets/svg/trophy.svg +3 -0
  383. package/dist/runtime/assets/svg/truck.svg +3 -0
  384. package/dist/runtime/assets/svg/tv.svg +3 -0
  385. package/dist/runtime/assets/svg/underline.svg +3 -0
  386. package/dist/runtime/assets/svg/user-circle.svg +3 -0
  387. package/dist/runtime/assets/svg/user-group.svg +3 -0
  388. package/dist/runtime/assets/svg/user-minus.svg +3 -0
  389. package/dist/runtime/assets/svg/user-plus.svg +3 -0
  390. package/dist/runtime/assets/svg/user.svg +3 -0
  391. package/dist/runtime/assets/svg/users.svg +3 -0
  392. package/dist/runtime/assets/svg/variable.svg +3 -0
  393. package/dist/runtime/assets/svg/video-camera-slash.svg +3 -0
  394. package/dist/runtime/assets/svg/video-camera.svg +3 -0
  395. package/dist/runtime/assets/svg/view-columns.svg +3 -0
  396. package/dist/runtime/assets/svg/viewfinder-circle.svg +3 -0
  397. package/dist/runtime/assets/svg/wallet.svg +3 -0
  398. package/dist/runtime/assets/svg/wifi.svg +3 -0
  399. package/dist/runtime/assets/svg/window.svg +3 -0
  400. package/dist/runtime/assets/svg/wrench-screwdriver.svg +3 -0
  401. package/dist/runtime/assets/svg/wrench.svg +4 -0
  402. package/dist/runtime/assets/svg/x-circle.svg +3 -0
  403. package/dist/runtime/assets/svg/x-mark.svg +3 -0
  404. package/dist/runtime/shared/index.js +1 -1
  405. package/package.json +4 -3
  406. package/dist/runtime/app/i18n/en.json +0 -123
  407. package/dist/runtime/app/i18n/it.json +0 -123
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -0,0 +1,42 @@
1
+ <template>
2
+ <Teleport to="body">
3
+ <div v-if="toasts.length" class="cms-scope">
4
+ <div class="cms-toaster">
5
+ <div
6
+ v-for="toast in toasts"
7
+ :key="toast.id"
8
+ class="cms-toast cms-rise"
9
+ :class="{
10
+ 'is-success': toast.color === 'success',
11
+ 'is-error': toast.color === 'error'
12
+ }"
13
+ >
14
+ <div class="flex items-start gap-3">
15
+ <div class="min-w-0 flex-1">
16
+ <p class="text-[13px] font-medium text-(--ui-text-highlighted)">
17
+ {{ toast.title }}
18
+ </p>
19
+ <p v-if="toast.description" class="mt-0.5 text-xs text-(--ui-text-muted)">
20
+ {{ toast.description }}
21
+ </p>
22
+ </div>
23
+ <button
24
+ type="button"
25
+ class="shrink-0 text-(--ui-text-dimmed) hover:text-(--ui-text)"
26
+ aria-label="Dismiss"
27
+ @click="remove(toast.id)"
28
+ >
29
+ <CmsIcon name="x-mark" class="size-4" />
30
+ </button>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ </Teleport>
36
+ </template>
37
+
38
+ <script setup>
39
+ import { useCmsToast, useCmsToastState } from "../../composables/cms-toast";
40
+ const toasts = useCmsToastState();
41
+ const { remove } = useCmsToast();
42
+ </script>
@@ -0,0 +1,3 @@
1
+ declare const __VLS_export: import("vue").DefineComponent<{}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
2
+ declare const _default: typeof __VLS_export;
3
+ export default _default;
@@ -1,7 +1,7 @@
1
1
  <template>
2
2
  <div class="flex flex-col gap-2">
3
3
  <div v-if="i18n.locales.length > 1" class="flex items-center gap-1">
4
- <UButton
4
+ <CmsButton
5
5
  v-for="locale in i18n.locales"
6
6
  :key="locale"
7
7
  size="xs"
@@ -19,23 +19,23 @@
19
19
  class="size-1.5 rounded-full"
20
20
  :class="hasContent(locale) ? 'bg-(--cms-fern)' : 'bg-(--cms-line)'"
21
21
  />
22
- </UButton>
22
+ </CmsButton>
23
23
  <span
24
24
  v-if="props.field.required && active === i18n.defaultLocale"
25
- class="text-(--ui-text-muted) ml-auto font-mono text-xs"
25
+ class="ml-auto font-mono text-xs text-(--ui-text-muted)"
26
26
  >
27
27
  {{ i18n.defaultLocale }} *
28
28
  </span>
29
29
  </div>
30
30
  <CmsRichTextField v-if="props.field.type === 'richtext'" v-model="current" />
31
- <UTextarea
31
+ <CmsTextarea
32
32
  v-else-if="props.field.textarea"
33
33
  v-model="current"
34
34
  :rows="4"
35
35
  size="lg"
36
36
  class="w-full"
37
37
  />
38
- <UInput v-else v-model="current" size="lg" class="w-full" />
38
+ <CmsInput v-else v-model="current" size="lg" class="w-full" />
39
39
  </div>
40
40
  </template>
41
41
 
@@ -1,3 +1,11 @@
1
+ export interface CmsConfirmState {
2
+ open: boolean;
3
+ message: string;
4
+ title?: string;
5
+ confirmLabel?: string;
6
+ resolve?: (value: boolean) => void;
7
+ }
8
+ export declare function useCmsConfirmState(): import("vue").Ref<CmsConfirmState, CmsConfirmState>;
1
9
  export declare function useCmsConfirm(): (message: string, options?: {
2
10
  title?: string;
3
11
  confirmLabel?: string;
@@ -1,7 +1,16 @@
1
- import { useOverlay } from "#imports";
2
- import ConfirmModal from "../components/cms/ConfirmModal.vue";
1
+ import { useState } from "#imports";
2
+ export function useCmsConfirmState() {
3
+ return useState("cms-confirm", () => ({ open: false, message: "" }));
4
+ }
3
5
  export function useCmsConfirm() {
4
- const overlay = useOverlay();
5
- const modal = overlay.create(ConfirmModal);
6
- return async (message, options) => await modal.open({ message, ...options }) === true;
6
+ const state = useCmsConfirmState();
7
+ return (message, options) => new Promise((resolve) => {
8
+ state.value = {
9
+ open: true,
10
+ message,
11
+ title: options?.title,
12
+ confirmLabel: options?.confirmLabel,
13
+ resolve
14
+ };
15
+ });
7
16
  }
@@ -0,0 +1,13 @@
1
+ export interface CmsToast {
2
+ id: number;
3
+ title: string;
4
+ description?: string;
5
+ color?: 'success' | 'error';
6
+ }
7
+ export declare function useCmsToastState(): import("vue").Ref<CmsToast[], CmsToast[]>;
8
+ export declare function useCmsToast(): {
9
+ add: (toast: Omit<CmsToast, "id">) => {
10
+ id: number;
11
+ };
12
+ remove: (id: number) => void;
13
+ };
@@ -0,0 +1,18 @@
1
+ import { useState } from "#imports";
2
+ let counter = 0;
3
+ export function useCmsToastState() {
4
+ return useState("cms-toasts", () => []);
5
+ }
6
+ export function useCmsToast() {
7
+ const toasts = useCmsToastState();
8
+ function remove(id) {
9
+ toasts.value = toasts.value.filter((toast) => toast.id !== id);
10
+ }
11
+ function add(toast) {
12
+ const id = ++counter;
13
+ toasts.value = [...toasts.value, { id, ...toast }];
14
+ if (import.meta.client) setTimeout(() => remove(id), 4e3);
15
+ return { id };
16
+ }
17
+ return { add, remove };
18
+ }
@@ -2,15 +2,13 @@
2
2
  <div class="cms-scope cms-canvas cms-grain min-h-screen">
3
3
  <div class="flex min-h-screen">
4
4
  <aside
5
- class="border-(--cms-line) sticky top-0 flex h-screen w-64 shrink-0 flex-col gap-7 border-r px-4 py-7"
5
+ class="sticky top-0 flex h-screen w-64 shrink-0 flex-col gap-7 border-r border-(--cms-line) px-4 py-7"
6
6
  >
7
7
  <div class="px-3">
8
- <div class="cms-display text-(--ui-text-highlighted) text-[22px] font-semibold">
8
+ <div class="cms-display text-[22px] font-semibold text-(--ui-text-highlighted)">
9
9
  nuxt<span class="text-(--cms-fern)">·</span>cms
10
10
  </div>
11
- <div class="cms-kicker mt-1.5">
12
- {{ t("cms.sidebar.tagline") }}
13
- </div>
11
+ <div class="cms-kicker mt-1.5">content studio</div>
14
12
  </div>
15
13
 
16
14
  <nav class="flex flex-1 flex-col gap-6 overflow-y-auto">
@@ -25,22 +23,22 @@
25
23
  class="cms-navlink"
26
24
  :class="{ 'is-active': route.path === link.to }"
27
25
  >
28
- <UIcon
26
+ <CmsIcon
29
27
  :name="group.icon"
30
- class="cms-navlink-icon text-(--ui-text-dimmed) size-4 shrink-0"
28
+ class="cms-navlink-icon size-4 shrink-0 text-(--ui-text-dimmed)"
31
29
  />
32
30
  <span class="truncate">{{ link.label }}</span>
33
31
  </NuxtLink>
34
32
  </div>
35
33
  </nav>
36
34
 
37
- <div class="border-(--cms-line) flex flex-col gap-3 border-t px-3 pt-5">
38
- <div class="text-(--ui-text-muted) truncate text-[11px] font-medium">
35
+ <div class="flex flex-col gap-3 border-t border-(--cms-line) px-3 pt-5">
36
+ <div class="truncate text-[11px] font-medium text-(--ui-text-muted)">
39
37
  {{ user?.email }}
40
38
  </div>
41
- <UButton
42
- :label="t('cms.sidebar.signOut')"
43
- icon="i-lucide-log-out"
39
+ <CmsButton
40
+ label="Sign out"
41
+ icon="arrow-right-on-rectangle"
44
42
  variant="ghost"
45
43
  color="neutral"
46
44
  size="xs"
@@ -56,15 +54,17 @@
56
54
  </div>
57
55
  </main>
58
56
  </div>
57
+
58
+ <CmsToaster />
59
+ <CmsConfirmModal />
59
60
  </div>
60
61
  </template>
61
62
 
62
63
  <script setup>
63
- import { computed, navigateTo, useI18n, useRoute, useUserSession } from "#imports";
64
+ import { computed, navigateTo, useRoute, useUserSession } from "#imports";
64
65
  import cmsConfig from "#cms-config";
65
66
  const route = useRoute();
66
67
  const { user, clear } = useUserSession();
67
- const { t } = useI18n();
68
68
  const links = Object.entries(cmsConfig).map(([name, entry]) => ({
69
69
  name,
70
70
  label: entry.label,
@@ -74,19 +74,19 @@ const links = Object.entries(cmsConfig).map(([name, entry]) => ({
74
74
  const groups = computed(
75
75
  () => [
76
76
  {
77
- title: t("cms.sidebar.collections"),
78
- icon: "i-lucide-layers",
77
+ title: "Collections",
78
+ icon: "square-3-stack-3d",
79
79
  links: links.filter((l) => l.kind === "collection")
80
80
  },
81
81
  {
82
- title: t("cms.sidebar.singles"),
83
- icon: "i-lucide-file-text",
82
+ title: "Singles",
83
+ icon: "document-text",
84
84
  links: links.filter((l) => l.kind === "single")
85
85
  },
86
86
  {
87
- title: t("cms.sidebar.library"),
88
- icon: "i-lucide-image",
89
- links: [{ name: "media", label: t("cms.sidebar.media"), kind: "media", to: "/cms/media" }]
87
+ title: "Library",
88
+ icon: "photo",
89
+ links: [{ name: "media", label: "Media", kind: "media", to: "/cms/media" }]
90
90
  }
91
91
  ].filter((g) => g.links.length)
92
92
  );
@@ -1,2 +1,2 @@
1
- declare const _default: import("#app").RouteMiddleware;
1
+ declare const _default: import("nuxt/app").RouteMiddleware;
2
2
  export default _default;
@@ -1,45 +1,41 @@
1
1
  <template>
2
2
  <div class="cms-rise flex flex-col gap-7">
3
3
  <CmsPageHeader :kicker="kicker" :title="config.label">
4
- <UButton
4
+ <CmsButton
5
5
  v-if="config.kind === 'single'"
6
6
  type="submit"
7
7
  :form="FORM_ID"
8
- :label="t('cms.form.save')"
8
+ label="Save"
9
9
  :loading="saving"
10
10
  class="rounded-full px-6"
11
11
  />
12
12
  <div v-if="config.kind === 'collection'" class="flex items-center gap-2">
13
- <UDropdownMenu
13
+ <CmsDropdownMenu
14
14
  v-if="rows.length"
15
15
  :items="columnItems"
16
16
  :content="{ align: 'end' }"
17
17
  :ui="{ content: 'w-48' }"
18
18
  >
19
- <UButton
20
- :label="t('cms.collection.columns')"
21
- icon="i-lucide-columns-3"
19
+ <CmsButton
20
+ label="Columns"
21
+ icon="view-columns"
22
22
  variant="subtle"
23
23
  class="rounded-full px-4"
24
24
  />
25
- </UDropdownMenu>
26
- <UButton
27
- :label="t('cms.collection.new')"
28
- icon="i-lucide-plus"
25
+ </CmsDropdownMenu>
26
+ <CmsButton
27
+ label="New entry"
28
+ icon="plus"
29
29
  class="rounded-full px-4"
30
30
  @click="openCreate"
31
31
  />
32
32
  </div>
33
33
  </CmsPageHeader>
34
34
 
35
- <CmsEmptyState
36
- v-if="error"
37
- icon="i-lucide-triangle-alert"
38
- :title="t('cms.collection.loadError')"
39
- >
40
- <UButton
41
- :label="t('cms.collection.retry')"
42
- icon="i-lucide-refresh-cw"
35
+ <CmsEmptyState v-if="error" icon="exclamation-triangle" title="Could not load entries">
36
+ <CmsButton
37
+ label="Retry"
38
+ icon="arrow-path"
43
39
  variant="subtle"
44
40
  class="mt-3 rounded-full px-4"
45
41
  :loading="status === 'pending'"
@@ -58,16 +54,16 @@
58
54
  </div>
59
55
 
60
56
  <template v-else>
61
- <UInput
57
+ <CmsInput
62
58
  v-if="total || searchTerm"
63
59
  v-model="search"
64
- icon="i-lucide-search"
65
- :placeholder="t('cms.collection.searchPlaceholder')"
60
+ icon="magnifying-glass"
61
+ placeholder="Search…"
66
62
  class="max-w-xs"
67
63
  />
68
64
 
69
65
  <div v-if="rows.length" class="cms-card overflow-hidden">
70
- <UTable
66
+ <CmsTable
71
67
  v-model:column-visibility="columnVisibility"
72
68
  :data="rows"
73
69
  :columns="columns"
@@ -79,20 +75,16 @@
79
75
  type="button"
80
76
  class="cms-badge"
81
77
  :class="row.original.status === 'published' ? 'is-published' : 'is-draft'"
82
- :title="
83
- row.original.status === 'published' ? t('cms.status.unpublish') : t('cms.status.publish')
84
- "
78
+ :title="row.original.status === 'published' ? 'Make draft' : 'Publish'"
85
79
  @click.stop="toggleStatus(row.original)"
86
80
  >
87
- {{
88
- row.original.status === "published" ? t("cms.status.published") : t("cms.status.draft")
89
- }}
81
+ {{ row.original.status === "published" ? "Published" : "Draft" }}
90
82
  </button>
91
83
  </template>
92
84
  <template #actions-cell="{ row }">
93
85
  <div class="flex justify-end">
94
- <UButton
95
- icon="i-lucide-trash-2"
86
+ <CmsButton
87
+ icon="trash"
96
88
  variant="ghost"
97
89
  color="error"
98
90
  size="xs"
@@ -101,31 +93,28 @@
101
93
  />
102
94
  </div>
103
95
  </template>
104
- </UTable>
96
+ </CmsTable>
105
97
  </div>
106
98
 
107
99
  <div v-else-if="status === 'pending'" class="flex justify-center py-10">
108
- <UIcon
109
- name="i-lucide-loader-circle"
110
- class="text-(--ui-text-dimmed) size-6 animate-spin"
111
- />
100
+ <CmsIcon name="arrow-path" class="size-6 animate-spin text-(--ui-text-dimmed)" />
112
101
  </div>
113
102
 
114
103
  <CmsEmptyState
115
104
  v-else-if="searchTerm"
116
- icon="i-lucide-search-x"
117
- :title="t('cms.collection.noResults')"
105
+ icon="magnifying-glass"
106
+ title="No matching entries"
118
107
  />
119
108
 
120
109
  <CmsEmptyState
121
110
  v-else
122
- icon="i-lucide-sprout"
123
- :title="t('cms.collection.emptyTitle')"
124
- :body="t('cms.collection.emptyBody')"
111
+ icon="sparkles"
112
+ title="Nothing here yet"
113
+ body="Entries you create will show up here."
125
114
  >
126
- <UButton
127
- :label="t('cms.collection.new')"
128
- icon="i-lucide-plus"
115
+ <CmsButton
116
+ label="New entry"
117
+ icon="plus"
129
118
  variant="subtle"
130
119
  class="mt-3 rounded-full px-4"
131
120
  @click="openCreate"
@@ -133,7 +122,7 @@
133
122
  </CmsEmptyState>
134
123
 
135
124
  <div v-if="total > PAGE_SIZE" class="flex justify-center">
136
- <UPagination v-model:page="page" :total="total" :items-per-page="PAGE_SIZE" />
125
+ <CmsPagination v-model:page="page" :total="total" :items-per-page="PAGE_SIZE" />
137
126
  </div>
138
127
  </template>
139
128
  </div>
@@ -149,14 +138,13 @@ import {
149
138
  onMounted,
150
139
  ref,
151
140
  useFetch,
152
- useI18n,
153
141
  useRoute,
154
- useToast,
155
142
  watch
156
143
  } from "#imports";
157
144
  import cmsConfig from "#cms-config";
158
145
  import { useCmsConfirm } from "../composables/cms-confirm";
159
146
  import { useCmsRuntime } from "../composables/cms-runtime";
147
+ import { useCmsToast } from "../composables/cms-toast";
160
148
  import { cmsApi } from "../utils/api";
161
149
  import { errorMessage } from "../utils/ui";
162
150
  definePageMeta({
@@ -167,8 +155,7 @@ definePageMeta({
167
155
  });
168
156
  const FORM_ID = "cms-single-form";
169
157
  const route = useRoute();
170
- const toast = useToast();
171
- const { t } = useI18n();
158
+ const toast = useCmsToast();
172
159
  const name = route.params.collection;
173
160
  const config = cmsConfig[name];
174
161
  if (!config) {
@@ -232,7 +219,7 @@ async function submit(action) {
232
219
  return true;
233
220
  } catch (error2) {
234
221
  toast.add({
235
- title: t("cms.toast.saveFailed"),
222
+ title: "Save failed",
236
223
  description: errorMessage(error2),
237
224
  color: "error"
238
225
  });
@@ -246,7 +233,7 @@ if (config.kind === "single") {
246
233
  }
247
234
  async function saveSingle() {
248
235
  const ok = await submit(() => cmsApi(endpoint, { method: "PUT", body: formState.value }));
249
- if (ok) toast.add({ title: t("cms.toast.saved"), color: "success" });
236
+ if (ok) toast.add({ title: "Saved", color: "success" });
250
237
  }
251
238
  const { i18n: contentI18n } = useCmsRuntime();
252
239
  function stripHtml(html) {
@@ -281,7 +268,7 @@ const columns = computed(() => [
281
268
  accessorFn: (row) => displayValue(config.fields[key], row[key]),
282
269
  header: config.fields[key].label
283
270
  })),
284
- ...drafts ? [{ accessorKey: "status", header: t("cms.collection.status") }] : [],
271
+ ...drafts ? [{ accessorKey: "status", header: "Status" }] : [],
285
272
  { id: "actions", header: "" }
286
273
  ]);
287
274
  const DEFAULT_VISIBLE_COLUMNS = 4;
@@ -320,7 +307,7 @@ const columnItems = computed(
320
307
  }))
321
308
  );
322
309
  const kicker = computed(
323
- () => config.kind === "single" ? t("cms.collection.kickerSingle") : t("cms.collection.kicker", total.value)
310
+ () => config.kind === "single" ? "single document" : `collection \xB7 ${total.value} ${total.value === 1 ? "entry" : "entries"}`
324
311
  );
325
312
  function onSelect(_event, row) {
326
313
  navigateTo(`/cms/${name}/${row.original.id}`);
@@ -340,7 +327,7 @@ function openCreate() {
340
327
  }
341
328
  const confirmAction = useCmsConfirm();
342
329
  async function deleteRow(row) {
343
- if (!await confirmAction(t("cms.collection.deleteConfirm"))) return;
330
+ if (!await confirmAction("Delete this row?")) return;
344
331
  const lastOnPage = rows.value.length === 1 && page.value > 1;
345
332
  const ok = await submit(() => cmsApi(`${endpoint}/${row.id}`, { method: "DELETE" }));
346
333
  if (ok && lastOnPage) page.value -= 1;
@@ -1,37 +1,34 @@
1
1
  <template>
2
2
  <div class="cms-rise flex flex-col gap-7">
3
- <CmsPageHeader
4
- :kicker="config.label"
5
- :title="isNew ? t('cms.collection.new') : t('cms.collection.edit')"
6
- >
3
+ <CmsPageHeader :kicker="config.label" :title="isNew ? 'New entry' : 'Edit entry'">
7
4
  <template v-if="drafts" #badge>
8
5
  <span
9
6
  class="cms-badge pointer-events-none"
10
7
  :class="published ? 'is-published' : 'is-draft'"
11
8
  >
12
- {{ published ? t("cms.status.published") : t("cms.status.draft") }}
9
+ {{ published ? "Published" : "Draft" }}
13
10
  </span>
14
11
  </template>
15
12
  <div class="flex items-center gap-3">
16
- <UButton
17
- :label="t('cms.collection.back')"
18
- icon="i-lucide-arrow-left"
13
+ <CmsButton
14
+ label="Back"
15
+ icon="arrow-left"
19
16
  variant="subtle"
20
17
  class="rounded-full px-4"
21
18
  @click="goBack"
22
19
  />
23
- <UButton
20
+ <CmsButton
24
21
  type="submit"
25
22
  :form="FORM_ID"
26
- :label="t('cms.form.save')"
23
+ label="Save"
27
24
  :loading="saving"
28
25
  class="rounded-full px-6"
29
26
  />
30
- <UButton
27
+ <CmsButton
31
28
  v-if="drafts"
32
29
  type="submit"
33
30
  :form="FORM_ID"
34
- :label="published ? t('cms.status.unpublish') : t('cms.status.publish')"
31
+ :label="published ? 'Make draft' : 'Publish'"
35
32
  :loading="saving"
36
33
  class="rounded-full px-6"
37
34
  @click="togglePublished"
@@ -63,13 +60,12 @@ import {
63
60
  onBeforeUnmount,
64
61
  ref,
65
62
  useFetch,
66
- useI18n,
67
63
  useRoute,
68
- useToast,
69
64
  watch
70
65
  } from "#imports";
71
66
  import cmsConfig from "#cms-config";
72
67
  import { useCmsConfirm } from "../composables/cms-confirm";
68
+ import { useCmsToast } from "../composables/cms-toast";
73
69
  import { cmsApi } from "../utils/api";
74
70
  import { errorMessage } from "../utils/ui";
75
71
  const FORM_ID = "cms-entry-form";
@@ -80,8 +76,7 @@ definePageMeta({
80
76
  key: (route2) => route2.fullPath
81
77
  });
82
78
  const route = useRoute();
83
- const toast = useToast();
84
- const { t } = useI18n();
79
+ const toast = useCmsToast();
85
80
  const name = route.params.collection;
86
81
  const config = cmsConfig[name];
87
82
  if (!config || config.kind !== "collection") {
@@ -125,7 +120,8 @@ watch(dirty, (value) => {
125
120
  onBeforeUnmount(() => window.removeEventListener("beforeunload", onBeforeUnload));
126
121
  const confirmAction = useCmsConfirm();
127
122
  onBeforeRouteLeave(async () => {
128
- if (dirty.value && !await confirmAction(t("cms.entry.unsavedChanges"))) return false;
123
+ if (dirty.value && !await confirmAction("You have unsaved changes. Leave anyway?"))
124
+ return false;
129
125
  });
130
126
  const published = computed({
131
127
  get: () => formState.value.status === "published",
@@ -148,11 +144,11 @@ async function save() {
148
144
  try {
149
145
  await (isNew ? cmsApi(endpoint, { method: "POST", body: formState.value }) : cmsApi(`${endpoint}/${id}`, { method: "PUT", body: formState.value }));
150
146
  snapshot.value = JSON.stringify(formState.value);
151
- toast.add({ title: t("cms.toast.saved"), color: "success" });
147
+ toast.add({ title: "Saved", color: "success" });
152
148
  goBack();
153
149
  } catch (error) {
154
150
  toast.add({
155
- title: t("cms.toast.saveFailed"),
151
+ title: "Save failed",
156
152
  description: errorMessage(error),
157
153
  color: "error"
158
154
  });