@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
@@ -14,45 +14,48 @@
14
14
  :field-key="fieldKey"
15
15
  />
16
16
  <CmsRichTextField v-else-if="field.type === 'richtext'" v-model="strOrNull" />
17
- <CmsTextarea
17
+ <KTextarea
18
18
  v-else-if="field.type === 'text' && field.textarea"
19
- v-model="str"
19
+ v-model="plainText"
20
20
  :rows="8"
21
21
  :placeholder="field.placeholder"
22
22
  />
23
- <CmsInput v-else-if="field.type === 'text'" v-model="str" :placeholder="field.placeholder" />
24
- <CmsInput
23
+ <KInput v-else-if="field.type === 'text'" v-model="text" :placeholder="field.placeholder" />
24
+ <KInput
25
25
  v-else-if="field.type === 'email'"
26
- v-model="str"
26
+ v-model="text"
27
27
  type="email"
28
28
  :placeholder="field.placeholder"
29
29
  />
30
30
  <CmsSlugField v-else-if="field.type === 'slug'" v-model="strOrNull" :source="slugSource" />
31
- <CmsSelectMenu
32
- v-else-if="field.type === 'select'"
33
- v-model="selValue"
34
- :multiple="field.multiple"
35
- :items="selectItems"
31
+ <KCombobox
32
+ v-else-if="field.type === 'select' && field.multiple"
33
+ v-model="multiValue"
34
+ multiple
35
+ open-on-focus
36
+ :options="selectItems"
36
37
  :placeholder="field.placeholder ?? 'Select\u2026'"
37
38
  />
38
- <CmsSwitch
39
- v-else-if="field.type === 'boolean'"
40
- :model-value="!!model"
41
- @update:model-value="
42
- (v) => {
43
- model = !!v;
44
- }
45
- "
39
+ <KSelect
40
+ v-else-if="field.type === 'select'"
41
+ v-model="singleValue"
42
+ :options="selectItems"
43
+ :placeholder="field.placeholder ?? 'Select\u2026'"
46
44
  />
45
+ <KSwitch v-else-if="field.type === 'boolean'" v-model="flag" />
47
46
  <CmsJsonField v-else-if="field.type === 'json'" v-model="jsonValue" />
48
- <CmsInput
47
+ <KNumberInput
49
48
  v-else-if="field.type === 'number'"
50
- v-model.number="num"
51
- type="number"
49
+ v-model="num"
50
+ align="start"
52
51
  :placeholder="field.placeholder"
53
52
  />
54
- <CmsInput v-else-if="field.type === 'date'" v-model="str" type="date" />
55
- <CmsInput v-else-if="field.type === 'datetime'" v-model="localDateTime" type="datetime-local" />
53
+ <KDateInput v-else-if="field.type === 'date'" v-model="plainText" />
54
+ <KDateInput
55
+ v-else-if="field.type === 'datetime'"
56
+ v-model="localDateTime"
57
+ type="datetime-local"
58
+ />
56
59
  <CmsRelationField
57
60
  v-else-if="field.type === 'relation'"
58
61
  v-model="relationValue"
@@ -65,6 +68,15 @@
65
68
 
66
69
  <script setup>
67
70
  import { isTranslatableField, selectOptions } from "#nuxt-cms";
71
+ import {
72
+ Combobox as KCombobox,
73
+ DateInput as KDateInput,
74
+ Input as KInput,
75
+ NumberInput as KNumberInput,
76
+ Select as KSelect,
77
+ Switch as KSwitch,
78
+ Textarea as KTextarea
79
+ } from "@xleddyl/443-components-vue";
68
80
  import { computed } from "#imports";
69
81
  const props = defineProps({
70
82
  field: { type: Object, required: true },
@@ -74,10 +86,9 @@ const props = defineProps({
74
86
  fieldKey: { type: String, required: false }
75
87
  });
76
88
  const model = defineModel({ type: null, ...{ required: true } });
77
- const selectItems = computed(() => [
78
- ...props.field.required || props.field.multiple ? [] : [{ label: "\u2014", value: null }],
79
- ...selectOptions(props.field).map(({ value, label }) => ({ label, value }))
80
- ]);
89
+ const selectItems = computed(
90
+ () => selectOptions(props.field).map(({ value, label }) => ({ label, value }))
91
+ );
81
92
  function proxy(fromModel, toModel = (v) => v) {
82
93
  return computed({
83
94
  get: () => fromModel(model.value),
@@ -86,16 +97,29 @@ function proxy(fromModel, toModel = (v) => v) {
86
97
  }
87
98
  });
88
99
  }
89
- const str = proxy(
100
+ function emptyToNull(value) {
101
+ return value == null || value === "" ? null : String(value);
102
+ }
103
+ const text = proxy(
90
104
  (v) => v ?? "",
91
- (v) => v === "" ? null : v
105
+ emptyToNull
92
106
  );
107
+ const plainText = proxy((v) => v ?? "", emptyToNull);
93
108
  const strOrNull = proxy((v) => v);
94
- const selValue = proxy(
95
- (v) => props.field.multiple ? v ?? [] : v ?? null
109
+ const singleValue = proxy(
110
+ (v) => v ?? null,
111
+ emptyToNull
112
+ );
113
+ const multiValue = proxy(
114
+ (v) => v ?? [],
115
+ (v) => Array.isArray(v) ? v : v == null ? [] : [v]
116
+ );
117
+ const flag = proxy(
118
+ (v) => !!v,
119
+ (v) => !!v
96
120
  );
97
121
  const num = proxy(
98
- (v) => v ?? void 0,
122
+ (v) => v ?? null,
99
123
  (v) => typeof v === "number" && !Number.isNaN(v) ? v : null
100
124
  );
101
125
  const translatable = proxy((v) => v);
@@ -8,11 +8,11 @@ type __VLS_ModelProps = {
8
8
  };
9
9
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
10
10
  declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
11
- imported: () => any;
12
11
  "update:open": (value: boolean) => any;
12
+ imported: () => any;
13
13
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
14
- onImported?: (() => any) | undefined;
15
14
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
15
+ onImported?: (() => any) | undefined;
16
16
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
17
17
  declare const _default: typeof __VLS_export;
18
18
  export default _default;
@@ -1,128 +1,129 @@
1
1
  <template>
2
- <CmsModal v-model:open="open" :title="`Import ${config.label}`" size="lg">
3
- <div class="cms-form">
4
- <p class="cms-form-description">
2
+ <KModal v-model:open="open" :title="`Import ${config.label}`" size="lg">
3
+ <KStack gap="md">
4
+ <p class="cms-settings-hint">
5
5
  {{ csv ? "A JSON or CSV file" : "A JSON file" }} in the format of the export, up to
6
6
  {{ maxSize }} and {{ IMPORT_MAX_ROWS }} rows. Media fields take keys of files that are
7
7
  already in the media library. Nothing is written until you confirm.
8
8
  </p>
9
9
 
10
- <div class="cms-import-file">
10
+ <KStack direction="row" gap="sm" wrap>
11
11
  <input
12
12
  ref="input"
13
13
  type="file"
14
- class="hidden"
14
+ hidden
15
15
  :accept="csv ? '.json,.csv,application/json,text/csv' : '.json,application/json'"
16
16
  @change="onFile"
17
17
  />
18
- <CmsButton
18
+ <KButton
19
19
  :label="file ? 'Choose another file' : 'Choose file'"
20
- icon="document-arrow-up"
20
+ :icon="cmsIcon('document-arrow-up')"
21
21
  variant="soft"
22
- color="neutral"
22
+ tone="neutral"
23
23
  :disabled="busy"
24
24
  @click="input?.click()"
25
25
  />
26
26
  <span v-if="file" class="cms-import-file-name">
27
27
  {{ file.name }} · {{ formatFileSize(file.size) }}
28
28
  </span>
29
- </div>
29
+ </KStack>
30
30
 
31
- <CmsFormField
31
+ <KFormField
32
32
  label="Mode"
33
33
  :description="
34
34
  mode === 'create' ? 'Every row becomes a new entry. A row with the id of an existing entry is an error.' : 'A row with the id of an existing entry replaces it. Other rows become new entries.'
35
35
  "
36
36
  >
37
- <div class="cms-media-filters">
38
- <button
39
- v-for="option in MODE_OPTIONS"
40
- :key="option.value"
41
- type="button"
42
- class="cms-pill"
43
- :class="{ 'is-active': mode === option.value }"
44
- :disabled="busy"
45
- @click="setMode(option.value)"
46
- >
47
- {{ option.label }}
48
- </button>
49
- </div>
50
- </CmsFormField>
37
+ <KSegmentedControl
38
+ :model-value="mode"
39
+ :options="MODE_OPTIONS"
40
+ size="sm"
41
+ required
42
+ :disabled="busy"
43
+ @update:model-value="setMode"
44
+ />
45
+ </KFormField>
51
46
 
52
- <CmsSpinner v-if="checking" />
47
+ <KSpinner v-if="checking" />
53
48
 
54
- <CmsAlert v-else-if="fileErrors.length" color="error" title="The file cannot be imported">
49
+ <KAlert v-else-if="fileErrors.length" tone="danger" title="The file cannot be imported">
55
50
  <ul class="cms-import-list">
56
51
  <li v-for="message in fileErrors" :key="message">{{ message }}</li>
57
52
  </ul>
58
- </CmsAlert>
53
+ </KAlert>
59
54
 
60
55
  <template v-else-if="preview">
61
- <CmsAlert :color="invalidCount ? 'warning' : 'success'" :title="summary" />
62
- <div class="cms-card cms-table-shell cms-import-preview">
63
- <div class="cms-table-scroll">
64
- <table class="cms-table">
65
- <thead>
66
- <tr>
67
- <th>Row</th>
68
- <th>Entry</th>
69
- <th>Action</th>
70
- <th>Problems</th>
71
- </tr>
72
- </thead>
73
- <tbody>
74
- <tr v-for="row in shownRows" :key="row.index">
75
- <td>{{ row.index }}</td>
76
- <td class="cms-import-title">{{ row.title || row.id || "Untitled" }}</td>
77
- <td>
78
- <span class="cms-tag">
79
- {{ row.action === "update" ? "Update" : "New" }}
80
- </span>
81
- </td>
82
- <td>
83
- <ul
84
- v-if="row.errors.length"
85
- class="cms-import-list cms-import-issues"
86
- >
87
- <li v-for="(issue, index) in row.errors" :key="index">
88
- {{ issue.path ? `${issue.path}: ` : "" }}{{ issue.message }}
89
- </li>
90
- </ul>
91
- <span v-else class="cms-import-ok">
92
- <CmsIcon name="check" class="size-3.5" />Ready
93
- </span>
94
- </td>
95
- </tr>
96
- </tbody>
97
- </table>
98
- </div>
99
- </div>
56
+ <KAlert :tone="invalidCount ? 'warning' : 'success'" :title="summary" />
57
+ <KTable
58
+ :rows="shownRows"
59
+ :columns="PREVIEW_COLUMNS"
60
+ row-key="index"
61
+ density="compact"
62
+ max-height="20rem"
63
+ label="Rows of the file"
64
+ >
65
+ <template #cell-title="{ row }">
66
+ <span class="cms-import-title">{{ row.title || row.id || "Untitled" }}</span>
67
+ </template>
68
+ <template #cell-action="{ row }">
69
+ <KBadge :label="row.action === 'update' ? 'Update' : 'New'" size="sm" />
70
+ </template>
71
+ <template #cell-errors="{ row }">
72
+ <ul v-if="row.errors.length" class="cms-import-list cms-import-issues">
73
+ <li v-for="(issue, index) in row.errors" :key="index">
74
+ {{ issue.path ? `${issue.path}: ` : "" }}{{ issue.message }}
75
+ </li>
76
+ </ul>
77
+ <span v-else class="cms-import-ok">
78
+ <KIcon name="check" />
79
+ Ready
80
+ </span>
81
+ </template>
82
+ </KTable>
100
83
  </template>
84
+ </KStack>
101
85
 
102
- <div class="cms-actions is-end">
103
- <CmsButton label="Cancel" variant="soft" color="neutral" @click="open = false" />
104
- <CmsButton
105
- :label="importLabel"
106
- icon="arrow-down-tray"
107
- :disabled="!canImport"
108
- :loading="importing"
109
- @click="commit"
110
- />
111
- </div>
112
- </div>
113
- </CmsModal>
86
+ <template #footer>
87
+ <KButton label="Cancel" variant="soft" tone="neutral" @click="open = false" />
88
+ <KButton
89
+ :label="importLabel"
90
+ :icon="cmsIcon('arrow-down-tray')"
91
+ :disabled="!canImport"
92
+ :loading="importing"
93
+ @click="commit"
94
+ />
95
+ </template>
96
+ </KModal>
114
97
  </template>
115
98
 
116
99
  <script setup>
117
100
  import { formatFileSize } from "#nuxt-cms";
101
+ import {
102
+ Alert as KAlert,
103
+ Badge as KBadge,
104
+ Button as KButton,
105
+ FormField as KFormField,
106
+ Icon as KIcon,
107
+ Modal as KModal,
108
+ SegmentedControl as KSegmentedControl,
109
+ Spinner as KSpinner,
110
+ Stack as KStack,
111
+ Table as KTable
112
+ } from "@xleddyl/443-components-vue";
118
113
  import { computed, ref, watch } from "#imports";
119
114
  import { canTransferCsv, IMPORT_MAX_BYTES, IMPORT_MAX_ROWS } from "../../../shared/transfer";
120
115
  import { useCmsToast } from "../../composables/cms-toast";
121
- import { errorMessage } from "../../utils/ui";
116
+ import { cmsIcon, errorMessage } from "../../utils/ui";
122
117
  const MODE_OPTIONS = [
123
118
  { value: "create", label: "Create only" },
124
119
  { value: "upsert", label: "Create or update by id" }
125
120
  ];
121
+ const PREVIEW_COLUMNS = [
122
+ { key: "index", label: "Row", numeric: true, align: "start" },
123
+ { key: "title", label: "Entry" },
124
+ { key: "action", label: "Action" },
125
+ { key: "errors", label: "Problems" }
126
+ ];
126
127
  const props = defineProps({
127
128
  collection: { type: String, required: true },
128
129
  config: { type: Object, required: true }
@@ -8,11 +8,11 @@ type __VLS_ModelProps = {
8
8
  };
9
9
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
10
10
  declare const __VLS_export: import("vue").DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
11
- imported: () => any;
12
11
  "update:open": (value: boolean) => any;
12
+ imported: () => any;
13
13
  }, string, import("vue").PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
14
- onImported?: (() => any) | undefined;
15
14
  "onUpdate:open"?: ((value: boolean) => any) | undefined;
15
+ onImported?: (() => any) | undefined;
16
16
  }>, {}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
17
17
  declare const _default: typeof __VLS_export;
18
18
  export default _default;
@@ -1,19 +1,26 @@
1
1
  <template>
2
- <div class="cms-form-field">
3
- <CmsTextarea
2
+ <KStack gap="xs">
3
+ <KTextarea
4
4
  v-model="text"
5
5
  :rows="6"
6
- class="font-mono"
7
- :color="invalid ? 'error' : void 0"
6
+ class="k-mono"
7
+ :invalid="control.field ? void 0 : invalid || void 0"
8
8
  @blur="commit"
9
9
  @update:model-value="invalid = false"
10
10
  />
11
- <p v-if="invalid" class="cms-form-error">Invalid JSON</p>
12
- </div>
11
+ <KFieldMessage v-if="!control.field && invalid" :message="INVALID_JSON" />
12
+ </KStack>
13
13
  </template>
14
14
 
15
15
  <script setup>
16
+ import {
17
+ FieldMessage as KFieldMessage,
18
+ Stack as KStack,
19
+ Textarea as KTextarea,
20
+ useFieldControl
21
+ } from "@xleddyl/443-components-vue";
16
22
  import { ref, watch } from "#imports";
23
+ const INVALID_JSON = "Invalid JSON";
17
24
  const model = defineModel({ type: null, ...{ required: true } });
18
25
  function serialize(value) {
19
26
  return value == null ? "" : JSON.stringify(value, null, 2);
@@ -26,17 +33,19 @@ function parse(raw) {
26
33
  return void 0;
27
34
  }
28
35
  }
36
+ const control = useFieldControl();
29
37
  const text = ref(serialize(model.value));
30
38
  const invalid = ref(false);
39
+ watch(invalid, (value) => control.setControlError(value ? INVALID_JSON : void 0));
31
40
  watch(model, (value) => {
32
- const current = parse(text.value);
41
+ const current = parse(text.value ?? "");
33
42
  if (JSON.stringify(current ?? null) !== JSON.stringify(value ?? null)) {
34
43
  text.value = serialize(value);
35
44
  invalid.value = false;
36
45
  }
37
46
  });
38
47
  function commit() {
39
- const parsed = parse(text.value);
48
+ const parsed = parse(text.value ?? "");
40
49
  if (parsed === void 0) {
41
50
  invalid.value = true;
42
51
  return;
@@ -1,58 +1,31 @@
1
1
  <template>
2
- <div class="cms-media-filters cms-list-filters">
3
- <template v-for="key in keys" :key="key">
4
- <CmsDropdownMenu v-if="optionsOf(key)" :items="menuItems(key)">
5
- <button
6
- type="button"
7
- class="cms-pill"
8
- :class="{ 'is-active': isActive(key) }"
9
- aria-haspopup="menu"
10
- >
11
- {{ pillLabel(key) }}
12
- <CmsIcon name="chevron-down" class="size-3" />
13
- </button>
14
- </CmsDropdownMenu>
15
- <CmsPopover
16
- v-else
17
- :open="openKey === key"
18
- class="cms-list-filter"
19
- @update:open="(value) => openKey = value ? key : null"
20
- >
21
- <button
22
- type="button"
23
- class="cms-pill"
24
- :class="{ 'is-active': isActive(key) }"
25
- aria-haspopup="dialog"
26
- >
27
- {{ pillLabel(key) }}
28
- <CmsIcon name="chevron-down" class="size-3" />
29
- </button>
30
- <template #content>
31
- <div class="cms-list-filter-panel" role="dialog" :aria-label="labelOf(key)">
32
- <CmsRelationField
33
- :model-value="model[key] ?? null"
34
- :to="config.fields[key].to"
35
- @update:model-value="(value) => pickRelation(key, value)"
36
- />
37
- </div>
38
- </template>
39
- </CmsPopover>
2
+ <KFilterPills
3
+ :model-value="activeKeys"
4
+ :options="pills"
5
+ label="Filters"
6
+ size="sm"
7
+ multiple
8
+ clearable
9
+ clear-label="Clear filters"
10
+ class="cms-list-filters"
11
+ @update:model-value="onPillsUpdate"
12
+ >
13
+ <template v-for="key in relationKeys" #[`panel-${key}`]="{ close }" :key="key">
14
+ <div class="cms-list-filter-panel">
15
+ <CmsRelationField
16
+ :model-value="model[key] ?? null"
17
+ :to="config.fields[key].to"
18
+ @update:model-value="(value) => pickRelation(key, value, close)"
19
+ />
20
+ </div>
40
21
  </template>
41
- <CmsButton
42
- v-if="activeCount"
43
- label="Clear filters"
44
- icon="x-mark"
45
- size="xs"
46
- variant="ghost"
47
- color="neutral"
48
- @click="model = {}"
49
- />
50
- </div>
22
+ </KFilterPills>
51
23
  </template>
52
24
 
53
25
  <script setup>
54
26
  import { isTranslatableField, selectDisplayValue } from "#nuxt-cms";
55
- import { computed, reactive, ref, watch } from "#imports";
27
+ import { FilterPills as KFilterPills } from "@xleddyl/443-components-vue";
28
+ import { computed, reactive, watch } from "#imports";
56
29
  import cmsConfig from "#cms-config";
57
30
  import {
58
31
  listFilterLabel,
@@ -68,9 +41,25 @@ const props = defineProps({
68
41
  });
69
42
  const model = defineModel({ type: Object, ...{ required: true } });
70
43
  const { i18n } = useCmsRuntime();
71
- const openKey = ref(null);
72
44
  const fetchedTitles = reactive({});
73
- const activeCount = computed(() => Object.values(model.value).filter(Boolean).length);
45
+ const activeKeys = computed(() => props.keys.filter((key) => !!model.value[key]));
46
+ const relationKeys = computed(() => props.keys.filter((key) => !optionsOf(key)));
47
+ const pills = computed(
48
+ () => props.keys.map((key) => {
49
+ const menu = optionsOf(key) ? menuItems(key) : void 0;
50
+ return {
51
+ value: key,
52
+ label: labelOf(key),
53
+ valueLabel: valueLabelOf(key),
54
+ active: isActive(key),
55
+ menu,
56
+ panel: !menu
57
+ };
58
+ })
59
+ );
60
+ function onPillsUpdate(value) {
61
+ if (!value.length) model.value = {};
62
+ }
74
63
  function optionsOf(key) {
75
64
  return listFilterOptions(props.config, key);
76
65
  }
@@ -89,17 +78,20 @@ function set(key, value) {
89
78
  function menuItems(key) {
90
79
  const current = model.value[key];
91
80
  return [
92
- { label: "Any", checked: !current, onSelect: () => set(key, null) },
93
- ...(optionsOf(key) ?? []).map((option) => ({
94
- label: option.label,
95
- checked: current === option.value,
96
- onSelect: () => set(key, option.value)
97
- }))
81
+ { type: "radio", label: "Any", checked: !current, onSelect: () => set(key, null) },
82
+ ...(optionsOf(key) ?? []).map(
83
+ (option) => ({
84
+ type: "radio",
85
+ label: option.label,
86
+ checked: current === option.value,
87
+ onSelect: () => set(key, option.value)
88
+ })
89
+ )
98
90
  ];
99
91
  }
100
- function pickRelation(key, value) {
92
+ function pickRelation(key, value, close) {
101
93
  set(key, typeof value === "string" ? value : null);
102
- openKey.value = null;
94
+ close();
103
95
  }
104
96
  function titleText(entry, value) {
105
97
  const field = entry?.titleField ? entry.fields[entry.titleField] : void 0;
@@ -142,10 +134,9 @@ watch(
142
134
  },
143
135
  { immediate: true }
144
136
  );
145
- function pillLabel(key) {
137
+ function valueLabelOf(key) {
146
138
  const value = model.value[key];
147
- if (!value) return labelOf(key);
148
- const shown = optionsOf(key) ? listFilterValueLabel(props.config, key, value) : relationTitle(key, value);
149
- return `${labelOf(key)}: ${shown}`;
139
+ if (!value) return void 0;
140
+ return optionsOf(key) ? listFilterValueLabel(props.config, key, value) : relationTitle(key, value);
150
141
  }
151
142
  </script>
@@ -1,29 +1,32 @@
1
1
  <template>
2
- <div class="cms-locale-switch" role="tablist" aria-label="Content language">
3
- <button
4
- v-for="locale in i18n.locales"
5
- :key="locale"
6
- type="button"
7
- role="tab"
8
- :aria-selected="model === locale"
9
- :title="filled(locale) ? locale : `${locale}: empty`"
10
- class="cms-locale-option"
11
- :class="{ 'is-active': model === locale, 'is-empty': !filled(locale) }"
12
- @click="model = locale"
13
- >
14
- {{ locale }}
15
- </button>
16
- </div>
2
+ <KSegmentedControl
3
+ v-model="model"
4
+ class="cms-locale-control"
5
+ :options="options"
6
+ size="sm"
7
+ required
8
+ aria-label="Content language"
9
+ />
17
10
  </template>
18
11
 
19
12
  <script setup>
13
+ import { SegmentedControl as KSegmentedControl } from "@xleddyl/443-components-vue";
14
+ import { computed } from "#imports";
20
15
  import { useCmsRuntime } from "../../composables/cms-runtime";
21
16
  const props = defineProps({
22
17
  value: { type: [Object, null], required: false }
23
18
  });
24
19
  const model = defineModel({ type: String, ...{ required: true } });
25
20
  const { i18n } = useCmsRuntime();
26
- function filled(locale) {
27
- return !!props.value?.[locale]?.trim();
28
- }
21
+ const options = computed(
22
+ () => i18n.locales.map((locale) => {
23
+ const empty = !props.value?.[locale]?.trim();
24
+ return {
25
+ value: locale,
26
+ label: locale,
27
+ title: empty ? `${locale}: empty` : void 0,
28
+ muted: empty
29
+ };
30
+ })
31
+ );
29
32
  </script>