@anzusystems/common-admin 2.0.0-rc.4 → 2.0.0-rc.6

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 (680) hide show
  1. package/README.md +1 -1
  2. package/dist/AnzuSystemsCommonAdmin.d.ts +42 -32
  3. package/dist/AnzuSystemsCommonAdmin.js.map +1 -1
  4. package/dist/common-admin.css +1 -1
  5. package/dist/common-admin.js +282 -282
  6. package/dist/domains/anzuUser/api/anzuUserApi.d.ts +9 -12
  7. package/dist/domains/anzuUser/api/anzuUserApi.js.map +1 -1
  8. package/dist/domains/anzuUser/components/AAnzuUserDatatable.js.map +1 -1
  9. package/dist/domains/anzuUser/components/AAnzuUserDatatable.vue.d.ts +38 -44
  10. package/dist/domains/anzuUser/components/AAnzuUserDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  11. package/dist/domains/anzuUser/components/AAnzuUserFilter.js.map +1 -1
  12. package/dist/domains/anzuUser/components/AAnzuUserFilter.vue.d.ts +12 -13
  13. package/dist/domains/anzuUser/components/AAnzuUserFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  14. package/dist/domains/anzuUser/components/AAnzuUserForm.js.map +1 -1
  15. package/dist/domains/anzuUser/components/AAnzuUserForm.vue.d.ts +18 -20
  16. package/dist/domains/anzuUser/components/AAnzuUserForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  17. package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.js.map +1 -1
  18. package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  19. package/dist/domains/anzuUser/components/AUserBulkActionDialog.js.map +1 -1
  20. package/dist/domains/anzuUser/components/AUserBulkActionDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  21. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.js.map +1 -1
  22. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.vue.d.ts +2 -3
  23. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  24. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.js.map +1 -1
  25. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.vue.d.ts +9 -15
  26. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  27. package/dist/domains/anzuUser/components/AUserEnabledSwitch.js.map +1 -1
  28. package/dist/domains/anzuUser/components/AUserEnabledSwitch.vue.d.ts +8 -7
  29. package/dist/domains/anzuUser/components/AUserEnabledSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  30. package/dist/domains/anzuUser/components/AUserManageButton.js.map +1 -1
  31. package/dist/domains/anzuUser/components/AUserManageButton.vue.d.ts +0 -1
  32. package/dist/domains/anzuUser/components/AUserManageButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/domains/anzuUser/components/AUserMetadataForm.js.map +1 -1
  34. package/dist/domains/anzuUser/components/AUserMetadataForm.vue.d.ts +8 -9
  35. package/dist/domains/anzuUser/components/AUserMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  36. package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.js.map +1 -1
  37. package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  38. package/dist/domains/anzuUser/components/AUserOtherSystemsTable.js.map +1 -1
  39. package/dist/domains/anzuUser/components/AUserOtherSystemsTable.vue.d.ts +1 -2
  40. package/dist/domains/anzuUser/components/AUserOtherSystemsTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  41. package/dist/domains/anzuUser/components/AUserSystemOverview.js.map +1 -1
  42. package/dist/domains/anzuUser/components/AUserSystemOverview.vue_vue_type_script_setup_true_lang.js.map +1 -1
  43. package/dist/domains/anzuUser/components/AUserSystemPanel.js.map +1 -1
  44. package/dist/domains/anzuUser/components/AUserSystemPanel.vue.d.ts +2 -2
  45. package/dist/domains/anzuUser/components/AUserSystemPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  46. package/dist/domains/anzuUser/components/AUserSystemStatusChip.js.map +1 -1
  47. package/dist/domains/anzuUser/components/AUserSystemStatusChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  48. package/dist/domains/anzuUser/components/AUserTabsShell.js.map +1 -1
  49. package/dist/domains/anzuUser/components/AUserTabsShell.vue.d.ts +17 -22
  50. package/dist/domains/anzuUser/components/AUserTabsShell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  51. package/dist/domains/anzuUser/composables/anzuUserActions.d.ts +5 -9
  52. package/dist/domains/anzuUser/composables/anzuUserActions.js.map +1 -1
  53. package/dist/domains/anzuUser/composables/anzuUserValidations.d.ts +4 -6
  54. package/dist/domains/anzuUser/composables/anzuUserValidations.js.map +1 -1
  55. package/dist/domains/anzuUser/composables/cachedAnzuUsers.d.ts +3 -3
  56. package/dist/domains/anzuUser/composables/cachedAnzuUsers.js.map +1 -1
  57. package/dist/domains/anzuUser/composables/userCrossSystemSearch.d.ts +2 -4
  58. package/dist/domains/anzuUser/composables/userCrossSystemSearch.js.map +1 -1
  59. package/dist/domains/anzuUser/composables/userCrossSystemWrites.d.ts +5 -11
  60. package/dist/domains/anzuUser/composables/userCrossSystemWrites.js.map +1 -1
  61. package/dist/domains/anzuUser/composables/userSystemDescriptor.d.ts +33 -57
  62. package/dist/domains/anzuUser/composables/userSystemDescriptor.js.map +1 -1
  63. package/dist/domains/anzuUser/composables/userSystemProbe.d.ts +7 -27
  64. package/dist/domains/anzuUser/composables/userSystemProbe.js.map +1 -1
  65. package/dist/domains/anzuUser/filter/anzuUserFilter.d.ts +6 -16
  66. package/dist/domains/anzuUser/filter/anzuUserFilter.js.map +1 -1
  67. package/dist/domains/anzuUser/store/anzuUserStore.d.ts +1 -5
  68. package/dist/domains/anzuUser/store/anzuUserStore.js.map +1 -1
  69. package/dist/domains/anzuUser/store/userCrossSystemStore.d.ts +3 -14
  70. package/dist/domains/anzuUser/store/userCrossSystemStore.js.map +1 -1
  71. package/dist/domains/anzuUser/utils/userMetadataDiff.d.ts +7 -19
  72. package/dist/domains/anzuUser/utils/userMetadataDiff.js.map +1 -1
  73. package/dist/domains/anzuUser/utils/userSystemState.d.ts +12 -30
  74. package/dist/domains/anzuUser/utils/userSystemState.js.map +1 -1
  75. package/dist/domains/anzuUser/utils/userTabs.d.ts +1 -3
  76. package/dist/domains/anzuUser/utils/userTabs.js.map +1 -1
  77. package/dist/domains/api/composables/defineApiClient.d.ts +4 -8
  78. package/dist/domains/api/composables/defineApiClient.js.map +1 -1
  79. package/dist/domains/api/composables/request.d.ts +18 -48
  80. package/dist/domains/api/composables/request.js.map +1 -1
  81. package/dist/domains/api/composables/useApiFetchByIds.d.ts +7 -21
  82. package/dist/domains/api/composables/useApiFetchByIds.js.map +1 -1
  83. package/dist/domains/api/composables/useApiFetchItems.d.ts +18 -57
  84. package/dist/domains/api/composables/useApiFetchItems.js.map +1 -1
  85. package/dist/domains/api/composables/useApiFetchList.d.ts +7 -23
  86. package/dist/domains/api/composables/useApiFetchList.js.map +1 -1
  87. package/dist/domains/api/composables/useApiFetchListBatch.d.ts +5 -22
  88. package/dist/domains/api/composables/useApiFetchListBatch.js.map +1 -1
  89. package/dist/domains/api/composables/useApiQueryBuilder.js.map +1 -1
  90. package/dist/domains/api/composables/useApiRequest.d.ts +16 -39
  91. package/dist/domains/api/composables/useApiRequest.js.map +1 -1
  92. package/dist/domains/api/utils/apiErrors.d.ts +28 -55
  93. package/dist/domains/api/utils/apiErrors.js.map +1 -1
  94. package/dist/domains/api/utils/listBody.d.ts +22 -43
  95. package/dist/domains/api/utils/listBody.js.map +1 -1
  96. package/dist/domains/auth/components/Acl.js.map +1 -1
  97. package/dist/domains/auth/components/Acl.vue_vue_type_script_setup_true_lang.js.map +1 -1
  98. package/dist/domains/auth/composables/aclAllowed.d.ts +2 -3
  99. package/dist/domains/auth/composables/aclAllowed.js.map +1 -1
  100. package/dist/domains/auth/composables/defineAuth.js.map +1 -1
  101. package/dist/domains/auth/composables/refreshSession.d.ts +10 -13
  102. package/dist/domains/auth/composables/refreshSession.js.map +1 -1
  103. package/dist/domains/cached/components/ACachedChip.js.map +1 -1
  104. package/dist/domains/cached/components/ACachedChip.vue.d.ts +13 -11
  105. package/dist/domains/cached/components/ACachedChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  106. package/dist/domains/cached/components/ACachedUserChip.js +1 -1
  107. package/dist/domains/cached/components/ACachedUserChip.js.map +1 -1
  108. package/dist/domains/cached/components/ACachedUserChip.vue.d.ts +3 -3
  109. package/dist/domains/cached/components/ACachedUserChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  110. package/dist/domains/cached/composables/createUserAndTimeTrackingFields.d.ts +9 -9
  111. package/dist/domains/cached/composables/createUserAndTimeTrackingFields.js.map +1 -1
  112. package/dist/domains/cached/composables/defineCached.d.ts +13 -11
  113. package/dist/domains/cached/composables/defineCached.js.map +1 -1
  114. package/dist/domains/cached/composables/useCachedItem.d.ts +7 -8
  115. package/dist/domains/cached/composables/useCachedItem.js.map +1 -1
  116. package/dist/domains/collab/components/ACollabLockedByUser.js.map +1 -1
  117. package/dist/domains/collab/components/ACollabLockedByUser.vue_vue_type_script_setup_true_lang.js.map +1 -1
  118. package/dist/domains/collab/composables/collabAnyDataChange.js.map +1 -1
  119. package/dist/domains/collab/composables/collabField.d.ts +5 -3
  120. package/dist/domains/collab/composables/collabField.js.map +1 -1
  121. package/dist/domains/collab/composables/collabInit.js +58 -54
  122. package/dist/domains/collab/composables/collabInit.js.map +1 -1
  123. package/dist/domains/collab/composables/collabRecovery.d.ts +49 -0
  124. package/dist/domains/collab/composables/collabRecovery.js +99 -0
  125. package/dist/domains/collab/composables/collabRecovery.js.map +1 -0
  126. package/dist/domains/collab/composables/collabRoom.js +106 -106
  127. package/dist/domains/collab/composables/collabRoom.js.map +1 -1
  128. package/dist/domains/collab/composables/collabState.d.ts +11 -4
  129. package/dist/domains/collab/composables/collabState.js +34 -25
  130. package/dist/domains/collab/composables/collabState.js.map +1 -1
  131. package/dist/domains/collab/composables/commonAdminCollabOptions.d.ts +4 -2
  132. package/dist/domains/collab/types/Collab.d.ts +31 -5
  133. package/dist/domains/collab/types/Collab.js +23 -11
  134. package/dist/domains/collab/types/Collab.js.map +1 -1
  135. package/dist/domains/customDataForm/components/ACustomDataForm.js.map +1 -1
  136. package/dist/domains/customDataForm/components/ACustomDataForm.vue.d.ts +7 -5
  137. package/dist/domains/customDataForm/components/ACustomDataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  138. package/dist/domains/customDataForm/components/ACustomDataFormElement.js.map +1 -1
  139. package/dist/domains/customDataForm/components/ACustomDataFormElement.vue_vue_type_script_setup_true_lang.js.map +1 -1
  140. package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.js.map +1 -1
  141. package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.vue.d.ts +5 -3
  142. package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  143. package/dist/domains/customDataForm/composables/useCustomDataForm.js.map +1 -1
  144. package/dist/domains/customDataForm/types/CustomDataForm.d.ts +4 -1
  145. package/dist/domains/dam/api/damAssetApi.d.ts +7 -7
  146. package/dist/domains/dam/api/damAssetApi.js.map +1 -1
  147. package/dist/domains/dam/api/damAssetLicenceApi.d.ts +1 -1
  148. package/dist/domains/dam/api/damAssetLicenceApi.js.map +1 -1
  149. package/dist/domains/dam/api/damConstants.js.map +1 -1
  150. package/dist/domains/dam/api/damEndPoints.js.map +1 -1
  151. package/dist/domains/dam/api/damImageApi.js.map +1 -1
  152. package/dist/domains/dam/api/uploadApi.js.map +1 -1
  153. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.js.map +1 -1
  154. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue.d.ts +7 -5
  155. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  156. package/dist/domains/dam/assetDetail/components/AssetDetailDialog.js.map +1 -1
  157. package/dist/domains/dam/assetDetail/components/AssetDetailDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  158. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.js.map +1 -1
  159. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue.d.ts +1 -1
  160. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
  161. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsWrapper.vue.d.ts +5 -3
  162. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.js.map +1 -1
  163. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
  164. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.js.map +1 -1
  165. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  166. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.js.map +1 -1
  167. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.vue_vue_type_script_setup_true_lang.js.map +1 -1
  168. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.js.map +1 -1
  169. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue.d.ts +1 -1
  170. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  171. package/dist/domains/dam/assetDetail/components/AssetImage.js.map +1 -1
  172. package/dist/domains/dam/assetDetail/components/AssetImage.vue.d.ts +1 -1
  173. package/dist/domains/dam/assetDetail/components/AssetImage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  174. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.js.map +1 -1
  175. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue.d.ts +2 -2
  176. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue_vue_type_script_setup_true_lang.js.map +1 -1
  177. package/dist/domains/dam/assetDetail/components/AssetInfobox.js.map +1 -1
  178. package/dist/domains/dam/assetDetail/components/AssetInfobox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  179. package/dist/domains/dam/assetDetail/components/AssetMetadata.js.map +1 -1
  180. package/dist/domains/dam/assetDetail/components/AssetMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  181. package/dist/domains/dam/assetDetail/composables/assetDetailExtSystem.d.ts +5 -6
  182. package/dist/domains/dam/assetDetail/composables/assetDetailExtSystem.js.map +1 -1
  183. package/dist/domains/dam/assetDetail/composables/assetDetailView.d.ts +10 -10
  184. package/dist/domains/dam/assetDetail/composables/assetDetailView.js.map +1 -1
  185. package/dist/domains/dam/assetDetail/store/assetDetailStore.js.map +1 -1
  186. package/dist/domains/dam/assetDetail/utils/assetMetadataMayStillChange.d.ts +4 -3
  187. package/dist/domains/dam/assetDetail/utils/assetMetadataMayStillChange.js.map +1 -1
  188. package/dist/domains/dam/assetSelect/api/damPodcastApi.js.map +1 -1
  189. package/dist/domains/dam/assetSelect/components/AAssetListInner.js.map +1 -1
  190. package/dist/domains/dam/assetSelect/components/AAssetListInner.vue.d.ts +789 -787
  191. package/dist/domains/dam/assetSelect/components/AAssetListInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  192. package/dist/domains/dam/assetSelect/components/AAssetSelect.js.map +1 -1
  193. package/dist/domains/dam/assetSelect/components/AAssetSelect.vue.d.ts +395 -393
  194. package/dist/domains/dam/assetSelect/components/AAssetSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  195. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.js.map +1 -1
  196. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.vue.d.ts +14 -12
  197. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.vue_vue_type_script_setup_true_lang.js.map +1 -1
  198. package/dist/domains/dam/assetSelect/components/AssetDistributionServiceNameFilter.js.map +1 -1
  199. package/dist/domains/dam/assetSelect/components/AssetDistributionServiceNameFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  200. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.js.map +1 -1
  201. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.vue.d.ts +9 -7
  202. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  203. package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.js.map +1 -1
  204. package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  205. package/dist/domains/dam/assetSelect/composables/assetSelectListActions.js.map +1 -1
  206. package/dist/domains/dam/assetSelect/store/assetSelectStore.js.map +1 -1
  207. package/dist/domains/dam/author/api/authorApi.js.map +1 -1
  208. package/dist/domains/dam/author/components/AuthorCreateButton.js.map +1 -1
  209. package/dist/domains/dam/author/components/AuthorCreateButton.vue.d.ts +1 -1
  210. package/dist/domains/dam/author/components/AuthorCreateButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  211. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.js.map +1 -1
  212. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.vue.d.ts +9 -6
  213. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  214. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.js.map +1 -1
  215. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue_vue_type_script_setup_true_lang.js.map +1 -1
  216. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.js +1 -1
  217. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.js.map +1 -1
  218. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue.d.ts +2 -2
  219. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
  220. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.js.map +1 -1
  221. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.vue.d.ts +1 -1
  222. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  223. package/dist/domains/dam/author/composables/cachedAuthors.d.ts +5 -4
  224. package/dist/domains/dam/author/composables/cachedAuthors.js.map +1 -1
  225. package/dist/domains/dam/author/composables/cachedUsers.d.ts +5 -4
  226. package/dist/domains/dam/author/composables/cachedUsers.js.map +1 -1
  227. package/dist/domains/dam/author/composables/damAuthorConfig.d.ts +2 -2
  228. package/dist/domains/dam/author/composables/damAuthorConfig.js.map +1 -1
  229. package/dist/domains/dam/components/DamAdminAssetLink.js.map +1 -1
  230. package/dist/domains/dam/components/DamAdminAssetLink.vue_vue_type_script_setup_true_lang.js.map +1 -1
  231. package/dist/domains/dam/composables/commonAdminCoreDamOptions.d.ts +10 -8
  232. package/dist/domains/dam/composables/commonAdminCoreDamOptions.js.map +1 -1
  233. package/dist/domains/dam/composables/damConfigName.d.ts +8 -9
  234. package/dist/domains/dam/composables/damConfigName.js.map +1 -1
  235. package/dist/domains/dam/composables/damNotifications.d.ts +9 -9
  236. package/dist/domains/dam/composables/damNotifications.js.map +1 -1
  237. package/dist/domains/dam/composables/damNotificationsConnection.d.ts +4 -4
  238. package/dist/domains/dam/composables/damNotificationsConnection.js.map +1 -1
  239. package/dist/domains/dam/composables/damNotificationsEventBus.d.ts +2 -2
  240. package/dist/domains/dam/composables/damNotificationsEventBus.js.map +1 -1
  241. package/dist/domains/dam/composables/extSystemIdForCached.d.ts +5 -4
  242. package/dist/domains/dam/composables/extSystemIdForCached.js.map +1 -1
  243. package/dist/domains/dam/config/api/damAssetCustomFormApi.js.map +1 -1
  244. package/dist/domains/dam/config/api/damConfigApi.js.map +1 -1
  245. package/dist/domains/dam/config/composables/damConfigState.d.ts +5 -5
  246. package/dist/domains/dam/config/composables/damConfigState.js.map +1 -1
  247. package/dist/domains/dam/config/store/damConfigStore.d.ts +5 -4
  248. package/dist/domains/dam/config/store/damConfigStore.js.map +1 -1
  249. package/dist/domains/dam/config/utils/damFilterUserAllowedUploadConfigs.d.ts +3 -1
  250. package/dist/domains/dam/config/utils/damFilterUserAllowedUploadConfigs.js.map +1 -1
  251. package/dist/domains/dam/cropper/components/ACropper.js.map +1 -1
  252. package/dist/domains/dam/cropper/components/ACropper.vue.d.ts +8 -16
  253. package/dist/domains/dam/cropper/components/ACropper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  254. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.js.map +1 -1
  255. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  256. package/dist/domains/dam/cropper/store/imageRoiStore.d.ts +9 -12
  257. package/dist/domains/dam/cropper/store/imageRoiStore.js.map +1 -1
  258. package/dist/domains/dam/cropper/utils/cropperGeometry.d.ts +24 -38
  259. package/dist/domains/dam/cropper/utils/cropperGeometry.js.map +1 -1
  260. package/dist/domains/dam/cropper/utils/cropperJsService.d.ts +3 -7
  261. package/dist/domains/dam/cropper/utils/cropperJsService.js +10 -3
  262. package/dist/domains/dam/cropper/utils/cropperJsService.js.map +1 -1
  263. package/dist/domains/dam/cropper/utils/cropperTypes.d.ts +3 -6
  264. package/dist/domains/dam/cropper/utils/damAssetImageRoiSelectLoader.d.ts +5 -5
  265. package/dist/domains/dam/cropper/utils/damAssetImageRoiSelectLoader.js.map +1 -1
  266. package/dist/domains/dam/imageWidget/components/AImageMediaWidget.js.map +1 -1
  267. package/dist/domains/dam/imageWidget/components/AImageMediaWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
  268. package/dist/domains/dam/imageWidget/components/AImagePublicInput.js.map +1 -1
  269. package/dist/domains/dam/imageWidget/components/AImagePublicInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  270. package/dist/domains/dam/imageWidget/components/AImageWidget.js.map +1 -1
  271. package/dist/domains/dam/imageWidget/components/AImageWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
  272. package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.js.map +1 -1
  273. package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.vue_vue_type_script_setup_true_lang.js.map +1 -1
  274. package/dist/domains/dam/imageWidget/components/AImageWidgetSimple.vue.d.ts +43 -41
  275. package/dist/domains/dam/imageWidget/components/AMediaWidgetSimple.vue.d.ts +31 -29
  276. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.js.map +1 -1
  277. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue.d.ts +29 -27
  278. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  279. package/dist/domains/dam/imageWidget/components/ImageMassOperations.js.map +1 -1
  280. package/dist/domains/dam/imageWidget/components/ImageMassOperations.vue.d.ts +1 -1
  281. package/dist/domains/dam/imageWidget/components/ImageMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
  282. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.js.map +1 -1
  283. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue.d.ts +68 -66
  284. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  285. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.js.map +1 -1
  286. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue.d.ts +402 -400
  287. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  288. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.js.map +1 -1
  289. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue.d.ts +384 -382
  290. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  291. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.js.map +1 -1
  292. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  293. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.js.map +1 -1
  294. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  295. package/dist/domains/dam/imageWidget/components/MediaWidgetSimpleDialog.vue.d.ts +7 -5
  296. package/dist/domains/dam/imageWidget/composables/commonAdminImageOptions.js.map +1 -1
  297. package/dist/domains/dam/imageWidget/composables/imageApiCms.js.map +1 -1
  298. package/dist/domains/dam/imageWidget/composables/imageDialogDamAuthors.d.ts +11 -13
  299. package/dist/domains/dam/imageWidget/composables/imageDialogDamAuthors.js.map +1 -1
  300. package/dist/domains/dam/imageWidget/composables/useImageMassOperations.js.map +1 -1
  301. package/dist/domains/dam/imageWidget/store/imageMediaWidgetStore.js.map +1 -1
  302. package/dist/domains/dam/imageWidget/store/imageStore.js.map +1 -1
  303. package/dist/domains/dam/imageWidget/utils/damImage.d.ts +5 -6
  304. package/dist/domains/dam/imageWidget/utils/damImage.js.map +1 -1
  305. package/dist/domains/dam/imageWidget/utils/fieldLockTurns.d.ts +1 -2
  306. package/dist/domains/dam/imageWidget/utils/fieldLockTurns.js.map +1 -1
  307. package/dist/domains/dam/imageWidget/utils/imageSaves.d.ts +10 -14
  308. package/dist/domains/dam/imageWidget/utils/imageSaves.js.map +1 -1
  309. package/dist/domains/dam/imageWidget/utils/metadataToImageMap.js.map +1 -1
  310. package/dist/domains/dam/imageWidget/utils/waitLimit.d.ts +4 -6
  311. package/dist/domains/dam/imageWidget/utils/waitLimit.js.map +1 -1
  312. package/dist/domains/dam/keyword/api/keywordApi.js.map +1 -1
  313. package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.js.map +1 -1
  314. package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.vue.d.ts +1 -1
  315. package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  316. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.js.map +1 -1
  317. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.vue.d.ts +8 -5
  318. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  319. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.js +1 -1
  320. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.js.map +1 -1
  321. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue.d.ts +2 -2
  322. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
  323. package/dist/domains/dam/keyword/composables/cachedKeywords.d.ts +5 -4
  324. package/dist/domains/dam/keyword/composables/cachedKeywords.js.map +1 -1
  325. package/dist/domains/dam/keyword/composables/damKeywordConfig.d.ts +2 -2
  326. package/dist/domains/dam/keyword/composables/damKeywordConfig.js.map +1 -1
  327. package/dist/domains/dam/types/Asset.d.ts +1 -1
  328. package/dist/domains/dam/types/Asset.js.map +1 -1
  329. package/dist/domains/dam/types/UploadQueue.d.ts +5 -4
  330. package/dist/domains/dam/types/UploadQueue.js.map +1 -1
  331. package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.js.map +1 -1
  332. package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
  333. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.js.map +1 -1
  334. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue.d.ts +2 -2
  335. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  336. package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.js.map +1 -1
  337. package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  338. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.js.map +1 -1
  339. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  340. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.js.map +1 -1
  341. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.vue.d.ts +6 -4
  342. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  343. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.js.map +1 -1
  344. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue.d.ts +1 -1
  345. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  346. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.js.map +1 -1
  347. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  348. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.js.map +1 -1
  349. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.vue.d.ts +6 -6
  350. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  351. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.js.map +1 -1
  352. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue.d.ts +13 -13
  353. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  354. package/dist/domains/dam/uploadQueue/components/uploadQueueBindings.d.ts +13 -13
  355. package/dist/domains/dam/uploadQueue/components/uploadQueueBindings.js.map +1 -1
  356. package/dist/domains/dam/uploadQueue/composables/damUploadChunkSize.d.ts +2 -2
  357. package/dist/domains/dam/uploadQueue/composables/damUploadChunkSize.js.map +1 -1
  358. package/dist/domains/dam/uploadQueue/composables/uploadMeter.d.ts +12 -12
  359. package/dist/domains/dam/uploadQueue/composables/uploadMeter.js.map +1 -1
  360. package/dist/domains/dam/uploadQueue/composables/uploadQueueItemRefresh.d.ts +5 -5
  361. package/dist/domains/dam/uploadQueue/composables/uploadQueueItemRefresh.js.map +1 -1
  362. package/dist/domains/dam/uploadQueue/composables/uploadService.d.ts +2 -3
  363. package/dist/domains/dam/uploadQueue/composables/uploadService.js.map +1 -1
  364. package/dist/domains/dam/uploadQueue/composables/useUploadQueueDialog.d.ts +5 -4
  365. package/dist/domains/dam/uploadQueue/composables/useUploadQueueDialog.js.map +1 -1
  366. package/dist/domains/dam/uploadQueue/core/uploadQueueCore.d.ts +3 -2
  367. package/dist/domains/dam/uploadQueue/core/uploadQueueCore.js.map +1 -1
  368. package/dist/domains/dam/uploadQueue/core/uploadQueueCoreTypes.d.ts +8 -5
  369. package/dist/domains/dam/uploadQueue/core/uploadQueueCoreTypes.js.map +1 -1
  370. package/dist/domains/dam/uploadQueue/core/uploadQueueFill.d.ts +3 -3
  371. package/dist/domains/dam/uploadQueue/core/uploadQueueFill.js.map +1 -1
  372. package/dist/domains/dam/uploadQueue/presets/queuePresets.d.ts +8 -5
  373. package/dist/domains/dam/uploadQueue/presets/queuePresets.js.map +1 -1
  374. package/dist/domains/dam/uploadQueue/presets/uploadPresets.d.ts +15 -13
  375. package/dist/domains/dam/uploadQueue/presets/uploadPresets.js.map +1 -1
  376. package/dist/domains/dam/uploadQueue/settlement/uploadPollSchedule.d.ts +7 -7
  377. package/dist/domains/dam/uploadQueue/settlement/uploadPollSchedule.js.map +1 -1
  378. package/dist/domains/dam/uploadQueue/settlement/uploadPoller.d.ts +4 -4
  379. package/dist/domains/dam/uploadQueue/settlement/uploadPoller.js.map +1 -1
  380. package/dist/domains/dam/uploadQueue/settlement/uploadSettle.d.ts +28 -30
  381. package/dist/domains/dam/uploadQueue/settlement/uploadSettle.js.map +1 -1
  382. package/dist/domains/dam/uploadQueue/settlement/uploadSettlement.d.ts +2 -2
  383. package/dist/domains/dam/uploadQueue/settlement/uploadSettlement.js.map +1 -1
  384. package/dist/domains/dam/uploadQueue/settlement/uploadSettlementRuntime.d.ts +2 -2
  385. package/dist/domains/dam/uploadQueue/settlement/uploadSettlementRuntime.js.map +1 -1
  386. package/dist/domains/dam/uploadQueue/settlement/uploadSettlementTypes.d.ts +63 -73
  387. package/dist/domains/dam/uploadQueue/settlement/uploadSettlementTypes.js.map +1 -1
  388. package/dist/domains/dam/uploadQueue/store/uploadQueuesStore.d.ts +8 -9
  389. package/dist/domains/dam/uploadQueue/store/uploadQueuesStore.js.map +1 -1
  390. package/dist/domains/dam/user/api/userApi.d.ts +2 -2
  391. package/dist/domains/dam/user/api/userApi.js.map +1 -1
  392. package/dist/domains/dam/user/components/DamDistributionServiceSelect.js.map +1 -1
  393. package/dist/domains/dam/user/components/DamDistributionServiceSelect.vue.d.ts +1 -1
  394. package/dist/domains/dam/user/components/DamDistributionServiceSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  395. package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.js.map +1 -1
  396. package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.vue.d.ts +1 -1
  397. package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  398. package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.js.map +1 -1
  399. package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.vue.d.ts +1 -1
  400. package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  401. package/dist/domains/dam/user/composables/damUserSelectActions.d.ts +1 -1
  402. package/dist/domains/dam/user/composables/damUserSelectActions.js.map +1 -1
  403. package/dist/domains/dam/user/types/DamDistributionServiceType.d.ts +2 -2
  404. package/dist/domains/dam/user/types/DamDistributionServiceType.js.map +1 -1
  405. package/dist/domains/dam/user/types/DamExternalProviderAssetType.d.ts +1 -1
  406. package/dist/domains/dam/user/types/DamExternalProviderAssetType.js.map +1 -1
  407. package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.js.map +1 -1
  408. package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  409. package/dist/domains/filters/bookmarks/store/bookmarksStore.d.ts +3 -3
  410. package/dist/domains/filters/bookmarks/store/bookmarksStore.js.map +1 -1
  411. package/dist/domains/filters/components/AFilterDatetimePicker.js.map +1 -1
  412. package/dist/domains/filters/components/AFilterDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  413. package/dist/domains/filters/components/AFilterInteger.js.map +1 -1
  414. package/dist/domains/filters/components/AFilterInteger.vue_vue_type_script_setup_true_lang.js.map +1 -1
  415. package/dist/domains/filters/components/AFilterString.js.map +1 -1
  416. package/dist/domains/filters/components/AFilterString.vue_vue_type_script_setup_true_lang.js.map +1 -1
  417. package/dist/domains/filters/components/AFilterTimeInterval.js +1 -1
  418. package/dist/domains/filters/components/AFilterTimeInterval.js.map +1 -1
  419. package/dist/domains/filters/components/AFilterTimeInterval.vue.d.ts +5 -3
  420. package/dist/domains/filters/components/AFilterTimeInterval.vue_vue_type_script_setup_true_lang.js.map +1 -1
  421. package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.js.map +1 -1
  422. package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  423. package/dist/domains/filters/components/AFilterWrapper.vue.d.ts +17 -15
  424. package/dist/domains/filters/components/AFilterWrapperSidebar.vue.d.ts +5 -3
  425. package/dist/domains/filters/components/FiltersSelected.js.map +1 -1
  426. package/dist/domains/filters/components/FiltersSelected.vue_vue_type_script_setup_true_lang.js.map +1 -1
  427. package/dist/domains/filters/composables/filterFactory.d.ts +16 -26
  428. package/dist/domains/filters/composables/filterFactory.js +38 -31
  429. package/dist/domains/filters/composables/filterFactory.js.map +1 -1
  430. package/dist/domains/filters/datatable/components/ADatatableOrdering.js.map +1 -1
  431. package/dist/domains/filters/datatable/components/ADatatableOrdering.vue_vue_type_script_setup_true_lang.js +3 -1
  432. package/dist/domains/filters/datatable/components/ADatatableOrdering.vue_vue_type_script_setup_true_lang.js.map +1 -1
  433. package/dist/domains/filters/datatable/components/ADatatablePagination.js.map +1 -1
  434. package/dist/domains/filters/datatable/components/ADatatablePagination.vue_vue_type_script_setup_true_lang.js +2 -4
  435. package/dist/domains/filters/datatable/components/ADatatablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  436. package/dist/domains/filters/utils/filterInjectionKeys.js.map +1 -1
  437. package/dist/domains/form/components/AFormDatetimePicker.js.map +1 -1
  438. package/dist/domains/form/components/AFormDatetimePicker.vue.d.ts +7 -5
  439. package/dist/domains/form/components/AFormDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  440. package/dist/domains/form/components/AFormFlagDatetimePicker.js.map +1 -1
  441. package/dist/domains/form/components/AFormFlagDatetimePicker.vue.d.ts +7 -5
  442. package/dist/domains/form/components/AFormFlagDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  443. package/dist/domains/form/components/AFormSwitch.vue.d.ts +7 -5
  444. package/dist/domains/form/components/AFormTextField.js.map +1 -1
  445. package/dist/domains/form/components/AFormTextField.vue.d.ts +9 -7
  446. package/dist/domains/form/components/AFormTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  447. package/dist/domains/form/components/AFormTextarea.vue.d.ts +13 -11
  448. package/dist/domains/form/components/AFormValueObjectOptionsSelect.vue.d.ts +7 -5
  449. package/dist/domains/form/components/ASystemEntityScope.vue.d.ts +5 -3
  450. package/dist/domains/job/api/jobApi.js.map +1 -1
  451. package/dist/domains/job/components/AJobDetailCommon.vue.d.ts +5 -3
  452. package/dist/domains/listEditor/components/AListEditor.js.map +1 -1
  453. package/dist/domains/listEditor/components/AListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  454. package/dist/domains/listEditor/components/ANestedSortableListEditor.js.map +1 -1
  455. package/dist/domains/listEditor/components/ANestedSortableListEditor.vue.d.ts +2 -3
  456. package/dist/domains/listEditor/components/ANestedSortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  457. package/dist/domains/listEditor/components/ASortableListEditor.js.map +1 -1
  458. package/dist/domains/listEditor/components/ASortableListEditor.vue.d.ts +2 -3
  459. package/dist/domains/listEditor/components/ASortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  460. package/dist/domains/listEditor/composables/useListEditorController.d.ts +4 -5
  461. package/dist/domains/listEditor/composables/useListEditorController.js.map +1 -1
  462. package/dist/domains/listEditor/composables/useNestedListEditor.d.ts +3 -4
  463. package/dist/domains/listEditor/composables/useNestedListEditor.js.map +1 -1
  464. package/dist/domains/listEditor/composables/useNestedListEditorController.d.ts +5 -4
  465. package/dist/domains/listEditor/composables/useNestedListEditorController.js.map +1 -1
  466. package/dist/domains/listEditor/composables/useReorderMode.js.map +1 -1
  467. package/dist/domains/listEditor/types/listEditorTypes.d.ts +2 -2
  468. package/dist/domains/listEditor/utils/listEditorLoader.d.ts +5 -5
  469. package/dist/domains/listEditor/utils/listEditorLoader.js.map +1 -1
  470. package/dist/domains/listEditor/utils/resolveCompactText.js.map +1 -1
  471. package/dist/domains/log/api/logApi.d.ts +2 -3
  472. package/dist/domains/log/api/logApi.js.map +1 -1
  473. package/dist/domains/log/components/ALogDatatable.js.map +1 -1
  474. package/dist/domains/log/components/ALogDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  475. package/dist/domains/log/components/ALogDetailView.js.map +1 -1
  476. package/dist/domains/log/components/ALogDetailView.vue.d.ts +1 -1
  477. package/dist/domains/log/components/ALogDetailView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  478. package/dist/domains/log/components/ALogFilter.js.map +1 -1
  479. package/dist/domains/log/components/ALogFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  480. package/dist/domains/log/components/ALogListView.js.map +1 -1
  481. package/dist/domains/log/components/ALogListView.vue.d.ts +1 -1
  482. package/dist/domains/log/components/ALogListView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  483. package/dist/domains/log/composables/logActions.d.ts +4 -5
  484. package/dist/domains/log/composables/logActions.js.map +1 -1
  485. package/dist/domains/log/composables/logType.d.ts +6 -7
  486. package/dist/domains/log/composables/logType.js.map +1 -1
  487. package/dist/domains/log/filter/logFilter.d.ts +8 -11
  488. package/dist/domains/log/filter/logFilter.js.map +1 -1
  489. package/dist/domains/permission/components/APermissionEditor.js.map +1 -1
  490. package/dist/domains/permission/components/APermissionEditor.vue.d.ts +4 -4
  491. package/dist/domains/permission/components/APermissionEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  492. package/dist/domains/permission/composables/permissionActions.d.ts +3 -6
  493. package/dist/domains/permission/composables/permissionActions.js.map +1 -1
  494. package/dist/domains/permission/config/api/permissionConfigApi.d.ts +2 -2
  495. package/dist/domains/permission/config/api/permissionConfigApi.js.map +1 -1
  496. package/dist/domains/permission/config/composables/permissionConfigActions.d.ts +3 -7
  497. package/dist/domains/permission/config/composables/permissionConfigActions.js.map +1 -1
  498. package/dist/domains/permission/config/store/permissionConfigStore.d.ts +2 -4
  499. package/dist/domains/permission/config/store/permissionConfigStore.js.map +1 -1
  500. package/dist/domains/permission/group/api/permissionGroupApi.d.ts +8 -10
  501. package/dist/domains/permission/group/api/permissionGroupApi.js.map +1 -1
  502. package/dist/domains/permission/group/components/APermissionGroupDatatable.js.map +1 -1
  503. package/dist/domains/permission/group/components/APermissionGroupDatatable.vue.d.ts +12 -10
  504. package/dist/domains/permission/group/components/APermissionGroupDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  505. package/dist/domains/permission/group/components/APermissionGroupDetail.js.map +1 -1
  506. package/dist/domains/permission/group/components/APermissionGroupDetail.vue.d.ts +21 -22
  507. package/dist/domains/permission/group/components/APermissionGroupDetail.vue_vue_type_script_setup_true_lang.js.map +1 -1
  508. package/dist/domains/permission/group/components/APermissionGroupManage.js.map +1 -1
  509. package/dist/domains/permission/group/components/APermissionGroupManage.vue.d.ts +21 -22
  510. package/dist/domains/permission/group/components/APermissionGroupManage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  511. package/dist/domains/permission/group/composables/cachedPermissionGroups.js.map +1 -1
  512. package/dist/domains/permission/group/composables/permissionGroupActions.d.ts +6 -8
  513. package/dist/domains/permission/group/composables/permissionGroupActions.js.map +1 -1
  514. package/dist/domains/permission/group/composables/permissionGroupValidations.d.ts +2 -3
  515. package/dist/domains/permission/group/composables/permissionGroupValidations.js.map +1 -1
  516. package/dist/domains/permission/group/filter/permissionGroupFilter.d.ts +2 -3
  517. package/dist/domains/permission/group/filter/permissionGroupFilter.js.map +1 -1
  518. package/dist/domains/permission/group/store/permissionGroupStore.d.ts +3 -6
  519. package/dist/domains/permission/group/store/permissionGroupStore.js.map +1 -1
  520. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.js.map +1 -1
  521. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  522. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.js.map +1 -1
  523. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.vue_vue_type_script_setup_true_lang.js.map +1 -1
  524. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.js.map +1 -1
  525. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  526. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocompleteWithCached.vue.d.ts +5 -3
  527. package/dist/domains/remoteAutocomplete/composables/createRemoteAutocomplete.d.ts +11 -13
  528. package/dist/domains/remoteAutocomplete/composables/createRemoteAutocomplete.js.map +1 -1
  529. package/dist/domains/subjectSelect/components/AFilterWrapperSubjectSelect.vue.d.ts +13 -11
  530. package/dist/domains/subjectSelect/components/ASubjectSelect.js.map +1 -1
  531. package/dist/domains/subjectSelect/components/ASubjectSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  532. package/dist/domains/subjectSelect/composables/useSubjectSelect.js +53 -51
  533. package/dist/domains/subjectSelect/composables/useSubjectSelect.js.map +1 -1
  534. package/dist/domains/system/appShell/components/AActionbar.vue.d.ts +7 -5
  535. package/dist/domains/system/appShell/components/ALayoutSwitch.js.map +1 -1
  536. package/dist/domains/system/appShell/components/ALayoutSwitch.vue.d.ts +7 -5
  537. package/dist/domains/system/appShell/components/ALayoutSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  538. package/dist/domains/system/appShell/composables/teleportSlot.d.ts +0 -1
  539. package/dist/domains/system/appShell/composables/teleportSlot.js.map +1 -1
  540. package/dist/domains/system/components/AAlerts.js.map +1 -1
  541. package/dist/domains/system/components/AAlerts.vue_vue_type_script_setup_true_lang.js.map +1 -1
  542. package/dist/domains/system/composables/alerts.js.map +1 -1
  543. package/dist/domains/system/composables/breadcrumbs.d.ts +3 -3
  544. package/dist/domains/system/composables/breadcrumbs.js.map +1 -1
  545. package/dist/domains/system/composables/languageSettings.js.map +1 -1
  546. package/dist/domains/system/composables/loginStatus.js.map +1 -1
  547. package/dist/domains/system/composables/navigationError.d.ts +6 -8
  548. package/dist/domains/system/composables/navigationError.js.map +1 -1
  549. package/dist/domains/system/composables/pageNavigation.d.ts +9 -10
  550. package/dist/domains/system/composables/pageNavigation.js.map +1 -1
  551. package/dist/domains/system/composables/recordActions.d.ts +14 -22
  552. package/dist/domains/system/composables/recordActions.js.map +1 -1
  553. package/dist/domains/system/composables/recordPage.d.ts +23 -38
  554. package/dist/domains/system/composables/recordPage.js.map +1 -1
  555. package/dist/domains/system/composables/routeHistory.d.ts +4 -5
  556. package/dist/domains/system/composables/routeHistory.js.map +1 -1
  557. package/dist/domains/system/composables/sentry.js.map +1 -1
  558. package/dist/domains/system/composables/useDebugFeatures.d.ts +3 -6
  559. package/dist/domains/system/composables/useDebugFeatures.js.map +1 -1
  560. package/dist/domains/system/store/datatablePageStore.d.ts +8 -1
  561. package/dist/domains/system/store/datatablePageStore.js +10 -3
  562. package/dist/domains/system/store/datatablePageStore.js.map +1 -1
  563. package/dist/domains/system/systemBar/components/ASystemBar.js.map +1 -1
  564. package/dist/domains/system/systemBar/components/ASystemBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  565. package/dist/domains/system/systemBar/utils/appReload.d.ts +5 -5
  566. package/dist/domains/system/systemBar/utils/appReload.js.map +1 -1
  567. package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.js.map +1 -1
  568. package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.vue.d.ts +2 -3
  569. package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.vue_vue_type_script_setup_true_lang.js.map +1 -1
  570. package/dist/domains/ui/buttons/action/components/AActionDeleteButton.js.map +1 -1
  571. package/dist/domains/ui/buttons/action/components/AActionDeleteButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  572. package/dist/domains/ui/buttons/components/ABtnSplit.vue.d.ts +9 -7
  573. package/dist/domains/ui/components/AAvatarColorPicker.js.map +1 -1
  574. package/dist/domains/ui/components/AAvatarColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  575. package/dist/domains/ui/components/ACard.js.map +1 -1
  576. package/dist/domains/ui/components/ACard.vue.d.ts +7 -3
  577. package/dist/domains/ui/components/ACard.vue_vue_type_script_setup_true_lang.js +6 -2
  578. package/dist/domains/ui/components/ACard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  579. package/dist/domains/ui/components/ACardLoader.js.map +1 -1
  580. package/dist/domains/ui/components/ACardLoader.vue.d.ts +1 -0
  581. package/dist/domains/ui/components/ACardLoader.vue_vue_type_script_setup_true_lang.js +13 -7
  582. package/dist/domains/ui/components/ACardLoader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  583. package/dist/domains/ui/components/AChipNoLink.vue.d.ts +5 -3
  584. package/dist/domains/ui/components/ACopyText.vue.d.ts +9 -7
  585. package/dist/domains/ui/components/ACreateDialog.js.map +1 -1
  586. package/dist/domains/ui/components/ACreateDialog.vue.d.ts +11 -9
  587. package/dist/domains/ui/components/ACreateDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  588. package/dist/domains/ui/components/ADialogToolbar.vue.d.ts +5 -3
  589. package/dist/domains/ui/components/ARow.vue.d.ts +5 -3
  590. package/dist/domains/ui/components/ATimeTrackingFields.js.map +1 -1
  591. package/dist/domains/ui/components/ATimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
  592. package/dist/domains/ui/components/AUserAndTimeTrackingFields.js.map +1 -1
  593. package/dist/domains/ui/components/AUserAndTimeTrackingFields.vue.d.ts +3 -5
  594. package/dist/domains/ui/components/AUserAndTimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
  595. package/dist/domains/ui/datetime/components/ADatetimePicker.js +1 -1
  596. package/dist/domains/ui/datetime/components/ADatetimePicker.js.map +1 -1
  597. package/dist/domains/ui/datetime/components/ADatetimePicker.vue.d.ts +5 -3
  598. package/dist/domains/ui/datetime/components/ADatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  599. package/dist/domains/ui/file/components/AFileDropzone.js.map +1 -1
  600. package/dist/domains/ui/file/components/AFileDropzone.vue.d.ts +1 -1
  601. package/dist/domains/ui/file/components/AFileDropzone.vue_vue_type_script_setup_true_lang.js.map +1 -1
  602. package/dist/domains/ui/file/components/AFileInput.js.map +1 -1
  603. package/dist/domains/ui/file/components/AFileInput.vue.d.ts +9 -7
  604. package/dist/domains/ui/file/components/AFileInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  605. package/dist/domains/ui/file/components/AFileInputDialog.js.map +1 -1
  606. package/dist/domains/ui/file/components/AFileInputDialog.vue.d.ts +9 -7
  607. package/dist/domains/ui/file/components/AFileInputDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  608. package/dist/domains/ui/file/composables/dropzone.js.map +1 -1
  609. package/dist/domains/ui/file/composables/formatAndSizeCheck.js.map +1 -1
  610. package/dist/domains/ui/view/components/AGenericView.vue.d.ts +7 -5
  611. package/dist/domains/ui/view/components/ALoginView.js +1 -1
  612. package/dist/domains/ui/view/components/ALoginView.js.map +1 -1
  613. package/dist/domains/ui/view/components/ALoginView.vue.d.ts +5 -3
  614. package/dist/domains/ui/view/components/ALoginView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  615. package/dist/domains/ui/view/components/ALogoutView.js.map +1 -1
  616. package/dist/domains/ui/view/components/ALogoutView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  617. package/dist/domains/ui/view/components/ANotFoundView.js.map +1 -1
  618. package/dist/domains/ui/view/components/ANotFoundView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  619. package/dist/domains/unsavedGuard/composables/useUnsavedChangesGuard.d.ts +6 -7
  620. package/dist/domains/unsavedGuard/composables/useUnsavedChangesGuard.js.map +1 -1
  621. package/dist/lib.d.ts +2 -2
  622. package/dist/plugins/commonVuetifyConfig.d.ts +3 -3
  623. package/dist/plugins/commonVuetifyConfig.js.map +1 -1
  624. package/dist/plugins/i18n.d.ts +4 -5
  625. package/dist/plugins/i18n.js.map +1 -1
  626. package/dist/plugins/pluginOptions.d.ts +4 -2
  627. package/dist/plugins/pluginOptions.js.map +1 -1
  628. package/dist/plugins/webfontloader.js.map +1 -1
  629. package/dist/shared/error/AnzuApiCancelledError.d.ts +5 -8
  630. package/dist/shared/error/AnzuApiCancelledError.js.map +1 -1
  631. package/dist/shared/error/AnzuError.d.ts +3 -5
  632. package/dist/shared/error/AnzuError.js.map +1 -1
  633. package/dist/shared/error/AuthUnavailableError.d.ts +3 -3
  634. package/dist/shared/error/AuthUnavailableError.js.map +1 -1
  635. package/dist/shared/error/isInCauseChain.d.ts +2 -2
  636. package/dist/shared/error/isInCauseChain.js.map +1 -1
  637. package/dist/shared/types/UserAndTimeTracking.d.ts +5 -5
  638. package/dist/shared/types/Validation.d.ts +4 -5
  639. package/dist/shared/types/common.d.ts +1 -3
  640. package/dist/shared/types/globalComponents.d.ts +5 -6
  641. package/dist/shared/utils/common.js.map +1 -1
  642. package/dist/shared/utils/datetime.d.ts +0 -1
  643. package/dist/shared/utils/datetime.js.map +1 -1
  644. package/dist/shared/utils/datetimePickerValue.d.ts +4 -7
  645. package/dist/shared/utils/datetimePickerValue.js.map +1 -1
  646. package/dist/shared/utils/development.d.ts +3 -3
  647. package/dist/shared/utils/development.js.map +1 -1
  648. package/dist/shared/utils/envConfig.d.ts +4 -4
  649. package/dist/shared/utils/envConfig.js.map +1 -1
  650. package/dist/shared/utils/json.d.ts +1 -1
  651. package/dist/shared/utils/json.js.map +1 -1
  652. package/dist/shared/utils/userAndTimeTracking.d.ts +5 -7
  653. package/dist/shared/utils/userAndTimeTracking.js.map +1 -1
  654. package/dist/shared/validators/vuelidate/common/useValidateHexColor.d.ts +3 -5
  655. package/dist/shared/validators/vuelidate/common/useValidateHexColor.js.map +1 -1
  656. package/dist/testing/appShell.d.ts +11 -11
  657. package/dist/testing/appShell.js.map +1 -1
  658. package/dist/testing/closeButtons.d.ts +9 -11
  659. package/dist/testing/closeButtons.js.map +1 -1
  660. package/dist/testing/declaredDependencies.d.ts +7 -7
  661. package/dist/testing/declaredDependencies.js.map +1 -1
  662. package/dist/testing/generatedRoutes.d.ts +6 -11
  663. package/dist/testing/generatedRoutes.js.map +1 -1
  664. package/dist/testing/routeHistory.d.ts +5 -12
  665. package/dist/testing/routeHistory.js.map +1 -1
  666. package/dist/testing/sortableLists.d.ts +16 -21
  667. package/dist/testing/sortableLists.js.map +1 -1
  668. package/dist/testing/typedRouter.d.ts +0 -1
  669. package/dist/testing/typedRouter.js.map +1 -1
  670. package/package.json +26 -26
  671. package/src/eslint/adminConfig.mjs +19 -27
  672. package/src/eslint/globalComponentNames.mjs +3 -4
  673. package/src/eslint/oxlint.mjs +7 -20
  674. package/src/eslint/plugin.d.mts +2 -4
  675. package/src/eslint/plugin.mjs +18 -34
  676. package/src/eslint/validRouteName.mjs +6 -7
  677. package/src/vite/devWatch.mjs +30 -43
  678. package/src/vite/index.d.mts +5 -5
  679. package/src/vite/sentry.mjs +7 -12
  680. package/src/vite/sourcemaps.mjs +4 -8
@@ -9,62 +9,48 @@ export interface Rect {
9
9
  height: number;
10
10
  }
11
11
  /**
12
- * Which edge of the selection stays put while the other one moves. Resizing from the west handle
13
- * pins the east edge, resizing from the north-east corner pins the south-west one, and the side
14
- * handles grow symmetrically around the perpendicular centre — this mirrors how cropper.js v2
15
- * computes a resize, and it is what lets a clamped selection stop at the image border instead of
16
- * sliding along it.
17
- *
18
- * `fit` is the anchor-less case (a programmatic `setData`, a plain move, a re-fit after the
19
- * container changed): the box may be as large as the image allows anywhere, and is slid back into
20
- * view afterwards, which is what cropper.js v1's `limitCropBox` did.
12
+ * Which edge of the selection stays fixed while the other moves. This mirrors how cropper.js v2
13
+ * computes a resize, and lets a clamped selection stop at the image border instead of sliding.
14
+ * `fit` is the case without an anchor (programmatic `setData`, a move, a re-fit after resize). The
15
+ * box may be as large as the image allows and is slid back into view, like v1's `limitCropBox`.
21
16
  */
22
17
  export type AnchorSide = 'start' | 'center' | 'end' | 'fit';
23
18
  export type Anchor = [AnchorSide, AnchorSide];
24
- /** Anchors per cropper.js action name. Anything missing is treated as a plain "fit it in" clamp. */
19
+ /** Anchors per cropper.js action name. Missing actions get a plain "fit" clamp. */
25
20
  export declare const RESIZE_ANCHORS: Readonly<Record<string, Anchor>>;
26
21
  export declare const isUsableAspectRatio: (aspectRatio: number) => boolean;
27
22
  /**
28
- * The largest box of `aspectRatio` that fits inside `size`. With no usable ratio the size is
29
- * returned untouched, which is how a free-form crop behaves.
23
+ * The largest box of `aspectRatio` that fits in `size`. Without a
24
+ * usable ratio the size is returned unchanged, as for a free-form crop.
30
25
  */
31
26
  export declare const fitAspectRatio: (size: Size, aspectRatio: number) => Size;
32
27
  /**
33
- * The box the crop starts out as: cropper.js v1's `autoCropArea` applied to the aspect-fitted
34
- * image, centred. Because `fitAspectRatio` scales linearly this is the same rectangle whether it is
35
- * computed in natural pixels or in displayed ones — which is why the crop data a user sees does not
36
- * depend on how wide their window happens to be.
28
+ * The initial crop: v1's `autoCropArea` applied to the aspect-fitted image, centred.
29
+ * `fitAspectRatio` scales linearly, so the result is the same in natural
30
+ * or displayed pixels. Crop data does not depend on window width.
37
31
  */
38
32
  export declare const initialSelectionRect: (bounds: Size, aspectRatio: number, coverage: number) => Rect;
39
33
  /**
40
- * Grows a box to the given ratio, by calling the very function cropper.js' `$change` will call on
41
- * it. Doing it here first means a rectangle is already the shape the library will make it *before*
42
- * it is measured against the image: a crop that names a new height keeps its old width through the
43
- * clamp otherwise, and cropper.js then widens it to suit the ratio — straight past the image edge.
44
- *
45
- * The guard is not redundant. `getAdjustedSizes` has no notion of a free-form crop and answers a
46
- * `NaN` ratio with a `NaN` dimension.
34
+ * Grows a box to the ratio with the same function cropper.js' `$change`
35
+ * uses. The box then has its final shape before it is clamped to the image.
36
+ * Otherwise a crop with a new height keeps its old width through
37
+ * the clamp, and cropper.js widens it past the image edge.
38
+ * The guard is needed: `getAdjustedSizes` returns `NaN` for a `NaN` ratio.
47
39
  */
48
40
  export declare const coverAspectRatio: (size: Size, aspectRatio: number) => Size;
49
41
  /**
50
- * Keeps `rect` inside `bounds` the way cropper.js v1's `viewMode: 1` did: a selection that has
51
- * grown past an edge is shrunk rather than pushed, so the edge the user is not dragging stays where
52
- * they put it, and a selection that is merely out of position is slid back in whole.
53
- *
54
- * `anchor` says which edges the current gesture is holding still. Leaving it out (a programmatic
55
- * `setData`, the initial layout, a re-fit after a resize) caps the size at the bounds, keeps the
56
- * top-left corner it was given and slides the result into view — what v1's `limitCropBox` did.
42
+ * Keeps `rect` inside `bounds` like v1's `viewMode: 1`. A selection past an edge is shrunk, not pushed,
43
+ * so the edge not being dragged stays put. A selection only out of position is slid back whole.
44
+ * `anchor` gives the edges the gesture holds fixed. Without it (programmatic
45
+ * `setData`, initial layout, re-fit after resize) the size is capped at the bounds,
46
+ * the top-left corner is kept and the result slid into view, like v1's `limitCropBox`.
57
47
  */
58
48
  export declare const clampRectInside: (rect: Rect, bounds: Rect, aspectRatio: number, anchor?: Anchor) => Rect;
59
49
  export declare const rectsAreClose: (a: Rect, b: Rect, epsilon?: number) => boolean;
60
50
  /**
61
- * The box the cropper canvas takes. This is the frame, not the picture: cropper.js v1 let its
62
- * container fill the width it was given and then centred the image inside it, so a source narrower
63
- * than the container sat between two shaded margins rather than stretching to fill them. The height
64
- * comes from the image at its displayed size, which is its natural size unless that is wider than
65
- * the space available — v1 never enlarged a source either, its `<img>` being capped at `max-width`.
66
- *
67
- * The image is fitted into this box with `contain`, so image pixels and canvas pixels differ by one
68
- * uniform scale factor and an offset.
51
+ * The canvas box. This is the frame, not the picture. Like v1, it fills the given width
52
+ * and the image is centred inside, so a narrow source sits between shaded margins.
53
+ * Height comes from the displayed image size: natural size, unless wider than the space. Sources are never enlarged.
54
+ * The image is fitted with `contain`, so image and canvas pixels differ by one scale factor and an offset.
69
55
  */
70
56
  export declare const canvasSizeFor: (natural: Size, availableWidth: number, minWidth: number, minHeight: number) => Size;
@@ -1 +1 @@
1
- {"version":3,"file":"cropperGeometry.js","names":["RESIZE_ANCHORS","isUsableAspectRatio","aspectRatio","clamp","value","min","max","fitAspectRatio","size","initialSelectionRect","fitted","bounds","width","coverage","height","coverAspectRatio","getAdjustedSizes","availableAlong","boundsEnd","boundsStart","boundsLength","side","start","length","placeAlong","newLength","clampRectInside","anchorX","anchorY","anchor","asked","rect","maxWidth","maxHeight","scale","x","y","rectsAreClose","a","b","epsilon","canvasSizeFor","availableWidth","minWidth","natural","minHeight","displayedHeight"],"sources":["../../../../../src/domains/dam/cropper/utils/cropperGeometry.ts"],"sourcesContent":["/**\n * The geometry behind `ACropper`: how big the canvas is, where the initial crop box lands, and how a\n * crop box is kept inside the image. cropper.js v1 did all of this internally and v2 does none of\n * it, so it has to live somewhere — and here, away from the DOM, it can be tested directly rather\n * than through a mounted component.\n */\nimport { getAdjustedSizes } from 'cropperjs'\n\nexport interface Size {\n width: number\n height: number\n}\n\nexport interface Rect {\n x: number\n y: number\n width: number\n height: number\n}\n\n/**\n * Which edge of the selection stays put while the other one moves. Resizing from the west handle\n * pins the east edge, resizing from the north-east corner pins the south-west one, and the side\n * handles grow symmetrically around the perpendicular centre — this mirrors how cropper.js v2\n * computes a resize, and it is what lets a clamped selection stop at the image border instead of\n * sliding along it.\n *\n * `fit` is the anchor-less case (a programmatic `setData`, a plain move, a re-fit after the\n * container changed): the box may be as large as the image allows anywhere, and is slid back into\n * view afterwards, which is what cropper.js v1's `limitCropBox` did.\n */\nexport type AnchorSide = 'start' | 'center' | 'end' | 'fit'\n\nexport type Anchor = [AnchorSide, AnchorSide]\n\n/** Anchors per cropper.js action name. Anything missing is treated as a plain \"fit it in\" clamp. */\nexport const RESIZE_ANCHORS: Readonly<Record<string, Anchor>> = {\n 'n-resize': ['center', 'end'],\n 's-resize': ['center', 'start'],\n 'e-resize': ['start', 'center'],\n 'w-resize': ['end', 'center'],\n 'ne-resize': ['start', 'end'],\n 'nw-resize': ['end', 'end'],\n 'se-resize': ['start', 'start'],\n 'sw-resize': ['end', 'start'],\n // Drawing a brand new selection grows it away from the point the drag started at.\n select: ['start', 'start'],\n}\n\nexport const isUsableAspectRatio = (aspectRatio: number): boolean => Number.isFinite(aspectRatio) && aspectRatio > 0\n\nconst clamp = (value: number, min: number, max: number): number => Math.min(Math.max(value, min), max)\n\n/**\n * The largest box of `aspectRatio` that fits inside `size`. With no usable ratio the size is\n * returned untouched, which is how a free-form crop behaves.\n */\nexport const fitAspectRatio = (size: Size, aspectRatio: number): Size => {\n if (!isUsableAspectRatio(aspectRatio)) return { width: size.width, height: size.height }\n return size.height * aspectRatio > size.width\n ? { width: size.width, height: size.width / aspectRatio }\n : { width: size.height * aspectRatio, height: size.height }\n}\n\n/**\n * The box the crop starts out as: cropper.js v1's `autoCropArea` applied to the aspect-fitted\n * image, centred. Because `fitAspectRatio` scales linearly this is the same rectangle whether it is\n * computed in natural pixels or in displayed ones — which is why the crop data a user sees does not\n * depend on how wide their window happens to be.\n */\nexport const initialSelectionRect = (bounds: Size, aspectRatio: number, coverage: number): Rect => {\n const fitted = fitAspectRatio(bounds, aspectRatio)\n const width = fitted.width * coverage\n const height = fitted.height * coverage\n return {\n x: (bounds.width - width) / 2,\n y: (bounds.height - height) / 2,\n width,\n height,\n }\n}\n\n/**\n * Grows a box to the given ratio, by calling the very function cropper.js' `$change` will call on\n * it. Doing it here first means a rectangle is already the shape the library will make it *before*\n * it is measured against the image: a crop that names a new height keeps its old width through the\n * clamp otherwise, and cropper.js then widens it to suit the ratio — straight past the image edge.\n *\n * The guard is not redundant. `getAdjustedSizes` has no notion of a free-form crop and answers a\n * `NaN` ratio with a `NaN` dimension.\n */\nexport const coverAspectRatio = (size: Size, aspectRatio: number): Size =>\n isUsableAspectRatio(aspectRatio)\n ? getAdjustedSizes({ width: size.width, height: size.height, aspectRatio }, 'cover')\n : { width: size.width, height: size.height }\n\n/** How much room an axis has left once the anchored edge is held still. */\nconst availableAlong = (start: number, length: number, boundsStart: number, boundsLength: number, side: AnchorSide) => {\n const boundsEnd = boundsStart + boundsLength\n if (side === 'start') return Math.max(0, boundsEnd - Math.max(start, boundsStart))\n if (side === 'end') return Math.max(0, Math.min(start + length, boundsEnd) - boundsStart)\n // `center` and `fit` are both free to use the whole span; only where they land differs.\n return boundsLength\n}\n\n/** Where the axis ends up once its length is known and the anchored edge has to stay put. */\nconst placeAlong = (start: number, length: number, newLength: number, side: AnchorSide) => {\n if (side === 'end') return start + length - newLength\n if (side === 'center') return start + length / 2 - newLength / 2\n return start\n}\n\n/**\n * Keeps `rect` inside `bounds` the way cropper.js v1's `viewMode: 1` did: a selection that has\n * grown past an edge is shrunk rather than pushed, so the edge the user is not dragging stays where\n * they put it, and a selection that is merely out of position is slid back in whole.\n *\n * `anchor` says which edges the current gesture is holding still. Leaving it out (a programmatic\n * `setData`, the initial layout, a re-fit after a resize) caps the size at the bounds, keeps the\n * top-left corner it was given and slides the result into view — what v1's `limitCropBox` did.\n */\nexport const clampRectInside = (rect: Rect, bounds: Rect, aspectRatio: number, anchor?: Anchor): Rect => {\n const [anchorX, anchorY] = anchor ?? ['fit', 'fit']\n\n // Measure the rectangle cropper.js would end up with, not the one that was asked for. A rectangle\n // already in the right proportion — which is everything a drag produces — is untouched by this.\n const asked = { ...rect, ...coverAspectRatio(rect, aspectRatio) }\n\n const maxWidth = availableAlong(asked.x, asked.width, bounds.x, bounds.width, anchorX)\n const maxHeight = availableAlong(asked.y, asked.height, bounds.y, bounds.height, anchorY)\n\n let { width, height } = asked\n if (isUsableAspectRatio(aspectRatio)) {\n // Shrink both axes by the same factor, otherwise the crop silently changes shape at the border.\n const scale = Math.min(1, width > 0 ? maxWidth / width : 1, height > 0 ? maxHeight / height : 1)\n width *= scale\n height *= scale\n } else {\n width = Math.min(width, maxWidth)\n height = Math.min(height, maxHeight)\n }\n\n const x = placeAlong(asked.x, asked.width, width, anchorX)\n const y = placeAlong(asked.y, asked.height, height, anchorY)\n\n return {\n x: clamp(x, bounds.x, bounds.x + bounds.width - width),\n y: clamp(y, bounds.y, bounds.y + bounds.height - height),\n width,\n height,\n }\n}\n\nexport const rectsAreClose = (a: Rect, b: Rect, epsilon = 0.01): boolean =>\n Math.abs(a.x - b.x) < epsilon &&\n Math.abs(a.y - b.y) < epsilon &&\n Math.abs(a.width - b.width) < epsilon &&\n Math.abs(a.height - b.height) < epsilon\n\n/**\n * The box the cropper canvas takes. This is the frame, not the picture: cropper.js v1 let its\n * container fill the width it was given and then centred the image inside it, so a source narrower\n * than the container sat between two shaded margins rather than stretching to fill them. The height\n * comes from the image at its displayed size, which is its natural size unless that is wider than\n * the space available — v1 never enlarged a source either, its `<img>` being capped at `max-width`.\n *\n * The image is fitted into this box with `contain`, so image pixels and canvas pixels differ by one\n * uniform scale factor and an offset.\n */\nexport const canvasSizeFor = (natural: Size, availableWidth: number, minWidth: number, minHeight: number): Size => {\n const width = Math.max(availableWidth, minWidth)\n if (!(natural.width > 0) || !(natural.height > 0)) {\n return { width, height: minHeight }\n }\n const displayedWidth = Math.min(natural.width, availableWidth)\n const displayedHeight = (displayedWidth * natural.height) / natural.width\n return { width, height: Math.max(displayedHeight, minHeight) }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"cropperGeometry.js","names":["RESIZE_ANCHORS","isUsableAspectRatio","aspectRatio","clamp","value","min","max","fitAspectRatio","size","initialSelectionRect","fitted","bounds","width","coverage","height","coverAspectRatio","getAdjustedSizes","availableAlong","boundsEnd","boundsStart","boundsLength","side","start","length","placeAlong","newLength","clampRectInside","anchorX","anchorY","anchor","asked","rect","maxWidth","maxHeight","scale","x","y","rectsAreClose","a","b","epsilon","canvasSizeFor","availableWidth","minWidth","natural","minHeight","displayedHeight"],"sources":["../../../../../src/domains/dam/cropper/utils/cropperGeometry.ts"],"sourcesContent":["/**\n * Geometry for `ACropper`: canvas size, initial crop box, and keeping the crop inside the image.\n * cropper.js v1 did this internally and v2 does not. Kept away from the DOM so it can be tested directly.\n */\nimport { getAdjustedSizes } from 'cropperjs'\n\nexport interface Size {\n width: number\n height: number\n}\n\nexport interface Rect {\n x: number\n y: number\n width: number\n height: number\n}\n\n/**\n * Which edge of the selection stays fixed while the other moves. This mirrors how cropper.js v2\n * computes a resize, and lets a clamped selection stop at the image border instead of sliding.\n * `fit` is the case without an anchor (programmatic `setData`, a move, a re-fit after resize). The\n * box may be as large as the image allows and is slid back into view, like v1's `limitCropBox`.\n */\nexport type AnchorSide = 'start' | 'center' | 'end' | 'fit'\n\nexport type Anchor = [AnchorSide, AnchorSide]\n\n/** Anchors per cropper.js action name. Missing actions get a plain \"fit\" clamp. */\nexport const RESIZE_ANCHORS: Readonly<Record<string, Anchor>> = {\n 'n-resize': ['center', 'end'],\n 's-resize': ['center', 'start'],\n 'e-resize': ['start', 'center'],\n 'w-resize': ['end', 'center'],\n 'ne-resize': ['start', 'end'],\n 'nw-resize': ['end', 'end'],\n 'se-resize': ['start', 'start'],\n 'sw-resize': ['end', 'start'],\n // A new selection grows away from the drag start point.\n select: ['start', 'start'],\n}\n\nexport const isUsableAspectRatio = (aspectRatio: number): boolean => Number.isFinite(aspectRatio) && aspectRatio > 0\n\nconst clamp = (value: number, min: number, max: number): number => Math.min(Math.max(value, min), max)\n\n/**\n * The largest box of `aspectRatio` that fits in `size`. Without a\n * usable ratio the size is returned unchanged, as for a free-form crop.\n */\nexport const fitAspectRatio = (size: Size, aspectRatio: number): Size => {\n if (!isUsableAspectRatio(aspectRatio)) return { width: size.width, height: size.height }\n return size.height * aspectRatio > size.width\n ? { width: size.width, height: size.width / aspectRatio }\n : { width: size.height * aspectRatio, height: size.height }\n}\n\n/**\n * The initial crop: v1's `autoCropArea` applied to the aspect-fitted image, centred.\n * `fitAspectRatio` scales linearly, so the result is the same in natural\n * or displayed pixels. Crop data does not depend on window width.\n */\nexport const initialSelectionRect = (bounds: Size, aspectRatio: number, coverage: number): Rect => {\n const fitted = fitAspectRatio(bounds, aspectRatio)\n const width = fitted.width * coverage\n const height = fitted.height * coverage\n return {\n x: (bounds.width - width) / 2,\n y: (bounds.height - height) / 2,\n width,\n height,\n }\n}\n\n/**\n * Grows a box to the ratio with the same function cropper.js' `$change`\n * uses. The box then has its final shape before it is clamped to the image.\n * Otherwise a crop with a new height keeps its old width through\n * the clamp, and cropper.js widens it past the image edge.\n * The guard is needed: `getAdjustedSizes` returns `NaN` for a `NaN` ratio.\n */\nexport const coverAspectRatio = (size: Size, aspectRatio: number): Size =>\n isUsableAspectRatio(aspectRatio)\n ? getAdjustedSizes({ width: size.width, height: size.height, aspectRatio }, 'cover')\n : { width: size.width, height: size.height }\n\n/** How much room an axis has while the anchored edge stays fixed. */\nconst availableAlong = (start: number, length: number, boundsStart: number, boundsLength: number, side: AnchorSide) => {\n const boundsEnd = boundsStart + boundsLength\n if (side === 'start') return Math.max(0, boundsEnd - Math.max(start, boundsStart))\n if (side === 'end') return Math.max(0, Math.min(start + length, boundsEnd) - boundsStart)\n // `center` and `fit` are both free to use the whole span; only where they land differs.\n return boundsLength\n}\n\n/** Where the axis starts once its length is known and the anchored edge stays fixed. */\nconst placeAlong = (start: number, length: number, newLength: number, side: AnchorSide) => {\n if (side === 'end') return start + length - newLength\n if (side === 'center') return start + length / 2 - newLength / 2\n return start\n}\n\n/**\n * Keeps `rect` inside `bounds` like v1's `viewMode: 1`. A selection past an edge is shrunk, not pushed,\n * so the edge not being dragged stays put. A selection only out of position is slid back whole.\n * `anchor` gives the edges the gesture holds fixed. Without it (programmatic\n * `setData`, initial layout, re-fit after resize) the size is capped at the bounds,\n * the top-left corner is kept and the result slid into view, like v1's `limitCropBox`.\n */\nexport const clampRectInside = (rect: Rect, bounds: Rect, aspectRatio: number, anchor?: Anchor): Rect => {\n const [anchorX, anchorY] = anchor ?? ['fit', 'fit']\n\n // Measure the rectangle cropper.js will produce, not the requested one. A\n // rectangle already in proportion, such as any drag result, is unchanged.\n const asked = { ...rect, ...coverAspectRatio(rect, aspectRatio) }\n\n const maxWidth = availableAlong(asked.x, asked.width, bounds.x, bounds.width, anchorX)\n const maxHeight = availableAlong(asked.y, asked.height, bounds.y, bounds.height, anchorY)\n\n let { width, height } = asked\n if (isUsableAspectRatio(aspectRatio)) {\n // Scale both axes by the same factor, or the crop changes shape at the border.\n const scale = Math.min(1, width > 0 ? maxWidth / width : 1, height > 0 ? maxHeight / height : 1)\n width *= scale\n height *= scale\n } else {\n width = Math.min(width, maxWidth)\n height = Math.min(height, maxHeight)\n }\n\n const x = placeAlong(asked.x, asked.width, width, anchorX)\n const y = placeAlong(asked.y, asked.height, height, anchorY)\n\n return {\n x: clamp(x, bounds.x, bounds.x + bounds.width - width),\n y: clamp(y, bounds.y, bounds.y + bounds.height - height),\n width,\n height,\n }\n}\n\nexport const rectsAreClose = (a: Rect, b: Rect, epsilon = 0.01): boolean =>\n Math.abs(a.x - b.x) < epsilon &&\n Math.abs(a.y - b.y) < epsilon &&\n Math.abs(a.width - b.width) < epsilon &&\n Math.abs(a.height - b.height) < epsilon\n\n/**\n * The canvas box. This is the frame, not the picture. Like v1, it fills the given width\n * and the image is centred inside, so a narrow source sits between shaded margins.\n * Height comes from the displayed image size: natural size, unless wider than the space. Sources are never enlarged.\n * The image is fitted with `contain`, so image and canvas pixels differ by one scale factor and an offset.\n */\nexport const canvasSizeFor = (natural: Size, availableWidth: number, minWidth: number, minHeight: number): Size => {\n const width = Math.max(availableWidth, minWidth)\n if (!(natural.width > 0) || !(natural.height > 0)) {\n return { width, height: minHeight }\n }\n const displayedWidth = Math.min(natural.width, availableWidth)\n const displayedHeight = (displayedWidth * natural.height) / natural.width\n return { width, height: Math.max(displayedHeight, minHeight) }\n}\n"],"mappings":"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"}
@@ -1,13 +1,9 @@
1
1
  import { RegionOfInterest } from '../../types/Roi';
2
2
  import { CropRect } from './cropperTypes';
3
3
  /**
4
- * A stored region of interest as a crop rectangle, and back.
5
- *
6
- * Both are pure arithmetic on the source image's own dimensions — no cropper involved. The region
7
- * already keeps its size as fractions, and its anchor is a fraction of the source in all but name,
8
- * so nothing here needs to know how large the picture the cropper happens to be showing is. That
9
- * used to matter: the conversion went through the displayed image's natural size, which cancelled
10
- * out of every sum it appeared in and took a rounding correction of its own to patch up.
4
+ * Converts a stored region of interest to a crop rectangle and back.
5
+ * Pure arithmetic on the source image dimensions. The region stores its size as fractions
6
+ * and its anchor is effectively a fraction too, so the displayed image size is not needed.
11
7
  */
12
8
  export declare const regionToCrop: (regionOfInterest: RegionOfInterest, originalImageWidth: number, originalImageHeight: number) => CropRect;
13
9
  export declare const cropToRegion: (crop: CropRect, regionOfInterest: RegionOfInterest, originalImageWidth: number, originalImageHeight: number) => RegionOfInterest;
@@ -2,7 +2,11 @@
2
2
  var e = (e, t) => {
3
3
  let n = 10 ** t;
4
4
  return Math.round(e * n) / n;
5
- }, t = (e) => Math.min(Math.max(e, 0), 1), n = (e, n, r) => !(n > 0) || !(r > 0) ? {
5
+ }, t = (e) => Math.min(Math.max(e, 0), 1), n = (e, t, n) => {
6
+ let r = Math.min(Math.max(e, 0), n);
7
+ for (; r > 0 && n * t + r > n;) r--;
8
+ return r;
9
+ }, r = (e, n, r) => !(n > 0) || !(r > 0) ? {
6
10
  x: 0,
7
11
  y: 0,
8
12
  width: 1,
@@ -12,7 +16,10 @@ var e = (e, t) => {
12
16
  y: t(e.pointY / r),
13
17
  width: t(e.percentageWidth),
14
18
  height: t(e.percentageHeight)
15
- }, r = (n, r, i, a) => (r.pointX = Math.max(0, Math.round(n.x * i)), r.pointY = Math.max(0, Math.round(n.y * a)), r.percentageWidth = e(t(n.width), 3), r.percentageHeight = e(t(n.height), 3), r);
16
- export { r as cropToRegion, n as regionToCrop };
19
+ }, i = (r, i, a, o) => {
20
+ let s = e(t(r.width), 3), c = e(t(r.height), 3);
21
+ return i.pointX = n(Math.round(r.x * a), s, a), i.pointY = n(Math.round(r.y * o), c, o), i.percentageWidth = s, i.percentageHeight = c, i;
22
+ };
23
+ export { i as cropToRegion, r as regionToCrop };
17
24
 
18
25
  //# sourceMappingURL=cropperJsService.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cropperJsService.js","names":["roundTo","factor","decimals","value","clampFraction","regionToCrop","originalImageWidth","originalImageHeight","regionOfInterest","cropToRegion","crop"],"sources":["../../../../../src/domains/dam/cropper/utils/cropperJsService.ts"],"sourcesContent":["import type { RegionOfInterest } from '@/domains/dam/types/Roi'\nimport type { CropRect } from '@/domains/dam/cropper/utils/cropperTypes'\n\nconst PRECISION = 3\n\nconst roundTo = (value: number, decimals: number) => {\n const factor = 10 ** decimals\n return Math.round(value * factor) / factor\n}\n\nconst clampFraction = (value: number) => Math.min(Math.max(value, 0), 1)\n\n/**\n * A stored region of interest as a crop rectangle, and back.\n *\n * Both are pure arithmetic on the source image's own dimensions — no cropper involved. The region\n * already keeps its size as fractions, and its anchor is a fraction of the source in all but name,\n * so nothing here needs to know how large the picture the cropper happens to be showing is. That\n * used to matter: the conversion went through the displayed image's natural size, which cancelled\n * out of every sum it appeared in and took a rounding correction of its own to patch up.\n */\nexport const regionToCrop = (\n regionOfInterest: RegionOfInterest,\n originalImageWidth: number,\n originalImageHeight: number\n): CropRect => {\n if (!(originalImageWidth > 0) || !(originalImageHeight > 0)) {\n return { x: 0, y: 0, width: 1, height: 1 }\n }\n return {\n x: clampFraction(regionOfInterest.pointX / originalImageWidth),\n y: clampFraction(regionOfInterest.pointY / originalImageHeight),\n width: clampFraction(regionOfInterest.percentageWidth),\n height: clampFraction(regionOfInterest.percentageHeight),\n }\n}\n\nexport const cropToRegion = (\n crop: CropRect,\n regionOfInterest: RegionOfInterest,\n originalImageWidth: number,\n originalImageHeight: number\n): RegionOfInterest => {\n regionOfInterest.pointX = Math.max(0, Math.round(crop.x * originalImageWidth))\n regionOfInterest.pointY = Math.max(0, Math.round(crop.y * originalImageHeight))\n regionOfInterest.percentageWidth = roundTo(clampFraction(crop.width), PRECISION)\n regionOfInterest.percentageHeight = roundTo(clampFraction(crop.height), PRECISION)\n\n return regionOfInterest\n}\n"],"mappings":";AAGA,IAEMA,KAAW,GAAe,MAAqB;CACnD,IAAMC,IAAS,MAAMC;CACrB,OAAO,KAAK,MAAMC,IAAQF,CAAM,IAAIA;AACtC,GAEMG,KAAiB,MAAkB,KAAK,IAAI,KAAK,IAAID,GAAO,CAAC,GAAG,CAAC,GAW1DE,KACX,GACA,GACA,MAEI,EAAEC,IAAqB,MAAM,EAAEC,IAAsB,KAChD;CAAE,GAAG;CAAG,GAAG;CAAG,OAAO;CAAG,QAAQ;AAAE,IAEpC;CACL,GAAGH,EAAcI,EAAiB,SAASF,CAAkB;CAC7D,GAAGF,EAAcI,EAAiB,SAASD,CAAmB;CAC9D,OAAOH,EAAcI,EAAiB,eAAe;CACrD,QAAQJ,EAAcI,EAAiB,gBAAgB;AACzD,GAGWC,KACX,GACA,GACA,GACA,OAEA,EAAiB,SAAS,KAAK,IAAI,GAAG,KAAK,MAAMC,EAAK,IAAIJ,CAAkB,CAAC,GAC7E,EAAiB,SAAS,KAAK,IAAI,GAAG,KAAK,MAAMI,EAAK,IAAIH,CAAmB,CAAC,GAC9E,EAAiB,kBAAkBP,EAAQI,EAAcM,EAAK,KAAK,GAAG,CAAS,GAC/E,EAAiB,mBAAmBV,EAAQI,EAAcM,EAAK,MAAM,GAAG,CAAS,GAE1EF"}
1
+ {"version":3,"file":"cropperJsService.js","names":["roundTo","factor","decimals","value","clampFraction","fitPoint","fitted","point","size","fraction","regionToCrop","originalImageWidth","originalImageHeight","regionOfInterest","cropToRegion","percentageWidth","crop","percentageHeight"],"sources":["../../../../../src/domains/dam/cropper/utils/cropperJsService.ts"],"sourcesContent":["import type { RegionOfInterest } from '@/domains/dam/types/Roi'\nimport type { CropRect } from '@/domains/dam/cropper/utils/cropperTypes'\n\nconst PRECISION = 3\n\nconst roundTo = (value: number, decimals: number) => {\n const factor = 10 ** decimals\n return Math.round(value * factor) / factor\n}\n\nconst clampFraction = (value: number) => Math.min(Math.max(value, 0), 1)\n\n/**\n * The DAM rejects a region ending past the image (`size * fraction + point > size`). The anchor is rounded\n * to whole pixels and the size to three decimals, so a region flush with the far edge can overrun by a\n * fraction of a pixel. The anchor is pulled back by the DAM's own sum, which keeps the region's size and ratio.\n */\nconst fitPoint = (point: number, fraction: number, size: number) => {\n let fitted = Math.min(Math.max(point, 0), size)\n while (fitted > 0 && size * fraction + fitted > size) fitted--\n return fitted\n}\n\n/**\n * Converts a stored region of interest to a crop rectangle and back.\n * Pure arithmetic on the source image dimensions. The region stores its size as fractions\n * and its anchor is effectively a fraction too, so the displayed image size is not needed.\n */\nexport const regionToCrop = (\n regionOfInterest: RegionOfInterest,\n originalImageWidth: number,\n originalImageHeight: number\n): CropRect => {\n if (!(originalImageWidth > 0) || !(originalImageHeight > 0)) {\n return { x: 0, y: 0, width: 1, height: 1 }\n }\n return {\n x: clampFraction(regionOfInterest.pointX / originalImageWidth),\n y: clampFraction(regionOfInterest.pointY / originalImageHeight),\n width: clampFraction(regionOfInterest.percentageWidth),\n height: clampFraction(regionOfInterest.percentageHeight),\n }\n}\n\nexport const cropToRegion = (\n crop: CropRect,\n regionOfInterest: RegionOfInterest,\n originalImageWidth: number,\n originalImageHeight: number\n): RegionOfInterest => {\n const percentageWidth = roundTo(clampFraction(crop.width), PRECISION)\n const percentageHeight = roundTo(clampFraction(crop.height), PRECISION)\n regionOfInterest.pointX = fitPoint(Math.round(crop.x * originalImageWidth), percentageWidth, originalImageWidth)\n regionOfInterest.pointY = fitPoint(Math.round(crop.y * originalImageHeight), percentageHeight, originalImageHeight)\n regionOfInterest.percentageWidth = percentageWidth\n regionOfInterest.percentageHeight = percentageHeight\n\n return regionOfInterest\n}\n"],"mappings":";AAGA,IAEMA,KAAW,GAAe,MAAqB;CACnD,IAAMC,IAAS,MAAMC;CACrB,OAAO,KAAK,MAAMC,IAAQF,CAAM,IAAIA;AACtC,GAEMG,KAAiB,MAAkB,KAAK,IAAI,KAAK,IAAID,GAAO,CAAC,GAAG,CAAC,GAOjEE,KAAY,GAAe,GAAkB,MAAiB;CAClE,IAAIC,IAAS,KAAK,IAAI,KAAK,IAAIC,GAAO,CAAC,GAAGC,CAAI;CAC9C,OAAOF,IAAS,KAAKE,IAAOC,IAAWH,IAASE,IAAM;CACtD,OAAOF;AACT,GAOaI,KACX,GACA,GACA,MAEI,EAAEC,IAAqB,MAAM,EAAEC,IAAsB,KAChD;CAAE,GAAG;CAAG,GAAG;CAAG,OAAO;CAAG,QAAQ;AAAE,IAEpC;CACL,GAAGR,EAAcS,EAAiB,SAASF,CAAkB;CAC7D,GAAGP,EAAcS,EAAiB,SAASD,CAAmB;CAC9D,OAAOR,EAAcS,EAAiB,eAAe;CACrD,QAAQT,EAAcS,EAAiB,gBAAgB;AACzD,GAGWC,KACX,GACA,GACA,GACA,MACqB;CACrB,IAAMC,IAAkBf,EAAQI,EAAcY,EAAK,KAAK,GAAG,CAAS,GAC9DC,IAAmBjB,EAAQI,EAAcY,EAAK,MAAM,GAAG,CAAS;CAMtE,OALA,EAAiB,SAASX,EAAS,KAAK,MAAMW,EAAK,IAAIL,CAAkB,GAAGI,GAAiBJ,CAAkB,GAC/G,EAAiB,SAASN,EAAS,KAAK,MAAMW,EAAK,IAAIJ,CAAmB,GAAGK,GAAkBL,CAAmB,GAClH,EAAiB,kBAAkBG,GACnC,EAAiB,mBAAmBE,GAE7BJ;AACT"}
@@ -1,10 +1,7 @@
1
1
  /**
2
- * A crop rectangle, as fractions of the image between 0 and 1.
3
- *
4
- * Fractions rather than pixels on purpose: the region of interest the DAM stores is already
5
- * expressed that way for its size, and its anchor is a fraction of the source in all but name. Using
6
- * them here means nothing has to know how large the picture the cropper happens to have loaded is —
7
- * a detail rendition is a scaled copy of the original, and the scale cancels out of every sum.
2
+ * A crop rectangle as fractions of the image, between 0 and 1.
3
+ * Fractions match how the DAM stores the region of interest. The loaded
4
+ * rendition is a scaled copy of the original, so no code needs its pixel size.
8
5
  */
9
6
  export interface CropRect {
10
7
  x: number;
@@ -1,10 +1,10 @@
1
1
  import { Component } from 'vue';
2
2
  export declare const ROI_SELECT_LOAD_TIMEOUT = 15000;
3
3
  /**
4
- * The region editor the upload queue's detail dialogs show, loaded when it first shows: it and
5
- * cropper.js under it would otherwise ride along with every page that has an upload queue.
6
- * Gives up after `timeout`, so a chunk that never arrives ends in an error the user can retry.
7
- * A retry helps when the chunk was only slow. After a failed fetch it helps only where the browser fetches
8
- * again: Chrome and Firefox kept the failure until the page reloaded, until the 2026 spec change (whatwg/html#10327).
4
+ * Loads the region editor of the upload queue detail dialogs lazily, so
5
+ * it and cropper.js do not ship with every page that has an upload queue.
6
+ * Rejects after `timeout`, so a chunk that never arrives ends in a retryable error.
7
+ * A retry helps when the chunk was only slow. After a failed fetch it helps only if the browser fetches
8
+ * again: Chrome and Firefox cached the failure until reload before the 2026 spec change (whatwg/html#10327).
9
9
  */
10
10
  export declare const loadDamAssetImageRoiSelect: (timeout?: number) => Promise<Component>;
@@ -1 +1 @@
1
- {"version":3,"file":"damAssetImageRoiSelectLoader.js","names":["ROI_SELECT_LOAD_TIMEOUT","loadDamAssetImageRoiSelect","withTimeout","module","timeout"],"sources":["../../../../../src/domains/dam/cropper/utils/damAssetImageRoiSelectLoader.ts"],"sourcesContent":["import type { Component } from 'vue'\nimport { withTimeout } from '@/domains/listEditor/utils/listEditorLoader'\n\nexport const ROI_SELECT_LOAD_TIMEOUT = 15_000\n\n/**\n * The region editor the upload queue's detail dialogs show, loaded when it first shows: it and\n * cropper.js under it would otherwise ride along with every page that has an upload queue.\n * Gives up after `timeout`, so a chunk that never arrives ends in an error the user can retry.\n * A retry helps when the chunk was only slow. After a failed fetch it helps only where the browser fetches\n * again: Chrome and Firefox kept the failure until the page reloaded, until the 2026 spec change (whatwg/html#10327).\n */\nexport const loadDamAssetImageRoiSelect = (timeout = ROI_SELECT_LOAD_TIMEOUT): Promise<Component> =>\n withTimeout(\n import('@/domains/dam/cropper/components/DamAssetImageRoiSelect.vue').then((module) => module.default),\n timeout,\n `The region editor did not load within ${timeout} ms.`\n )\n"],"mappings":";;AAGA,IAAaA,IAA0B,MAS1BC,KAA8B,IAAUD,MACnDE,EACE,OAAO,0CAA8D,CAAC,MAAM,MAAWC,EAAO,OAAO,GACrGC,GACA,yCAAyCA,EAAQ,KACnD"}
1
+ {"version":3,"file":"damAssetImageRoiSelectLoader.js","names":["ROI_SELECT_LOAD_TIMEOUT","loadDamAssetImageRoiSelect","withTimeout","module","timeout"],"sources":["../../../../../src/domains/dam/cropper/utils/damAssetImageRoiSelectLoader.ts"],"sourcesContent":["import type { Component } from 'vue'\nimport { withTimeout } from '@/domains/listEditor/utils/listEditorLoader'\n\nexport const ROI_SELECT_LOAD_TIMEOUT = 15_000\n\n/**\n * Loads the region editor of the upload queue detail dialogs lazily, so\n * it and cropper.js do not ship with every page that has an upload queue.\n * Rejects after `timeout`, so a chunk that never arrives ends in a retryable error.\n * A retry helps when the chunk was only slow. After a failed fetch it helps only if the browser fetches\n * again: Chrome and Firefox cached the failure until reload before the 2026 spec change (whatwg/html#10327).\n */\nexport const loadDamAssetImageRoiSelect = (timeout = ROI_SELECT_LOAD_TIMEOUT): Promise<Component> =>\n withTimeout(\n import('@/domains/dam/cropper/components/DamAssetImageRoiSelect.vue').then((module) => module.default),\n timeout,\n `The region editor did not load within ${timeout} ms.`\n )\n"],"mappings":";;AAGA,IAAaA,IAA0B,MAS1BC,KAA8B,IAAUD,MACnDE,EACE,OAAO,0CAA8D,CAAC,MAAM,MAAWC,EAAO,OAAO,GACrGC,GACA,yCAAyCA,EAAQ,KACnD"}
@@ -1 +1 @@
1
- {"version":3,"file":"AImageMediaWidget.js","names":["_sfc_main","AImageMediaWidget_vue_vue_type_script_setup_true_lang_default","AImageMediaWidget_default"],"sources":["../../../../../src/domains/dam/imageWidget/components/AImageMediaWidget.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { IntegerId, IntegerIdNullable } from '@/shared/types/common'\nimport { onMounted, provide, ref, shallowRef } from 'vue'\nimport { useDamConfigState } from '@/domains/dam/config/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/domains/dam/types/ImageAware'\nimport type { UploadQueueKey } from '@/domains/dam/types/UploadQueue'\nimport ImageWidgetInner from '@/domains/dam/imageWidget/components/ImageWidgetInner.vue'\nimport { ImageWidgetUploadConfigKey } from '@/domains/dam/imageWidget/utils/imageWidgetInkectionKeys'\nimport { isUndefined } from '@/shared/utils/common'\nimport { isImageWidgetUploadConfigAllowed } from '@/domains/dam/config/utils/damFilterUserAllowedUploadConfigs'\nimport { type CollabComponentConfig, CollabStatus, type CollabStatusType } from '@/domains/collab/types/Collab'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/domains/dam/types/DamConfig'\nimport { useDamConfigStoreOf } from '@/domains/dam/config/store/damConfigStore'\nimport ImageMediaWidgetInner from '@/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue'\nimport AImageWidgetSimple from '@/domains/dam/imageWidget/components/AImageWidgetSimple.vue'\nimport AMediaWidgetSimple from '@/domains/dam/imageWidget/components/AMediaWidgetSimple.vue'\nimport type { MediaAware } from '@/domains/dam/types/MediaAware'\nimport { useI18n } from 'vue-i18n'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport { useExtSystemIdForCached } from '@/domains/dam/composables/extSystemIdForCached'\nimport { DamAssetType } from '@/domains/dam/types/Asset'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n uploadLicence: IntegerId\n selectLicences: IntegerId[]\n initialImage?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n collab?: CollabComponentConfig\n collabStatus?: CollabStatusType\n label?: string | undefined\n readonly?: boolean\n required?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n expandMetadata?: boolean\n disableOnClickMenu?: boolean\n width?: number | undefined\n maxWidth?: number | undefined\n height?: number | undefined\n callDeleteApiOnRemove?: boolean\n damWidth?: undefined | number\n damHeight?: undefined | number\n }>(),\n {\n configName: undefined,\n collab: undefined,\n collabStatus: CollabStatus.Inactive,\n label: undefined,\n initialImage: undefined,\n initialMedia: undefined,\n readonly: false,\n required: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n expandMetadata: false,\n disableOnClickMenu: false,\n width: undefined,\n maxWidth: undefined,\n height: undefined,\n callDeleteApiOnRemove: false,\n damWidth: undefined,\n damHeight: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'afterMetadataSaveSuccess'): void\n}>()\n\nconst mediaModel = defineModel<MediaAware | null>('media', { required: true })\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n// Declared: the read-only fallback renders the slots too, and inferred they would take its looser types.\ndefineSlots<{\n append?: (props: { imageMedia: ImageCreateUpdateAware | MediaAware | null }) => unknown\n preview?: (props: { imageMedia: MediaAware }) => unknown\n}>()\nconst imageModel = defineModel<IntegerIdNullable>('image', { required: true })\nconst status = ref<'loading' | 'ready' | 'error'>('loading')\n// Not being allowed to upload is no reason to hide the image that is already there: it is shown read-only.\nconst uploadAllowed = ref(true)\n\nconst { damClient } = useCommonAdminCoreDamOptions(damConfigName)\nconst {\n loadDamPrvConfig,\n loadDamConfigAssetCustomFormElements,\n getDamConfigAssetCustomFormElements,\n getOrLoadDamConfigExtSystemByLicence,\n getOrLoadDamConfigExtSystemByLicences,\n} = useDamConfigState(damClient, damConfigName)\n\nconst uploadConfig = shallowRef<DamConfigLicenceExtSystemReturnType | undefined>(undefined)\n\nconst { cachedExtSystemId } = useExtSystemIdForCached(damConfigName)\n\nonMounted(async () => {\n const damConfigStore = useDamConfigStoreOf(damConfigName)\n uploadConfig.value = await getOrLoadDamConfigExtSystemByLicence(props.uploadLicence)\n if (isUndefined(uploadConfig.value)) {\n status.value = 'error'\n return\n }\n // As the gallery's root: the ext system of its upload licence, till a pick, a drop or \"edit asset\" writes another.\n cachedExtSystemId.value = uploadConfig.value.extSystem\n if (!isImageWidgetUploadConfigAllowed(uploadConfig.value, damConfigName)) {\n uploadAllowed.value = false\n try {\n if (!damConfigStore.initialized.damPrvConfig) await loadDamPrvConfig()\n status.value = 'ready'\n } catch (e) {\n status.value = 'error'\n }\n return\n }\n const promises: Promise<any>[] = []\n if (!damConfigStore.initialized.damPrvConfig) {\n promises.push(loadDamPrvConfig())\n }\n promises.push(getOrLoadDamConfigExtSystemByLicences(props.selectLicences))\n const { extSystem } = uploadConfig.value\n // The custom fields of its images: every type of the ext system where it has none yet, else the image type alone\n // where its read failed before. The types loaded are not read again.\n if (isUndefined(getDamConfigAssetCustomFormElements(extSystem, DamAssetType.Image))) {\n promises.push(\n loadDamConfigAssetCustomFormElements(\n extSystem,\n getDamConfigAssetCustomFormElements(extSystem) ? [DamAssetType.Image] : undefined\n )\n )\n }\n try {\n await Promise.all(promises)\n } catch (e) {\n status.value = 'error'\n }\n // The image type whose read failed beside types that answered is not loaded: its form would have no field.\n if (isUndefined(getDamConfigAssetCustomFormElements(extSystem, DamAssetType.Image))) status.value = 'error'\n if (status.value !== 'error') status.value = 'ready'\n})\n\nprovide(ImageWidgetUploadConfigKey, uploadConfig)\n\nconst innerComponent = ref<InstanceType<typeof ImageWidgetInner> | null>(null)\n\nconst metadataConfirm = () => {\n innerComponent.value?.metadataConfirm()\n}\n\ndefineExpose({\n metadataConfirm,\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <ImageMediaWidgetInner\n v-if=\"status === 'ready'\"\n ref=\"innerComponent\"\n v-model:media=\"mediaModel\"\n v-model:image=\"imageModel\"\n v-bind=\"props\"\n :readonly=\"readonly || !uploadAllowed\"\n @after-metadata-save-success=\"emit('afterMetadataSaveSuccess')\"\n >\n <template #append=\"{ imageMedia: appendImage }\">\n <slot\n name=\"append\"\n :image-media=\"appendImage\"\n />\n </template>\n <template #preview=\"{ imageMedia: appendImage }\">\n <slot\n name=\"preview\"\n :image-media=\"appendImage\"\n />\n </template>\n </ImageMediaWidgetInner>\n <!-- The config fails also for a user without access to the licence: the media or image already there is still shown. -->\n <div v-else-if=\"status === 'error'\">\n <AMediaWidgetSimple\n v-if=\"mediaModel\"\n :media=\"mediaModel\"\n :config-name=\"damConfigName\"\n :label=\"label\"\n :width=\"width\"\n :height=\"height\"\n :dam-width=\"damWidth\"\n :dam-height=\"damHeight\"\n >\n <template #append=\"{ media: appendMedia }\">\n <slot\n name=\"append\"\n :image-media=\"appendMedia\"\n />\n </template>\n <template #preview=\"{ media: previewMedia }\">\n <slot\n v-if=\"previewMedia\"\n name=\"preview\"\n :image-media=\"previewMedia\"\n />\n </template>\n </AMediaWidgetSimple>\n <AImageWidgetSimple\n v-else-if=\"imageModel || initialImage\"\n :model-value=\"imageModel\"\n :image=\"initialImage\"\n :config-name=\"damConfigName\"\n :label=\"label\"\n :width=\"width\"\n :height=\"height\"\n :dam-width=\"damWidth\"\n :dam-height=\"damHeight\"\n >\n <template #append=\"{ image: appendImage }\">\n <slot\n name=\"append\"\n :image-media=\"appendImage\"\n />\n </template>\n </AImageWidgetSimple>\n <div class=\"text-error\">\n {{ t('common.damImage.error.loadingConfig') }}\n </div>\n </div>\n <VProgressCircular\n v-else\n :size=\"12\"\n :width=\"2\"\n indeterminate\n />\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AImageMediaWidget.js","names":["_sfc_main","AImageMediaWidget_vue_vue_type_script_setup_true_lang_default","AImageMediaWidget_default"],"sources":["../../../../../src/domains/dam/imageWidget/components/AImageMediaWidget.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { IntegerId, IntegerIdNullable } from '@/shared/types/common'\nimport { onMounted, provide, ref, shallowRef } from 'vue'\nimport { useDamConfigState } from '@/domains/dam/config/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/domains/dam/types/ImageAware'\nimport type { UploadQueueKey } from '@/domains/dam/types/UploadQueue'\nimport ImageWidgetInner from '@/domains/dam/imageWidget/components/ImageWidgetInner.vue'\nimport { ImageWidgetUploadConfigKey } from '@/domains/dam/imageWidget/utils/imageWidgetInkectionKeys'\nimport { isUndefined } from '@/shared/utils/common'\nimport { isImageWidgetUploadConfigAllowed } from '@/domains/dam/config/utils/damFilterUserAllowedUploadConfigs'\nimport { type CollabComponentConfig, CollabStatus, type CollabStatusType } from '@/domains/collab/types/Collab'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/domains/dam/types/DamConfig'\nimport { useDamConfigStoreOf } from '@/domains/dam/config/store/damConfigStore'\nimport ImageMediaWidgetInner from '@/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue'\nimport AImageWidgetSimple from '@/domains/dam/imageWidget/components/AImageWidgetSimple.vue'\nimport AMediaWidgetSimple from '@/domains/dam/imageWidget/components/AMediaWidgetSimple.vue'\nimport type { MediaAware } from '@/domains/dam/types/MediaAware'\nimport { useI18n } from 'vue-i18n'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport { useExtSystemIdForCached } from '@/domains/dam/composables/extSystemIdForCached'\nimport { DamAssetType } from '@/domains/dam/types/Asset'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n uploadLicence: IntegerId\n selectLicences: IntegerId[]\n initialImage?: ImageAware | undefined // If given, the image data is not fetched.\n configName?: string\n collab?: CollabComponentConfig\n collabStatus?: CollabStatusType\n label?: string | undefined\n readonly?: boolean\n required?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n expandMetadata?: boolean\n disableOnClickMenu?: boolean\n width?: number | undefined\n maxWidth?: number | undefined\n height?: number | undefined\n callDeleteApiOnRemove?: boolean\n damWidth?: undefined | number\n damHeight?: undefined | number\n }>(),\n {\n configName: undefined,\n collab: undefined,\n collabStatus: CollabStatus.Inactive,\n label: undefined,\n initialImage: undefined,\n initialMedia: undefined,\n readonly: false,\n required: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n expandMetadata: false,\n disableOnClickMenu: false,\n width: undefined,\n maxWidth: undefined,\n height: undefined,\n callDeleteApiOnRemove: false,\n damWidth: undefined,\n damHeight: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'afterMetadataSaveSuccess'): void\n}>()\n\nconst mediaModel = defineModel<MediaAware | null>('media', { required: true })\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n// Declared explicitly: the read-only fallback renders the slots too, and inferred types would be looser.\ndefineSlots<{\n append?: (props: { imageMedia: ImageCreateUpdateAware | MediaAware | null }) => unknown\n preview?: (props: { imageMedia: MediaAware }) => unknown\n}>()\nconst imageModel = defineModel<IntegerIdNullable>('image', { required: true })\nconst status = ref<'loading' | 'ready' | 'error'>('loading')\n// Without upload permission the existing image is still shown, read-only.\nconst uploadAllowed = ref(true)\n\nconst { damClient } = useCommonAdminCoreDamOptions(damConfigName)\nconst {\n loadDamPrvConfig,\n loadDamConfigAssetCustomFormElements,\n getDamConfigAssetCustomFormElements,\n getOrLoadDamConfigExtSystemByLicence,\n getOrLoadDamConfigExtSystemByLicences,\n} = useDamConfigState(damClient, damConfigName)\n\nconst uploadConfig = shallowRef<DamConfigLicenceExtSystemReturnType | undefined>(undefined)\n\nconst { cachedExtSystemId } = useExtSystemIdForCached(damConfigName)\n\nonMounted(async () => {\n const damConfigStore = useDamConfigStoreOf(damConfigName)\n uploadConfig.value = await getOrLoadDamConfigExtSystemByLicence(props.uploadLicence)\n if (isUndefined(uploadConfig.value)) {\n status.value = 'error'\n return\n }\n // Starts as the ext system of the upload licence, until a pick, a drop or \"edit asset\" sets another.\n cachedExtSystemId.value = uploadConfig.value.extSystem\n if (!isImageWidgetUploadConfigAllowed(uploadConfig.value, damConfigName)) {\n uploadAllowed.value = false\n try {\n if (!damConfigStore.initialized.damPrvConfig) await loadDamPrvConfig()\n status.value = 'ready'\n } catch (e) {\n status.value = 'error'\n }\n return\n }\n const promises: Promise<any>[] = []\n if (!damConfigStore.initialized.damPrvConfig) {\n promises.push(loadDamPrvConfig())\n }\n promises.push(getOrLoadDamConfigExtSystemByLicences(props.selectLicences))\n const { extSystem } = uploadConfig.value\n // Loads custom fields for every type of the ext system if none are loaded yet.\n // Otherwise loads only the image type if its earlier read failed. Loaded types are not read again.\n if (isUndefined(getDamConfigAssetCustomFormElements(extSystem, DamAssetType.Image))) {\n promises.push(\n loadDamConfigAssetCustomFormElements(\n extSystem,\n getDamConfigAssetCustomFormElements(extSystem) ? [DamAssetType.Image] : undefined\n )\n )\n }\n try {\n await Promise.all(promises)\n } catch (e) {\n status.value = 'error'\n }\n // If the image type failed while other types loaded, the form would have no fields, so this is an error.\n if (isUndefined(getDamConfigAssetCustomFormElements(extSystem, DamAssetType.Image))) status.value = 'error'\n if (status.value !== 'error') status.value = 'ready'\n})\n\nprovide(ImageWidgetUploadConfigKey, uploadConfig)\n\nconst innerComponent = ref<InstanceType<typeof ImageWidgetInner> | null>(null)\n\nconst metadataConfirm = () => {\n innerComponent.value?.metadataConfirm()\n}\n\ndefineExpose({\n metadataConfirm,\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <ImageMediaWidgetInner\n v-if=\"status === 'ready'\"\n ref=\"innerComponent\"\n v-model:media=\"mediaModel\"\n v-model:image=\"imageModel\"\n v-bind=\"props\"\n :readonly=\"readonly || !uploadAllowed\"\n @after-metadata-save-success=\"emit('afterMetadataSaveSuccess')\"\n >\n <template #append=\"{ imageMedia: appendImage }\">\n <slot\n name=\"append\"\n :image-media=\"appendImage\"\n />\n </template>\n <template #preview=\"{ imageMedia: appendImage }\">\n <slot\n name=\"preview\"\n :image-media=\"appendImage\"\n />\n </template>\n </ImageMediaWidgetInner>\n <!-- The config also fails for a user without access to the licence. The existing media or image is still shown. -->\n <div v-else-if=\"status === 'error'\">\n <AMediaWidgetSimple\n v-if=\"mediaModel\"\n :media=\"mediaModel\"\n :config-name=\"damConfigName\"\n :label=\"label\"\n :width=\"width\"\n :height=\"height\"\n :dam-width=\"damWidth\"\n :dam-height=\"damHeight\"\n >\n <template #append=\"{ media: appendMedia }\">\n <slot\n name=\"append\"\n :image-media=\"appendMedia\"\n />\n </template>\n <template #preview=\"{ media: previewMedia }\">\n <slot\n v-if=\"previewMedia\"\n name=\"preview\"\n :image-media=\"previewMedia\"\n />\n </template>\n </AMediaWidgetSimple>\n <AImageWidgetSimple\n v-else-if=\"imageModel || initialImage\"\n :model-value=\"imageModel\"\n :image=\"initialImage\"\n :config-name=\"damConfigName\"\n :label=\"label\"\n :width=\"width\"\n :height=\"height\"\n :dam-width=\"damWidth\"\n :dam-height=\"damHeight\"\n >\n <template #append=\"{ image: appendImage }\">\n <slot\n name=\"append\"\n :image-media=\"appendImage\"\n />\n </template>\n </AImageWidgetSimple>\n <div class=\"text-error\">\n {{ t('common.damImage.error.loadingConfig') }}\n </div>\n </div>\n <VProgressCircular\n v-else\n :size=\"12\"\n :width=\"2\"\n indeterminate\n />\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AImageMediaWidget.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createBlock","ImageMediaWidgetInner","_mergeProps","_withCtx","_renderSlot","_createElementBlock","AMediaWidgetSimple","_unref","_createCommentVNode","AImageWidgetSimple","_createElementVNode","_toDisplayString","_component_VProgressCircular","AImageWidgetSimple_default","ImageMediaWidgetInner_default","AMediaWidgetSimple_default","_hoisted_1","_hoisted_2","AImageMediaWidget_vue_vue_type_script_setup_true_lang_default","CollabStatus","\"media\"","\"mediaModifiers\"","\"image\"","\"imageModifiers\"","__expose","__emit","props","__props","emit","mediaModel","useModel","damConfigName","useDamConfigName","imageModel","status","ref","uploadAllowed","useCommonAdminCoreDamOptions","useDamConfigState","damClient","uploadConfig","shallowRef","useExtSystemIdForCached","onMounted","damConfigStore","useDamConfigStoreOf","getOrLoadDamConfigExtSystemByLicence","isUndefined","isImageWidgetUploadConfigAllowed","loadDamPrvConfig","promises","getOrLoadDamConfigExtSystemByLicences","getDamConfigAssetCustomFormElements","extSystem","DamAssetType","loadDamConfigAssetCustomFormElements","provide","ImageWidgetUploadConfigKey","innerComponent","useI18n","openBlock","createBlock","mergeProps","_cache","$event","withCtx","appendImage","renderSlot","_ctx","createElementBlock","unref","appendMedia","previewMedia","createCommentVNode","createElementVNode","toDisplayString","t","VProgressCircular"],"sources":["../../../../../src/domains/dam/imageWidget/components/AImageMediaWidget.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { IntegerId, IntegerIdNullable } from '@/shared/types/common'\nimport { onMounted, provide, ref, shallowRef } from 'vue'\nimport { useDamConfigState } from '@/domains/dam/config/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/domains/dam/types/ImageAware'\nimport type { UploadQueueKey } from '@/domains/dam/types/UploadQueue'\nimport ImageWidgetInner from '@/domains/dam/imageWidget/components/ImageWidgetInner.vue'\nimport { ImageWidgetUploadConfigKey } from '@/domains/dam/imageWidget/utils/imageWidgetInkectionKeys'\nimport { isUndefined } from '@/shared/utils/common'\nimport { isImageWidgetUploadConfigAllowed } from '@/domains/dam/config/utils/damFilterUserAllowedUploadConfigs'\nimport { type CollabComponentConfig, CollabStatus, type CollabStatusType } from '@/domains/collab/types/Collab'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/domains/dam/types/DamConfig'\nimport { useDamConfigStoreOf } from '@/domains/dam/config/store/damConfigStore'\nimport ImageMediaWidgetInner from '@/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue'\nimport AImageWidgetSimple from '@/domains/dam/imageWidget/components/AImageWidgetSimple.vue'\nimport AMediaWidgetSimple from '@/domains/dam/imageWidget/components/AMediaWidgetSimple.vue'\nimport type { MediaAware } from '@/domains/dam/types/MediaAware'\nimport { useI18n } from 'vue-i18n'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport { useExtSystemIdForCached } from '@/domains/dam/composables/extSystemIdForCached'\nimport { DamAssetType } from '@/domains/dam/types/Asset'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n uploadLicence: IntegerId\n selectLicences: IntegerId[]\n initialImage?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n collab?: CollabComponentConfig\n collabStatus?: CollabStatusType\n label?: string | undefined\n readonly?: boolean\n required?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n expandMetadata?: boolean\n disableOnClickMenu?: boolean\n width?: number | undefined\n maxWidth?: number | undefined\n height?: number | undefined\n callDeleteApiOnRemove?: boolean\n damWidth?: undefined | number\n damHeight?: undefined | number\n }>(),\n {\n configName: undefined,\n collab: undefined,\n collabStatus: CollabStatus.Inactive,\n label: undefined,\n initialImage: undefined,\n initialMedia: undefined,\n readonly: false,\n required: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n expandMetadata: false,\n disableOnClickMenu: false,\n width: undefined,\n maxWidth: undefined,\n height: undefined,\n callDeleteApiOnRemove: false,\n damWidth: undefined,\n damHeight: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'afterMetadataSaveSuccess'): void\n}>()\n\nconst mediaModel = defineModel<MediaAware | null>('media', { required: true })\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n// Declared: the read-only fallback renders the slots too, and inferred they would take its looser types.\ndefineSlots<{\n append?: (props: { imageMedia: ImageCreateUpdateAware | MediaAware | null }) => unknown\n preview?: (props: { imageMedia: MediaAware }) => unknown\n}>()\nconst imageModel = defineModel<IntegerIdNullable>('image', { required: true })\nconst status = ref<'loading' | 'ready' | 'error'>('loading')\n// Not being allowed to upload is no reason to hide the image that is already there: it is shown read-only.\nconst uploadAllowed = ref(true)\n\nconst { damClient } = useCommonAdminCoreDamOptions(damConfigName)\nconst {\n loadDamPrvConfig,\n loadDamConfigAssetCustomFormElements,\n getDamConfigAssetCustomFormElements,\n getOrLoadDamConfigExtSystemByLicence,\n getOrLoadDamConfigExtSystemByLicences,\n} = useDamConfigState(damClient, damConfigName)\n\nconst uploadConfig = shallowRef<DamConfigLicenceExtSystemReturnType | undefined>(undefined)\n\nconst { cachedExtSystemId } = useExtSystemIdForCached(damConfigName)\n\nonMounted(async () => {\n const damConfigStore = useDamConfigStoreOf(damConfigName)\n uploadConfig.value = await getOrLoadDamConfigExtSystemByLicence(props.uploadLicence)\n if (isUndefined(uploadConfig.value)) {\n status.value = 'error'\n return\n }\n // As the gallery's root: the ext system of its upload licence, till a pick, a drop or \"edit asset\" writes another.\n cachedExtSystemId.value = uploadConfig.value.extSystem\n if (!isImageWidgetUploadConfigAllowed(uploadConfig.value, damConfigName)) {\n uploadAllowed.value = false\n try {\n if (!damConfigStore.initialized.damPrvConfig) await loadDamPrvConfig()\n status.value = 'ready'\n } catch (e) {\n status.value = 'error'\n }\n return\n }\n const promises: Promise<any>[] = []\n if (!damConfigStore.initialized.damPrvConfig) {\n promises.push(loadDamPrvConfig())\n }\n promises.push(getOrLoadDamConfigExtSystemByLicences(props.selectLicences))\n const { extSystem } = uploadConfig.value\n // The custom fields of its images: every type of the ext system where it has none yet, else the image type alone\n // where its read failed before. The types loaded are not read again.\n if (isUndefined(getDamConfigAssetCustomFormElements(extSystem, DamAssetType.Image))) {\n promises.push(\n loadDamConfigAssetCustomFormElements(\n extSystem,\n getDamConfigAssetCustomFormElements(extSystem) ? [DamAssetType.Image] : undefined\n )\n )\n }\n try {\n await Promise.all(promises)\n } catch (e) {\n status.value = 'error'\n }\n // The image type whose read failed beside types that answered is not loaded: its form would have no field.\n if (isUndefined(getDamConfigAssetCustomFormElements(extSystem, DamAssetType.Image))) status.value = 'error'\n if (status.value !== 'error') status.value = 'ready'\n})\n\nprovide(ImageWidgetUploadConfigKey, uploadConfig)\n\nconst innerComponent = ref<InstanceType<typeof ImageWidgetInner> | null>(null)\n\nconst metadataConfirm = () => {\n innerComponent.value?.metadataConfirm()\n}\n\ndefineExpose({\n metadataConfirm,\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <ImageMediaWidgetInner\n v-if=\"status === 'ready'\"\n ref=\"innerComponent\"\n v-model:media=\"mediaModel\"\n v-model:image=\"imageModel\"\n v-bind=\"props\"\n :readonly=\"readonly || !uploadAllowed\"\n @after-metadata-save-success=\"emit('afterMetadataSaveSuccess')\"\n >\n <template #append=\"{ imageMedia: appendImage }\">\n <slot\n name=\"append\"\n :image-media=\"appendImage\"\n />\n </template>\n <template #preview=\"{ imageMedia: appendImage }\">\n <slot\n name=\"preview\"\n :image-media=\"appendImage\"\n />\n </template>\n </ImageMediaWidgetInner>\n <!-- The config fails also for a user without access to the licence: the media or image already there is still shown. -->\n <div v-else-if=\"status === 'error'\">\n <AMediaWidgetSimple\n v-if=\"mediaModel\"\n :media=\"mediaModel\"\n :config-name=\"damConfigName\"\n :label=\"label\"\n :width=\"width\"\n :height=\"height\"\n :dam-width=\"damWidth\"\n :dam-height=\"damHeight\"\n >\n <template #append=\"{ media: appendMedia }\">\n <slot\n name=\"append\"\n :image-media=\"appendMedia\"\n />\n </template>\n <template #preview=\"{ media: previewMedia }\">\n <slot\n v-if=\"previewMedia\"\n name=\"preview\"\n :image-media=\"previewMedia\"\n />\n </template>\n </AMediaWidgetSimple>\n <AImageWidgetSimple\n v-else-if=\"imageModel || initialImage\"\n :model-value=\"imageModel\"\n :image=\"initialImage\"\n :config-name=\"damConfigName\"\n :label=\"label\"\n :width=\"width\"\n :height=\"height\"\n :dam-width=\"damWidth\"\n :dam-height=\"damHeight\"\n >\n <template #append=\"{ image: appendImage }\">\n <slot\n name=\"append\"\n :image-media=\"appendImage\"\n />\n </template>\n </AImageWidgetSimple>\n <div class=\"text-error\">\n {{ t('common.damImage.error.loadingConfig') }}\n </div>\n </div>\n <VProgressCircular\n v-else\n :size=\"12\"\n :width=\"2\"\n indeterminate\n />\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"AImageMediaWidget.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createBlock","ImageMediaWidgetInner","_mergeProps","_withCtx","_renderSlot","_createElementBlock","AMediaWidgetSimple","_unref","_createCommentVNode","AImageWidgetSimple","_createElementVNode","_toDisplayString","_component_VProgressCircular","AImageWidgetSimple_default","ImageMediaWidgetInner_default","AMediaWidgetSimple_default","_hoisted_1","_hoisted_2","AImageMediaWidget_vue_vue_type_script_setup_true_lang_default","CollabStatus","\"media\"","\"mediaModifiers\"","\"image\"","\"imageModifiers\"","__expose","__emit","props","__props","emit","mediaModel","useModel","damConfigName","useDamConfigName","imageModel","status","ref","uploadAllowed","useCommonAdminCoreDamOptions","useDamConfigState","damClient","uploadConfig","shallowRef","useExtSystemIdForCached","onMounted","damConfigStore","useDamConfigStoreOf","getOrLoadDamConfigExtSystemByLicence","isUndefined","isImageWidgetUploadConfigAllowed","loadDamPrvConfig","promises","getOrLoadDamConfigExtSystemByLicences","getDamConfigAssetCustomFormElements","extSystem","DamAssetType","loadDamConfigAssetCustomFormElements","provide","ImageWidgetUploadConfigKey","innerComponent","useI18n","openBlock","createBlock","mergeProps","_cache","$event","withCtx","appendImage","renderSlot","_ctx","createElementBlock","unref","appendMedia","previewMedia","createCommentVNode","createElementVNode","toDisplayString","t","VProgressCircular"],"sources":["../../../../../src/domains/dam/imageWidget/components/AImageMediaWidget.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { IntegerId, IntegerIdNullable } from '@/shared/types/common'\nimport { onMounted, provide, ref, shallowRef } from 'vue'\nimport { useDamConfigState } from '@/domains/dam/config/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/domains/dam/types/ImageAware'\nimport type { UploadQueueKey } from '@/domains/dam/types/UploadQueue'\nimport ImageWidgetInner from '@/domains/dam/imageWidget/components/ImageWidgetInner.vue'\nimport { ImageWidgetUploadConfigKey } from '@/domains/dam/imageWidget/utils/imageWidgetInkectionKeys'\nimport { isUndefined } from '@/shared/utils/common'\nimport { isImageWidgetUploadConfigAllowed } from '@/domains/dam/config/utils/damFilterUserAllowedUploadConfigs'\nimport { type CollabComponentConfig, CollabStatus, type CollabStatusType } from '@/domains/collab/types/Collab'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/domains/dam/types/DamConfig'\nimport { useDamConfigStoreOf } from '@/domains/dam/config/store/damConfigStore'\nimport ImageMediaWidgetInner from '@/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue'\nimport AImageWidgetSimple from '@/domains/dam/imageWidget/components/AImageWidgetSimple.vue'\nimport AMediaWidgetSimple from '@/domains/dam/imageWidget/components/AMediaWidgetSimple.vue'\nimport type { MediaAware } from '@/domains/dam/types/MediaAware'\nimport { useI18n } from 'vue-i18n'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport { useExtSystemIdForCached } from '@/domains/dam/composables/extSystemIdForCached'\nimport { DamAssetType } from '@/domains/dam/types/Asset'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n uploadLicence: IntegerId\n selectLicences: IntegerId[]\n initialImage?: ImageAware | undefined // If given, the image data is not fetched.\n configName?: string\n collab?: CollabComponentConfig\n collabStatus?: CollabStatusType\n label?: string | undefined\n readonly?: boolean\n required?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n expandMetadata?: boolean\n disableOnClickMenu?: boolean\n width?: number | undefined\n maxWidth?: number | undefined\n height?: number | undefined\n callDeleteApiOnRemove?: boolean\n damWidth?: undefined | number\n damHeight?: undefined | number\n }>(),\n {\n configName: undefined,\n collab: undefined,\n collabStatus: CollabStatus.Inactive,\n label: undefined,\n initialImage: undefined,\n initialMedia: undefined,\n readonly: false,\n required: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n expandMetadata: false,\n disableOnClickMenu: false,\n width: undefined,\n maxWidth: undefined,\n height: undefined,\n callDeleteApiOnRemove: false,\n damWidth: undefined,\n damHeight: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'afterMetadataSaveSuccess'): void\n}>()\n\nconst mediaModel = defineModel<MediaAware | null>('media', { required: true })\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n// Declared explicitly: the read-only fallback renders the slots too, and inferred types would be looser.\ndefineSlots<{\n append?: (props: { imageMedia: ImageCreateUpdateAware | MediaAware | null }) => unknown\n preview?: (props: { imageMedia: MediaAware }) => unknown\n}>()\nconst imageModel = defineModel<IntegerIdNullable>('image', { required: true })\nconst status = ref<'loading' | 'ready' | 'error'>('loading')\n// Without upload permission the existing image is still shown, read-only.\nconst uploadAllowed = ref(true)\n\nconst { damClient } = useCommonAdminCoreDamOptions(damConfigName)\nconst {\n loadDamPrvConfig,\n loadDamConfigAssetCustomFormElements,\n getDamConfigAssetCustomFormElements,\n getOrLoadDamConfigExtSystemByLicence,\n getOrLoadDamConfigExtSystemByLicences,\n} = useDamConfigState(damClient, damConfigName)\n\nconst uploadConfig = shallowRef<DamConfigLicenceExtSystemReturnType | undefined>(undefined)\n\nconst { cachedExtSystemId } = useExtSystemIdForCached(damConfigName)\n\nonMounted(async () => {\n const damConfigStore = useDamConfigStoreOf(damConfigName)\n uploadConfig.value = await getOrLoadDamConfigExtSystemByLicence(props.uploadLicence)\n if (isUndefined(uploadConfig.value)) {\n status.value = 'error'\n return\n }\n // Starts as the ext system of the upload licence, until a pick, a drop or \"edit asset\" sets another.\n cachedExtSystemId.value = uploadConfig.value.extSystem\n if (!isImageWidgetUploadConfigAllowed(uploadConfig.value, damConfigName)) {\n uploadAllowed.value = false\n try {\n if (!damConfigStore.initialized.damPrvConfig) await loadDamPrvConfig()\n status.value = 'ready'\n } catch (e) {\n status.value = 'error'\n }\n return\n }\n const promises: Promise<any>[] = []\n if (!damConfigStore.initialized.damPrvConfig) {\n promises.push(loadDamPrvConfig())\n }\n promises.push(getOrLoadDamConfigExtSystemByLicences(props.selectLicences))\n const { extSystem } = uploadConfig.value\n // Loads custom fields for every type of the ext system if none are loaded yet.\n // Otherwise loads only the image type if its earlier read failed. Loaded types are not read again.\n if (isUndefined(getDamConfigAssetCustomFormElements(extSystem, DamAssetType.Image))) {\n promises.push(\n loadDamConfigAssetCustomFormElements(\n extSystem,\n getDamConfigAssetCustomFormElements(extSystem) ? [DamAssetType.Image] : undefined\n )\n )\n }\n try {\n await Promise.all(promises)\n } catch (e) {\n status.value = 'error'\n }\n // If the image type failed while other types loaded, the form would have no fields, so this is an error.\n if (isUndefined(getDamConfigAssetCustomFormElements(extSystem, DamAssetType.Image))) status.value = 'error'\n if (status.value !== 'error') status.value = 'ready'\n})\n\nprovide(ImageWidgetUploadConfigKey, uploadConfig)\n\nconst innerComponent = ref<InstanceType<typeof ImageWidgetInner> | null>(null)\n\nconst metadataConfirm = () => {\n innerComponent.value?.metadataConfirm()\n}\n\ndefineExpose({\n metadataConfirm,\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <ImageMediaWidgetInner\n v-if=\"status === 'ready'\"\n ref=\"innerComponent\"\n v-model:media=\"mediaModel\"\n v-model:image=\"imageModel\"\n v-bind=\"props\"\n :readonly=\"readonly || !uploadAllowed\"\n @after-metadata-save-success=\"emit('afterMetadataSaveSuccess')\"\n >\n <template #append=\"{ imageMedia: appendImage }\">\n <slot\n name=\"append\"\n :image-media=\"appendImage\"\n />\n </template>\n <template #preview=\"{ imageMedia: appendImage }\">\n <slot\n name=\"preview\"\n :image-media=\"appendImage\"\n />\n </template>\n </ImageMediaWidgetInner>\n <!-- The config also fails for a user without access to the licence. The existing media or image is still shown. -->\n <div v-else-if=\"status === 'error'\">\n <AMediaWidgetSimple\n v-if=\"mediaModel\"\n :media=\"mediaModel\"\n :config-name=\"damConfigName\"\n :label=\"label\"\n :width=\"width\"\n :height=\"height\"\n :dam-width=\"damWidth\"\n :dam-height=\"damHeight\"\n >\n <template #append=\"{ media: appendMedia }\">\n <slot\n name=\"append\"\n :image-media=\"appendMedia\"\n />\n </template>\n <template #preview=\"{ media: previewMedia }\">\n <slot\n v-if=\"previewMedia\"\n name=\"preview\"\n :image-media=\"previewMedia\"\n />\n </template>\n </AMediaWidgetSimple>\n <AImageWidgetSimple\n v-else-if=\"imageModel || initialImage\"\n :model-value=\"imageModel\"\n :image=\"initialImage\"\n :config-name=\"damConfigName\"\n :label=\"label\"\n :width=\"width\"\n :height=\"height\"\n :dam-width=\"damWidth\"\n :dam-height=\"damHeight\"\n >\n <template #append=\"{ image: appendImage }\">\n <slot\n name=\"append\"\n :image-media=\"appendImage\"\n />\n </template>\n </AImageWidgetSimple>\n <div class=\"text-error\">\n {{ t('common.damImage.error.loadingConfig') }}\n </div>\n </div>\n <VProgressCircular\n v-else\n :size=\"12\"\n :width=\"2\"\n indeterminate\n />\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AImagePublicInput.js","names":["_sfc_main","AImagePublicInput_vue_vue_type_script_setup_true_lang_default","AImagePublicInput_default"],"sources":["../../../../../src/domains/dam/imageWidget/components/AImagePublicInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ImageAware, ImageCreateUpdateAware } from '@/domains/dam/types/ImageAware'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport { fetchAssetByFileId } from '@/domains/dam/api/damAssetApi'\nimport { cloneDeep, isDocId, isNull, isString } from '@/shared/utils/common'\nimport { computed, ref, toRaw, watch } from 'vue'\nimport type { AssetDetailItemDto } from '@/domains/dam/types/Asset'\nimport type { IntegerId, IntegerIdNullable } from '@/shared/types/common'\nimport { useImageActions } from '@/domains/dam/imageWidget/composables/imageActions'\nimport { useCommonAdminImageOptions } from '@/domains/dam/imageWidget/composables/commonAdminImageOptions'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport { useI18n } from 'vue-i18n'\nimport AFormTextField from '@/domains/form/components/AFormTextField.vue'\nimport AFormTextarea from '@/domains/form/components/AFormTextarea.vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useValidate } from '@/shared/validators/vuelidate/useValidate'\nimport { buildFieldRules } from '@/domains/dam/composables/uploadValidations'\nimport { createDamImage } from '@/domains/dam/imageWidget/utils/damImage'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\n\nconst props = withDefaults(\n defineProps<{\n selectLicences: IntegerId[]\n image?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n labelT?: string | undefined\n dataCy?: string | undefined\n }>(),\n {\n image: undefined,\n configName: undefined,\n labelT: 'common.damImage.public.idOrUrl',\n dataCy: undefined,\n }\n)\nconst modelValue = defineModel<IntegerIdNullable>({ default: null, required: true })\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\nconst inputField = ref('')\nconst meta = ref({ description: '', source: '' })\n\nconst resolvedSrc = ref('')\nconst resImage = ref<null | ImageCreateUpdateAware>(null)\n// The id of the image this input has just created. Its model changes to that id, and the fields are filled from the\n// answer to the create: the image is not read again. Any other change of the id is read as before.\nlet createdImageId: IntegerIdNullable = null\n\nconst isValid = ref(true)\nconst isDirty = ref(false)\n\nconst imageOptions = useCommonAdminImageOptions(damConfigName)\nconst { imageClient, imageApi } = imageOptions\nconst { damClient, endPointAsset, sourceLabel, descriptionValidation, sourceValidation } =\n useCommonAdminCoreDamOptions(damConfigName)\nconst { widgetImageToDamImageOriginalUrl } = useImageActions(imageOptions)\n\nconst { showErrorsDefault, showValidationError } = useAlerts()\nconst { t } = useI18n()\n\nconst extractUUID = (url: string): string | undefined => {\n const regex = /\\/image\\/original\\/([0-9a-fA-F-]+)\\.jpg/\n const match = url.match(regex)\n\n return match ? match[1] : undefined\n}\n\nconst validateAssetData = (asset: AssetDetailItemDto, licences: IntegerId[]) => {\n return licences.some((licence) => licence === asset.licence)\n}\n\nconst validators = useValidate()\n\nconst rules = {\n meta: {\n description: buildFieldRules(descriptionValidation, validators),\n source: buildFieldRules(sourceValidation, validators),\n },\n}\nconst v$ = useVuelidate(rules, { meta }, { $stopPropagation: true })\n\nconst validateField = async () => {\n isDirty.value = true\n isValid.value = true\n inputField.value = inputField.value.trim()\n if (inputField.value.startsWith('http')) {\n const extracted = extractUUID(inputField.value)\n if (isString(extracted)) inputField.value = extracted\n }\n if (!isDocId(inputField.value)) {\n isValid.value = false\n return Promise.reject('Incorrect URL/ID provided')\n }\n try {\n const assetRes = await fetchAssetByFileId(damClient, endPointAsset, inputField.value)\n if (isNull(assetRes.mainFile)) {\n isValid.value = false\n return Promise.reject('Incorrect asset mainFile')\n }\n if (validateAssetData(assetRes, props.selectLicences)) {\n isValid.value = true\n return Promise.resolve(assetRes)\n }\n isValid.value = false\n return Promise.reject('Incorrect asset or no access')\n } catch (e) {\n isValid.value = false\n return Promise.reject('Incorrect asset or no access')\n }\n}\n\nconst submit = async () => {\n try {\n const asset = await validateField()\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return Promise.reject('Invalid source or description')\n }\n const data = createDamImage(\n { fileId: asset.mainFile!.id, licenceId: asset.licence, internal: asset.mainFileInternal },\n { description: meta.value.description.trim(), source: meta.value.source.trim() },\n { position: 0, id: resImage.value?.id || undefined }\n )\n const imageRes = resImage.value?.id\n ? await imageApi.updateImage(imageClient, resImage.value.id, data)\n : await imageApi.createImage(imageClient, data)\n resImage.value = imageRes\n if (!data.id) createdImageId = imageRes.id\n modelValue.value = imageRes.id\n // What the read of the created image used to put into the fields, from the answer to its create.\n if (!data.id) await reload(imageRes, imageRes.id, true)\n return Promise.resolve({ asset: asset, image: imageRes })\n } catch (e) {\n showErrorsDefault(e)\n return undefined\n }\n}\n\nconst updatePreviewAndTexts = () => {\n resolvedSrc.value = widgetImageToDamImageOriginalUrl(createDamImage({ fileId: inputField.value, licenceId: 0 }))\n}\n\nconst onBlur = async () => {\n try {\n await validateField()\n updatePreviewAndTexts()\n } catch (e) {\n //\n }\n}\n\nconst reload = async (newImage: ImageCreateUpdateAware | undefined, newImageId: IntegerIdNullable, force = false) => {\n resolvedSrc.value = ''\n if ((newImage && isNull(resImage.value)) || (newImage && force)) {\n resImage.value = cloneDeep(newImage)\n if (resImage.value) {\n inputField.value = resImage.value.dam.damId\n resolvedSrc.value = widgetImageToDamImageOriginalUrl(toRaw(resImage.value))\n meta.value.description = resImage.value.texts.description\n meta.value.source = resImage.value.texts.source\n onBlur()\n }\n return\n }\n if (newImageId) {\n try {\n resImage.value = await imageApi.fetchImage(imageClient, newImageId)\n } catch (error) {\n showErrorsDefault(error)\n }\n if (!isNull(resImage.value)) {\n inputField.value = resImage.value.dam.damId\n resolvedSrc.value = widgetImageToDamImageOriginalUrl(toRaw(resImage.value))\n meta.value.description = resImage.value.texts.description\n meta.value.source = resImage.value.texts.source\n onBlur()\n }\n return\n }\n resImage.value = null\n meta.value.description = ''\n meta.value.source = ''\n}\n\nconst disabled = computed(() => !(isValid.value && isDirty.value))\n\nwatch(\n [() => props.image, modelValue],\n async ([newImage, newImageId], [oldImage]) => {\n const created = createdImageId\n createdImageId = null\n if (!isNull(created) && newImageId === created && newImage === oldImage) return\n await reload(newImage, newImageId)\n },\n { immediate: true }\n)\n\ndefineExpose({\n submit,\n})\n</script>\n\n<template>\n <ARow>\n <AFormTextField\n v-model=\"inputField\"\n :label=\"labelT ? t(labelT) : undefined\"\n :error=\"!isValid\"\n :error-message=\"isValid ? undefined : t('common.damImage.public.inputError')\"\n required\n @blur=\"onBlur\"\n @keyup.enter=\"onBlur\"\n />\n </ARow>\n <ARow>\n <AFormTextarea\n v-model=\"meta.description\"\n :label=\"t('common.damImage.image.model.texts.description')\"\n :v=\"v$.meta.description\"\n :disabled=\"disabled\"\n />\n </ARow>\n <ARow>\n <AFormTextarea\n v-model=\"meta.source\"\n :label=\"sourceLabel\"\n :v=\"v$.meta.source\"\n :disabled=\"disabled\"\n />\n </ARow>\n <ARow style=\"min-height: 50px\">\n <div>{{ t('common.damImage.public.imagePreview') }}:</div>\n <img\n v-if=\"resolvedSrc.length > 0\"\n :src=\"resolvedSrc\"\n alt=\"\"\n />\n </ARow>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AImagePublicInput.js","names":["_sfc_main","AImagePublicInput_vue_vue_type_script_setup_true_lang_default","AImagePublicInput_default"],"sources":["../../../../../src/domains/dam/imageWidget/components/AImagePublicInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ImageAware, ImageCreateUpdateAware } from '@/domains/dam/types/ImageAware'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport { fetchAssetByFileId } from '@/domains/dam/api/damAssetApi'\nimport { cloneDeep, isDocId, isNull, isString } from '@/shared/utils/common'\nimport { computed, ref, toRaw, watch } from 'vue'\nimport type { AssetDetailItemDto } from '@/domains/dam/types/Asset'\nimport type { IntegerId, IntegerIdNullable } from '@/shared/types/common'\nimport { useImageActions } from '@/domains/dam/imageWidget/composables/imageActions'\nimport { useCommonAdminImageOptions } from '@/domains/dam/imageWidget/composables/commonAdminImageOptions'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport { useI18n } from 'vue-i18n'\nimport AFormTextField from '@/domains/form/components/AFormTextField.vue'\nimport AFormTextarea from '@/domains/form/components/AFormTextarea.vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useValidate } from '@/shared/validators/vuelidate/useValidate'\nimport { buildFieldRules } from '@/domains/dam/composables/uploadValidations'\nimport { createDamImage } from '@/domains/dam/imageWidget/utils/damImage'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\n\nconst props = withDefaults(\n defineProps<{\n selectLicences: IntegerId[]\n image?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n labelT?: string | undefined\n dataCy?: string | undefined\n }>(),\n {\n image: undefined,\n configName: undefined,\n labelT: 'common.damImage.public.idOrUrl',\n dataCy: undefined,\n }\n)\nconst modelValue = defineModel<IntegerIdNullable>({ default: null, required: true })\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\nconst inputField = ref('')\nconst meta = ref({ description: '', source: '' })\n\nconst resolvedSrc = ref('')\nconst resImage = ref<null | ImageCreateUpdateAware>(null)\n// Id of the image this input just created. The model changes to it, and\n// fields are filled from the create response, so the image is not read again.\n// Any other id change triggers a read.\nlet createdImageId: IntegerIdNullable = null\n\nconst isValid = ref(true)\nconst isDirty = ref(false)\n\nconst imageOptions = useCommonAdminImageOptions(damConfigName)\nconst { imageClient, imageApi } = imageOptions\nconst { damClient, endPointAsset, sourceLabel, descriptionValidation, sourceValidation } =\n useCommonAdminCoreDamOptions(damConfigName)\nconst { widgetImageToDamImageOriginalUrl } = useImageActions(imageOptions)\n\nconst { showErrorsDefault, showValidationError } = useAlerts()\nconst { t } = useI18n()\n\nconst extractUUID = (url: string): string | undefined => {\n const regex = /\\/image\\/original\\/([0-9a-fA-F-]+)\\.jpg/\n const match = url.match(regex)\n\n return match ? match[1] : undefined\n}\n\nconst validateAssetData = (asset: AssetDetailItemDto, licences: IntegerId[]) => {\n return licences.some((licence) => licence === asset.licence)\n}\n\nconst validators = useValidate()\n\nconst rules = {\n meta: {\n description: buildFieldRules(descriptionValidation, validators),\n source: buildFieldRules(sourceValidation, validators),\n },\n}\nconst v$ = useVuelidate(rules, { meta }, { $stopPropagation: true })\n\nconst validateField = async () => {\n isDirty.value = true\n isValid.value = true\n inputField.value = inputField.value.trim()\n if (inputField.value.startsWith('http')) {\n const extracted = extractUUID(inputField.value)\n if (isString(extracted)) inputField.value = extracted\n }\n if (!isDocId(inputField.value)) {\n isValid.value = false\n return Promise.reject('Incorrect URL/ID provided')\n }\n try {\n const assetRes = await fetchAssetByFileId(damClient, endPointAsset, inputField.value)\n if (isNull(assetRes.mainFile)) {\n isValid.value = false\n return Promise.reject('Incorrect asset mainFile')\n }\n if (validateAssetData(assetRes, props.selectLicences)) {\n isValid.value = true\n return Promise.resolve(assetRes)\n }\n isValid.value = false\n return Promise.reject('Incorrect asset or no access')\n } catch (e) {\n isValid.value = false\n return Promise.reject('Incorrect asset or no access')\n }\n}\n\nconst submit = async () => {\n try {\n const asset = await validateField()\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return Promise.reject('Invalid source or description')\n }\n const data = createDamImage(\n { fileId: asset.mainFile!.id, licenceId: asset.licence, internal: asset.mainFileInternal },\n { description: meta.value.description.trim(), source: meta.value.source.trim() },\n { position: 0, id: resImage.value?.id || undefined }\n )\n const imageRes = resImage.value?.id\n ? await imageApi.updateImage(imageClient, resImage.value.id, data)\n : await imageApi.createImage(imageClient, data)\n resImage.value = imageRes\n if (!data.id) createdImageId = imageRes.id\n modelValue.value = imageRes.id\n // Fills the fields from the create response instead of reading the created image.\n if (!data.id) await reload(imageRes, imageRes.id, true)\n return Promise.resolve({ asset: asset, image: imageRes })\n } catch (e) {\n showErrorsDefault(e)\n return undefined\n }\n}\n\nconst updatePreviewAndTexts = () => {\n resolvedSrc.value = widgetImageToDamImageOriginalUrl(createDamImage({ fileId: inputField.value, licenceId: 0 }))\n}\n\nconst onBlur = async () => {\n try {\n await validateField()\n updatePreviewAndTexts()\n } catch (e) {\n //\n }\n}\n\nconst reload = async (newImage: ImageCreateUpdateAware | undefined, newImageId: IntegerIdNullable, force = false) => {\n resolvedSrc.value = ''\n if ((newImage && isNull(resImage.value)) || (newImage && force)) {\n resImage.value = cloneDeep(newImage)\n if (resImage.value) {\n inputField.value = resImage.value.dam.damId\n resolvedSrc.value = widgetImageToDamImageOriginalUrl(toRaw(resImage.value))\n meta.value.description = resImage.value.texts.description\n meta.value.source = resImage.value.texts.source\n onBlur()\n }\n return\n }\n if (newImageId) {\n try {\n resImage.value = await imageApi.fetchImage(imageClient, newImageId)\n } catch (error) {\n showErrorsDefault(error)\n }\n if (!isNull(resImage.value)) {\n inputField.value = resImage.value.dam.damId\n resolvedSrc.value = widgetImageToDamImageOriginalUrl(toRaw(resImage.value))\n meta.value.description = resImage.value.texts.description\n meta.value.source = resImage.value.texts.source\n onBlur()\n }\n return\n }\n resImage.value = null\n meta.value.description = ''\n meta.value.source = ''\n}\n\nconst disabled = computed(() => !(isValid.value && isDirty.value))\n\nwatch(\n [() => props.image, modelValue],\n async ([newImage, newImageId], [oldImage]) => {\n const created = createdImageId\n createdImageId = null\n if (!isNull(created) && newImageId === created && newImage === oldImage) return\n await reload(newImage, newImageId)\n },\n { immediate: true }\n)\n\ndefineExpose({\n submit,\n})\n</script>\n\n<template>\n <ARow>\n <AFormTextField\n v-model=\"inputField\"\n :label=\"labelT ? t(labelT) : undefined\"\n :error=\"!isValid\"\n :error-message=\"isValid ? undefined : t('common.damImage.public.inputError')\"\n required\n @blur=\"onBlur\"\n @keyup.enter=\"onBlur\"\n />\n </ARow>\n <ARow>\n <AFormTextarea\n v-model=\"meta.description\"\n :label=\"t('common.damImage.image.model.texts.description')\"\n :v=\"v$.meta.description\"\n :disabled=\"disabled\"\n />\n </ARow>\n <ARow>\n <AFormTextarea\n v-model=\"meta.source\"\n :label=\"sourceLabel\"\n :v=\"v$.meta.source\"\n :disabled=\"disabled\"\n />\n </ARow>\n <ARow style=\"min-height: 50px\">\n <div>{{ t('common.damImage.public.imagePreview') }}:</div>\n <img\n v-if=\"resolvedSrc.length > 0\"\n :src=\"resolvedSrc\"\n alt=\"\"\n />\n </ARow>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AImagePublicInput.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createElementBlock","_Fragment","_createVNode","ARow","_withCtx","AFormTextField","_unref","_withKeys","AFormTextarea","_createElementVNode","_toDisplayString","_createCommentVNode","ARow_default","AFormTextField_default","AFormTextarea_default","useVuelidate","_hoisted_1","AImagePublicInput_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","__expose","props","__props","modelValue","useModel","damConfigName","useDamConfigName","inputField","ref","meta","resolvedSrc","resImage","createdImageId","isValid","isDirty","imageOptions","useCommonAdminImageOptions","useCommonAdminCoreDamOptions","useImageActions","useAlerts","useI18n","extractUUID","match","url","validateAssetData","licences","licence","asset","validators","useValidate","rules","buildFieldRules","descriptionValidation","sourceValidation","v$","validateField","extracted","isString","isDocId","assetRes","fetchAssetByFileId","damClient","endPointAsset","isNull","submit","showValidationError","data","createDamImage","imageRes","imageApi","imageClient","reload","updatePreviewAndTexts","widgetImageToDamImageOriginalUrl","onBlur","newImage","force","cloneDeep","toRaw","newImageId","error","disabled","computed","watch","oldImage","created","openBlock","createElementBlock","Fragment","createVNode","withCtx","_cache","$event","unref","t","withKeys","sourceLabel","createElementVNode","toDisplayString","createCommentVNode"],"sources":["../../../../../src/domains/dam/imageWidget/components/AImagePublicInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ImageAware, ImageCreateUpdateAware } from '@/domains/dam/types/ImageAware'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport { fetchAssetByFileId } from '@/domains/dam/api/damAssetApi'\nimport { cloneDeep, isDocId, isNull, isString } from '@/shared/utils/common'\nimport { computed, ref, toRaw, watch } from 'vue'\nimport type { AssetDetailItemDto } from '@/domains/dam/types/Asset'\nimport type { IntegerId, IntegerIdNullable } from '@/shared/types/common'\nimport { useImageActions } from '@/domains/dam/imageWidget/composables/imageActions'\nimport { useCommonAdminImageOptions } from '@/domains/dam/imageWidget/composables/commonAdminImageOptions'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport { useI18n } from 'vue-i18n'\nimport AFormTextField from '@/domains/form/components/AFormTextField.vue'\nimport AFormTextarea from '@/domains/form/components/AFormTextarea.vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useValidate } from '@/shared/validators/vuelidate/useValidate'\nimport { buildFieldRules } from '@/domains/dam/composables/uploadValidations'\nimport { createDamImage } from '@/domains/dam/imageWidget/utils/damImage'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\n\nconst props = withDefaults(\n defineProps<{\n selectLicences: IntegerId[]\n image?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n labelT?: string | undefined\n dataCy?: string | undefined\n }>(),\n {\n image: undefined,\n configName: undefined,\n labelT: 'common.damImage.public.idOrUrl',\n dataCy: undefined,\n }\n)\nconst modelValue = defineModel<IntegerIdNullable>({ default: null, required: true })\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\nconst inputField = ref('')\nconst meta = ref({ description: '', source: '' })\n\nconst resolvedSrc = ref('')\nconst resImage = ref<null | ImageCreateUpdateAware>(null)\n// The id of the image this input has just created. Its model changes to that id, and the fields are filled from the\n// answer to the create: the image is not read again. Any other change of the id is read as before.\nlet createdImageId: IntegerIdNullable = null\n\nconst isValid = ref(true)\nconst isDirty = ref(false)\n\nconst imageOptions = useCommonAdminImageOptions(damConfigName)\nconst { imageClient, imageApi } = imageOptions\nconst { damClient, endPointAsset, sourceLabel, descriptionValidation, sourceValidation } =\n useCommonAdminCoreDamOptions(damConfigName)\nconst { widgetImageToDamImageOriginalUrl } = useImageActions(imageOptions)\n\nconst { showErrorsDefault, showValidationError } = useAlerts()\nconst { t } = useI18n()\n\nconst extractUUID = (url: string): string | undefined => {\n const regex = /\\/image\\/original\\/([0-9a-fA-F-]+)\\.jpg/\n const match = url.match(regex)\n\n return match ? match[1] : undefined\n}\n\nconst validateAssetData = (asset: AssetDetailItemDto, licences: IntegerId[]) => {\n return licences.some((licence) => licence === asset.licence)\n}\n\nconst validators = useValidate()\n\nconst rules = {\n meta: {\n description: buildFieldRules(descriptionValidation, validators),\n source: buildFieldRules(sourceValidation, validators),\n },\n}\nconst v$ = useVuelidate(rules, { meta }, { $stopPropagation: true })\n\nconst validateField = async () => {\n isDirty.value = true\n isValid.value = true\n inputField.value = inputField.value.trim()\n if (inputField.value.startsWith('http')) {\n const extracted = extractUUID(inputField.value)\n if (isString(extracted)) inputField.value = extracted\n }\n if (!isDocId(inputField.value)) {\n isValid.value = false\n return Promise.reject('Incorrect URL/ID provided')\n }\n try {\n const assetRes = await fetchAssetByFileId(damClient, endPointAsset, inputField.value)\n if (isNull(assetRes.mainFile)) {\n isValid.value = false\n return Promise.reject('Incorrect asset mainFile')\n }\n if (validateAssetData(assetRes, props.selectLicences)) {\n isValid.value = true\n return Promise.resolve(assetRes)\n }\n isValid.value = false\n return Promise.reject('Incorrect asset or no access')\n } catch (e) {\n isValid.value = false\n return Promise.reject('Incorrect asset or no access')\n }\n}\n\nconst submit = async () => {\n try {\n const asset = await validateField()\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return Promise.reject('Invalid source or description')\n }\n const data = createDamImage(\n { fileId: asset.mainFile!.id, licenceId: asset.licence, internal: asset.mainFileInternal },\n { description: meta.value.description.trim(), source: meta.value.source.trim() },\n { position: 0, id: resImage.value?.id || undefined }\n )\n const imageRes = resImage.value?.id\n ? await imageApi.updateImage(imageClient, resImage.value.id, data)\n : await imageApi.createImage(imageClient, data)\n resImage.value = imageRes\n if (!data.id) createdImageId = imageRes.id\n modelValue.value = imageRes.id\n // What the read of the created image used to put into the fields, from the answer to its create.\n if (!data.id) await reload(imageRes, imageRes.id, true)\n return Promise.resolve({ asset: asset, image: imageRes })\n } catch (e) {\n showErrorsDefault(e)\n return undefined\n }\n}\n\nconst updatePreviewAndTexts = () => {\n resolvedSrc.value = widgetImageToDamImageOriginalUrl(createDamImage({ fileId: inputField.value, licenceId: 0 }))\n}\n\nconst onBlur = async () => {\n try {\n await validateField()\n updatePreviewAndTexts()\n } catch (e) {\n //\n }\n}\n\nconst reload = async (newImage: ImageCreateUpdateAware | undefined, newImageId: IntegerIdNullable, force = false) => {\n resolvedSrc.value = ''\n if ((newImage && isNull(resImage.value)) || (newImage && force)) {\n resImage.value = cloneDeep(newImage)\n if (resImage.value) {\n inputField.value = resImage.value.dam.damId\n resolvedSrc.value = widgetImageToDamImageOriginalUrl(toRaw(resImage.value))\n meta.value.description = resImage.value.texts.description\n meta.value.source = resImage.value.texts.source\n onBlur()\n }\n return\n }\n if (newImageId) {\n try {\n resImage.value = await imageApi.fetchImage(imageClient, newImageId)\n } catch (error) {\n showErrorsDefault(error)\n }\n if (!isNull(resImage.value)) {\n inputField.value = resImage.value.dam.damId\n resolvedSrc.value = widgetImageToDamImageOriginalUrl(toRaw(resImage.value))\n meta.value.description = resImage.value.texts.description\n meta.value.source = resImage.value.texts.source\n onBlur()\n }\n return\n }\n resImage.value = null\n meta.value.description = ''\n meta.value.source = ''\n}\n\nconst disabled = computed(() => !(isValid.value && isDirty.value))\n\nwatch(\n [() => props.image, modelValue],\n async ([newImage, newImageId], [oldImage]) => {\n const created = createdImageId\n createdImageId = null\n if (!isNull(created) && newImageId === created && newImage === oldImage) return\n await reload(newImage, newImageId)\n },\n { immediate: true }\n)\n\ndefineExpose({\n submit,\n})\n</script>\n\n<template>\n <ARow>\n <AFormTextField\n v-model=\"inputField\"\n :label=\"labelT ? t(labelT) : undefined\"\n :error=\"!isValid\"\n :error-message=\"isValid ? undefined : t('common.damImage.public.inputError')\"\n required\n @blur=\"onBlur\"\n @keyup.enter=\"onBlur\"\n />\n </ARow>\n <ARow>\n <AFormTextarea\n v-model=\"meta.description\"\n :label=\"t('common.damImage.image.model.texts.description')\"\n :v=\"v$.meta.description\"\n :disabled=\"disabled\"\n />\n </ARow>\n <ARow>\n <AFormTextarea\n v-model=\"meta.source\"\n :label=\"sourceLabel\"\n :v=\"v$.meta.source\"\n :disabled=\"disabled\"\n />\n </ARow>\n <ARow style=\"min-height: 50px\">\n <div>{{ t('common.damImage.public.imagePreview') }}:</div>\n <img\n v-if=\"resolvedSrc.length > 0\"\n :src=\"resolvedSrc\"\n alt=\"\"\n />\n </ARow>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"AImagePublicInput.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createElementBlock","_Fragment","_createVNode","ARow","_withCtx","AFormTextField","_unref","_withKeys","AFormTextarea","_createElementVNode","_toDisplayString","_createCommentVNode","ARow_default","AFormTextField_default","AFormTextarea_default","useVuelidate","_hoisted_1","AImagePublicInput_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","__expose","props","__props","modelValue","useModel","damConfigName","useDamConfigName","inputField","ref","meta","resolvedSrc","resImage","createdImageId","isValid","isDirty","imageOptions","useCommonAdminImageOptions","useCommonAdminCoreDamOptions","useImageActions","useAlerts","useI18n","extractUUID","match","url","validateAssetData","licences","licence","asset","validators","useValidate","rules","buildFieldRules","descriptionValidation","sourceValidation","v$","validateField","extracted","isString","isDocId","assetRes","fetchAssetByFileId","damClient","endPointAsset","isNull","submit","showValidationError","data","createDamImage","imageRes","imageApi","imageClient","reload","updatePreviewAndTexts","widgetImageToDamImageOriginalUrl","onBlur","newImage","force","cloneDeep","toRaw","newImageId","error","disabled","computed","watch","oldImage","created","openBlock","createElementBlock","Fragment","createVNode","withCtx","_cache","$event","unref","t","withKeys","sourceLabel","createElementVNode","toDisplayString","createCommentVNode"],"sources":["../../../../../src/domains/dam/imageWidget/components/AImagePublicInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport type { ImageAware, ImageCreateUpdateAware } from '@/domains/dam/types/ImageAware'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport { fetchAssetByFileId } from '@/domains/dam/api/damAssetApi'\nimport { cloneDeep, isDocId, isNull, isString } from '@/shared/utils/common'\nimport { computed, ref, toRaw, watch } from 'vue'\nimport type { AssetDetailItemDto } from '@/domains/dam/types/Asset'\nimport type { IntegerId, IntegerIdNullable } from '@/shared/types/common'\nimport { useImageActions } from '@/domains/dam/imageWidget/composables/imageActions'\nimport { useCommonAdminImageOptions } from '@/domains/dam/imageWidget/composables/commonAdminImageOptions'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport { useI18n } from 'vue-i18n'\nimport AFormTextField from '@/domains/form/components/AFormTextField.vue'\nimport AFormTextarea from '@/domains/form/components/AFormTextarea.vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useValidate } from '@/shared/validators/vuelidate/useValidate'\nimport { buildFieldRules } from '@/domains/dam/composables/uploadValidations'\nimport { createDamImage } from '@/domains/dam/imageWidget/utils/damImage'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\n\nconst props = withDefaults(\n defineProps<{\n selectLicences: IntegerId[]\n image?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n labelT?: string | undefined\n dataCy?: string | undefined\n }>(),\n {\n image: undefined,\n configName: undefined,\n labelT: 'common.damImage.public.idOrUrl',\n dataCy: undefined,\n }\n)\nconst modelValue = defineModel<IntegerIdNullable>({ default: null, required: true })\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\nconst inputField = ref('')\nconst meta = ref({ description: '', source: '' })\n\nconst resolvedSrc = ref('')\nconst resImage = ref<null | ImageCreateUpdateAware>(null)\n// Id of the image this input just created. The model changes to it, and\n// fields are filled from the create response, so the image is not read again.\n// Any other id change triggers a read.\nlet createdImageId: IntegerIdNullable = null\n\nconst isValid = ref(true)\nconst isDirty = ref(false)\n\nconst imageOptions = useCommonAdminImageOptions(damConfigName)\nconst { imageClient, imageApi } = imageOptions\nconst { damClient, endPointAsset, sourceLabel, descriptionValidation, sourceValidation } =\n useCommonAdminCoreDamOptions(damConfigName)\nconst { widgetImageToDamImageOriginalUrl } = useImageActions(imageOptions)\n\nconst { showErrorsDefault, showValidationError } = useAlerts()\nconst { t } = useI18n()\n\nconst extractUUID = (url: string): string | undefined => {\n const regex = /\\/image\\/original\\/([0-9a-fA-F-]+)\\.jpg/\n const match = url.match(regex)\n\n return match ? match[1] : undefined\n}\n\nconst validateAssetData = (asset: AssetDetailItemDto, licences: IntegerId[]) => {\n return licences.some((licence) => licence === asset.licence)\n}\n\nconst validators = useValidate()\n\nconst rules = {\n meta: {\n description: buildFieldRules(descriptionValidation, validators),\n source: buildFieldRules(sourceValidation, validators),\n },\n}\nconst v$ = useVuelidate(rules, { meta }, { $stopPropagation: true })\n\nconst validateField = async () => {\n isDirty.value = true\n isValid.value = true\n inputField.value = inputField.value.trim()\n if (inputField.value.startsWith('http')) {\n const extracted = extractUUID(inputField.value)\n if (isString(extracted)) inputField.value = extracted\n }\n if (!isDocId(inputField.value)) {\n isValid.value = false\n return Promise.reject('Incorrect URL/ID provided')\n }\n try {\n const assetRes = await fetchAssetByFileId(damClient, endPointAsset, inputField.value)\n if (isNull(assetRes.mainFile)) {\n isValid.value = false\n return Promise.reject('Incorrect asset mainFile')\n }\n if (validateAssetData(assetRes, props.selectLicences)) {\n isValid.value = true\n return Promise.resolve(assetRes)\n }\n isValid.value = false\n return Promise.reject('Incorrect asset or no access')\n } catch (e) {\n isValid.value = false\n return Promise.reject('Incorrect asset or no access')\n }\n}\n\nconst submit = async () => {\n try {\n const asset = await validateField()\n v$.value.$touch()\n if (v$.value.$invalid) {\n showValidationError()\n return Promise.reject('Invalid source or description')\n }\n const data = createDamImage(\n { fileId: asset.mainFile!.id, licenceId: asset.licence, internal: asset.mainFileInternal },\n { description: meta.value.description.trim(), source: meta.value.source.trim() },\n { position: 0, id: resImage.value?.id || undefined }\n )\n const imageRes = resImage.value?.id\n ? await imageApi.updateImage(imageClient, resImage.value.id, data)\n : await imageApi.createImage(imageClient, data)\n resImage.value = imageRes\n if (!data.id) createdImageId = imageRes.id\n modelValue.value = imageRes.id\n // Fills the fields from the create response instead of reading the created image.\n if (!data.id) await reload(imageRes, imageRes.id, true)\n return Promise.resolve({ asset: asset, image: imageRes })\n } catch (e) {\n showErrorsDefault(e)\n return undefined\n }\n}\n\nconst updatePreviewAndTexts = () => {\n resolvedSrc.value = widgetImageToDamImageOriginalUrl(createDamImage({ fileId: inputField.value, licenceId: 0 }))\n}\n\nconst onBlur = async () => {\n try {\n await validateField()\n updatePreviewAndTexts()\n } catch (e) {\n //\n }\n}\n\nconst reload = async (newImage: ImageCreateUpdateAware | undefined, newImageId: IntegerIdNullable, force = false) => {\n resolvedSrc.value = ''\n if ((newImage && isNull(resImage.value)) || (newImage && force)) {\n resImage.value = cloneDeep(newImage)\n if (resImage.value) {\n inputField.value = resImage.value.dam.damId\n resolvedSrc.value = widgetImageToDamImageOriginalUrl(toRaw(resImage.value))\n meta.value.description = resImage.value.texts.description\n meta.value.source = resImage.value.texts.source\n onBlur()\n }\n return\n }\n if (newImageId) {\n try {\n resImage.value = await imageApi.fetchImage(imageClient, newImageId)\n } catch (error) {\n showErrorsDefault(error)\n }\n if (!isNull(resImage.value)) {\n inputField.value = resImage.value.dam.damId\n resolvedSrc.value = widgetImageToDamImageOriginalUrl(toRaw(resImage.value))\n meta.value.description = resImage.value.texts.description\n meta.value.source = resImage.value.texts.source\n onBlur()\n }\n return\n }\n resImage.value = null\n meta.value.description = ''\n meta.value.source = ''\n}\n\nconst disabled = computed(() => !(isValid.value && isDirty.value))\n\nwatch(\n [() => props.image, modelValue],\n async ([newImage, newImageId], [oldImage]) => {\n const created = createdImageId\n createdImageId = null\n if (!isNull(created) && newImageId === created && newImage === oldImage) return\n await reload(newImage, newImageId)\n },\n { immediate: true }\n)\n\ndefineExpose({\n submit,\n})\n</script>\n\n<template>\n <ARow>\n <AFormTextField\n v-model=\"inputField\"\n :label=\"labelT ? t(labelT) : undefined\"\n :error=\"!isValid\"\n :error-message=\"isValid ? undefined : t('common.damImage.public.inputError')\"\n required\n @blur=\"onBlur\"\n @keyup.enter=\"onBlur\"\n />\n </ARow>\n <ARow>\n <AFormTextarea\n v-model=\"meta.description\"\n :label=\"t('common.damImage.image.model.texts.description')\"\n :v=\"v$.meta.description\"\n :disabled=\"disabled\"\n />\n </ARow>\n <ARow>\n <AFormTextarea\n v-model=\"meta.source\"\n :label=\"sourceLabel\"\n :v=\"v$.meta.source\"\n :disabled=\"disabled\"\n />\n </ARow>\n <ARow style=\"min-height: 50px\">\n <div>{{ t('common.damImage.public.imagePreview') }}:</div>\n <img\n v-if=\"resolvedSrc.length > 0\"\n :src=\"resolvedSrc\"\n alt=\"\"\n />\n </ARow>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AImageWidget.js","names":["_sfc_main","AImageWidget_vue_vue_type_script_setup_true_lang_default","AImageWidget_default"],"sources":["../../../../../src/domains/dam/imageWidget/components/AImageWidget.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { IntegerId, IntegerIdNullable } from '@/shared/types/common'\nimport { onMounted, provide, ref, shallowRef } from 'vue'\nimport { useDamConfigState } from '@/domains/dam/config/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/domains/dam/types/ImageAware'\nimport type { UploadQueueKey } from '@/domains/dam/types/UploadQueue'\nimport ImageWidgetInner from '@/domains/dam/imageWidget/components/ImageWidgetInner.vue'\nimport AImageWidgetSimple from '@/domains/dam/imageWidget/components/AImageWidgetSimple.vue'\nimport { ImageWidgetUploadConfigKey } from '@/domains/dam/imageWidget/utils/imageWidgetInkectionKeys'\nimport { isUndefined } from '@/shared/utils/common'\nimport { isImageWidgetUploadConfigAllowed } from '@/domains/dam/config/utils/damFilterUserAllowedUploadConfigs'\nimport { type CollabComponentConfig, CollabStatus, type CollabStatusType } from '@/domains/collab/types/Collab'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/domains/dam/types/DamConfig'\nimport { useDamConfigStoreOf } from '@/domains/dam/config/store/damConfigStore'\nimport { useI18n } from 'vue-i18n'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport { useExtSystemIdForCached } from '@/domains/dam/composables/extSystemIdForCached'\nimport { DamAssetType } from '@/domains/dam/types/Asset'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerIdNullable\n queueKey: UploadQueueKey\n uploadLicence: IntegerId\n selectLicences: IntegerId[]\n image?: ImageAware | undefined // optional, if available, no need to fetch image data\n configName?: string\n collab?: CollabComponentConfig\n collabStatus?: CollabStatusType\n label?: string | undefined\n readonly?: boolean\n required?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n expandMetadata?: boolean\n disableOnClickMenu?: boolean\n width?: number | undefined\n maxWidth?: number | undefined\n height?: number | undefined\n callDeleteApiOnRemove?: boolean\n damWidth?: undefined | number\n damHeight?: undefined | number\n }>(),\n {\n configName: undefined,\n collab: undefined,\n collabStatus: CollabStatus.Inactive,\n label: undefined,\n image: undefined,\n readonly: false,\n required: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n expandMetadata: false,\n disableOnClickMenu: false,\n width: undefined,\n maxWidth: undefined,\n height: undefined,\n callDeleteApiOnRemove: false,\n damWidth: undefined,\n damHeight: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerIdNullable): void\n (e: 'afterMetadataSaveSuccess'): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n// Declared: the read-only fallback renders the slot too, and inferred it would take its looser type.\ndefineSlots<{\n append?: (props: { image: ImageCreateUpdateAware | null }) => unknown\n}>()\n\nconst status = ref<'loading' | 'ready' | 'error'>('loading')\n// Not being allowed to upload is no reason to hide the image that is already there: it is shown read-only.\nconst uploadAllowed = ref(true)\n\nconst { damClient } = useCommonAdminCoreDamOptions(damConfigName)\nconst {\n loadDamPrvConfig,\n loadDamConfigAssetCustomFormElements,\n getDamConfigAssetCustomFormElements,\n getOrLoadDamConfigExtSystemByLicence,\n getOrLoadDamConfigExtSystemByLicences,\n} = useDamConfigState(damClient, damConfigName)\n\nconst uploadConfig = shallowRef<DamConfigLicenceExtSystemReturnType | undefined>(undefined)\n\nconst { cachedExtSystemId } = useExtSystemIdForCached(damConfigName)\n\nonMounted(async () => {\n const damConfigStore = useDamConfigStoreOf(damConfigName)\n uploadConfig.value = await getOrLoadDamConfigExtSystemByLicence(props.uploadLicence)\n if (isUndefined(uploadConfig.value)) {\n status.value = 'error'\n return\n }\n // As the gallery's root: the ext system of its upload licence, till a pick, a drop or \"edit asset\" writes another.\n cachedExtSystemId.value = uploadConfig.value.extSystem\n if (!isImageWidgetUploadConfigAllowed(uploadConfig.value, damConfigName)) {\n uploadAllowed.value = false\n try {\n if (!damConfigStore.initialized.damPrvConfig) await loadDamPrvConfig()\n status.value = 'ready'\n } catch (e) {\n status.value = 'error'\n }\n return\n }\n const promises: Promise<any>[] = []\n if (!damConfigStore.initialized.damPrvConfig) {\n promises.push(loadDamPrvConfig())\n }\n promises.push(getOrLoadDamConfigExtSystemByLicences(props.selectLicences))\n const { extSystem } = uploadConfig.value\n // The custom fields of its images: every type of the ext system where it has none yet, else the image type alone\n // where its read failed before. The types loaded are not read again.\n if (isUndefined(getDamConfigAssetCustomFormElements(extSystem, DamAssetType.Image))) {\n promises.push(\n loadDamConfigAssetCustomFormElements(\n extSystem,\n getDamConfigAssetCustomFormElements(extSystem) ? [DamAssetType.Image] : undefined\n )\n )\n }\n try {\n await Promise.all(promises)\n } catch (e) {\n status.value = 'error'\n }\n // The image type whose read failed beside types that answered is not loaded: its form would have no field.\n if (isUndefined(getDamConfigAssetCustomFormElements(extSystem, DamAssetType.Image))) status.value = 'error'\n if (status.value !== 'error') status.value = 'ready'\n})\n\nprovide(ImageWidgetUploadConfigKey, uploadConfig)\n\nconst innerComponent = ref<InstanceType<typeof ImageWidgetInner> | null>(null)\n\nconst metadataConfirm = () => {\n innerComponent.value?.metadataConfirm()\n}\n\ndefineExpose({\n metadataConfirm,\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <ImageWidgetInner\n v-if=\"status === 'ready'\"\n ref=\"innerComponent\"\n v-bind=\"props\"\n :readonly=\"readonly || !uploadAllowed\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n @after-metadata-save-success=\"emit('afterMetadataSaveSuccess')\"\n >\n <template #append=\"{ image: appendImage }\">\n <slot\n name=\"append\"\n :image=\"appendImage\"\n />\n </template>\n </ImageWidgetInner>\n <!-- The config fails also for a user without access to the licence: the image already there is still shown. -->\n <div v-else-if=\"status === 'error'\">\n <AImageWidgetSimple\n v-if=\"modelValue || image\"\n :model-value=\"modelValue\"\n :image=\"image\"\n :config-name=\"damConfigName\"\n :label=\"label\"\n :width=\"width\"\n :height=\"height\"\n :dam-width=\"damWidth\"\n :dam-height=\"damHeight\"\n >\n <template #append=\"{ image: appendImage }\">\n <slot\n name=\"append\"\n :image=\"appendImage\"\n />\n </template>\n </AImageWidgetSimple>\n <div class=\"text-error\">\n {{ t('common.damImage.error.loadingConfig') }}\n </div>\n </div>\n <VProgressCircular\n v-else\n :size=\"12\"\n :width=\"2\"\n indeterminate\n />\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AImageWidget.js","names":["_sfc_main","AImageWidget_vue_vue_type_script_setup_true_lang_default","AImageWidget_default"],"sources":["../../../../../src/domains/dam/imageWidget/components/AImageWidget.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { IntegerId, IntegerIdNullable } from '@/shared/types/common'\nimport { onMounted, provide, ref, shallowRef } from 'vue'\nimport { useDamConfigState } from '@/domains/dam/config/composables/damConfigState'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/domains/dam/types/ImageAware'\nimport type { UploadQueueKey } from '@/domains/dam/types/UploadQueue'\nimport ImageWidgetInner from '@/domains/dam/imageWidget/components/ImageWidgetInner.vue'\nimport AImageWidgetSimple from '@/domains/dam/imageWidget/components/AImageWidgetSimple.vue'\nimport { ImageWidgetUploadConfigKey } from '@/domains/dam/imageWidget/utils/imageWidgetInkectionKeys'\nimport { isUndefined } from '@/shared/utils/common'\nimport { isImageWidgetUploadConfigAllowed } from '@/domains/dam/config/utils/damFilterUserAllowedUploadConfigs'\nimport { type CollabComponentConfig, CollabStatus, type CollabStatusType } from '@/domains/collab/types/Collab'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/domains/dam/types/DamConfig'\nimport { useDamConfigStoreOf } from '@/domains/dam/config/store/damConfigStore'\nimport { useI18n } from 'vue-i18n'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport { useExtSystemIdForCached } from '@/domains/dam/composables/extSystemIdForCached'\nimport { DamAssetType } from '@/domains/dam/types/Asset'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: IntegerIdNullable\n queueKey: UploadQueueKey\n uploadLicence: IntegerId\n selectLicences: IntegerId[]\n image?: ImageAware | undefined // If given, the image data is not fetched.\n configName?: string\n collab?: CollabComponentConfig\n collabStatus?: CollabStatusType\n label?: string | undefined\n readonly?: boolean\n required?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n expandMetadata?: boolean\n disableOnClickMenu?: boolean\n width?: number | undefined\n maxWidth?: number | undefined\n height?: number | undefined\n callDeleteApiOnRemove?: boolean\n damWidth?: undefined | number\n damHeight?: undefined | number\n }>(),\n {\n configName: undefined,\n collab: undefined,\n collabStatus: CollabStatus.Inactive,\n label: undefined,\n image: undefined,\n readonly: false,\n required: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n expandMetadata: false,\n disableOnClickMenu: false,\n width: undefined,\n maxWidth: undefined,\n height: undefined,\n callDeleteApiOnRemove: false,\n damWidth: undefined,\n damHeight: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', data: IntegerIdNullable): void\n (e: 'afterMetadataSaveSuccess'): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n// Declared explicitly: the read-only fallback renders the slot too, and the inferred type would be looser.\ndefineSlots<{\n append?: (props: { image: ImageCreateUpdateAware | null }) => unknown\n}>()\n\nconst status = ref<'loading' | 'ready' | 'error'>('loading')\n// Without upload permission the existing image is still shown, read-only.\nconst uploadAllowed = ref(true)\n\nconst { damClient } = useCommonAdminCoreDamOptions(damConfigName)\nconst {\n loadDamPrvConfig,\n loadDamConfigAssetCustomFormElements,\n getDamConfigAssetCustomFormElements,\n getOrLoadDamConfigExtSystemByLicence,\n getOrLoadDamConfigExtSystemByLicences,\n} = useDamConfigState(damClient, damConfigName)\n\nconst uploadConfig = shallowRef<DamConfigLicenceExtSystemReturnType | undefined>(undefined)\n\nconst { cachedExtSystemId } = useExtSystemIdForCached(damConfigName)\n\nonMounted(async () => {\n const damConfigStore = useDamConfigStoreOf(damConfigName)\n uploadConfig.value = await getOrLoadDamConfigExtSystemByLicence(props.uploadLicence)\n if (isUndefined(uploadConfig.value)) {\n status.value = 'error'\n return\n }\n // Starts as the ext system of the upload licence, until a pick, a drop or \"edit asset\" sets another.\n cachedExtSystemId.value = uploadConfig.value.extSystem\n if (!isImageWidgetUploadConfigAllowed(uploadConfig.value, damConfigName)) {\n uploadAllowed.value = false\n try {\n if (!damConfigStore.initialized.damPrvConfig) await loadDamPrvConfig()\n status.value = 'ready'\n } catch (e) {\n status.value = 'error'\n }\n return\n }\n const promises: Promise<any>[] = []\n if (!damConfigStore.initialized.damPrvConfig) {\n promises.push(loadDamPrvConfig())\n }\n promises.push(getOrLoadDamConfigExtSystemByLicences(props.selectLicences))\n const { extSystem } = uploadConfig.value\n // Loads custom fields for every type of the ext system if none are loaded yet.\n // Otherwise loads only the image type if its earlier read failed. Loaded types are not read again.\n if (isUndefined(getDamConfigAssetCustomFormElements(extSystem, DamAssetType.Image))) {\n promises.push(\n loadDamConfigAssetCustomFormElements(\n extSystem,\n getDamConfigAssetCustomFormElements(extSystem) ? [DamAssetType.Image] : undefined\n )\n )\n }\n try {\n await Promise.all(promises)\n } catch (e) {\n status.value = 'error'\n }\n // If the image type failed while other types loaded, the form would have no fields, so this is an error.\n if (isUndefined(getDamConfigAssetCustomFormElements(extSystem, DamAssetType.Image))) status.value = 'error'\n if (status.value !== 'error') status.value = 'ready'\n})\n\nprovide(ImageWidgetUploadConfigKey, uploadConfig)\n\nconst innerComponent = ref<InstanceType<typeof ImageWidgetInner> | null>(null)\n\nconst metadataConfirm = () => {\n innerComponent.value?.metadataConfirm()\n}\n\ndefineExpose({\n metadataConfirm,\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <ImageWidgetInner\n v-if=\"status === 'ready'\"\n ref=\"innerComponent\"\n v-bind=\"props\"\n :readonly=\"readonly || !uploadAllowed\"\n @update:model-value=\"emit('update:modelValue', $event)\"\n @after-metadata-save-success=\"emit('afterMetadataSaveSuccess')\"\n >\n <template #append=\"{ image: appendImage }\">\n <slot\n name=\"append\"\n :image=\"appendImage\"\n />\n </template>\n </ImageWidgetInner>\n <!-- The config also fails for a user without access to the licence. The existing image is still shown. -->\n <div v-else-if=\"status === 'error'\">\n <AImageWidgetSimple\n v-if=\"modelValue || image\"\n :model-value=\"modelValue\"\n :image=\"image\"\n :config-name=\"damConfigName\"\n :label=\"label\"\n :width=\"width\"\n :height=\"height\"\n :dam-width=\"damWidth\"\n :dam-height=\"damHeight\"\n >\n <template #append=\"{ image: appendImage }\">\n <slot\n name=\"append\"\n :image=\"appendImage\"\n />\n </template>\n </AImageWidgetSimple>\n <div class=\"text-error\">\n {{ t('common.damImage.error.loadingConfig') }}\n </div>\n </div>\n <VProgressCircular\n v-else\n :size=\"12\"\n :width=\"2\"\n indeterminate\n />\n</template>\n"],"mappings":""}