@aphexcms/cms-core 2.0.9 → 2.0.11

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 (381) hide show
  1. package/LICENSE +21 -0
  2. package/dist/api/api-keys.d.ts +8 -7
  3. package/dist/api/api-keys.d.ts.map +1 -1
  4. package/dist/api/assets.d.ts +7 -22
  5. package/dist/api/assets.d.ts.map +1 -1
  6. package/dist/api/assets.js +1 -10
  7. package/dist/api/documents.d.ts +17 -16
  8. package/dist/api/documents.d.ts.map +1 -1
  9. package/dist/api/documents.js +2 -2
  10. package/dist/api/index.d.ts +1 -0
  11. package/dist/api/index.d.ts.map +1 -1
  12. package/dist/api/index.js +1 -0
  13. package/dist/api/organizations.d.ts +15 -35
  14. package/dist/api/organizations.d.ts.map +1 -1
  15. package/dist/api/roles.d.ts +22 -0
  16. package/dist/api/roles.d.ts.map +1 -0
  17. package/dist/api/roles.js +26 -0
  18. package/dist/api/schemas/api-keys.d.ts +62 -0
  19. package/dist/api/schemas/api-keys.d.ts.map +1 -0
  20. package/dist/api/schemas/api-keys.js +28 -0
  21. package/dist/api/schemas/assets.d.ts +174 -0
  22. package/dist/api/schemas/assets.d.ts.map +1 -0
  23. package/dist/api/schemas/assets.js +99 -0
  24. package/dist/api/schemas/documents.d.ts +325 -0
  25. package/dist/api/schemas/documents.d.ts.map +1 -0
  26. package/dist/api/schemas/documents.js +161 -0
  27. package/dist/api/schemas/organizations.d.ts +41 -0
  28. package/dist/api/schemas/organizations.d.ts.map +1 -0
  29. package/dist/api/schemas/organizations.js +56 -0
  30. package/dist/api/schemas/roles.d.ts +77 -0
  31. package/dist/api/schemas/roles.d.ts.map +1 -0
  32. package/dist/api/schemas/roles.js +42 -0
  33. package/dist/api/schemas/user.d.ts +10 -0
  34. package/dist/api/schemas/user.d.ts.map +1 -0
  35. package/dist/api/schemas/user.js +11 -0
  36. package/dist/api/user.d.ts +4 -6
  37. package/dist/api/user.d.ts.map +1 -1
  38. package/dist/app-augment.d.ts +32 -0
  39. package/dist/app-augment.d.ts.map +1 -0
  40. package/dist/app-augment.js +18 -0
  41. package/dist/auth/auth-hooks.d.ts +2 -1
  42. package/dist/auth/auth-hooks.d.ts.map +1 -1
  43. package/dist/auth/auth-hooks.js +22 -2
  44. package/dist/auth/provider.d.ts +5 -0
  45. package/dist/auth/provider.d.ts.map +1 -1
  46. package/dist/cli/index.js +0 -0
  47. package/dist/client/index.d.ts +4 -0
  48. package/dist/client/index.d.ts.map +1 -1
  49. package/dist/client/index.js +7 -0
  50. package/dist/components/AdminApp.svelte +306 -142
  51. package/dist/components/AdminApp.svelte.d.ts +8 -0
  52. package/dist/components/AdminApp.svelte.d.ts.map +1 -1
  53. package/dist/components/admin/DocumentEditor.svelte +653 -365
  54. package/dist/components/admin/DocumentEditor.svelte.d.ts +2 -0
  55. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
  56. package/dist/components/admin/DocumentVersionPanel.svelte +57 -44
  57. package/dist/components/admin/DocumentVersionPanel.svelte.d.ts.map +1 -1
  58. package/dist/components/admin/MediaBrowser.svelte +70 -30
  59. package/dist/components/admin/MediaBrowser.svelte.d.ts.map +1 -1
  60. package/dist/components/admin/ObjectModal.svelte +70 -95
  61. package/dist/components/admin/ObjectModal.svelte.d.ts +1 -2
  62. package/dist/components/admin/ObjectModal.svelte.d.ts.map +1 -1
  63. package/dist/components/admin/PermissionsDebug.svelte +119 -0
  64. package/dist/components/admin/PermissionsDebug.svelte.d.ts +4 -0
  65. package/dist/components/admin/PermissionsDebug.svelte.d.ts.map +1 -0
  66. package/dist/components/admin/SchemaField.svelte +3 -1
  67. package/dist/components/admin/SchemaField.svelte.d.ts.map +1 -1
  68. package/dist/components/admin/confirm-dialog/ConfirmDialogHost.svelte +35 -0
  69. package/dist/components/admin/confirm-dialog/ConfirmDialogHost.svelte.d.ts +19 -0
  70. package/dist/components/admin/confirm-dialog/ConfirmDialogHost.svelte.d.ts.map +1 -0
  71. package/dist/components/admin/confirm-dialog/confirm-dialog.svelte.d.ts +16 -0
  72. package/dist/components/admin/confirm-dialog/confirm-dialog.svelte.d.ts.map +1 -0
  73. package/dist/components/admin/confirm-dialog/confirm-dialog.svelte.js +29 -0
  74. package/dist/components/admin/fields/ArrayField.svelte +104 -108
  75. package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -1
  76. package/dist/components/admin/fields/FileField.svelte +22 -17
  77. package/dist/components/admin/fields/FileField.svelte.d.ts.map +1 -1
  78. package/dist/components/admin/fields/ImageField.svelte +21 -15
  79. package/dist/components/admin/fields/ImageField.svelte.d.ts.map +1 -1
  80. package/dist/components/admin/fields/ReferenceField.svelte +142 -112
  81. package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -1
  82. package/dist/components/admin/fields/TextareaField.svelte +4 -3
  83. package/dist/components/admin/fields/TextareaField.svelte.d.ts +2 -2
  84. package/dist/components/admin/fields/TextareaField.svelte.d.ts.map +1 -1
  85. package/dist/components/layout/Sidebar.svelte +21 -11
  86. package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -1
  87. package/dist/components/layout/sidebar/NavMain.svelte +1 -0
  88. package/dist/db/interfaces/document.d.ts.map +1 -1
  89. package/dist/db/interfaces/index.d.ts +3 -1
  90. package/dist/db/interfaces/index.d.ts.map +1 -1
  91. package/dist/db/interfaces/organization.d.ts +1 -1
  92. package/dist/db/interfaces/organization.d.ts.map +1 -1
  93. package/dist/db/interfaces/role.d.ts +25 -0
  94. package/dist/db/interfaces/role.d.ts.map +1 -0
  95. package/dist/db/interfaces/role.js +1 -0
  96. package/dist/engine.d.ts.map +1 -1
  97. package/dist/engine.js +5 -0
  98. package/dist/field-access.d.ts +30 -0
  99. package/dist/field-access.d.ts.map +1 -0
  100. package/dist/field-access.js +79 -0
  101. package/dist/hooks.d.ts +2 -0
  102. package/dist/hooks.d.ts.map +1 -1
  103. package/dist/hooks.js +23 -13
  104. package/dist/lib/api/api-keys.d.ts +8 -7
  105. package/dist/lib/api/api-keys.d.ts.map +1 -1
  106. package/dist/lib/api/api-keys.js.map +1 -1
  107. package/dist/lib/api/assets.d.ts +7 -22
  108. package/dist/lib/api/assets.d.ts.map +1 -1
  109. package/dist/lib/api/assets.js +1 -10
  110. package/dist/lib/api/assets.js.map +1 -1
  111. package/dist/lib/api/documents.d.ts +17 -16
  112. package/dist/lib/api/documents.d.ts.map +1 -1
  113. package/dist/lib/api/documents.js +2 -2
  114. package/dist/lib/api/documents.js.map +1 -1
  115. package/dist/lib/api/index.d.ts +1 -0
  116. package/dist/lib/api/index.d.ts.map +1 -1
  117. package/dist/lib/api/index.js +1 -0
  118. package/dist/lib/api/index.js.map +1 -1
  119. package/dist/lib/api/organizations.d.ts +15 -35
  120. package/dist/lib/api/organizations.d.ts.map +1 -1
  121. package/dist/lib/api/organizations.js.map +1 -1
  122. package/dist/lib/api/roles.d.ts +22 -0
  123. package/dist/lib/api/roles.d.ts.map +1 -0
  124. package/dist/lib/api/roles.js +27 -0
  125. package/dist/lib/api/roles.js.map +1 -0
  126. package/dist/lib/api/schemas/api-keys.d.ts +62 -0
  127. package/dist/lib/api/schemas/api-keys.d.ts.map +1 -0
  128. package/dist/lib/api/schemas/api-keys.js +29 -0
  129. package/dist/lib/api/schemas/api-keys.js.map +1 -0
  130. package/dist/lib/api/schemas/assets.d.ts +174 -0
  131. package/dist/lib/api/schemas/assets.d.ts.map +1 -0
  132. package/dist/lib/api/schemas/assets.js +100 -0
  133. package/dist/lib/api/schemas/assets.js.map +1 -0
  134. package/dist/lib/api/schemas/documents.d.ts +325 -0
  135. package/dist/lib/api/schemas/documents.d.ts.map +1 -0
  136. package/dist/lib/api/schemas/documents.js +162 -0
  137. package/dist/lib/api/schemas/documents.js.map +1 -0
  138. package/dist/lib/api/schemas/organizations.d.ts +41 -0
  139. package/dist/lib/api/schemas/organizations.d.ts.map +1 -0
  140. package/dist/lib/api/schemas/organizations.js +57 -0
  141. package/dist/lib/api/schemas/organizations.js.map +1 -0
  142. package/dist/lib/api/schemas/roles.d.ts +77 -0
  143. package/dist/lib/api/schemas/roles.d.ts.map +1 -0
  144. package/dist/lib/api/schemas/roles.js +43 -0
  145. package/dist/lib/api/schemas/roles.js.map +1 -0
  146. package/dist/lib/api/schemas/user.d.ts +10 -0
  147. package/dist/lib/api/schemas/user.d.ts.map +1 -0
  148. package/dist/lib/api/schemas/user.js +12 -0
  149. package/dist/lib/api/schemas/user.js.map +1 -0
  150. package/dist/lib/api/user.d.ts +4 -6
  151. package/dist/lib/api/user.d.ts.map +1 -1
  152. package/dist/lib/api/user.js.map +1 -1
  153. package/dist/lib/app-augment.d.ts +32 -0
  154. package/dist/lib/app-augment.d.ts.map +1 -0
  155. package/dist/lib/app-augment.js +19 -0
  156. package/dist/lib/app-augment.js.map +1 -0
  157. package/dist/lib/auth/auth-hooks.d.ts +2 -1
  158. package/dist/lib/auth/auth-hooks.d.ts.map +1 -1
  159. package/dist/lib/auth/auth-hooks.js +22 -2
  160. package/dist/lib/auth/auth-hooks.js.map +1 -1
  161. package/dist/lib/auth/provider.d.ts +5 -0
  162. package/dist/lib/auth/provider.d.ts.map +1 -1
  163. package/dist/lib/client/index.d.ts +4 -0
  164. package/dist/lib/client/index.d.ts.map +1 -1
  165. package/dist/lib/client/index.js +7 -0
  166. package/dist/lib/client/index.js.map +1 -1
  167. package/dist/lib/components/admin/confirm-dialog/confirm-dialog.svelte.d.ts +16 -0
  168. package/dist/lib/components/admin/confirm-dialog/confirm-dialog.svelte.d.ts.map +1 -0
  169. package/dist/lib/components/admin/confirm-dialog/confirm-dialog.svelte.js +30 -0
  170. package/dist/lib/components/admin/confirm-dialog/confirm-dialog.svelte.js.map +1 -0
  171. package/dist/lib/db/interfaces/document.d.ts.map +1 -1
  172. package/dist/lib/db/interfaces/index.d.ts +3 -1
  173. package/dist/lib/db/interfaces/index.d.ts.map +1 -1
  174. package/dist/lib/db/interfaces/organization.d.ts +1 -1
  175. package/dist/lib/db/interfaces/organization.d.ts.map +1 -1
  176. package/dist/lib/db/interfaces/role.d.ts +25 -0
  177. package/dist/lib/db/interfaces/role.d.ts.map +1 -0
  178. package/dist/lib/db/interfaces/role.js +2 -0
  179. package/dist/lib/db/interfaces/role.js.map +1 -0
  180. package/dist/lib/engine.d.ts.map +1 -1
  181. package/dist/lib/engine.js +5 -0
  182. package/dist/lib/engine.js.map +1 -1
  183. package/dist/lib/field-access.d.ts +30 -0
  184. package/dist/lib/field-access.d.ts.map +1 -0
  185. package/dist/lib/field-access.js +80 -0
  186. package/dist/lib/field-access.js.map +1 -0
  187. package/dist/lib/hooks.d.ts +2 -0
  188. package/dist/lib/hooks.d.ts.map +1 -1
  189. package/dist/lib/hooks.js +23 -13
  190. package/dist/lib/hooks.js.map +1 -1
  191. package/dist/lib/local-api/collection-api.d.ts +2 -0
  192. package/dist/lib/local-api/collection-api.d.ts.map +1 -1
  193. package/dist/lib/local-api/collection-api.js +98 -30
  194. package/dist/lib/local-api/collection-api.js.map +1 -1
  195. package/dist/lib/local-api/index.d.ts.map +1 -1
  196. package/dist/lib/local-api/index.js.map +1 -1
  197. package/dist/lib/local-api/permissions.d.ts +26 -26
  198. package/dist/lib/local-api/permissions.d.ts.map +1 -1
  199. package/dist/lib/local-api/permissions.js +122 -80
  200. package/dist/lib/local-api/permissions.js.map +1 -1
  201. package/dist/lib/permissions-context.svelte.d.ts +44 -0
  202. package/dist/lib/permissions-context.svelte.d.ts.map +1 -0
  203. package/dist/lib/permissions-context.svelte.js +80 -0
  204. package/dist/lib/permissions-context.svelte.js.map +1 -0
  205. package/dist/lib/routes/assets-bulk.d.ts.map +1 -1
  206. package/dist/lib/routes/assets-bulk.js +10 -3
  207. package/dist/lib/routes/assets-bulk.js.map +1 -1
  208. package/dist/lib/routes/assets-by-id.d.ts.map +1 -1
  209. package/dist/lib/routes/assets-by-id.js +11 -1
  210. package/dist/lib/routes/assets-by-id.js.map +1 -1
  211. package/dist/lib/routes/assets-references-counts.d.ts.map +1 -1
  212. package/dist/lib/routes/assets-references-counts.js +12 -2
  213. package/dist/lib/routes/assets-references-counts.js.map +1 -1
  214. package/dist/lib/routes/assets.d.ts.map +1 -1
  215. package/dist/lib/routes/assets.js +14 -13
  216. package/dist/lib/routes/assets.js.map +1 -1
  217. package/dist/lib/routes/document-versions.d.ts.map +1 -1
  218. package/dist/lib/routes/document-versions.js +16 -2
  219. package/dist/lib/routes/document-versions.js.map +1 -1
  220. package/dist/lib/routes/documents-by-id.d.ts.map +1 -1
  221. package/dist/lib/routes/documents-by-id.js +15 -3
  222. package/dist/lib/routes/documents-by-id.js.map +1 -1
  223. package/dist/lib/routes/documents-query.d.ts.map +1 -1
  224. package/dist/lib/routes/documents-query.js +13 -10
  225. package/dist/lib/routes/documents-query.js.map +1 -1
  226. package/dist/lib/routes/documents.d.ts.map +1 -1
  227. package/dist/lib/routes/documents.js +29 -26
  228. package/dist/lib/routes/documents.js.map +1 -1
  229. package/dist/lib/routes/organizations-by-id.d.ts.map +1 -1
  230. package/dist/lib/routes/organizations-by-id.js +17 -4
  231. package/dist/lib/routes/organizations-by-id.js.map +1 -1
  232. package/dist/lib/routes/organizations-invitations.d.ts.map +1 -1
  233. package/dist/lib/routes/organizations-invitations.js +48 -18
  234. package/dist/lib/routes/organizations-invitations.js.map +1 -1
  235. package/dist/lib/routes/organizations-members.d.ts.map +1 -1
  236. package/dist/lib/routes/organizations-members.js +24 -18
  237. package/dist/lib/routes/organizations-members.js.map +1 -1
  238. package/dist/lib/routes/organizations-switch.d.ts.map +1 -1
  239. package/dist/lib/routes/organizations-switch.js +7 -3
  240. package/dist/lib/routes/organizations-switch.js.map +1 -1
  241. package/dist/lib/routes/organizations.d.ts.map +1 -1
  242. package/dist/lib/routes/organizations.js +11 -5
  243. package/dist/lib/routes/organizations.js.map +1 -1
  244. package/dist/lib/routes/roles-by-name.d.ts +4 -0
  245. package/dist/lib/routes/roles-by-name.d.ts.map +1 -0
  246. package/dist/lib/routes/roles-by-name.js +112 -0
  247. package/dist/lib/routes/roles-by-name.js.map +1 -0
  248. package/dist/lib/routes/roles.d.ts +4 -0
  249. package/dist/lib/routes/roles.d.ts.map +1 -0
  250. package/dist/lib/routes/roles.js +91 -0
  251. package/dist/lib/routes/roles.js.map +1 -0
  252. package/dist/lib/routes/user-preferences.d.ts.map +1 -1
  253. package/dist/lib/routes/user-preferences.js +7 -13
  254. package/dist/lib/routes/user-preferences.js.map +1 -1
  255. package/dist/lib/routes-exports.d.ts +2 -0
  256. package/dist/lib/routes-exports.d.ts.map +1 -1
  257. package/dist/lib/routes-exports.js +3 -0
  258. package/dist/lib/routes-exports.js.map +1 -1
  259. package/dist/lib/save-state-context.svelte.d.ts +8 -0
  260. package/dist/lib/save-state-context.svelte.d.ts.map +1 -0
  261. package/dist/lib/save-state-context.svelte.js +9 -0
  262. package/dist/lib/save-state-context.svelte.js.map +1 -0
  263. package/dist/lib/schema-utils/validator.d.ts.map +1 -1
  264. package/dist/lib/schema-utils/validator.js +14 -0
  265. package/dist/lib/schema-utils/validator.js.map +1 -1
  266. package/dist/lib/server/index.d.ts +1 -0
  267. package/dist/lib/server/index.d.ts.map +1 -1
  268. package/dist/lib/server/index.js +1 -0
  269. package/dist/lib/server/index.js.map +1 -1
  270. package/dist/lib/services/index.d.ts +1 -0
  271. package/dist/lib/services/index.d.ts.map +1 -1
  272. package/dist/lib/services/index.js +1 -0
  273. package/dist/lib/services/index.js.map +1 -1
  274. package/dist/lib/services/roles-service.d.ts +35 -0
  275. package/dist/lib/services/roles-service.d.ts.map +1 -0
  276. package/dist/lib/services/roles-service.js +91 -0
  277. package/dist/lib/services/roles-service.js.map +1 -0
  278. package/dist/lib/services/version-service.d.ts.map +1 -1
  279. package/dist/lib/services/version-service.js.map +1 -1
  280. package/dist/lib/types/auth.d.ts +43 -9
  281. package/dist/lib/types/auth.d.ts.map +1 -1
  282. package/dist/lib/types/auth.js +31 -26
  283. package/dist/lib/types/auth.js.map +1 -1
  284. package/dist/lib/types/capabilities.d.ts +104 -0
  285. package/dist/lib/types/capabilities.d.ts.map +1 -0
  286. package/dist/lib/types/capabilities.js +217 -0
  287. package/dist/lib/types/capabilities.js.map +1 -0
  288. package/dist/lib/types/index.d.ts +1 -0
  289. package/dist/lib/types/index.d.ts.map +1 -1
  290. package/dist/lib/types/index.js +1 -0
  291. package/dist/lib/types/index.js.map +1 -1
  292. package/dist/lib/types/organization.d.ts +13 -4
  293. package/dist/lib/types/organization.d.ts.map +1 -1
  294. package/dist/lib/types/schemas.d.ts +71 -0
  295. package/dist/lib/types/schemas.d.ts.map +1 -1
  296. package/dist/lib/types/sidebar.d.ts +1 -1
  297. package/dist/lib/types/sidebar.d.ts.map +1 -1
  298. package/dist/lib/utils/mime-detect.d.ts.map +1 -1
  299. package/dist/lib/utils/mime-detect.js +28 -6
  300. package/dist/lib/utils/mime-detect.js.map +1 -1
  301. package/dist/local-api/collection-api.d.ts +2 -0
  302. package/dist/local-api/collection-api.d.ts.map +1 -1
  303. package/dist/local-api/collection-api.js +98 -30
  304. package/dist/local-api/index.d.ts.map +1 -1
  305. package/dist/local-api/permissions.d.ts +26 -26
  306. package/dist/local-api/permissions.d.ts.map +1 -1
  307. package/dist/local-api/permissions.js +122 -80
  308. package/dist/permissions-context.svelte.d.ts +44 -0
  309. package/dist/permissions-context.svelte.d.ts.map +1 -0
  310. package/dist/permissions-context.svelte.js +79 -0
  311. package/dist/plugins/README.md +20 -20
  312. package/dist/routes/assets-bulk.d.ts.map +1 -1
  313. package/dist/routes/assets-bulk.js +10 -3
  314. package/dist/routes/assets-by-id.d.ts.map +1 -1
  315. package/dist/routes/assets-by-id.js +11 -1
  316. package/dist/routes/assets-references-counts.d.ts.map +1 -1
  317. package/dist/routes/assets-references-counts.js +12 -2
  318. package/dist/routes/assets.d.ts.map +1 -1
  319. package/dist/routes/assets.js +14 -13
  320. package/dist/routes/document-versions.d.ts.map +1 -1
  321. package/dist/routes/document-versions.js +16 -2
  322. package/dist/routes/documents-by-id.d.ts.map +1 -1
  323. package/dist/routes/documents-by-id.js +15 -3
  324. package/dist/routes/documents-query.d.ts.map +1 -1
  325. package/dist/routes/documents-query.js +13 -10
  326. package/dist/routes/documents.d.ts.map +1 -1
  327. package/dist/routes/documents.js +29 -26
  328. package/dist/routes/organizations-by-id.d.ts.map +1 -1
  329. package/dist/routes/organizations-by-id.js +17 -4
  330. package/dist/routes/organizations-invitations.d.ts.map +1 -1
  331. package/dist/routes/organizations-invitations.js +48 -18
  332. package/dist/routes/organizations-members.d.ts.map +1 -1
  333. package/dist/routes/organizations-members.js +24 -18
  334. package/dist/routes/organizations-switch.d.ts.map +1 -1
  335. package/dist/routes/organizations-switch.js +7 -3
  336. package/dist/routes/organizations.d.ts.map +1 -1
  337. package/dist/routes/organizations.js +11 -5
  338. package/dist/routes/roles-by-name.d.ts +4 -0
  339. package/dist/routes/roles-by-name.d.ts.map +1 -0
  340. package/dist/routes/roles-by-name.js +111 -0
  341. package/dist/routes/roles.d.ts +4 -0
  342. package/dist/routes/roles.d.ts.map +1 -0
  343. package/dist/routes/roles.js +90 -0
  344. package/dist/routes/user-preferences.d.ts.map +1 -1
  345. package/dist/routes/user-preferences.js +7 -13
  346. package/dist/routes-exports.d.ts +2 -0
  347. package/dist/routes-exports.d.ts.map +1 -1
  348. package/dist/routes-exports.js +3 -0
  349. package/dist/save-state-context.svelte.d.ts +8 -0
  350. package/dist/save-state-context.svelte.d.ts.map +1 -0
  351. package/dist/save-state-context.svelte.js +8 -0
  352. package/dist/schema-utils/validator.d.ts.map +1 -1
  353. package/dist/schema-utils/validator.js +14 -0
  354. package/dist/server/index.d.ts +1 -0
  355. package/dist/server/index.d.ts.map +1 -1
  356. package/dist/server/index.js +1 -0
  357. package/dist/services/index.d.ts +1 -0
  358. package/dist/services/index.d.ts.map +1 -1
  359. package/dist/services/index.js +1 -0
  360. package/dist/services/roles-service.d.ts +35 -0
  361. package/dist/services/roles-service.d.ts.map +1 -0
  362. package/dist/services/roles-service.js +90 -0
  363. package/dist/services/version-service.d.ts.map +1 -1
  364. package/dist/types/auth.d.ts +43 -9
  365. package/dist/types/auth.d.ts.map +1 -1
  366. package/dist/types/auth.js +31 -26
  367. package/dist/types/capabilities.d.ts +104 -0
  368. package/dist/types/capabilities.d.ts.map +1 -0
  369. package/dist/types/capabilities.js +216 -0
  370. package/dist/types/index.d.ts +1 -0
  371. package/dist/types/index.d.ts.map +1 -1
  372. package/dist/types/index.js +1 -0
  373. package/dist/types/organization.d.ts +13 -4
  374. package/dist/types/organization.d.ts.map +1 -1
  375. package/dist/types/schemas.d.ts +71 -0
  376. package/dist/types/schemas.d.ts.map +1 -1
  377. package/dist/types/sidebar.d.ts +1 -1
  378. package/dist/types/sidebar.d.ts.map +1 -1
  379. package/dist/utils/mime-detect.d.ts.map +1 -1
  380. package/dist/utils/mime-detect.js +28 -6
  381. package/package.json +142 -138
@@ -0,0 +1,119 @@
1
+ <script lang="ts">
2
+ import { Shield, X, Copy } from '@lucide/svelte';
3
+ import { toast } from 'svelte-sonner';
4
+ import { Button } from '@aphexcms/ui/shadcn/button';
5
+ import { Badge } from '@aphexcms/ui/shadcn/badge';
6
+ import { usePermissions } from '../../permissions-context.svelte';
7
+
8
+ /**
9
+ * A floating dev panel that surfaces the caller's resolved RBAC state so
10
+ * you can see exactly what the client thinks you can do. Mirrors the
11
+ * server-side capability set hydrated by the auth hook.
12
+ *
13
+ * Mount once near the root of your admin layout. Hidden by default —
14
+ * clicking the shield toggles the panel open.
15
+ */
16
+
17
+ const perms = usePermissions();
18
+ let open = $state(false);
19
+
20
+ const capabilities = $derived([...perms.capabilities].sort());
21
+ const grouped = $derived.by(() => {
22
+ const groups = new Map<string, string[]>();
23
+ for (const cap of capabilities) {
24
+ const prefix = cap.includes('.') ? (cap.split('.')[0] ?? 'other') : 'other';
25
+ if (!groups.has(prefix)) groups.set(prefix, []);
26
+ groups.get(prefix)!.push(cap);
27
+ }
28
+ return Array.from(groups.entries()).sort(([a], [b]) => a.localeCompare(b));
29
+ });
30
+
31
+ async function copyJSON() {
32
+ const payload = {
33
+ role: perms.role,
34
+ capabilities
35
+ };
36
+ try {
37
+ await navigator.clipboard.writeText(JSON.stringify(payload, null, 2));
38
+ toast.success('Copied RBAC snapshot');
39
+ } catch {
40
+ toast.error('Copy failed');
41
+ }
42
+ }
43
+ </script>
44
+
45
+ {#if open}
46
+ <div
47
+ class="bg-background fixed right-4 bottom-4 z-50 w-80 overflow-hidden rounded-lg border shadow-lg"
48
+ role="dialog"
49
+ aria-label="Permissions debug"
50
+ >
51
+ <div class="border-b px-3 py-2">
52
+ <div class="flex items-center justify-between gap-2">
53
+ <div class="flex items-center gap-2">
54
+ <Shield class="h-3.5 w-3.5" />
55
+ <span class="text-sm font-semibold">RBAC</span>
56
+ </div>
57
+ <div class="flex items-center gap-1">
58
+ <Button
59
+ variant="ghost"
60
+ size="sm"
61
+ class="h-6 w-6 p-0"
62
+ onclick={copyJSON}
63
+ title="Copy JSON"
64
+ >
65
+ <Copy class="h-3 w-3" />
66
+ </Button>
67
+ <Button
68
+ variant="ghost"
69
+ size="sm"
70
+ class="h-6 w-6 p-0"
71
+ onclick={() => (open = false)}
72
+ title="Close"
73
+ >
74
+ <X class="h-3 w-3" />
75
+ </Button>
76
+ </div>
77
+ </div>
78
+ <div class="mt-1 flex items-center gap-1.5 text-xs">
79
+ <span class="text-muted-foreground">role:</span>
80
+ {#if perms.role}
81
+ <Badge variant="secondary" class="text-[10px]">{perms.role}</Badge>
82
+ {:else}
83
+ <span class="text-muted-foreground italic">none</span>
84
+ {/if}
85
+ </div>
86
+ </div>
87
+
88
+ <div class="max-h-80 space-y-3 overflow-y-auto p-3">
89
+ {#if capabilities.length === 0}
90
+ <p class="text-muted-foreground py-4 text-center text-xs">No capabilities granted.</p>
91
+ {:else}
92
+ {#each grouped as [prefix, caps] (prefix)}
93
+ <div class="space-y-1">
94
+ <p class="text-muted-foreground text-[10px] font-semibold tracking-wider uppercase">
95
+ {prefix}
96
+ </p>
97
+ <div class="flex flex-wrap gap-1">
98
+ {#each caps as cap (cap)}
99
+ <Badge variant="outline" class="font-mono text-[10px]">
100
+ {cap.split('.').slice(1).join('.') || cap}
101
+ </Badge>
102
+ {/each}
103
+ </div>
104
+ </div>
105
+ {/each}
106
+ {/if}
107
+ </div>
108
+ </div>
109
+ {:else}
110
+ <button
111
+ type="button"
112
+ onclick={() => (open = true)}
113
+ class="bg-background hover:bg-muted fixed right-4 bottom-4 z-50 flex h-9 w-9 items-center justify-center rounded-full border shadow-sm transition-colors"
114
+ title="Show permissions"
115
+ aria-label="Show permissions debug"
116
+ >
117
+ <Shield class="h-4 w-4" />
118
+ </button>
119
+ {/if}
@@ -0,0 +1,4 @@
1
+ declare const PermissionsDebug: import("svelte").Component<Record<string, never>, {}, "">;
2
+ type PermissionsDebug = ReturnType<typeof PermissionsDebug>;
3
+ export default PermissionsDebug;
4
+ //# sourceMappingURL=PermissionsDebug.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PermissionsDebug.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/PermissionsDebug.svelte.ts"],"names":[],"mappings":"AA6GA,QAAA,MAAM,gBAAgB,2DAAwC,CAAC;AAC/D,KAAK,gBAAgB,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAC5D,eAAe,gBAAgB,CAAC"}
@@ -264,7 +264,9 @@
264
264
  <p class="text-destructive text-sm font-medium">
265
265
  Failed to render field "{field.name}" ({field.type})
266
266
  </p>
267
- <p class="text-muted-foreground mt-1 text-xs">{error instanceof Error ? error.message : 'Unknown error'}</p>
267
+ <p class="text-muted-foreground mt-1 text-xs">
268
+ {error instanceof Error ? error.message : 'Unknown error'}
269
+ </p>
268
270
  <button class="text-primary mt-2 text-xs underline" onclick={reset}> Try again </button>
269
271
  </div>
270
272
  {/snippet}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaField.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/SchemaField.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,KAAK,EAGL,MAAM,qBAAqB,CAAC;AAyB9B,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAG9C,UAAU,KAAK;IACd,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AA2NF,QAAA,MAAM,WAAW;sCA7KgC,GAAG,YAAW,GAAG;MA6KT,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"SchemaField.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/admin/SchemaField.svelte.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,KAAK,EAGL,MAAM,qBAAqB,CAAC;AAyB9B,OAAO,WAAW,MAAM,sBAAsB,CAAC;AAG9C,UAAU,KAAK;IACd,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,GAAG,CAAC;IACX,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACnC,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AA6NF,QAAA,MAAM,WAAW;sCA/KgC,GAAG,YAAW,GAAG;MA+KT,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,35 @@
1
+ <script lang="ts">
2
+ import * as AlertDialog from '@aphexcms/ui/shadcn/alert-dialog';
3
+ import { Button } from '@aphexcms/ui/shadcn/button';
4
+ import { confirmDialogState, resolveConfirmDialog } from './confirm-dialog.svelte';
5
+
6
+ function handleOpenChange(open: boolean) {
7
+ if (!open && confirmDialogState.open) {
8
+ resolveConfirmDialog(false);
9
+ }
10
+ }
11
+ </script>
12
+
13
+ <AlertDialog.Root bind:open={confirmDialogState.open} onOpenChange={handleOpenChange}>
14
+ <AlertDialog.Content>
15
+ <AlertDialog.Header>
16
+ <AlertDialog.Title class="break-words">{confirmDialogState.title}</AlertDialog.Title>
17
+ {#if confirmDialogState.description}
18
+ <AlertDialog.Description class="break-words">
19
+ {confirmDialogState.description}
20
+ </AlertDialog.Description>
21
+ {/if}
22
+ </AlertDialog.Header>
23
+ <AlertDialog.Footer>
24
+ <Button variant="outline" onclick={() => resolveConfirmDialog(false)}>
25
+ {confirmDialogState.cancelText}
26
+ </Button>
27
+ <Button
28
+ variant={confirmDialogState.variant === 'destructive' ? 'destructive' : 'default'}
29
+ onclick={() => resolveConfirmDialog(true)}
30
+ >
31
+ {confirmDialogState.confirmText}
32
+ </Button>
33
+ </AlertDialog.Footer>
34
+ </AlertDialog.Content>
35
+ </AlertDialog.Root>
@@ -0,0 +1,19 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const ConfirmDialogHost: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
15
+ [evt: string]: CustomEvent<any>;
16
+ }, {}, {}, string>;
17
+ type ConfirmDialogHost = InstanceType<typeof ConfirmDialogHost>;
18
+ export default ConfirmDialogHost;
19
+ //# sourceMappingURL=ConfirmDialogHost.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmDialogHost.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/confirm-dialog/ConfirmDialogHost.svelte.ts"],"names":[],"mappings":"AA0CA,UAAU,kCAAkC,CAAC,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,GAAG,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,MAAM;IACpM,KAAK,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,KAAK,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,QAAQ,CAAA;KAAE,GAAG,OAAO,CAAC;IACjK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,KAAK,CAAA;KAAC,GAAG,OAAO,GAAG;QAAE,IAAI,CAAC,EAAE,GAAG,CAAC;QAAC,GAAG,CAAC,EAAE,GAAG,CAAA;KAAE,CAAC;IACtG,YAAY,CAAC,EAAE,QAAQ,CAAC;CAC3B;AAKD,QAAA,MAAM,iBAAiB;;kBAA+E,CAAC;AACrF,KAAK,iBAAiB,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAClE,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,16 @@
1
+ export interface ConfirmDialogOptions {
2
+ title: string;
3
+ description?: string;
4
+ confirmText?: string;
5
+ cancelText?: string;
6
+ variant?: 'default' | 'destructive';
7
+ }
8
+ interface ConfirmDialogState extends ConfirmDialogOptions {
9
+ open: boolean;
10
+ resolve: ((value: boolean) => void) | null;
11
+ }
12
+ export declare const confirmDialogState: ConfirmDialogState;
13
+ export declare function confirmDialog(options: ConfirmDialogOptions): Promise<boolean>;
14
+ export declare function resolveConfirmDialog(value: boolean): void;
15
+ export {};
16
+ //# sourceMappingURL=confirm-dialog.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"confirm-dialog.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/confirm-dialog/confirm-dialog.svelte.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;CACpC;AAED,UAAU,kBAAmB,SAAQ,oBAAoB;IACxD,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;CAC3C;AAED,eAAO,MAAM,kBAAkB,oBAQ7B,CAAC;AAEH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,OAAO,CAAC,CAa7E;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,QAKlD"}
@@ -0,0 +1,29 @@
1
+ export const confirmDialogState = $state({
2
+ open: false,
3
+ title: '',
4
+ description: undefined,
5
+ confirmText: 'Confirm',
6
+ cancelText: 'Cancel',
7
+ variant: 'default',
8
+ resolve: null
9
+ });
10
+ export function confirmDialog(options) {
11
+ return new Promise((resolve) => {
12
+ if (confirmDialogState.resolve) {
13
+ confirmDialogState.resolve(false);
14
+ }
15
+ confirmDialogState.title = options.title;
16
+ confirmDialogState.description = options.description;
17
+ confirmDialogState.confirmText = options.confirmText ?? 'Confirm';
18
+ confirmDialogState.cancelText = options.cancelText ?? 'Cancel';
19
+ confirmDialogState.variant = options.variant ?? 'default';
20
+ confirmDialogState.resolve = resolve;
21
+ confirmDialogState.open = true;
22
+ });
23
+ }
24
+ export function resolveConfirmDialog(value) {
25
+ const r = confirmDialogState.resolve;
26
+ confirmDialogState.resolve = null;
27
+ confirmDialogState.open = false;
28
+ r?.(value);
29
+ }
@@ -342,7 +342,11 @@
342
342
  });
343
343
  }
344
344
 
345
- editingIndex = arrayValue.length;
345
+ // Add to array immediately so document auto-save captures it
346
+ const newArray = [...keyedItems, newItem];
347
+ onUpdate(newArray);
348
+
349
+ editingIndex = newArray.length - 1;
346
350
  editingType = selectedType;
347
351
  editingSchema = schema;
348
352
  editingValue = newItem;
@@ -369,32 +373,22 @@
369
373
  onUpdate(newArray);
370
374
  }
371
375
 
372
- function handleModalSave(editedData: Record<string, any>) {
376
+ // Write-through: propagate every field change from the modal to the array immediately
377
+ function handleModalUpdate(updatedData: Record<string, any>) {
373
378
  if (editingIndex === null || !editingType) return;
374
379
 
375
- const itemData: Record<string, any> = { ...editedData, _type: editingType };
376
- // Preserve _key if editing existing item
377
- if ((editingValue as any)._key) {
378
- itemData._key = (editingValue as any)._key;
380
+ const itemData: Record<string, any> = { ...updatedData, _type: editingType };
381
+ if (editingValue._key) {
382
+ itemData._key = editingValue._key;
379
383
  } else {
380
384
  itemData._key = generateKey();
381
385
  }
382
386
 
383
- const newArray = [...keyedItems];
384
-
385
- if (editingIndex >= newArray.length) {
386
- newArray.push(itemData);
387
- } else {
388
- newArray[editingIndex] = itemData;
389
- }
387
+ editingValue = itemData;
390
388
 
389
+ const newArray = [...keyedItems];
390
+ newArray[editingIndex] = itemData;
391
391
  onUpdate(newArray);
392
-
393
- modalOpen = false;
394
- editingIndex = null;
395
- editingType = null;
396
- editingSchema = null;
397
- editingValue = {};
398
392
  }
399
393
 
400
394
  function handleModalClose() {
@@ -440,9 +434,11 @@
440
434
  {#if isGridLayout}
441
435
  <!-- Grid layout for images -->
442
436
  {#if arrayValue.length === 0}
443
- <div class="border-border/50 flex h-32 items-center justify-center rounded-md border border-dashed">
437
+ <div
438
+ class="border-border/50 flex h-32 items-center justify-center rounded-md border border-dashed"
439
+ >
444
440
  <div class="text-center">
445
- <ImageIcon class="mx-auto h-8 w-8 text-muted-foreground" />
441
+ <ImageIcon class="text-muted-foreground mx-auto h-8 w-8" />
446
442
  <p class="text-muted-foreground mt-1 text-xs">No images yet</p>
447
443
  </div>
448
444
  </div>
@@ -455,18 +451,16 @@
455
451
  class="border-border/50 bg-background group relative aspect-square overflow-hidden rounded-md border"
456
452
  class:opacity-50={sortable.isDragging}
457
453
  >
458
- <!-- svelte-ignore a11y_click_events_have_key_events -->
459
- <!-- svelte-ignore a11y_no_static_element_interactions -->
460
- <!-- svelte-ignore a11y_click_events_have_key_events -->
461
- <!-- svelte-ignore a11y_no_static_element_interactions -->
462
454
  <div
463
455
  class="h-full w-full cursor-pointer"
464
456
  onclick={() => handleOpenImageModal(index)}
465
457
  >
466
458
  {#if item?.asset?._ref}
467
459
  {#await assets.getById(item.asset._ref)}
468
- <div class="flex h-full w-full items-center justify-center bg-muted">
469
- <div class="border-primary h-4 w-4 animate-spin rounded-full border-b-2"></div>
460
+ <div class="bg-muted flex h-full w-full items-center justify-center">
461
+ <div
462
+ class="border-primary h-4 w-4 animate-spin rounded-full border-b-2"
463
+ ></div>
470
464
  </div>
471
465
  {:then result}
472
466
  {#if result.success && result.data?.url}
@@ -477,40 +471,41 @@
477
471
  loading="lazy"
478
472
  />
479
473
  {:else}
480
- <div class="flex h-full w-full items-center justify-center bg-muted">
481
- <ImageIcon class="h-8 w-8 text-muted-foreground" />
474
+ <div class="bg-muted flex h-full w-full items-center justify-center">
475
+ <ImageIcon class="text-muted-foreground h-8 w-8" />
482
476
  </div>
483
477
  {/if}
484
478
  {:catch}
485
- <div class="flex h-full w-full items-center justify-center bg-muted">
486
- <ImageIcon class="h-8 w-8 text-muted-foreground" />
479
+ <div class="bg-muted flex h-full w-full items-center justify-center">
480
+ <ImageIcon class="text-muted-foreground h-8 w-8" />
487
481
  </div>
488
482
  {/await}
489
483
  {:else}
490
- <div class="flex h-full w-full items-center justify-center bg-muted">
491
- <ImageIcon class="h-8 w-8 text-muted-foreground" />
484
+ <div class="bg-muted flex h-full w-full items-center justify-center">
485
+ <ImageIcon class="text-muted-foreground h-8 w-8" />
492
486
  </div>
493
487
  {/if}
494
488
  </div>
495
489
 
496
490
  <!-- Overlay controls -->
497
491
  {#if !readonly}
498
- <div class="absolute top-1 left-1 opacity-0 group-hover:opacity-100 transition-opacity">
492
+ <div
493
+ class="absolute top-1 left-1 opacity-0 transition-opacity group-hover:opacity-100"
494
+ >
499
495
  <button
500
496
  {@attach sortable.attachHandle}
501
- class="bg-background/80 rounded p-1 cursor-grab active:cursor-grabbing"
497
+ class="bg-background/80 cursor-grab rounded p-1 active:cursor-grabbing"
502
498
  >
503
499
  <GripVertical class="h-3.5 w-3.5" />
504
500
  </button>
505
501
  </div>
506
- <div class="absolute right-1 bottom-1 opacity-0 group-hover:opacity-100 transition-opacity">
502
+ <div
503
+ class="absolute right-1 bottom-1 opacity-0 transition-opacity group-hover:opacity-100"
504
+ >
507
505
  <DropdownMenu.Root>
508
506
  <DropdownMenu.Trigger>
509
507
  {#snippet child({ props })}
510
- <button
511
- {...props}
512
- class="bg-background/80 rounded p-1"
513
- >
508
+ <button {...props} class="bg-background/80 rounded p-1">
514
509
  <Ellipsis class="h-3.5 w-3.5" />
515
510
  </button>
516
511
  {/snippet}
@@ -534,76 +529,74 @@
534
529
  {/each}
535
530
  </div>
536
531
  {:else}
537
- <!-- Default list layout for images -->
538
- <div class="space-y-1">
539
- {#each arrayValue as item, index (`prim-${index}`)}
540
- {@const sortable = createSortable({ id: `prim-${index}`, index, disabled: readonly })}
541
- <div
542
- {@attach sortable.attach}
543
- class="border-border/50 bg-background hover:bg-muted/50 flex h-16 items-center gap-1 rounded border px-1 transition-colors"
544
- class:opacity-50={sortable.isDragging}
545
- >
546
- {#if !readonly}
547
- <button
548
- {@attach sortable.attachHandle}
549
- class="text-muted-foreground hover:text-foreground flex h-8 w-6 cursor-grab items-center justify-center active:cursor-grabbing"
550
- >
551
- <GripVertical class="h-4 w-4" />
552
- </button>
553
- {/if}
554
-
555
- <!-- svelte-ignore a11y_click_events_have_key_events -->
556
- <!-- svelte-ignore a11y_no_static_element_interactions -->
532
+ <!-- Default list layout for images -->
533
+ <div class="space-y-1">
534
+ {#each arrayValue as item, index (`prim-${index}`)}
535
+ {@const sortable = createSortable({ id: `prim-${index}`, index, disabled: readonly })}
557
536
  <div
558
- class="min-w-0 flex-1 cursor-pointer text-left"
559
- onclick={() => handleOpenImageModal(index)}
537
+ {@attach sortable.attach}
538
+ class="border-border/50 bg-background hover:bg-muted/50 flex h-16 items-center gap-1 rounded border px-1 transition-colors"
539
+ class:opacity-50={sortable.isDragging}
560
540
  >
561
- <ImageField
562
- field={{
563
- ...field.of?.[0],
564
- name: `image-${index}`,
565
- type: 'image',
566
- title: `Image ${index + 1}`
567
- }}
568
- value={item}
569
- onUpdate={() => {}}
570
- {readonly}
571
- arrayItem={true}
572
- {organizationId}
573
- />
574
- </div>
541
+ {#if !readonly}
542
+ <button
543
+ {@attach sortable.attachHandle}
544
+ class="text-muted-foreground hover:text-foreground flex h-8 w-6 cursor-grab items-center justify-center active:cursor-grabbing"
545
+ >
546
+ <GripVertical class="h-4 w-4" />
547
+ </button>
548
+ {/if}
575
549
 
576
- {#if !readonly}
577
- <DropdownMenu.Root>
578
- <DropdownMenu.Trigger>
579
- {#snippet child({ props })}
580
- <button
581
- {...props}
582
- class="text-muted-foreground hover:text-foreground flex h-8 w-8 shrink-0 items-center justify-center rounded transition-colors hover:bg-transparent"
550
+ <div
551
+ class="min-w-0 flex-1 cursor-pointer text-left"
552
+ onclick={() => handleOpenImageModal(index)}
553
+ >
554
+ <ImageField
555
+ field={{
556
+ ...field.of?.[0],
557
+ name: `image-${index}`,
558
+ type: 'image',
559
+ title: `Image ${index + 1}`
560
+ }}
561
+ value={item}
562
+ onUpdate={() => {}}
563
+ {readonly}
564
+ arrayItem={true}
565
+ {organizationId}
566
+ />
567
+ </div>
568
+
569
+ {#if !readonly}
570
+ <DropdownMenu.Root>
571
+ <DropdownMenu.Trigger>
572
+ {#snippet child({ props })}
573
+ <button
574
+ {...props}
575
+ class="text-muted-foreground hover:text-foreground flex h-8 w-8 shrink-0 items-center justify-center rounded transition-colors hover:bg-transparent"
576
+ >
577
+ <Ellipsis class="h-4 w-4" />
578
+ </button>
579
+ {/snippet}
580
+ </DropdownMenu.Trigger>
581
+ <DropdownMenu.Content align="end">
582
+ <DropdownMenu.Item onclick={() => handleOpenImageModal(index)}>
583
+ <Pencil class="mr-2 h-4 w-4" />
584
+ Edit
585
+ </DropdownMenu.Item>
586
+ <DropdownMenu.Separator />
587
+ <DropdownMenu.Item
588
+ class="text-destructive focus:text-destructive"
589
+ onclick={() => handleRemoveItem(index)}
583
590
  >
584
- <Ellipsis class="h-4 w-4" />
585
- </button>
586
- {/snippet}
587
- </DropdownMenu.Trigger>
588
- <DropdownMenu.Content align="end">
589
- <DropdownMenu.Item onclick={() => handleOpenImageModal(index)}>
590
- <Pencil class="mr-2 h-4 w-4" />
591
- Edit
592
- </DropdownMenu.Item>
593
- <DropdownMenu.Separator />
594
- <DropdownMenu.Item
595
- class="text-destructive focus:text-destructive"
596
- onclick={() => handleRemoveItem(index)}
597
- >
598
- <Trash2 class="mr-2 h-4 w-4" />
599
- Remove
600
- </DropdownMenu.Item>
601
- </DropdownMenu.Content>
602
- </DropdownMenu.Root>
603
- {/if}
604
- </div>
605
- {/each}
606
- </div>
591
+ <Trash2 class="mr-2 h-4 w-4" />
592
+ Remove
593
+ </DropdownMenu.Item>
594
+ </DropdownMenu.Content>
595
+ </DropdownMenu.Root>
596
+ {/if}
597
+ </div>
598
+ {/each}
599
+ </div>
607
600
  {/if}
608
601
  </DragDropProvider>
609
602
  {/key}
@@ -787,7 +780,10 @@
787
780
  </div>
788
781
 
789
782
  <!-- Title (clickable to edit) -->
790
- <button class="flex-1 truncate text-left text-sm" onclick={() => handleEditItem(index)}>
783
+ <button
784
+ class="flex-1 cursor-pointer truncate text-left text-sm"
785
+ onclick={() => handleEditItem(index)}
786
+ >
791
787
  {getItemTitle(item)}
792
788
  </button>
793
789
 
@@ -869,7 +865,7 @@
869
865
  schema={editingSchema}
870
866
  value={editingValue}
871
867
  onClose={handleModalClose}
872
- onSave={handleModalSave}
868
+ onUpdate={handleModalUpdate}
873
869
  {onOpenReference}
874
870
  {readonly}
875
871
  {organizationId}
@@ -1 +1 @@
1
- {"version":3,"file":"ArrayField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/ArrayField.svelte.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAc,MAAM,wBAAwB,CAAC;AAyBtF,UAAU,KAAK;IACd,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAsyBF,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"ArrayField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/ArrayField.svelte.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,IAAI,cAAc,EAAc,MAAM,wBAAwB,CAAC;AAyBtF,UAAU,KAAK;IACd,KAAK,EAAE,cAAc,CAAC;IACtB,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC;IAC/B,eAAe,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AA0xBF,QAAA,MAAM,UAAU,2CAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}