@anzusystems/common-admin 2.0.0-rc.5 → 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 (679) hide show
  1. package/dist/AnzuSystemsCommonAdmin.d.ts +42 -32
  2. package/dist/AnzuSystemsCommonAdmin.js.map +1 -1
  3. package/dist/common-admin.css +1 -1
  4. package/dist/common-admin.js +282 -282
  5. package/dist/domains/anzuUser/api/anzuUserApi.d.ts +9 -12
  6. package/dist/domains/anzuUser/api/anzuUserApi.js.map +1 -1
  7. package/dist/domains/anzuUser/components/AAnzuUserDatatable.js.map +1 -1
  8. package/dist/domains/anzuUser/components/AAnzuUserDatatable.vue.d.ts +38 -44
  9. package/dist/domains/anzuUser/components/AAnzuUserDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  10. package/dist/domains/anzuUser/components/AAnzuUserFilter.js.map +1 -1
  11. package/dist/domains/anzuUser/components/AAnzuUserFilter.vue.d.ts +12 -13
  12. package/dist/domains/anzuUser/components/AAnzuUserFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  13. package/dist/domains/anzuUser/components/AAnzuUserForm.js.map +1 -1
  14. package/dist/domains/anzuUser/components/AAnzuUserForm.vue.d.ts +18 -20
  15. package/dist/domains/anzuUser/components/AAnzuUserForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  16. package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.js.map +1 -1
  17. package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  18. package/dist/domains/anzuUser/components/AUserBulkActionDialog.js.map +1 -1
  19. package/dist/domains/anzuUser/components/AUserBulkActionDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  20. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.js.map +1 -1
  21. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.vue.d.ts +2 -3
  22. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  23. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.js.map +1 -1
  24. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.vue.d.ts +9 -15
  25. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  26. package/dist/domains/anzuUser/components/AUserEnabledSwitch.js.map +1 -1
  27. package/dist/domains/anzuUser/components/AUserEnabledSwitch.vue.d.ts +8 -7
  28. package/dist/domains/anzuUser/components/AUserEnabledSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  29. package/dist/domains/anzuUser/components/AUserManageButton.js.map +1 -1
  30. package/dist/domains/anzuUser/components/AUserManageButton.vue.d.ts +0 -1
  31. package/dist/domains/anzuUser/components/AUserManageButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  32. package/dist/domains/anzuUser/components/AUserMetadataForm.js.map +1 -1
  33. package/dist/domains/anzuUser/components/AUserMetadataForm.vue.d.ts +8 -9
  34. package/dist/domains/anzuUser/components/AUserMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  35. package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.js.map +1 -1
  36. package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  37. package/dist/domains/anzuUser/components/AUserOtherSystemsTable.js.map +1 -1
  38. package/dist/domains/anzuUser/components/AUserOtherSystemsTable.vue.d.ts +1 -2
  39. package/dist/domains/anzuUser/components/AUserOtherSystemsTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  40. package/dist/domains/anzuUser/components/AUserSystemOverview.js.map +1 -1
  41. package/dist/domains/anzuUser/components/AUserSystemOverview.vue_vue_type_script_setup_true_lang.js.map +1 -1
  42. package/dist/domains/anzuUser/components/AUserSystemPanel.js.map +1 -1
  43. package/dist/domains/anzuUser/components/AUserSystemPanel.vue.d.ts +2 -2
  44. package/dist/domains/anzuUser/components/AUserSystemPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  45. package/dist/domains/anzuUser/components/AUserSystemStatusChip.js.map +1 -1
  46. package/dist/domains/anzuUser/components/AUserSystemStatusChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  47. package/dist/domains/anzuUser/components/AUserTabsShell.js.map +1 -1
  48. package/dist/domains/anzuUser/components/AUserTabsShell.vue.d.ts +17 -22
  49. package/dist/domains/anzuUser/components/AUserTabsShell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  50. package/dist/domains/anzuUser/composables/anzuUserActions.d.ts +5 -9
  51. package/dist/domains/anzuUser/composables/anzuUserActions.js.map +1 -1
  52. package/dist/domains/anzuUser/composables/anzuUserValidations.d.ts +4 -6
  53. package/dist/domains/anzuUser/composables/anzuUserValidations.js.map +1 -1
  54. package/dist/domains/anzuUser/composables/cachedAnzuUsers.d.ts +3 -3
  55. package/dist/domains/anzuUser/composables/cachedAnzuUsers.js.map +1 -1
  56. package/dist/domains/anzuUser/composables/userCrossSystemSearch.d.ts +2 -4
  57. package/dist/domains/anzuUser/composables/userCrossSystemSearch.js.map +1 -1
  58. package/dist/domains/anzuUser/composables/userCrossSystemWrites.d.ts +5 -11
  59. package/dist/domains/anzuUser/composables/userCrossSystemWrites.js.map +1 -1
  60. package/dist/domains/anzuUser/composables/userSystemDescriptor.d.ts +33 -57
  61. package/dist/domains/anzuUser/composables/userSystemDescriptor.js.map +1 -1
  62. package/dist/domains/anzuUser/composables/userSystemProbe.d.ts +7 -27
  63. package/dist/domains/anzuUser/composables/userSystemProbe.js.map +1 -1
  64. package/dist/domains/anzuUser/filter/anzuUserFilter.d.ts +6 -16
  65. package/dist/domains/anzuUser/filter/anzuUserFilter.js.map +1 -1
  66. package/dist/domains/anzuUser/store/anzuUserStore.d.ts +1 -5
  67. package/dist/domains/anzuUser/store/anzuUserStore.js.map +1 -1
  68. package/dist/domains/anzuUser/store/userCrossSystemStore.d.ts +3 -14
  69. package/dist/domains/anzuUser/store/userCrossSystemStore.js.map +1 -1
  70. package/dist/domains/anzuUser/utils/userMetadataDiff.d.ts +7 -19
  71. package/dist/domains/anzuUser/utils/userMetadataDiff.js.map +1 -1
  72. package/dist/domains/anzuUser/utils/userSystemState.d.ts +12 -30
  73. package/dist/domains/anzuUser/utils/userSystemState.js.map +1 -1
  74. package/dist/domains/anzuUser/utils/userTabs.d.ts +1 -3
  75. package/dist/domains/anzuUser/utils/userTabs.js.map +1 -1
  76. package/dist/domains/api/composables/defineApiClient.d.ts +4 -8
  77. package/dist/domains/api/composables/defineApiClient.js.map +1 -1
  78. package/dist/domains/api/composables/request.d.ts +18 -48
  79. package/dist/domains/api/composables/request.js.map +1 -1
  80. package/dist/domains/api/composables/useApiFetchByIds.d.ts +7 -21
  81. package/dist/domains/api/composables/useApiFetchByIds.js.map +1 -1
  82. package/dist/domains/api/composables/useApiFetchItems.d.ts +18 -57
  83. package/dist/domains/api/composables/useApiFetchItems.js.map +1 -1
  84. package/dist/domains/api/composables/useApiFetchList.d.ts +7 -23
  85. package/dist/domains/api/composables/useApiFetchList.js.map +1 -1
  86. package/dist/domains/api/composables/useApiFetchListBatch.d.ts +5 -22
  87. package/dist/domains/api/composables/useApiFetchListBatch.js.map +1 -1
  88. package/dist/domains/api/composables/useApiQueryBuilder.js.map +1 -1
  89. package/dist/domains/api/composables/useApiRequest.d.ts +16 -39
  90. package/dist/domains/api/composables/useApiRequest.js.map +1 -1
  91. package/dist/domains/api/utils/apiErrors.d.ts +28 -55
  92. package/dist/domains/api/utils/apiErrors.js.map +1 -1
  93. package/dist/domains/api/utils/listBody.d.ts +22 -43
  94. package/dist/domains/api/utils/listBody.js.map +1 -1
  95. package/dist/domains/auth/components/Acl.js.map +1 -1
  96. package/dist/domains/auth/components/Acl.vue_vue_type_script_setup_true_lang.js.map +1 -1
  97. package/dist/domains/auth/composables/aclAllowed.d.ts +2 -3
  98. package/dist/domains/auth/composables/aclAllowed.js.map +1 -1
  99. package/dist/domains/auth/composables/defineAuth.js.map +1 -1
  100. package/dist/domains/auth/composables/refreshSession.d.ts +10 -13
  101. package/dist/domains/auth/composables/refreshSession.js.map +1 -1
  102. package/dist/domains/cached/components/ACachedChip.js.map +1 -1
  103. package/dist/domains/cached/components/ACachedChip.vue.d.ts +13 -11
  104. package/dist/domains/cached/components/ACachedChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  105. package/dist/domains/cached/components/ACachedUserChip.js +1 -1
  106. package/dist/domains/cached/components/ACachedUserChip.js.map +1 -1
  107. package/dist/domains/cached/components/ACachedUserChip.vue.d.ts +3 -3
  108. package/dist/domains/cached/components/ACachedUserChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  109. package/dist/domains/cached/composables/createUserAndTimeTrackingFields.d.ts +9 -9
  110. package/dist/domains/cached/composables/createUserAndTimeTrackingFields.js.map +1 -1
  111. package/dist/domains/cached/composables/defineCached.d.ts +13 -11
  112. package/dist/domains/cached/composables/defineCached.js.map +1 -1
  113. package/dist/domains/cached/composables/useCachedItem.d.ts +7 -8
  114. package/dist/domains/cached/composables/useCachedItem.js.map +1 -1
  115. package/dist/domains/collab/components/ACollabLockedByUser.js.map +1 -1
  116. package/dist/domains/collab/components/ACollabLockedByUser.vue_vue_type_script_setup_true_lang.js.map +1 -1
  117. package/dist/domains/collab/composables/collabAnyDataChange.js.map +1 -1
  118. package/dist/domains/collab/composables/collabField.d.ts +5 -3
  119. package/dist/domains/collab/composables/collabField.js.map +1 -1
  120. package/dist/domains/collab/composables/collabInit.js +58 -54
  121. package/dist/domains/collab/composables/collabInit.js.map +1 -1
  122. package/dist/domains/collab/composables/collabRecovery.d.ts +49 -0
  123. package/dist/domains/collab/composables/collabRecovery.js +99 -0
  124. package/dist/domains/collab/composables/collabRecovery.js.map +1 -0
  125. package/dist/domains/collab/composables/collabRoom.js +106 -106
  126. package/dist/domains/collab/composables/collabRoom.js.map +1 -1
  127. package/dist/domains/collab/composables/collabState.d.ts +11 -4
  128. package/dist/domains/collab/composables/collabState.js +34 -25
  129. package/dist/domains/collab/composables/collabState.js.map +1 -1
  130. package/dist/domains/collab/composables/commonAdminCollabOptions.d.ts +4 -2
  131. package/dist/domains/collab/types/Collab.d.ts +31 -5
  132. package/dist/domains/collab/types/Collab.js +23 -11
  133. package/dist/domains/collab/types/Collab.js.map +1 -1
  134. package/dist/domains/customDataForm/components/ACustomDataForm.js.map +1 -1
  135. package/dist/domains/customDataForm/components/ACustomDataForm.vue.d.ts +7 -5
  136. package/dist/domains/customDataForm/components/ACustomDataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  137. package/dist/domains/customDataForm/components/ACustomDataFormElement.js.map +1 -1
  138. package/dist/domains/customDataForm/components/ACustomDataFormElement.vue_vue_type_script_setup_true_lang.js.map +1 -1
  139. package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.js.map +1 -1
  140. package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.vue.d.ts +5 -3
  141. package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  142. package/dist/domains/customDataForm/composables/useCustomDataForm.js.map +1 -1
  143. package/dist/domains/customDataForm/types/CustomDataForm.d.ts +4 -1
  144. package/dist/domains/dam/api/damAssetApi.d.ts +7 -7
  145. package/dist/domains/dam/api/damAssetApi.js.map +1 -1
  146. package/dist/domains/dam/api/damAssetLicenceApi.d.ts +1 -1
  147. package/dist/domains/dam/api/damAssetLicenceApi.js.map +1 -1
  148. package/dist/domains/dam/api/damConstants.js.map +1 -1
  149. package/dist/domains/dam/api/damEndPoints.js.map +1 -1
  150. package/dist/domains/dam/api/damImageApi.js.map +1 -1
  151. package/dist/domains/dam/api/uploadApi.js.map +1 -1
  152. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.js.map +1 -1
  153. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue.d.ts +7 -5
  154. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  155. package/dist/domains/dam/assetDetail/components/AssetDetailDialog.js.map +1 -1
  156. package/dist/domains/dam/assetDetail/components/AssetDetailDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  157. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.js.map +1 -1
  158. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue.d.ts +1 -1
  159. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
  160. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsWrapper.vue.d.ts +5 -3
  161. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.js.map +1 -1
  162. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
  163. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.js.map +1 -1
  164. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  165. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.js.map +1 -1
  166. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.vue_vue_type_script_setup_true_lang.js.map +1 -1
  167. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.js.map +1 -1
  168. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue.d.ts +1 -1
  169. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  170. package/dist/domains/dam/assetDetail/components/AssetImage.js.map +1 -1
  171. package/dist/domains/dam/assetDetail/components/AssetImage.vue.d.ts +1 -1
  172. package/dist/domains/dam/assetDetail/components/AssetImage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  173. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.js.map +1 -1
  174. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue.d.ts +2 -2
  175. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue_vue_type_script_setup_true_lang.js.map +1 -1
  176. package/dist/domains/dam/assetDetail/components/AssetInfobox.js.map +1 -1
  177. package/dist/domains/dam/assetDetail/components/AssetInfobox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  178. package/dist/domains/dam/assetDetail/components/AssetMetadata.js.map +1 -1
  179. package/dist/domains/dam/assetDetail/components/AssetMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  180. package/dist/domains/dam/assetDetail/composables/assetDetailExtSystem.d.ts +5 -6
  181. package/dist/domains/dam/assetDetail/composables/assetDetailExtSystem.js.map +1 -1
  182. package/dist/domains/dam/assetDetail/composables/assetDetailView.d.ts +10 -10
  183. package/dist/domains/dam/assetDetail/composables/assetDetailView.js.map +1 -1
  184. package/dist/domains/dam/assetDetail/store/assetDetailStore.js.map +1 -1
  185. package/dist/domains/dam/assetDetail/utils/assetMetadataMayStillChange.d.ts +4 -3
  186. package/dist/domains/dam/assetDetail/utils/assetMetadataMayStillChange.js.map +1 -1
  187. package/dist/domains/dam/assetSelect/api/damPodcastApi.js.map +1 -1
  188. package/dist/domains/dam/assetSelect/components/AAssetListInner.js.map +1 -1
  189. package/dist/domains/dam/assetSelect/components/AAssetListInner.vue.d.ts +789 -787
  190. package/dist/domains/dam/assetSelect/components/AAssetListInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  191. package/dist/domains/dam/assetSelect/components/AAssetSelect.js.map +1 -1
  192. package/dist/domains/dam/assetSelect/components/AAssetSelect.vue.d.ts +395 -393
  193. package/dist/domains/dam/assetSelect/components/AAssetSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  194. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.js.map +1 -1
  195. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.vue.d.ts +14 -12
  196. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.vue_vue_type_script_setup_true_lang.js.map +1 -1
  197. package/dist/domains/dam/assetSelect/components/AssetDistributionServiceNameFilter.js.map +1 -1
  198. package/dist/domains/dam/assetSelect/components/AssetDistributionServiceNameFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  199. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.js.map +1 -1
  200. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.vue.d.ts +9 -7
  201. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  202. package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.js.map +1 -1
  203. package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  204. package/dist/domains/dam/assetSelect/composables/assetSelectListActions.js.map +1 -1
  205. package/dist/domains/dam/assetSelect/store/assetSelectStore.js.map +1 -1
  206. package/dist/domains/dam/author/api/authorApi.js.map +1 -1
  207. package/dist/domains/dam/author/components/AuthorCreateButton.js.map +1 -1
  208. package/dist/domains/dam/author/components/AuthorCreateButton.vue.d.ts +1 -1
  209. package/dist/domains/dam/author/components/AuthorCreateButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  210. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.js.map +1 -1
  211. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.vue.d.ts +9 -6
  212. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  213. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.js.map +1 -1
  214. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue_vue_type_script_setup_true_lang.js.map +1 -1
  215. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.js +1 -1
  216. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.js.map +1 -1
  217. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue.d.ts +2 -2
  218. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
  219. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.js.map +1 -1
  220. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.vue.d.ts +1 -1
  221. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  222. package/dist/domains/dam/author/composables/cachedAuthors.d.ts +5 -4
  223. package/dist/domains/dam/author/composables/cachedAuthors.js.map +1 -1
  224. package/dist/domains/dam/author/composables/cachedUsers.d.ts +5 -4
  225. package/dist/domains/dam/author/composables/cachedUsers.js.map +1 -1
  226. package/dist/domains/dam/author/composables/damAuthorConfig.d.ts +2 -2
  227. package/dist/domains/dam/author/composables/damAuthorConfig.js.map +1 -1
  228. package/dist/domains/dam/components/DamAdminAssetLink.js.map +1 -1
  229. package/dist/domains/dam/components/DamAdminAssetLink.vue_vue_type_script_setup_true_lang.js.map +1 -1
  230. package/dist/domains/dam/composables/commonAdminCoreDamOptions.d.ts +10 -8
  231. package/dist/domains/dam/composables/commonAdminCoreDamOptions.js.map +1 -1
  232. package/dist/domains/dam/composables/damConfigName.d.ts +8 -9
  233. package/dist/domains/dam/composables/damConfigName.js.map +1 -1
  234. package/dist/domains/dam/composables/damNotifications.d.ts +9 -9
  235. package/dist/domains/dam/composables/damNotifications.js.map +1 -1
  236. package/dist/domains/dam/composables/damNotificationsConnection.d.ts +4 -4
  237. package/dist/domains/dam/composables/damNotificationsConnection.js.map +1 -1
  238. package/dist/domains/dam/composables/damNotificationsEventBus.d.ts +2 -2
  239. package/dist/domains/dam/composables/damNotificationsEventBus.js.map +1 -1
  240. package/dist/domains/dam/composables/extSystemIdForCached.d.ts +5 -4
  241. package/dist/domains/dam/composables/extSystemIdForCached.js.map +1 -1
  242. package/dist/domains/dam/config/api/damAssetCustomFormApi.js.map +1 -1
  243. package/dist/domains/dam/config/api/damConfigApi.js.map +1 -1
  244. package/dist/domains/dam/config/composables/damConfigState.d.ts +5 -5
  245. package/dist/domains/dam/config/composables/damConfigState.js.map +1 -1
  246. package/dist/domains/dam/config/store/damConfigStore.d.ts +5 -4
  247. package/dist/domains/dam/config/store/damConfigStore.js.map +1 -1
  248. package/dist/domains/dam/config/utils/damFilterUserAllowedUploadConfigs.d.ts +3 -1
  249. package/dist/domains/dam/config/utils/damFilterUserAllowedUploadConfigs.js.map +1 -1
  250. package/dist/domains/dam/cropper/components/ACropper.js.map +1 -1
  251. package/dist/domains/dam/cropper/components/ACropper.vue.d.ts +8 -16
  252. package/dist/domains/dam/cropper/components/ACropper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  253. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.js.map +1 -1
  254. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  255. package/dist/domains/dam/cropper/store/imageRoiStore.d.ts +9 -12
  256. package/dist/domains/dam/cropper/store/imageRoiStore.js.map +1 -1
  257. package/dist/domains/dam/cropper/utils/cropperGeometry.d.ts +24 -38
  258. package/dist/domains/dam/cropper/utils/cropperGeometry.js.map +1 -1
  259. package/dist/domains/dam/cropper/utils/cropperJsService.d.ts +3 -7
  260. package/dist/domains/dam/cropper/utils/cropperJsService.js +10 -3
  261. package/dist/domains/dam/cropper/utils/cropperJsService.js.map +1 -1
  262. package/dist/domains/dam/cropper/utils/cropperTypes.d.ts +3 -6
  263. package/dist/domains/dam/cropper/utils/damAssetImageRoiSelectLoader.d.ts +5 -5
  264. package/dist/domains/dam/cropper/utils/damAssetImageRoiSelectLoader.js.map +1 -1
  265. package/dist/domains/dam/imageWidget/components/AImageMediaWidget.js.map +1 -1
  266. package/dist/domains/dam/imageWidget/components/AImageMediaWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
  267. package/dist/domains/dam/imageWidget/components/AImagePublicInput.js.map +1 -1
  268. package/dist/domains/dam/imageWidget/components/AImagePublicInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  269. package/dist/domains/dam/imageWidget/components/AImageWidget.js.map +1 -1
  270. package/dist/domains/dam/imageWidget/components/AImageWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
  271. package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.js.map +1 -1
  272. package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.vue_vue_type_script_setup_true_lang.js.map +1 -1
  273. package/dist/domains/dam/imageWidget/components/AImageWidgetSimple.vue.d.ts +43 -41
  274. package/dist/domains/dam/imageWidget/components/AMediaWidgetSimple.vue.d.ts +31 -29
  275. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.js.map +1 -1
  276. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue.d.ts +29 -27
  277. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  278. package/dist/domains/dam/imageWidget/components/ImageMassOperations.js.map +1 -1
  279. package/dist/domains/dam/imageWidget/components/ImageMassOperations.vue.d.ts +1 -1
  280. package/dist/domains/dam/imageWidget/components/ImageMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
  281. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.js.map +1 -1
  282. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue.d.ts +68 -66
  283. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  284. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.js.map +1 -1
  285. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue.d.ts +402 -400
  286. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  287. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.js.map +1 -1
  288. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue.d.ts +384 -382
  289. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  290. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.js.map +1 -1
  291. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  292. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.js.map +1 -1
  293. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  294. package/dist/domains/dam/imageWidget/components/MediaWidgetSimpleDialog.vue.d.ts +7 -5
  295. package/dist/domains/dam/imageWidget/composables/commonAdminImageOptions.js.map +1 -1
  296. package/dist/domains/dam/imageWidget/composables/imageApiCms.js.map +1 -1
  297. package/dist/domains/dam/imageWidget/composables/imageDialogDamAuthors.d.ts +11 -13
  298. package/dist/domains/dam/imageWidget/composables/imageDialogDamAuthors.js.map +1 -1
  299. package/dist/domains/dam/imageWidget/composables/useImageMassOperations.js.map +1 -1
  300. package/dist/domains/dam/imageWidget/store/imageMediaWidgetStore.js.map +1 -1
  301. package/dist/domains/dam/imageWidget/store/imageStore.js.map +1 -1
  302. package/dist/domains/dam/imageWidget/utils/damImage.d.ts +5 -6
  303. package/dist/domains/dam/imageWidget/utils/damImage.js.map +1 -1
  304. package/dist/domains/dam/imageWidget/utils/fieldLockTurns.d.ts +1 -2
  305. package/dist/domains/dam/imageWidget/utils/fieldLockTurns.js.map +1 -1
  306. package/dist/domains/dam/imageWidget/utils/imageSaves.d.ts +10 -14
  307. package/dist/domains/dam/imageWidget/utils/imageSaves.js.map +1 -1
  308. package/dist/domains/dam/imageWidget/utils/metadataToImageMap.js.map +1 -1
  309. package/dist/domains/dam/imageWidget/utils/waitLimit.d.ts +4 -6
  310. package/dist/domains/dam/imageWidget/utils/waitLimit.js.map +1 -1
  311. package/dist/domains/dam/keyword/api/keywordApi.js.map +1 -1
  312. package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.js.map +1 -1
  313. package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.vue.d.ts +1 -1
  314. package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  315. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.js.map +1 -1
  316. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.vue.d.ts +8 -5
  317. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  318. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.js +1 -1
  319. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.js.map +1 -1
  320. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue.d.ts +2 -2
  321. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
  322. package/dist/domains/dam/keyword/composables/cachedKeywords.d.ts +5 -4
  323. package/dist/domains/dam/keyword/composables/cachedKeywords.js.map +1 -1
  324. package/dist/domains/dam/keyword/composables/damKeywordConfig.d.ts +2 -2
  325. package/dist/domains/dam/keyword/composables/damKeywordConfig.js.map +1 -1
  326. package/dist/domains/dam/types/Asset.d.ts +1 -1
  327. package/dist/domains/dam/types/Asset.js.map +1 -1
  328. package/dist/domains/dam/types/UploadQueue.d.ts +5 -4
  329. package/dist/domains/dam/types/UploadQueue.js.map +1 -1
  330. package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.js.map +1 -1
  331. package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
  332. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.js.map +1 -1
  333. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue.d.ts +2 -2
  334. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  335. package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.js.map +1 -1
  336. package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  337. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.js.map +1 -1
  338. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  339. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.js.map +1 -1
  340. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.vue.d.ts +6 -4
  341. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  342. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.js.map +1 -1
  343. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue.d.ts +1 -1
  344. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  345. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.js.map +1 -1
  346. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  347. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.js.map +1 -1
  348. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.vue.d.ts +6 -6
  349. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  350. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.js.map +1 -1
  351. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue.d.ts +13 -13
  352. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  353. package/dist/domains/dam/uploadQueue/components/uploadQueueBindings.d.ts +13 -13
  354. package/dist/domains/dam/uploadQueue/components/uploadQueueBindings.js.map +1 -1
  355. package/dist/domains/dam/uploadQueue/composables/damUploadChunkSize.d.ts +2 -2
  356. package/dist/domains/dam/uploadQueue/composables/damUploadChunkSize.js.map +1 -1
  357. package/dist/domains/dam/uploadQueue/composables/uploadMeter.d.ts +12 -12
  358. package/dist/domains/dam/uploadQueue/composables/uploadMeter.js.map +1 -1
  359. package/dist/domains/dam/uploadQueue/composables/uploadQueueItemRefresh.d.ts +5 -5
  360. package/dist/domains/dam/uploadQueue/composables/uploadQueueItemRefresh.js.map +1 -1
  361. package/dist/domains/dam/uploadQueue/composables/uploadService.d.ts +2 -3
  362. package/dist/domains/dam/uploadQueue/composables/uploadService.js.map +1 -1
  363. package/dist/domains/dam/uploadQueue/composables/useUploadQueueDialog.d.ts +5 -4
  364. package/dist/domains/dam/uploadQueue/composables/useUploadQueueDialog.js.map +1 -1
  365. package/dist/domains/dam/uploadQueue/core/uploadQueueCore.d.ts +3 -2
  366. package/dist/domains/dam/uploadQueue/core/uploadQueueCore.js.map +1 -1
  367. package/dist/domains/dam/uploadQueue/core/uploadQueueCoreTypes.d.ts +8 -5
  368. package/dist/domains/dam/uploadQueue/core/uploadQueueCoreTypes.js.map +1 -1
  369. package/dist/domains/dam/uploadQueue/core/uploadQueueFill.d.ts +3 -3
  370. package/dist/domains/dam/uploadQueue/core/uploadQueueFill.js.map +1 -1
  371. package/dist/domains/dam/uploadQueue/presets/queuePresets.d.ts +8 -5
  372. package/dist/domains/dam/uploadQueue/presets/queuePresets.js.map +1 -1
  373. package/dist/domains/dam/uploadQueue/presets/uploadPresets.d.ts +15 -13
  374. package/dist/domains/dam/uploadQueue/presets/uploadPresets.js.map +1 -1
  375. package/dist/domains/dam/uploadQueue/settlement/uploadPollSchedule.d.ts +7 -7
  376. package/dist/domains/dam/uploadQueue/settlement/uploadPollSchedule.js.map +1 -1
  377. package/dist/domains/dam/uploadQueue/settlement/uploadPoller.d.ts +4 -4
  378. package/dist/domains/dam/uploadQueue/settlement/uploadPoller.js.map +1 -1
  379. package/dist/domains/dam/uploadQueue/settlement/uploadSettle.d.ts +28 -30
  380. package/dist/domains/dam/uploadQueue/settlement/uploadSettle.js.map +1 -1
  381. package/dist/domains/dam/uploadQueue/settlement/uploadSettlement.d.ts +2 -2
  382. package/dist/domains/dam/uploadQueue/settlement/uploadSettlement.js.map +1 -1
  383. package/dist/domains/dam/uploadQueue/settlement/uploadSettlementRuntime.d.ts +2 -2
  384. package/dist/domains/dam/uploadQueue/settlement/uploadSettlementRuntime.js.map +1 -1
  385. package/dist/domains/dam/uploadQueue/settlement/uploadSettlementTypes.d.ts +63 -73
  386. package/dist/domains/dam/uploadQueue/settlement/uploadSettlementTypes.js.map +1 -1
  387. package/dist/domains/dam/uploadQueue/store/uploadQueuesStore.d.ts +8 -9
  388. package/dist/domains/dam/uploadQueue/store/uploadQueuesStore.js.map +1 -1
  389. package/dist/domains/dam/user/api/userApi.d.ts +2 -2
  390. package/dist/domains/dam/user/api/userApi.js.map +1 -1
  391. package/dist/domains/dam/user/components/DamDistributionServiceSelect.js.map +1 -1
  392. package/dist/domains/dam/user/components/DamDistributionServiceSelect.vue.d.ts +1 -1
  393. package/dist/domains/dam/user/components/DamDistributionServiceSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  394. package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.js.map +1 -1
  395. package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.vue.d.ts +1 -1
  396. package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  397. package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.js.map +1 -1
  398. package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.vue.d.ts +1 -1
  399. package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  400. package/dist/domains/dam/user/composables/damUserSelectActions.d.ts +1 -1
  401. package/dist/domains/dam/user/composables/damUserSelectActions.js.map +1 -1
  402. package/dist/domains/dam/user/types/DamDistributionServiceType.d.ts +2 -2
  403. package/dist/domains/dam/user/types/DamDistributionServiceType.js.map +1 -1
  404. package/dist/domains/dam/user/types/DamExternalProviderAssetType.d.ts +1 -1
  405. package/dist/domains/dam/user/types/DamExternalProviderAssetType.js.map +1 -1
  406. package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.js.map +1 -1
  407. package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  408. package/dist/domains/filters/bookmarks/store/bookmarksStore.d.ts +3 -3
  409. package/dist/domains/filters/bookmarks/store/bookmarksStore.js.map +1 -1
  410. package/dist/domains/filters/components/AFilterDatetimePicker.js.map +1 -1
  411. package/dist/domains/filters/components/AFilterDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  412. package/dist/domains/filters/components/AFilterInteger.js.map +1 -1
  413. package/dist/domains/filters/components/AFilterInteger.vue_vue_type_script_setup_true_lang.js.map +1 -1
  414. package/dist/domains/filters/components/AFilterString.js.map +1 -1
  415. package/dist/domains/filters/components/AFilterString.vue_vue_type_script_setup_true_lang.js.map +1 -1
  416. package/dist/domains/filters/components/AFilterTimeInterval.js +1 -1
  417. package/dist/domains/filters/components/AFilterTimeInterval.js.map +1 -1
  418. package/dist/domains/filters/components/AFilterTimeInterval.vue.d.ts +5 -3
  419. package/dist/domains/filters/components/AFilterTimeInterval.vue_vue_type_script_setup_true_lang.js.map +1 -1
  420. package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.js.map +1 -1
  421. package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  422. package/dist/domains/filters/components/AFilterWrapper.vue.d.ts +17 -15
  423. package/dist/domains/filters/components/AFilterWrapperSidebar.vue.d.ts +5 -3
  424. package/dist/domains/filters/components/FiltersSelected.js.map +1 -1
  425. package/dist/domains/filters/components/FiltersSelected.vue_vue_type_script_setup_true_lang.js.map +1 -1
  426. package/dist/domains/filters/composables/filterFactory.d.ts +16 -26
  427. package/dist/domains/filters/composables/filterFactory.js +38 -31
  428. package/dist/domains/filters/composables/filterFactory.js.map +1 -1
  429. package/dist/domains/filters/datatable/components/ADatatableOrdering.js.map +1 -1
  430. package/dist/domains/filters/datatable/components/ADatatableOrdering.vue_vue_type_script_setup_true_lang.js +3 -1
  431. package/dist/domains/filters/datatable/components/ADatatableOrdering.vue_vue_type_script_setup_true_lang.js.map +1 -1
  432. package/dist/domains/filters/datatable/components/ADatatablePagination.js.map +1 -1
  433. package/dist/domains/filters/datatable/components/ADatatablePagination.vue_vue_type_script_setup_true_lang.js +2 -4
  434. package/dist/domains/filters/datatable/components/ADatatablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  435. package/dist/domains/filters/utils/filterInjectionKeys.js.map +1 -1
  436. package/dist/domains/form/components/AFormDatetimePicker.js.map +1 -1
  437. package/dist/domains/form/components/AFormDatetimePicker.vue.d.ts +7 -5
  438. package/dist/domains/form/components/AFormDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  439. package/dist/domains/form/components/AFormFlagDatetimePicker.js.map +1 -1
  440. package/dist/domains/form/components/AFormFlagDatetimePicker.vue.d.ts +7 -5
  441. package/dist/domains/form/components/AFormFlagDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  442. package/dist/domains/form/components/AFormSwitch.vue.d.ts +7 -5
  443. package/dist/domains/form/components/AFormTextField.js.map +1 -1
  444. package/dist/domains/form/components/AFormTextField.vue.d.ts +9 -7
  445. package/dist/domains/form/components/AFormTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  446. package/dist/domains/form/components/AFormTextarea.vue.d.ts +13 -11
  447. package/dist/domains/form/components/AFormValueObjectOptionsSelect.vue.d.ts +7 -5
  448. package/dist/domains/form/components/ASystemEntityScope.vue.d.ts +5 -3
  449. package/dist/domains/job/api/jobApi.js.map +1 -1
  450. package/dist/domains/job/components/AJobDetailCommon.vue.d.ts +5 -3
  451. package/dist/domains/listEditor/components/AListEditor.js.map +1 -1
  452. package/dist/domains/listEditor/components/AListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  453. package/dist/domains/listEditor/components/ANestedSortableListEditor.js.map +1 -1
  454. package/dist/domains/listEditor/components/ANestedSortableListEditor.vue.d.ts +2 -3
  455. package/dist/domains/listEditor/components/ANestedSortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  456. package/dist/domains/listEditor/components/ASortableListEditor.js.map +1 -1
  457. package/dist/domains/listEditor/components/ASortableListEditor.vue.d.ts +2 -3
  458. package/dist/domains/listEditor/components/ASortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  459. package/dist/domains/listEditor/composables/useListEditorController.d.ts +4 -5
  460. package/dist/domains/listEditor/composables/useListEditorController.js.map +1 -1
  461. package/dist/domains/listEditor/composables/useNestedListEditor.d.ts +3 -4
  462. package/dist/domains/listEditor/composables/useNestedListEditor.js.map +1 -1
  463. package/dist/domains/listEditor/composables/useNestedListEditorController.d.ts +5 -4
  464. package/dist/domains/listEditor/composables/useNestedListEditorController.js.map +1 -1
  465. package/dist/domains/listEditor/composables/useReorderMode.js.map +1 -1
  466. package/dist/domains/listEditor/types/listEditorTypes.d.ts +2 -2
  467. package/dist/domains/listEditor/utils/listEditorLoader.d.ts +5 -5
  468. package/dist/domains/listEditor/utils/listEditorLoader.js.map +1 -1
  469. package/dist/domains/listEditor/utils/resolveCompactText.js.map +1 -1
  470. package/dist/domains/log/api/logApi.d.ts +2 -3
  471. package/dist/domains/log/api/logApi.js.map +1 -1
  472. package/dist/domains/log/components/ALogDatatable.js.map +1 -1
  473. package/dist/domains/log/components/ALogDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  474. package/dist/domains/log/components/ALogDetailView.js.map +1 -1
  475. package/dist/domains/log/components/ALogDetailView.vue.d.ts +1 -1
  476. package/dist/domains/log/components/ALogDetailView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  477. package/dist/domains/log/components/ALogFilter.js.map +1 -1
  478. package/dist/domains/log/components/ALogFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  479. package/dist/domains/log/components/ALogListView.js.map +1 -1
  480. package/dist/domains/log/components/ALogListView.vue.d.ts +1 -1
  481. package/dist/domains/log/components/ALogListView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  482. package/dist/domains/log/composables/logActions.d.ts +4 -5
  483. package/dist/domains/log/composables/logActions.js.map +1 -1
  484. package/dist/domains/log/composables/logType.d.ts +6 -7
  485. package/dist/domains/log/composables/logType.js.map +1 -1
  486. package/dist/domains/log/filter/logFilter.d.ts +8 -11
  487. package/dist/domains/log/filter/logFilter.js.map +1 -1
  488. package/dist/domains/permission/components/APermissionEditor.js.map +1 -1
  489. package/dist/domains/permission/components/APermissionEditor.vue.d.ts +4 -4
  490. package/dist/domains/permission/components/APermissionEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  491. package/dist/domains/permission/composables/permissionActions.d.ts +3 -6
  492. package/dist/domains/permission/composables/permissionActions.js.map +1 -1
  493. package/dist/domains/permission/config/api/permissionConfigApi.d.ts +2 -2
  494. package/dist/domains/permission/config/api/permissionConfigApi.js.map +1 -1
  495. package/dist/domains/permission/config/composables/permissionConfigActions.d.ts +3 -7
  496. package/dist/domains/permission/config/composables/permissionConfigActions.js.map +1 -1
  497. package/dist/domains/permission/config/store/permissionConfigStore.d.ts +2 -4
  498. package/dist/domains/permission/config/store/permissionConfigStore.js.map +1 -1
  499. package/dist/domains/permission/group/api/permissionGroupApi.d.ts +8 -10
  500. package/dist/domains/permission/group/api/permissionGroupApi.js.map +1 -1
  501. package/dist/domains/permission/group/components/APermissionGroupDatatable.js.map +1 -1
  502. package/dist/domains/permission/group/components/APermissionGroupDatatable.vue.d.ts +12 -10
  503. package/dist/domains/permission/group/components/APermissionGroupDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  504. package/dist/domains/permission/group/components/APermissionGroupDetail.js.map +1 -1
  505. package/dist/domains/permission/group/components/APermissionGroupDetail.vue.d.ts +21 -22
  506. package/dist/domains/permission/group/components/APermissionGroupDetail.vue_vue_type_script_setup_true_lang.js.map +1 -1
  507. package/dist/domains/permission/group/components/APermissionGroupManage.js.map +1 -1
  508. package/dist/domains/permission/group/components/APermissionGroupManage.vue.d.ts +21 -22
  509. package/dist/domains/permission/group/components/APermissionGroupManage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  510. package/dist/domains/permission/group/composables/cachedPermissionGroups.js.map +1 -1
  511. package/dist/domains/permission/group/composables/permissionGroupActions.d.ts +6 -8
  512. package/dist/domains/permission/group/composables/permissionGroupActions.js.map +1 -1
  513. package/dist/domains/permission/group/composables/permissionGroupValidations.d.ts +2 -3
  514. package/dist/domains/permission/group/composables/permissionGroupValidations.js.map +1 -1
  515. package/dist/domains/permission/group/filter/permissionGroupFilter.d.ts +2 -3
  516. package/dist/domains/permission/group/filter/permissionGroupFilter.js.map +1 -1
  517. package/dist/domains/permission/group/store/permissionGroupStore.d.ts +3 -6
  518. package/dist/domains/permission/group/store/permissionGroupStore.js.map +1 -1
  519. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.js.map +1 -1
  520. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  521. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.js.map +1 -1
  522. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.vue_vue_type_script_setup_true_lang.js.map +1 -1
  523. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.js.map +1 -1
  524. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  525. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocompleteWithCached.vue.d.ts +5 -3
  526. package/dist/domains/remoteAutocomplete/composables/createRemoteAutocomplete.d.ts +11 -13
  527. package/dist/domains/remoteAutocomplete/composables/createRemoteAutocomplete.js.map +1 -1
  528. package/dist/domains/subjectSelect/components/AFilterWrapperSubjectSelect.vue.d.ts +13 -11
  529. package/dist/domains/subjectSelect/components/ASubjectSelect.js.map +1 -1
  530. package/dist/domains/subjectSelect/components/ASubjectSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  531. package/dist/domains/subjectSelect/composables/useSubjectSelect.js +53 -51
  532. package/dist/domains/subjectSelect/composables/useSubjectSelect.js.map +1 -1
  533. package/dist/domains/system/appShell/components/AActionbar.vue.d.ts +7 -5
  534. package/dist/domains/system/appShell/components/ALayoutSwitch.js.map +1 -1
  535. package/dist/domains/system/appShell/components/ALayoutSwitch.vue.d.ts +7 -5
  536. package/dist/domains/system/appShell/components/ALayoutSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  537. package/dist/domains/system/appShell/composables/teleportSlot.d.ts +0 -1
  538. package/dist/domains/system/appShell/composables/teleportSlot.js.map +1 -1
  539. package/dist/domains/system/components/AAlerts.js.map +1 -1
  540. package/dist/domains/system/components/AAlerts.vue_vue_type_script_setup_true_lang.js.map +1 -1
  541. package/dist/domains/system/composables/alerts.js.map +1 -1
  542. package/dist/domains/system/composables/breadcrumbs.d.ts +3 -3
  543. package/dist/domains/system/composables/breadcrumbs.js.map +1 -1
  544. package/dist/domains/system/composables/languageSettings.js.map +1 -1
  545. package/dist/domains/system/composables/loginStatus.js.map +1 -1
  546. package/dist/domains/system/composables/navigationError.d.ts +6 -8
  547. package/dist/domains/system/composables/navigationError.js.map +1 -1
  548. package/dist/domains/system/composables/pageNavigation.d.ts +9 -10
  549. package/dist/domains/system/composables/pageNavigation.js.map +1 -1
  550. package/dist/domains/system/composables/recordActions.d.ts +14 -22
  551. package/dist/domains/system/composables/recordActions.js.map +1 -1
  552. package/dist/domains/system/composables/recordPage.d.ts +23 -38
  553. package/dist/domains/system/composables/recordPage.js.map +1 -1
  554. package/dist/domains/system/composables/routeHistory.d.ts +4 -5
  555. package/dist/domains/system/composables/routeHistory.js.map +1 -1
  556. package/dist/domains/system/composables/sentry.js.map +1 -1
  557. package/dist/domains/system/composables/useDebugFeatures.d.ts +3 -6
  558. package/dist/domains/system/composables/useDebugFeatures.js.map +1 -1
  559. package/dist/domains/system/store/datatablePageStore.d.ts +8 -1
  560. package/dist/domains/system/store/datatablePageStore.js +10 -3
  561. package/dist/domains/system/store/datatablePageStore.js.map +1 -1
  562. package/dist/domains/system/systemBar/components/ASystemBar.js.map +1 -1
  563. package/dist/domains/system/systemBar/components/ASystemBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  564. package/dist/domains/system/systemBar/utils/appReload.d.ts +5 -5
  565. package/dist/domains/system/systemBar/utils/appReload.js.map +1 -1
  566. package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.js.map +1 -1
  567. package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.vue.d.ts +2 -3
  568. package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.vue_vue_type_script_setup_true_lang.js.map +1 -1
  569. package/dist/domains/ui/buttons/action/components/AActionDeleteButton.js.map +1 -1
  570. package/dist/domains/ui/buttons/action/components/AActionDeleteButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  571. package/dist/domains/ui/buttons/components/ABtnSplit.vue.d.ts +9 -7
  572. package/dist/domains/ui/components/AAvatarColorPicker.js.map +1 -1
  573. package/dist/domains/ui/components/AAvatarColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  574. package/dist/domains/ui/components/ACard.js.map +1 -1
  575. package/dist/domains/ui/components/ACard.vue.d.ts +7 -3
  576. package/dist/domains/ui/components/ACard.vue_vue_type_script_setup_true_lang.js +6 -2
  577. package/dist/domains/ui/components/ACard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  578. package/dist/domains/ui/components/ACardLoader.js.map +1 -1
  579. package/dist/domains/ui/components/ACardLoader.vue.d.ts +1 -0
  580. package/dist/domains/ui/components/ACardLoader.vue_vue_type_script_setup_true_lang.js +13 -7
  581. package/dist/domains/ui/components/ACardLoader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  582. package/dist/domains/ui/components/AChipNoLink.vue.d.ts +5 -3
  583. package/dist/domains/ui/components/ACopyText.vue.d.ts +9 -7
  584. package/dist/domains/ui/components/ACreateDialog.js.map +1 -1
  585. package/dist/domains/ui/components/ACreateDialog.vue.d.ts +11 -9
  586. package/dist/domains/ui/components/ACreateDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  587. package/dist/domains/ui/components/ADialogToolbar.vue.d.ts +5 -3
  588. package/dist/domains/ui/components/ARow.vue.d.ts +5 -3
  589. package/dist/domains/ui/components/ATimeTrackingFields.js.map +1 -1
  590. package/dist/domains/ui/components/ATimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
  591. package/dist/domains/ui/components/AUserAndTimeTrackingFields.js.map +1 -1
  592. package/dist/domains/ui/components/AUserAndTimeTrackingFields.vue.d.ts +3 -5
  593. package/dist/domains/ui/components/AUserAndTimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
  594. package/dist/domains/ui/datetime/components/ADatetimePicker.js +1 -1
  595. package/dist/domains/ui/datetime/components/ADatetimePicker.js.map +1 -1
  596. package/dist/domains/ui/datetime/components/ADatetimePicker.vue.d.ts +5 -3
  597. package/dist/domains/ui/datetime/components/ADatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  598. package/dist/domains/ui/file/components/AFileDropzone.js.map +1 -1
  599. package/dist/domains/ui/file/components/AFileDropzone.vue.d.ts +1 -1
  600. package/dist/domains/ui/file/components/AFileDropzone.vue_vue_type_script_setup_true_lang.js.map +1 -1
  601. package/dist/domains/ui/file/components/AFileInput.js.map +1 -1
  602. package/dist/domains/ui/file/components/AFileInput.vue.d.ts +9 -7
  603. package/dist/domains/ui/file/components/AFileInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  604. package/dist/domains/ui/file/components/AFileInputDialog.js.map +1 -1
  605. package/dist/domains/ui/file/components/AFileInputDialog.vue.d.ts +9 -7
  606. package/dist/domains/ui/file/components/AFileInputDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  607. package/dist/domains/ui/file/composables/dropzone.js.map +1 -1
  608. package/dist/domains/ui/file/composables/formatAndSizeCheck.js.map +1 -1
  609. package/dist/domains/ui/view/components/AGenericView.vue.d.ts +7 -5
  610. package/dist/domains/ui/view/components/ALoginView.js +1 -1
  611. package/dist/domains/ui/view/components/ALoginView.js.map +1 -1
  612. package/dist/domains/ui/view/components/ALoginView.vue.d.ts +5 -3
  613. package/dist/domains/ui/view/components/ALoginView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  614. package/dist/domains/ui/view/components/ALogoutView.js.map +1 -1
  615. package/dist/domains/ui/view/components/ALogoutView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  616. package/dist/domains/ui/view/components/ANotFoundView.js.map +1 -1
  617. package/dist/domains/ui/view/components/ANotFoundView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  618. package/dist/domains/unsavedGuard/composables/useUnsavedChangesGuard.d.ts +6 -7
  619. package/dist/domains/unsavedGuard/composables/useUnsavedChangesGuard.js.map +1 -1
  620. package/dist/lib.d.ts +2 -2
  621. package/dist/plugins/commonVuetifyConfig.d.ts +3 -3
  622. package/dist/plugins/commonVuetifyConfig.js.map +1 -1
  623. package/dist/plugins/i18n.d.ts +4 -5
  624. package/dist/plugins/i18n.js.map +1 -1
  625. package/dist/plugins/pluginOptions.d.ts +4 -2
  626. package/dist/plugins/pluginOptions.js.map +1 -1
  627. package/dist/plugins/webfontloader.js.map +1 -1
  628. package/dist/shared/error/AnzuApiCancelledError.d.ts +5 -8
  629. package/dist/shared/error/AnzuApiCancelledError.js.map +1 -1
  630. package/dist/shared/error/AnzuError.d.ts +3 -5
  631. package/dist/shared/error/AnzuError.js.map +1 -1
  632. package/dist/shared/error/AuthUnavailableError.d.ts +3 -3
  633. package/dist/shared/error/AuthUnavailableError.js.map +1 -1
  634. package/dist/shared/error/isInCauseChain.d.ts +2 -2
  635. package/dist/shared/error/isInCauseChain.js.map +1 -1
  636. package/dist/shared/types/UserAndTimeTracking.d.ts +5 -5
  637. package/dist/shared/types/Validation.d.ts +4 -5
  638. package/dist/shared/types/common.d.ts +1 -3
  639. package/dist/shared/types/globalComponents.d.ts +5 -6
  640. package/dist/shared/utils/common.js.map +1 -1
  641. package/dist/shared/utils/datetime.d.ts +0 -1
  642. package/dist/shared/utils/datetime.js.map +1 -1
  643. package/dist/shared/utils/datetimePickerValue.d.ts +4 -7
  644. package/dist/shared/utils/datetimePickerValue.js.map +1 -1
  645. package/dist/shared/utils/development.d.ts +3 -3
  646. package/dist/shared/utils/development.js.map +1 -1
  647. package/dist/shared/utils/envConfig.d.ts +4 -4
  648. package/dist/shared/utils/envConfig.js.map +1 -1
  649. package/dist/shared/utils/json.d.ts +1 -1
  650. package/dist/shared/utils/json.js.map +1 -1
  651. package/dist/shared/utils/userAndTimeTracking.d.ts +5 -7
  652. package/dist/shared/utils/userAndTimeTracking.js.map +1 -1
  653. package/dist/shared/validators/vuelidate/common/useValidateHexColor.d.ts +3 -5
  654. package/dist/shared/validators/vuelidate/common/useValidateHexColor.js.map +1 -1
  655. package/dist/testing/appShell.d.ts +11 -11
  656. package/dist/testing/appShell.js.map +1 -1
  657. package/dist/testing/closeButtons.d.ts +9 -11
  658. package/dist/testing/closeButtons.js.map +1 -1
  659. package/dist/testing/declaredDependencies.d.ts +7 -7
  660. package/dist/testing/declaredDependencies.js.map +1 -1
  661. package/dist/testing/generatedRoutes.d.ts +6 -11
  662. package/dist/testing/generatedRoutes.js.map +1 -1
  663. package/dist/testing/routeHistory.d.ts +5 -12
  664. package/dist/testing/routeHistory.js.map +1 -1
  665. package/dist/testing/sortableLists.d.ts +16 -21
  666. package/dist/testing/sortableLists.js.map +1 -1
  667. package/dist/testing/typedRouter.d.ts +0 -1
  668. package/dist/testing/typedRouter.js.map +1 -1
  669. package/package.json +27 -27
  670. package/src/eslint/adminConfig.mjs +19 -27
  671. package/src/eslint/globalComponentNames.mjs +3 -4
  672. package/src/eslint/oxlint.mjs +7 -20
  673. package/src/eslint/plugin.d.mts +2 -4
  674. package/src/eslint/plugin.mjs +18 -34
  675. package/src/eslint/validRouteName.mjs +6 -7
  676. package/src/vite/devWatch.mjs +30 -43
  677. package/src/vite/index.d.mts +5 -5
  678. package/src/vite/sentry.mjs +7 -12
  679. package/src/vite/sourcemaps.mjs +4 -8
@@ -1 +1 @@
1
- {"version":3,"file":"UploadQueueItemEditable.js","names":["_sfc_main","UploadQueueItemEditable_vue_vue_type_script_setup_true_lang_default","UploadQueueItemEditable_default"],"sources":["../../../../../src/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onUnmounted, ref, type Ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetCustomData, DamAssetStatusDefault } from '@/domains/dam/types/Asset'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport {\n type UploadQueueItem,\n UploadQueueItemStatus,\n type UploadQueueItemStatusType,\n type UploadQueueKey,\n} from '@/domains/dam/types/UploadQueue'\nimport type { ValidationScope } from '@/shared/types/Validation'\nimport ATableCopyIdButton from '@/domains/ui/buttons/table/components/ATableCopyIdButton.vue'\nimport { prettyBytes } from '@/shared/utils/file'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport AssetCustomMetadataForm from '@/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue'\nimport AssetImage from '@/domains/dam/assetDetail/components/AssetImage.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/domains/dam/composables/uploadValidations'\nimport KeywordRemoteAutocompleteWithCached from '@/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue'\nimport { isNull } from '@/shared/utils/common'\nimport { useDamKeywordAssetTypeConfig } from '@/domains/dam/keyword/composables/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/domains/dam/author/composables/damAuthorConfig'\nimport AActionDeleteButton from '@/domains/ui/buttons/action/components/AActionDeleteButton.vue'\nimport { SHOW_REFRESH_AFTER_SECONDS } from '@/domains/dam/uploadQueue/composables/uploadQueueItemRefresh'\nimport UploadQueueItemErrorOverlay from '@/domains/dam/uploadQueue/components/UploadQueueItemErrorOverlay.vue'\nimport type { DamFieldsDisabledAs } from '@/domains/dam/uploadQueue/components/uploadQueueBindings'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n queueKey: UploadQueueKey\n extSystem: IntegerId\n customData: AssetCustomData\n keywords: DocId[]\n authors: DocId[]\n item: UploadQueueItem\n refreshDisabled: boolean\n mainFileSingleUse: boolean | null\n mainFileSingleUseEnabled?: boolean\n disableDoneAnimation?: boolean\n /**\n * A failed row a refresh may still change: its finish request went out and the server has said nothing final\n * about it, or the original of its duplicate could not be read. The queue knows which rows those are; a row\n * shown outside a queue has no such state.\n */\n refreshMayHelp?: boolean\n /** Where \"cancel\" is offered. */\n cancelStatuses?: readonly UploadQueueItemStatusType[]\n /** The line \"The main file is a duplicate.\" under the title. */\n duplicateNotice?: boolean\n /** The form stays off on a duplicate whatever its metadata. */\n disableFormOnDuplicate?: boolean\n /** The scope the fields of an editable row report to; a row that cannot be edited reports to none. */\n validationScope?: ValidationScope\n /** How keywords and authors look while the row cannot be edited; handed to both inputs as `disabledAs`. */\n disabledFieldsAs?: DamFieldsDisabledAs\n /** A duplicate gets no edit button at all: neither the `edit` slot nor its default is drawn. */\n hideEditOnDuplicate?: boolean\n /** Whether the row offers refresh, worked out by its host. Without it the row works it out itself. */\n refreshOffered?: boolean | undefined\n /** The DAM configuration whose rules and forms the row follows; inherited when not given. */\n configName?: string\n }>(),\n {\n mainFileSingleUseEnabled: true,\n disableDoneAnimation: false,\n refreshMayHelp: false,\n cancelStatuses: () => [\n UploadQueueItemStatus.Loading,\n UploadQueueItemStatus.Waiting,\n UploadQueueItemStatus.Uploading,\n ],\n duplicateNotice: true,\n disableFormOnDuplicate: false,\n validationScope: ADamAssetMetadataValidationScopeSymbol,\n disabledFieldsAs: 'chips',\n hideEditOnDuplicate: false,\n // Declared, or Vue would make an absent boolean `false` and the row would never offer refresh by itself.\n refreshOffered: undefined,\n configName: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:customData', data: AssetCustomData): void\n (e: 'update:keywords', data: DocId[]): void\n (e: 'update:authors', data: DocId[]): void\n (e: 'update:mainFileSingleUse', data: boolean | null): void\n (e: 'cancelItem', data: { index: number; item: UploadQueueItem; queueKey: UploadQueueKey }): void\n (e: 'removeItem', index: number): void\n (e: 'showDetail', data: DocId): void\n (e: 'refreshItem', data: { index: number; assetId: DocId }): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\ndefineSlots<{\n /** Over the picture, under the error overlay. */\n 'image-overlay'?(props: { item: UploadQueueItem }): unknown\n /** Left of the action line. Default: \"Edit in Media Library\", disabled without metadata, emits `showDetail`. */\n edit?(props: { item: UploadQueueItem }): unknown\n /** Last of the action line. Default: \"Remove from queue\" while it is offered, emits `removeItem`. */\n remove?(props: { item: UploadQueueItem; index: number; offered: boolean }): unknown\n}>()\n\nconst IMAGE_ASPECT_RATIO = 16 / 9\n\nconst customData = computed({\n get() {\n return props.customData\n },\n set(newValue) {\n emit('update:customData', { ...props.customData, ...newValue })\n },\n})\n\nconst keywords = computed({\n get() {\n return props.keywords\n },\n set(newValue) {\n emit('update:keywords', [...newValue])\n },\n})\n\nconst authors = computed({\n get() {\n return props.authors\n },\n set(newValue) {\n emit('update:authors', [...newValue])\n },\n})\n\nconst mainFileSingleUse = computed({\n get() {\n return props.mainFileSingleUse\n },\n set(newValue) {\n emit('update:mainFileSingleUse', newValue)\n },\n})\n\nconst { t } = useI18n()\n\n// The save skips an item whose metadata cannot be edited, so nothing in its row is validated: it could not be\n// put right. A scope is read once, when a field is set up - hence the key on the form.\nconst metadataValidationScope = computed(() => {\n return props.item.canEditMetadata ? props.validationScope : false\n})\n\nconst processingStatuses: readonly UploadQueueItemStatusType[] = [\n UploadQueueItemStatus.Processing,\n UploadQueueItemStatus.Loading,\n]\nconst processing = computed(() => {\n return processingStatuses.includes(props.item.status)\n})\nconst waiting = computed(() => {\n return props.item.status === UploadQueueItemStatus.Waiting\n})\nconst done = computed(() => {\n return !props.disableDoneAnimation && props.item.status === UploadQueueItemStatus.Uploaded\n})\nconst uploading = computed(() => {\n return props.item.status === UploadQueueItemStatus.Uploading\n})\nconst uploadProgress = computed(() => {\n return props.item.progress.progressPercent\n})\n\nconst imageSrc = computed(() => {\n return props.item.imagePreview ? props.item.imagePreview.url : undefined\n})\nconst assetType = computed(() => {\n return props.item.assetType\n})\nconst status = computed(() => {\n if (!props.item) return DamAssetStatusDefault\n return props.item.assetStatus\n})\n\nconst cancelItem = () => {\n emit('cancelItem', { index: props.index, item: props.item, queueKey: props.queueKey })\n}\n\nconst showCancel = computed(() => {\n return props.cancelStatuses.includes(props.item.status)\n})\n\n// Of a row that has not failed: offered once it has waited, for its file or for its metadata.\nconst refreshDue = ref(false)\nconst refreshTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n// A failed row offers refresh only while one may still change it. One whose chunk the server never took, or\n// whose file the server has failed, has nothing a refresh could find.\nconst offeredByRow = computed(() => {\n if (props.item.status === UploadQueueItemStatus.Failed) return props.refreshMayHelp && !isNull(props.item.assetId)\n return refreshDue.value\n})\nconst showRefresh = computed(() => {\n return props.refreshOffered ?? offeredByRow.value\n})\n// Remove comes with refresh, and a failed row has it at once: nothing else takes such a row out of the queue.\nconst showRemove = computed(() => {\n return showRefresh.value || props.item.status === UploadQueueItemStatus.Failed\n})\n\nconst showDetail = async () => {\n if (isNull(props.item.assetId)) return\n emit('showDetail', props.item.assetId)\n}\n\nconst refresh = () => {\n if (props.item.assetId) {\n emit('refreshItem', { index: props.index, assetId: props.item.assetId })\n }\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n\nwatch(\n () => props.item.status,\n async (newValue) => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = setTimeout(() => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n refreshDue.value = true\n }\n }, SHOW_REFRESH_AFTER_SECONDS * 1000)\n } else if (newValue === UploadQueueItemStatus.Uploaded) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n refreshDue.value = false\n // An uploaded row whose metadata has not come by then has a disabled form, and the save skips it. Refresh\n // loads the metadata.\n refreshTimer.value = setTimeout(() => {\n if (props.item.status !== UploadQueueItemStatus.Uploaded || props.item.canEditMetadata) return\n refreshDue.value = true\n }, SHOW_REFRESH_AFTER_SECONDS * 1000)\n } else if (newValue === UploadQueueItemStatus.Failed) {\n // Its wait is over: what a failed row offers follows `refreshMayHelp`, at once.\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n refreshDue.value = false\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => props.item.canEditMetadata,\n (canEdit) => {\n // The metadata of an uploaded row came after all, by its notification or by that refresh.\n if (canEdit && props.item.status === UploadQueueItemStatus.Uploaded) refreshDue.value = false\n }\n)\n\nonUnmounted(() => {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n})\n</script>\n\n<template>\n <VCol\n xxl=\"2\"\n xl=\"3\"\n md=\"4\"\n sm=\"6\"\n cols=\"12\"\n >\n <div class=\"dam-upload-queue__item\">\n <div class=\"dam-upload-queue__item-card\">\n <div class=\"position-relative\">\n <AssetImage\n :asset-type=\"assetType\"\n :asset-status=\"status\"\n :src=\"imageSrc\"\n background-color=\"#ccc\"\n :show-uploading=\"uploading\"\n :show-processing=\"processing\"\n :show-waiting=\"waiting\"\n :show-done=\"done\"\n :uploading-progress=\"uploadProgress\"\n :remaining-time=\"item.progress.remainingTime\"\n use-component\n cover\n :aspect-ratio=\"IMAGE_ASPECT_RATIO\"\n />\n <slot\n name=\"image-overlay\"\n :item=\"item\"\n />\n <UploadQueueItemErrorOverlay\n v-if=\"item.error.hasError\"\n :error=\"item.error\"\n />\n </div>\n <VRow\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <div class=\"w-100 d-flex justify-space-between align-center\">\n <div>\n <template v-if=\"!(hideEditOnDuplicate && item.isDuplicate)\">\n <slot\n name=\"edit\"\n :item=\"item\"\n >\n <VBtn\n size=\"small\"\n variant=\"text\"\n :disabled=\"!item.canEditMetadata\"\n @click.stop=\"showDetail\"\n >\n {{ t('common.damImage.image.button.editAsset') }}\n </VBtn>\n </slot>\n </template>\n </div>\n <div>\n <ATableCopyIdButton\n v-if=\"item.assetId\"\n :id=\"item.assetId\"\n button-t=\"common.damImage.queueItem.copyAssetId\"\n size=\"small\"\n />\n <VBtn\n v-if=\"showRefresh\"\n :aria-label=\"t('common.button.refresh')\"\n icon\n size=\"small\"\n variant=\"text\"\n :disabled=\"refreshDisabled\"\n @click.stop=\"refresh\"\n >\n <VIcon icon=\"mdi-refresh\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.refresh') }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-if=\"showCancel\"\n :aria-label=\"t('common.button.cancel')\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"cancelItem\"\n >\n <VIcon icon=\"mdi-close-circle-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.cancel') }}\n </VTooltip>\n </VBtn>\n <slot\n name=\"remove\"\n :item=\"item\"\n :index=\"index\"\n :offered=\"showRemove\"\n >\n <AActionDeleteButton\n v-if=\"showRemove\"\n variant=\"icon\"\n button-class=\"\"\n dialog-message-t=\"common.damImage.queueItem.removeFromQueue\"\n @delete-record=\"emit('removeItem', index)\"\n />\n </slot>\n </div>\n </div>\n </VCol>\n </VRow>\n <VRow\n v-if=\"item.displayTitle\"\n density=\"compact\"\n class=\"my-2 mb-3 mt-0 text-body-small\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.queueItem.displayTitle') }}: {{ item.displayTitle }}\n <span v-if=\"item.file?.size\">&nbsp;({{ prettyBytes(item.file.size) }})</span>\n </VCol>\n </VRow>\n <VRow\n v-if=\"duplicateNotice && item.isDuplicate\"\n class=\"text-body-small text-warning\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </VCol>\n </VRow>\n <VForm :disabled=\"!item.canEditMetadata || (disableFormOnDuplicate && item.isDuplicate)\">\n <AssetCustomMetadataForm\n v-if=\"item\"\n :key=\"item.canEditMetadata ? 'validated' : 'skipped'\"\n v-model=\"customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n :validation-scope=\"metadataValidationScope\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"keywords\"\n :queue-id=\"queueKey\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n multiple\n :required=\"keywordRequired\"\n :validation-scope=\"metadataValidationScope\"\n :disabled=\"!item.canEditMetadata\"\n :disabled-as=\"disabledFieldsAs\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"authors\"\n :queue-id=\"queueKey\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"item.authorConflicts\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :required=\"authorRequired\"\n :validation-scope=\"metadataValidationScope\"\n :disabled=\"!item.canEditMetadata\"\n :disabled-as=\"disabledFieldsAs\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"mainFileSingleUseEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <VSwitch\n v-model=\"mainFileSingleUse\"\n :label=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n />\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VForm>\n </div>\n </div>\n </VCol>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"UploadQueueItemEditable.js","names":["_sfc_main","UploadQueueItemEditable_vue_vue_type_script_setup_true_lang_default","UploadQueueItemEditable_default"],"sources":["../../../../../src/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onUnmounted, ref, type Ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetCustomData, DamAssetStatusDefault } from '@/domains/dam/types/Asset'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport {\n type UploadQueueItem,\n UploadQueueItemStatus,\n type UploadQueueItemStatusType,\n type UploadQueueKey,\n} from '@/domains/dam/types/UploadQueue'\nimport type { ValidationScope } from '@/shared/types/Validation'\nimport ATableCopyIdButton from '@/domains/ui/buttons/table/components/ATableCopyIdButton.vue'\nimport { prettyBytes } from '@/shared/utils/file'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport AssetCustomMetadataForm from '@/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue'\nimport AssetImage from '@/domains/dam/assetDetail/components/AssetImage.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/domains/dam/composables/uploadValidations'\nimport KeywordRemoteAutocompleteWithCached from '@/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue'\nimport { isNull } from '@/shared/utils/common'\nimport { useDamKeywordAssetTypeConfig } from '@/domains/dam/keyword/composables/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/domains/dam/author/composables/damAuthorConfig'\nimport AActionDeleteButton from '@/domains/ui/buttons/action/components/AActionDeleteButton.vue'\nimport { SHOW_REFRESH_AFTER_SECONDS } from '@/domains/dam/uploadQueue/composables/uploadQueueItemRefresh'\nimport UploadQueueItemErrorOverlay from '@/domains/dam/uploadQueue/components/UploadQueueItemErrorOverlay.vue'\nimport type { DamFieldsDisabledAs } from '@/domains/dam/uploadQueue/components/uploadQueueBindings'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n queueKey: UploadQueueKey\n extSystem: IntegerId\n customData: AssetCustomData\n keywords: DocId[]\n authors: DocId[]\n item: UploadQueueItem\n refreshDisabled: boolean\n mainFileSingleUse: boolean | null\n mainFileSingleUseEnabled?: boolean\n disableDoneAnimation?: boolean\n /**\n * A failed row that a refresh may still change: its finish request went out and the\n * server gave no final answer, or the original of its duplicate could not be read.\n * The queue knows these rows. A row shown outside a queue has no such state.\n */\n refreshMayHelp?: boolean\n /** Statuses in which \"cancel\" is offered. */\n cancelStatuses?: readonly UploadQueueItemStatusType[]\n /** Shows the line \"The main file is a duplicate.\" under the title. */\n duplicateNotice?: boolean\n /** Keeps the form disabled on a duplicate regardless of its metadata. */\n disableFormOnDuplicate?: boolean\n /** The scope the fields of an editable row report to. A non-editable row reports to none. */\n validationScope?: ValidationScope\n /** How keywords and authors look while the row is not editable. Passed to both inputs as `disabledAs`. */\n disabledFieldsAs?: DamFieldsDisabledAs\n /** A duplicate gets no edit button: neither the `edit` slot nor its default is rendered. */\n hideEditOnDuplicate?: boolean\n /** Whether the row offers refresh, decided by the host. Without it the row decides itself. */\n refreshOffered?: boolean | undefined\n /** The DAM configuration whose rules and forms the row follows. Inherited when not given. */\n configName?: string\n }>(),\n {\n mainFileSingleUseEnabled: true,\n disableDoneAnimation: false,\n refreshMayHelp: false,\n cancelStatuses: () => [\n UploadQueueItemStatus.Loading,\n UploadQueueItemStatus.Waiting,\n UploadQueueItemStatus.Uploading,\n ],\n duplicateNotice: true,\n disableFormOnDuplicate: false,\n validationScope: ADamAssetMetadataValidationScopeSymbol,\n disabledFieldsAs: 'chips',\n hideEditOnDuplicate: false,\n // Declared explicitly, otherwise Vue casts an absent boolean to `false` and the row never offers refresh by itself.\n refreshOffered: undefined,\n configName: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:customData', data: AssetCustomData): void\n (e: 'update:keywords', data: DocId[]): void\n (e: 'update:authors', data: DocId[]): void\n (e: 'update:mainFileSingleUse', data: boolean | null): void\n (e: 'cancelItem', data: { index: number; item: UploadQueueItem; queueKey: UploadQueueKey }): void\n (e: 'removeItem', index: number): void\n (e: 'showDetail', data: DocId): void\n (e: 'refreshItem', data: { index: number; assetId: DocId }): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\ndefineSlots<{\n /** Rendered over the picture, under the error overlay. */\n 'image-overlay'?(props: { item: UploadQueueItem }): unknown\n /** Left of the action line. Default: \"Edit in Media Library\", disabled without metadata, emits `showDetail`. */\n edit?(props: { item: UploadQueueItem }): unknown\n /** Last in the action line. Default: \"Remove from queue\" while offered, emits `removeItem`. */\n remove?(props: { item: UploadQueueItem; index: number; offered: boolean }): unknown\n}>()\n\nconst IMAGE_ASPECT_RATIO = 16 / 9\n\nconst customData = computed({\n get() {\n return props.customData\n },\n set(newValue) {\n emit('update:customData', { ...props.customData, ...newValue })\n },\n})\n\nconst keywords = computed({\n get() {\n return props.keywords\n },\n set(newValue) {\n emit('update:keywords', [...newValue])\n },\n})\n\nconst authors = computed({\n get() {\n return props.authors\n },\n set(newValue) {\n emit('update:authors', [...newValue])\n },\n})\n\nconst mainFileSingleUse = computed({\n get() {\n return props.mainFileSingleUse\n },\n set(newValue) {\n emit('update:mainFileSingleUse', newValue)\n },\n})\n\nconst { t } = useI18n()\n\n// The save skips an item whose metadata cannot be edited, so its row is not validated: the user could not fix it.\n// A field reads its scope only once at setup, hence the key on the form.\nconst metadataValidationScope = computed(() => {\n return props.item.canEditMetadata ? props.validationScope : false\n})\n\nconst processingStatuses: readonly UploadQueueItemStatusType[] = [\n UploadQueueItemStatus.Processing,\n UploadQueueItemStatus.Loading,\n]\nconst processing = computed(() => {\n return processingStatuses.includes(props.item.status)\n})\nconst waiting = computed(() => {\n return props.item.status === UploadQueueItemStatus.Waiting\n})\nconst done = computed(() => {\n return !props.disableDoneAnimation && props.item.status === UploadQueueItemStatus.Uploaded\n})\nconst uploading = computed(() => {\n return props.item.status === UploadQueueItemStatus.Uploading\n})\nconst uploadProgress = computed(() => {\n return props.item.progress.progressPercent\n})\n\nconst imageSrc = computed(() => {\n return props.item.imagePreview ? props.item.imagePreview.url : undefined\n})\nconst assetType = computed(() => {\n return props.item.assetType\n})\nconst status = computed(() => {\n if (!props.item) return DamAssetStatusDefault\n return props.item.assetStatus\n})\n\nconst cancelItem = () => {\n emit('cancelItem', { index: props.index, item: props.item, queueKey: props.queueKey })\n}\n\nconst showCancel = computed(() => {\n return props.cancelStatuses.includes(props.item.status)\n})\n\n// For a row that has not failed: refresh is offered after it has waited for its file or its metadata.\nconst refreshDue = ref(false)\nconst refreshTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n// A failed row offers refresh only while a refresh can still change it.\n// A row whose chunk the server never took, or whose file the server failed, has nothing a refresh could find.\nconst offeredByRow = computed(() => {\n if (props.item.status === UploadQueueItemStatus.Failed) return props.refreshMayHelp && !isNull(props.item.assetId)\n return refreshDue.value\n})\nconst showRefresh = computed(() => {\n return props.refreshOffered ?? offeredByRow.value\n})\n// Remove comes with refresh, and a failed row gets it at once: nothing else takes such a row out of the queue.\nconst showRemove = computed(() => {\n return showRefresh.value || props.item.status === UploadQueueItemStatus.Failed\n})\n\nconst showDetail = async () => {\n if (isNull(props.item.assetId)) return\n emit('showDetail', props.item.assetId)\n}\n\nconst refresh = () => {\n if (props.item.assetId) {\n emit('refreshItem', { index: props.index, assetId: props.item.assetId })\n }\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n\nwatch(\n () => props.item.status,\n async (newValue) => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = setTimeout(() => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n refreshDue.value = true\n }\n }, SHOW_REFRESH_AFTER_SECONDS * 1000)\n } else if (newValue === UploadQueueItemStatus.Uploaded) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n refreshDue.value = false\n // An uploaded row whose metadata has not arrived by then has a\n // disabled form and the save skips it. Refresh loads the metadata.\n refreshTimer.value = setTimeout(() => {\n if (props.item.status !== UploadQueueItemStatus.Uploaded || props.item.canEditMetadata) return\n refreshDue.value = true\n }, SHOW_REFRESH_AFTER_SECONDS * 1000)\n } else if (newValue === UploadQueueItemStatus.Failed) {\n // The wait is over. For a failed row, the offer follows `refreshMayHelp` immediately.\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n refreshDue.value = false\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => props.item.canEditMetadata,\n (canEdit) => {\n // The metadata arrived after all, by notification or by refresh.\n if (canEdit && props.item.status === UploadQueueItemStatus.Uploaded) refreshDue.value = false\n }\n)\n\nonUnmounted(() => {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n})\n</script>\n\n<template>\n <VCol\n xxl=\"2\"\n xl=\"3\"\n md=\"4\"\n sm=\"6\"\n cols=\"12\"\n >\n <div class=\"dam-upload-queue__item\">\n <div class=\"dam-upload-queue__item-card\">\n <div class=\"position-relative\">\n <AssetImage\n :asset-type=\"assetType\"\n :asset-status=\"status\"\n :src=\"imageSrc\"\n background-color=\"#ccc\"\n :show-uploading=\"uploading\"\n :show-processing=\"processing\"\n :show-waiting=\"waiting\"\n :show-done=\"done\"\n :uploading-progress=\"uploadProgress\"\n :remaining-time=\"item.progress.remainingTime\"\n use-component\n cover\n :aspect-ratio=\"IMAGE_ASPECT_RATIO\"\n />\n <slot\n name=\"image-overlay\"\n :item=\"item\"\n />\n <UploadQueueItemErrorOverlay\n v-if=\"item.error.hasError\"\n :error=\"item.error\"\n />\n </div>\n <VRow\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <div class=\"w-100 d-flex justify-space-between align-center\">\n <div>\n <template v-if=\"!(hideEditOnDuplicate && item.isDuplicate)\">\n <slot\n name=\"edit\"\n :item=\"item\"\n >\n <VBtn\n size=\"small\"\n variant=\"text\"\n :disabled=\"!item.canEditMetadata\"\n @click.stop=\"showDetail\"\n >\n {{ t('common.damImage.image.button.editAsset') }}\n </VBtn>\n </slot>\n </template>\n </div>\n <div>\n <ATableCopyIdButton\n v-if=\"item.assetId\"\n :id=\"item.assetId\"\n button-t=\"common.damImage.queueItem.copyAssetId\"\n size=\"small\"\n />\n <VBtn\n v-if=\"showRefresh\"\n :aria-label=\"t('common.button.refresh')\"\n icon\n size=\"small\"\n variant=\"text\"\n :disabled=\"refreshDisabled\"\n @click.stop=\"refresh\"\n >\n <VIcon icon=\"mdi-refresh\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.refresh') }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-if=\"showCancel\"\n :aria-label=\"t('common.button.cancel')\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"cancelItem\"\n >\n <VIcon icon=\"mdi-close-circle-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.cancel') }}\n </VTooltip>\n </VBtn>\n <slot\n name=\"remove\"\n :item=\"item\"\n :index=\"index\"\n :offered=\"showRemove\"\n >\n <AActionDeleteButton\n v-if=\"showRemove\"\n variant=\"icon\"\n button-class=\"\"\n dialog-message-t=\"common.damImage.queueItem.removeFromQueue\"\n @delete-record=\"emit('removeItem', index)\"\n />\n </slot>\n </div>\n </div>\n </VCol>\n </VRow>\n <VRow\n v-if=\"item.displayTitle\"\n density=\"compact\"\n class=\"my-2 mb-3 mt-0 text-body-small\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.queueItem.displayTitle') }}: {{ item.displayTitle }}\n <span v-if=\"item.file?.size\">&nbsp;({{ prettyBytes(item.file.size) }})</span>\n </VCol>\n </VRow>\n <VRow\n v-if=\"duplicateNotice && item.isDuplicate\"\n class=\"text-body-small text-warning\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </VCol>\n </VRow>\n <VForm :disabled=\"!item.canEditMetadata || (disableFormOnDuplicate && item.isDuplicate)\">\n <AssetCustomMetadataForm\n v-if=\"item\"\n :key=\"item.canEditMetadata ? 'validated' : 'skipped'\"\n v-model=\"customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n :validation-scope=\"metadataValidationScope\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"keywords\"\n :queue-id=\"queueKey\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n multiple\n :required=\"keywordRequired\"\n :validation-scope=\"metadataValidationScope\"\n :disabled=\"!item.canEditMetadata\"\n :disabled-as=\"disabledFieldsAs\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"authors\"\n :queue-id=\"queueKey\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"item.authorConflicts\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :required=\"authorRequired\"\n :validation-scope=\"metadataValidationScope\"\n :disabled=\"!item.canEditMetadata\"\n :disabled-as=\"disabledFieldsAs\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"mainFileSingleUseEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <VSwitch\n v-model=\"mainFileSingleUse\"\n :label=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n />\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VForm>\n </div>\n </div>\n </VCol>\n</template>\n"],"mappings":""}
@@ -16,30 +16,30 @@ type __VLS_Props = {
16
16
  mainFileSingleUseEnabled?: boolean;
17
17
  disableDoneAnimation?: boolean;
18
18
  /**
19
- * A failed row a refresh may still change: its finish request went out and the server has said nothing final
20
- * about it, or the original of its duplicate could not be read. The queue knows which rows those are; a row
21
- * shown outside a queue has no such state.
19
+ * A failed row that a refresh may still change: its finish request went out and the
20
+ * server gave no final answer, or the original of its duplicate could not be read.
21
+ * The queue knows these rows. A row shown outside a queue has no such state.
22
22
  */
23
23
  refreshMayHelp?: boolean;
24
- /** Where "cancel" is offered. */
24
+ /** Statuses in which "cancel" is offered. */
25
25
  cancelStatuses?: readonly UploadQueueItemStatusType[];
26
- /** The line "The main file is a duplicate." under the title. */
26
+ /** Shows the line "The main file is a duplicate." under the title. */
27
27
  duplicateNotice?: boolean;
28
- /** The form stays off on a duplicate whatever its metadata. */
28
+ /** Keeps the form disabled on a duplicate regardless of its metadata. */
29
29
  disableFormOnDuplicate?: boolean;
30
- /** The scope the fields of an editable row report to; a row that cannot be edited reports to none. */
30
+ /** The scope the fields of an editable row report to. A non-editable row reports to none. */
31
31
  validationScope?: ValidationScope;
32
- /** How keywords and authors look while the row cannot be edited; handed to both inputs as `disabledAs`. */
32
+ /** How keywords and authors look while the row is not editable. Passed to both inputs as `disabledAs`. */
33
33
  disabledFieldsAs?: DamFieldsDisabledAs;
34
- /** A duplicate gets no edit button at all: neither the `edit` slot nor its default is drawn. */
34
+ /** A duplicate gets no edit button: neither the `edit` slot nor its default is rendered. */
35
35
  hideEditOnDuplicate?: boolean;
36
- /** Whether the row offers refresh, worked out by its host. Without it the row works it out itself. */
36
+ /** Whether the row offers refresh, decided by the host. Without it the row decides itself. */
37
37
  refreshOffered?: boolean | undefined;
38
- /** The DAM configuration whose rules and forms the row follows; inherited when not given. */
38
+ /** The DAM configuration whose rules and forms the row follows. Inherited when not given. */
39
39
  configName?: string;
40
40
  };
41
41
  type __VLS_Slots = {
42
- /** Over the picture, under the error overlay. */
42
+ /** Rendered over the picture, under the error overlay. */
43
43
  'image-overlay'?(props: {
44
44
  item: UploadQueueItem;
45
45
  }): unknown;
@@ -47,7 +47,7 @@ type __VLS_Slots = {
47
47
  edit?(props: {
48
48
  item: UploadQueueItem;
49
49
  }): unknown;
50
- /** Last of the action line. Default: "Remove from queue" while it is offered, emits `removeItem`. */
50
+ /** Last in the action line. Default: "Remove from queue" while offered, emits `removeItem`. */
51
51
  remove?(props: {
52
52
  item: UploadQueueItem;
53
53
  index: number;
@@ -1 +1 @@
1
- {"version":3,"file":"UploadQueueItemEditable.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_component_VCol","_withCtx","_createElementVNode","_createVNode","AssetImage","_renderSlot","UploadQueueItemErrorOverlay","_createCommentVNode","_component_VRow","_component_VBtn","_withModifiers","_createTextVNode","_toDisplayString","_unref","ATableCopyIdButton","_component_VIcon","_component_VTooltip","AActionDeleteButton","_createElementBlock","_component_VForm","AssetCustomMetadataForm","ASystemEntityScope","KeywordRemoteAutocompleteWithCached","AuthorRemoteAutocompleteWithCached","_component_VSwitch","ASystemEntityScope_default","AActionDeleteButton_default","ATableCopyIdButton_default","AssetCustomMetadataForm_default","AuthorRemoteAutocompleteWithCached_default","KeywordRemoteAutocompleteWithCached_default","AssetImage_default","UploadQueueItemErrorOverlay_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","IMAGE_ASPECT_RATIO","UploadQueueItemEditable_vue_vue_type_script_setup_true_lang_default","UploadQueueItemStatus","ADamAssetMetadataValidationScopeSymbol","__emit","props","__props","emit","damConfigName","useDamConfigName","customData","computed","newValue","keywords","authors","mainFileSingleUse","useI18n","metadataValidationScope","processingStatuses","processing","waiting","done","uploading","uploadProgress","imageSrc","assetType","status","DamAssetStatusDefault","cancelItem","showCancel","refreshDue","ref","refreshTimer","offeredByRow","isNull","showRefresh","showRemove","showDetail","refresh","useDamKeywordAssetTypeConfig","useDamAuthorAssetTypeConfig","watch","canEdit","onUnmounted","openBlock","createBlock","VCol","withCtx","createElementVNode","createVNode","renderSlot","_ctx","createCommentVNode","VRow","VBtn","withModifiers","createTextVNode","toDisplayString","unref","t","VIcon","VTooltip","_cache","createElementBlock","prettyBytes","VForm","$event","keywordEnabled","keywordRequired","authorEnabled","authorRequired","VSwitch"],"sources":["../../../../../src/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onUnmounted, ref, type Ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetCustomData, DamAssetStatusDefault } from '@/domains/dam/types/Asset'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport {\n type UploadQueueItem,\n UploadQueueItemStatus,\n type UploadQueueItemStatusType,\n type UploadQueueKey,\n} from '@/domains/dam/types/UploadQueue'\nimport type { ValidationScope } from '@/shared/types/Validation'\nimport ATableCopyIdButton from '@/domains/ui/buttons/table/components/ATableCopyIdButton.vue'\nimport { prettyBytes } from '@/shared/utils/file'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport AssetCustomMetadataForm from '@/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue'\nimport AssetImage from '@/domains/dam/assetDetail/components/AssetImage.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/domains/dam/composables/uploadValidations'\nimport KeywordRemoteAutocompleteWithCached from '@/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue'\nimport { isNull } from '@/shared/utils/common'\nimport { useDamKeywordAssetTypeConfig } from '@/domains/dam/keyword/composables/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/domains/dam/author/composables/damAuthorConfig'\nimport AActionDeleteButton from '@/domains/ui/buttons/action/components/AActionDeleteButton.vue'\nimport { SHOW_REFRESH_AFTER_SECONDS } from '@/domains/dam/uploadQueue/composables/uploadQueueItemRefresh'\nimport UploadQueueItemErrorOverlay from '@/domains/dam/uploadQueue/components/UploadQueueItemErrorOverlay.vue'\nimport type { DamFieldsDisabledAs } from '@/domains/dam/uploadQueue/components/uploadQueueBindings'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n queueKey: UploadQueueKey\n extSystem: IntegerId\n customData: AssetCustomData\n keywords: DocId[]\n authors: DocId[]\n item: UploadQueueItem\n refreshDisabled: boolean\n mainFileSingleUse: boolean | null\n mainFileSingleUseEnabled?: boolean\n disableDoneAnimation?: boolean\n /**\n * A failed row a refresh may still change: its finish request went out and the server has said nothing final\n * about it, or the original of its duplicate could not be read. The queue knows which rows those are; a row\n * shown outside a queue has no such state.\n */\n refreshMayHelp?: boolean\n /** Where \"cancel\" is offered. */\n cancelStatuses?: readonly UploadQueueItemStatusType[]\n /** The line \"The main file is a duplicate.\" under the title. */\n duplicateNotice?: boolean\n /** The form stays off on a duplicate whatever its metadata. */\n disableFormOnDuplicate?: boolean\n /** The scope the fields of an editable row report to; a row that cannot be edited reports to none. */\n validationScope?: ValidationScope\n /** How keywords and authors look while the row cannot be edited; handed to both inputs as `disabledAs`. */\n disabledFieldsAs?: DamFieldsDisabledAs\n /** A duplicate gets no edit button at all: neither the `edit` slot nor its default is drawn. */\n hideEditOnDuplicate?: boolean\n /** Whether the row offers refresh, worked out by its host. Without it the row works it out itself. */\n refreshOffered?: boolean | undefined\n /** The DAM configuration whose rules and forms the row follows; inherited when not given. */\n configName?: string\n }>(),\n {\n mainFileSingleUseEnabled: true,\n disableDoneAnimation: false,\n refreshMayHelp: false,\n cancelStatuses: () => [\n UploadQueueItemStatus.Loading,\n UploadQueueItemStatus.Waiting,\n UploadQueueItemStatus.Uploading,\n ],\n duplicateNotice: true,\n disableFormOnDuplicate: false,\n validationScope: ADamAssetMetadataValidationScopeSymbol,\n disabledFieldsAs: 'chips',\n hideEditOnDuplicate: false,\n // Declared, or Vue would make an absent boolean `false` and the row would never offer refresh by itself.\n refreshOffered: undefined,\n configName: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:customData', data: AssetCustomData): void\n (e: 'update:keywords', data: DocId[]): void\n (e: 'update:authors', data: DocId[]): void\n (e: 'update:mainFileSingleUse', data: boolean | null): void\n (e: 'cancelItem', data: { index: number; item: UploadQueueItem; queueKey: UploadQueueKey }): void\n (e: 'removeItem', index: number): void\n (e: 'showDetail', data: DocId): void\n (e: 'refreshItem', data: { index: number; assetId: DocId }): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\ndefineSlots<{\n /** Over the picture, under the error overlay. */\n 'image-overlay'?(props: { item: UploadQueueItem }): unknown\n /** Left of the action line. Default: \"Edit in Media Library\", disabled without metadata, emits `showDetail`. */\n edit?(props: { item: UploadQueueItem }): unknown\n /** Last of the action line. Default: \"Remove from queue\" while it is offered, emits `removeItem`. */\n remove?(props: { item: UploadQueueItem; index: number; offered: boolean }): unknown\n}>()\n\nconst IMAGE_ASPECT_RATIO = 16 / 9\n\nconst customData = computed({\n get() {\n return props.customData\n },\n set(newValue) {\n emit('update:customData', { ...props.customData, ...newValue })\n },\n})\n\nconst keywords = computed({\n get() {\n return props.keywords\n },\n set(newValue) {\n emit('update:keywords', [...newValue])\n },\n})\n\nconst authors = computed({\n get() {\n return props.authors\n },\n set(newValue) {\n emit('update:authors', [...newValue])\n },\n})\n\nconst mainFileSingleUse = computed({\n get() {\n return props.mainFileSingleUse\n },\n set(newValue) {\n emit('update:mainFileSingleUse', newValue)\n },\n})\n\nconst { t } = useI18n()\n\n// The save skips an item whose metadata cannot be edited, so nothing in its row is validated: it could not be\n// put right. A scope is read once, when a field is set up - hence the key on the form.\nconst metadataValidationScope = computed(() => {\n return props.item.canEditMetadata ? props.validationScope : false\n})\n\nconst processingStatuses: readonly UploadQueueItemStatusType[] = [\n UploadQueueItemStatus.Processing,\n UploadQueueItemStatus.Loading,\n]\nconst processing = computed(() => {\n return processingStatuses.includes(props.item.status)\n})\nconst waiting = computed(() => {\n return props.item.status === UploadQueueItemStatus.Waiting\n})\nconst done = computed(() => {\n return !props.disableDoneAnimation && props.item.status === UploadQueueItemStatus.Uploaded\n})\nconst uploading = computed(() => {\n return props.item.status === UploadQueueItemStatus.Uploading\n})\nconst uploadProgress = computed(() => {\n return props.item.progress.progressPercent\n})\n\nconst imageSrc = computed(() => {\n return props.item.imagePreview ? props.item.imagePreview.url : undefined\n})\nconst assetType = computed(() => {\n return props.item.assetType\n})\nconst status = computed(() => {\n if (!props.item) return DamAssetStatusDefault\n return props.item.assetStatus\n})\n\nconst cancelItem = () => {\n emit('cancelItem', { index: props.index, item: props.item, queueKey: props.queueKey })\n}\n\nconst showCancel = computed(() => {\n return props.cancelStatuses.includes(props.item.status)\n})\n\n// Of a row that has not failed: offered once it has waited, for its file or for its metadata.\nconst refreshDue = ref(false)\nconst refreshTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n// A failed row offers refresh only while one may still change it. One whose chunk the server never took, or\n// whose file the server has failed, has nothing a refresh could find.\nconst offeredByRow = computed(() => {\n if (props.item.status === UploadQueueItemStatus.Failed) return props.refreshMayHelp && !isNull(props.item.assetId)\n return refreshDue.value\n})\nconst showRefresh = computed(() => {\n return props.refreshOffered ?? offeredByRow.value\n})\n// Remove comes with refresh, and a failed row has it at once: nothing else takes such a row out of the queue.\nconst showRemove = computed(() => {\n return showRefresh.value || props.item.status === UploadQueueItemStatus.Failed\n})\n\nconst showDetail = async () => {\n if (isNull(props.item.assetId)) return\n emit('showDetail', props.item.assetId)\n}\n\nconst refresh = () => {\n if (props.item.assetId) {\n emit('refreshItem', { index: props.index, assetId: props.item.assetId })\n }\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n\nwatch(\n () => props.item.status,\n async (newValue) => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = setTimeout(() => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n refreshDue.value = true\n }\n }, SHOW_REFRESH_AFTER_SECONDS * 1000)\n } else if (newValue === UploadQueueItemStatus.Uploaded) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n refreshDue.value = false\n // An uploaded row whose metadata has not come by then has a disabled form, and the save skips it. Refresh\n // loads the metadata.\n refreshTimer.value = setTimeout(() => {\n if (props.item.status !== UploadQueueItemStatus.Uploaded || props.item.canEditMetadata) return\n refreshDue.value = true\n }, SHOW_REFRESH_AFTER_SECONDS * 1000)\n } else if (newValue === UploadQueueItemStatus.Failed) {\n // Its wait is over: what a failed row offers follows `refreshMayHelp`, at once.\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n refreshDue.value = false\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => props.item.canEditMetadata,\n (canEdit) => {\n // The metadata of an uploaded row came after all, by its notification or by that refresh.\n if (canEdit && props.item.status === UploadQueueItemStatus.Uploaded) refreshDue.value = false\n }\n)\n\nonUnmounted(() => {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n})\n</script>\n\n<template>\n <VCol\n xxl=\"2\"\n xl=\"3\"\n md=\"4\"\n sm=\"6\"\n cols=\"12\"\n >\n <div class=\"dam-upload-queue__item\">\n <div class=\"dam-upload-queue__item-card\">\n <div class=\"position-relative\">\n <AssetImage\n :asset-type=\"assetType\"\n :asset-status=\"status\"\n :src=\"imageSrc\"\n background-color=\"#ccc\"\n :show-uploading=\"uploading\"\n :show-processing=\"processing\"\n :show-waiting=\"waiting\"\n :show-done=\"done\"\n :uploading-progress=\"uploadProgress\"\n :remaining-time=\"item.progress.remainingTime\"\n use-component\n cover\n :aspect-ratio=\"IMAGE_ASPECT_RATIO\"\n />\n <slot\n name=\"image-overlay\"\n :item=\"item\"\n />\n <UploadQueueItemErrorOverlay\n v-if=\"item.error.hasError\"\n :error=\"item.error\"\n />\n </div>\n <VRow\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <div class=\"w-100 d-flex justify-space-between align-center\">\n <div>\n <template v-if=\"!(hideEditOnDuplicate && item.isDuplicate)\">\n <slot\n name=\"edit\"\n :item=\"item\"\n >\n <VBtn\n size=\"small\"\n variant=\"text\"\n :disabled=\"!item.canEditMetadata\"\n @click.stop=\"showDetail\"\n >\n {{ t('common.damImage.image.button.editAsset') }}\n </VBtn>\n </slot>\n </template>\n </div>\n <div>\n <ATableCopyIdButton\n v-if=\"item.assetId\"\n :id=\"item.assetId\"\n button-t=\"common.damImage.queueItem.copyAssetId\"\n size=\"small\"\n />\n <VBtn\n v-if=\"showRefresh\"\n :aria-label=\"t('common.button.refresh')\"\n icon\n size=\"small\"\n variant=\"text\"\n :disabled=\"refreshDisabled\"\n @click.stop=\"refresh\"\n >\n <VIcon icon=\"mdi-refresh\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.refresh') }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-if=\"showCancel\"\n :aria-label=\"t('common.button.cancel')\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"cancelItem\"\n >\n <VIcon icon=\"mdi-close-circle-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.cancel') }}\n </VTooltip>\n </VBtn>\n <slot\n name=\"remove\"\n :item=\"item\"\n :index=\"index\"\n :offered=\"showRemove\"\n >\n <AActionDeleteButton\n v-if=\"showRemove\"\n variant=\"icon\"\n button-class=\"\"\n dialog-message-t=\"common.damImage.queueItem.removeFromQueue\"\n @delete-record=\"emit('removeItem', index)\"\n />\n </slot>\n </div>\n </div>\n </VCol>\n </VRow>\n <VRow\n v-if=\"item.displayTitle\"\n density=\"compact\"\n class=\"my-2 mb-3 mt-0 text-body-small\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.queueItem.displayTitle') }}: {{ item.displayTitle }}\n <span v-if=\"item.file?.size\">&nbsp;({{ prettyBytes(item.file.size) }})</span>\n </VCol>\n </VRow>\n <VRow\n v-if=\"duplicateNotice && item.isDuplicate\"\n class=\"text-body-small text-warning\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </VCol>\n </VRow>\n <VForm :disabled=\"!item.canEditMetadata || (disableFormOnDuplicate && item.isDuplicate)\">\n <AssetCustomMetadataForm\n v-if=\"item\"\n :key=\"item.canEditMetadata ? 'validated' : 'skipped'\"\n v-model=\"customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n :validation-scope=\"metadataValidationScope\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"keywords\"\n :queue-id=\"queueKey\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n multiple\n :required=\"keywordRequired\"\n :validation-scope=\"metadataValidationScope\"\n :disabled=\"!item.canEditMetadata\"\n :disabled-as=\"disabledFieldsAs\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"authors\"\n :queue-id=\"queueKey\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"item.authorConflicts\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :required=\"authorRequired\"\n :validation-scope=\"metadataValidationScope\"\n :disabled=\"!item.canEditMetadata\"\n :disabled-as=\"disabledFieldsAs\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"mainFileSingleUseEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <VSwitch\n v-model=\"mainFileSingleUse\"\n :label=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n />\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VForm>\n </div>\n </div>\n </VCol>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"UploadQueueItemEditable.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_component_VCol","_withCtx","_createElementVNode","_createVNode","AssetImage","_renderSlot","UploadQueueItemErrorOverlay","_createCommentVNode","_component_VRow","_component_VBtn","_withModifiers","_createTextVNode","_toDisplayString","_unref","ATableCopyIdButton","_component_VIcon","_component_VTooltip","AActionDeleteButton","_createElementBlock","_component_VForm","AssetCustomMetadataForm","ASystemEntityScope","KeywordRemoteAutocompleteWithCached","AuthorRemoteAutocompleteWithCached","_component_VSwitch","ASystemEntityScope_default","AActionDeleteButton_default","ATableCopyIdButton_default","AssetCustomMetadataForm_default","AuthorRemoteAutocompleteWithCached_default","KeywordRemoteAutocompleteWithCached_default","AssetImage_default","UploadQueueItemErrorOverlay_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","IMAGE_ASPECT_RATIO","UploadQueueItemEditable_vue_vue_type_script_setup_true_lang_default","UploadQueueItemStatus","ADamAssetMetadataValidationScopeSymbol","__emit","props","__props","emit","damConfigName","useDamConfigName","customData","computed","newValue","keywords","authors","mainFileSingleUse","useI18n","metadataValidationScope","processingStatuses","processing","waiting","done","uploading","uploadProgress","imageSrc","assetType","status","DamAssetStatusDefault","cancelItem","showCancel","refreshDue","ref","refreshTimer","offeredByRow","isNull","showRefresh","showRemove","showDetail","refresh","useDamKeywordAssetTypeConfig","useDamAuthorAssetTypeConfig","watch","canEdit","onUnmounted","openBlock","createBlock","VCol","withCtx","createElementVNode","createVNode","renderSlot","_ctx","createCommentVNode","VRow","VBtn","withModifiers","createTextVNode","toDisplayString","unref","t","VIcon","VTooltip","_cache","createElementBlock","prettyBytes","VForm","$event","keywordEnabled","keywordRequired","authorEnabled","authorRequired","VSwitch"],"sources":["../../../../../src/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, onUnmounted, ref, type Ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { type AssetCustomData, DamAssetStatusDefault } from '@/domains/dam/types/Asset'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport {\n type UploadQueueItem,\n UploadQueueItemStatus,\n type UploadQueueItemStatusType,\n type UploadQueueKey,\n} from '@/domains/dam/types/UploadQueue'\nimport type { ValidationScope } from '@/shared/types/Validation'\nimport ATableCopyIdButton from '@/domains/ui/buttons/table/components/ATableCopyIdButton.vue'\nimport { prettyBytes } from '@/shared/utils/file'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport AssetCustomMetadataForm from '@/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue'\nimport AssetImage from '@/domains/dam/assetDetail/components/AssetImage.vue'\nimport AuthorRemoteAutocompleteWithCached from '@/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue'\nimport { ADamAssetMetadataValidationScopeSymbol } from '@/domains/dam/composables/uploadValidations'\nimport KeywordRemoteAutocompleteWithCached from '@/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue'\nimport { isNull } from '@/shared/utils/common'\nimport { useDamKeywordAssetTypeConfig } from '@/domains/dam/keyword/composables/damKeywordConfig'\nimport { useDamAuthorAssetTypeConfig } from '@/domains/dam/author/composables/damAuthorConfig'\nimport AActionDeleteButton from '@/domains/ui/buttons/action/components/AActionDeleteButton.vue'\nimport { SHOW_REFRESH_AFTER_SECONDS } from '@/domains/dam/uploadQueue/composables/uploadQueueItemRefresh'\nimport UploadQueueItemErrorOverlay from '@/domains/dam/uploadQueue/components/UploadQueueItemErrorOverlay.vue'\nimport type { DamFieldsDisabledAs } from '@/domains/dam/uploadQueue/components/uploadQueueBindings'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\n\nconst props = withDefaults(\n defineProps<{\n index: number\n queueKey: UploadQueueKey\n extSystem: IntegerId\n customData: AssetCustomData\n keywords: DocId[]\n authors: DocId[]\n item: UploadQueueItem\n refreshDisabled: boolean\n mainFileSingleUse: boolean | null\n mainFileSingleUseEnabled?: boolean\n disableDoneAnimation?: boolean\n /**\n * A failed row that a refresh may still change: its finish request went out and the\n * server gave no final answer, or the original of its duplicate could not be read.\n * The queue knows these rows. A row shown outside a queue has no such state.\n */\n refreshMayHelp?: boolean\n /** Statuses in which \"cancel\" is offered. */\n cancelStatuses?: readonly UploadQueueItemStatusType[]\n /** Shows the line \"The main file is a duplicate.\" under the title. */\n duplicateNotice?: boolean\n /** Keeps the form disabled on a duplicate regardless of its metadata. */\n disableFormOnDuplicate?: boolean\n /** The scope the fields of an editable row report to. A non-editable row reports to none. */\n validationScope?: ValidationScope\n /** How keywords and authors look while the row is not editable. Passed to both inputs as `disabledAs`. */\n disabledFieldsAs?: DamFieldsDisabledAs\n /** A duplicate gets no edit button: neither the `edit` slot nor its default is rendered. */\n hideEditOnDuplicate?: boolean\n /** Whether the row offers refresh, decided by the host. Without it the row decides itself. */\n refreshOffered?: boolean | undefined\n /** The DAM configuration whose rules and forms the row follows. Inherited when not given. */\n configName?: string\n }>(),\n {\n mainFileSingleUseEnabled: true,\n disableDoneAnimation: false,\n refreshMayHelp: false,\n cancelStatuses: () => [\n UploadQueueItemStatus.Loading,\n UploadQueueItemStatus.Waiting,\n UploadQueueItemStatus.Uploading,\n ],\n duplicateNotice: true,\n disableFormOnDuplicate: false,\n validationScope: ADamAssetMetadataValidationScopeSymbol,\n disabledFieldsAs: 'chips',\n hideEditOnDuplicate: false,\n // Declared explicitly, otherwise Vue casts an absent boolean to `false` and the row never offers refresh by itself.\n refreshOffered: undefined,\n configName: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'update:customData', data: AssetCustomData): void\n (e: 'update:keywords', data: DocId[]): void\n (e: 'update:authors', data: DocId[]): void\n (e: 'update:mainFileSingleUse', data: boolean | null): void\n (e: 'cancelItem', data: { index: number; item: UploadQueueItem; queueKey: UploadQueueKey }): void\n (e: 'removeItem', index: number): void\n (e: 'showDetail', data: DocId): void\n (e: 'refreshItem', data: { index: number; assetId: DocId }): void\n}>()\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\ndefineSlots<{\n /** Rendered over the picture, under the error overlay. */\n 'image-overlay'?(props: { item: UploadQueueItem }): unknown\n /** Left of the action line. Default: \"Edit in Media Library\", disabled without metadata, emits `showDetail`. */\n edit?(props: { item: UploadQueueItem }): unknown\n /** Last in the action line. Default: \"Remove from queue\" while offered, emits `removeItem`. */\n remove?(props: { item: UploadQueueItem; index: number; offered: boolean }): unknown\n}>()\n\nconst IMAGE_ASPECT_RATIO = 16 / 9\n\nconst customData = computed({\n get() {\n return props.customData\n },\n set(newValue) {\n emit('update:customData', { ...props.customData, ...newValue })\n },\n})\n\nconst keywords = computed({\n get() {\n return props.keywords\n },\n set(newValue) {\n emit('update:keywords', [...newValue])\n },\n})\n\nconst authors = computed({\n get() {\n return props.authors\n },\n set(newValue) {\n emit('update:authors', [...newValue])\n },\n})\n\nconst mainFileSingleUse = computed({\n get() {\n return props.mainFileSingleUse\n },\n set(newValue) {\n emit('update:mainFileSingleUse', newValue)\n },\n})\n\nconst { t } = useI18n()\n\n// The save skips an item whose metadata cannot be edited, so its row is not validated: the user could not fix it.\n// A field reads its scope only once at setup, hence the key on the form.\nconst metadataValidationScope = computed(() => {\n return props.item.canEditMetadata ? props.validationScope : false\n})\n\nconst processingStatuses: readonly UploadQueueItemStatusType[] = [\n UploadQueueItemStatus.Processing,\n UploadQueueItemStatus.Loading,\n]\nconst processing = computed(() => {\n return processingStatuses.includes(props.item.status)\n})\nconst waiting = computed(() => {\n return props.item.status === UploadQueueItemStatus.Waiting\n})\nconst done = computed(() => {\n return !props.disableDoneAnimation && props.item.status === UploadQueueItemStatus.Uploaded\n})\nconst uploading = computed(() => {\n return props.item.status === UploadQueueItemStatus.Uploading\n})\nconst uploadProgress = computed(() => {\n return props.item.progress.progressPercent\n})\n\nconst imageSrc = computed(() => {\n return props.item.imagePreview ? props.item.imagePreview.url : undefined\n})\nconst assetType = computed(() => {\n return props.item.assetType\n})\nconst status = computed(() => {\n if (!props.item) return DamAssetStatusDefault\n return props.item.assetStatus\n})\n\nconst cancelItem = () => {\n emit('cancelItem', { index: props.index, item: props.item, queueKey: props.queueKey })\n}\n\nconst showCancel = computed(() => {\n return props.cancelStatuses.includes(props.item.status)\n})\n\n// For a row that has not failed: refresh is offered after it has waited for its file or its metadata.\nconst refreshDue = ref(false)\nconst refreshTimer: Ref<ReturnType<typeof setTimeout> | undefined> = ref(undefined)\n// A failed row offers refresh only while a refresh can still change it.\n// A row whose chunk the server never took, or whose file the server failed, has nothing a refresh could find.\nconst offeredByRow = computed(() => {\n if (props.item.status === UploadQueueItemStatus.Failed) return props.refreshMayHelp && !isNull(props.item.assetId)\n return refreshDue.value\n})\nconst showRefresh = computed(() => {\n return props.refreshOffered ?? offeredByRow.value\n})\n// Remove comes with refresh, and a failed row gets it at once: nothing else takes such a row out of the queue.\nconst showRemove = computed(() => {\n return showRefresh.value || props.item.status === UploadQueueItemStatus.Failed\n})\n\nconst showDetail = async () => {\n if (isNull(props.item.assetId)) return\n emit('showDetail', props.item.assetId)\n}\n\nconst refresh = () => {\n if (props.item.assetId) {\n emit('refreshItem', { index: props.index, assetId: props.item.assetId })\n }\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { keywordRequired, keywordEnabled } = useDamKeywordAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { authorRequired, authorEnabled } = useDamAuthorAssetTypeConfig(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n assetType.value,\n props.extSystem,\n damConfigName\n)\n\nwatch(\n () => props.item.status,\n async (newValue) => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = setTimeout(() => {\n if (newValue === UploadQueueItemStatus.Uploading || newValue === UploadQueueItemStatus.Processing) {\n refreshDue.value = true\n }\n }, SHOW_REFRESH_AFTER_SECONDS * 1000)\n } else if (newValue === UploadQueueItemStatus.Uploaded) {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n refreshDue.value = false\n // An uploaded row whose metadata has not arrived by then has a\n // disabled form and the save skips it. Refresh loads the metadata.\n refreshTimer.value = setTimeout(() => {\n if (props.item.status !== UploadQueueItemStatus.Uploaded || props.item.canEditMetadata) return\n refreshDue.value = true\n }, SHOW_REFRESH_AFTER_SECONDS * 1000)\n } else if (newValue === UploadQueueItemStatus.Failed) {\n // The wait is over. For a failed row, the offer follows `refreshMayHelp` immediately.\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n refreshDue.value = false\n }\n },\n { immediate: true }\n)\n\nwatch(\n () => props.item.canEditMetadata,\n (canEdit) => {\n // The metadata arrived after all, by notification or by refresh.\n if (canEdit && props.item.status === UploadQueueItemStatus.Uploaded) refreshDue.value = false\n }\n)\n\nonUnmounted(() => {\n clearTimeout(refreshTimer.value)\n refreshTimer.value = undefined\n})\n</script>\n\n<template>\n <VCol\n xxl=\"2\"\n xl=\"3\"\n md=\"4\"\n sm=\"6\"\n cols=\"12\"\n >\n <div class=\"dam-upload-queue__item\">\n <div class=\"dam-upload-queue__item-card\">\n <div class=\"position-relative\">\n <AssetImage\n :asset-type=\"assetType\"\n :asset-status=\"status\"\n :src=\"imageSrc\"\n background-color=\"#ccc\"\n :show-uploading=\"uploading\"\n :show-processing=\"processing\"\n :show-waiting=\"waiting\"\n :show-done=\"done\"\n :uploading-progress=\"uploadProgress\"\n :remaining-time=\"item.progress.remainingTime\"\n use-component\n cover\n :aspect-ratio=\"IMAGE_ASPECT_RATIO\"\n />\n <slot\n name=\"image-overlay\"\n :item=\"item\"\n />\n <UploadQueueItemErrorOverlay\n v-if=\"item.error.hasError\"\n :error=\"item.error\"\n />\n </div>\n <VRow\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <div class=\"w-100 d-flex justify-space-between align-center\">\n <div>\n <template v-if=\"!(hideEditOnDuplicate && item.isDuplicate)\">\n <slot\n name=\"edit\"\n :item=\"item\"\n >\n <VBtn\n size=\"small\"\n variant=\"text\"\n :disabled=\"!item.canEditMetadata\"\n @click.stop=\"showDetail\"\n >\n {{ t('common.damImage.image.button.editAsset') }}\n </VBtn>\n </slot>\n </template>\n </div>\n <div>\n <ATableCopyIdButton\n v-if=\"item.assetId\"\n :id=\"item.assetId\"\n button-t=\"common.damImage.queueItem.copyAssetId\"\n size=\"small\"\n />\n <VBtn\n v-if=\"showRefresh\"\n :aria-label=\"t('common.button.refresh')\"\n icon\n size=\"small\"\n variant=\"text\"\n :disabled=\"refreshDisabled\"\n @click.stop=\"refresh\"\n >\n <VIcon icon=\"mdi-refresh\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.refresh') }}\n </VTooltip>\n </VBtn>\n <VBtn\n v-if=\"showCancel\"\n :aria-label=\"t('common.button.cancel')\"\n icon\n size=\"small\"\n variant=\"text\"\n @click.stop=\"cancelItem\"\n >\n <VIcon icon=\"mdi-close-circle-outline\" />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n >\n {{ t('common.button.cancel') }}\n </VTooltip>\n </VBtn>\n <slot\n name=\"remove\"\n :item=\"item\"\n :index=\"index\"\n :offered=\"showRemove\"\n >\n <AActionDeleteButton\n v-if=\"showRemove\"\n variant=\"icon\"\n button-class=\"\"\n dialog-message-t=\"common.damImage.queueItem.removeFromQueue\"\n @delete-record=\"emit('removeItem', index)\"\n />\n </slot>\n </div>\n </div>\n </VCol>\n </VRow>\n <VRow\n v-if=\"item.displayTitle\"\n density=\"compact\"\n class=\"my-2 mb-3 mt-0 text-body-small\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.queueItem.displayTitle') }}: {{ item.displayTitle }}\n <span v-if=\"item.file?.size\">&nbsp;({{ prettyBytes(item.file.size) }})</span>\n </VCol>\n </VRow>\n <VRow\n v-if=\"duplicateNotice && item.isDuplicate\"\n class=\"text-body-small text-warning\"\n >\n <VCol class=\"pt-0\">\n {{ t('common.damImage.asset.detail.info.status.duplicate') }}\n </VCol>\n </VRow>\n <VForm :disabled=\"!item.canEditMetadata || (disableFormOnDuplicate && item.isDuplicate)\">\n <AssetCustomMetadataForm\n v-if=\"item\"\n :key=\"item.canEditMetadata ? 'validated' : 'skipped'\"\n v-model=\"customData\"\n :ext-system=\"extSystem\"\n :asset-type=\"assetType\"\n :validation-scope=\"metadataValidationScope\"\n >\n <template #after-pinned>\n <VRow\n v-if=\"keywordEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"keyword\"\n system=\"dam\"\n >\n <KeywordRemoteAutocompleteWithCached\n v-model=\"keywords\"\n :queue-id=\"queueKey\"\n :ext-system=\"extSystem\"\n :label=\"t('common.damImage.asset.model.keywords')\"\n clearable\n multiple\n :required=\"keywordRequired\"\n :validation-scope=\"metadataValidationScope\"\n :disabled=\"!item.canEditMetadata\"\n :disabled-as=\"disabledFieldsAs\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"authorEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <ASystemEntityScope\n subject=\"author\"\n system=\"dam\"\n >\n <AuthorRemoteAutocompleteWithCached\n v-model=\"authors\"\n :queue-id=\"queueKey\"\n :label=\"t('common.damImage.asset.model.authors')\"\n :author-conflicts=\"item.authorConflicts\"\n :ext-system=\"extSystem\"\n clearable\n multiple\n :required=\"authorRequired\"\n :validation-scope=\"metadataValidationScope\"\n :disabled=\"!item.canEditMetadata\"\n :disabled-as=\"disabledFieldsAs\"\n />\n </ASystemEntityScope>\n </VCol>\n </VRow>\n <VRow\n v-if=\"mainFileSingleUseEnabled\"\n density=\"compact\"\n class=\"my-2\"\n >\n <VCol>\n <VSwitch\n v-model=\"mainFileSingleUse\"\n :label=\"t('common.damImage.asset.model.mainFileSingleUse')\"\n />\n </VCol>\n </VRow>\n </template>\n </AssetCustomMetadataForm>\n </VForm>\n </div>\n </div>\n </VCol>\n</template>\n"],"mappings":"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"}
@@ -5,32 +5,32 @@ import { CustomDataValue } from '../../../customDataForm/types/CustomDataForm';
5
5
  import { UploadQueue, UploadQueueItem, UploadQueueKey } from '../../types/UploadQueue';
6
6
  import { UploadRefreshOutcome } from '../settlement/uploadSettlementTypes';
7
7
  import { UploadRefreshWarningKey } from '../composables/uploadQueueItemRefresh';
8
- /** How the keywords and authors of a row look while they cannot be edited: their chips, or a switched-off input. */
8
+ /** How a row's keywords and authors look while not editable: as chips, or as a disabled input. */
9
9
  export type DamFieldsDisabledAs = 'chips' | 'input';
10
- /** The suggestions of a queue, which the name chips of its rows mark as "new". */
10
+ /** The suggestions of a queue. Name chips of its rows mark them as "new". */
11
11
  export type UploadQueueSuggestionsLookup = (queueKey: UploadQueueKey) => UploadQueue['suggestions'] | undefined;
12
- /** Provided by an application whose queues are not the library's store. Without it the chips read that store. */
12
+ /** Provided by an application whose queues are not in the library store. Without it the chips read that store. */
13
13
  export declare const UploadQueueSuggestionsKey: InjectionKey<UploadQueueSuggestionsLookup>;
14
- /** Today's library: the suggestions in its store, which is asked for only when a chip needs them. */
14
+ /** Default: the suggestions in the library store. The store is resolved only when a chip needs them. */
15
15
  export declare const libraryUploadQueueSuggestions: UploadQueueSuggestionsLookup;
16
- /** What the list of a queue asks of its host. Without it the list works over the library's store, as today. */
16
+ /** What a queue list needs from its host. Without it the list uses the library store. */
17
17
  export interface UploadQueueListBinding {
18
18
  items(): UploadQueueItem[];
19
- /** `queueKey` is the one in the row's event. */
19
+ /** `queueKey` is the one from the row's event. */
20
20
  cancel(item: UploadQueueItem, index: number, queueKey: UploadQueueKey): void;
21
- /** For the library's default "remove from queue". */
21
+ /** Used by the library's default "remove from queue". */
22
22
  remove(index: number): void;
23
23
  refresh(item: UploadQueueItem): Promise<UploadRefreshOutcome>;
24
24
  refreshMayHelp(item: UploadQueueItem): boolean;
25
- /** A warning of a refresh, through the host's own alerts. */
25
+ /** Shows a refresh warning through the host's own alerts. */
26
26
  warn(key: UploadRefreshWarningKey): void;
27
- /** Hands the keywords and authors of the rows to the name caches and asks for them, once when the list mounts. */
27
+ /** Passes the rows' keywords and authors to the name caches and fetches them, once when the list mounts. */
28
28
  prime(items: UploadQueueItem[]): void;
29
29
  mainFileSingleUseEnabled: boolean;
30
30
  }
31
- /** Today's list of the library: its store, its caches, its alerts, its options. It follows the key as it changes. */
31
+ /** Default list binding: the library store, caches, alerts and options. It follows the key as it changes. */
32
32
  export declare function useLibraryUploadQueueListBinding(queueKey: MaybeRefOrGetter<UploadQueueKey>, configName: string): UploadQueueListBinding;
33
- /** What the mass operations of a queue ask of their host. Without it they work over the library's store. */
33
+ /** What a queue's mass operations need from their host. Without it they use the library store. */
34
34
  export interface UploadQueueMassOperationsBinding {
35
35
  assetTypes(): DamAssetTypeType[];
36
36
  fillCustomDataValue(data: {
@@ -38,9 +38,9 @@ export interface UploadQueueMassOperationsBinding {
38
38
  elementProperty: string;
39
39
  value: CustomDataValue;
40
40
  }, forceReplace?: boolean): void;
41
- /** Into which rows is the host's: every row in the library. */
41
+ /** The host decides which rows are filled. The library fills every row. */
42
42
  fillKeywords(value: DocId[], forceReplace?: boolean): void;
43
43
  fillAuthors(value: DocId[], forceReplace?: boolean): void;
44
44
  }
45
- /** Today's: the asset types of the library's store and `useUploadQueueMassOperations`. */
45
+ /** Default binding: the asset types of the library store and `useUploadQueueMassOperations`. */
46
46
  export declare function useLibraryUploadQueueMassOperationsBinding(queueKey: MaybeRefOrGetter<UploadQueueKey>): UploadQueueMassOperationsBinding;
@@ -1 +1 @@
1
- {"version":3,"file":"uploadQueueBindings.js","names":["UploadQueueSuggestionsKey","libraryUploadQueueSuggestions","useUploadQueuesStore","queueKey","useLibraryUploadQueueListBinding","uploadQueuesStore","useAlerts","useDamCachedKeywords","configName","useDamCachedAuthors","useCommonAdminCoreDamOptions","toValue","itemQueueKey","item","index","showWarningT","key","items","addToCachedKeywords","addToCachedAuthors","fetchCachedKeywords","fetchCachedAuthors","useLibraryUploadQueueMassOperationsBinding","useUploadQueueMassOperations","replaceEmptyCustomDataValue","replaceEmptyKeywords","replaceEmptyAuthors"],"sources":["../../../../../src/domains/dam/uploadQueue/components/uploadQueueBindings.ts"],"sourcesContent":["import { type InjectionKey, type MaybeRefOrGetter, toValue } from 'vue'\nimport type { DocId } from '@/shared/types/common'\nimport type { DamAssetTypeType } from '@/domains/dam/types/Asset'\nimport type { CustomDataValue } from '@/domains/customDataForm/types/CustomDataForm'\nimport type { UploadQueue, UploadQueueItem, UploadQueueKey } from '@/domains/dam/types/UploadQueue'\nimport type { UploadRefreshOutcome } from '@/domains/dam/uploadQueue/settlement/uploadSettlementTypes'\nimport type { UploadRefreshWarningKey } from '@/domains/dam/uploadQueue/composables/uploadQueueItemRefresh'\nimport { useUploadQueuesStore } from '@/domains/dam/uploadQueue/store/uploadQueuesStore'\nimport { useUploadQueueMassOperations } from '@/domains/dam/uploadQueue/composables/uploadQueueMassOperations'\nimport { useDamCachedKeywords } from '@/domains/dam/keyword/composables/cachedKeywords'\nimport { useDamCachedAuthors } from '@/domains/dam/author/composables/cachedAuthors'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport { useAlerts } from '@/domains/system/composables/alerts'\n\n/** How the keywords and authors of a row look while they cannot be edited: their chips, or a switched-off input. */\nexport type DamFieldsDisabledAs = 'chips' | 'input'\n\n/** The suggestions of a queue, which the name chips of its rows mark as \"new\". */\nexport type UploadQueueSuggestionsLookup = (queueKey: UploadQueueKey) => UploadQueue['suggestions'] | undefined\n\n/** Provided by an application whose queues are not the library's store. Without it the chips read that store. */\nexport const UploadQueueSuggestionsKey: InjectionKey<UploadQueueSuggestionsLookup> =\n Symbol.for('anzu:UploadQueueSuggestions')\n\n/** Today's library: the suggestions in its store, which is asked for only when a chip needs them. */\nexport const libraryUploadQueueSuggestions: UploadQueueSuggestionsLookup = (queueKey) =>\n useUploadQueuesStore().getQueue(queueKey)?.suggestions\n\n/** What the list of a queue asks of its host. Without it the list works over the library's store, as today. */\nexport interface UploadQueueListBinding {\n items(): UploadQueueItem[]\n /** `queueKey` is the one in the row's event. */\n cancel(item: UploadQueueItem, index: number, queueKey: UploadQueueKey): void\n /** For the library's default \"remove from queue\". */\n remove(index: number): void\n refresh(item: UploadQueueItem): Promise<UploadRefreshOutcome>\n refreshMayHelp(item: UploadQueueItem): boolean\n /** A warning of a refresh, through the host's own alerts. */\n warn(key: UploadRefreshWarningKey): void\n /** Hands the keywords and authors of the rows to the name caches and asks for them, once when the list mounts. */\n prime(items: UploadQueueItem[]): void\n mainFileSingleUseEnabled: boolean\n}\n\n/** Today's list of the library: its store, its caches, its alerts, its options. It follows the key as it changes. */\nexport function useLibraryUploadQueueListBinding(\n queueKey: MaybeRefOrGetter<UploadQueueKey>,\n configName: string\n): UploadQueueListBinding {\n const uploadQueuesStore = useUploadQueuesStore()\n const { showWarningT } = useAlerts()\n const { addToCachedKeywords, fetchCachedKeywords } = useDamCachedKeywords(configName)\n const { addToCachedAuthors, fetchCachedAuthors } = useDamCachedAuthors(configName)\n const { mainFileSingleUseEnabled } = useCommonAdminCoreDamOptions(configName)\n\n return {\n items: () => uploadQueuesStore.getQueueItems(toValue(queueKey)),\n cancel: (item, index, itemQueueKey) => uploadQueuesStore.stopItemUpload(itemQueueKey, item, index),\n remove: (index) => uploadQueuesStore.removeByIndex(toValue(queueKey), index),\n // A row offers refresh only with its asset; the rows of the configuration of its queue are settled by it.\n refresh: (item) => uploadQueuesStore.refreshAsset(item.assetId!, { queueKey: toValue(queueKey) }),\n refreshMayHelp: (item) => uploadQueuesStore.refreshMayHelp(item),\n warn: (key) => showWarningT(key),\n prime: (items) => {\n items.forEach((item) => {\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n })\n fetchCachedKeywords()\n fetchCachedAuthors()\n },\n mainFileSingleUseEnabled,\n }\n}\n\n/** What the mass operations of a queue ask of their host. Without it they work over the library's store. */\nexport interface UploadQueueMassOperationsBinding {\n assetTypes(): DamAssetTypeType[]\n fillCustomDataValue(\n data: { assetType: DamAssetTypeType; elementProperty: string; value: CustomDataValue },\n forceReplace?: boolean\n ): void\n /** Into which rows is the host's: every row in the library. */\n fillKeywords(value: DocId[], forceReplace?: boolean): void\n fillAuthors(value: DocId[], forceReplace?: boolean): void\n}\n\n/** Today's: the asset types of the library's store and `useUploadQueueMassOperations`. */\nexport function useLibraryUploadQueueMassOperationsBinding(\n queueKey: MaybeRefOrGetter<UploadQueueKey>\n): UploadQueueMassOperationsBinding {\n const uploadQueuesStore = useUploadQueuesStore()\n const { replaceEmptyCustomDataValue, replaceEmptyKeywords, replaceEmptyAuthors } =\n useUploadQueueMassOperations(queueKey)\n\n return {\n assetTypes: () => uploadQueuesStore.getQueueItemsTypes(toValue(queueKey)),\n fillCustomDataValue: replaceEmptyCustomDataValue,\n fillKeywords: replaceEmptyKeywords,\n fillAuthors: replaceEmptyAuthors,\n }\n}\n"],"mappings":";;;;;;;;AAqBA,IAAaA,IACX,OAAO,IAAI,6BAA6B,GAG7BC,KAA+D,MAC1EC,EAAqB,CAAC,CAAC,SAASC,CAAQ,CAAC,EAAE;AAmB7C,SAAgBC,EACd,GACA,GACwB;CACxB,IAAMC,IAAoBH,EAAqB,GACzC,EAAE,oBAAiBI,EAAU,GAC7B,EAAE,wBAAqB,2BAAwBC,EAAqBC,CAAU,GAC9E,EAAE,uBAAoB,0BAAuBC,EAAoBD,CAAU,GAC3E,EAAE,gCAA6BE,EAA6BF,CAAU;CAE5E,OAAO;EACL,aAAaH,EAAkB,cAAcM,EAAQR,CAAQ,CAAC;EAC9D,SAAS,GAAM,GAAO,MAAiBE,EAAkB,eAAeO,GAAcC,GAAMC,CAAK;EACjG,SAAS,MAAUT,EAAkB,cAAcM,EAAQR,CAAQ,GAAGW,CAAK;EAE3E,UAAU,MAAST,EAAkB,aAAaQ,EAAK,SAAU,EAAE,UAAUF,EAAQR,CAAQ,EAAE,CAAC;EAChG,iBAAiB,MAASE,EAAkB,eAAeQ,CAAI;EAC/D,OAAO,MAAQE,EAAaC,CAAG;EAC/B,QAAQ,MAAU;GAMhB,AALAC,EAAM,SAAS,MAAS;IAEtB,AADAC,EAAoBL,EAAK,QAAQ,GACjCM,EAAmBN,EAAK,OAAO;GACjC,CAAC,GACDO,EAAoB,GACpBC,EAAmB;EACrB;EACA;CACF;AACF;AAeA,SAAgBC,EACd,GACkC;CAClC,IAAMjB,IAAoBH,EAAqB,GACzC,EAAE,gCAA6B,yBAAsB,2BACzDqB,EAA6BpB,CAAQ;CAEvC,OAAO;EACL,kBAAkBE,EAAkB,mBAAmBM,EAAQR,CAAQ,CAAC;EACxE,qBAAqBqB;EACrB,cAAcC;EACd,aAAaC;CACf;AACF"}
1
+ {"version":3,"file":"uploadQueueBindings.js","names":["UploadQueueSuggestionsKey","libraryUploadQueueSuggestions","useUploadQueuesStore","queueKey","useLibraryUploadQueueListBinding","uploadQueuesStore","useAlerts","useDamCachedKeywords","configName","useDamCachedAuthors","useCommonAdminCoreDamOptions","toValue","itemQueueKey","item","index","showWarningT","key","items","addToCachedKeywords","addToCachedAuthors","fetchCachedKeywords","fetchCachedAuthors","useLibraryUploadQueueMassOperationsBinding","useUploadQueueMassOperations","replaceEmptyCustomDataValue","replaceEmptyKeywords","replaceEmptyAuthors"],"sources":["../../../../../src/domains/dam/uploadQueue/components/uploadQueueBindings.ts"],"sourcesContent":["import { type InjectionKey, type MaybeRefOrGetter, toValue } from 'vue'\nimport type { DocId } from '@/shared/types/common'\nimport type { DamAssetTypeType } from '@/domains/dam/types/Asset'\nimport type { CustomDataValue } from '@/domains/customDataForm/types/CustomDataForm'\nimport type { UploadQueue, UploadQueueItem, UploadQueueKey } from '@/domains/dam/types/UploadQueue'\nimport type { UploadRefreshOutcome } from '@/domains/dam/uploadQueue/settlement/uploadSettlementTypes'\nimport type { UploadRefreshWarningKey } from '@/domains/dam/uploadQueue/composables/uploadQueueItemRefresh'\nimport { useUploadQueuesStore } from '@/domains/dam/uploadQueue/store/uploadQueuesStore'\nimport { useUploadQueueMassOperations } from '@/domains/dam/uploadQueue/composables/uploadQueueMassOperations'\nimport { useDamCachedKeywords } from '@/domains/dam/keyword/composables/cachedKeywords'\nimport { useDamCachedAuthors } from '@/domains/dam/author/composables/cachedAuthors'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport { useAlerts } from '@/domains/system/composables/alerts'\n\n/** How a row's keywords and authors look while not editable: as chips, or as a disabled input. */\nexport type DamFieldsDisabledAs = 'chips' | 'input'\n\n/** The suggestions of a queue. Name chips of its rows mark them as \"new\". */\nexport type UploadQueueSuggestionsLookup = (queueKey: UploadQueueKey) => UploadQueue['suggestions'] | undefined\n\n/** Provided by an application whose queues are not in the library store. Without it the chips read that store. */\nexport const UploadQueueSuggestionsKey: InjectionKey<UploadQueueSuggestionsLookup> =\n Symbol.for('anzu:UploadQueueSuggestions')\n\n/** Default: the suggestions in the library store. The store is resolved only when a chip needs them. */\nexport const libraryUploadQueueSuggestions: UploadQueueSuggestionsLookup = (queueKey) =>\n useUploadQueuesStore().getQueue(queueKey)?.suggestions\n\n/** What a queue list needs from its host. Without it the list uses the library store. */\nexport interface UploadQueueListBinding {\n items(): UploadQueueItem[]\n /** `queueKey` is the one from the row's event. */\n cancel(item: UploadQueueItem, index: number, queueKey: UploadQueueKey): void\n /** Used by the library's default \"remove from queue\". */\n remove(index: number): void\n refresh(item: UploadQueueItem): Promise<UploadRefreshOutcome>\n refreshMayHelp(item: UploadQueueItem): boolean\n /** Shows a refresh warning through the host's own alerts. */\n warn(key: UploadRefreshWarningKey): void\n /** Passes the rows' keywords and authors to the name caches and fetches them, once when the list mounts. */\n prime(items: UploadQueueItem[]): void\n mainFileSingleUseEnabled: boolean\n}\n\n/** Default list binding: the library store, caches, alerts and options. It follows the key as it changes. */\nexport function useLibraryUploadQueueListBinding(\n queueKey: MaybeRefOrGetter<UploadQueueKey>,\n configName: string\n): UploadQueueListBinding {\n const uploadQueuesStore = useUploadQueuesStore()\n const { showWarningT } = useAlerts()\n const { addToCachedKeywords, fetchCachedKeywords } = useDamCachedKeywords(configName)\n const { addToCachedAuthors, fetchCachedAuthors } = useDamCachedAuthors(configName)\n const { mainFileSingleUseEnabled } = useCommonAdminCoreDamOptions(configName)\n\n return {\n items: () => uploadQueuesStore.getQueueItems(toValue(queueKey)),\n cancel: (item, index, itemQueueKey) => uploadQueuesStore.stopItemUpload(itemQueueKey, item, index),\n remove: (index) => uploadQueuesStore.removeByIndex(toValue(queueKey), index),\n // A row offers refresh only with its asset. Rows of its queue's configuration are settled by the refresh.\n refresh: (item) => uploadQueuesStore.refreshAsset(item.assetId!, { queueKey: toValue(queueKey) }),\n refreshMayHelp: (item) => uploadQueuesStore.refreshMayHelp(item),\n warn: (key) => showWarningT(key),\n prime: (items) => {\n items.forEach((item) => {\n addToCachedKeywords(item.keywords)\n addToCachedAuthors(item.authors)\n })\n fetchCachedKeywords()\n fetchCachedAuthors()\n },\n mainFileSingleUseEnabled,\n }\n}\n\n/** What a queue's mass operations need from their host. Without it they use the library store. */\nexport interface UploadQueueMassOperationsBinding {\n assetTypes(): DamAssetTypeType[]\n fillCustomDataValue(\n data: { assetType: DamAssetTypeType; elementProperty: string; value: CustomDataValue },\n forceReplace?: boolean\n ): void\n /** The host decides which rows are filled. The library fills every row. */\n fillKeywords(value: DocId[], forceReplace?: boolean): void\n fillAuthors(value: DocId[], forceReplace?: boolean): void\n}\n\n/** Default binding: the asset types of the library store and `useUploadQueueMassOperations`. */\nexport function useLibraryUploadQueueMassOperationsBinding(\n queueKey: MaybeRefOrGetter<UploadQueueKey>\n): UploadQueueMassOperationsBinding {\n const uploadQueuesStore = useUploadQueuesStore()\n const { replaceEmptyCustomDataValue, replaceEmptyKeywords, replaceEmptyAuthors } =\n useUploadQueueMassOperations(queueKey)\n\n return {\n assetTypes: () => uploadQueuesStore.getQueueItemsTypes(toValue(queueKey)),\n fillCustomDataValue: replaceEmptyCustomDataValue,\n fillKeywords: replaceEmptyKeywords,\n fillAuthors: replaceEmptyAuthors,\n }\n}\n"],"mappings":";;;;;;;;AAqBA,IAAaA,IACX,OAAO,IAAI,6BAA6B,GAG7BC,KAA+D,MAC1EC,EAAqB,CAAC,CAAC,SAASC,CAAQ,CAAC,EAAE;AAmB7C,SAAgBC,EACd,GACA,GACwB;CACxB,IAAMC,IAAoBH,EAAqB,GACzC,EAAE,oBAAiBI,EAAU,GAC7B,EAAE,wBAAqB,2BAAwBC,EAAqBC,CAAU,GAC9E,EAAE,uBAAoB,0BAAuBC,EAAoBD,CAAU,GAC3E,EAAE,gCAA6BE,EAA6BF,CAAU;CAE5E,OAAO;EACL,aAAaH,EAAkB,cAAcM,EAAQR,CAAQ,CAAC;EAC9D,SAAS,GAAM,GAAO,MAAiBE,EAAkB,eAAeO,GAAcC,GAAMC,CAAK;EACjG,SAAS,MAAUT,EAAkB,cAAcM,EAAQR,CAAQ,GAAGW,CAAK;EAE3E,UAAU,MAAST,EAAkB,aAAaQ,EAAK,SAAU,EAAE,UAAUF,EAAQR,CAAQ,EAAE,CAAC;EAChG,iBAAiB,MAASE,EAAkB,eAAeQ,CAAI;EAC/D,OAAO,MAAQE,EAAaC,CAAG;EAC/B,QAAQ,MAAU;GAMhB,AALAC,EAAM,SAAS,MAAS;IAEtB,AADAC,EAAoBL,EAAK,QAAQ,GACjCM,EAAmBN,EAAK,OAAO;GACjC,CAAC,GACDO,EAAoB,GACpBC,EAAmB;EACrB;EACA;CACF;AACF;AAeA,SAAgBC,EACd,GACkC;CAClC,IAAMjB,IAAoBH,EAAqB,GACzC,EAAE,gCAA6B,yBAAsB,2BACzDqB,EAA6BpB,CAAQ;CAEvC,OAAO;EACL,kBAAkBE,EAAkB,mBAAmBM,EAAQR,CAAQ,CAAC;EACxE,qBAAqBqB;EACrB,cAAcC;EACd,aAAaC;CACf;AACF"}
@@ -1,6 +1,6 @@
1
1
  /**
2
- * The size of the next chunk of an upload under the DAM configuration `configName`, bounded by its prv configuration.
3
- * A name left out is the inherited one in a component's setup, else `default`.
2
+ * The next chunk size of an upload under the DAM configuration `configName`, bounded by its prv configuration.
3
+ * Without a name, the inherited one in a component's setup is used, else `default`.
4
4
  */
5
5
  export declare function useDamUploadChunkSize(apiTimeout?: number, configName?: string): {
6
6
  lastChunkSize: import('vue').Ref<number, number>;
@@ -1 +1 @@
1
- {"version":3,"file":"damUploadChunkSize.js","names":["chunkSizes","useDamUploadChunkSize","name","inheritedDamConfigName","configName","damConfigStore","useDamConfigStoreOf","lastChunkSize","ref","minUploadTimeThreshold","apiTimeout","idealUploadTimeThreshold","maxUploadTimeThreshold","updateChunkSize","isNull","speed","expectedChunkUploadSpeed","resize","next","returnFromRange","size","changed","value"],"sources":["../../../../../src/domains/dam/uploadQueue/composables/damUploadChunkSize.ts"],"sourcesContent":["import { ref } from 'vue'\nimport { isNull } from '@/shared/utils/common'\nimport { useDamConfigStoreOf } from '@/domains/dam/config/store/damConfigStore'\nimport { inheritedDamConfigName } from '@/domains/dam/composables/damConfigName'\n\n// The last size of each DAM configuration: one upload hands it to the next one of its name.\nconst chunkSizes = new Map<string, number>()\n\n/**\n * The size of the next chunk of an upload under the DAM configuration `configName`, bounded by its prv configuration.\n * A name left out is the inherited one in a component's setup, else `default`.\n */\nexport function useDamUploadChunkSize(apiTimeout: number = 30, configName?: string) {\n const name = inheritedDamConfigName(configName)\n const damConfigStore = useDamConfigStoreOf(name)\n const lastChunkSize = ref(chunkSizes.get(name) || damConfigStore.damPrvConfig.settings.imageChunkConfig.minSize)\n\n const minUploadTimeThreshold = apiTimeout / 5\n const idealUploadTimeThreshold = apiTimeout / 4\n const maxUploadTimeThreshold = apiTimeout / 2\n\n const updateChunkSize = (speed: number | null) => {\n if (isNull(speed)) {\n return false\n }\n\n const expectedChunkUploadSpeed = lastChunkSize.value / speed\n if (expectedChunkUploadSpeed > maxUploadTimeThreshold) {\n return resize(maxUploadTimeThreshold * speed)\n }\n if (expectedChunkUploadSpeed < minUploadTimeThreshold) {\n return resize(idealUploadTimeThreshold * speed)\n }\n\n return false\n }\n\n // Answers whether the size changed: at a bound of the configuration it stays, and the chunk of a retry is not read\n // from the file again.\n const resize = (size: number) => {\n const next = returnFromRange(size)\n const changed = next !== lastChunkSize.value\n lastChunkSize.value = next\n chunkSizes.set(name, next)\n\n return changed\n }\n\n const returnFromRange = (value: number) => {\n if (value > damConfigStore.damPrvConfig.settings.imageChunkConfig.maxSize) {\n return damConfigStore.damPrvConfig.settings.imageChunkConfig.maxSize\n }\n if (value < damConfigStore.damPrvConfig.settings.imageChunkConfig.minSize) {\n return damConfigStore.damPrvConfig.settings.imageChunkConfig.minSize\n }\n\n return value\n }\n\n return {\n lastChunkSize,\n updateChunkSize,\n }\n}\n"],"mappings":";;;;;AAMA,IAAMA,oBAAa,IAAI,IAAoB;AAM3C,SAAgBC,EAAsB,IAAqB,IAAI,GAAqB;CAClF,IAAMC,IAAOC,EAAuBC,CAAU,GACxCC,IAAiBC,EAAoBJ,CAAI,GACzCK,IAAgBC,EAAIR,EAAW,IAAIE,CAAI,KAAKG,EAAe,aAAa,SAAS,iBAAiB,OAAO,GAEzGI,IAAyBC,IAAa,GACtCC,IAA2BD,IAAa,GACxCE,IAAyBF,IAAa,GAEtCG,KAAmB,MAAyB;EAChD,IAAIC,EAAOC,CAAK,GACd,OAAO;EAGT,IAAMC,IAA2BT,EAAc,QAAQQ;EAQvD,OAPIC,IAA2BJ,IACtBK,EAAOL,IAAyBG,CAAK,IAE1CC,IAA2BP,KACtBQ,EAAON,IAA2BI,CAAK;CAIlD,GAIME,KAAU,MAAiB;EAC/B,IAAMC,IAAOC,EAAgBC,CAAI,GAC3BC,IAAUH,MAASX,EAAc;EAIvC,OAHA,EAAc,QAAQW,GACtBlB,EAAW,IAAIE,GAAMgB,CAAI,GAElBG;CACT,GAEMF,KAAmB,MACnBG,IAAQjB,EAAe,aAAa,SAAS,iBAAiB,UACzDA,EAAe,aAAa,SAAS,iBAAiB,UAE3DiB,IAAQjB,EAAe,aAAa,SAAS,iBAAiB,UACzDA,EAAe,aAAa,SAAS,iBAAiB,UAGxDiB;CAGT,OAAO;EACL;EACA;CACF;AACF"}
1
+ {"version":3,"file":"damUploadChunkSize.js","names":["chunkSizes","useDamUploadChunkSize","name","inheritedDamConfigName","configName","damConfigStore","useDamConfigStoreOf","lastChunkSize","ref","minUploadTimeThreshold","apiTimeout","idealUploadTimeThreshold","maxUploadTimeThreshold","updateChunkSize","isNull","speed","expectedChunkUploadSpeed","resize","next","returnFromRange","size","changed","value"],"sources":["../../../../../src/domains/dam/uploadQueue/composables/damUploadChunkSize.ts"],"sourcesContent":["import { ref } from 'vue'\nimport { isNull } from '@/shared/utils/common'\nimport { useDamConfigStoreOf } from '@/domains/dam/config/store/damConfigStore'\nimport { inheritedDamConfigName } from '@/domains/dam/composables/damConfigName'\n\n// Last chunk size per DAM configuration. One upload passes it to the next upload of the same configuration.\nconst chunkSizes = new Map<string, number>()\n\n/**\n * The next chunk size of an upload under the DAM configuration `configName`, bounded by its prv configuration.\n * Without a name, the inherited one in a component's setup is used, else `default`.\n */\nexport function useDamUploadChunkSize(apiTimeout: number = 30, configName?: string) {\n const name = inheritedDamConfigName(configName)\n const damConfigStore = useDamConfigStoreOf(name)\n const lastChunkSize = ref(chunkSizes.get(name) || damConfigStore.damPrvConfig.settings.imageChunkConfig.minSize)\n\n const minUploadTimeThreshold = apiTimeout / 5\n const idealUploadTimeThreshold = apiTimeout / 4\n const maxUploadTimeThreshold = apiTimeout / 2\n\n const updateChunkSize = (speed: number | null) => {\n if (isNull(speed)) {\n return false\n }\n\n const expectedChunkUploadSpeed = lastChunkSize.value / speed\n if (expectedChunkUploadSpeed > maxUploadTimeThreshold) {\n return resize(maxUploadTimeThreshold * speed)\n }\n if (expectedChunkUploadSpeed < minUploadTimeThreshold) {\n return resize(idealUploadTimeThreshold * speed)\n }\n\n return false\n }\n\n // Returns whether the size changed. At a configuration bound it\n // stays, so a retry does not re-read the chunk from the file.\n const resize = (size: number) => {\n const next = returnFromRange(size)\n const changed = next !== lastChunkSize.value\n lastChunkSize.value = next\n chunkSizes.set(name, next)\n\n return changed\n }\n\n const returnFromRange = (value: number) => {\n if (value > damConfigStore.damPrvConfig.settings.imageChunkConfig.maxSize) {\n return damConfigStore.damPrvConfig.settings.imageChunkConfig.maxSize\n }\n if (value < damConfigStore.damPrvConfig.settings.imageChunkConfig.minSize) {\n return damConfigStore.damPrvConfig.settings.imageChunkConfig.minSize\n }\n\n return value\n }\n\n return {\n lastChunkSize,\n updateChunkSize,\n }\n}\n"],"mappings":";;;;;AAMA,IAAMA,oBAAa,IAAI,IAAoB;AAM3C,SAAgBC,EAAsB,IAAqB,IAAI,GAAqB;CAClF,IAAMC,IAAOC,EAAuBC,CAAU,GACxCC,IAAiBC,EAAoBJ,CAAI,GACzCK,IAAgBC,EAAIR,EAAW,IAAIE,CAAI,KAAKG,EAAe,aAAa,SAAS,iBAAiB,OAAO,GAEzGI,IAAyBC,IAAa,GACtCC,IAA2BD,IAAa,GACxCE,IAAyBF,IAAa,GAEtCG,KAAmB,MAAyB;EAChD,IAAIC,EAAOC,CAAK,GACd,OAAO;EAGT,IAAMC,IAA2BT,EAAc,QAAQQ;EAQvD,OAPIC,IAA2BJ,IACtBK,EAAOL,IAAyBG,CAAK,IAE1CC,IAA2BP,KACtBQ,EAAON,IAA2BI,CAAK;CAIlD,GAIME,KAAU,MAAiB;EAC/B,IAAMC,IAAOC,EAAgBC,CAAI,GAC3BC,IAAUH,MAASX,EAAc;EAIvC,OAHA,EAAc,QAAQW,GACtBlB,EAAW,IAAIE,GAAMgB,CAAI,GAElBG;CACT,GAEMF,KAAmB,MACnBG,IAAQjB,EAAe,aAAa,SAAS,iBAAiB,UACzDA,EAAe,aAAa,SAAS,iBAAiB,UAE3DiB,IAAQjB,EAAe,aAAa,SAAS,iBAAiB,UACzDA,EAAe,aAAa,SAAS,iBAAiB,UAGxDiB;CAGT,OAAO;EACL;EACA;CACF;AACF"}
@@ -1,26 +1,26 @@
1
1
  import { AxiosProgressEvent } from 'axios';
2
2
  import { UploadProgressCallback } from '../presets/uploadPresets';
3
3
  /**
4
- * How far one upload is, how fast it goes and how long it still takes, from one curve: the bytes of its file sent
5
- * over time, from the request of its first chunk to the answer to its last. It reports once a second, the first at
6
- * once, and only once it has a speed and either bytes came since its last report or the answer to a chunk that is
7
- * whole on its way is awaited; the whole file once it is out, also without a speed; without `report` it reports
8
- * nothing and asks for no second.
4
+ * Progress, speed and remaining time of one upload, from one curve: file
5
+ * bytes sent over time, from the first chunk request to the last answer.
6
+ * Reports once a second, the first immediately. It reports only with a known speed and
7
+ * when bytes moved since the last report or an answer to a fully sent chunk is awaited.
8
+ * Once the file is out it reports the whole file, also without a
9
+ * speed. Without `report` it reports nothing and starts no timer.
9
10
  */
10
11
  export declare function useUploadMeter(report: UploadProgressCallback | undefined): {
11
- /** The reports of a file of the given size begin. */
12
+ /** Starts reporting for a file of the given size. */
12
13
  start(size: number): void;
13
- /** Before each request of a chunk: the curve goes on from what the server has, and the try reports into it. */
14
+ /** Call before each chunk request. The curve continues from what the server has, and the try reports into it. */
14
15
  attempt(chunkSize: number): (event: Pick<AxiosProgressEvent, "loaded" | "total">) => void;
15
- /** The server answered the chunk of the try. */
16
+ /** The server answered the try's chunk. */
16
17
  chunkDone(chunkSize: number): void;
17
18
  /**
18
- * A try failed: the server took none of its bytes, and neither its time nor the pause after it counts. Until the
19
- * next try has a speed nothing is reported, and the row keeps what it was told last.
19
+ * A try failed. The server kept none of its bytes, and neither its time nor the pause after it counts.
20
+ * Nothing is reported until the next try has a speed, so the row keeps its last values.
20
21
  */
21
22
  attemptFailed(): void;
22
- /** Z9: the second that runs reports the whole file, and no further one is asked for. */
23
+ /** The running second reports the whole file, and no further second is scheduled. */
23
24
  lastChunkSent(): void;
24
- /** Z10: no further report. */
25
25
  stop(): void;
26
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"uploadMeter.js","names":["TICK_MS","WINDOW_MS","MIN_SPAN_MS","useUploadMeter","points","fileSize","received","sent","shown","moved","sendingOver","reportedSpeed","timer","current","now","at","mark","bytes","sentAt","next","point","before","after","speed","end","from","span","answered","answerAwaited","tick","bytesPerSecond","report","isNull","size","thisTry","chunkSize","onItsWay","event"],"sources":["../../../../../src/domains/dam/uploadQueue/composables/uploadMeter.ts"],"sourcesContent":["import type { AxiosProgressEvent } from 'axios'\nimport type { UploadProgressCallback } from '@/domains/dam/uploadQueue/presets/uploadPresets'\nimport { isNull } from '@/shared/utils/common'\n\nconst TICK_MS = 1_000\n// Holds the answer to at least one chunk of the size the upload aims at (a quarter of the timeout, 7.5 s at 30 s),\n// and follows a change of speed within it.\nconst WINDOW_MS = 10_000\n// A shorter stretch without an answer of the server shows mostly what the browser took into its buffers: Chromium\n// tells how far the body is at most every 100 ms, axios passes it on at most every 333 ms.\nconst MIN_SPAN_MS = 500\n\ninterface MeterPoint {\n at: number\n /** Bytes of the file sent by then: the chunks the server answered, and the share of the one on its way. */\n sent: number\n /** The server answered a chunk here. */\n answered: boolean\n}\n\n/**\n * How far one upload is, how fast it goes and how long it still takes, from one curve: the bytes of its file sent\n * over time, from the request of its first chunk to the answer to its last. It reports once a second, the first at\n * once, and only once it has a speed and either bytes came since its last report or the answer to a chunk that is\n * whole on its way is awaited; the whole file once it is out, also without a speed; without `report` it reports\n * nothing and asks for no second.\n */\nexport function useUploadMeter(report: UploadProgressCallback | undefined) {\n let points: MeterPoint[] = []\n let fileSize = 0\n // Bytes of the chunks the server answered.\n let received = 0\n // Bytes sent by the last point; after a failed try, what the server has.\n let sent = 0\n // The share last reported: it never goes back.\n let shown = 0\n // Bytes came since the last report. A chunk that stands on its way reports nothing: a speed falling with every\n // second of silence would make the time left hours and the next chunk, sized by the speed, small.\n let moved = false\n let sendingOver = false\n // The speed last reported: the whole file is reported at it when no speed can be read by then, as when the clock\n // went back before the answer to the last chunk.\n let reportedSpeed = 0\n let timer: ReturnType<typeof setTimeout> | undefined\n // The try whose progress counts, and where the curve is once its chunk is whole on its way. A report of a try that\n // has ended comes too late to be on the curve.\n let current: { end: number } | undefined\n\n const now = () => {\n const at = Date.now()\n // The clock went back: nothing measured before can be set against it.\n if (points.length && at < points.at(-1)!.at) points = []\n return at\n }\n const mark = (bytes: number, answered = false) => {\n const at = now()\n if (bytes > sent) moved = true\n sent = bytes\n points.push({ at, sent: bytes, answered })\n // One point stays before the window: its edge is read between two.\n while (points.length > 2 && points[1]!.at <= at - WINDOW_MS) points.shift()\n }\n // Where the curve was as the millisecond `at` began: of the points that share it, the first.\n const sentAt = (at: number) => {\n const next = points.findIndex((point) => point.at >= at)\n if (next === -1) return points.at(-1)!.sent\n if (next === 0) return points[0]!.sent\n const before = points[next - 1]!\n const after = points[next]!\n return before.sent + ((after.sent - before.sent) * (at - before.at)) / (after.at - before.at)\n }\n /** Bytes a second over the window up to now, or up to the last answer once the file is out. */\n const speed = () => {\n const end = sendingOver ? points.at(-1)?.at : now()\n if (points.length < 2 || end === undefined) return null\n const from = Math.max(points[0]!.at, end - WINDOW_MS)\n const span = end - from\n // No point is later than the end: the last one says where the curve is, also among several of one millisecond.\n const bytes = points.at(-1)!.sent - sentAt(from)\n const answered = points.some((point) => point.answered && point.at > from)\n return span > 0 && bytes > 0 && (span >= MIN_SPAN_MS || answered) ? (bytes * 1000) / span : null\n }\n\n // The wait for the answer to a chunk that is whole on its way is the server's time. The speed goes on counting it:\n // the next chunk is sized right after the answer, and not by what the browser took alone.\n const answerAwaited = () => !!current && sent >= current.end\n\n const tick = () => {\n const bytesPerSecond = speed() ?? (sendingOver ? reportedSpeed : null)\n if (report && !isNull(bytesPerSecond) && (moved || answerAwaited() || sendingOver)) {\n moved = false\n shown = sendingOver ? 100 : Math.max(shown, Math.min((sent * 100) / fileSize, 100))\n reportedSpeed = Math.ceil(bytesPerSecond)\n report(shown, reportedSpeed, sendingOver ? 0 : Math.ceil((fileSize - sent) / bytesPerSecond))\n }\n if (!sendingOver) timer = setTimeout(tick, TICK_MS)\n }\n\n return {\n /** The reports of a file of the given size begin. */\n start(size: number) {\n fileSize = size\n if (report) tick()\n },\n /** Before each request of a chunk: the curve goes on from what the server has, and the try reports into it. */\n attempt(chunkSize: number) {\n const thisTry = { end: received + chunkSize }\n current = thisTry\n mark(received)\n return (event: Pick<AxiosProgressEvent, 'loaded' | 'total'>) => {\n if (current !== thisTry) return\n let onItsWay = event.loaded\n // `total` is the whole multipart body; what goes on the curve is its share of the chunk, and all of the chunk\n // once the body is out: of numbers past 2^53 the division makes a little less.\n if (event.total) onItsWay = event.loaded >= event.total ? chunkSize : (event.loaded * chunkSize) / event.total\n mark(received + Math.min(Math.max(onItsWay, 0), chunkSize))\n }\n },\n /** The server answered the chunk of the try. */\n chunkDone(chunkSize: number) {\n current = undefined\n received += chunkSize\n mark(received, true)\n },\n /**\n * A try failed: the server took none of its bytes, and neither its time nor the pause after it counts. Until the\n * next try has a speed nothing is reported, and the row keeps what it was told last.\n */\n attemptFailed() {\n current = undefined\n points = []\n sent = received\n },\n /** Z9: the second that runs reports the whole file, and no further one is asked for. */\n lastChunkSent() {\n sendingOver = true\n },\n /** Z10: no further report. */\n stop() {\n clearTimeout(timer)\n timer = undefined\n sendingOver = true\n },\n }\n}\n"],"mappings":";;AAIA,IAAMA,IAAU,KAGVC,IAAY,KAGZC,IAAc;AAiBpB,SAAgBC,EAAe,GAA4C;CACzE,IAAIC,IAAuB,CAAC,GACxBC,IAAW,GAEXC,IAAW,GAEXC,IAAO,GAEPC,IAAQ,GAGRC,IAAQ,IACRC,IAAc,IAGdC,IAAgB,GAChBC,GAGAC,GAEEC,UAAY;EAChB,IAAMC,IAAK,KAAK,IAAI;EAGpB,OADIX,EAAO,UAAUW,IAAKX,EAAO,GAAG,EAAE,CAAC,CAAE,OAAI,IAAS,CAAC,IAChDW;CACT,GACMC,KAAQ,GAAe,IAAW,OAAU;EAChD,IAAMD,IAAKD,EAAI;EAKf,KAJIG,IAAQV,MAAM,IAAQ,KAC1B,IAAOU,GACPb,EAAO,KAAK;GAAE;GAAI,MAAMa;GAAO;EAAS,CAAC,GAElCb,EAAO,SAAS,KAAKA,EAAO,EAAE,CAAE,MAAMW,IAAKd,IAAW,EAAO,MAAM;CAC5E,GAEMiB,KAAU,MAAe;EAC7B,IAAMC,IAAOf,EAAO,WAAW,MAAUgB,EAAM,MAAML,CAAE;EACvD,IAAII,MAAS,IAAI,OAAOf,EAAO,GAAG,EAAE,CAAC,CAAE;EACvC,IAAIe,MAAS,GAAG,OAAOf,EAAO,EAAE,CAAE;EAClC,IAAMiB,IAASjB,EAAOe,IAAO,IACvBG,IAAQlB,EAAOe;EACrB,OAAOE,EAAO,QAASC,EAAM,OAAOD,EAAO,SAASN,IAAKM,EAAO,OAAQC,EAAM,KAAKD,EAAO;CAC5F,GAEME,UAAc;EAClB,IAAMC,IAAMd,IAAcN,EAAO,GAAG,EAAE,CAAC,EAAE,KAAKU,EAAI;EAClD,IAAIV,EAAO,SAAS,KAAKoB,MAAQ,KAAA,GAAW,OAAO;EACnD,IAAMC,IAAO,KAAK,IAAIrB,EAAO,EAAE,CAAE,IAAIoB,IAAMvB,CAAS,GAC9CyB,IAAOF,IAAMC,GAEbR,IAAQb,EAAO,GAAG,EAAE,CAAC,CAAE,OAAOc,EAAOO,CAAI,GACzCE,IAAWvB,EAAO,MAAM,MAAUgB,EAAM,YAAYA,EAAM,KAAKK,CAAI;EACzE,OAAOC,IAAO,KAAKT,IAAQ,MAAMS,KAAQxB,KAAeyB,KAAaV,IAAQ,MAAQS,IAAO;CAC9F,GAIME,UAAsB,CAAC,CAACf,KAAWN,KAAQM,EAAQ,KAEnDgB,UAAa;EACjB,IAAMC,IAAiBP,EAAM,MAAMb,IAAcC,IAAgB;EAOjE,AANIoB,KAAU,CAACC,EAAOF,CAAc,MAAMrB,KAASmB,EAAc,KAAKlB,OACpE,IAAQ,IACR,IAAQA,IAAc,MAAM,KAAK,IAAIF,GAAO,KAAK,IAAKD,IAAO,MAAOF,GAAU,GAAG,CAAC,GAClF,IAAgB,KAAK,KAAKyB,CAAc,GACxCC,EAAOvB,GAAOG,GAAeD,IAAc,IAAI,KAAK,MAAML,IAAWE,KAAQuB,CAAc,CAAC,IAEzFpB,MAAa,IAAQ,WAAWmB,GAAM7B,CAAO;CACpD;CAEA,OAAO;EAEL,MAAM,GAAc;GAElB,AADA,IAAWiC,GACPF,KAAQF,EAAK;EACnB;EAEA,QAAQ,GAAmB;GACzB,IAAMK,IAAU,EAAE,KAAK5B,IAAW6B,EAAU;GAG5C,OAFA,IAAUD,GACVlB,EAAKV,CAAQ,IACL,MAAwD;IAC9D,IAAIO,MAAYqB,GAAS;IACzB,IAAIE,IAAWC,EAAM;IAIrB,AADIA,EAAM,UAAO,IAAWA,EAAM,UAAUA,EAAM,QAAQF,IAAaE,EAAM,SAASF,IAAaE,EAAM,QACzGrB,EAAKV,IAAW,KAAK,IAAI,KAAK,IAAI8B,GAAU,CAAC,GAAGD,CAAS,CAAC;GAC5D;EACF;EAEA,UAAU,GAAmB;GAG3B,AAFA,IAAU,KAAA,GACV,KAAYA,GACZnB,EAAKV,GAAU,EAAI;EACrB;EAKA,gBAAgB;GAGd,AAFA,IAAU,KAAA,GACV,IAAS,CAAC,GACV,IAAOA;EACT;EAEA,gBAAgB;GACd,IAAc;EAChB;EAEA,OAAO;GAGL,AAFA,aAAaM,CAAK,GAClB,IAAQ,KAAA,GACR,IAAc;EAChB;CACF;AACF"}
1
+ {"version":3,"file":"uploadMeter.js","names":["TICK_MS","WINDOW_MS","MIN_SPAN_MS","useUploadMeter","points","fileSize","received","sent","shown","moved","sendingOver","reportedSpeed","timer","current","now","at","mark","bytes","sentAt","next","point","before","after","speed","end","from","span","answered","answerAwaited","tick","bytesPerSecond","report","isNull","size","thisTry","chunkSize","onItsWay","event"],"sources":["../../../../../src/domains/dam/uploadQueue/composables/uploadMeter.ts"],"sourcesContent":["import type { AxiosProgressEvent } from 'axios'\nimport type { UploadProgressCallback } from '@/domains/dam/uploadQueue/presets/uploadPresets'\nimport { isNull } from '@/shared/utils/common'\n\nconst TICK_MS = 1_000\n// Covers the response to at least one target-size chunk (a quarter of\n// the timeout, 7.5 s at 30 s), and still tracks speed changes within it.\nconst WINDOW_MS = 10_000\n// A shorter span without a server response mostly measures browser buffering.\n// Chromium reports body progress at most every 100 ms, and axios forwards it at most every 333 ms.\nconst MIN_SPAN_MS = 500\n\ninterface MeterPoint {\n at: number\n /** File bytes sent by then: the answered chunks plus the sent share of the chunk in flight. */\n sent: number\n /** The server answered a chunk at this point. */\n answered: boolean\n}\n\n/**\n * Progress, speed and remaining time of one upload, from one curve: file\n * bytes sent over time, from the first chunk request to the last answer.\n * Reports once a second, the first immediately. It reports only with a known speed and\n * when bytes moved since the last report or an answer to a fully sent chunk is awaited.\n * Once the file is out it reports the whole file, also without a\n * speed. Without `report` it reports nothing and starts no timer.\n */\nexport function useUploadMeter(report: UploadProgressCallback | undefined) {\n let points: MeterPoint[] = []\n let fileSize = 0\n let received = 0\n // Bytes sent at the last point. After a failed try, what the server has.\n let sent = 0\n // The share last reported. It never decreases.\n let shown = 0\n // Bytes moved since the last report. A stalled chunk reports nothing.\n // Otherwise the speed would fall each silent second, the time left would\n // grow to hours and the next chunk, sized by speed, would be small.\n let moved = false\n let sendingOver = false\n // The speed last reported. The whole file is reported at it when no speed\n // can be read, e.g. when the clock went back before the last chunk's answer.\n let reportedSpeed = 0\n let timer: ReturnType<typeof setTimeout> | undefined\n // The try whose progress counts, and the curve position once its chunk is\n // fully sent. Progress from an ended try arrives too late for the curve.\n let current: { end: number } | undefined\n\n const now = () => {\n const at = Date.now()\n // The clock went back: earlier measurements cannot be compared with it.\n if (points.length && at < points.at(-1)!.at) points = []\n return at\n }\n const mark = (bytes: number, answered = false) => {\n const at = now()\n if (bytes > sent) moved = true\n sent = bytes\n points.push({ at, sent: bytes, answered })\n // Keep one point before the window, so its edge can be interpolated between two points.\n while (points.length > 2 && points[1]!.at <= at - WINDOW_MS) points.shift()\n }\n // The curve value at the start of millisecond `at`: of points sharing it, the first.\n const sentAt = (at: number) => {\n const next = points.findIndex((point) => point.at >= at)\n if (next === -1) return points.at(-1)!.sent\n if (next === 0) return points[0]!.sent\n const before = points[next - 1]!\n const after = points[next]!\n return before.sent + ((after.sent - before.sent) * (at - before.at)) / (after.at - before.at)\n }\n /** Bytes per second over the window up to now, or up to the last answer once the file is out. */\n const speed = () => {\n const end = sendingOver ? points.at(-1)?.at : now()\n if (points.length < 2 || end === undefined) return null\n const from = Math.max(points[0]!.at, end - WINDOW_MS)\n const span = end - from\n // No point is later than the end, so the last one is the\n // current curve value, also when several share one millisecond.\n const bytes = points.at(-1)!.sent - sentAt(from)\n const answered = points.some((point) => point.answered && point.at > from)\n return span > 0 && bytes > 0 && (span >= MIN_SPAN_MS || answered) ? (bytes * 1000) / span : null\n }\n\n // Waiting for the answer to a fully sent chunk is server time. The speed keeps counting\n // it, so the next chunk is sized after the answer and not by browser buffering alone.\n const answerAwaited = () => !!current && sent >= current.end\n\n const tick = () => {\n const bytesPerSecond = speed() ?? (sendingOver ? reportedSpeed : null)\n if (report && !isNull(bytesPerSecond) && (moved || answerAwaited() || sendingOver)) {\n moved = false\n shown = sendingOver ? 100 : Math.max(shown, Math.min((sent * 100) / fileSize, 100))\n reportedSpeed = Math.ceil(bytesPerSecond)\n report(shown, reportedSpeed, sendingOver ? 0 : Math.ceil((fileSize - sent) / bytesPerSecond))\n }\n if (!sendingOver) timer = setTimeout(tick, TICK_MS)\n }\n\n return {\n /** Starts reporting for a file of the given size. */\n start(size: number) {\n fileSize = size\n if (report) tick()\n },\n /** Call before each chunk request. The curve continues from what the server has, and the try reports into it. */\n attempt(chunkSize: number) {\n const thisTry = { end: received + chunkSize }\n current = thisTry\n mark(received)\n return (event: Pick<AxiosProgressEvent, 'loaded' | 'total'>) => {\n if (current !== thisTry) return\n let onItsWay = event.loaded\n // `total` is the whole multipart body. The curve gets its share of the chunk, and the whole\n // chunk once the body is out, since the division gives slightly less for numbers past 2^53.\n if (event.total) onItsWay = event.loaded >= event.total ? chunkSize : (event.loaded * chunkSize) / event.total\n mark(received + Math.min(Math.max(onItsWay, 0), chunkSize))\n }\n },\n /** The server answered the try's chunk. */\n chunkDone(chunkSize: number) {\n current = undefined\n received += chunkSize\n mark(received, true)\n },\n /**\n * A try failed. The server kept none of its bytes, and neither its time nor the pause after it counts.\n * Nothing is reported until the next try has a speed, so the row keeps its last values.\n */\n attemptFailed() {\n current = undefined\n points = []\n sent = received\n },\n /** The running second reports the whole file, and no further second is scheduled. */\n lastChunkSent() {\n sendingOver = true\n },\n stop() {\n clearTimeout(timer)\n timer = undefined\n sendingOver = true\n },\n }\n}\n"],"mappings":"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"}
@@ -3,7 +3,7 @@ import { UploadQueueItem, UploadQueueKey } from '../../types/UploadQueue';
3
3
  import { UploadQueueListBinding } from '../components/uploadQueueBindings';
4
4
  import { DocId } from '../../../../shared/types/common';
5
5
  export declare const SHOW_REFRESH_AFTER_SECONDS = 20;
6
- /** The warnings of a refresh, the message keys a host's `warn` is handed. */
6
+ /** Message keys passed to the host's `warn` after a refresh. */
7
7
  export declare const REFRESH_WARNING_KEYS: {
8
8
  readonly pendingT: "common.damImage.queueItem.stillUploadingOrProcessing";
9
9
  readonly failedT: "common.damImage.queueItem.refreshFailed";
@@ -11,15 +11,15 @@ export declare const REFRESH_WARNING_KEYS: {
11
11
  readonly originalUnreadT: "common.damImage.queueItem.duplicateOriginalUnread";
12
12
  };
13
13
  export type UploadRefreshWarningKey = (typeof REFRESH_WARNING_KEYS)[keyof typeof REFRESH_WARNING_KEYS];
14
- /** The refresh of the rows of a list, over what its host binds: the host asks, and says what came of it. */
14
+ /** Refresh for the rows of a list. The host binding does the request and shows the warnings. */
15
15
  export declare function createUploadQueueItemRefresh(queue: Pick<UploadQueueListBinding, 'items' | 'refresh' | 'refreshMayHelp' | 'warn'>): {
16
16
  refreshing: Ref<boolean, boolean>;
17
17
  refreshItem: (item: UploadQueueItem) => Promise<void>;
18
18
  };
19
19
  /**
20
- * The refresh of an item of the upload queue: asks what became of its file, and settles the item accordingly.
21
- * The store asks with the client of the configuration of the queue, and settles the rows of its queues: those of the
22
- * queue `queueKey` of the refresh, or of the configuration `configName` where none is given.
20
+ * Refresh of an upload queue item: asks the server what became of its file and updates the item.
21
+ * Uses the client of the queue's configuration. Updates rows of queue
22
+ * `queueKey`, or of configuration `configName` when no key is given.
23
23
  */
24
24
  export declare function useUploadQueueItemRefresh(configName: string): {
25
25
  refreshing: Ref<boolean, boolean>;