@aphexcms/cms-core 2.0.10 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (281) hide show
  1. package/dist/api/api-keys.d.ts +4 -0
  2. package/dist/api/api-keys.d.ts.map +1 -1
  3. package/dist/api/assets.d.ts.map +1 -1
  4. package/dist/api/index.d.ts +1 -0
  5. package/dist/api/index.d.ts.map +1 -1
  6. package/dist/api/index.js +1 -0
  7. package/dist/api/roles.d.ts +22 -0
  8. package/dist/api/roles.d.ts.map +1 -0
  9. package/dist/api/roles.js +26 -0
  10. package/dist/api/schemas/api-keys.d.ts +50 -4
  11. package/dist/api/schemas/api-keys.d.ts.map +1 -1
  12. package/dist/api/schemas/api-keys.js +22 -3
  13. package/dist/api/schemas/organizations.d.ts +4 -22
  14. package/dist/api/schemas/organizations.d.ts.map +1 -1
  15. package/dist/api/schemas/organizations.js +13 -2
  16. package/dist/api/schemas/roles.d.ts +77 -0
  17. package/dist/api/schemas/roles.d.ts.map +1 -0
  18. package/dist/api/schemas/roles.js +42 -0
  19. package/dist/app-augment.d.ts +32 -0
  20. package/dist/app-augment.d.ts.map +1 -0
  21. package/dist/app-augment.js +18 -0
  22. package/dist/auth/auth-hooks.d.ts +2 -1
  23. package/dist/auth/auth-hooks.d.ts.map +1 -1
  24. package/dist/auth/auth-hooks.js +22 -2
  25. package/dist/client/index.d.ts +4 -2
  26. package/dist/client/index.d.ts.map +1 -1
  27. package/dist/client/index.js +6 -2
  28. package/dist/components/AdminApp.svelte +300 -140
  29. package/dist/components/AdminApp.svelte.d.ts +8 -0
  30. package/dist/components/AdminApp.svelte.d.ts.map +1 -1
  31. package/dist/components/admin/DocumentEditor.svelte +633 -350
  32. package/dist/components/admin/DocumentEditor.svelte.d.ts +2 -0
  33. package/dist/components/admin/DocumentEditor.svelte.d.ts.map +1 -1
  34. package/dist/components/admin/DocumentVersionPanel.svelte +46 -20
  35. package/dist/components/admin/DocumentVersionPanel.svelte.d.ts.map +1 -1
  36. package/dist/components/admin/MediaBrowser.svelte +70 -30
  37. package/dist/components/admin/MediaBrowser.svelte.d.ts.map +1 -1
  38. package/dist/components/admin/ObjectModal.svelte +70 -95
  39. package/dist/components/admin/ObjectModal.svelte.d.ts +1 -2
  40. package/dist/components/admin/ObjectModal.svelte.d.ts.map +1 -1
  41. package/dist/components/admin/PermissionsDebug.svelte +119 -0
  42. package/dist/components/admin/PermissionsDebug.svelte.d.ts +4 -0
  43. package/dist/components/admin/PermissionsDebug.svelte.d.ts.map +1 -0
  44. package/dist/components/admin/SchemaField.svelte +3 -1
  45. package/dist/components/admin/SchemaField.svelte.d.ts.map +1 -1
  46. package/dist/components/admin/confirm-dialog/ConfirmDialogHost.svelte +8 -10
  47. package/dist/components/admin/confirm-dialog/ConfirmDialogHost.svelte.d.ts.map +1 -1
  48. package/dist/components/admin/fields/ArrayField.svelte +104 -108
  49. package/dist/components/admin/fields/ArrayField.svelte.d.ts.map +1 -1
  50. package/dist/components/admin/fields/FileField.svelte +22 -17
  51. package/dist/components/admin/fields/FileField.svelte.d.ts.map +1 -1
  52. package/dist/components/admin/fields/ImageField.svelte +21 -15
  53. package/dist/components/admin/fields/ImageField.svelte.d.ts.map +1 -1
  54. package/dist/components/admin/fields/ReferenceField.svelte +142 -112
  55. package/dist/components/admin/fields/ReferenceField.svelte.d.ts.map +1 -1
  56. package/dist/components/admin/fields/TextareaField.svelte +4 -3
  57. package/dist/components/admin/fields/TextareaField.svelte.d.ts +2 -2
  58. package/dist/components/admin/fields/TextareaField.svelte.d.ts.map +1 -1
  59. package/dist/components/layout/Sidebar.svelte +21 -11
  60. package/dist/components/layout/Sidebar.svelte.d.ts.map +1 -1
  61. package/dist/components/layout/sidebar/NavMain.svelte +1 -0
  62. package/dist/db/interfaces/document.d.ts.map +1 -1
  63. package/dist/db/interfaces/index.d.ts +3 -1
  64. package/dist/db/interfaces/index.d.ts.map +1 -1
  65. package/dist/db/interfaces/organization.d.ts +1 -1
  66. package/dist/db/interfaces/organization.d.ts.map +1 -1
  67. package/dist/db/interfaces/role.d.ts +25 -0
  68. package/dist/db/interfaces/role.d.ts.map +1 -0
  69. package/dist/db/interfaces/role.js +1 -0
  70. package/dist/engine.d.ts.map +1 -1
  71. package/dist/engine.js +5 -0
  72. package/dist/field-access.d.ts +30 -0
  73. package/dist/field-access.d.ts.map +1 -0
  74. package/dist/field-access.js +79 -0
  75. package/dist/hooks.d.ts +2 -0
  76. package/dist/hooks.d.ts.map +1 -1
  77. package/dist/hooks.js +19 -13
  78. package/dist/lib/api/api-keys.d.ts +4 -0
  79. package/dist/lib/api/api-keys.d.ts.map +1 -1
  80. package/dist/lib/api/api-keys.js.map +1 -1
  81. package/dist/lib/api/assets.d.ts.map +1 -1
  82. package/dist/lib/api/assets.js.map +1 -1
  83. package/dist/lib/api/index.d.ts +1 -0
  84. package/dist/lib/api/index.d.ts.map +1 -1
  85. package/dist/lib/api/index.js +1 -0
  86. package/dist/lib/api/index.js.map +1 -1
  87. package/dist/lib/api/roles.d.ts +22 -0
  88. package/dist/lib/api/roles.d.ts.map +1 -0
  89. package/dist/lib/api/roles.js +27 -0
  90. package/dist/lib/api/roles.js.map +1 -0
  91. package/dist/lib/api/schemas/api-keys.d.ts +50 -4
  92. package/dist/lib/api/schemas/api-keys.d.ts.map +1 -1
  93. package/dist/lib/api/schemas/api-keys.js +22 -3
  94. package/dist/lib/api/schemas/api-keys.js.map +1 -1
  95. package/dist/lib/api/schemas/organizations.d.ts +4 -22
  96. package/dist/lib/api/schemas/organizations.d.ts.map +1 -1
  97. package/dist/lib/api/schemas/organizations.js +13 -2
  98. package/dist/lib/api/schemas/organizations.js.map +1 -1
  99. package/dist/lib/api/schemas/roles.d.ts +77 -0
  100. package/dist/lib/api/schemas/roles.d.ts.map +1 -0
  101. package/dist/lib/api/schemas/roles.js +43 -0
  102. package/dist/lib/api/schemas/roles.js.map +1 -0
  103. package/dist/lib/app-augment.d.ts +32 -0
  104. package/dist/lib/app-augment.d.ts.map +1 -0
  105. package/dist/lib/app-augment.js +19 -0
  106. package/dist/lib/app-augment.js.map +1 -0
  107. package/dist/lib/auth/auth-hooks.d.ts +2 -1
  108. package/dist/lib/auth/auth-hooks.d.ts.map +1 -1
  109. package/dist/lib/auth/auth-hooks.js +22 -2
  110. package/dist/lib/auth/auth-hooks.js.map +1 -1
  111. package/dist/lib/client/index.d.ts +4 -2
  112. package/dist/lib/client/index.d.ts.map +1 -1
  113. package/dist/lib/client/index.js +6 -2
  114. package/dist/lib/client/index.js.map +1 -1
  115. package/dist/lib/db/interfaces/document.d.ts.map +1 -1
  116. package/dist/lib/db/interfaces/index.d.ts +3 -1
  117. package/dist/lib/db/interfaces/index.d.ts.map +1 -1
  118. package/dist/lib/db/interfaces/organization.d.ts +1 -1
  119. package/dist/lib/db/interfaces/organization.d.ts.map +1 -1
  120. package/dist/lib/db/interfaces/role.d.ts +25 -0
  121. package/dist/lib/db/interfaces/role.d.ts.map +1 -0
  122. package/dist/lib/db/interfaces/role.js +2 -0
  123. package/dist/lib/db/interfaces/role.js.map +1 -0
  124. package/dist/lib/engine.d.ts.map +1 -1
  125. package/dist/lib/engine.js +5 -0
  126. package/dist/lib/engine.js.map +1 -1
  127. package/dist/lib/field-access.d.ts +30 -0
  128. package/dist/lib/field-access.d.ts.map +1 -0
  129. package/dist/lib/field-access.js +80 -0
  130. package/dist/lib/field-access.js.map +1 -0
  131. package/dist/lib/hooks.d.ts +2 -0
  132. package/dist/lib/hooks.d.ts.map +1 -1
  133. package/dist/lib/hooks.js +19 -13
  134. package/dist/lib/hooks.js.map +1 -1
  135. package/dist/lib/local-api/collection-api.d.ts +2 -0
  136. package/dist/lib/local-api/collection-api.d.ts.map +1 -1
  137. package/dist/lib/local-api/collection-api.js +98 -30
  138. package/dist/lib/local-api/collection-api.js.map +1 -1
  139. package/dist/lib/local-api/index.d.ts.map +1 -1
  140. package/dist/lib/local-api/index.js.map +1 -1
  141. package/dist/lib/local-api/permissions.d.ts +26 -26
  142. package/dist/lib/local-api/permissions.d.ts.map +1 -1
  143. package/dist/lib/local-api/permissions.js +122 -80
  144. package/dist/lib/local-api/permissions.js.map +1 -1
  145. package/dist/lib/permissions-context.svelte.d.ts +44 -0
  146. package/dist/lib/permissions-context.svelte.d.ts.map +1 -0
  147. package/dist/lib/permissions-context.svelte.js +80 -0
  148. package/dist/lib/permissions-context.svelte.js.map +1 -0
  149. package/dist/lib/routes/assets.d.ts.map +1 -1
  150. package/dist/lib/routes/assets.js.map +1 -1
  151. package/dist/lib/routes/document-versions.d.ts.map +1 -1
  152. package/dist/lib/routes/document-versions.js.map +1 -1
  153. package/dist/lib/routes/organizations-by-id.d.ts.map +1 -1
  154. package/dist/lib/routes/organizations-by-id.js +6 -3
  155. package/dist/lib/routes/organizations-by-id.js.map +1 -1
  156. package/dist/lib/routes/organizations-invitations.d.ts.map +1 -1
  157. package/dist/lib/routes/organizations-invitations.js +17 -7
  158. package/dist/lib/routes/organizations-invitations.js.map +1 -1
  159. package/dist/lib/routes/organizations-members.d.ts.map +1 -1
  160. package/dist/lib/routes/organizations-members.js +15 -7
  161. package/dist/lib/routes/organizations-members.js.map +1 -1
  162. package/dist/lib/routes/organizations.d.ts.map +1 -1
  163. package/dist/lib/routes/organizations.js +3 -0
  164. package/dist/lib/routes/organizations.js.map +1 -1
  165. package/dist/lib/routes/roles-by-name.d.ts +4 -0
  166. package/dist/lib/routes/roles-by-name.d.ts.map +1 -0
  167. package/dist/lib/routes/roles-by-name.js +112 -0
  168. package/dist/lib/routes/roles-by-name.js.map +1 -0
  169. package/dist/lib/routes/roles.d.ts +4 -0
  170. package/dist/lib/routes/roles.d.ts.map +1 -0
  171. package/dist/lib/routes/roles.js +91 -0
  172. package/dist/lib/routes/roles.js.map +1 -0
  173. package/dist/lib/routes-exports.d.ts +2 -0
  174. package/dist/lib/routes-exports.d.ts.map +1 -1
  175. package/dist/lib/routes-exports.js +3 -0
  176. package/dist/lib/routes-exports.js.map +1 -1
  177. package/dist/lib/save-state-context.svelte.d.ts +8 -0
  178. package/dist/lib/save-state-context.svelte.d.ts.map +1 -0
  179. package/dist/lib/save-state-context.svelte.js +9 -0
  180. package/dist/lib/save-state-context.svelte.js.map +1 -0
  181. package/dist/lib/schema-utils/validator.d.ts.map +1 -1
  182. package/dist/lib/schema-utils/validator.js +14 -0
  183. package/dist/lib/schema-utils/validator.js.map +1 -1
  184. package/dist/lib/server/index.d.ts +1 -0
  185. package/dist/lib/server/index.d.ts.map +1 -1
  186. package/dist/lib/server/index.js +1 -0
  187. package/dist/lib/server/index.js.map +1 -1
  188. package/dist/lib/services/index.d.ts +1 -0
  189. package/dist/lib/services/index.d.ts.map +1 -1
  190. package/dist/lib/services/index.js +1 -0
  191. package/dist/lib/services/index.js.map +1 -1
  192. package/dist/lib/services/roles-service.d.ts +35 -0
  193. package/dist/lib/services/roles-service.d.ts.map +1 -0
  194. package/dist/lib/services/roles-service.js +91 -0
  195. package/dist/lib/services/roles-service.js.map +1 -0
  196. package/dist/lib/services/version-service.d.ts.map +1 -1
  197. package/dist/lib/services/version-service.js.map +1 -1
  198. package/dist/lib/types/auth.d.ts +43 -9
  199. package/dist/lib/types/auth.d.ts.map +1 -1
  200. package/dist/lib/types/auth.js +31 -26
  201. package/dist/lib/types/auth.js.map +1 -1
  202. package/dist/lib/types/capabilities.d.ts +104 -0
  203. package/dist/lib/types/capabilities.d.ts.map +1 -0
  204. package/dist/lib/types/capabilities.js +217 -0
  205. package/dist/lib/types/capabilities.js.map +1 -0
  206. package/dist/lib/types/index.d.ts +1 -0
  207. package/dist/lib/types/index.d.ts.map +1 -1
  208. package/dist/lib/types/index.js +1 -0
  209. package/dist/lib/types/index.js.map +1 -1
  210. package/dist/lib/types/organization.d.ts +13 -4
  211. package/dist/lib/types/organization.d.ts.map +1 -1
  212. package/dist/lib/types/schemas.d.ts +71 -0
  213. package/dist/lib/types/schemas.d.ts.map +1 -1
  214. package/dist/lib/types/sidebar.d.ts +1 -1
  215. package/dist/lib/types/sidebar.d.ts.map +1 -1
  216. package/dist/lib/utils/mime-detect.d.ts.map +1 -1
  217. package/dist/lib/utils/mime-detect.js +28 -6
  218. package/dist/lib/utils/mime-detect.js.map +1 -1
  219. package/dist/local-api/collection-api.d.ts +2 -0
  220. package/dist/local-api/collection-api.d.ts.map +1 -1
  221. package/dist/local-api/collection-api.js +98 -30
  222. package/dist/local-api/index.d.ts.map +1 -1
  223. package/dist/local-api/permissions.d.ts +26 -26
  224. package/dist/local-api/permissions.d.ts.map +1 -1
  225. package/dist/local-api/permissions.js +122 -80
  226. package/dist/permissions-context.svelte.d.ts +44 -0
  227. package/dist/permissions-context.svelte.d.ts.map +1 -0
  228. package/dist/permissions-context.svelte.js +79 -0
  229. package/dist/plugins/README.md +20 -20
  230. package/dist/routes/assets.d.ts.map +1 -1
  231. package/dist/routes/document-versions.d.ts.map +1 -1
  232. package/dist/routes/organizations-by-id.d.ts.map +1 -1
  233. package/dist/routes/organizations-by-id.js +6 -3
  234. package/dist/routes/organizations-invitations.d.ts.map +1 -1
  235. package/dist/routes/organizations-invitations.js +17 -7
  236. package/dist/routes/organizations-members.d.ts.map +1 -1
  237. package/dist/routes/organizations-members.js +15 -7
  238. package/dist/routes/organizations.d.ts.map +1 -1
  239. package/dist/routes/organizations.js +3 -0
  240. package/dist/routes/roles-by-name.d.ts +4 -0
  241. package/dist/routes/roles-by-name.d.ts.map +1 -0
  242. package/dist/routes/roles-by-name.js +111 -0
  243. package/dist/routes/roles.d.ts +4 -0
  244. package/dist/routes/roles.d.ts.map +1 -0
  245. package/dist/routes/roles.js +90 -0
  246. package/dist/routes-exports.d.ts +2 -0
  247. package/dist/routes-exports.d.ts.map +1 -1
  248. package/dist/routes-exports.js +3 -0
  249. package/dist/save-state-context.svelte.d.ts +8 -0
  250. package/dist/save-state-context.svelte.d.ts.map +1 -0
  251. package/dist/save-state-context.svelte.js +8 -0
  252. package/dist/schema-utils/validator.d.ts.map +1 -1
  253. package/dist/schema-utils/validator.js +14 -0
  254. package/dist/server/index.d.ts +1 -0
  255. package/dist/server/index.d.ts.map +1 -1
  256. package/dist/server/index.js +1 -0
  257. package/dist/services/index.d.ts +1 -0
  258. package/dist/services/index.d.ts.map +1 -1
  259. package/dist/services/index.js +1 -0
  260. package/dist/services/roles-service.d.ts +35 -0
  261. package/dist/services/roles-service.d.ts.map +1 -0
  262. package/dist/services/roles-service.js +90 -0
  263. package/dist/services/version-service.d.ts.map +1 -1
  264. package/dist/types/auth.d.ts +43 -9
  265. package/dist/types/auth.d.ts.map +1 -1
  266. package/dist/types/auth.js +31 -26
  267. package/dist/types/capabilities.d.ts +104 -0
  268. package/dist/types/capabilities.d.ts.map +1 -0
  269. package/dist/types/capabilities.js +216 -0
  270. package/dist/types/index.d.ts +1 -0
  271. package/dist/types/index.d.ts.map +1 -1
  272. package/dist/types/index.js +1 -0
  273. package/dist/types/organization.d.ts +13 -4
  274. package/dist/types/organization.d.ts.map +1 -1
  275. package/dist/types/schemas.d.ts +71 -0
  276. package/dist/types/schemas.d.ts.map +1 -1
  277. package/dist/types/sidebar.d.ts +1 -1
  278. package/dist/types/sidebar.d.ts.map +1 -1
  279. package/dist/utils/mime-detect.d.ts.map +1 -1
  280. package/dist/utils/mime-detect.js +28 -6
  281. package/package.json +6 -2
@@ -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"}
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import * as AlertDialog from '@aphexcms/ui/shadcn/alert-dialog';
3
- import { buttonVariants } from '@aphexcms/ui/shadcn/button';
3
+ import { Button } from '@aphexcms/ui/shadcn/button';
4
4
  import { confirmDialogState, resolveConfirmDialog } from './confirm-dialog.svelte';
5
5
 
6
6
  function handleOpenChange(open: boolean) {
@@ -13,25 +13,23 @@
13
13
  <AlertDialog.Root bind:open={confirmDialogState.open} onOpenChange={handleOpenChange}>
14
14
  <AlertDialog.Content>
15
15
  <AlertDialog.Header>
16
- <AlertDialog.Title>{confirmDialogState.title}</AlertDialog.Title>
16
+ <AlertDialog.Title class="break-words">{confirmDialogState.title}</AlertDialog.Title>
17
17
  {#if confirmDialogState.description}
18
- <AlertDialog.Description>
18
+ <AlertDialog.Description class="break-words">
19
19
  {confirmDialogState.description}
20
20
  </AlertDialog.Description>
21
21
  {/if}
22
22
  </AlertDialog.Header>
23
23
  <AlertDialog.Footer>
24
- <AlertDialog.Cancel onclick={() => resolveConfirmDialog(false)}>
24
+ <Button variant="outline" onclick={() => resolveConfirmDialog(false)}>
25
25
  {confirmDialogState.cancelText}
26
- </AlertDialog.Cancel>
27
- <AlertDialog.Action
28
- class={buttonVariants({
29
- variant: confirmDialogState.variant === 'destructive' ? 'destructive' : 'default'
30
- })}
26
+ </Button>
27
+ <Button
28
+ variant={confirmDialogState.variant === 'destructive' ? 'destructive' : 'default'}
31
29
  onclick={() => resolveConfirmDialog(true)}
32
30
  >
33
31
  {confirmDialogState.confirmText}
34
- </AlertDialog.Action>
32
+ </Button>
35
33
  </AlertDialog.Footer>
36
34
  </AlertDialog.Content>
37
35
  </AlertDialog.Root>
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmDialogHost.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/confirm-dialog/ConfirmDialogHost.svelte.ts"],"names":[],"mappings":"AA4CA,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"}
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"}
@@ -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"}
@@ -17,6 +17,7 @@
17
17
  import elementEvents from '../../../utils/element-events';
18
18
  import { copyUrlToClipboard, downloadFile } from '../../../utils/asset-actions';
19
19
  import AssetBrowserModal from '../AssetBrowserModal.svelte';
20
+ import { usePermissions } from '../../../permissions-context.svelte';
20
21
 
21
22
  interface Props {
22
23
  field: FileFieldType;
@@ -44,6 +45,12 @@
44
45
  organizationId
45
46
  }: Props = $props();
46
47
 
48
+ // Read-only when forced by caller OR the user lacks asset.upload. Keeps
49
+ // the `readonly` prop as an explicit override for hosts that want to
50
+ // neutralise the field regardless of RBAC state.
51
+ const perms = usePermissions();
52
+ const isReadOnly = $derived(readonly || !perms.can('asset.upload'));
53
+
47
54
  let isDragging = $state(false);
48
55
  let isUploading = $state(false);
49
56
  let uploadError = $state<string | null>(null);
@@ -97,7 +104,7 @@
97
104
  }
98
105
 
99
106
  async function handleFileSelect(files: FileList | null) {
100
- if (readonly || !files || files.length === 0) return;
107
+ if (isReadOnly || !files || files.length === 0) return;
101
108
 
102
109
  const file = files[0]!;
103
110
 
@@ -115,37 +122,37 @@
115
122
  }
116
123
 
117
124
  function handleDragOver(event: DragEvent) {
118
- if (readonly) return;
125
+ if (isReadOnly) return;
119
126
  event.preventDefault();
120
127
  isDragging = true;
121
128
  }
122
129
 
123
130
  function handleDragLeave(event: DragEvent) {
124
- if (readonly) return;
131
+ if (isReadOnly) return;
125
132
  event.preventDefault();
126
133
  isDragging = false;
127
134
  }
128
135
 
129
136
  function handleDrop(event: DragEvent) {
130
- if (readonly) return;
137
+ if (isReadOnly) return;
131
138
  event.preventDefault();
132
139
  isDragging = false;
133
140
  handleFileSelect(event.dataTransfer?.files || null);
134
141
  }
135
142
 
136
143
  function handleFileInputChange(event: Event) {
137
- if (readonly) return;
144
+ if (isReadOnly) return;
138
145
  const target = event.target as HTMLInputElement;
139
146
  handleFileSelect(target.files);
140
147
  }
141
148
 
142
149
  function openFileDialog() {
143
- if (readonly) return;
150
+ if (isReadOnly) return;
144
151
  fileInputRef?.click();
145
152
  }
146
153
 
147
154
  function removeFile() {
148
- if (readonly) return;
155
+ if (isReadOnly) return;
149
156
  onUpdate(null);
150
157
  uploadError = null;
151
158
  }
@@ -271,7 +278,7 @@
271
278
  {/if}
272
279
  </div>
273
280
 
274
- {#if !readonly}
281
+ {#if !isReadOnly}
275
282
  <DropdownMenu>
276
283
  <DropdownMenuTrigger>
277
284
  <Button variant="ghost" size="sm" class="h-8 w-8 p-0">
@@ -312,7 +319,7 @@
312
319
  variant="outline"
313
320
  class="w-full justify-start"
314
321
  onclick={openFileDialog}
315
- disabled={isUploading || readonly}
322
+ disabled={isUploading || isReadOnly}
316
323
  type="button"
317
324
  >
318
325
  {#if isUploading}
@@ -330,9 +337,7 @@
330
337
  <div class="border-border overflow-hidden rounded-md border {validationClasses}">
331
338
  <!-- File info card -->
332
339
  <div class="flex items-center gap-4 p-4">
333
- <div
334
- class="bg-muted flex h-14 w-14 flex-shrink-0 items-center justify-center rounded-lg"
335
- >
340
+ <div class="bg-muted flex h-14 w-14 flex-shrink-0 items-center justify-center rounded-lg">
336
341
  {#if loadingAsset}
337
342
  <div class="border-primary h-6 w-6 animate-spin rounded-full border-b-2"></div>
338
343
  {:else}
@@ -353,7 +358,7 @@
353
358
  </div>
354
359
 
355
360
  <!-- Controls -->
356
- {#if !readonly}
361
+ {#if !isReadOnly}
357
362
  <DropdownMenu>
358
363
  <DropdownMenuTrigger>
359
364
  <Button variant="secondary" size="icon" class="h-8 w-8">
@@ -404,7 +409,7 @@
404
409
  {:else}
405
410
  <!-- Upload bar -->
406
411
  <div
407
- class="border-border flex h-10 items-center overflow-hidden rounded-md border transition-colors {validationClasses} {readonly
412
+ class="border-border flex h-10 items-center overflow-hidden rounded-md border transition-colors {validationClasses} {isReadOnly
408
413
  ? ''
409
414
  : isDragging
410
415
  ? 'bg-primary/5'
@@ -426,7 +431,7 @@
426
431
  {:else}
427
432
  <FileIcon size={16} class="text-muted-foreground" />
428
433
  <span class="text-muted-foreground text-sm">
429
- {readonly ? 'No file' : isDragging ? 'Drop file here' : 'Drag or select a file'}
434
+ {isReadOnly ? 'No file' : isDragging ? 'Drop file here' : 'Drag or select a file'}
430
435
  </span>
431
436
  {/if}
432
437
  </div>
@@ -434,7 +439,7 @@
434
439
  <div class="flex items-center gap-1 pr-2">
435
440
  <button
436
441
  onclick={openFileDialog}
437
- disabled={isUploading || readonly}
442
+ disabled={isUploading || isReadOnly}
438
443
  type="button"
439
444
  class="text-muted-foreground hover:text-foreground flex items-center gap-1 px-2 py-1 text-sm transition-colors disabled:opacity-50"
440
445
  >
@@ -442,7 +447,7 @@
442
447
  Upload
443
448
  </button>
444
449
  <button
445
- disabled={isUploading || readonly}
450
+ disabled={isUploading || isReadOnly}
446
451
  type="button"
447
452
  onclick={() => {
448
453
  showAssetBrowser = true;
@@ -1 +1 @@
1
- {"version":3,"file":"FileField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/FileField.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAiBxE,UAAU,KAAK;IACd,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAgaF,QAAA,MAAM,SAAS,2CAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"FileField.svelte.d.ts","sourceRoot":"","sources":["../../../../src/lib/components/admin/fields/FileField.svelte.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAkBxE,UAAU,KAAK;IACd,KAAK,EAAE,aAAa,CAAC;IACrB,KAAK,EAAE,SAAS,GAAG,IAAI,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,KAAK,IAAI,CAAC;IAC5C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACxB;AAuaF,QAAA,MAAM,SAAS,2CAAwC,CAAC;AACxD,KAAK,SAAS,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAC;AAC9C,eAAe,SAAS,CAAC"}