@xleddyl/nuxt-cms 0.1.10 → 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 (413) hide show
  1. package/README.md +61 -1
  2. package/dist/module.d.mts +3 -1
  3. package/dist/module.json +1 -1
  4. package/dist/module.mjs +20 -34
  5. package/dist/runtime/app/components/cms/Alert.d.vue.ts +18 -0
  6. package/dist/runtime/app/components/cms/Alert.vue +14 -0
  7. package/dist/runtime/app/components/cms/Alert.vue.d.ts +18 -0
  8. package/dist/runtime/app/components/cms/BlocksField.vue +23 -26
  9. package/dist/runtime/app/components/cms/Button.d.vue.ts +25 -0
  10. package/dist/runtime/app/components/cms/Button.vue +33 -0
  11. package/dist/runtime/app/components/cms/Button.vue.d.ts +25 -0
  12. package/dist/runtime/app/components/cms/ConfirmModal.d.vue.ts +1 -18
  13. package/dist/runtime/app/components/cms/ConfirmModal.vue +20 -21
  14. package/dist/runtime/app/components/cms/ConfirmModal.vue.d.ts +1 -18
  15. package/dist/runtime/app/components/cms/DropdownMenu.d.vue.ts +29 -0
  16. package/dist/runtime/app/components/cms/DropdownMenu.vue +57 -0
  17. package/dist/runtime/app/components/cms/DropdownMenu.vue.d.ts +29 -0
  18. package/dist/runtime/app/components/cms/EmptyState.vue +3 -3
  19. package/dist/runtime/app/components/cms/EntryForm.vue +9 -22
  20. package/dist/runtime/app/components/cms/FieldInput.vue +15 -8
  21. package/dist/runtime/app/components/cms/Form.d.vue.ts +35 -0
  22. package/dist/runtime/app/components/cms/Form.vue +42 -0
  23. package/dist/runtime/app/components/cms/Form.vue.d.ts +35 -0
  24. package/dist/runtime/app/components/cms/FormField.d.vue.ts +21 -0
  25. package/dist/runtime/app/components/cms/FormField.vue +22 -0
  26. package/dist/runtime/app/components/cms/FormField.vue.d.ts +21 -0
  27. package/dist/runtime/app/components/cms/Icon.d.vue.ts +6 -0
  28. package/dist/runtime/app/components/cms/Icon.vue +18 -0
  29. package/dist/runtime/app/components/cms/Icon.vue.d.ts +6 -0
  30. package/dist/runtime/app/components/cms/Input.d.vue.ts +28 -0
  31. package/dist/runtime/app/components/cms/Input.vue +43 -0
  32. package/dist/runtime/app/components/cms/Input.vue.d.ts +28 -0
  33. package/dist/runtime/app/components/cms/JsonField.vue +3 -6
  34. package/dist/runtime/app/components/cms/MediaField.vue +14 -15
  35. package/dist/runtime/app/components/cms/MediaGallery.vue +52 -49
  36. package/dist/runtime/app/components/cms/MediaUpload.vue +9 -8
  37. package/dist/runtime/app/components/cms/Modal.d.vue.ts +34 -0
  38. package/dist/runtime/app/components/cms/Modal.vue +54 -0
  39. package/dist/runtime/app/components/cms/Modal.vue.d.ts +34 -0
  40. package/dist/runtime/app/components/cms/PageHeader.vue +1 -1
  41. package/dist/runtime/app/components/cms/Pagination.d.vue.ts +15 -0
  42. package/dist/runtime/app/components/cms/Pagination.vue +51 -0
  43. package/dist/runtime/app/components/cms/Pagination.vue.d.ts +15 -0
  44. package/dist/runtime/app/components/cms/Popover.d.vue.ts +22 -0
  45. package/dist/runtime/app/components/cms/Popover.vue +27 -0
  46. package/dist/runtime/app/components/cms/Popover.vue.d.ts +22 -0
  47. package/dist/runtime/app/components/cms/RelationField.vue +6 -6
  48. package/dist/runtime/app/components/cms/RichTextField.vue +38 -39
  49. package/dist/runtime/app/components/cms/Select.d.vue.ts +16 -0
  50. package/dist/runtime/app/components/cms/Select.vue +19 -0
  51. package/dist/runtime/app/components/cms/Select.vue.d.ts +16 -0
  52. package/dist/runtime/app/components/cms/SelectMenu.d.vue.ts +25 -0
  53. package/dist/runtime/app/components/cms/SelectMenu.vue +110 -0
  54. package/dist/runtime/app/components/cms/SelectMenu.vue.d.ts +25 -0
  55. package/dist/runtime/app/components/cms/SlugField.vue +4 -4
  56. package/dist/runtime/app/components/cms/Switch.d.vue.ts +10 -0
  57. package/dist/runtime/app/components/cms/Switch.vue +14 -0
  58. package/dist/runtime/app/components/cms/Switch.vue.d.ts +10 -0
  59. package/dist/runtime/app/components/cms/Table.d.vue.ts +48 -0
  60. package/dist/runtime/app/components/cms/Table.vue +47 -0
  61. package/dist/runtime/app/components/cms/Table.vue.d.ts +48 -0
  62. package/dist/runtime/app/components/cms/Textarea.d.vue.ts +16 -0
  63. package/dist/runtime/app/components/cms/Textarea.vue +17 -0
  64. package/dist/runtime/app/components/cms/Textarea.vue.d.ts +16 -0
  65. package/dist/runtime/app/components/cms/Toaster.d.vue.ts +3 -0
  66. package/dist/runtime/app/components/cms/Toaster.vue +42 -0
  67. package/dist/runtime/app/components/cms/Toaster.vue.d.ts +3 -0
  68. package/dist/runtime/app/components/cms/TranslatableField.vue +5 -5
  69. package/dist/runtime/app/composables/cms-confirm.d.ts +8 -0
  70. package/dist/runtime/app/composables/cms-confirm.js +14 -5
  71. package/dist/runtime/app/composables/cms-toast.d.ts +13 -0
  72. package/dist/runtime/app/composables/cms-toast.js +18 -0
  73. package/dist/runtime/app/layouts/cms-admin.vue +21 -21
  74. package/dist/runtime/app/middleware/cms-auth.d.ts +1 -1
  75. package/dist/runtime/app/pages/admin-collection.vue +40 -53
  76. package/dist/runtime/app/pages/admin-entry.vue +15 -19
  77. package/dist/runtime/app/pages/admin-login.vue +16 -24
  78. package/dist/runtime/app/pages/admin-media.vue +2 -3
  79. package/dist/runtime/app/utils/ui.d.ts +4 -0
  80. package/dist/runtime/app/utils/ui.js +1 -0
  81. package/dist/runtime/assets/main.css +1 -1
  82. package/dist/runtime/assets/svg/academic-cap.svg +3 -0
  83. package/dist/runtime/assets/svg/adjustments-horizontal.svg +3 -0
  84. package/dist/runtime/assets/svg/adjustments-vertical.svg +3 -0
  85. package/dist/runtime/assets/svg/archive-box-arrow-down.svg +3 -0
  86. package/dist/runtime/assets/svg/archive-box-x-mark.svg +3 -0
  87. package/dist/runtime/assets/svg/archive-box.svg +3 -0
  88. package/dist/runtime/assets/svg/arrow-down-circle.svg +3 -0
  89. package/dist/runtime/assets/svg/arrow-down-left.svg +3 -0
  90. package/dist/runtime/assets/svg/arrow-down-on-square-stack.svg +3 -0
  91. package/dist/runtime/assets/svg/arrow-down-on-square.svg +3 -0
  92. package/dist/runtime/assets/svg/arrow-down-right.svg +3 -0
  93. package/dist/runtime/assets/svg/arrow-down-tray.svg +3 -0
  94. package/dist/runtime/assets/svg/arrow-down.svg +3 -0
  95. package/dist/runtime/assets/svg/arrow-left-circle.svg +3 -0
  96. package/dist/runtime/assets/svg/arrow-left-end-on-rectangle.svg +3 -0
  97. package/dist/runtime/assets/svg/arrow-left-on-rectangle.svg +3 -0
  98. package/dist/runtime/assets/svg/arrow-left-start-on-rectangle.svg +3 -0
  99. package/dist/runtime/assets/svg/arrow-left.svg +3 -0
  100. package/dist/runtime/assets/svg/arrow-long-down.svg +3 -0
  101. package/dist/runtime/assets/svg/arrow-long-left.svg +3 -0
  102. package/dist/runtime/assets/svg/arrow-long-right.svg +3 -0
  103. package/dist/runtime/assets/svg/arrow-long-up.svg +3 -0
  104. package/dist/runtime/assets/svg/arrow-path-rounded-square.svg +3 -0
  105. package/dist/runtime/assets/svg/arrow-path.svg +3 -0
  106. package/dist/runtime/assets/svg/arrow-right-circle.svg +3 -0
  107. package/dist/runtime/assets/svg/arrow-right-end-on-rectangle.svg +3 -0
  108. package/dist/runtime/assets/svg/arrow-right-on-rectangle.svg +3 -0
  109. package/dist/runtime/assets/svg/arrow-right-start-on-rectangle.svg +3 -0
  110. package/dist/runtime/assets/svg/arrow-right.svg +3 -0
  111. package/dist/runtime/assets/svg/arrow-small-down.svg +3 -0
  112. package/dist/runtime/assets/svg/arrow-small-left.svg +3 -0
  113. package/dist/runtime/assets/svg/arrow-small-right.svg +3 -0
  114. package/dist/runtime/assets/svg/arrow-small-up.svg +3 -0
  115. package/dist/runtime/assets/svg/arrow-top-right-on-square.svg +3 -0
  116. package/dist/runtime/assets/svg/arrow-trending-down.svg +3 -0
  117. package/dist/runtime/assets/svg/arrow-trending-up.svg +3 -0
  118. package/dist/runtime/assets/svg/arrow-turn-down-left.svg +3 -0
  119. package/dist/runtime/assets/svg/arrow-turn-down-right.svg +3 -0
  120. package/dist/runtime/assets/svg/arrow-turn-left-down.svg +3 -0
  121. package/dist/runtime/assets/svg/arrow-turn-left-up.svg +3 -0
  122. package/dist/runtime/assets/svg/arrow-turn-right-down.svg +3 -0
  123. package/dist/runtime/assets/svg/arrow-turn-right-up.svg +3 -0
  124. package/dist/runtime/assets/svg/arrow-turn-up-left.svg +3 -0
  125. package/dist/runtime/assets/svg/arrow-turn-up-right.svg +3 -0
  126. package/dist/runtime/assets/svg/arrow-up-circle.svg +3 -0
  127. package/dist/runtime/assets/svg/arrow-up-left.svg +3 -0
  128. package/dist/runtime/assets/svg/arrow-up-on-square-stack.svg +3 -0
  129. package/dist/runtime/assets/svg/arrow-up-on-square.svg +3 -0
  130. package/dist/runtime/assets/svg/arrow-up-right.svg +3 -0
  131. package/dist/runtime/assets/svg/arrow-up-tray.svg +3 -0
  132. package/dist/runtime/assets/svg/arrow-up.svg +3 -0
  133. package/dist/runtime/assets/svg/arrow-uturn-down.svg +3 -0
  134. package/dist/runtime/assets/svg/arrow-uturn-left.svg +3 -0
  135. package/dist/runtime/assets/svg/arrow-uturn-right.svg +3 -0
  136. package/dist/runtime/assets/svg/arrow-uturn-up.svg +3 -0
  137. package/dist/runtime/assets/svg/arrows-pointing-in.svg +3 -0
  138. package/dist/runtime/assets/svg/arrows-pointing-out.svg +3 -0
  139. package/dist/runtime/assets/svg/arrows-right-left.svg +3 -0
  140. package/dist/runtime/assets/svg/arrows-up-down.svg +3 -0
  141. package/dist/runtime/assets/svg/at-symbol.svg +3 -0
  142. package/dist/runtime/assets/svg/backspace.svg +3 -0
  143. package/dist/runtime/assets/svg/backward.svg +3 -0
  144. package/dist/runtime/assets/svg/banknotes.svg +3 -0
  145. package/dist/runtime/assets/svg/bars-2.svg +3 -0
  146. package/dist/runtime/assets/svg/bars-3-bottom-left.svg +3 -0
  147. package/dist/runtime/assets/svg/bars-3-bottom-right.svg +3 -0
  148. package/dist/runtime/assets/svg/bars-3-center-left.svg +3 -0
  149. package/dist/runtime/assets/svg/bars-3.svg +3 -0
  150. package/dist/runtime/assets/svg/bars-4.svg +3 -0
  151. package/dist/runtime/assets/svg/bars-arrow-down.svg +3 -0
  152. package/dist/runtime/assets/svg/bars-arrow-up.svg +3 -0
  153. package/dist/runtime/assets/svg/battery-0.svg +3 -0
  154. package/dist/runtime/assets/svg/battery-100.svg +3 -0
  155. package/dist/runtime/assets/svg/battery-50.svg +3 -0
  156. package/dist/runtime/assets/svg/beaker.svg +3 -0
  157. package/dist/runtime/assets/svg/bell-alert.svg +3 -0
  158. package/dist/runtime/assets/svg/bell-slash.svg +3 -0
  159. package/dist/runtime/assets/svg/bell-snooze.svg +3 -0
  160. package/dist/runtime/assets/svg/bell.svg +3 -0
  161. package/dist/runtime/assets/svg/bold.svg +3 -0
  162. package/dist/runtime/assets/svg/bolt-slash.svg +3 -0
  163. package/dist/runtime/assets/svg/bolt.svg +3 -0
  164. package/dist/runtime/assets/svg/book-open.svg +3 -0
  165. package/dist/runtime/assets/svg/bookmark-slash.svg +3 -0
  166. package/dist/runtime/assets/svg/bookmark-square.svg +3 -0
  167. package/dist/runtime/assets/svg/bookmark.svg +3 -0
  168. package/dist/runtime/assets/svg/briefcase.svg +3 -0
  169. package/dist/runtime/assets/svg/bug-ant.svg +3 -0
  170. package/dist/runtime/assets/svg/building-library.svg +3 -0
  171. package/dist/runtime/assets/svg/building-office-2.svg +3 -0
  172. package/dist/runtime/assets/svg/building-office.svg +3 -0
  173. package/dist/runtime/assets/svg/building-storefront.svg +3 -0
  174. package/dist/runtime/assets/svg/cake.svg +3 -0
  175. package/dist/runtime/assets/svg/calculator.svg +3 -0
  176. package/dist/runtime/assets/svg/calendar-date-range.svg +3 -0
  177. package/dist/runtime/assets/svg/calendar-days.svg +3 -0
  178. package/dist/runtime/assets/svg/calendar.svg +3 -0
  179. package/dist/runtime/assets/svg/camera.svg +4 -0
  180. package/dist/runtime/assets/svg/chart-bar-square.svg +3 -0
  181. package/dist/runtime/assets/svg/chart-bar.svg +3 -0
  182. package/dist/runtime/assets/svg/chart-pie.svg +4 -0
  183. package/dist/runtime/assets/svg/chat-bubble-bottom-center-text.svg +3 -0
  184. package/dist/runtime/assets/svg/chat-bubble-bottom-center.svg +3 -0
  185. package/dist/runtime/assets/svg/chat-bubble-left-ellipsis.svg +3 -0
  186. package/dist/runtime/assets/svg/chat-bubble-left-right.svg +3 -0
  187. package/dist/runtime/assets/svg/chat-bubble-left.svg +3 -0
  188. package/dist/runtime/assets/svg/chat-bubble-oval-left-ellipsis.svg +3 -0
  189. package/dist/runtime/assets/svg/chat-bubble-oval-left.svg +3 -0
  190. package/dist/runtime/assets/svg/check-badge.svg +3 -0
  191. package/dist/runtime/assets/svg/check-circle.svg +3 -0
  192. package/dist/runtime/assets/svg/check.svg +3 -0
  193. package/dist/runtime/assets/svg/chevron-double-down.svg +3 -0
  194. package/dist/runtime/assets/svg/chevron-double-left.svg +3 -0
  195. package/dist/runtime/assets/svg/chevron-double-right.svg +3 -0
  196. package/dist/runtime/assets/svg/chevron-double-up.svg +4 -0
  197. package/dist/runtime/assets/svg/chevron-down.svg +3 -0
  198. package/dist/runtime/assets/svg/chevron-left.svg +3 -0
  199. package/dist/runtime/assets/svg/chevron-right.svg +3 -0
  200. package/dist/runtime/assets/svg/chevron-up-down.svg +3 -0
  201. package/dist/runtime/assets/svg/chevron-up.svg +3 -0
  202. package/dist/runtime/assets/svg/circle-stack.svg +3 -0
  203. package/dist/runtime/assets/svg/clipboard-document-check.svg +3 -0
  204. package/dist/runtime/assets/svg/clipboard-document-list.svg +3 -0
  205. package/dist/runtime/assets/svg/clipboard-document.svg +3 -0
  206. package/dist/runtime/assets/svg/clipboard.svg +3 -0
  207. package/dist/runtime/assets/svg/clock.svg +3 -0
  208. package/dist/runtime/assets/svg/cloud-arrow-down.svg +3 -0
  209. package/dist/runtime/assets/svg/cloud-arrow-up.svg +3 -0
  210. package/dist/runtime/assets/svg/cloud.svg +3 -0
  211. package/dist/runtime/assets/svg/code-bracket-square.svg +3 -0
  212. package/dist/runtime/assets/svg/code-bracket.svg +3 -0
  213. package/dist/runtime/assets/svg/cog-6-tooth.svg +4 -0
  214. package/dist/runtime/assets/svg/cog-8-tooth.svg +4 -0
  215. package/dist/runtime/assets/svg/cog.svg +3 -0
  216. package/dist/runtime/assets/svg/command-line.svg +3 -0
  217. package/dist/runtime/assets/svg/computer-desktop.svg +3 -0
  218. package/dist/runtime/assets/svg/cpu-chip.svg +3 -0
  219. package/dist/runtime/assets/svg/credit-card.svg +3 -0
  220. package/dist/runtime/assets/svg/cube-transparent.svg +3 -0
  221. package/dist/runtime/assets/svg/cube.svg +3 -0
  222. package/dist/runtime/assets/svg/currency-bangladeshi.svg +3 -0
  223. package/dist/runtime/assets/svg/currency-dollar.svg +3 -0
  224. package/dist/runtime/assets/svg/currency-euro.svg +3 -0
  225. package/dist/runtime/assets/svg/currency-pound.svg +3 -0
  226. package/dist/runtime/assets/svg/currency-rupee.svg +3 -0
  227. package/dist/runtime/assets/svg/currency-yen.svg +3 -0
  228. package/dist/runtime/assets/svg/cursor-arrow-rays.svg +3 -0
  229. package/dist/runtime/assets/svg/cursor-arrow-ripple.svg +3 -0
  230. package/dist/runtime/assets/svg/device-phone-mobile.svg +3 -0
  231. package/dist/runtime/assets/svg/device-tablet.svg +3 -0
  232. package/dist/runtime/assets/svg/divide.svg +3 -0
  233. package/dist/runtime/assets/svg/document-arrow-down.svg +3 -0
  234. package/dist/runtime/assets/svg/document-arrow-up.svg +3 -0
  235. package/dist/runtime/assets/svg/document-chart-bar.svg +3 -0
  236. package/dist/runtime/assets/svg/document-check.svg +3 -0
  237. package/dist/runtime/assets/svg/document-currency-bangladeshi.svg +3 -0
  238. package/dist/runtime/assets/svg/document-currency-dollar.svg +3 -0
  239. package/dist/runtime/assets/svg/document-currency-euro.svg +3 -0
  240. package/dist/runtime/assets/svg/document-currency-pound.svg +3 -0
  241. package/dist/runtime/assets/svg/document-currency-rupee.svg +3 -0
  242. package/dist/runtime/assets/svg/document-currency-yen.svg +3 -0
  243. package/dist/runtime/assets/svg/document-duplicate.svg +3 -0
  244. package/dist/runtime/assets/svg/document-magnifying-glass.svg +3 -0
  245. package/dist/runtime/assets/svg/document-minus.svg +3 -0
  246. package/dist/runtime/assets/svg/document-plus.svg +3 -0
  247. package/dist/runtime/assets/svg/document-text.svg +3 -0
  248. package/dist/runtime/assets/svg/document.svg +3 -0
  249. package/dist/runtime/assets/svg/ellipsis-horizontal-circle.svg +3 -0
  250. package/dist/runtime/assets/svg/ellipsis-horizontal.svg +3 -0
  251. package/dist/runtime/assets/svg/ellipsis-vertical.svg +3 -0
  252. package/dist/runtime/assets/svg/envelope-open.svg +3 -0
  253. package/dist/runtime/assets/svg/envelope.svg +3 -0
  254. package/dist/runtime/assets/svg/equals.svg +3 -0
  255. package/dist/runtime/assets/svg/exclamation-circle.svg +3 -0
  256. package/dist/runtime/assets/svg/exclamation-triangle.svg +3 -0
  257. package/dist/runtime/assets/svg/eye-dropper.svg +3 -0
  258. package/dist/runtime/assets/svg/eye-slash.svg +3 -0
  259. package/dist/runtime/assets/svg/eye.svg +4 -0
  260. package/dist/runtime/assets/svg/face-frown.svg +3 -0
  261. package/dist/runtime/assets/svg/face-smile.svg +3 -0
  262. package/dist/runtime/assets/svg/film.svg +3 -0
  263. package/dist/runtime/assets/svg/finger-print.svg +3 -0
  264. package/dist/runtime/assets/svg/fire.svg +4 -0
  265. package/dist/runtime/assets/svg/flag.svg +3 -0
  266. package/dist/runtime/assets/svg/folder-arrow-down.svg +3 -0
  267. package/dist/runtime/assets/svg/folder-minus.svg +3 -0
  268. package/dist/runtime/assets/svg/folder-open.svg +3 -0
  269. package/dist/runtime/assets/svg/folder-plus.svg +3 -0
  270. package/dist/runtime/assets/svg/folder.svg +3 -0
  271. package/dist/runtime/assets/svg/forward.svg +3 -0
  272. package/dist/runtime/assets/svg/funnel.svg +3 -0
  273. package/dist/runtime/assets/svg/gif.svg +3 -0
  274. package/dist/runtime/assets/svg/gift-top.svg +3 -0
  275. package/dist/runtime/assets/svg/gift.svg +3 -0
  276. package/dist/runtime/assets/svg/globe-alt.svg +3 -0
  277. package/dist/runtime/assets/svg/globe-americas.svg +3 -0
  278. package/dist/runtime/assets/svg/globe-asia-australia.svg +3 -0
  279. package/dist/runtime/assets/svg/globe-europe-africa.svg +3 -0
  280. package/dist/runtime/assets/svg/h1.svg +3 -0
  281. package/dist/runtime/assets/svg/h2.svg +3 -0
  282. package/dist/runtime/assets/svg/h3.svg +3 -0
  283. package/dist/runtime/assets/svg/hand-raised.svg +3 -0
  284. package/dist/runtime/assets/svg/hand-thumb-down.svg +3 -0
  285. package/dist/runtime/assets/svg/hand-thumb-up.svg +3 -0
  286. package/dist/runtime/assets/svg/hashtag.svg +3 -0
  287. package/dist/runtime/assets/svg/heart.svg +3 -0
  288. package/dist/runtime/assets/svg/home-modern.svg +3 -0
  289. package/dist/runtime/assets/svg/home.svg +3 -0
  290. package/dist/runtime/assets/svg/identification.svg +3 -0
  291. package/dist/runtime/assets/svg/inbox-arrow-down.svg +3 -0
  292. package/dist/runtime/assets/svg/inbox-stack.svg +3 -0
  293. package/dist/runtime/assets/svg/inbox.svg +3 -0
  294. package/dist/runtime/assets/svg/information-circle.svg +3 -0
  295. package/dist/runtime/assets/svg/italic.svg +3 -0
  296. package/dist/runtime/assets/svg/key.svg +3 -0
  297. package/dist/runtime/assets/svg/language.svg +3 -0
  298. package/dist/runtime/assets/svg/lifebuoy.svg +3 -0
  299. package/dist/runtime/assets/svg/light-bulb.svg +3 -0
  300. package/dist/runtime/assets/svg/link-slash.svg +3 -0
  301. package/dist/runtime/assets/svg/link.svg +3 -0
  302. package/dist/runtime/assets/svg/list-bullet.svg +3 -0
  303. package/dist/runtime/assets/svg/lock-closed.svg +3 -0
  304. package/dist/runtime/assets/svg/lock-open.svg +3 -0
  305. package/dist/runtime/assets/svg/magnifying-glass-circle.svg +3 -0
  306. package/dist/runtime/assets/svg/magnifying-glass-minus.svg +3 -0
  307. package/dist/runtime/assets/svg/magnifying-glass-plus.svg +3 -0
  308. package/dist/runtime/assets/svg/magnifying-glass.svg +3 -0
  309. package/dist/runtime/assets/svg/map-pin.svg +4 -0
  310. package/dist/runtime/assets/svg/map.svg +3 -0
  311. package/dist/runtime/assets/svg/megaphone.svg +3 -0
  312. package/dist/runtime/assets/svg/microphone.svg +3 -0
  313. package/dist/runtime/assets/svg/minus-circle.svg +3 -0
  314. package/dist/runtime/assets/svg/minus-small.svg +3 -0
  315. package/dist/runtime/assets/svg/minus.svg +3 -0
  316. package/dist/runtime/assets/svg/moon.svg +3 -0
  317. package/dist/runtime/assets/svg/musical-note.svg +3 -0
  318. package/dist/runtime/assets/svg/newspaper.svg +3 -0
  319. package/dist/runtime/assets/svg/no-symbol.svg +3 -0
  320. package/dist/runtime/assets/svg/numbered-list.svg +3 -0
  321. package/dist/runtime/assets/svg/paint-brush.svg +3 -0
  322. package/dist/runtime/assets/svg/paper-airplane.svg +3 -0
  323. package/dist/runtime/assets/svg/paper-clip.svg +3 -0
  324. package/dist/runtime/assets/svg/pause-circle.svg +3 -0
  325. package/dist/runtime/assets/svg/pause.svg +3 -0
  326. package/dist/runtime/assets/svg/pencil-square.svg +3 -0
  327. package/dist/runtime/assets/svg/pencil.svg +3 -0
  328. package/dist/runtime/assets/svg/percent-badge.svg +3 -0
  329. package/dist/runtime/assets/svg/phone-arrow-down-left.svg +3 -0
  330. package/dist/runtime/assets/svg/phone-arrow-up-right.svg +3 -0
  331. package/dist/runtime/assets/svg/phone-x-mark.svg +3 -0
  332. package/dist/runtime/assets/svg/phone.svg +3 -0
  333. package/dist/runtime/assets/svg/photo.svg +3 -0
  334. package/dist/runtime/assets/svg/play-circle.svg +4 -0
  335. package/dist/runtime/assets/svg/play-pause.svg +3 -0
  336. package/dist/runtime/assets/svg/play.svg +3 -0
  337. package/dist/runtime/assets/svg/plus-circle.svg +3 -0
  338. package/dist/runtime/assets/svg/plus-small.svg +3 -0
  339. package/dist/runtime/assets/svg/plus.svg +3 -0
  340. package/dist/runtime/assets/svg/power.svg +3 -0
  341. package/dist/runtime/assets/svg/presentation-chart-bar.svg +3 -0
  342. package/dist/runtime/assets/svg/presentation-chart-line.svg +3 -0
  343. package/dist/runtime/assets/svg/printer.svg +3 -0
  344. package/dist/runtime/assets/svg/puzzle-piece.svg +3 -0
  345. package/dist/runtime/assets/svg/qr-code.svg +4 -0
  346. package/dist/runtime/assets/svg/question-mark-circle.svg +3 -0
  347. package/dist/runtime/assets/svg/queue-list.svg +3 -0
  348. package/dist/runtime/assets/svg/radio.svg +3 -0
  349. package/dist/runtime/assets/svg/receipt-percent.svg +3 -0
  350. package/dist/runtime/assets/svg/receipt-refund.svg +3 -0
  351. package/dist/runtime/assets/svg/rectangle-group.svg +3 -0
  352. package/dist/runtime/assets/svg/rectangle-stack.svg +3 -0
  353. package/dist/runtime/assets/svg/rocket-launch.svg +3 -0
  354. package/dist/runtime/assets/svg/rss.svg +3 -0
  355. package/dist/runtime/assets/svg/scale.svg +3 -0
  356. package/dist/runtime/assets/svg/scissors.svg +3 -0
  357. package/dist/runtime/assets/svg/server-stack.svg +3 -0
  358. package/dist/runtime/assets/svg/server.svg +3 -0
  359. package/dist/runtime/assets/svg/share.svg +3 -0
  360. package/dist/runtime/assets/svg/shield-check.svg +3 -0
  361. package/dist/runtime/assets/svg/shield-exclamation.svg +3 -0
  362. package/dist/runtime/assets/svg/shopping-bag.svg +3 -0
  363. package/dist/runtime/assets/svg/shopping-cart.svg +3 -0
  364. package/dist/runtime/assets/svg/signal-slash.svg +3 -0
  365. package/dist/runtime/assets/svg/signal.svg +3 -0
  366. package/dist/runtime/assets/svg/slash.svg +3 -0
  367. package/dist/runtime/assets/svg/sparkles.svg +3 -0
  368. package/dist/runtime/assets/svg/speaker-wave.svg +3 -0
  369. package/dist/runtime/assets/svg/speaker-x-mark.svg +3 -0
  370. package/dist/runtime/assets/svg/square-2-stack.svg +3 -0
  371. package/dist/runtime/assets/svg/square-3-stack-3d.svg +3 -0
  372. package/dist/runtime/assets/svg/squares-2x2.svg +3 -0
  373. package/dist/runtime/assets/svg/squares-plus.svg +3 -0
  374. package/dist/runtime/assets/svg/star.svg +3 -0
  375. package/dist/runtime/assets/svg/stop-circle.svg +4 -0
  376. package/dist/runtime/assets/svg/stop.svg +3 -0
  377. package/dist/runtime/assets/svg/strikethrough.svg +3 -0
  378. package/dist/runtime/assets/svg/sun.svg +3 -0
  379. package/dist/runtime/assets/svg/swatch.svg +3 -0
  380. package/dist/runtime/assets/svg/table-cells.svg +3 -0
  381. package/dist/runtime/assets/svg/tag.svg +4 -0
  382. package/dist/runtime/assets/svg/ticket.svg +3 -0
  383. package/dist/runtime/assets/svg/trash.svg +3 -0
  384. package/dist/runtime/assets/svg/trophy.svg +3 -0
  385. package/dist/runtime/assets/svg/truck.svg +3 -0
  386. package/dist/runtime/assets/svg/tv.svg +3 -0
  387. package/dist/runtime/assets/svg/underline.svg +3 -0
  388. package/dist/runtime/assets/svg/user-circle.svg +3 -0
  389. package/dist/runtime/assets/svg/user-group.svg +3 -0
  390. package/dist/runtime/assets/svg/user-minus.svg +3 -0
  391. package/dist/runtime/assets/svg/user-plus.svg +3 -0
  392. package/dist/runtime/assets/svg/user.svg +3 -0
  393. package/dist/runtime/assets/svg/users.svg +3 -0
  394. package/dist/runtime/assets/svg/variable.svg +3 -0
  395. package/dist/runtime/assets/svg/video-camera-slash.svg +3 -0
  396. package/dist/runtime/assets/svg/video-camera.svg +3 -0
  397. package/dist/runtime/assets/svg/view-columns.svg +3 -0
  398. package/dist/runtime/assets/svg/viewfinder-circle.svg +3 -0
  399. package/dist/runtime/assets/svg/wallet.svg +3 -0
  400. package/dist/runtime/assets/svg/wifi.svg +3 -0
  401. package/dist/runtime/assets/svg/window.svg +3 -0
  402. package/dist/runtime/assets/svg/wrench-screwdriver.svg +3 -0
  403. package/dist/runtime/assets/svg/wrench.svg +4 -0
  404. package/dist/runtime/assets/svg/x-circle.svg +3 -0
  405. package/dist/runtime/assets/svg/x-mark.svg +3 -0
  406. package/dist/runtime/server/plugins/migrate-libsql.d.ts +2 -0
  407. package/dist/runtime/server/plugins/migrate-libsql.js +17 -0
  408. package/dist/runtime/server/utils/db-libsql.d.ts +7 -0
  409. package/dist/runtime/server/utils/db-libsql.js +18 -0
  410. package/dist/runtime/shared/index.js +1 -1
  411. package/package.json +7 -3
  412. package/dist/runtime/app/i18n/en.json +0 -123
  413. package/dist/runtime/app/i18n/it.json +0 -123
package/README.md CHANGED
@@ -6,7 +6,67 @@ nuxt-cms is a Nuxt module that leverages the Nitro server to ship a lightweight
6
6
  - **Content types in code**: a `cms.config.ts` with `defineCmsConfig()` declares collections, single documents, relations, blocks and translatable fields; database schema, migrations and TypeScript types are generated from it.
7
7
  - **Admin panel at `/cms`**: entry editing with validation, drafts, media library (S3-compatible storage), single-admin auth from env credentials.
8
8
  - **Public GraphQL API**: read-only, typed end-to-end via gql.tada, with filtering, sorting and pagination.
9
- - **SQLite or Postgres**: a local file database by default, one config line to switch.
9
+ - **SQLite, Postgres or libSQL/Turso**: a local file database by default, one config line to switch (including remote SQLite over the network).
10
+
11
+ ## Installation
12
+
13
+ ```bash
14
+ npm install @xleddyl/nuxt-cms
15
+ ```
16
+
17
+ Register the module and configure it under the `cms` key in `nuxt.config.ts`:
18
+
19
+ ```ts
20
+ export default defineNuxtConfig({
21
+ modules: ['@xleddyl/nuxt-cms'],
22
+ cms: {
23
+ database: {
24
+ driver: 'sqlite', // 'sqlite' | 'postgres' (with `url`) | 'libsql' (Turso/remote, with `url` + `authToken`)
25
+ path: 'data/cms.db',
26
+ },
27
+ i18n: {
28
+ locales: ['en', 'it'],
29
+ defaultLocale: 'en',
30
+ },
31
+ },
32
+ })
33
+ ```
34
+
35
+ Then declare your content types in a `cms.config.ts` at the project root with `defineCmsConfig()`.
36
+
37
+ ### Environment variables
38
+
39
+ Every secret maps to runtime config, so it can be set as an env var instead of in `nuxt.config.ts`:
40
+
41
+ | Variable | Required | Purpose |
42
+ | --- | --- | --- |
43
+ | `NUXT_CMS_ADMIN_EMAIL` | yes | admin login email |
44
+ | `NUXT_CMS_ADMIN_PASSWORD` | yes | admin login password |
45
+ | `NUXT_SESSION_PASSWORD` | in production | session encryption key (32+ chars) |
46
+ | `NUXT_CMS_DATABASE_URL` | with `postgres` / remote `libsql` | Postgres connection string or libSQL URL |
47
+ | `NUXT_CMS_DATABASE_AUTH_TOKEN` | with remote `libsql` | libSQL/Turso auth token |
48
+ | `NUXT_CMS_MEDIA_ENDPOINT` | for media | S3-compatible endpoint |
49
+ | `NUXT_CMS_MEDIA_REGION` | for media | S3 region (default `auto`) |
50
+ | `NUXT_CMS_MEDIA_BUCKET` | for media | bucket name |
51
+ | `NUXT_CMS_MEDIA_ACCESS_KEY_ID` | for media | S3 access key id |
52
+ | `NUXT_CMS_MEDIA_SECRET_ACCESS_KEY` | for media | S3 secret access key |
53
+ | `NUXT_PUBLIC_CMS_MEDIA_BASE_URL` | for media | public base URL for uploaded files |
54
+
55
+ ## Documentation
56
+
57
+ Full documentation lives in [`docs/`](docs/README.md):
58
+
59
+ - [Getting started](docs/getting-started.md) — install, configure, first content type, run.
60
+ - [Configuration](docs/configuration.md) — every `cms.*` option and the `NUXT_CMS_*` env vars.
61
+ - [Database](docs/database.md) — SQLite, Postgres and libSQL/Turso drivers, migrations, studio.
62
+ - [Schema](docs/schema.md) — `defineCmsConfig`, entries, field types, relations, blocks, i18n.
63
+ - [Querying content](docs/querying.md) — GraphQL API, `useCms` / `$cmsQuery`, filters, sorting, pagination.
64
+ - [Admin panel & security](docs/admin.md) — pages, authentication, sessions, admin REST API.
65
+ - [Media](docs/media.md) — S3-compatible storage, upload flow, allowed file types.
66
+
67
+ ## LLM guide
68
+
69
+ [llm.txt](llm.txt) is a compact reference meant to be fed to an LLM: schema definition (`cms.config.ts`, field types, relations, blocks, i18n), the `useCms` / `$cmsQuery` composables and the generated GraphQL API (filters, sorting, pagination).
10
70
 
11
71
  ## Development
12
72
 
package/dist/module.d.mts CHANGED
@@ -1,6 +1,7 @@
1
1
  import * as _nuxt_schema from '@nuxt/schema';
2
2
 
3
3
  type Dialect = 'sqlite' | 'postgres';
4
+ type Driver = Dialect | 'libsql';
4
5
 
5
6
  interface ModuleOptions {
6
7
  configPath: string;
@@ -9,9 +10,10 @@ interface ModuleOptions {
9
10
  password: string;
10
11
  };
11
12
  database: {
12
- driver?: Dialect;
13
+ driver?: Driver;
13
14
  path?: string;
14
15
  url?: string;
16
+ authToken?: string;
15
17
  };
16
18
  media: {
17
19
  endpoint: string;
package/dist/module.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@xleddyl/nuxt-cms",
3
3
  "configKey": "cms",
4
- "version": "0.1.10",
4
+ "version": "0.1.13",
5
5
  "builder": {
6
6
  "@nuxt/module-builder": "1.0.2",
7
7
  "unbuild": "unknown"
package/dist/module.mjs CHANGED
@@ -3,7 +3,9 @@ import { existsSync } from 'node:fs';
3
3
  import { createRequire } from 'node:module';
4
4
  import { isAbsolute, resolve, relative, join, dirname } from 'node:path';
5
5
  import { fileURLToPath } from 'node:url';
6
- import { defineNuxtModule, createResolver, useLogger, resolvePath, addTemplate, addImports, addServerPlugin, addTypeTemplate, addLayout, addComponentsDir, addRouteMiddleware, extendPages, addServerHandler } from '@nuxt/kit';
6
+ import { defineNuxtModule, createResolver, useLogger, resolvePath, addTemplate, addImports, addServerPlugin, addTypeTemplate, addVitePlugin, addLayout, addComponentsDir, addRouteMiddleware, extendPages, addServerHandler } from '@nuxt/kit';
7
+ import tailwindcss from '@tailwindcss/vite';
8
+ import svgLoader from 'vite-svg-loader';
7
9
  import { introspectionFromSchema, buildSchema } from 'graphql';
8
10
  import { minifyIntrospection, outputIntrospectionFile } from 'gql.tada/internal';
9
11
  import { createJiti } from 'jiti';
@@ -397,23 +399,7 @@ const module$1 = defineNuxtModule({
397
399
  configKey: "cms"
398
400
  },
399
401
  moduleDependencies: {
400
- "@nuxt/ui": {},
401
- "nuxt-auth-utils": {},
402
- "@nuxtjs/i18n": {
403
- defaults: {
404
- locales: [
405
- { code: "en", name: "English" },
406
- { code: "it", name: "Italiano" }
407
- ],
408
- defaultLocale: "en",
409
- strategy: "no_prefix",
410
- detectBrowserLanguage: {
411
- useCookie: true,
412
- cookieKey: "cms-locale",
413
- fallbackLocale: "en"
414
- }
415
- }
416
- }
402
+ "nuxt-auth-utils": {}
417
403
  },
418
404
  defaults: {
419
405
  configPath: "cms.config",
@@ -424,7 +410,8 @@ const module$1 = defineNuxtModule({
424
410
  database: {
425
411
  driver: "sqlite",
426
412
  path: "data/cms.db",
427
- url: ""
413
+ url: "",
414
+ authToken: ""
428
415
  },
429
416
  media: {
430
417
  endpoint: "",
@@ -481,7 +468,11 @@ const module$1 = defineNuxtModule({
481
468
  const schemaTemplate = addTemplate({
482
469
  filename: "cms/schema.ts",
483
470
  write: true,
484
- getContents: () => renderSchemaFile(cmsConfig, options.database.driver ?? "sqlite", resolveImport)
471
+ getContents: () => renderSchemaFile(
472
+ cmsConfig,
473
+ options.database.driver === "postgres" ? "postgres" : "sqlite",
474
+ resolveImport
475
+ )
485
476
  });
486
477
  nuxt.options.alias["#cms-tables"] = schemaTemplate.dst;
487
478
  addTemplate({
@@ -543,24 +534,16 @@ const module$1 = defineNuxtModule({
543
534
  { name: "useCms", from: resolver.resolve("./runtime/app/composables/cms-query") },
544
535
  { name: "$cmsQuery", from: resolver.resolve("./runtime/app/composables/cms-query") }
545
536
  ]);
546
- nuxt.hook("i18n:registerModule", (register) => {
547
- register({
548
- langDir: resolver.resolve("./runtime/app/i18n"),
549
- locales: [
550
- { code: "en", file: "en.json" },
551
- { code: "it", file: "it.json" }
552
- ]
553
- });
554
- });
555
537
  const {
556
538
  driver = "sqlite",
557
539
  path: dbPath = "data/cms.db",
558
- url: databaseUrl = ""
540
+ url: databaseUrl = "",
541
+ authToken: databaseAuthToken = ""
559
542
  } = options.database;
560
543
  nuxt.options.alias["#cms-db"] = resolver.resolve(
561
- driver === "postgres" ? "./runtime/server/utils/db-postgres" : "./runtime/server/utils/db-sqlite"
544
+ driver === "postgres" ? "./runtime/server/utils/db-postgres" : driver === "libsql" ? "./runtime/server/utils/db-libsql" : "./runtime/server/utils/db-sqlite"
562
545
  );
563
- const dialect = driver === "postgres" ? "postgresql" : "sqlite";
546
+ const dialect = driver === "postgres" ? "postgresql" : driver === "libsql" ? "turso" : "sqlite";
564
547
  const resolvedDbPath = isAbsolute(dbPath) ? dbPath : resolve(nuxt.options.rootDir, dbPath);
565
548
  const migrationsDir = resolve(nuxt.options.rootDir, `server/db/migrations/${driver}`);
566
549
  const relativeSchemaPath = relative(nuxt.options.rootDir, schemaTemplate.dst);
@@ -574,14 +557,14 @@ const module$1 = defineNuxtModule({
574
557
  ` dialect: '${dialect}',`,
575
558
  ` schema: '${toPosix(schemaTemplate.dst)}',`,
576
559
  ` out: '${toPosix(migrationsDir)}',`,
577
- driver === "postgres" ? ` dbCredentials: { url: process.env.NUXT_CMS_DATABASE_URL ?? '${databaseUrl}' },` : ` dbCredentials: { url: '${toPosix(resolvedDbPath)}' },`,
560
+ driver === "postgres" ? ` dbCredentials: { url: process.env.NUXT_CMS_DATABASE_URL ?? '${databaseUrl}' },` : driver === "libsql" ? ` dbCredentials: { url: process.env.NUXT_CMS_DATABASE_URL ?? '${databaseUrl || `file:${toPosix(resolvedDbPath)}`}', authToken: process.env.NUXT_CMS_DATABASE_AUTH_TOKEN ?? '${databaseAuthToken}' || undefined },` : ` dbCredentials: { url: '${toPosix(resolvedDbPath)}' },`,
578
561
  `}`,
579
562
  ``
580
563
  ].join("\n")
581
564
  });
582
565
  addServerPlugin(
583
566
  resolver.resolve(
584
- driver === "postgres" ? "./runtime/server/plugins/migrate-postgres" : "./runtime/server/plugins/migrate-sqlite"
567
+ driver === "postgres" ? "./runtime/server/plugins/migrate-postgres" : driver === "libsql" ? "./runtime/server/plugins/migrate-libsql" : "./runtime/server/plugins/migrate-sqlite"
585
568
  )
586
569
  );
587
570
  if (!nuxt.options.dev) {
@@ -612,6 +595,7 @@ const module$1 = defineNuxtModule({
612
595
  adminEmail: options.admin.email,
613
596
  adminPassword: options.admin.password,
614
597
  databaseUrl,
598
+ databaseAuthToken,
615
599
  dbPath: resolvedDbPath,
616
600
  migrationsDir,
617
601
  ...existingConfig,
@@ -657,6 +641,8 @@ const module$1 = defineNuxtModule({
657
641
  },
658
642
  { nuxt: true, nitro: true }
659
643
  );
644
+ addVitePlugin(tailwindcss());
645
+ addVitePlugin(svgLoader({ defaultImport: "url", svgoConfig: { plugins: ["prefixIds"] } }));
660
646
  nuxt.options.css.push(resolver.resolve("./runtime/assets/main.css"));
661
647
  addLayout({ src: resolver.resolve("./runtime/app/layouts/cms-admin.vue") }, "cms-admin");
662
648
  addComponentsDir({ path: resolver.resolve("./runtime/app/components") });
@@ -0,0 +1,18 @@
1
+ type __VLS_Props = {
2
+ color?: 'error';
3
+ variant?: string;
4
+ title?: string;
5
+ };
6
+ declare var __VLS_1: {};
7
+ type __VLS_Slots = {} & {
8
+ default?: (props: typeof __VLS_1) => any;
9
+ };
10
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
12
+ declare const _default: typeof __VLS_export;
13
+ export default _default;
14
+ type __VLS_WithSlots<T, S> = T & {
15
+ new (): {
16
+ $slots: S;
17
+ };
18
+ };
@@ -0,0 +1,14 @@
1
+ <template>
2
+ <div class="cms-alert" :class="`cms-alert-${color ?? 'error'}`">
3
+ <p v-if="title" class="font-medium">{{ title }}</p>
4
+ <slot />
5
+ </div>
6
+ </template>
7
+
8
+ <script setup>
9
+ defineProps({
10
+ color: { type: String, required: false },
11
+ variant: { type: String, required: false },
12
+ title: { type: String, required: false }
13
+ });
14
+ </script>
@@ -0,0 +1,18 @@
1
+ type __VLS_Props = {
2
+ color?: 'error';
3
+ variant?: string;
4
+ title?: string;
5
+ };
6
+ declare var __VLS_1: {};
7
+ type __VLS_Slots = {} & {
8
+ default?: (props: typeof __VLS_1) => any;
9
+ };
10
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
11
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
12
+ declare const _default: typeof __VLS_export;
13
+ export default _default;
14
+ type __VLS_WithSlots<T, S> = T & {
15
+ new (): {
16
+ $slots: S;
17
+ };
18
+ };
@@ -9,54 +9,52 @@
9
9
  <button
10
10
  type="button"
11
11
  class="cms-kicker flex grow items-center gap-1.5 text-left"
12
- :aria-label="
13
- isCollapsed(item) ? t('cms.form.expandBlock') : t('cms.form.collapseBlock')
14
- "
12
+ :aria-label="isCollapsed(item) ? 'Expand block' : 'Collapse block'"
15
13
  @click="toggleCollapsed(item)"
16
14
  >
17
- <UIcon
18
- :name="isCollapsed(item) ? 'i-lucide-chevron-right' : 'i-lucide-chevron-down'"
15
+ <CmsIcon
16
+ :name="isCollapsed(item) ? 'chevron-right' : 'chevron-down'"
19
17
  class="size-3.5"
20
18
  />
21
19
  {{ blocks[item.type]?.label ?? item.type }}
22
20
  </button>
23
- <UButton
24
- icon="i-lucide-chevron-up"
21
+ <CmsButton
22
+ icon="chevron-up"
25
23
  size="xs"
26
24
  variant="ghost"
27
25
  color="neutral"
28
- :aria-label="t('cms.form.moveUp')"
26
+ aria-label="Move up"
29
27
  :disabled="index === 0"
30
28
  @click="move(index, -1)"
31
29
  />
32
- <UButton
33
- icon="i-lucide-chevron-down"
30
+ <CmsButton
31
+ icon="chevron-down"
34
32
  size="xs"
35
33
  variant="ghost"
36
34
  color="neutral"
37
- :aria-label="t('cms.form.moveDown')"
35
+ aria-label="Move down"
38
36
  :disabled="index === items.length - 1"
39
37
  @click="move(index, 1)"
40
38
  />
41
- <UButton
42
- icon="i-lucide-copy"
39
+ <CmsButton
40
+ icon="document-duplicate"
43
41
  size="xs"
44
42
  variant="ghost"
45
43
  color="neutral"
46
- :aria-label="t('cms.form.duplicateBlock')"
44
+ aria-label="Duplicate block"
47
45
  @click="duplicate(index)"
48
46
  />
49
- <UButton
50
- icon="i-lucide-trash-2"
47
+ <CmsButton
48
+ icon="trash"
51
49
  size="xs"
52
50
  variant="ghost"
53
51
  color="error"
54
- :aria-label="t('cms.form.removeBlock')"
52
+ aria-label="Remove block"
55
53
  @click="remove(index)"
56
54
  />
57
55
  </div>
58
56
  <template v-if="!isCollapsed(item)">
59
- <UFormField
57
+ <CmsFormField
60
58
  v-for="(blockField, blockKey) in blocks[item.type]?.fields"
61
59
  :key="blockKey"
62
60
  :label="blockField.label"
@@ -68,28 +66,27 @@
68
66
  :field="blockField"
69
67
  @update:model-value="(value) => updateField(index, blockKey, value)"
70
68
  />
71
- </UFormField>
69
+ </CmsFormField>
72
70
  </template>
73
71
  </div>
74
- <UDropdownMenu :items="addItems">
75
- <UButton
76
- :label="t('cms.form.addBlock')"
77
- icon="i-lucide-plus"
72
+ <CmsDropdownMenu :items="addItems">
73
+ <CmsButton
74
+ label="Add block"
75
+ icon="plus"
78
76
  variant="subtle"
79
77
  class="self-start rounded-full px-4"
80
78
  />
81
- </UDropdownMenu>
79
+ </CmsDropdownMenu>
82
80
  </div>
83
81
  </template>
84
82
 
85
83
  <script setup>
86
- import { computed, ref, useI18n } from "#imports";
84
+ import { computed, ref } from "#imports";
87
85
  import { CMS_FIELD_UI } from "../../utils/ui";
88
86
  const props = defineProps({
89
87
  field: { type: Object, required: true }
90
88
  });
91
89
  const model = defineModel({ type: [Array, null], ...{ required: true } });
92
- const { t } = useI18n();
93
90
  const blocks = computed(() => props.field.blocks ?? {});
94
91
  const items = computed(() => Array.isArray(model.value) ? model.value : []);
95
92
  let uidCounter = 0;
@@ -0,0 +1,25 @@
1
+ type __VLS_Props = {
2
+ label?: string;
3
+ type?: 'button' | 'submit' | 'reset';
4
+ form?: string;
5
+ icon?: string;
6
+ size?: 'xs' | 'sm' | 'md' | 'lg';
7
+ color?: 'primary' | 'neutral' | 'error' | 'success';
8
+ variant?: 'solid' | 'subtle' | 'soft' | 'ghost';
9
+ disabled?: boolean;
10
+ loading?: boolean;
11
+ block?: boolean;
12
+ };
13
+ declare var __VLS_11: {};
14
+ type __VLS_Slots = {} & {
15
+ default?: (props: typeof __VLS_11) => any;
16
+ };
17
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
18
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
19
+ declare const _default: typeof __VLS_export;
20
+ export default _default;
21
+ type __VLS_WithSlots<T, S> = T & {
22
+ new (): {
23
+ $slots: S;
24
+ };
25
+ };
@@ -0,0 +1,33 @@
1
+ <template>
2
+ <button
3
+ :type="type ?? 'button'"
4
+ :form="form"
5
+ :disabled="disabled || loading"
6
+ :class="[
7
+ 'cms-btn',
8
+ `cms-btn-${size ?? 'md'}`,
9
+ `cms-btn-${color ?? 'primary'}`,
10
+ `cms-btn-${variant ?? 'solid'}`,
11
+ { 'is-block': block }
12
+ ]"
13
+ >
14
+ <CmsIcon v-if="loading" name="arrow-path" class="size-4 shrink-0 animate-spin" />
15
+ <CmsIcon v-else-if="icon" :name="icon" class="size-4 shrink-0" />
16
+ <slot>{{ label }}</slot>
17
+ </button>
18
+ </template>
19
+
20
+ <script setup>
21
+ defineProps({
22
+ label: { type: String, required: false },
23
+ type: { type: String, required: false },
24
+ form: { type: String, required: false },
25
+ icon: { type: String, required: false },
26
+ size: { type: String, required: false },
27
+ color: { type: String, required: false },
28
+ variant: { type: String, required: false },
29
+ disabled: { type: Boolean, required: false },
30
+ loading: { type: Boolean, required: false },
31
+ block: { type: Boolean, required: false }
32
+ });
33
+ </script>
@@ -0,0 +1,25 @@
1
+ type __VLS_Props = {
2
+ label?: string;
3
+ type?: 'button' | 'submit' | 'reset';
4
+ form?: string;
5
+ icon?: string;
6
+ size?: 'xs' | 'sm' | 'md' | 'lg';
7
+ color?: 'primary' | 'neutral' | 'error' | 'success';
8
+ variant?: 'solid' | 'subtle' | 'soft' | 'ghost';
9
+ disabled?: boolean;
10
+ loading?: boolean;
11
+ block?: boolean;
12
+ };
13
+ declare var __VLS_11: {};
14
+ type __VLS_Slots = {} & {
15
+ default?: (props: typeof __VLS_11) => any;
16
+ };
17
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
18
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
19
+ declare const _default: typeof __VLS_export;
20
+ export default _default;
21
+ type __VLS_WithSlots<T, S> = T & {
22
+ new (): {
23
+ $slots: S;
24
+ };
25
+ };
@@ -1,20 +1,3 @@
1
- type __VLS_Props = {
2
- message: string;
3
- title?: string;
4
- confirmLabel?: string;
5
- };
6
- type __VLS_ModelProps = {
7
- 'open'?: boolean;
8
- };
9
- type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
10
- declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
11
- close: (value: boolean) => any;
12
- "after:leave": () => any;
13
- "update:open": (value: boolean) => any;
14
- }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
15
- onClose?: ((value: boolean) => any) | undefined;
16
- "onAfter:leave"?: (() => any) | undefined;
17
- "onUpdate:open"?: ((value: boolean) => any) | undefined;
18
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
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>;
19
2
  declare const _default: typeof __VLS_export;
20
3
  export default _default;
@@ -1,43 +1,42 @@
1
1
  <template>
2
- <UModal
3
- v-model:open="open"
4
- :title="title ?? t('cms.confirm.title')"
2
+ <CmsModal
3
+ v-model:open="state.open"
4
+ :title="state.title ?? 'Are you sure?'"
5
5
  :ui="ui"
6
- @after:leave="emit('after:leave')"
6
+ @after:leave="finish(false)"
7
7
  >
8
8
  <template #body>
9
9
  <div class="flex flex-col gap-5">
10
- <p class="text-(--ui-text) text-sm">{{ message }}</p>
10
+ <p class="text-sm text-(--ui-text)">{{ state.message }}</p>
11
11
  <div class="flex justify-end gap-2">
12
- <UButton
13
- :label="t('cms.confirm.cancel')"
12
+ <CmsButton
13
+ label="Cancel"
14
14
  variant="subtle"
15
15
  color="neutral"
16
16
  class="rounded-full px-4"
17
- @click="emit('close', false)"
17
+ @click="finish(false)"
18
18
  />
19
- <UButton
20
- :label="confirmLabel ?? t('cms.confirm.confirm')"
19
+ <CmsButton
20
+ :label="state.confirmLabel ?? 'Confirm'"
21
21
  color="error"
22
22
  class="rounded-full px-4"
23
- @click="emit('close', true)"
23
+ @click="finish(true)"
24
24
  />
25
25
  </div>
26
26
  </div>
27
27
  </template>
28
- </UModal>
28
+ </CmsModal>
29
29
  </template>
30
30
 
31
31
  <script setup>
32
- import { useI18n } from "#imports";
32
+ import { useCmsConfirmState } from "../../composables/cms-confirm";
33
33
  import { CMS_MODAL_UI } from "../../utils/ui";
34
- defineProps({
35
- message: { type: String, required: true },
36
- title: { type: String, required: false },
37
- confirmLabel: { type: String, required: false }
38
- });
39
- const open = defineModel("open", { type: Boolean, ...{ default: true } });
40
- const emit = defineEmits(["close", "after:leave"]);
41
- const { t } = useI18n();
34
+ const state = useCmsConfirmState();
42
35
  const ui = { ...CMS_MODAL_UI, content: "rounded-2xl shadow-xl sm:max-w-md" };
36
+ function finish(value) {
37
+ const resolve = state.value.resolve;
38
+ if (!resolve) return;
39
+ state.value = { open: false, message: "" };
40
+ resolve(value);
41
+ }
43
42
  </script>
@@ -1,20 +1,3 @@
1
- type __VLS_Props = {
2
- message: string;
3
- title?: string;
4
- confirmLabel?: string;
5
- };
6
- type __VLS_ModelProps = {
7
- 'open'?: boolean;
8
- };
9
- type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
10
- declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
11
- close: (value: boolean) => any;
12
- "after:leave": () => any;
13
- "update:open": (value: boolean) => any;
14
- }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
15
- onClose?: ((value: boolean) => any) | undefined;
16
- "onAfter:leave"?: (() => any) | undefined;
17
- "onUpdate:open"?: ((value: boolean) => any) | undefined;
18
- }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
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>;
19
2
  declare const _default: typeof __VLS_export;
20
3
  export default _default;
@@ -0,0 +1,29 @@
1
+ interface MenuItem {
2
+ label: string;
3
+ type?: 'checkbox';
4
+ checked?: boolean;
5
+ onSelect?: (event: Event) => void;
6
+ onUpdateChecked?: (checked: boolean) => void;
7
+ }
8
+ type __VLS_Props = {
9
+ items: MenuItem[];
10
+ content?: {
11
+ align?: 'start' | 'end';
12
+ };
13
+ ui?: {
14
+ content?: string;
15
+ };
16
+ };
17
+ declare var __VLS_1: {};
18
+ type __VLS_Slots = {} & {
19
+ default?: (props: typeof __VLS_1) => any;
20
+ };
21
+ declare const __VLS_base: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
22
+ declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
23
+ declare const _default: typeof __VLS_export;
24
+ export default _default;
25
+ type __VLS_WithSlots<T, S> = T & {
26
+ new (): {
27
+ $slots: S;
28
+ };
29
+ };