@xleddyl/nuxt-cms 0.4.3 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (471) hide show
  1. package/README.md +1 -1
  2. package/dist/module.json +1 -1
  3. package/dist/module.mjs +22 -7
  4. package/dist/runtime/app/components/cms/BlockOutline.vue +56 -67
  5. package/dist/runtime/app/components/cms/BlockPalette.vue +3 -1
  6. package/dist/runtime/app/components/cms/BlocksField.vue +155 -149
  7. package/dist/runtime/app/components/cms/BrandMark.d.vue.ts +3 -1
  8. package/dist/runtime/app/components/cms/BrandMark.vue +24 -25
  9. package/dist/runtime/app/components/cms/BrandMark.vue.d.ts +3 -1
  10. package/dist/runtime/app/components/cms/{Checkbox.d.vue.ts → ConfirmGroups.d.vue.ts} +4 -4
  11. package/dist/runtime/app/components/cms/ConfirmGroups.vue +22 -0
  12. package/dist/runtime/app/components/cms/{Checkbox.vue.d.ts → ConfirmGroups.vue.d.ts} +4 -4
  13. package/dist/runtime/app/components/cms/EntryDrawer.d.vue.ts +2 -2
  14. package/dist/runtime/app/components/cms/EntryDrawer.vue +62 -47
  15. package/dist/runtime/app/components/cms/EntryDrawer.vue.d.ts +2 -2
  16. package/dist/runtime/app/components/cms/EntryForm.vue +100 -95
  17. package/dist/runtime/app/components/cms/FieldInput.vue +56 -32
  18. package/dist/runtime/app/components/cms/ImportModal.d.vue.ts +2 -2
  19. package/dist/runtime/app/components/cms/ImportModal.vue +80 -79
  20. package/dist/runtime/app/components/cms/ImportModal.vue.d.ts +2 -2
  21. package/dist/runtime/app/components/cms/JsonField.vue +17 -8
  22. package/dist/runtime/app/components/cms/ListFilters.vue +54 -63
  23. package/dist/runtime/app/components/cms/LocaleSwitch.vue +21 -18
  24. package/dist/runtime/app/components/cms/MediaDetail.vue +110 -72
  25. package/dist/runtime/app/components/cms/MediaField.vue +37 -29
  26. package/dist/runtime/app/components/cms/MediaFolderPicker.d.vue.ts +1 -0
  27. package/dist/runtime/app/components/cms/MediaFolderPicker.vue +77 -49
  28. package/dist/runtime/app/components/cms/MediaFolderPicker.vue.d.ts +1 -0
  29. package/dist/runtime/app/components/cms/MediaGallery.vue +300 -323
  30. package/dist/runtime/app/components/cms/MediaThumb.vue +7 -2
  31. package/dist/runtime/app/components/cms/MediaUpload.vue +37 -70
  32. package/dist/runtime/app/components/cms/RelationField.vue +23 -71
  33. package/dist/runtime/app/components/cms/RichTextField.vue +23 -177
  34. package/dist/runtime/app/components/cms/SettingsAccount.vue +96 -104
  35. package/dist/runtime/app/components/cms/SettingsColumns.vue +7 -6
  36. package/dist/runtime/app/components/cms/SettingsEntry.d.vue.ts +10 -1
  37. package/dist/runtime/app/components/cms/SettingsEntry.vue +35 -52
  38. package/dist/runtime/app/components/cms/SettingsEntry.vue.d.ts +10 -1
  39. package/dist/runtime/app/components/cms/SettingsLayout.vue +7 -4
  40. package/dist/runtime/app/components/cms/SettingsModal.d.vue.ts +0 -4
  41. package/dist/runtime/app/components/cms/SettingsModal.vue +102 -151
  42. package/dist/runtime/app/components/cms/SettingsModal.vue.d.ts +0 -4
  43. package/dist/runtime/app/components/cms/SettingsUsers.d.vue.ts +8 -1
  44. package/dist/runtime/app/components/cms/SettingsUsers.vue +182 -189
  45. package/dist/runtime/app/components/cms/SettingsUsers.vue.d.ts +8 -1
  46. package/dist/runtime/app/components/cms/SlugField.vue +9 -6
  47. package/dist/runtime/app/components/cms/StatusBadge.vue +7 -6
  48. package/dist/runtime/app/components/cms/TranslatableField.vue +11 -6
  49. package/dist/runtime/app/components/cms/VisualEditor.vue +243 -282
  50. package/dist/runtime/app/components/cms/WelcomeModal.vue +49 -41
  51. package/dist/runtime/app/composables/cms-confirm.d.ts +0 -6
  52. package/dist/runtime/app/composables/cms-confirm.js +13 -13
  53. package/dist/runtime/app/composables/cms-media-uploader.d.ts +4 -0
  54. package/dist/runtime/app/composables/cms-media-uploader.js +12 -40
  55. package/dist/runtime/app/composables/cms-theme.d.ts +3 -9
  56. package/dist/runtime/app/composables/cms-theme.js +1 -19
  57. package/dist/runtime/app/composables/cms-toast.d.ts +3 -4
  58. package/dist/runtime/app/composables/cms-toast.js +6 -13
  59. package/dist/runtime/app/layouts/cms-admin.d.vue.ts +2 -2
  60. package/dist/runtime/app/layouts/cms-admin.vue +184 -113
  61. package/dist/runtime/app/layouts/cms-admin.vue.d.ts +2 -2
  62. package/dist/runtime/app/layouts/cms-editor.d.vue.ts +2 -2
  63. package/dist/runtime/app/layouts/cms-editor.vue +9 -4
  64. package/dist/runtime/app/layouts/cms-editor.vue.d.ts +2 -2
  65. package/dist/runtime/app/pages/admin-collection.vue +178 -143
  66. package/dist/runtime/app/pages/admin-content.vue +35 -30
  67. package/dist/runtime/app/pages/admin-entry.vue +14 -9
  68. package/dist/runtime/app/pages/admin-login.vue +57 -54
  69. package/dist/runtime/app/pages/admin-media.vue +6 -4
  70. package/dist/runtime/app/pages/admin-preview.vue +3 -2
  71. package/dist/runtime/app/preview/PreviewOverlay.vue +9 -7
  72. package/dist/runtime/app/utils/ui.d.ts +1 -3
  73. package/dist/runtime/app/utils/ui.js +4 -2
  74. package/dist/runtime/assets/editor.css +1 -0
  75. package/dist/runtime/assets/main.css +1 -1
  76. package/dist/runtime/assets/media.css +1 -0
  77. package/dist/runtime/assets/shell.css +1 -0
  78. package/package.json +9 -8
  79. package/dist/runtime/app/components/cms/Alert.d.vue.ts +0 -17
  80. package/dist/runtime/app/components/cms/Alert.vue +0 -13
  81. package/dist/runtime/app/components/cms/Alert.vue.d.ts +0 -17
  82. package/dist/runtime/app/components/cms/Button.d.vue.ts +0 -26
  83. package/dist/runtime/app/components/cms/Button.vue +0 -48
  84. package/dist/runtime/app/components/cms/Button.vue.d.ts +0 -26
  85. package/dist/runtime/app/components/cms/Checkbox.vue +0 -21
  86. package/dist/runtime/app/components/cms/ConfirmModal.d.vue.ts +0 -3
  87. package/dist/runtime/app/components/cms/ConfirmModal.vue +0 -46
  88. package/dist/runtime/app/components/cms/ConfirmModal.vue.d.ts +0 -3
  89. package/dist/runtime/app/components/cms/Drawer.d.vue.ts +0 -30
  90. package/dist/runtime/app/components/cms/Drawer.vue +0 -61
  91. package/dist/runtime/app/components/cms/Drawer.vue.d.ts +0 -30
  92. package/dist/runtime/app/components/cms/DropdownMenu.d.vue.ts +0 -26
  93. package/dist/runtime/app/components/cms/DropdownMenu.vue +0 -48
  94. package/dist/runtime/app/components/cms/DropdownMenu.vue.d.ts +0 -26
  95. package/dist/runtime/app/components/cms/EmptyState.d.vue.ts +0 -19
  96. package/dist/runtime/app/components/cms/EmptyState.vue +0 -21
  97. package/dist/runtime/app/components/cms/EmptyState.vue.d.ts +0 -19
  98. package/dist/runtime/app/components/cms/Form.d.vue.ts +0 -37
  99. package/dist/runtime/app/components/cms/Form.vue +0 -63
  100. package/dist/runtime/app/components/cms/Form.vue.d.ts +0 -37
  101. package/dist/runtime/app/components/cms/FormField.d.vue.ts +0 -22
  102. package/dist/runtime/app/components/cms/FormField.vue +0 -35
  103. package/dist/runtime/app/components/cms/FormField.vue.d.ts +0 -22
  104. package/dist/runtime/app/components/cms/Icon.d.vue.ts +0 -6
  105. package/dist/runtime/app/components/cms/Icon.vue +0 -23
  106. package/dist/runtime/app/components/cms/Icon.vue.d.ts +0 -6
  107. package/dist/runtime/app/components/cms/Input.d.vue.ts +0 -27
  108. package/dist/runtime/app/components/cms/Input.vue +0 -46
  109. package/dist/runtime/app/components/cms/Input.vue.d.ts +0 -27
  110. package/dist/runtime/app/components/cms/Modal.d.vue.ts +0 -31
  111. package/dist/runtime/app/components/cms/Modal.vue +0 -49
  112. package/dist/runtime/app/components/cms/Modal.vue.d.ts +0 -31
  113. package/dist/runtime/app/components/cms/PageHeader.d.vue.ts +0 -25
  114. package/dist/runtime/app/components/cms/PageHeader.vue +0 -36
  115. package/dist/runtime/app/components/cms/PageHeader.vue.d.ts +0 -25
  116. package/dist/runtime/app/components/cms/Pagination.d.vue.ts +0 -15
  117. package/dist/runtime/app/components/cms/Pagination.vue +0 -51
  118. package/dist/runtime/app/components/cms/Pagination.vue.d.ts +0 -15
  119. package/dist/runtime/app/components/cms/PasswordInput.d.vue.ts +0 -17
  120. package/dist/runtime/app/components/cms/PasswordInput.vue +0 -81
  121. package/dist/runtime/app/components/cms/PasswordInput.vue.d.ts +0 -17
  122. package/dist/runtime/app/components/cms/Popover.d.vue.ts +0 -22
  123. package/dist/runtime/app/components/cms/Popover.vue +0 -27
  124. package/dist/runtime/app/components/cms/Popover.vue.d.ts +0 -22
  125. package/dist/runtime/app/components/cms/Search.d.vue.ts +0 -7
  126. package/dist/runtime/app/components/cms/Search.vue +0 -347
  127. package/dist/runtime/app/components/cms/Search.vue.d.ts +0 -7
  128. package/dist/runtime/app/components/cms/SelectMenu.d.vue.ts +0 -25
  129. package/dist/runtime/app/components/cms/SelectMenu.vue +0 -152
  130. package/dist/runtime/app/components/cms/SelectMenu.vue.d.ts +0 -25
  131. package/dist/runtime/app/components/cms/Spinner.d.vue.ts +0 -3
  132. package/dist/runtime/app/components/cms/Spinner.vue +0 -5
  133. package/dist/runtime/app/components/cms/Spinner.vue.d.ts +0 -3
  134. package/dist/runtime/app/components/cms/Switch.d.vue.ts +0 -10
  135. package/dist/runtime/app/components/cms/Switch.vue +0 -14
  136. package/dist/runtime/app/components/cms/Switch.vue.d.ts +0 -10
  137. package/dist/runtime/app/components/cms/Table.d.vue.ts +0 -51
  138. package/dist/runtime/app/components/cms/Table.vue +0 -115
  139. package/dist/runtime/app/components/cms/Table.vue.d.ts +0 -51
  140. package/dist/runtime/app/components/cms/Textarea.d.vue.ts +0 -15
  141. package/dist/runtime/app/components/cms/Textarea.vue +0 -16
  142. package/dist/runtime/app/components/cms/Textarea.vue.d.ts +0 -15
  143. package/dist/runtime/app/components/cms/Toaster.d.vue.ts +0 -3
  144. package/dist/runtime/app/components/cms/Toaster.vue +0 -48
  145. package/dist/runtime/app/components/cms/Toaster.vue.d.ts +0 -3
  146. package/dist/runtime/app/composables/cms-overlay.d.ts +0 -4
  147. package/dist/runtime/app/composables/cms-overlay.js +0 -23
  148. package/dist/runtime/assets/svg/academic-cap.svg +0 -3
  149. package/dist/runtime/assets/svg/adjustments-horizontal.svg +0 -3
  150. package/dist/runtime/assets/svg/adjustments-vertical.svg +0 -3
  151. package/dist/runtime/assets/svg/archive-box-arrow-down.svg +0 -3
  152. package/dist/runtime/assets/svg/archive-box-x-mark.svg +0 -3
  153. package/dist/runtime/assets/svg/archive-box.svg +0 -3
  154. package/dist/runtime/assets/svg/arrow-down-circle.svg +0 -3
  155. package/dist/runtime/assets/svg/arrow-down-left.svg +0 -3
  156. package/dist/runtime/assets/svg/arrow-down-on-square-stack.svg +0 -3
  157. package/dist/runtime/assets/svg/arrow-down-on-square.svg +0 -3
  158. package/dist/runtime/assets/svg/arrow-down-right.svg +0 -3
  159. package/dist/runtime/assets/svg/arrow-down-tray.svg +0 -3
  160. package/dist/runtime/assets/svg/arrow-down.svg +0 -3
  161. package/dist/runtime/assets/svg/arrow-left-circle.svg +0 -3
  162. package/dist/runtime/assets/svg/arrow-left-end-on-rectangle.svg +0 -3
  163. package/dist/runtime/assets/svg/arrow-left-on-rectangle.svg +0 -3
  164. package/dist/runtime/assets/svg/arrow-left-start-on-rectangle.svg +0 -3
  165. package/dist/runtime/assets/svg/arrow-left.svg +0 -3
  166. package/dist/runtime/assets/svg/arrow-long-down.svg +0 -3
  167. package/dist/runtime/assets/svg/arrow-long-left.svg +0 -3
  168. package/dist/runtime/assets/svg/arrow-long-right.svg +0 -3
  169. package/dist/runtime/assets/svg/arrow-long-up.svg +0 -3
  170. package/dist/runtime/assets/svg/arrow-path-rounded-square.svg +0 -3
  171. package/dist/runtime/assets/svg/arrow-path.svg +0 -3
  172. package/dist/runtime/assets/svg/arrow-right-circle.svg +0 -3
  173. package/dist/runtime/assets/svg/arrow-right-end-on-rectangle.svg +0 -3
  174. package/dist/runtime/assets/svg/arrow-right-on-rectangle.svg +0 -3
  175. package/dist/runtime/assets/svg/arrow-right-start-on-rectangle.svg +0 -3
  176. package/dist/runtime/assets/svg/arrow-right.svg +0 -3
  177. package/dist/runtime/assets/svg/arrow-small-down.svg +0 -3
  178. package/dist/runtime/assets/svg/arrow-small-left.svg +0 -3
  179. package/dist/runtime/assets/svg/arrow-small-right.svg +0 -3
  180. package/dist/runtime/assets/svg/arrow-small-up.svg +0 -3
  181. package/dist/runtime/assets/svg/arrow-top-right-on-square.svg +0 -3
  182. package/dist/runtime/assets/svg/arrow-trending-down.svg +0 -3
  183. package/dist/runtime/assets/svg/arrow-trending-up.svg +0 -3
  184. package/dist/runtime/assets/svg/arrow-turn-down-left.svg +0 -3
  185. package/dist/runtime/assets/svg/arrow-turn-down-right.svg +0 -3
  186. package/dist/runtime/assets/svg/arrow-turn-left-down.svg +0 -3
  187. package/dist/runtime/assets/svg/arrow-turn-left-up.svg +0 -3
  188. package/dist/runtime/assets/svg/arrow-turn-right-down.svg +0 -3
  189. package/dist/runtime/assets/svg/arrow-turn-right-up.svg +0 -3
  190. package/dist/runtime/assets/svg/arrow-turn-up-left.svg +0 -3
  191. package/dist/runtime/assets/svg/arrow-turn-up-right.svg +0 -3
  192. package/dist/runtime/assets/svg/arrow-up-circle.svg +0 -3
  193. package/dist/runtime/assets/svg/arrow-up-left.svg +0 -3
  194. package/dist/runtime/assets/svg/arrow-up-on-square-stack.svg +0 -3
  195. package/dist/runtime/assets/svg/arrow-up-on-square.svg +0 -3
  196. package/dist/runtime/assets/svg/arrow-up-right.svg +0 -3
  197. package/dist/runtime/assets/svg/arrow-up-tray.svg +0 -3
  198. package/dist/runtime/assets/svg/arrow-up.svg +0 -3
  199. package/dist/runtime/assets/svg/arrow-uturn-down.svg +0 -3
  200. package/dist/runtime/assets/svg/arrow-uturn-left.svg +0 -3
  201. package/dist/runtime/assets/svg/arrow-uturn-right.svg +0 -3
  202. package/dist/runtime/assets/svg/arrow-uturn-up.svg +0 -3
  203. package/dist/runtime/assets/svg/arrows-pointing-in.svg +0 -3
  204. package/dist/runtime/assets/svg/arrows-pointing-out.svg +0 -3
  205. package/dist/runtime/assets/svg/arrows-right-left.svg +0 -3
  206. package/dist/runtime/assets/svg/arrows-up-down.svg +0 -3
  207. package/dist/runtime/assets/svg/at-symbol.svg +0 -3
  208. package/dist/runtime/assets/svg/backspace.svg +0 -3
  209. package/dist/runtime/assets/svg/backward.svg +0 -3
  210. package/dist/runtime/assets/svg/banknotes.svg +0 -3
  211. package/dist/runtime/assets/svg/bars-2.svg +0 -3
  212. package/dist/runtime/assets/svg/bars-3-bottom-left.svg +0 -3
  213. package/dist/runtime/assets/svg/bars-3-bottom-right.svg +0 -3
  214. package/dist/runtime/assets/svg/bars-3-center-left.svg +0 -3
  215. package/dist/runtime/assets/svg/bars-3.svg +0 -3
  216. package/dist/runtime/assets/svg/bars-4.svg +0 -3
  217. package/dist/runtime/assets/svg/bars-arrow-down.svg +0 -3
  218. package/dist/runtime/assets/svg/bars-arrow-up.svg +0 -3
  219. package/dist/runtime/assets/svg/battery-0.svg +0 -3
  220. package/dist/runtime/assets/svg/battery-100.svg +0 -3
  221. package/dist/runtime/assets/svg/battery-50.svg +0 -3
  222. package/dist/runtime/assets/svg/beaker.svg +0 -3
  223. package/dist/runtime/assets/svg/bell-alert.svg +0 -3
  224. package/dist/runtime/assets/svg/bell-slash.svg +0 -3
  225. package/dist/runtime/assets/svg/bell-snooze.svg +0 -3
  226. package/dist/runtime/assets/svg/bell.svg +0 -3
  227. package/dist/runtime/assets/svg/bold.svg +0 -3
  228. package/dist/runtime/assets/svg/bolt-slash.svg +0 -3
  229. package/dist/runtime/assets/svg/bolt.svg +0 -3
  230. package/dist/runtime/assets/svg/book-open.svg +0 -3
  231. package/dist/runtime/assets/svg/bookmark-slash.svg +0 -3
  232. package/dist/runtime/assets/svg/bookmark-square.svg +0 -3
  233. package/dist/runtime/assets/svg/bookmark.svg +0 -3
  234. package/dist/runtime/assets/svg/briefcase.svg +0 -3
  235. package/dist/runtime/assets/svg/bug-ant.svg +0 -3
  236. package/dist/runtime/assets/svg/building-library.svg +0 -3
  237. package/dist/runtime/assets/svg/building-office-2.svg +0 -3
  238. package/dist/runtime/assets/svg/building-office.svg +0 -3
  239. package/dist/runtime/assets/svg/building-storefront.svg +0 -3
  240. package/dist/runtime/assets/svg/cake.svg +0 -3
  241. package/dist/runtime/assets/svg/calculator.svg +0 -3
  242. package/dist/runtime/assets/svg/calendar-date-range.svg +0 -3
  243. package/dist/runtime/assets/svg/calendar-days.svg +0 -3
  244. package/dist/runtime/assets/svg/calendar.svg +0 -3
  245. package/dist/runtime/assets/svg/camera.svg +0 -4
  246. package/dist/runtime/assets/svg/chart-bar-square.svg +0 -3
  247. package/dist/runtime/assets/svg/chart-bar.svg +0 -3
  248. package/dist/runtime/assets/svg/chart-pie.svg +0 -4
  249. package/dist/runtime/assets/svg/chat-bubble-bottom-center-text.svg +0 -3
  250. package/dist/runtime/assets/svg/chat-bubble-bottom-center.svg +0 -3
  251. package/dist/runtime/assets/svg/chat-bubble-left-ellipsis.svg +0 -3
  252. package/dist/runtime/assets/svg/chat-bubble-left-right.svg +0 -3
  253. package/dist/runtime/assets/svg/chat-bubble-left.svg +0 -3
  254. package/dist/runtime/assets/svg/chat-bubble-oval-left-ellipsis.svg +0 -3
  255. package/dist/runtime/assets/svg/chat-bubble-oval-left.svg +0 -3
  256. package/dist/runtime/assets/svg/check-badge.svg +0 -3
  257. package/dist/runtime/assets/svg/check-circle.svg +0 -3
  258. package/dist/runtime/assets/svg/check.svg +0 -3
  259. package/dist/runtime/assets/svg/chevron-double-down.svg +0 -3
  260. package/dist/runtime/assets/svg/chevron-double-left.svg +0 -3
  261. package/dist/runtime/assets/svg/chevron-double-right.svg +0 -3
  262. package/dist/runtime/assets/svg/chevron-double-up.svg +0 -4
  263. package/dist/runtime/assets/svg/chevron-down.svg +0 -3
  264. package/dist/runtime/assets/svg/chevron-left.svg +0 -3
  265. package/dist/runtime/assets/svg/chevron-right.svg +0 -3
  266. package/dist/runtime/assets/svg/chevron-up-down.svg +0 -3
  267. package/dist/runtime/assets/svg/chevron-up.svg +0 -3
  268. package/dist/runtime/assets/svg/circle-stack.svg +0 -3
  269. package/dist/runtime/assets/svg/clipboard-document-check.svg +0 -3
  270. package/dist/runtime/assets/svg/clipboard-document-list.svg +0 -3
  271. package/dist/runtime/assets/svg/clipboard-document.svg +0 -3
  272. package/dist/runtime/assets/svg/clipboard.svg +0 -3
  273. package/dist/runtime/assets/svg/clock.svg +0 -3
  274. package/dist/runtime/assets/svg/cloud-arrow-down.svg +0 -3
  275. package/dist/runtime/assets/svg/cloud-arrow-up.svg +0 -3
  276. package/dist/runtime/assets/svg/cloud.svg +0 -3
  277. package/dist/runtime/assets/svg/code-bracket-square.svg +0 -3
  278. package/dist/runtime/assets/svg/code-bracket.svg +0 -3
  279. package/dist/runtime/assets/svg/cog-6-tooth.svg +0 -4
  280. package/dist/runtime/assets/svg/cog-8-tooth.svg +0 -4
  281. package/dist/runtime/assets/svg/cog.svg +0 -3
  282. package/dist/runtime/assets/svg/command-line.svg +0 -3
  283. package/dist/runtime/assets/svg/computer-desktop.svg +0 -3
  284. package/dist/runtime/assets/svg/cpu-chip.svg +0 -3
  285. package/dist/runtime/assets/svg/credit-card.svg +0 -3
  286. package/dist/runtime/assets/svg/cube-transparent.svg +0 -3
  287. package/dist/runtime/assets/svg/cube.svg +0 -3
  288. package/dist/runtime/assets/svg/currency-bangladeshi.svg +0 -3
  289. package/dist/runtime/assets/svg/currency-dollar.svg +0 -3
  290. package/dist/runtime/assets/svg/currency-euro.svg +0 -3
  291. package/dist/runtime/assets/svg/currency-pound.svg +0 -3
  292. package/dist/runtime/assets/svg/currency-rupee.svg +0 -3
  293. package/dist/runtime/assets/svg/currency-yen.svg +0 -3
  294. package/dist/runtime/assets/svg/cursor-arrow-rays.svg +0 -3
  295. package/dist/runtime/assets/svg/cursor-arrow-ripple.svg +0 -3
  296. package/dist/runtime/assets/svg/device-phone-mobile.svg +0 -3
  297. package/dist/runtime/assets/svg/device-tablet.svg +0 -3
  298. package/dist/runtime/assets/svg/divide.svg +0 -3
  299. package/dist/runtime/assets/svg/document-arrow-down.svg +0 -3
  300. package/dist/runtime/assets/svg/document-arrow-up.svg +0 -3
  301. package/dist/runtime/assets/svg/document-chart-bar.svg +0 -3
  302. package/dist/runtime/assets/svg/document-check.svg +0 -3
  303. package/dist/runtime/assets/svg/document-currency-bangladeshi.svg +0 -3
  304. package/dist/runtime/assets/svg/document-currency-dollar.svg +0 -3
  305. package/dist/runtime/assets/svg/document-currency-euro.svg +0 -3
  306. package/dist/runtime/assets/svg/document-currency-pound.svg +0 -3
  307. package/dist/runtime/assets/svg/document-currency-rupee.svg +0 -3
  308. package/dist/runtime/assets/svg/document-currency-yen.svg +0 -3
  309. package/dist/runtime/assets/svg/document-duplicate.svg +0 -3
  310. package/dist/runtime/assets/svg/document-magnifying-glass.svg +0 -3
  311. package/dist/runtime/assets/svg/document-minus.svg +0 -3
  312. package/dist/runtime/assets/svg/document-plus.svg +0 -3
  313. package/dist/runtime/assets/svg/document-text.svg +0 -3
  314. package/dist/runtime/assets/svg/document.svg +0 -3
  315. package/dist/runtime/assets/svg/ellipsis-horizontal-circle.svg +0 -3
  316. package/dist/runtime/assets/svg/ellipsis-horizontal.svg +0 -3
  317. package/dist/runtime/assets/svg/ellipsis-vertical.svg +0 -3
  318. package/dist/runtime/assets/svg/envelope-open.svg +0 -3
  319. package/dist/runtime/assets/svg/envelope.svg +0 -3
  320. package/dist/runtime/assets/svg/equals.svg +0 -3
  321. package/dist/runtime/assets/svg/exclamation-circle.svg +0 -3
  322. package/dist/runtime/assets/svg/exclamation-triangle.svg +0 -3
  323. package/dist/runtime/assets/svg/eye-dropper.svg +0 -3
  324. package/dist/runtime/assets/svg/eye-slash.svg +0 -3
  325. package/dist/runtime/assets/svg/eye.svg +0 -4
  326. package/dist/runtime/assets/svg/face-frown.svg +0 -3
  327. package/dist/runtime/assets/svg/face-smile.svg +0 -3
  328. package/dist/runtime/assets/svg/film.svg +0 -3
  329. package/dist/runtime/assets/svg/finger-print.svg +0 -3
  330. package/dist/runtime/assets/svg/fire.svg +0 -4
  331. package/dist/runtime/assets/svg/flag.svg +0 -3
  332. package/dist/runtime/assets/svg/folder-arrow-down.svg +0 -3
  333. package/dist/runtime/assets/svg/folder-minus.svg +0 -3
  334. package/dist/runtime/assets/svg/folder-open.svg +0 -3
  335. package/dist/runtime/assets/svg/folder-plus.svg +0 -3
  336. package/dist/runtime/assets/svg/folder.svg +0 -3
  337. package/dist/runtime/assets/svg/forward.svg +0 -3
  338. package/dist/runtime/assets/svg/funnel.svg +0 -3
  339. package/dist/runtime/assets/svg/gif.svg +0 -3
  340. package/dist/runtime/assets/svg/gift-top.svg +0 -3
  341. package/dist/runtime/assets/svg/gift.svg +0 -3
  342. package/dist/runtime/assets/svg/globe-alt.svg +0 -3
  343. package/dist/runtime/assets/svg/globe-americas.svg +0 -3
  344. package/dist/runtime/assets/svg/globe-asia-australia.svg +0 -3
  345. package/dist/runtime/assets/svg/globe-europe-africa.svg +0 -3
  346. package/dist/runtime/assets/svg/h1.svg +0 -3
  347. package/dist/runtime/assets/svg/h2.svg +0 -3
  348. package/dist/runtime/assets/svg/h3.svg +0 -3
  349. package/dist/runtime/assets/svg/hand-raised.svg +0 -3
  350. package/dist/runtime/assets/svg/hand-thumb-down.svg +0 -3
  351. package/dist/runtime/assets/svg/hand-thumb-up.svg +0 -3
  352. package/dist/runtime/assets/svg/hashtag.svg +0 -3
  353. package/dist/runtime/assets/svg/heart.svg +0 -3
  354. package/dist/runtime/assets/svg/home-modern.svg +0 -3
  355. package/dist/runtime/assets/svg/home.svg +0 -3
  356. package/dist/runtime/assets/svg/identification.svg +0 -3
  357. package/dist/runtime/assets/svg/inbox-arrow-down.svg +0 -3
  358. package/dist/runtime/assets/svg/inbox-stack.svg +0 -3
  359. package/dist/runtime/assets/svg/inbox.svg +0 -3
  360. package/dist/runtime/assets/svg/information-circle.svg +0 -3
  361. package/dist/runtime/assets/svg/italic.svg +0 -3
  362. package/dist/runtime/assets/svg/key.svg +0 -3
  363. package/dist/runtime/assets/svg/language.svg +0 -3
  364. package/dist/runtime/assets/svg/lifebuoy.svg +0 -3
  365. package/dist/runtime/assets/svg/light-bulb.svg +0 -3
  366. package/dist/runtime/assets/svg/link-slash.svg +0 -3
  367. package/dist/runtime/assets/svg/link.svg +0 -3
  368. package/dist/runtime/assets/svg/list-bullet.svg +0 -3
  369. package/dist/runtime/assets/svg/lock-closed.svg +0 -3
  370. package/dist/runtime/assets/svg/lock-open.svg +0 -3
  371. package/dist/runtime/assets/svg/magnifying-glass-circle.svg +0 -3
  372. package/dist/runtime/assets/svg/magnifying-glass-minus.svg +0 -3
  373. package/dist/runtime/assets/svg/magnifying-glass-plus.svg +0 -3
  374. package/dist/runtime/assets/svg/magnifying-glass.svg +0 -3
  375. package/dist/runtime/assets/svg/map-pin.svg +0 -4
  376. package/dist/runtime/assets/svg/map.svg +0 -3
  377. package/dist/runtime/assets/svg/megaphone.svg +0 -3
  378. package/dist/runtime/assets/svg/microphone.svg +0 -3
  379. package/dist/runtime/assets/svg/minus-circle.svg +0 -3
  380. package/dist/runtime/assets/svg/minus-small.svg +0 -3
  381. package/dist/runtime/assets/svg/minus.svg +0 -3
  382. package/dist/runtime/assets/svg/moon.svg +0 -3
  383. package/dist/runtime/assets/svg/musical-note.svg +0 -3
  384. package/dist/runtime/assets/svg/newspaper.svg +0 -3
  385. package/dist/runtime/assets/svg/no-symbol.svg +0 -3
  386. package/dist/runtime/assets/svg/numbered-list.svg +0 -3
  387. package/dist/runtime/assets/svg/paint-brush.svg +0 -3
  388. package/dist/runtime/assets/svg/paper-airplane.svg +0 -3
  389. package/dist/runtime/assets/svg/paper-clip.svg +0 -3
  390. package/dist/runtime/assets/svg/pause-circle.svg +0 -3
  391. package/dist/runtime/assets/svg/pause.svg +0 -3
  392. package/dist/runtime/assets/svg/pencil-square.svg +0 -3
  393. package/dist/runtime/assets/svg/pencil.svg +0 -3
  394. package/dist/runtime/assets/svg/percent-badge.svg +0 -3
  395. package/dist/runtime/assets/svg/phone-arrow-down-left.svg +0 -3
  396. package/dist/runtime/assets/svg/phone-arrow-up-right.svg +0 -3
  397. package/dist/runtime/assets/svg/phone-x-mark.svg +0 -3
  398. package/dist/runtime/assets/svg/phone.svg +0 -3
  399. package/dist/runtime/assets/svg/photo.svg +0 -3
  400. package/dist/runtime/assets/svg/play-circle.svg +0 -4
  401. package/dist/runtime/assets/svg/play-pause.svg +0 -3
  402. package/dist/runtime/assets/svg/play.svg +0 -3
  403. package/dist/runtime/assets/svg/plus-circle.svg +0 -3
  404. package/dist/runtime/assets/svg/plus-small.svg +0 -3
  405. package/dist/runtime/assets/svg/plus.svg +0 -3
  406. package/dist/runtime/assets/svg/power.svg +0 -3
  407. package/dist/runtime/assets/svg/presentation-chart-bar.svg +0 -3
  408. package/dist/runtime/assets/svg/presentation-chart-line.svg +0 -3
  409. package/dist/runtime/assets/svg/printer.svg +0 -3
  410. package/dist/runtime/assets/svg/puzzle-piece.svg +0 -3
  411. package/dist/runtime/assets/svg/qr-code.svg +0 -4
  412. package/dist/runtime/assets/svg/question-mark-circle.svg +0 -3
  413. package/dist/runtime/assets/svg/queue-list.svg +0 -3
  414. package/dist/runtime/assets/svg/radio.svg +0 -3
  415. package/dist/runtime/assets/svg/receipt-percent.svg +0 -3
  416. package/dist/runtime/assets/svg/receipt-refund.svg +0 -3
  417. package/dist/runtime/assets/svg/rectangle-group.svg +0 -3
  418. package/dist/runtime/assets/svg/rectangle-stack.svg +0 -3
  419. package/dist/runtime/assets/svg/rocket-launch.svg +0 -3
  420. package/dist/runtime/assets/svg/rss.svg +0 -3
  421. package/dist/runtime/assets/svg/scale.svg +0 -3
  422. package/dist/runtime/assets/svg/scissors.svg +0 -3
  423. package/dist/runtime/assets/svg/server-stack.svg +0 -3
  424. package/dist/runtime/assets/svg/server.svg +0 -3
  425. package/dist/runtime/assets/svg/share.svg +0 -3
  426. package/dist/runtime/assets/svg/shield-check.svg +0 -3
  427. package/dist/runtime/assets/svg/shield-exclamation.svg +0 -3
  428. package/dist/runtime/assets/svg/shopping-bag.svg +0 -3
  429. package/dist/runtime/assets/svg/shopping-cart.svg +0 -3
  430. package/dist/runtime/assets/svg/signal-slash.svg +0 -3
  431. package/dist/runtime/assets/svg/signal.svg +0 -3
  432. package/dist/runtime/assets/svg/slash.svg +0 -3
  433. package/dist/runtime/assets/svg/sparkles.svg +0 -3
  434. package/dist/runtime/assets/svg/speaker-wave.svg +0 -3
  435. package/dist/runtime/assets/svg/speaker-x-mark.svg +0 -3
  436. package/dist/runtime/assets/svg/square-2-stack.svg +0 -3
  437. package/dist/runtime/assets/svg/square-3-stack-3d.svg +0 -3
  438. package/dist/runtime/assets/svg/squares-2x2.svg +0 -3
  439. package/dist/runtime/assets/svg/squares-plus.svg +0 -3
  440. package/dist/runtime/assets/svg/star.svg +0 -3
  441. package/dist/runtime/assets/svg/stop-circle.svg +0 -4
  442. package/dist/runtime/assets/svg/stop.svg +0 -3
  443. package/dist/runtime/assets/svg/strikethrough.svg +0 -3
  444. package/dist/runtime/assets/svg/sun.svg +0 -3
  445. package/dist/runtime/assets/svg/swatch.svg +0 -3
  446. package/dist/runtime/assets/svg/table-cells.svg +0 -3
  447. package/dist/runtime/assets/svg/tag.svg +0 -4
  448. package/dist/runtime/assets/svg/ticket.svg +0 -3
  449. package/dist/runtime/assets/svg/trash.svg +0 -3
  450. package/dist/runtime/assets/svg/trophy.svg +0 -3
  451. package/dist/runtime/assets/svg/truck.svg +0 -3
  452. package/dist/runtime/assets/svg/tv.svg +0 -3
  453. package/dist/runtime/assets/svg/underline.svg +0 -3
  454. package/dist/runtime/assets/svg/user-circle.svg +0 -3
  455. package/dist/runtime/assets/svg/user-group.svg +0 -3
  456. package/dist/runtime/assets/svg/user-minus.svg +0 -3
  457. package/dist/runtime/assets/svg/user-plus.svg +0 -3
  458. package/dist/runtime/assets/svg/user.svg +0 -3
  459. package/dist/runtime/assets/svg/users.svg +0 -3
  460. package/dist/runtime/assets/svg/variable.svg +0 -3
  461. package/dist/runtime/assets/svg/video-camera-slash.svg +0 -3
  462. package/dist/runtime/assets/svg/video-camera.svg +0 -3
  463. package/dist/runtime/assets/svg/view-columns.svg +0 -3
  464. package/dist/runtime/assets/svg/viewfinder-circle.svg +0 -3
  465. package/dist/runtime/assets/svg/wallet.svg +0 -3
  466. package/dist/runtime/assets/svg/wifi.svg +0 -3
  467. package/dist/runtime/assets/svg/window.svg +0 -3
  468. package/dist/runtime/assets/svg/wrench-screwdriver.svg +0 -3
  469. package/dist/runtime/assets/svg/wrench.svg +0 -4
  470. package/dist/runtime/assets/svg/x-circle.svg +0 -3
  471. package/dist/runtime/assets/svg/x-mark.svg +0 -3
@@ -1,73 +1,94 @@
1
1
  <template>
2
- <CmsDrawer :open="!!item" :title="item ? mediaFilename(item.key) : ''" @close="emit('close')">
3
- <div v-if="item" class="cms-media-detail">
2
+ <KDrawer
3
+ :open="!!item"
4
+ :title="shown ? mediaFilename(shown.key) : ''"
5
+ size="lg"
6
+ @update:open="(value) => !value && emit('close')"
7
+ >
8
+ <div v-if="shown" class="cms-media-detail">
4
9
  <div class="cms-media-detail-preview">
5
- <img v-if="item.type === 'image' && item.url" :src="item.url" :alt="item.alt ?? ''" />
10
+ <img
11
+ v-if="shown.type === 'image' && shown.url"
12
+ :src="shown.url"
13
+ :alt="shown.alt ?? ''"
14
+ />
6
15
  <video
7
- v-else-if="item.type === 'video' && item.url"
8
- :src="item.url"
16
+ v-else-if="shown.type === 'video' && shown.url"
17
+ :src="shown.url"
9
18
  controls
10
19
  preload="metadata"
11
20
  playsinline
12
21
  />
13
- <CmsIcon v-else :name="mediaIconFor(item.type)" class="size-12" />
22
+ <KIcon v-else :name="cmsIcon(mediaIconFor(shown.type))" />
14
23
  </div>
15
24
 
16
- <div class="cms-actions">
17
- <template v-if="item.url">
18
- <CmsButton
19
- :label="copied ? 'Copied' : 'Copy URL'"
20
- :icon="copied ? 'check' : 'clipboard-document'"
25
+ <KStack direction="row" gap="sm" align="center" wrap>
26
+ <template v-if="absoluteUrl">
27
+ <KCopyButton
28
+ :value="absoluteUrl"
29
+ label="Copy URL"
30
+ copied-label="Copied"
31
+ show-label
21
32
  variant="soft"
22
- color="neutral"
33
+ tone="neutral"
23
34
  size="sm"
24
- @click="copyUrl"
25
35
  />
26
- <a
27
- :href="item.url"
36
+ <KButton
37
+ :href="shown.url ?? void 0"
28
38
  target="_blank"
29
- rel="noopener"
30
- class="cms-btn cms-btn-sm cms-btn-neutral cms-btn-ghost"
31
- >
32
- <CmsIcon name="arrow-top-right-on-square" class="size-4 shrink-0" />Open
33
- </a>
39
+ label="Open"
40
+ :icon="cmsIcon('arrow-top-right-on-square')"
41
+ variant="ghost"
42
+ tone="neutral"
43
+ size="sm"
44
+ />
34
45
  </template>
35
- <a
46
+ <KButton
36
47
  :href="downloadHref"
37
48
  download
38
- class="cms-btn cms-btn-sm cms-btn-neutral cms-btn-ghost"
39
- >
40
- <CmsIcon name="arrow-down-tray" class="size-4 shrink-0" />Download
41
- </a>
42
- </div>
49
+ label="Download"
50
+ :icon="cmsIcon('arrow-down-tray')"
51
+ variant="ghost"
52
+ tone="neutral"
53
+ size="sm"
54
+ />
55
+ </KStack>
43
56
 
44
- <dl class="cms-media-detail-facts">
45
- <template v-for="fact in facts" :key="fact.label">
46
- <dt>{{ fact.label }}</dt>
47
- <dd :class="{ 'is-mono': fact.mono }" :title="fact.value">{{ fact.value }}</dd>
48
- </template>
49
- </dl>
57
+ <div class="cms-media-detail-facts">
58
+ <KDescriptionList :items="facts">
59
+ <template #value="{ item: fact }">
60
+ <span
61
+ class="cms-media-detail-fact"
62
+ :class="{ 'k-mono': fact.key === 'key' }"
63
+ :title="fact.value == null ? void 0 : String(fact.value)"
64
+ >{{ fact.value }}</span
65
+ >
66
+ </template>
67
+ </KDescriptionList>
68
+ </div>
50
69
 
51
- <div class="cms-form">
52
- <CmsFormField label="Alt text">
53
- <CmsInput
70
+ <KStack gap="md">
71
+ <KFormField label="Alt text">
72
+ <KInput
54
73
  v-model="alt"
55
74
  placeholder="Describe the image for screen readers"
56
75
  @keydown.enter.prevent="save"
57
76
  />
58
- </CmsFormField>
59
- <CmsFormField v-if="!readOnly" label="Folder">
77
+ </KFormField>
78
+ <KFormField v-if="!readOnly" label="Folder">
60
79
  <CmsMediaFolderPicker v-model="folder" :folders="folders" />
61
- </CmsFormField>
62
- </div>
80
+ </KFormField>
81
+ </KStack>
63
82
 
64
83
  <section class="cms-media-detail-usage">
65
84
  <h3 class="cms-media-section-title">Used in</h3>
66
- <CmsSpinner v-if="usageLoading" />
67
- <p v-else-if="usageList === null" class="cms-form-hint">
85
+ <div v-if="usageLoading" class="cms-media-loading">
86
+ <KSpinner size="sm" />
87
+ </div>
88
+ <p v-else-if="usageList === null" class="cms-media-hint">
68
89
  Could not check where this file is used.
69
90
  </p>
70
- <p v-else-if="!usageList.length" class="cms-form-hint">Not used in any entry.</p>
91
+ <p v-else-if="!usageList.length" class="cms-media-hint">Not used in any entry.</p>
71
92
  <ul v-else class="cms-media-usage-list">
72
93
  <li v-for="(entry, index) in usageList" :key="index">
73
94
  <NuxtLink
@@ -84,27 +105,39 @@
84
105
  </div>
85
106
 
86
107
  <template #footer>
87
- <CmsButton
108
+ <KButton
88
109
  v-if="!readOnly"
89
110
  label="Delete"
90
- icon="trash"
111
+ :icon="cmsIcon('trash')"
91
112
  variant="ghost"
92
- color="error"
113
+ tone="danger"
93
114
  @click="item && emit('delete', item)"
94
115
  />
95
116
  <span v-else />
96
- <div class="cms-actions">
97
- <CmsButton label="Close" variant="ghost" color="neutral" @click="emit('close')" />
98
- <CmsButton label="Save" :loading="saving" :disabled="!dirty" @click="save" />
99
- </div>
117
+ <KStack direction="row" gap="sm" align="center">
118
+ <KButton label="Close" variant="ghost" tone="neutral" @click="emit('close')" />
119
+ <KButton label="Save" :loading="saving" :disabled="!dirty" @click="save" />
120
+ </KStack>
100
121
  </template>
101
- </CmsDrawer>
122
+ </KDrawer>
102
123
  </template>
103
124
 
104
125
  <script setup>
105
- import { computed, ref, watch } from "#imports";
126
+ import { computed, ref, useRequestURL, watch } from "#imports";
127
+ import {
128
+ Button as KButton,
129
+ CopyButton as KCopyButton,
130
+ DescriptionList as KDescriptionList,
131
+ Drawer as KDrawer,
132
+ FormField as KFormField,
133
+ Icon as KIcon,
134
+ Input as KInput,
135
+ Spinner as KSpinner,
136
+ Stack as KStack
137
+ } from "@xleddyl/443-components-vue";
106
138
  import { formatFileSize, mediaFilename, mediaIconFor } from "#nuxt-cms";
107
139
  import { usageLink } from "../../composables/cms-media-library";
140
+ import { cmsIcon } from "../../utils/ui";
108
141
  const props = defineProps({
109
142
  item: { type: [Object, null], required: true },
110
143
  library: { type: null, required: true },
@@ -115,16 +148,23 @@ const folders = computed(() => props.library.folders.value);
115
148
  const alt = ref("");
116
149
  const folder = ref(null);
117
150
  const saving = ref(false);
118
- const copied = ref(false);
119
151
  const usageList = ref([]);
120
152
  const usageLoading = ref(false);
153
+ const requestUrl = useRequestURL();
154
+ const lastItem = ref(props.item);
155
+ watch(
156
+ () => props.item,
157
+ (value) => {
158
+ if (value) lastItem.value = value;
159
+ }
160
+ );
161
+ const shown = computed(() => props.item ?? lastItem.value);
121
162
  watch(
122
163
  () => props.item?.key,
123
164
  async (key) => {
124
165
  if (!props.item || !key) return;
125
166
  alt.value = props.item.alt ?? "";
126
167
  folder.value = props.item.folder ?? null;
127
- copied.value = false;
128
168
  usageLoading.value = true;
129
169
  const usage = await props.library.usage([key]);
130
170
  if (props.item?.key !== key) return;
@@ -138,36 +178,34 @@ const dirty = computed(() => {
138
178
  return (alt.value.trim() || null) !== (props.item.alt ?? null) || !props.readOnly && folder.value !== (props.item.folder ?? null);
139
179
  });
140
180
  const downloadHref = computed(
141
- () => props.item ? `/api/cms/admin/media/download?key=${encodeURIComponent(props.item.key)}` : ""
181
+ () => shown.value ? `/api/cms/admin/media/download?key=${encodeURIComponent(shown.value.key)}` : ""
182
+ );
183
+ const absoluteUrl = computed(
184
+ () => shown.value?.url ? new URL(shown.value.url, requestUrl.origin).toString() : null
142
185
  );
143
186
  const facts = computed(() => {
144
- const item = props.item;
187
+ const item = shown.value;
145
188
  if (!item) return [];
146
189
  const list = [
147
- { label: "Folder", value: item.folder ?? "Library root" },
148
- { label: "Type", value: item.mime ?? item.type }
190
+ { key: "folder", label: "Folder", value: item.folder ?? "Library root" },
191
+ { key: "type", label: "Type", value: item.mime ?? item.type }
149
192
  ];
150
- if (item.size != null) list.push({ label: "Size", value: formatFileSize(item.size) });
193
+ if (item.size != null) {
194
+ list.push({ key: "size", label: "Size", value: formatFileSize(item.size) });
195
+ }
151
196
  if (item.width && item.height) {
152
- list.push({ label: "Dimensions", value: `${item.width} \xD7 ${item.height}` });
197
+ list.push({ key: "dimensions", label: "Dimensions", value: `${item.width} \xD7 ${item.height}` });
153
198
  }
154
199
  if (item.createdAt) {
155
- list.push({ label: "Uploaded", value: new Date(item.createdAt).toLocaleString() });
200
+ list.push({
201
+ key: "uploaded",
202
+ label: "Uploaded",
203
+ value: new Date(item.createdAt).toLocaleString()
204
+ });
156
205
  }
157
- list.push({ label: "Key", value: item.key, mono: true });
206
+ list.push({ key: "key", label: "Key", value: item.key });
158
207
  return list;
159
208
  });
160
- async function copyUrl() {
161
- if (!props.item?.url) return;
162
- const url = new URL(props.item.url, window.location.origin).toString();
163
- try {
164
- await navigator.clipboard.writeText(url);
165
- copied.value = true;
166
- setTimeout(() => copied.value = false, 1500);
167
- } catch {
168
- copied.value = false;
169
- }
170
- }
171
209
  async function save() {
172
210
  if (!props.item || !dirty.value || saving.value) return;
173
211
  saving.value = true;
@@ -1,12 +1,14 @@
1
1
  <template>
2
- <div
2
+ <KCard
3
3
  v-if="model"
4
- class="cms-card cms-block-tile cms-media-single"
4
+ variant="outline"
5
+ padding="none"
6
+ class="cms-media-single"
5
7
  :class="{ 'is-missing': missing }"
6
8
  >
7
9
  <button
8
10
  type="button"
9
- class="cms-block-preview"
11
+ class="cms-media-single-preview"
10
12
  aria-label="Replace media"
11
13
  @click="openGallery"
12
14
  >
@@ -18,59 +20,65 @@
18
20
  muted
19
21
  playsinline
20
22
  />
21
- <CmsIcon v-else :name="icon" class="size-7" />
23
+ <KIcon v-else :name="cmsIcon(icon)" />
22
24
  </button>
23
- <div class="cms-block-bar">
24
- <span class="cms-block-bar-name" :title="model">{{ mediaFilename(model) }}</span>
25
- <div class="cms-block-bar-actions">
26
- <CmsButton
27
- icon="arrow-path"
25
+ <div class="cms-media-single-bar">
26
+ <span class="cms-media-single-name" :title="model">{{ mediaFilename(model) }}</span>
27
+ <KStack direction="row" gap="none" align="center">
28
+ <KButton
29
+ :icon="cmsIcon('arrow-path')"
28
30
  size="xs"
29
31
  variant="ghost"
30
- color="neutral"
32
+ tone="neutral"
31
33
  aria-label="Replace"
32
34
  @click="openGallery"
33
35
  />
34
- <CmsButton
35
- icon="trash"
36
+ <KButton
37
+ :icon="cmsIcon('trash')"
36
38
  size="xs"
37
39
  variant="ghost"
38
- color="error"
40
+ tone="danger"
39
41
  aria-label="Remove"
40
42
  @click="clear"
41
43
  />
42
- </div>
44
+ </KStack>
43
45
  </div>
44
- </div>
46
+ </KCard>
45
47
 
46
- <button v-else type="button" class="cms-block-add cms-media-single" @click="openGallery">
47
- <CmsIcon name="photo" class="size-5" />
48
+ <button v-else type="button" class="cms-media-single-add" @click="openGallery">
49
+ <KIcon :name="cmsIcon('photo')" />
48
50
  <span>Choose</span>
49
51
  </button>
50
52
 
51
53
  <p v-if="missing" class="cms-media-missing">
52
- <CmsIcon name="exclamation-triangle" class="size-4" />
54
+ <KIcon :name="cmsIcon('exclamation-triangle')" />
53
55
  <span>Not found in the media library</span>
54
56
  </p>
55
57
 
56
- <CmsModal v-model:open="galleryOpen" title="Media" size="lg">
57
- <template #body>
58
- <CmsMediaGallery
59
- v-model:folder="pickerFolder"
60
- selectable
61
- :media-type="mediaType"
62
- :accept="accept"
63
- @select="onSelect"
64
- />
65
- </template>
66
- </CmsModal>
58
+ <KModal v-model:open="galleryOpen" title="Media" size="lg">
59
+ <CmsMediaGallery
60
+ v-model:folder="pickerFolder"
61
+ selectable
62
+ :media-type="mediaType"
63
+ :accept="accept"
64
+ @select="onSelect"
65
+ />
66
+ </KModal>
67
67
  </template>
68
68
 
69
69
  <script setup>
70
70
  import { computed, ref, useState } from "#imports";
71
+ import {
72
+ Button as KButton,
73
+ Card as KCard,
74
+ Icon as KIcon,
75
+ Modal as KModal,
76
+ Stack as KStack
77
+ } from "@xleddyl/443-components-vue";
71
78
  import { mediaFilename, mediaIconFor, mediaPublicUrl, mediaTypeForKey } from "#nuxt-cms";
72
79
  import { useCmsMediaKeys } from "../../composables/cms-media-keys";
73
80
  import { useCmsRuntime } from "../../composables/cms-runtime";
81
+ import { cmsIcon } from "../../utils/ui";
74
82
  defineProps({
75
83
  mediaType: { type: null, required: false },
76
84
  accept: { type: Array, required: false }
@@ -1,6 +1,7 @@
1
1
  type __VLS_Props = {
2
2
  folders: string[];
3
3
  exclude?: string | null;
4
+ label?: string;
4
5
  };
5
6
  type __VLS_ModelProps = {
6
7
  modelValue?: string | null;
@@ -1,64 +1,92 @@
1
1
  <template>
2
- <div class="cms-folder-picker">
3
- <CmsInput
4
- v-if="folders.length > 8"
5
- v-model="query"
6
- size="sm"
7
- icon="magnifying-glass"
8
- placeholder="Find a folder…"
9
- />
10
- <div class="cms-folder-picker-list" role="listbox">
11
- <button
12
- v-if="!query"
13
- type="button"
14
- role="option"
15
- class="cms-folder-picker-row"
16
- :class="{ 'is-active': model === null }"
17
- :aria-selected="model === null"
18
- :disabled="isDisabled(null)"
19
- @click="model = null"
20
- >
21
- <CmsIcon name="home" class="size-4" />
22
- <span class="truncate">Library root</span>
23
- <CmsIcon v-if="model === null" name="check" class="cms-folder-picker-check size-4" />
24
- </button>
25
- <button
26
- v-for="folder in visible"
27
- :key="folder"
28
- type="button"
29
- role="option"
30
- class="cms-folder-picker-row"
31
- :class="{ 'is-active': model === folder }"
32
- :style="
33
- query ? void 0 : { paddingLeft: `${0.625 + mediaFolderDepth(folder) * 1}rem` }
34
- "
35
- :aria-selected="model === folder"
36
- :disabled="isDisabled(folder)"
37
- @click="model = folder"
38
- >
39
- <CmsIcon :name="model === folder ? 'folder-open' : 'folder'" class="size-4" />
40
- <span class="truncate">{{ query ? folder : mediaFolderName(folder) }}</span>
41
- <CmsIcon v-if="model === folder" name="check" class="cms-folder-picker-check size-4" />
42
- </button>
43
- <p v-if="query && !visible.length" class="cms-folder-picker-empty">No matching folders</p>
2
+ <div class="cms-media-folder-picker">
3
+ <KFieldBoundary v-if="folders.length > 8" auxiliary>
4
+ <KInput
5
+ v-model="query"
6
+ size="sm"
7
+ :icon="cmsIcon('magnifying-glass')"
8
+ placeholder="Find a folder…"
9
+ aria-label="Find a folder"
10
+ clearable
11
+ />
12
+ </KFieldBoundary>
13
+ <div class="cms-media-folder-picker-list">
14
+ <KTree
15
+ v-model:selected="selected"
16
+ v-model:expanded="expanded"
17
+ :nodes="nodes"
18
+ :bordered="false"
19
+ :label="label"
20
+ size="sm"
21
+ checkmark
22
+ empty-text="No matching folders"
23
+ />
44
24
  </div>
45
25
  </div>
46
26
  </template>
47
27
 
48
28
  <script setup>
49
29
  import { computed, ref } from "#imports";
50
- import { isWithinMediaFolder, mediaFolderDepth, mediaFolderName } from "#nuxt-cms";
30
+ import {
31
+ FieldBoundary as KFieldBoundary,
32
+ Input as KInput,
33
+ Tree as KTree
34
+ } from "@xleddyl/443-components-vue";
35
+ import { isWithinMediaFolder, mediaFolderName, mediaFolderParent } from "#nuxt-cms";
36
+ import { cmsIcon } from "../../utils/ui";
37
+ const ROOT_ID = ":root";
51
38
  const props = defineProps({
52
39
  folders: { type: Array, required: true },
53
- exclude: { type: [String, null], required: false }
40
+ exclude: { type: [String, null], required: false },
41
+ label: { type: String, required: false }
54
42
  });
55
43
  const model = defineModel({ type: [String, null], ...{ default: null } });
56
44
  const query = ref("");
57
- const visible = computed(() => {
58
- const term = query.value.trim().toLowerCase();
59
- return term ? props.folders.filter((folder) => folder.includes(term)) : props.folders;
60
- });
45
+ const term = computed(() => query.value.trim().toLowerCase());
46
+ const visible = computed(
47
+ () => term.value ? props.folders.filter((folder) => folder.includes(term.value)) : props.folders
48
+ );
61
49
  function isDisabled(folder) {
62
- return !!props.exclude && !!folder && isWithinMediaFolder(folder, props.exclude);
50
+ return !!props.exclude && isWithinMediaFolder(folder, props.exclude);
51
+ }
52
+ function folderNode(folder, label, children) {
53
+ return {
54
+ id: folder,
55
+ label,
56
+ icon: cmsIcon(model.value === folder ? "folder-open" : "folder"),
57
+ disabled: isDisabled(folder),
58
+ children: children?.length ? children : void 0
59
+ };
63
60
  }
61
+ const nodes = computed(() => {
62
+ if (term.value) return visible.value.map((folder) => folderNode(folder, folder));
63
+ const build = (parent) => props.folders.filter((folder) => mediaFolderParent(folder) === parent).map((folder) => folderNode(folder, mediaFolderName(folder), build(folder)));
64
+ return [{ id: ROOT_ID, label: "Library root", icon: cmsIcon("home"), children: build(null) }];
65
+ });
66
+ const parentIds = computed(() => {
67
+ const ids = [];
68
+ const walk = (list) => {
69
+ for (const node of list) {
70
+ if (!node.children) continue;
71
+ ids.push(node.id);
72
+ walk(node.children);
73
+ }
74
+ };
75
+ walk(nodes.value);
76
+ return ids;
77
+ });
78
+ const collapsed = ref([]);
79
+ const expanded = computed({
80
+ get: () => parentIds.value.filter((id) => !collapsed.value.includes(id)),
81
+ set: (ids) => {
82
+ collapsed.value = parentIds.value.filter((id) => !ids.includes(id));
83
+ }
84
+ });
85
+ const selected = computed({
86
+ get: () => model.value === null ? ROOT_ID : model.value,
87
+ set: (id) => {
88
+ if (id === null) return;
89
+ model.value = id === ROOT_ID ? null : String(id);
90
+ }
91
+ });
64
92
  </script>
@@ -1,6 +1,7 @@
1
1
  type __VLS_Props = {
2
2
  folders: string[];
3
3
  exclude?: string | null;
4
+ label?: string;
4
5
  };
5
6
  type __VLS_ModelProps = {
6
7
  modelValue?: string | null;