@xleddyl/nuxt-cms 0.4.4 → 0.5.1

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,214 +1,175 @@
1
1
  <template>
2
- <CmsEmptyState
2
+ <KEmptyState
3
3
  v-if="notConfigured"
4
- icon="bolt"
4
+ :icon="cmsIcon('bolt')"
5
5
  title="Media storage not configured"
6
- body="Set cms.media in nuxt.config to enable uploads."
6
+ description="Set cms.media in nuxt.config to enable uploads."
7
7
  />
8
8
 
9
- <div
10
- v-else
11
- class="cms-media-gallery"
12
- :class="{ 'is-compact': selectable }"
13
- @dragenter="onGalleryDragEnter"
14
- @dragover="onGalleryDragOver"
15
- @dragleave="onGalleryDragLeave"
16
- @drop="onGalleryDrop"
17
- >
9
+ <div v-else ref="gallery" class="cms-media-gallery" :class="{ 'is-compact': selectable }">
18
10
  <div class="cms-media-toolbar">
19
- <CmsInput
11
+ <KInput
20
12
  v-model="search"
21
- icon="magnifying-glass"
13
+ :icon="cmsIcon('magnifying-glass')"
22
14
  :placeholder="
23
15
  folder && !searchEverywhere ? `Search in ${mediaFolderName(folder)}\u2026` : 'Search media\u2026'
24
16
  "
17
+ aria-label="Search media"
18
+ clearable
19
+ clear-label="Clear search"
25
20
  class="cms-media-search"
26
- >
27
- <template v-if="search" #trailing>
28
- <button
29
- type="button"
30
- class="cms-media-search-clear"
31
- aria-label="Clear search"
32
- @click="search = ''"
33
- >
34
- <CmsIcon name="x-mark" class="size-4" />
35
- </button>
36
- </template>
37
- </CmsInput>
38
- <div class="cms-media-toolbar-actions">
39
- <CmsDropdownMenu :items="sortItems" :content="{ align: 'end' }">
40
- <CmsButton
21
+ />
22
+ <KStack direction="row" gap="sm" align="center" wrap>
23
+ <KDropdownMenu :items="sortItems" placement="bottom-end" label="Sort by">
24
+ <KButton
41
25
  :label="sortLabels[activeSort]"
42
- icon="arrows-up-down"
26
+ :icon="cmsIcon('arrows-up-down')"
43
27
  variant="ghost"
44
- color="neutral"
45
- size="sm"
46
- />
47
- </CmsDropdownMenu>
48
- <div class="cms-media-view-toggle" role="group" aria-label="View">
49
- <CmsButton
50
- icon="squares-2x2"
28
+ tone="neutral"
51
29
  size="sm"
52
- :variant="view === 'grid' ? 'soft' : 'ghost'"
53
- color="neutral"
54
- aria-label="Grid view"
55
- @click="view = 'grid'"
56
30
  />
57
- <CmsButton
58
- icon="list-bullet"
59
- size="sm"
60
- :variant="view === 'list' ? 'soft' : 'ghost'"
61
- color="neutral"
62
- aria-label="List view"
63
- @click="view = 'list'"
64
- />
65
- </div>
31
+ </KDropdownMenu>
32
+ <KSegmentedControl
33
+ v-model="view"
34
+ :options="viewOptions"
35
+ required
36
+ icon-only
37
+ size="sm"
38
+ aria-label="View"
39
+ />
66
40
  <template v-if="canUpload">
67
- <CmsButton
41
+ <KButton
68
42
  label="New folder"
69
- icon="folder-plus"
43
+ :icon="cmsIcon('folder-plus')"
70
44
  variant="soft"
71
45
  size="sm"
72
46
  :disabled="!canNest"
73
47
  @click="openNewFolder"
74
48
  />
75
- <CmsButton
49
+ <KButton
76
50
  label="Upload"
77
- icon="cloud-arrow-up"
51
+ :icon="cmsIcon('cloud-arrow-up')"
78
52
  size="sm"
79
53
  @click="uploadOpen = true"
80
54
  />
81
55
  </template>
82
- </div>
56
+ </KStack>
83
57
  </div>
84
58
 
85
59
  <p v-if="sourceHint" class="cms-media-source">{{ sourceHint }}</p>
86
60
 
87
61
  <div class="cms-media-nav">
88
- <nav class="cms-media-crumbs" aria-label="Folder">
89
- <template v-for="(crumb, index) in crumbs" :key="crumb.folder ?? ''">
90
- <CmsIcon v-if="index" name="chevron-right" class="cms-breadcrumb-separator size-3" />
91
- <button
92
- type="button"
93
- class="cms-media-crumb"
94
- :class="{
95
- 'is-current': crumb.folder === folder,
96
- 'is-drop': dropTarget === targetId(crumb.folder)
97
- }"
98
- :aria-current="crumb.folder === folder ? 'page' : void 0"
99
- @click="openFolder(crumb.folder)"
100
- @dragover="onTargetDragOver($event, crumb.folder)"
101
- @dragleave="onTargetDragLeave(crumb.folder)"
102
- @drop="onTargetDrop($event, crumb.folder)"
103
- >
104
- <CmsIcon v-if="!crumb.folder" name="home" class="size-3.5" />
105
- {{ crumb.label }}
106
- </button>
107
- </template>
108
- </nav>
109
- <div v-if="folder && canManage" class="cms-media-folder-actions">
110
- <CmsButton
62
+ <KBreadcrumbs :items="crumbs" :separator="cmsIcon('chevron-right')" label="Folder" />
63
+ <KStack v-if="folder && canManage" direction="row" gap="xs" align="center">
64
+ <KButton
111
65
  label="Rename"
112
- icon="pencil-square"
66
+ :icon="cmsIcon('pencil-square')"
113
67
  variant="ghost"
114
- color="neutral"
68
+ tone="neutral"
115
69
  size="xs"
116
70
  @click="openRename"
117
71
  />
118
- <CmsButton
72
+ <KButton
119
73
  label="Delete folder"
120
- icon="trash"
74
+ :icon="cmsIcon('trash')"
121
75
  variant="ghost"
122
- color="error"
76
+ tone="danger"
123
77
  size="xs"
124
78
  @click="removeFolder(folder)"
125
79
  />
126
- </div>
80
+ </KStack>
127
81
  </div>
128
82
 
129
- <div v-if="uploader.uploading.value" class="cms-media-progress">
130
- <CmsIcon name="arrow-path" class="size-4 animate-spin" />
83
+ <div v-if="uploader.uploading.value" class="cms-media-progress" role="status">
84
+ <KSpinner size="xs" decorative />
131
85
  Uploading {{ Math.min(uploader.done.value + 1, uploader.total.value) }} of
132
86
  {{ uploader.total.value }} to {{ folder ?? "Library root" }}…
133
87
  </div>
134
88
 
135
- <div v-if="selection.length" class="cms-media-selection">
136
- <span class="cms-media-selection-count">{{ selection.length }} selected</span>
137
- <CmsButton
138
- v-if="selection.length < visibleFiles.length"
139
- :label="`Select all ${visibleFiles.length}`"
140
- variant="ghost"
141
- color="neutral"
142
- size="xs"
143
- @click="selectAll"
144
- />
145
- <div class="cms-media-selection-actions">
146
- <CmsButton
89
+ <KSelectionBar
90
+ :count="selection.length"
91
+ :total="visibleFiles.length"
92
+ :selected-text="(count) => `${count} selected`"
93
+ placement="sticky"
94
+ class="cms-media-selection-bar"
95
+ @select-all="selectAll"
96
+ @clear="clearSelection"
97
+ >
98
+ <template #actions>
99
+ <KButton
147
100
  label="Move to…"
148
- icon="folder-arrow-down"
101
+ :icon="cmsIcon('folder-arrow-down')"
149
102
  variant="soft"
150
103
  size="xs"
151
104
  @click="openMove"
152
105
  />
153
- <CmsButton
106
+ <KButton
154
107
  label="Delete"
155
- icon="trash"
108
+ :icon="cmsIcon('trash')"
156
109
  variant="soft"
157
- color="error"
110
+ tone="danger"
158
111
  size="xs"
159
112
  @click="removeItems(selectedItems)"
160
113
  />
161
- <CmsButton
162
- icon="x-mark"
163
- variant="ghost"
164
- color="neutral"
165
- size="xs"
166
- aria-label="Clear selection"
167
- @click="clearSelection"
168
- />
169
- </div>
170
- </div>
171
-
172
- <div v-else-if="showTypeFilters || query && folder" class="cms-media-filters">
173
- <template v-if="showTypeFilters">
174
- <button
175
- v-for="f in filters"
176
- :key="f"
177
- type="button"
178
- class="cms-pill"
179
- :class="{ 'is-active': filter === f }"
180
- @click="filter = f"
181
- >
182
- {{ filterLabels[f] }}
183
- </button>
184
114
  </template>
185
- <button
115
+ </KSelectionBar>
116
+
117
+ <div
118
+ v-if="!selection.length && (showTypeFilters || query && folder)"
119
+ class="cms-media-filter-row"
120
+ >
121
+ <KFilterPills
122
+ v-if="showTypeFilters"
123
+ v-model="filter"
124
+ :options="filterOptions"
125
+ label="File type"
126
+ required
127
+ />
128
+ <KFilterPills
186
129
  v-if="query && folder"
187
- type="button"
188
- class="cms-pill cms-media-scope"
189
- :class="{ 'is-active': searchEverywhere }"
190
- @click="searchEverywhere = !searchEverywhere"
191
- >
192
- <CmsIcon name="magnifying-glass" class="size-3" />Search all folders
193
- </button>
130
+ v-model="scopeValue"
131
+ :options="scopeOptions"
132
+ label="Search scope"
133
+ />
194
134
  </div>
195
135
 
196
- <CmsSpinner v-if="library.loading.value" />
136
+ <div v-if="library.loading.value" class="cms-media-loading">
137
+ <KSpinner />
138
+ </div>
197
139
 
198
- <CmsEmptyState v-else-if="loadError" icon="exclamation-triangle" title="Could not load media">
199
- <CmsButton label="Retry" icon="arrow-path" variant="soft" @click="library.reload()" />
200
- </CmsEmptyState>
140
+ <KEmptyState
141
+ v-else-if="loadError"
142
+ :icon="cmsIcon('exclamation-triangle')"
143
+ title="Could not load media"
144
+ >
145
+ <template #actions>
146
+ <KButton
147
+ label="Retry"
148
+ :icon="cmsIcon('arrow-path')"
149
+ variant="soft"
150
+ @click="library.reload()"
151
+ />
152
+ </template>
153
+ </KEmptyState>
201
154
 
202
155
  <template v-else>
203
156
  <section v-if="recent.length" class="cms-media-section">
204
- <h3 class="cms-media-section-title"><CmsIcon name="clock" class="size-3.5" />Recent</h3>
157
+ <h3 class="cms-media-section-title">
158
+ <KIcon :name="cmsIcon('clock')" />
159
+ Recent
160
+ </h3>
205
161
  <div class="cms-media-grid is-compact is-recent">
206
- <button
162
+ <KCard
207
163
  v-for="item in recent"
208
164
  :key="item.key"
165
+ as="button"
209
166
  type="button"
210
- class="cms-card cms-media-tile is-selectable"
167
+ variant="outline"
168
+ padding="none"
169
+ :animated="false"
170
+ class="cms-media-tile is-selectable"
211
171
  :title="mediaFilename(item.key)"
172
+ :aria-label="mediaFilename(item.key)"
212
173
  @click="emitSelect(item)"
213
174
  >
214
175
  <div class="cms-media-preview">
@@ -225,9 +186,9 @@
225
186
  muted
226
187
  playsinline
227
188
  />
228
- <CmsIcon v-else :name="mediaIconFor(item.type)" class="size-6" />
189
+ <KIcon v-else :name="cmsIcon(mediaIconFor(item.type))" />
229
190
  </div>
230
- </button>
191
+ </KCard>
231
192
  </div>
232
193
  </section>
233
194
 
@@ -249,10 +210,11 @@
249
210
  @dragleave="onTargetDragLeave(child)"
250
211
  @drop="onTargetDrop($event, child)"
251
212
  >
252
- <CmsIcon
253
- :name="dropTarget === targetId(child) ? 'folder-open' : 'folder'"
254
- class="cms-media-folder-tile-icon size-6"
255
- />
213
+ <span class="cms-media-folder-tile-icon">
214
+ <KIcon
215
+ :name="cmsIcon(dropTarget === targetId(child) ? 'folder-open' : 'folder')"
216
+ />
217
+ </span>
256
218
  <span class="cms-media-folder-tile-text">
257
219
  <span class="cms-media-folder-tile-name">
258
220
  {{ query ? child : mediaFolderName(child) }}
@@ -278,16 +240,17 @@
278
240
  class="cms-media-grid"
279
241
  :class="{ 'is-compact': selectable }"
280
242
  >
281
- <div
243
+ <KCard
282
244
  v-for="item in paged"
283
245
  :key="item.key"
246
+ variant="outline"
247
+ padding="none"
248
+ :animated="false"
249
+ :selected="canManage ? isSelected(item.key) : void 0"
284
250
  role="button"
285
251
  tabindex="0"
286
- class="cms-card cms-media-tile is-selectable"
287
- :class="{
288
- 'is-checked': isSelected(item.key),
289
- 'is-dragging': draggingKeys.includes(item.key)
290
- }"
252
+ class="cms-media-tile is-selectable"
253
+ :class="{ 'is-dragging': draggingKeys.includes(item.key) }"
291
254
  :draggable="canManage"
292
255
  :aria-pressed="canManage ? isSelected(item.key) : void 0"
293
256
  @click="onItemClick(item, $event)"
@@ -313,7 +276,7 @@
313
276
  muted
314
277
  playsinline
315
278
  />
316
- <CmsIcon v-else :name="mediaIconFor(item.type)" class="size-8" />
279
+ <KIcon v-else :name="cmsIcon(mediaIconFor(item.type))" />
317
280
  <button
318
281
  v-if="canManage"
319
282
  type="button"
@@ -323,7 +286,7 @@
323
286
  tabindex="-1"
324
287
  @click.stop="toggleSelect(item.key, $event)"
325
288
  >
326
- <CmsIcon name="check" class="size-3.5" />
289
+ <KIcon :name="cmsIcon('check')" />
327
290
  </button>
328
291
  <div class="cms-media-info">
329
292
  {{ tileInfo(item) }}
@@ -334,7 +297,7 @@
334
297
  {{ mediaFilename(item.key) }}
335
298
  </div>
336
299
  <div v-if="query && item.folder" class="cms-media-folder">
337
- <CmsIcon name="folder" class="size-3" />{{ item.folder }}
300
+ <KIcon :name="cmsIcon('folder')" />{{ item.folder }}
338
301
  </div>
339
302
  <span
340
303
  v-if="!selectable"
@@ -342,18 +305,17 @@
342
305
  :class="{ 'is-unused': usageCount(item.key) === 0 }"
343
306
  >
344
307
  <template v-if="usageCount(item.key) !== null">
345
- <CmsIcon
346
- :name="usageCount(item.key) ? 'link' : 'link-slash'"
347
- class="size-3"
348
- />{{ usageLabel(item.key) }}
308
+ <KIcon :name="cmsIcon(usageCount(item.key) ? 'link' : 'link-slash')" />{{
309
+ usageLabel(item.key)
310
+ }}
349
311
  </template>
350
312
  <template v-else>&nbsp;</template>
351
313
  </span>
352
314
  </div>
353
- </div>
315
+ </KCard>
354
316
  </div>
355
317
 
356
- <div v-else class="cms-card cms-media-list">
318
+ <KCard v-else variant="outline" padding="none" :animated="false" class="cms-media-list">
357
319
  <div
358
320
  v-for="item in paged"
359
321
  :key="item.key"
@@ -382,13 +344,13 @@
382
344
  tabindex="-1"
383
345
  @click.stop="toggleSelect(item.key, $event)"
384
346
  >
385
- <CmsIcon name="check" class="size-3.5" />
347
+ <KIcon :name="cmsIcon('check')" />
386
348
  </button>
387
349
  <CmsMediaThumb :value="item.key" />
388
350
  <span class="cms-media-row-name" :title="item.key">
389
351
  {{ mediaFilename(item.key) }}
390
352
  <span v-if="query && item.folder" class="cms-media-folder">
391
- <CmsIcon name="folder" class="size-3" />{{ item.folder }}
353
+ <KIcon :name="cmsIcon('folder')" />{{ item.folder }}
392
354
  </span>
393
355
  </span>
394
356
  <span v-if="!selectable" class="cms-media-row-cell is-usage">
@@ -397,10 +359,9 @@
397
359
  class="cms-media-usage-badge"
398
360
  :class="{ 'is-unused': usageCount(item.key) === 0 }"
399
361
  >
400
- <CmsIcon
401
- :name="usageCount(item.key) ? 'link' : 'link-slash'"
402
- class="size-3"
403
- />{{ usageLabel(item.key) }}
362
+ <KIcon :name="cmsIcon(usageCount(item.key) ? 'link' : 'link-slash')" />{{
363
+ usageLabel(item.key)
364
+ }}
404
365
  </span>
405
366
  </span>
406
367
  <span class="cms-media-row-cell is-mono">{{ extension(item.key) }}</span>
@@ -414,148 +375,136 @@
414
375
  {{ item.createdAt ? new Date(item.createdAt).toLocaleDateString() : "" }}
415
376
  </span>
416
377
  </div>
417
- </div>
378
+ </KCard>
418
379
  </section>
419
380
 
420
- <CmsEmptyState v-if="!visibleFiles.length && !visibleFolders.length" v-bind="emptyState">
421
- <CmsButton
422
- v-if="query"
423
- label="Clear search"
424
- icon="x-mark"
425
- variant="soft"
426
- @click="search = ''"
427
- />
428
- <CmsButton
429
- v-else-if="canUpload && !hasTypedFiles"
430
- label="Upload"
431
- icon="cloud-arrow-up"
432
- variant="soft"
433
- @click="uploadOpen = true"
434
- />
435
- </CmsEmptyState>
381
+ <KEmptyState
382
+ v-if="!visibleFiles.length && !visibleFolders.length"
383
+ :icon="cmsIcon(emptyState.icon)"
384
+ :title="emptyState.title"
385
+ :description="emptyState.description"
386
+ >
387
+ <template v-if="query || canUpload && !hasTypedFiles" #actions>
388
+ <KButton
389
+ v-if="query"
390
+ label="Clear search"
391
+ :icon="cmsIcon('x-mark')"
392
+ variant="soft"
393
+ @click="search = ''"
394
+ />
395
+ <KButton
396
+ v-else
397
+ label="Upload"
398
+ :icon="cmsIcon('cloud-arrow-up')"
399
+ variant="soft"
400
+ @click="uploadOpen = true"
401
+ />
402
+ </template>
403
+ </KEmptyState>
436
404
 
437
- <CmsPagination
405
+ <KPagination
438
406
  v-if="visibleFiles.length > PAGE_SIZE"
439
407
  v-model:page="page"
440
408
  :total="visibleFiles.length"
441
- :items-per-page="PAGE_SIZE"
409
+ :page-size="PAGE_SIZE"
410
+ :show-summary="false"
411
+ class="cms-media-pagination"
442
412
  />
443
413
  </template>
444
414
 
445
415
  <div v-if="fileDragActive" class="cms-media-drop-overlay">
446
- <CmsIcon name="cloud-arrow-up" class="size-8" />
416
+ <KIcon :name="cmsIcon('cloud-arrow-up')" class="cms-media-drop-icon" />
447
417
  <span
448
418
  >Drop to upload to <strong>{{ dropTargetLabel }}</strong></span
449
419
  >
450
420
  </div>
421
+ </div>
451
422
 
452
- <CmsModal v-if="canUpload" v-model:open="uploadOpen" title="Upload media">
453
- <template #body>
454
- <CmsMediaUpload
455
- :multiple="!selectable"
456
- :media-type="mediaType"
457
- :accept="accept"
458
- :folder="folder"
459
- :directories="!selectable"
460
- @uploaded="onUploaded"
461
- />
462
- <p class="cms-form-hint cms-media-upload-hint">
463
- Tip: you can also drop files or folders anywhere on the library, or on a folder.
464
- </p>
465
- </template>
466
- </CmsModal>
423
+ <template v-if="!notConfigured">
424
+ <KModal v-if="canUpload" v-model:open="uploadOpen" title="Upload media">
425
+ <CmsMediaUpload
426
+ :multiple="!selectable"
427
+ :media-type="mediaType"
428
+ :accept="accept"
429
+ :folder="folder"
430
+ :directories="!selectable"
431
+ @uploaded="onUploaded"
432
+ />
433
+ <p class="cms-media-hint cms-media-upload-hint">
434
+ Tip: you can also drop files or folders anywhere on the library, or on a folder.
435
+ </p>
436
+ </KModal>
467
437
 
468
- <CmsModal v-if="canUpload" v-model:open="newFolderOpen" title="New folder" size="sm">
469
- <template #body>
470
- <div class="cms-form">
471
- <CmsFormField label="Name">
472
- <CmsInput
473
- v-model="folderName"
474
- autofocus
475
- placeholder="e.g. covers"
476
- @keydown.enter.prevent="createFolder"
477
- />
478
- <p class="cms-form-hint">
479
- {{
480
- newFolderPath ? `Creates ${newFolderPath}/` : "Letters, numbers and dashes."
481
- }}
482
- </p>
483
- </CmsFormField>
484
- <div class="cms-actions is-end">
485
- <CmsButton
486
- label="Cancel"
487
- variant="ghost"
488
- color="neutral"
489
- @click="newFolderOpen = false"
490
- />
491
- <CmsButton
492
- label="Create"
493
- :loading="busy"
494
- :disabled="!newFolderPath"
495
- @click="createFolder"
496
- />
497
- </div>
498
- </div>
438
+ <KModal v-if="canUpload" v-model:open="newFolderOpen" title="New folder" size="sm">
439
+ <KFormField
440
+ label="Name"
441
+ :description="
442
+ newFolderPath ? `Creates ${newFolderPath}/` : 'Letters, numbers and dashes.'
443
+ "
444
+ >
445
+ <KInput
446
+ v-model="folderName"
447
+ autofocus
448
+ placeholder="e.g. covers"
449
+ @keydown.enter.prevent="createFolder"
450
+ />
451
+ </KFormField>
452
+ <template #footer>
453
+ <KButton label="Cancel" variant="ghost" tone="neutral" @click="newFolderOpen = false" />
454
+ <KButton
455
+ label="Create"
456
+ :loading="busy"
457
+ :disabled="!newFolderPath"
458
+ @click="createFolder"
459
+ />
499
460
  </template>
500
- </CmsModal>
461
+ </KModal>
501
462
 
502
- <CmsModal v-if="canManage" v-model:open="renameOpen" title="Rename folder" size="sm">
503
- <template #body>
504
- <div class="cms-form">
505
- <CmsFormField label="Name">
506
- <CmsInput v-model="folderName" autofocus @keydown.enter.prevent="renameFolder" />
507
- </CmsFormField>
508
- <CmsFormField label="Location">
509
- <CmsMediaFolderPicker
510
- v-model="renameParent"
511
- :folders="parentCandidates"
512
- :exclude="folder"
513
- />
514
- </CmsFormField>
515
- <p class="cms-form-hint">
516
- {{
517
- renamePath ? `Moves ${folder}/ to ${renamePath}/` : "Letters, numbers and dashes."
518
- }}
519
- </p>
520
- <div class="cms-actions is-end">
521
- <CmsButton
522
- label="Cancel"
523
- variant="ghost"
524
- color="neutral"
525
- @click="renameOpen = false"
526
- />
527
- <CmsButton
528
- label="Save"
529
- :loading="busy"
530
- :disabled="!renamePath || renamePath === folder"
531
- @click="renameFolder"
532
- />
533
- </div>
534
- </div>
463
+ <KModal v-if="canManage" v-model:open="renameOpen" title="Rename folder" size="sm">
464
+ <KStack gap="md">
465
+ <KFormField label="Name">
466
+ <KInput v-model="folderName" autofocus @keydown.enter.prevent="renameFolder" />
467
+ </KFormField>
468
+ <KFormField label="Location">
469
+ <CmsMediaFolderPicker
470
+ v-model="renameParent"
471
+ :folders="parentCandidates"
472
+ :exclude="folder"
473
+ />
474
+ </KFormField>
475
+ <p class="cms-media-hint">
476
+ {{
477
+ renamePath ? `Moves ${folder}/ to ${renamePath}/` : "Letters, numbers and dashes."
478
+ }}
479
+ </p>
480
+ </KStack>
481
+ <template #footer>
482
+ <KButton label="Cancel" variant="ghost" tone="neutral" @click="renameOpen = false" />
483
+ <KButton
484
+ label="Save"
485
+ :loading="busy"
486
+ :disabled="!renamePath || renamePath === folder"
487
+ @click="renameFolder"
488
+ />
535
489
  </template>
536
- </CmsModal>
490
+ </KModal>
537
491
 
538
- <CmsModal
492
+ <KModal
539
493
  v-if="canManage"
540
494
  v-model:open="moveOpen"
541
495
  :title="`Move ${selection.length} file${selection.length > 1 ? 's' : ''}`"
542
496
  size="sm"
543
497
  >
544
- <template #body>
545
- <div class="cms-form">
546
- <CmsMediaFolderPicker v-model="moveTarget" :folders="library.folders.value" />
547
- <div class="cms-actions is-end">
548
- <CmsButton
549
- label="Cancel"
550
- variant="ghost"
551
- color="neutral"
552
- @click="moveOpen = false"
553
- />
554
- <CmsButton label="Move here" :loading="busy" @click="moveSelection" />
555
- </div>
556
- </div>
498
+ <CmsMediaFolderPicker
499
+ v-model="moveTarget"
500
+ :folders="library.folders.value"
501
+ label="Folder"
502
+ />
503
+ <template #footer>
504
+ <KButton label="Cancel" variant="ghost" tone="neutral" @click="moveOpen = false" />
505
+ <KButton label="Move here" :loading="busy" @click="moveSelection" />
557
506
  </template>
558
- </CmsModal>
507
+ </KModal>
559
508
 
560
509
  <CmsMediaDetail
561
510
  v-if="!selectable"
@@ -565,11 +514,29 @@
565
514
  @close="detailKey = null"
566
515
  @delete="(item2) => removeItems([item2])"
567
516
  />
568
- </div>
517
+ </template>
569
518
  </template>
570
519
 
571
520
  <script setup>
572
- import { computed, onMounted, ref, watch } from "#imports";
521
+ import { computed, onMounted, ref, useTemplateRef, watch } from "#imports";
522
+ import {
523
+ Breadcrumbs as KBreadcrumbs,
524
+ Button as KButton,
525
+ Card as KCard,
526
+ DropdownMenu as KDropdownMenu,
527
+ EmptyState as KEmptyState,
528
+ FilterPills as KFilterPills,
529
+ FormField as KFormField,
530
+ Icon as KIcon,
531
+ Input as KInput,
532
+ Modal as KModal,
533
+ Pagination as KPagination,
534
+ SegmentedControl as KSegmentedControl,
535
+ SelectionBar as KSelectionBar,
536
+ Spinner as KSpinner,
537
+ Stack as KStack,
538
+ useFileDrop
539
+ } from "@xleddyl/443-components-vue";
573
540
  import {
574
541
  isWithinMediaFolder,
575
542
  MEDIA_FOLDER_MAX_DEPTH,
@@ -597,6 +564,7 @@ import {
597
564
  } from "../../composables/cms-media-uploader";
598
565
  import { useCmsRuntime } from "../../composables/cms-runtime";
599
566
  import { useCmsToast } from "../../composables/cms-toast";
567
+ import { cmsIcon } from "../../utils/ui";
600
568
  const MEDIA_DRAG = "application/x-cms-media";
601
569
  const FOLDER_DRAG = "application/x-cms-folder";
602
570
  const VIEW_STORAGE_KEY = "cms-media-view";
@@ -614,6 +582,14 @@ const sortLabels = {
614
582
  name: "Name",
615
583
  size: "Largest"
616
584
  };
585
+ const viewOptions = [
586
+ { value: "grid", label: "Grid view", icon: cmsIcon("squares-2x2") },
587
+ { value: "list", label: "List view", icon: cmsIcon("list-bullet") }
588
+ ];
589
+ const SCOPE_EVERYWHERE = "everywhere";
590
+ const scopeOptions = [
591
+ { value: SCOPE_EVERYWHERE, label: "Search all folders", icon: cmsIcon("magnifying-glass") }
592
+ ];
617
593
  const props = defineProps({
618
594
  selectable: { type: Boolean, required: false },
619
595
  mediaType: { type: null, required: false },
@@ -662,6 +638,9 @@ const filters = computed(() => [
662
638
  ...allowedTypes.value ?? MEDIA_TYPES
663
639
  ]);
664
640
  const filter = ref("all");
641
+ const filterOptions = computed(
642
+ () => filters.value.map((value) => ({ value, label: filterLabels[value] ?? value }))
643
+ );
665
644
  watch(filters, (list) => {
666
645
  if (!list.includes(filter.value)) filter.value = "all";
667
646
  });
@@ -675,6 +654,12 @@ const search = ref("");
675
654
  const searchEverywhere = ref(false);
676
655
  const query = computed(() => search.value.trim().toLowerCase());
677
656
  const scope = computed(() => searchEverywhere.value ? null : folder.value);
657
+ const scopeValue = computed({
658
+ get: () => searchEverywhere.value ? SCOPE_EVERYWHERE : null,
659
+ set: (value) => {
660
+ searchEverywhere.value = value === SCOPE_EVERYWHERE;
661
+ }
662
+ });
678
663
  const hasDates = computed(() => library.items.value.some((item) => item.createdAt));
679
664
  const sort = ref("newest");
680
665
  const activeSort = computed(
@@ -683,9 +668,9 @@ const activeSort = computed(
683
668
  const sortItems = computed(
684
669
  () => Object.keys(sortLabels).filter((key) => hasDates.value || key !== "newest" && key !== "oldest").map((key) => ({
685
670
  label: sortLabels[key],
686
- type: "checkbox",
671
+ type: "radio",
687
672
  checked: activeSort.value === key,
688
- onUpdateChecked: () => {
673
+ onSelect: () => {
689
674
  sort.value = key;
690
675
  }
691
676
  }))
@@ -768,27 +753,27 @@ const emptyState = computed(() => {
768
753
  return {
769
754
  icon: "magnifying-glass",
770
755
  title: "No matching media",
771
- body: searchEverywhere.value || !folder.value ? "Try a different search or filter." : "Nothing here matches. Try searching all folders."
756
+ description: searchEverywhere.value || !folder.value ? "Try a different search or filter." : "Nothing here matches. Try searching all folders."
772
757
  };
773
758
  }
774
759
  if (!library.items.value.length && !library.folders.value.length) {
775
760
  return {
776
761
  icon: "photo",
777
762
  title: readOnly.value ? "No media" : "No media yet",
778
- body: readOnly.value ? "No media registered." : "Drop files here or use Upload to add some."
763
+ description: readOnly.value ? "No media registered." : "Drop files here or use Upload to add some."
779
764
  };
780
765
  }
781
766
  if (folder.value) {
782
767
  return {
783
768
  icon: "folder-open",
784
769
  title: "This folder is empty",
785
- body: canUpload.value ? "Drop files here or use Upload to add some." : void 0
770
+ description: canUpload.value ? "Drop files here or use Upload to add some." : void 0
786
771
  };
787
772
  }
788
773
  return {
789
774
  icon: "photo",
790
775
  title: hasTypedFiles.value ? "No files in the library root" : "No matching media",
791
- body: hasTypedFiles.value ? "Open a folder to see its files." : "No files of this type yet."
776
+ description: hasTypedFiles.value ? "Open a folder to see its files." : "No files of this type yet."
792
777
  };
793
778
  });
794
779
  const view = ref("grid");
@@ -804,13 +789,19 @@ watch(view, (value) => {
804
789
  } catch {
805
790
  }
806
791
  });
807
- const crumbs = computed(() => [
808
- { label: "Library", folder: null },
809
- ...folder.value ? mediaFolderAncestors(folder.value).map((path) => ({
810
- label: mediaFolderName(path),
811
- folder: path
812
- })) : []
813
- ]);
792
+ const crumbs = computed(
793
+ () => [null, ...folder.value ? mediaFolderAncestors(folder.value) : []].map((path) => ({
794
+ label: path ? mediaFolderName(path) : "Library",
795
+ icon: path ? void 0 : cmsIcon("home"),
796
+ onClick: () => openFolder(path),
797
+ attrs: {
798
+ class: { "is-drop-target": dropTarget.value === targetId(path) },
799
+ onDragover: (event) => onTargetDragOver(event, path),
800
+ onDragleave: () => onTargetDragLeave(path),
801
+ onDrop: (event) => onTargetDrop(event, path)
802
+ }
803
+ }))
804
+ );
814
805
  function openFolder(target) {
815
806
  folder.value = target;
816
807
  search.value = "";
@@ -1064,8 +1055,17 @@ async function uploadTree(pending, target) {
1064
1055
  const draggingKeys = ref([]);
1065
1056
  const draggingFolder = ref(null);
1066
1057
  const dropTarget = ref(null);
1067
- const fileDragDepth = ref(0);
1068
- const fileDragActive = computed(() => fileDragDepth.value > 0 && canUpload.value);
1058
+ const galleryEl = useTemplateRef("gallery");
1059
+ const { over: fileDragOver } = useFileDrop(galleryEl, {
1060
+ disabled: () => !canUpload.value,
1061
+ ignore: (event) => event.defaultPrevented,
1062
+ onDrop: (_files, event) => {
1063
+ dropTarget.value = null;
1064
+ const tree = droppedTree(event);
1065
+ if (tree) void uploadTree(tree, folder.value);
1066
+ }
1067
+ });
1068
+ const fileDragActive = computed(() => fileDragOver.value && canUpload.value);
1069
1069
  const ROOT_TARGET = ":root";
1070
1070
  function targetId(target) {
1071
1071
  return target ?? ROOT_TARGET;
@@ -1125,12 +1125,10 @@ function onTargetDragLeave(target) {
1125
1125
  async function onTargetDrop(event, target) {
1126
1126
  if (!acceptsDrop(event, target)) return;
1127
1127
  event.preventDefault();
1128
- event.stopPropagation();
1129
1128
  const keys = [...draggingKeys.value];
1130
1129
  const path = draggingFolder.value;
1131
1130
  const tree = hasFiles(event) ? droppedTree(event) : null;
1132
1131
  onDragEnd();
1133
- fileDragDepth.value = 0;
1134
1132
  if (keys.length) {
1135
1133
  if (await moveKeys(keys, target)) clearSelection();
1136
1134
  return;
@@ -1145,27 +1143,6 @@ async function onTargetDrop(event, target) {
1145
1143
  }
1146
1144
  if (tree) await uploadTree(tree, target);
1147
1145
  }
1148
- function onGalleryDragEnter(event) {
1149
- if (!hasFiles(event) || !canUpload.value) return;
1150
- fileDragDepth.value++;
1151
- }
1152
- function onGalleryDragOver(event) {
1153
- if (!hasFiles(event) || !canUpload.value) return;
1154
- event.preventDefault();
1155
- if (event.dataTransfer) event.dataTransfer.dropEffect = "copy";
1156
- }
1157
- function onGalleryDragLeave(event) {
1158
- if (!hasFiles(event) || !canUpload.value) return;
1159
- fileDragDepth.value = Math.max(0, fileDragDepth.value - 1);
1160
- }
1161
- async function onGalleryDrop(event) {
1162
- if (!hasFiles(event) || !canUpload.value) return;
1163
- event.preventDefault();
1164
- fileDragDepth.value = 0;
1165
- dropTarget.value = null;
1166
- const tree = droppedTree(event);
1167
- if (tree) await uploadTree(tree, folder.value);
1168
- }
1169
1146
  function tileInfo(item) {
1170
1147
  const parts = [extension(item.key)];
1171
1148
  if (item.size != null) parts.push(formatFileSize(item.size));