@anzusystems/common-admin 2.0.0-rc.1 → 2.0.0-rc.10
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.
- package/README.md +5 -1
- package/dist/AnzuSystemsCommonAdmin.d.ts +51 -32
- package/dist/AnzuSystemsCommonAdmin.js +7 -8
- package/dist/AnzuSystemsCommonAdmin.js.map +1 -1
- package/dist/_virtual/_plugin-vue_export-helper.js +1 -2
- package/dist/_virtual/_rolldown/runtime.js +1 -2
- package/dist/assets/dam-meta-icons/2k.js +1 -2
- package/dist/assets/dam-meta-icons/4k.js +1 -2
- package/dist/assets/dam-meta-icons/8k.js +1 -2
- package/dist/assets/dam-meta-icons/fhd.js +1 -2
- package/dist/assets/dam-meta-icons/low.js +1 -2
- package/dist/assets/dam-meta-icons/qhd.js +1 -2
- package/dist/assets/dam-meta-icons/rss.js +1 -2
- package/dist/assets/dam-meta-icons/slot.js +1 -2
- package/dist/assets/dam-meta-icons/tts.js +1 -2
- package/dist/assets/image/placeholder16x9.js +1 -2
- package/dist/common-admin.css +1 -1
- package/dist/common-admin.js +299 -297
- package/dist/domains/anzuUser/api/anzuUserApi.d.ts +9 -12
- package/dist/domains/anzuUser/api/anzuUserApi.js +9 -10
- package/dist/domains/anzuUser/api/anzuUserApi.js.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserDatatable.js +1 -2
- package/dist/domains/anzuUser/components/AAnzuUserDatatable.js.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserDatatable.vue.d.ts +38 -44
- package/dist/domains/anzuUser/components/AAnzuUserDatatable.vue_vue_type_script_setup_true_lang.js +46 -47
- package/dist/domains/anzuUser/components/AAnzuUserDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserFilter.js +1 -2
- package/dist/domains/anzuUser/components/AAnzuUserFilter.js.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserFilter.vue.d.ts +12 -13
- package/dist/domains/anzuUser/components/AAnzuUserFilter.vue_vue_type_script_setup_true_lang.js +16 -17
- package/dist/domains/anzuUser/components/AAnzuUserFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserForm.js +1 -2
- package/dist/domains/anzuUser/components/AAnzuUserForm.js.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserForm.vue.d.ts +18 -20
- package/dist/domains/anzuUser/components/AAnzuUserForm.vue_vue_type_script_setup_true_lang.js +45 -46
- package/dist/domains/anzuUser/components/AAnzuUserForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.js +1 -2
- package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.js.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserBulkActionDialog.js +1 -2
- package/dist/domains/anzuUser/components/AUserBulkActionDialog.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserBulkActionDialog.vue_vue_type_script_setup_true_lang.js +88 -89
- package/dist/domains/anzuUser/components/AUserBulkActionDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.js +1 -2
- package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.vue.d.ts +2 -3
- package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.vue_vue_type_script_setup_true_lang.js +13 -14
- package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserCreateInSystemButton.js +1 -2
- package/dist/domains/anzuUser/components/AUserCreateInSystemButton.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserCreateInSystemButton.vue.d.ts +9 -15
- package/dist/domains/anzuUser/components/AUserCreateInSystemButton.vue_vue_type_script_setup_true_lang.js +19 -20
- package/dist/domains/anzuUser/components/AUserCreateInSystemButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserEnabledSwitch.js +1 -2
- package/dist/domains/anzuUser/components/AUserEnabledSwitch.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserEnabledSwitch.vue.d.ts +8 -7
- package/dist/domains/anzuUser/components/AUserEnabledSwitch.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/anzuUser/components/AUserEnabledSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserManageButton.js +1 -2
- package/dist/domains/anzuUser/components/AUserManageButton.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserManageButton.vue.d.ts +0 -1
- package/dist/domains/anzuUser/components/AUserManageButton.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/anzuUser/components/AUserManageButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserMetadataForm.js +1 -2
- package/dist/domains/anzuUser/components/AUserMetadataForm.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserMetadataForm.vue.d.ts +8 -9
- package/dist/domains/anzuUser/components/AUserMetadataForm.vue_vue_type_script_setup_true_lang.js +21 -22
- package/dist/domains/anzuUser/components/AUserMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.js +1 -2
- package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.vue_vue_type_script_setup_true_lang.js +59 -60
- package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserOtherSystemsTable.js +1 -2
- package/dist/domains/anzuUser/components/AUserOtherSystemsTable.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserOtherSystemsTable.vue.d.ts +1 -2
- package/dist/domains/anzuUser/components/AUserOtherSystemsTable.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/anzuUser/components/AUserOtherSystemsTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserSystemOverview.js +1 -2
- package/dist/domains/anzuUser/components/AUserSystemOverview.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserSystemOverview.vue_vue_type_script_setup_true_lang.js +231 -232
- package/dist/domains/anzuUser/components/AUserSystemOverview.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserSystemPanel.js +1 -2
- package/dist/domains/anzuUser/components/AUserSystemPanel.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserSystemPanel.vue.d.ts +2 -2
- package/dist/domains/anzuUser/components/AUserSystemPanel.vue_vue_type_script_setup_true_lang.js +16 -17
- package/dist/domains/anzuUser/components/AUserSystemPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserSystemStatusChip.js +1 -2
- package/dist/domains/anzuUser/components/AUserSystemStatusChip.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserSystemStatusChip.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/anzuUser/components/AUserSystemStatusChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserTabsShell.js +1 -2
- package/dist/domains/anzuUser/components/AUserTabsShell.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserTabsShell.vue.d.ts +17 -22
- package/dist/domains/anzuUser/components/AUserTabsShell.vue_vue_type_script_setup_true_lang.js +67 -68
- package/dist/domains/anzuUser/components/AUserTabsShell.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/composables/anzuUserActions.d.ts +11 -9
- package/dist/domains/anzuUser/composables/anzuUserActions.js +26 -23
- package/dist/domains/anzuUser/composables/anzuUserActions.js.map +1 -1
- package/dist/domains/anzuUser/composables/anzuUserValidations.d.ts +4 -6
- package/dist/domains/anzuUser/composables/anzuUserValidations.js +1 -2
- package/dist/domains/anzuUser/composables/anzuUserValidations.js.map +1 -1
- package/dist/domains/anzuUser/composables/cachedAnzuUsers.d.ts +3 -3
- package/dist/domains/anzuUser/composables/cachedAnzuUsers.js +1 -2
- package/dist/domains/anzuUser/composables/cachedAnzuUsers.js.map +1 -1
- package/dist/domains/anzuUser/composables/userCrossSystemSearch.d.ts +2 -4
- package/dist/domains/anzuUser/composables/userCrossSystemSearch.js +21 -22
- package/dist/domains/anzuUser/composables/userCrossSystemSearch.js.map +1 -1
- package/dist/domains/anzuUser/composables/userCrossSystemWrites.d.ts +5 -11
- package/dist/domains/anzuUser/composables/userCrossSystemWrites.js +46 -47
- package/dist/domains/anzuUser/composables/userCrossSystemWrites.js.map +1 -1
- package/dist/domains/anzuUser/composables/userSystemDescriptor.d.ts +33 -57
- package/dist/domains/anzuUser/composables/userSystemDescriptor.js +1 -2
- package/dist/domains/anzuUser/composables/userSystemDescriptor.js.map +1 -1
- package/dist/domains/anzuUser/composables/userSystemProbe.d.ts +7 -27
- package/dist/domains/anzuUser/composables/userSystemProbe.js +22 -23
- package/dist/domains/anzuUser/composables/userSystemProbe.js.map +1 -1
- package/dist/domains/anzuUser/factory/AnzuUserFactory.js +6 -7
- package/dist/domains/anzuUser/filter/anzuUserFilter.d.ts +6 -16
- package/dist/domains/anzuUser/filter/anzuUserFilter.js +1 -2
- package/dist/domains/anzuUser/filter/anzuUserFilter.js.map +1 -1
- package/dist/domains/anzuUser/store/anzuUserStore.d.ts +1 -5
- package/dist/domains/anzuUser/store/anzuUserStore.js +1 -2
- package/dist/domains/anzuUser/store/anzuUserStore.js.map +1 -1
- package/dist/domains/anzuUser/store/userCrossSystemStore.d.ts +3 -14
- package/dist/domains/anzuUser/store/userCrossSystemStore.js +1 -2
- package/dist/domains/anzuUser/store/userCrossSystemStore.js.map +1 -1
- package/dist/domains/anzuUser/utils/userMetadataDiff.d.ts +7 -19
- package/dist/domains/anzuUser/utils/userMetadataDiff.js +1 -2
- package/dist/domains/anzuUser/utils/userMetadataDiff.js.map +1 -1
- package/dist/domains/anzuUser/utils/userSystemState.d.ts +12 -30
- package/dist/domains/anzuUser/utils/userSystemState.js +1 -2
- package/dist/domains/anzuUser/utils/userSystemState.js.map +1 -1
- package/dist/domains/anzuUser/utils/userTabs.d.ts +1 -3
- package/dist/domains/anzuUser/utils/userTabs.js +1 -2
- package/dist/domains/anzuUser/utils/userTabs.js.map +1 -1
- package/dist/domains/api/composables/defineApiClient.d.ts +4 -8
- package/dist/domains/api/composables/defineApiClient.js +1 -2
- package/dist/domains/api/composables/defineApiClient.js.map +1 -1
- package/dist/domains/api/composables/pagination.js +10 -11
- package/dist/domains/api/composables/request.d.ts +18 -48
- package/dist/domains/api/composables/request.js +1 -2
- package/dist/domains/api/composables/request.js.map +1 -1
- package/dist/domains/api/composables/useApiFetchByIds.d.ts +7 -21
- package/dist/domains/api/composables/useApiFetchByIds.js +29 -30
- package/dist/domains/api/composables/useApiFetchByIds.js.map +1 -1
- package/dist/domains/api/composables/useApiFetchItems.d.ts +18 -57
- package/dist/domains/api/composables/useApiFetchItems.js +15 -16
- package/dist/domains/api/composables/useApiFetchItems.js.map +1 -1
- package/dist/domains/api/composables/useApiFetchList.d.ts +7 -23
- package/dist/domains/api/composables/useApiFetchList.js +35 -36
- package/dist/domains/api/composables/useApiFetchList.js.map +1 -1
- package/dist/domains/api/composables/useApiFetchListBatch.d.ts +5 -22
- package/dist/domains/api/composables/useApiFetchListBatch.js +36 -37
- package/dist/domains/api/composables/useApiFetchListBatch.js.map +1 -1
- package/dist/domains/api/composables/useApiQueryBuilder.js +12 -13
- package/dist/domains/api/composables/useApiQueryBuilder.js.map +1 -1
- package/dist/domains/api/composables/useApiRequest.d.ts +16 -39
- package/dist/domains/api/composables/useApiRequest.js +21 -22
- package/dist/domains/api/composables/useApiRequest.js.map +1 -1
- package/dist/domains/api/types/SortOrder.js +1 -2
- package/dist/domains/api/utils/apiErrors.d.ts +28 -55
- package/dist/domains/api/utils/apiErrors.js +20 -21
- package/dist/domains/api/utils/apiErrors.js.map +1 -1
- package/dist/domains/api/utils/apiHelper.js +4 -5
- package/dist/domains/api/utils/listBody.d.ts +22 -43
- package/dist/domains/api/utils/listBody.js +9 -10
- package/dist/domains/api/utils/listBody.js.map +1 -1
- package/dist/domains/api/utils/response.js +1 -2
- package/dist/domains/auth/components/Acl.js +1 -2
- package/dist/domains/auth/components/Acl.js.map +1 -1
- package/dist/domains/auth/components/Acl.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/auth/components/Acl.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/auth/composables/aclAllowed.d.ts +2 -3
- package/dist/domains/auth/composables/aclAllowed.js +6 -7
- package/dist/domains/auth/composables/aclAllowed.js.map +1 -1
- package/dist/domains/auth/composables/defineAuth.js +40 -41
- package/dist/domains/auth/composables/defineAuth.js.map +1 -1
- package/dist/domains/auth/composables/refreshSession.d.ts +10 -13
- package/dist/domains/auth/composables/refreshSession.js +14 -15
- package/dist/domains/auth/composables/refreshSession.js.map +1 -1
- package/dist/domains/auth/store/authStore.js +1 -2
- package/dist/domains/auth/valueObject/Grant.js +1 -2
- package/dist/domains/cached/components/ACachedChip.js +1 -2
- package/dist/domains/cached/components/ACachedChip.js.map +1 -1
- package/dist/domains/cached/components/ACachedChip.vue.d.ts +13 -11
- package/dist/domains/cached/components/ACachedChip.vue_vue_type_script_setup_true_lang.js +7 -8
- package/dist/domains/cached/components/ACachedChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/cached/components/ACachedUserChip.js +4 -5
- package/dist/domains/cached/components/ACachedUserChip.js.map +1 -1
- package/dist/domains/cached/components/ACachedUserChip.vue.d.ts +3 -3
- package/dist/domains/cached/components/ACachedUserChip.vue_vue_type_script_setup_true_lang.js +8 -9
- package/dist/domains/cached/components/ACachedUserChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/cached/composables/createCachedChip.js +1 -2
- package/dist/domains/cached/composables/createUserAndTimeTrackingFields.d.ts +9 -9
- package/dist/domains/cached/composables/createUserAndTimeTrackingFields.js +1 -2
- package/dist/domains/cached/composables/createUserAndTimeTrackingFields.js.map +1 -1
- package/dist/domains/cached/composables/defineCached.d.ts +13 -11
- package/dist/domains/cached/composables/defineCached.js +19 -20
- package/dist/domains/cached/composables/defineCached.js.map +1 -1
- package/dist/domains/cached/composables/useCachedItem.d.ts +7 -8
- package/dist/domains/cached/composables/useCachedItem.js +1 -2
- package/dist/domains/cached/composables/useCachedItem.js.map +1 -1
- package/dist/domains/collab/components/ACollabCountdown.js +1 -2
- package/dist/domains/collab/components/ACollabCountdown.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/collab/components/ACollabLockedByUser.js +1 -2
- package/dist/domains/collab/components/ACollabLockedByUser.js.map +1 -1
- package/dist/domains/collab/components/ACollabLockedByUser.vue_vue_type_script_setup_true_lang.js +8 -9
- package/dist/domains/collab/components/ACollabLockedByUser.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/collab/components/ACollabManagement.js +1 -2
- package/dist/domains/collab/components/ACollabManagement.vue_vue_type_script_setup_true_lang.js +168 -169
- package/dist/domains/collab/components/ACollabManagement.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/collab/composables/collabAnyDataChange.js +38 -39
- package/dist/domains/collab/composables/collabAnyDataChange.js.map +1 -1
- package/dist/domains/collab/composables/collabCurrentUserId.js +1 -2
- package/dist/domains/collab/composables/collabEventBus.js +1 -2
- package/dist/domains/collab/composables/collabField.d.ts +5 -3
- package/dist/domains/collab/composables/collabField.js +37 -38
- package/dist/domains/collab/composables/collabField.js.map +1 -1
- package/dist/domains/collab/composables/collabHelpers.js +1 -2
- package/dist/domains/collab/composables/collabInit.js +65 -62
- package/dist/domains/collab/composables/collabInit.js.map +1 -1
- package/dist/domains/collab/composables/collabRecovery.d.ts +49 -0
- package/dist/domains/collab/composables/collabRecovery.js +99 -0
- package/dist/domains/collab/composables/collabRecovery.js.map +1 -0
- package/dist/domains/collab/composables/collabRoom.js +125 -126
- package/dist/domains/collab/composables/collabRoom.js.map +1 -1
- package/dist/domains/collab/composables/collabState.d.ts +11 -4
- package/dist/domains/collab/composables/collabState.js +38 -30
- package/dist/domains/collab/composables/collabState.js.map +1 -1
- package/dist/domains/collab/composables/commonAdminCollabOptions.d.ts +4 -2
- package/dist/domains/collab/composables/commonAdminCollabOptions.js +5 -6
- package/dist/domains/collab/types/Collab.d.ts +31 -5
- package/dist/domains/collab/types/Collab.js +24 -13
- package/dist/domains/collab/types/Collab.js.map +1 -1
- package/dist/domains/customDataForm/components/ACustomDataForm.js +1 -2
- package/dist/domains/customDataForm/components/ACustomDataForm.js.map +1 -1
- package/dist/domains/customDataForm/components/ACustomDataForm.vue.d.ts +7 -5
- package/dist/domains/customDataForm/components/ACustomDataForm.vue_vue_type_script_setup_true_lang.js +26 -27
- package/dist/domains/customDataForm/components/ACustomDataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/customDataForm/components/ACustomDataFormElement.js +1 -2
- package/dist/domains/customDataForm/components/ACustomDataFormElement.js.map +1 -1
- package/dist/domains/customDataForm/components/ACustomDataFormElement.vue_vue_type_script_setup_true_lang.js +25 -26
- package/dist/domains/customDataForm/components/ACustomDataFormElement.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.js +1 -2
- package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.js.map +1 -1
- package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.vue.d.ts +5 -3
- package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/customDataForm/composables/useCustomDataForm.js +1 -2
- package/dist/domains/customDataForm/composables/useCustomDataForm.js.map +1 -1
- package/dist/domains/customDataForm/types/CustomDataForm.d.ts +4 -1
- package/dist/domains/customDataForm/types/CustomDataFormElementTypes.js +1 -2
- package/dist/domains/dam/api/damAssetApi.d.ts +7 -7
- package/dist/domains/dam/api/damAssetApi.js +36 -37
- package/dist/domains/dam/api/damAssetApi.js.map +1 -1
- package/dist/domains/dam/api/damAssetLicenceApi.d.ts +1 -1
- package/dist/domains/dam/api/damAssetLicenceApi.js +1 -2
- package/dist/domains/dam/api/damAssetLicenceApi.js.map +1 -1
- package/dist/domains/dam/api/damConstants.js +1 -2
- package/dist/domains/dam/api/damConstants.js.map +1 -1
- package/dist/domains/dam/api/damEndPoints.js +1 -2
- package/dist/domains/dam/api/damEndPoints.js.map +1 -1
- package/dist/domains/dam/api/damImageApi.js +60 -61
- package/dist/domains/dam/api/damImageApi.js.map +1 -1
- package/dist/domains/dam/api/damImageRoiApi.js +15 -16
- package/dist/domains/dam/api/damfetchAssetListByFileIdsMultipleLicences.js +10 -11
- package/dist/domains/dam/api/uploadApi.js +1 -2
- package/dist/domains/dam/api/uploadApi.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AColorBox.js +1 -2
- package/dist/domains/dam/assetDetail/components/AColorBox.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue.d.ts +7 -5
- package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue_vue_type_script_setup_true_lang.js +18 -19
- package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailDialog.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetDetailDialog.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailDialog.vue_vue_type_script_setup_true_lang.js +20 -21
- package/dist/domains/dam/assetDetail/components/AssetDetailDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue.d.ts +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue_vue_type_script_setup_true_lang.js +26 -27
- package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailDialogLoader.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetDetailDialogLoader.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetDetailDialogSidebar.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetDetailDialogSidebar.vue_vue_type_script_setup_true_lang.js +10 -11
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsTeleportTarget.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsTeleportTarget.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsWrapper.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsWrapper.vue.d.ts +5 -3
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsWrapper.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.vue_vue_type_script_setup_true_lang.js +14 -15
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.vue_vue_type_script_setup_true_lang.js +26 -27
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.vue_vue_type_script_setup_true_lang.js +25 -26
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetFileFailReasonChip.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetFileFailReasonChip.vue_vue_type_script_setup_true_lang.js +5 -6
- package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue.d.ts +6 -2
- package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue_vue_type_script_setup_true_lang.js +96 -70
- package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetFileRotate.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetFileRotate.vue_vue_type_script_setup_true_lang.js +5 -6
- package/dist/domains/dam/assetDetail/components/AssetImage.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetImage.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetImage.vue.d.ts +8 -1
- package/dist/domains/dam/assetDetail/components/AssetImage.vue_vue_type_script_setup_true_lang.js +30 -17
- package/dist/domains/dam/assetDetail/components/AssetImage.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue.d.ts +9 -2
- package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue_vue_type_script_setup_true_lang.js +56 -29
- package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetInfobox.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetInfobox.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetInfobox.vue_vue_type_script_setup_true_lang.js +8 -9
- package/dist/domains/dam/assetDetail/components/AssetInfobox.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetMetadata.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetMetadata.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetMetadata.vue_vue_type_script_setup_true_lang.js +88 -71
- package/dist/domains/dam/assetDetail/components/AssetMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetMetadataImageAttributes.js +1 -2
- package/dist/domains/dam/assetDetail/components/AssetMetadataImageAttributes.vue_vue_type_script_setup_true_lang.js +5 -6
- package/dist/domains/dam/assetDetail/components/AssetMetadataImageAttributes.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/composables/assetDetailExtSystem.d.ts +5 -6
- package/dist/domains/dam/assetDetail/composables/assetDetailExtSystem.js +6 -7
- package/dist/domains/dam/assetDetail/composables/assetDetailExtSystem.js.map +1 -1
- package/dist/domains/dam/assetDetail/composables/assetDetailSidebarActionbar.js +1 -2
- package/dist/domains/dam/assetDetail/composables/assetDetailView.d.ts +10 -10
- package/dist/domains/dam/assetDetail/composables/assetDetailView.js +1 -2
- package/dist/domains/dam/assetDetail/composables/assetDetailView.js.map +1 -1
- package/dist/domains/dam/assetDetail/composables/assetFileFailReason.js +1 -2
- package/dist/domains/dam/assetDetail/composables/autoDeleteTimeLeft.d.ts +9 -0
- package/dist/domains/dam/assetDetail/composables/autoDeleteTimeLeft.js +18 -0
- package/dist/domains/dam/assetDetail/composables/autoDeleteTimeLeft.js.map +1 -0
- package/dist/domains/dam/assetDetail/store/assetDetailStore.d.ts +4 -2
- package/dist/domains/dam/assetDetail/store/assetDetailStore.js +1 -2
- package/dist/domains/dam/assetDetail/store/assetDetailStore.js.map +1 -1
- package/dist/domains/dam/assetDetail/utils/assetImageIconsConfig.js +1 -2
- package/dist/domains/dam/assetDetail/utils/assetMetadataMayStillChange.d.ts +4 -3
- package/dist/domains/dam/assetDetail/utils/assetMetadataMayStillChange.js +1 -2
- package/dist/domains/dam/assetDetail/utils/assetMetadataMayStillChange.js.map +1 -1
- package/dist/domains/dam/assetSelect/api/damPodcastApi.js +9 -10
- package/dist/domains/dam/assetSelect/api/damPodcastApi.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AAssetListInner.js +1 -2
- package/dist/domains/dam/assetSelect/components/AAssetListInner.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AAssetListInner.vue.d.ts +791 -787
- package/dist/domains/dam/assetSelect/components/AAssetListInner.vue_vue_type_script_setup_true_lang.js +148 -149
- package/dist/domains/dam/assetSelect/components/AAssetListInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AAssetSelect.js +1 -2
- package/dist/domains/dam/assetSelect/components/AAssetSelect.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AAssetSelect.vue.d.ts +396 -393
- package/dist/domains/dam/assetSelect/components/AAssetSelect.vue_vue_type_script_setup_true_lang.js +88 -89
- package/dist/domains/dam/assetSelect/components/AAssetSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.js +1 -2
- package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.vue.d.ts +14 -12
- package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.vue_vue_type_script_setup_true_lang.js +110 -111
- package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AssetDistributionServiceNameFilter.js +1 -2
- package/dist/domains/dam/assetSelect/components/AssetDistributionServiceNameFilter.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AssetDistributionServiceNameFilter.vue_vue_type_script_setup_true_lang.js +8 -9
- package/dist/domains/dam/assetSelect/components/AssetDistributionServiceNameFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AssetImagePreview.js +1 -2
- package/dist/domains/dam/assetSelect/components/AssetImagePreview.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AssetImagePreview.vue.d.ts +3 -0
- package/dist/domains/dam/assetSelect/components/AssetImagePreview.vue_vue_type_script_setup_true_lang.js +29 -19
- package/dist/domains/dam/assetSelect/components/AssetImagePreview.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AssetSelectFilter.js +1 -2
- package/dist/domains/dam/assetSelect/components/AssetSelectFilter.vue_vue_type_script_setup_true_lang.js +16 -17
- package/dist/domains/dam/assetSelect/components/AssetSelectFilterForm.js +1 -2
- package/dist/domains/dam/assetSelect/components/AssetSelectFilterForm.vue_vue_type_script_setup_true_lang.js +30 -31
- package/dist/domains/dam/assetSelect/components/AssetSelectListBar.js +1 -2
- package/dist/domains/dam/assetSelect/components/AssetSelectListBar.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AssetSelectListBar.vue.d.ts +9 -7
- package/dist/domains/dam/assetSelect/components/AssetSelectListBar.vue_vue_type_script_setup_true_lang.js +40 -41
- package/dist/domains/dam/assetSelect/components/AssetSelectListBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AssetSelectListTable.js +1 -2
- package/dist/domains/dam/assetSelect/components/AssetSelectListTable.vue_vue_type_script_setup_true_lang.js +10 -11
- package/dist/domains/dam/assetSelect/components/AssetSelectListTiles.js +1 -2
- package/dist/domains/dam/assetSelect/components/AssetSelectListTiles.vue_vue_type_script_setup_true_lang.js +11 -12
- package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.js +1 -2
- package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.vue_vue_type_script_setup_true_lang.js +19 -15
- package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AssetSelectTilesItem.js +1 -2
- package/dist/domains/dam/assetSelect/components/AssetSelectTilesItem.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AssetSelectTilesItem.vue_vue_type_script_setup_true_lang.js +6 -5
- package/dist/domains/dam/assetSelect/components/AssetSelectTilesItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/FilterPodcastRemoteAutocomplete.js +1 -2
- package/dist/domains/dam/assetSelect/components/FilterPodcastRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js +6 -7
- package/dist/domains/dam/assetSelect/composables/assetSelectFilterSidebar.js +1 -2
- package/dist/domains/dam/assetSelect/composables/assetSelectGridView.js +1 -2
- package/dist/domains/dam/assetSelect/composables/assetSelectItemActions.d.ts +2 -0
- package/dist/domains/dam/assetSelect/composables/assetSelectItemActions.js +38 -33
- package/dist/domains/dam/assetSelect/composables/assetSelectItemActions.js.map +1 -1
- package/dist/domains/dam/assetSelect/composables/assetSelectListActions.d.ts +4 -2
- package/dist/domains/dam/assetSelect/composables/assetSelectListActions.js +41 -42
- package/dist/domains/dam/assetSelect/composables/assetSelectListActions.js.map +1 -1
- package/dist/domains/dam/assetSelect/composables/podcastFilterAndActions.js +1 -2
- package/dist/domains/dam/assetSelect/filter/AssetFilter.js +5 -6
- package/dist/domains/dam/assetSelect/store/assetSelectStore.d.ts +8 -4
- package/dist/domains/dam/assetSelect/store/assetSelectStore.js +30 -31
- package/dist/domains/dam/assetSelect/store/assetSelectStore.js.map +1 -1
- package/dist/domains/dam/author/api/authorApi.js +18 -19
- package/dist/domains/dam/author/api/authorApi.js.map +1 -1
- package/dist/domains/dam/author/components/AuthorCreateButton.js +1 -2
- package/dist/domains/dam/author/components/AuthorCreateButton.js.map +1 -1
- package/dist/domains/dam/author/components/AuthorCreateButton.vue.d.ts +1 -1
- package/dist/domains/dam/author/components/AuthorCreateButton.vue_vue_type_script_setup_true_lang.js +86 -87
- package/dist/domains/dam/author/components/AuthorCreateButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.js +1 -2
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.js.map +1 -1
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.vue.d.ts +9 -6
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.vue_vue_type_script_setup_true_lang.js +8 -9
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.js +1 -2
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.js.map +1 -1
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue_vue_type_script_setup_true_lang.js +5 -6
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.js +4 -5
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.js.map +1 -1
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue.d.ts +2 -2
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js +89 -90
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.js +1 -2
- package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.js.map +1 -1
- package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.vue.d.ts +1 -1
- package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js +9 -10
- package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/author/composables/authorActions.js +6 -7
- package/dist/domains/dam/author/composables/authorValidation.js +1 -2
- package/dist/domains/dam/author/composables/cachedAuthors.d.ts +5 -4
- package/dist/domains/dam/author/composables/cachedAuthors.js +13 -14
- package/dist/domains/dam/author/composables/cachedAuthors.js.map +1 -1
- package/dist/domains/dam/author/composables/cachedUsers.d.ts +5 -4
- package/dist/domains/dam/author/composables/cachedUsers.js +13 -14
- package/dist/domains/dam/author/composables/cachedUsers.js.map +1 -1
- package/dist/domains/dam/author/composables/damAuthorConfig.d.ts +2 -2
- package/dist/domains/dam/author/composables/damAuthorConfig.js +5 -6
- package/dist/domains/dam/author/composables/damAuthorConfig.js.map +1 -1
- package/dist/domains/dam/author/factory/AuthorFactory.js +8 -9
- package/dist/domains/dam/author/filter/AuthorFilter.js +5 -6
- package/dist/domains/dam/author/types/DamAuthorType.js +1 -2
- package/dist/domains/dam/components/DamAdminAssetLink.js +1 -2
- package/dist/domains/dam/components/DamAdminAssetLink.js.map +1 -1
- package/dist/domains/dam/components/DamAdminAssetLink.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/dam/components/DamAdminAssetLink.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/composables/commonAdminCoreDamOptions.d.ts +13 -8
- package/dist/domains/dam/composables/commonAdminCoreDamOptions.js +59 -57
- package/dist/domains/dam/composables/commonAdminCoreDamOptions.js.map +1 -1
- package/dist/domains/dam/composables/damConfigName.d.ts +8 -9
- package/dist/domains/dam/composables/damConfigName.js +5 -6
- package/dist/domains/dam/composables/damConfigName.js.map +1 -1
- package/dist/domains/dam/composables/damNotifications.d.ts +9 -9
- package/dist/domains/dam/composables/damNotifications.js +9 -10
- package/dist/domains/dam/composables/damNotifications.js.map +1 -1
- package/dist/domains/dam/composables/damNotificationsConnection.d.ts +4 -4
- package/dist/domains/dam/composables/damNotificationsConnection.js +1 -2
- package/dist/domains/dam/composables/damNotificationsConnection.js.map +1 -1
- package/dist/domains/dam/composables/damNotificationsEventBus.d.ts +2 -2
- package/dist/domains/dam/composables/damNotificationsEventBus.js +1 -2
- package/dist/domains/dam/composables/damNotificationsEventBus.js.map +1 -1
- package/dist/domains/dam/composables/extSystemIdForCached.d.ts +5 -4
- package/dist/domains/dam/composables/extSystemIdForCached.js +1 -2
- package/dist/domains/dam/composables/extSystemIdForCached.js.map +1 -1
- package/dist/domains/dam/composables/uploadValidations.js +4 -5
- package/dist/domains/dam/config/api/damAssetCustomFormApi.js +7 -8
- package/dist/domains/dam/config/api/damAssetCustomFormApi.js.map +1 -1
- package/dist/domains/dam/config/api/damConfigApi.js +9 -10
- package/dist/domains/dam/config/api/damConfigApi.js.map +1 -1
- package/dist/domains/dam/config/composables/acceptTypeAndSizeHelper.js +1 -2
- package/dist/domains/dam/config/composables/damConfigState.d.ts +5 -5
- package/dist/domains/dam/config/composables/damConfigState.js +58 -59
- package/dist/domains/dam/config/composables/damConfigState.js.map +1 -1
- package/dist/domains/dam/config/store/damConfigStore.d.ts +5 -4
- package/dist/domains/dam/config/store/damConfigStore.js +1 -2
- package/dist/domains/dam/config/store/damConfigStore.js.map +1 -1
- package/dist/domains/dam/config/utils/damFilterUserAllowedUploadConfigs.d.ts +3 -1
- package/dist/domains/dam/config/utils/damFilterUserAllowedUploadConfigs.js +1 -2
- package/dist/domains/dam/config/utils/damFilterUserAllowedUploadConfigs.js.map +1 -1
- package/dist/domains/dam/cropper/components/ACropper.js +1 -2
- package/dist/domains/dam/cropper/components/ACropper.js.map +1 -1
- package/dist/domains/dam/cropper/components/ACropper.vue.d.ts +8 -16
- package/dist/domains/dam/cropper/components/ACropper.vue_vue_type_script_setup_true_lang.js +3 -4
- package/dist/domains/dam/cropper/components/ACropper.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.js +1 -2
- package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.js.map +1 -1
- package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.vue_vue_type_script_setup_true_lang.js +23 -24
- package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/cropper/components/DamAssetImageRoiSelectLazy.js +1 -2
- package/dist/domains/dam/cropper/components/DamAssetImageRoiSelectLazy.vue_vue_type_script_setup_true_lang.js +5 -6
- package/dist/domains/dam/cropper/store/imageRoiStore.d.ts +11 -14
- package/dist/domains/dam/cropper/store/imageRoiStore.js +1 -2
- package/dist/domains/dam/cropper/store/imageRoiStore.js.map +1 -1
- package/dist/domains/dam/cropper/utils/cropperGeometry.d.ts +24 -38
- package/dist/domains/dam/cropper/utils/cropperGeometry.js +2 -3
- package/dist/domains/dam/cropper/utils/cropperGeometry.js.map +1 -1
- package/dist/domains/dam/cropper/utils/cropperJsService.d.ts +3 -7
- package/dist/domains/dam/cropper/utils/cropperJsService.js +11 -5
- package/dist/domains/dam/cropper/utils/cropperJsService.js.map +1 -1
- package/dist/domains/dam/cropper/utils/cropperTypes.d.ts +3 -6
- package/dist/domains/dam/cropper/utils/damAssetImageRoiSelectLoader.d.ts +5 -5
- package/dist/domains/dam/cropper/utils/damAssetImageRoiSelectLoader.js +1 -2
- package/dist/domains/dam/cropper/utils/damAssetImageRoiSelectLoader.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImageMediaWidget.js +1 -2
- package/dist/domains/dam/imageWidget/components/AImageMediaWidget.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImageMediaWidget.vue_vue_type_script_setup_true_lang.js +46 -47
- package/dist/domains/dam/imageWidget/components/AImageMediaWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImagePublicInput.js +1 -2
- package/dist/domains/dam/imageWidget/components/AImagePublicInput.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImagePublicInput.vue_vue_type_script_setup_true_lang.js +74 -75
- package/dist/domains/dam/imageWidget/components/AImagePublicInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImageWidget.js +1 -2
- package/dist/domains/dam/imageWidget/components/AImageWidget.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImageWidget.vue_vue_type_script_setup_true_lang.js +39 -40
- package/dist/domains/dam/imageWidget/components/AImageWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.js +1 -2
- package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.vue_vue_type_script_setup_true_lang.js +25 -26
- package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImageWidgetMultipleSimple.js +1 -2
- package/dist/domains/dam/imageWidget/components/AImageWidgetMultipleSimple.vue_vue_type_script_setup_true_lang.js +13 -14
- package/dist/domains/dam/imageWidget/components/AImageWidgetSimple.js +4 -5
- package/dist/domains/dam/imageWidget/components/AImageWidgetSimple.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImageWidgetSimple.vue.d.ts +43 -41
- package/dist/domains/dam/imageWidget/components/AImageWidgetSimple.vue_vue_type_script_setup_true_lang.js +17 -18
- package/dist/domains/dam/imageWidget/components/AMediaWidgetSimple.js +4 -5
- package/dist/domains/dam/imageWidget/components/AMediaWidgetSimple.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/AMediaWidgetSimple.vue.d.ts +31 -29
- package/dist/domains/dam/imageWidget/components/AMediaWidgetSimple.vue_vue_type_script_setup_true_lang.js +21 -22
- package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.js +1 -2
- package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue.d.ts +29 -27
- package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue_vue_type_script_setup_true_lang.js +59 -60
- package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageMassOperations.js +1 -2
- package/dist/domains/dam/imageWidget/components/ImageMassOperations.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageMassOperations.vue.d.ts +1 -1
- package/dist/domains/dam/imageWidget/components/ImageMassOperations.vue_vue_type_script_setup_true_lang.js +35 -36
- package/dist/domains/dam/imageWidget/components/ImageMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.js +1 -2
- package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue.d.ts +68 -66
- package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue_vue_type_script_setup_true_lang.js +379 -380
- package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetInner.js +1 -2
- package/dist/domains/dam/imageWidget/components/ImageWidgetInner.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue.d.ts +403 -400
- package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue_vue_type_script_setup_true_lang.js +149 -150
- package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.js +1 -2
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue.d.ts +385 -382
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue_vue_type_script_setup_true_lang.js +79 -80
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.js +1 -2
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.vue_vue_type_script_setup_true_lang.js +23 -24
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.js +1 -2
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.vue_vue_type_script_setup_true_lang.js +14 -15
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/MediaWidgetSimpleDialog.js +1 -2
- package/dist/domains/dam/imageWidget/components/MediaWidgetSimpleDialog.vue.d.ts +7 -5
- package/dist/domains/dam/imageWidget/components/MediaWidgetSimpleDialog.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/dam/imageWidget/composables/commonAdminImageOptions.js +10 -11
- package/dist/domains/dam/imageWidget/composables/commonAdminImageOptions.js.map +1 -1
- package/dist/domains/dam/imageWidget/composables/imageActions.js +1 -2
- package/dist/domains/dam/imageWidget/composables/imageApiCms.js +19 -20
- package/dist/domains/dam/imageWidget/composables/imageApiCms.js.map +1 -1
- package/dist/domains/dam/imageWidget/composables/imageDialogDamAuthors.d.ts +13 -14
- package/dist/domains/dam/imageWidget/composables/imageDialogDamAuthors.js +53 -54
- package/dist/domains/dam/imageWidget/composables/imageDialogDamAuthors.js.map +1 -1
- package/dist/domains/dam/imageWidget/composables/useImageMassOperations.js +15 -16
- package/dist/domains/dam/imageWidget/composables/useImageMassOperations.js.map +1 -1
- package/dist/domains/dam/imageWidget/store/imageMediaWidgetStore.js +1 -2
- package/dist/domains/dam/imageWidget/store/imageMediaWidgetStore.js.map +1 -1
- package/dist/domains/dam/imageWidget/store/imageStore.js +1 -2
- package/dist/domains/dam/imageWidget/store/imageStore.js.map +1 -1
- package/dist/domains/dam/imageWidget/utils/damImage.d.ts +5 -6
- package/dist/domains/dam/imageWidget/utils/damImage.js +1 -2
- package/dist/domains/dam/imageWidget/utils/damImage.js.map +1 -1
- package/dist/domains/dam/imageWidget/utils/fieldLockTurns.d.ts +1 -2
- package/dist/domains/dam/imageWidget/utils/fieldLockTurns.js +1 -2
- package/dist/domains/dam/imageWidget/utils/fieldLockTurns.js.map +1 -1
- package/dist/domains/dam/imageWidget/utils/imageSaves.d.ts +10 -14
- package/dist/domains/dam/imageWidget/utils/imageSaves.js +1 -2
- package/dist/domains/dam/imageWidget/utils/imageSaves.js.map +1 -1
- package/dist/domains/dam/imageWidget/utils/imageWidgetInkectionKeys.js +1 -2
- package/dist/domains/dam/imageWidget/utils/metadataToImageMap.js +1 -2
- package/dist/domains/dam/imageWidget/utils/metadataToImageMap.js.map +1 -1
- package/dist/domains/dam/imageWidget/utils/waitLimit.d.ts +4 -6
- package/dist/domains/dam/imageWidget/utils/waitLimit.js +4 -5
- package/dist/domains/dam/imageWidget/utils/waitLimit.js.map +1 -1
- package/dist/domains/dam/keyword/api/keywordApi.js +18 -19
- package/dist/domains/dam/keyword/api/keywordApi.js.map +1 -1
- package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.js +1 -2
- package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.js.map +1 -1
- package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.vue.d.ts +1 -1
- package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js +8 -9
- package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.js +1 -2
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.js.map +1 -1
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.vue.d.ts +8 -5
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.vue_vue_type_script_setup_true_lang.js +8 -9
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.js +4 -5
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.js.map +1 -1
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue.d.ts +2 -2
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js +93 -94
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/keyword/composables/cachedKeywords.d.ts +5 -4
- package/dist/domains/dam/keyword/composables/cachedKeywords.js +13 -14
- package/dist/domains/dam/keyword/composables/cachedKeywords.js.map +1 -1
- package/dist/domains/dam/keyword/composables/damKeywordConfig.d.ts +2 -2
- package/dist/domains/dam/keyword/composables/damKeywordConfig.js +5 -6
- package/dist/domains/dam/keyword/composables/damKeywordConfig.js.map +1 -1
- package/dist/domains/dam/keyword/composables/keywordActions.js +6 -7
- package/dist/domains/dam/keyword/factory/KeywordFactory.js +7 -8
- package/dist/domains/dam/keyword/factory/KeywordFactory.js.map +1 -1
- package/dist/domains/dam/keyword/filter/KeywordFilter.js +7 -8
- package/dist/domains/dam/types/Asset.d.ts +4 -2
- package/dist/domains/dam/types/Asset.js +1 -2
- package/dist/domains/dam/types/Asset.js.map +1 -1
- package/dist/domains/dam/types/AssetFile.d.ts +1 -1
- package/dist/domains/dam/types/AssetFile.js +1 -2
- package/dist/domains/dam/types/AssetFile.js.map +1 -1
- package/dist/domains/dam/types/AssetLicence.d.ts +7 -0
- package/dist/domains/dam/types/AssetSelect.js +1 -2
- package/dist/domains/dam/types/DamConfig.js +1 -2
- package/dist/domains/dam/types/MediaAware.js +1 -2
- package/dist/domains/dam/types/UploadQueue.d.ts +5 -4
- package/dist/domains/dam/types/UploadQueue.js +1 -2
- package/dist/domains/dam/types/UploadQueue.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.js +1 -2
- package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue_vue_type_script_setup_true_lang.js +10 -11
- package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.js +1 -2
- package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue.d.ts +2 -2
- package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue_vue_type_script_setup_true_lang.js +84 -85
- package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueButtonStop.js +1 -2
- package/dist/domains/dam/uploadQueue/components/UploadQueueButtonStop.vue_vue_type_script_setup_true_lang.js +7 -8
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.js +1 -2
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.vue_vue_type_script_setup_true_lang.js +84 -85
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.js +1 -2
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.vue_vue_type_script_setup_true_lang.js +60 -61
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.js +1 -2
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.vue.d.ts +6 -4
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.vue_vue_type_script_setup_true_lang.js +17 -18
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.js +1 -2
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue.d.ts +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue_vue_type_script_setup_true_lang.js +14 -15
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.js +1 -2
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue_vue_type_script_setup_true_lang.js +30 -31
- package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.js +1 -2
- package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.vue.d.ts +6 -6
- package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.vue_vue_type_script_setup_true_lang.js +28 -29
- package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.js +1 -2
- package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue.d.ts +13 -13
- package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue_vue_type_script_setup_true_lang.js +109 -110
- package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/uploadQueue/components/UploadQueueItemErrorOverlay.js +1 -2
- package/dist/domains/dam/uploadQueue/components/UploadQueueItemErrorOverlay.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/dam/uploadQueue/components/uploadQueueBindings.d.ts +13 -13
- package/dist/domains/dam/uploadQueue/components/uploadQueueBindings.js +18 -19
- package/dist/domains/dam/uploadQueue/components/uploadQueueBindings.js.map +1 -1
- package/dist/domains/dam/uploadQueue/composables/assetSuggestions.js +1 -2
- package/dist/domains/dam/uploadQueue/composables/damUploadChunkSize.d.ts +2 -2
- package/dist/domains/dam/uploadQueue/composables/damUploadChunkSize.js +1 -2
- package/dist/domains/dam/uploadQueue/composables/damUploadChunkSize.js.map +1 -1
- package/dist/domains/dam/uploadQueue/composables/uploadMeter.d.ts +12 -12
- package/dist/domains/dam/uploadQueue/composables/uploadMeter.js +1 -2
- package/dist/domains/dam/uploadQueue/composables/uploadMeter.js.map +1 -1
- package/dist/domains/dam/uploadQueue/composables/uploadQueueItemRefresh.d.ts +5 -5
- package/dist/domains/dam/uploadQueue/composables/uploadQueueItemRefresh.js +21 -22
- package/dist/domains/dam/uploadQueue/composables/uploadQueueItemRefresh.js.map +1 -1
- package/dist/domains/dam/uploadQueue/composables/uploadQueueMassOperations.js +1 -2
- package/dist/domains/dam/uploadQueue/composables/uploadService.d.ts +2 -3
- package/dist/domains/dam/uploadQueue/composables/uploadService.js +40 -41
- package/dist/domains/dam/uploadQueue/composables/uploadService.js.map +1 -1
- package/dist/domains/dam/uploadQueue/composables/useUploadQueueDialog.d.ts +5 -4
- package/dist/domains/dam/uploadQueue/composables/useUploadQueueDialog.js +1 -2
- package/dist/domains/dam/uploadQueue/composables/useUploadQueueDialog.js.map +1 -1
- package/dist/domains/dam/uploadQueue/core/uploadQueueCore.d.ts +3 -2
- package/dist/domains/dam/uploadQueue/core/uploadQueueCore.js +55 -56
- package/dist/domains/dam/uploadQueue/core/uploadQueueCore.js.map +1 -1
- package/dist/domains/dam/uploadQueue/core/uploadQueueCoreTypes.d.ts +8 -5
- package/dist/domains/dam/uploadQueue/core/uploadQueueCoreTypes.js +1 -2
- package/dist/domains/dam/uploadQueue/core/uploadQueueCoreTypes.js.map +1 -1
- package/dist/domains/dam/uploadQueue/core/uploadQueueFill.d.ts +3 -3
- package/dist/domains/dam/uploadQueue/core/uploadQueueFill.js +1 -2
- package/dist/domains/dam/uploadQueue/core/uploadQueueFill.js.map +1 -1
- package/dist/domains/dam/uploadQueue/factory/UploadQueueItemFactory.js +1 -2
- package/dist/domains/dam/uploadQueue/presets/queuePresets.d.ts +8 -5
- package/dist/domains/dam/uploadQueue/presets/queuePresets.js +16 -17
- package/dist/domains/dam/uploadQueue/presets/queuePresets.js.map +1 -1
- package/dist/domains/dam/uploadQueue/presets/uploadPresets.d.ts +15 -13
- package/dist/domains/dam/uploadQueue/presets/uploadPresets.js +9 -10
- package/dist/domains/dam/uploadQueue/presets/uploadPresets.js.map +1 -1
- package/dist/domains/dam/uploadQueue/settlement/uploadPollSchedule.d.ts +7 -7
- package/dist/domains/dam/uploadQueue/settlement/uploadPollSchedule.js +1 -2
- package/dist/domains/dam/uploadQueue/settlement/uploadPollSchedule.js.map +1 -1
- package/dist/domains/dam/uploadQueue/settlement/uploadPoller.d.ts +4 -4
- package/dist/domains/dam/uploadQueue/settlement/uploadPoller.js +3 -4
- package/dist/domains/dam/uploadQueue/settlement/uploadPoller.js.map +1 -1
- package/dist/domains/dam/uploadQueue/settlement/uploadSettle.d.ts +28 -30
- package/dist/domains/dam/uploadQueue/settlement/uploadSettle.js +130 -131
- package/dist/domains/dam/uploadQueue/settlement/uploadSettle.js.map +1 -1
- package/dist/domains/dam/uploadQueue/settlement/uploadSettlement.d.ts +2 -2
- package/dist/domains/dam/uploadQueue/settlement/uploadSettlement.js +94 -95
- package/dist/domains/dam/uploadQueue/settlement/uploadSettlement.js.map +1 -1
- package/dist/domains/dam/uploadQueue/settlement/uploadSettlementRuntime.d.ts +2 -2
- package/dist/domains/dam/uploadQueue/settlement/uploadSettlementRuntime.js +1 -2
- package/dist/domains/dam/uploadQueue/settlement/uploadSettlementRuntime.js.map +1 -1
- package/dist/domains/dam/uploadQueue/settlement/uploadSettlementTypes.d.ts +63 -73
- package/dist/domains/dam/uploadQueue/settlement/uploadSettlementTypes.js +1 -2
- package/dist/domains/dam/uploadQueue/settlement/uploadSettlementTypes.js.map +1 -1
- package/dist/domains/dam/uploadQueue/store/uploadQueuesStore.d.ts +8 -9
- package/dist/domains/dam/uploadQueue/store/uploadQueuesStore.js +167 -168
- package/dist/domains/dam/uploadQueue/store/uploadQueuesStore.js.map +1 -1
- package/dist/domains/dam/uploadQueue/utils/mimeTypeHelper.js +1 -2
- package/dist/domains/dam/user/api/assetLicenceApi.d.ts +2 -1
- package/dist/domains/dam/user/api/assetLicenceApi.js +5 -6
- package/dist/domains/dam/user/api/assetLicenceApi.js.map +1 -1
- package/dist/domains/dam/user/api/assetLicenceGroupApi.js +1 -2
- package/dist/domains/dam/user/api/extSystemApi.js +1 -2
- package/dist/domains/dam/user/api/userApi.d.ts +2 -2
- package/dist/domains/dam/user/api/userApi.js +26 -27
- package/dist/domains/dam/user/api/userApi.js.map +1 -1
- package/dist/domains/dam/user/components/DamAssetLicenceGroupRemoteAutocomplete.js +1 -2
- package/dist/domains/dam/user/components/DamAssetLicenceGroupRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js +9 -10
- package/dist/domains/dam/user/components/DamAssetLicenceRemoteAutocomplete.js +1 -2
- package/dist/domains/dam/user/components/DamAssetLicenceRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js +10 -11
- package/dist/domains/dam/user/components/DamDistributionServiceSelect.js +1 -2
- package/dist/domains/dam/user/components/DamDistributionServiceSelect.js.map +1 -1
- package/dist/domains/dam/user/components/DamDistributionServiceSelect.vue.d.ts +1 -1
- package/dist/domains/dam/user/components/DamDistributionServiceSelect.vue_vue_type_script_setup_true_lang.js +4 -5
- package/dist/domains/dam/user/components/DamDistributionServiceSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/user/components/DamExtSystemRemoteAutocomplete.js +1 -2
- package/dist/domains/dam/user/components/DamExtSystemRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js +8 -9
- package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.js +1 -2
- package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.js.map +1 -1
- package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.vue.d.ts +1 -1
- package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.vue_vue_type_script_setup_true_lang.js +4 -5
- package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/user/components/DamUserFilterRemoteAutocomplete.js +1 -2
- package/dist/domains/dam/user/components/DamUserFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js +9 -10
- package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.js +1 -2
- package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.js.map +1 -1
- package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.vue.d.ts +1 -1
- package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js +11 -12
- package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/user/composables/assetLicenceActions.js +1 -2
- package/dist/domains/dam/user/composables/assetLicenceGroupActions.js +1 -2
- package/dist/domains/dam/user/composables/cachedAssetLicences.d.ts +17 -0
- package/dist/domains/dam/user/composables/cachedAssetLicences.js +35 -0
- package/dist/domains/dam/user/composables/cachedAssetLicences.js.map +1 -0
- package/dist/domains/dam/user/composables/damUserSelectActions.d.ts +1 -1
- package/dist/domains/dam/user/composables/damUserSelectActions.js +1 -2
- package/dist/domains/dam/user/composables/damUserSelectActions.js.map +1 -1
- package/dist/domains/dam/user/composables/extSystemActions.js +1 -2
- package/dist/domains/dam/user/filter/AssetLicenceFilter.js +7 -8
- package/dist/domains/dam/user/filter/AssetLicenceGroupFilter.js +7 -8
- package/dist/domains/dam/user/filter/DamUserFilter.js +1 -2
- package/dist/domains/dam/user/filter/ExtSystemFilter.js +7 -8
- package/dist/domains/dam/user/types/DamDistributionServiceType.d.ts +2 -2
- package/dist/domains/dam/user/types/DamDistributionServiceType.js +1 -2
- package/dist/domains/dam/user/types/DamDistributionServiceType.js.map +1 -1
- package/dist/domains/dam/user/types/DamExternalProviderAssetType.d.ts +1 -1
- package/dist/domains/dam/user/types/DamExternalProviderAssetType.js +1 -2
- package/dist/domains/dam/user/types/DamExternalProviderAssetType.js.map +1 -1
- package/dist/domains/filters/bookmarks/api/userAdminConfigApi.d.ts +1 -3
- package/dist/domains/filters/bookmarks/api/userAdminConfigApi.js +14 -15
- package/dist/domains/filters/bookmarks/api/userAdminConfigApi.js.map +1 -1
- package/dist/domains/filters/bookmarks/components/AFilterBookmarkButton.js +1 -2
- package/dist/domains/filters/bookmarks/components/AFilterBookmarkButton.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.js +1 -2
- package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.js.map +1 -1
- package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.vue_vue_type_script_setup_true_lang.js +108 -109
- package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/bookmarks/components/FilterBookmarks.js +1 -2
- package/dist/domains/filters/bookmarks/components/FilterBookmarks.vue_vue_type_script_setup_true_lang.js +65 -66
- package/dist/domains/filters/bookmarks/components/FilterBookmarks.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/bookmarks/factory/UserAdminConfigFactory.js +7 -8
- package/dist/domains/filters/bookmarks/filter/UserAdminConfigFilter.js +1 -2
- package/dist/domains/filters/bookmarks/store/bookmarksStore.d.ts +3 -3
- package/dist/domains/filters/bookmarks/store/bookmarksStore.js +9 -10
- package/dist/domains/filters/bookmarks/store/bookmarksStore.js.map +1 -1
- package/dist/domains/filters/bookmarks/types/UserAdminConfig.js +1 -2
- package/dist/domains/filters/components/AFilterAdvancedButton.js +1 -2
- package/dist/domains/filters/components/AFilterAdvancedButton.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/filters/components/AFilterBooleanSelect.js +1 -2
- package/dist/domains/filters/components/AFilterBooleanSelect.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/filters/components/AFilterDatetimePicker.js +1 -2
- package/dist/domains/filters/components/AFilterDatetimePicker.js.map +1 -1
- package/dist/domains/filters/components/AFilterDatetimePicker.vue_vue_type_script_setup_true_lang.js +14 -15
- package/dist/domains/filters/components/AFilterDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/components/AFilterEmpty.js +1 -2
- package/dist/domains/filters/components/AFilterEmpty.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/filters/components/AFilterInteger.js +1 -2
- package/dist/domains/filters/components/AFilterInteger.js.map +1 -1
- package/dist/domains/filters/components/AFilterInteger.vue_vue_type_script_setup_true_lang.js +11 -12
- package/dist/domains/filters/components/AFilterInteger.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/components/AFilterResetButton.js +1 -2
- package/dist/domains/filters/components/AFilterResetButton.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/filters/components/AFilterString.js +1 -2
- package/dist/domains/filters/components/AFilterString.js.map +1 -1
- package/dist/domains/filters/components/AFilterString.vue_vue_type_script_setup_true_lang.js +5 -6
- package/dist/domains/filters/components/AFilterString.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/components/AFilterSubmitButton.js +1 -2
- package/dist/domains/filters/components/AFilterSubmitButton.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/filters/components/AFilterTimeInterval.js +4 -5
- package/dist/domains/filters/components/AFilterTimeInterval.js.map +1 -1
- package/dist/domains/filters/components/AFilterTimeInterval.vue.d.ts +5 -3
- package/dist/domains/filters/components/AFilterTimeInterval.vue_vue_type_script_setup_true_lang.js +91 -92
- package/dist/domains/filters/components/AFilterTimeInterval.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.js +1 -2
- package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.js.map +1 -1
- package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.vue_vue_type_script_setup_true_lang.js +16 -17
- package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/components/AFilterWrapper.js +1 -2
- package/dist/domains/filters/components/AFilterWrapper.js.map +1 -1
- package/dist/domains/filters/components/AFilterWrapper.vue.d.ts +17 -15
- package/dist/domains/filters/components/AFilterWrapper.vue_vue_type_script_setup_true_lang.js +95 -95
- package/dist/domains/filters/components/AFilterWrapper.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/components/AFilterWrapperSidebar.js +1 -2
- package/dist/domains/filters/components/AFilterWrapperSidebar.vue.d.ts +5 -3
- package/dist/domains/filters/components/AFilterWrapperSidebar.vue_vue_type_script_setup_true_lang.js +7 -8
- package/dist/domains/filters/components/FilterDetailItem.js +1 -2
- package/dist/domains/filters/components/FilterDetailItem.vue_vue_type_script_setup_true_lang.js +10 -11
- package/dist/domains/filters/components/FilterDetailItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/components/FiltersSelected.js +1 -2
- package/dist/domains/filters/components/FiltersSelected.js.map +1 -1
- package/dist/domains/filters/components/FiltersSelected.vue_vue_type_script_setup_true_lang.js +13 -14
- package/dist/domains/filters/components/FiltersSelected.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/composables/filterFactory.d.ts +28 -9
- package/dist/domains/filters/composables/filterFactory.js +179 -162
- package/dist/domains/filters/composables/filterFactory.js.map +1 -1
- package/dist/domains/filters/composables/filterTimeIntervalTools.js +1 -2
- package/dist/domains/filters/datatable/components/ADatatableConfigButton.js +1 -2
- package/dist/domains/filters/datatable/components/ADatatableConfigButton.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/filters/datatable/components/ADatatableOrdering.js +1 -2
- package/dist/domains/filters/datatable/components/ADatatableOrdering.js.map +1 -1
- package/dist/domains/filters/datatable/components/ADatatableOrdering.vue_vue_type_script_setup_true_lang.js +25 -24
- package/dist/domains/filters/datatable/components/ADatatableOrdering.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/datatable/components/ADatatablePagination.js +1 -2
- package/dist/domains/filters/datatable/components/ADatatablePagination.js.map +1 -1
- package/dist/domains/filters/datatable/components/ADatatablePagination.vue_vue_type_script_setup_true_lang.js +7 -10
- package/dist/domains/filters/datatable/components/ADatatablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/datatable/composables/createDatatableColumnsConfig.js +13 -14
- package/dist/domains/filters/datatable/utils/datatable.js +1 -2
- package/dist/domains/filters/datatable/utils/datatableColumns.js +1 -2
- package/dist/domains/filters/utils/filterInjectionKeys.js +1 -2
- package/dist/domains/filters/utils/filterInjectionKeys.js.map +1 -1
- package/dist/domains/form/components/AFormDatetimePicker.js +1 -2
- package/dist/domains/form/components/AFormDatetimePicker.js.map +1 -1
- package/dist/domains/form/components/AFormDatetimePicker.vue.d.ts +7 -5
- package/dist/domains/form/components/AFormDatetimePicker.vue_vue_type_script_setup_true_lang.js +19 -20
- package/dist/domains/form/components/AFormDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/form/components/AFormFlagDatetimePicker.js +1 -2
- package/dist/domains/form/components/AFormFlagDatetimePicker.js.map +1 -1
- package/dist/domains/form/components/AFormFlagDatetimePicker.vue.d.ts +7 -5
- package/dist/domains/form/components/AFormFlagDatetimePicker.vue_vue_type_script_setup_true_lang.js +23 -24
- package/dist/domains/form/components/AFormFlagDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/form/components/AFormRemoteCheckbox.js +1 -2
- package/dist/domains/form/components/AFormRemoteCheckbox.vue_vue_type_script_setup_true_lang.js +9 -10
- package/dist/domains/form/components/AFormRemoteSwitch.js +1 -2
- package/dist/domains/form/components/AFormRemoteSwitch.vue_vue_type_script_setup_true_lang.js +9 -10
- package/dist/domains/form/components/AFormSwitch.js +1 -2
- package/dist/domains/form/components/AFormSwitch.vue.d.ts +7 -5
- package/dist/domains/form/components/AFormSwitch.vue_vue_type_script_setup_true_lang.js +12 -13
- package/dist/domains/form/components/AFormTextField.js +1 -2
- package/dist/domains/form/components/AFormTextField.js.map +1 -1
- package/dist/domains/form/components/AFormTextField.vue.d.ts +9 -7
- package/dist/domains/form/components/AFormTextField.vue_vue_type_script_setup_true_lang.js +14 -15
- package/dist/domains/form/components/AFormTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/form/components/AFormTextarea.js +1 -2
- package/dist/domains/form/components/AFormTextarea.vue.d.ts +13 -11
- package/dist/domains/form/components/AFormTextarea.vue_vue_type_script_setup_true_lang.js +21 -22
- package/dist/domains/form/components/AFormTextarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/form/components/AFormValueObjectOptionsSelect.js +1 -2
- package/dist/domains/form/components/AFormValueObjectOptionsSelect.vue.d.ts +7 -5
- package/dist/domains/form/components/AFormValueObjectOptionsSelect.vue_vue_type_script_setup_true_lang.js +17 -18
- package/dist/domains/form/components/ASystemEntityScope.js +1 -2
- package/dist/domains/form/components/ASystemEntityScope.vue.d.ts +5 -3
- package/dist/domains/form/components/ASystemEntityScope.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/job/api/jobApi.js +9 -10
- package/dist/domains/job/api/jobApi.js.map +1 -1
- package/dist/domains/job/components/AJobBaseCreateForm.js +1 -2
- package/dist/domains/job/components/AJobBaseCreateForm.vue_vue_type_script_setup_true_lang.js +8 -9
- package/dist/domains/job/components/AJobDetailCommon.js +1 -2
- package/dist/domains/job/components/AJobDetailCommon.vue.d.ts +5 -3
- package/dist/domains/job/components/AJobDetailCommon.vue_vue_type_script_setup_true_lang.js +9 -10
- package/dist/domains/job/components/AJobDetailCommon.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/job/components/AJobPriorityChip.js +1 -2
- package/dist/domains/job/components/AJobPriorityChip.vue_vue_type_script_setup_true_lang.js +5 -6
- package/dist/domains/job/components/AJobStatusChip.js +1 -2
- package/dist/domains/job/components/AJobStatusChip.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/job/composables/jobPriority.js +1 -2
- package/dist/domains/job/factory/JobFactory.js +7 -8
- package/dist/domains/job/valueObject/JobBaseResource.js +1 -2
- package/dist/domains/job/valueObject/JobStatus.js +1 -2
- package/dist/domains/listEditor/components/AListEditor.js +1 -2
- package/dist/domains/listEditor/components/AListEditor.js.map +1 -1
- package/dist/domains/listEditor/components/AListEditor.vue_vue_type_script_setup_true_lang.js +10 -11
- package/dist/domains/listEditor/components/AListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/listEditor/components/ANestedSortableListEditor.js +1 -2
- package/dist/domains/listEditor/components/ANestedSortableListEditor.js.map +1 -1
- package/dist/domains/listEditor/components/ANestedSortableListEditor.vue.d.ts +2 -3
- package/dist/domains/listEditor/components/ANestedSortableListEditor.vue_vue_type_script_setup_true_lang.js +49 -50
- package/dist/domains/listEditor/components/ANestedSortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/listEditor/components/ASortableListEditor.js +1 -2
- package/dist/domains/listEditor/components/ASortableListEditor.js.map +1 -1
- package/dist/domains/listEditor/components/ASortableListEditor.vue.d.ts +2 -3
- package/dist/domains/listEditor/components/ASortableListEditor.vue_vue_type_script_setup_true_lang.js +51 -52
- package/dist/domains/listEditor/components/ASortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/listEditor/components/internal/LeChangeParentDialog.js +4 -5
- package/dist/domains/listEditor/components/internal/LeChangeParentDialog.js.map +1 -1
- package/dist/domains/listEditor/components/internal/LeChangeParentDialog.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/listEditor/components/internal/LeDeleteDialog.js +1 -2
- package/dist/domains/listEditor/components/internal/LeDeleteDialog.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/listEditor/components/internal/LeDragHandle.js +1 -2
- package/dist/domains/listEditor/components/internal/LeDragHandle.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/listEditor/components/internal/LeEmptyState.js +1 -2
- package/dist/domains/listEditor/components/internal/LeEmptyState.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/listEditor/components/internal/LeMoveToPositionDialog.js +1 -2
- package/dist/domains/listEditor/components/internal/LeMoveToPositionDialog.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/listEditor/components/internal/LeNestedRow.js +1 -2
- package/dist/domains/listEditor/components/internal/LeNestedRow.vue_vue_type_script_setup_true_lang.js +24 -25
- package/dist/domains/listEditor/components/internal/LeNestedRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/listEditor/components/internal/LeStatus.js +1 -2
- package/dist/domains/listEditor/components/internal/LeStatus.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/listEditor/components/internal/LeUnsavedLabel.js +1 -2
- package/dist/domains/listEditor/components/internal/LeUnsavedLabel.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/listEditor/components/internal/constants.js +1 -2
- package/dist/domains/listEditor/composables/useContainerWidth.js +1 -2
- package/dist/domains/listEditor/composables/useDeleteDialog.js +1 -2
- package/dist/domains/listEditor/composables/useDragInstruction.js +1 -2
- package/dist/domains/listEditor/composables/useInlineEditing.js +1 -2
- package/dist/domains/listEditor/composables/useIsTouchDevice.js +1 -2
- package/dist/domains/listEditor/composables/useKeyboardNav.js +2 -3
- package/dist/domains/listEditor/composables/useKeyboardNav.js.map +1 -1
- package/dist/domains/listEditor/composables/useListEditorController.d.ts +4 -5
- package/dist/domains/listEditor/composables/useListEditorController.js +16 -17
- package/dist/domains/listEditor/composables/useListEditorController.js.map +1 -1
- package/dist/domains/listEditor/composables/useListEditorScopeValidity.js +1 -2
- package/dist/domains/listEditor/composables/useListEditorStateScope.js +1 -2
- package/dist/domains/listEditor/composables/useNestedListEditor.d.ts +3 -4
- package/dist/domains/listEditor/composables/useNestedListEditor.js +1 -2
- package/dist/domains/listEditor/composables/useNestedListEditor.js.map +1 -1
- package/dist/domains/listEditor/composables/useNestedListEditorController.d.ts +5 -4
- package/dist/domains/listEditor/composables/useNestedListEditorController.js +19 -20
- package/dist/domains/listEditor/composables/useNestedListEditorController.js.map +1 -1
- package/dist/domains/listEditor/composables/useReorderMode.js +1 -2
- package/dist/domains/listEditor/composables/useReorderMode.js.map +1 -1
- package/dist/domains/listEditor/types/listEditorTypes.d.ts +2 -2
- package/dist/domains/listEditor/utils/listEditorLoader.d.ts +5 -5
- package/dist/domains/listEditor/utils/listEditorLoader.js +1 -2
- package/dist/domains/listEditor/utils/listEditorLoader.js.map +1 -1
- package/dist/domains/listEditor/utils/positions.js +1 -2
- package/dist/domains/listEditor/utils/resolveCompactText.js +1 -2
- package/dist/domains/listEditor/utils/resolveCompactText.js.map +1 -1
- package/dist/domains/listEditor/utils/revealInvalidRows.js +1 -2
- package/dist/domains/listEditor/utils/tempId.js +1 -2
- package/dist/domains/log/api/logApi.d.ts +2 -3
- package/dist/domains/log/api/logApi.js +6 -7
- package/dist/domains/log/api/logApi.js.map +1 -1
- package/dist/domains/log/components/ALogDatatable.js +1 -2
- package/dist/domains/log/components/ALogDatatable.js.map +1 -1
- package/dist/domains/log/components/ALogDatatable.vue_vue_type_script_setup_true_lang.js +28 -29
- package/dist/domains/log/components/ALogDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/log/components/ALogDetail.js +4 -5
- package/dist/domains/log/components/ALogDetail.js.map +1 -1
- package/dist/domains/log/components/ALogDetail.vue_vue_type_script_setup_true_lang.js +5 -6
- package/dist/domains/log/components/ALogDetailView.js +1 -2
- package/dist/domains/log/components/ALogDetailView.js.map +1 -1
- package/dist/domains/log/components/ALogDetailView.vue.d.ts +1 -1
- package/dist/domains/log/components/ALogDetailView.vue_vue_type_script_setup_true_lang.js +10 -11
- package/dist/domains/log/components/ALogDetailView.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/log/components/ALogFilter.js +1 -2
- package/dist/domains/log/components/ALogFilter.js.map +1 -1
- package/dist/domains/log/components/ALogFilter.vue_vue_type_script_setup_true_lang.js +8 -9
- package/dist/domains/log/components/ALogFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/log/components/ALogLevelChip.js +1 -2
- package/dist/domains/log/components/ALogLevelChip.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/log/components/ALogListView.js +1 -2
- package/dist/domains/log/components/ALogListView.js.map +1 -1
- package/dist/domains/log/components/ALogListView.vue.d.ts +1 -1
- package/dist/domains/log/components/ALogListView.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/log/components/ALogListView.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/log/composables/logActions.d.ts +4 -5
- package/dist/domains/log/composables/logActions.js +1 -2
- package/dist/domains/log/composables/logActions.js.map +1 -1
- package/dist/domains/log/composables/logType.d.ts +6 -7
- package/dist/domains/log/composables/logType.js +1 -2
- package/dist/domains/log/composables/logType.js.map +1 -1
- package/dist/domains/log/filter/logFilter.d.ts +8 -11
- package/dist/domains/log/filter/logFilter.js +16 -17
- package/dist/domains/log/filter/logFilter.js.map +1 -1
- package/dist/domains/log/valueObject/LogLevel.js +6 -7
- package/dist/domains/log/valueObject/LogLevel.js.map +1 -1
- package/dist/domains/permission/components/APermissionEditor.js +1 -2
- package/dist/domains/permission/components/APermissionEditor.js.map +1 -1
- package/dist/domains/permission/components/APermissionEditor.vue.d.ts +4 -4
- package/dist/domains/permission/components/APermissionEditor.vue_vue_type_script_setup_true_lang.js +28 -29
- package/dist/domains/permission/components/APermissionEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/permission/components/APermissionGrantEditor.js +1 -2
- package/dist/domains/permission/components/APermissionGrantEditor.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/permission/components/APermissionValueChip.js +1 -2
- package/dist/domains/permission/components/APermissionValueChip.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/permission/composables/permissionActions.d.ts +3 -6
- package/dist/domains/permission/composables/permissionActions.js +9 -10
- package/dist/domains/permission/composables/permissionActions.js.map +1 -1
- package/dist/domains/permission/config/api/permissionConfigApi.d.ts +2 -2
- package/dist/domains/permission/config/api/permissionConfigApi.js +1 -2
- package/dist/domains/permission/config/api/permissionConfigApi.js.map +1 -1
- package/dist/domains/permission/config/composables/permissionConfigActions.d.ts +3 -7
- package/dist/domains/permission/config/composables/permissionConfigActions.js +9 -10
- package/dist/domains/permission/config/composables/permissionConfigActions.js.map +1 -1
- package/dist/domains/permission/config/factory/PermissionConfigFactory.js +1 -2
- package/dist/domains/permission/config/store/permissionConfigStore.d.ts +2 -4
- package/dist/domains/permission/config/store/permissionConfigStore.js +1 -2
- package/dist/domains/permission/config/store/permissionConfigStore.js.map +1 -1
- package/dist/domains/permission/group/api/permissionGroupApi.d.ts +8 -10
- package/dist/domains/permission/group/api/permissionGroupApi.js +5 -6
- package/dist/domains/permission/group/api/permissionGroupApi.js.map +1 -1
- package/dist/domains/permission/group/components/APermissionGroupDatatable.js +1 -2
- package/dist/domains/permission/group/components/APermissionGroupDatatable.js.map +1 -1
- package/dist/domains/permission/group/components/APermissionGroupDatatable.vue.d.ts +12 -10
- package/dist/domains/permission/group/components/APermissionGroupDatatable.vue_vue_type_script_setup_true_lang.js +41 -42
- package/dist/domains/permission/group/components/APermissionGroupDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/permission/group/components/APermissionGroupDetail.js +1 -2
- package/dist/domains/permission/group/components/APermissionGroupDetail.js.map +1 -1
- package/dist/domains/permission/group/components/APermissionGroupDetail.vue.d.ts +21 -22
- package/dist/domains/permission/group/components/APermissionGroupDetail.vue_vue_type_script_setup_true_lang.js +13 -14
- package/dist/domains/permission/group/components/APermissionGroupDetail.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/permission/group/components/APermissionGroupFilter.js +1 -2
- package/dist/domains/permission/group/components/APermissionGroupFilter.vue_vue_type_script_setup_true_lang.js +11 -12
- package/dist/domains/permission/group/components/APermissionGroupManage.js +1 -2
- package/dist/domains/permission/group/components/APermissionGroupManage.js.map +1 -1
- package/dist/domains/permission/group/components/APermissionGroupManage.vue.d.ts +21 -22
- package/dist/domains/permission/group/components/APermissionGroupManage.vue_vue_type_script_setup_true_lang.js +8 -9
- package/dist/domains/permission/group/components/APermissionGroupManage.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/permission/group/components/APermissionGroupRemoteAutocomplete.js +1 -2
- package/dist/domains/permission/group/components/APermissionGroupRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js +7 -8
- package/dist/domains/permission/group/composables/cachedPermissionGroups.js +1 -2
- package/dist/domains/permission/group/composables/cachedPermissionGroups.js.map +1 -1
- package/dist/domains/permission/group/composables/permissionGroupActions.d.ts +6 -8
- package/dist/domains/permission/group/composables/permissionGroupActions.js +15 -16
- package/dist/domains/permission/group/composables/permissionGroupActions.js.map +1 -1
- package/dist/domains/permission/group/composables/permissionGroupValidations.d.ts +2 -3
- package/dist/domains/permission/group/composables/permissionGroupValidations.js +1 -2
- package/dist/domains/permission/group/composables/permissionGroupValidations.js.map +1 -1
- package/dist/domains/permission/group/factory/PermissionGroupFactory.js +1 -2
- package/dist/domains/permission/group/filter/permissionGroupFilter.d.ts +2 -3
- package/dist/domains/permission/group/filter/permissionGroupFilter.js +1 -2
- package/dist/domains/permission/group/filter/permissionGroupFilter.js.map +1 -1
- package/dist/domains/permission/group/store/permissionGroupStore.d.ts +3 -6
- package/dist/domains/permission/group/store/permissionGroupStore.js +1 -2
- package/dist/domains/permission/group/store/permissionGroupStore.js.map +1 -1
- package/dist/domains/permission/valueObject/GrantOrigin.js +1 -2
- package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.js +1 -2
- package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js +7 -8
- package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.js +1 -2
- package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.vue_vue_type_script_setup_true_lang.js +9 -10
- package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.js +1 -2
- package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js +15 -16
- package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocompleteWithCached.js +1 -2
- package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocompleteWithCached.vue.d.ts +5 -3
- package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js +27 -28
- package/dist/domains/remoteAutocomplete/composables/createRemoteAutocomplete.d.ts +11 -13
- package/dist/domains/remoteAutocomplete/composables/createRemoteAutocomplete.js +27 -28
- package/dist/domains/remoteAutocomplete/composables/createRemoteAutocomplete.js.map +1 -1
- package/dist/domains/subjectSelect/components/AFilterWrapperSubjectSelect.js +1 -2
- package/dist/domains/subjectSelect/components/AFilterWrapperSubjectSelect.vue.d.ts +13 -11
- package/dist/domains/subjectSelect/components/AFilterWrapperSubjectSelect.vue_vue_type_script_setup_true_lang.js +56 -57
- package/dist/domains/subjectSelect/components/AFilterWrapperSubjectSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/subjectSelect/components/ASubjectSelect.js +1 -2
- package/dist/domains/subjectSelect/components/ASubjectSelect.js.map +1 -1
- package/dist/domains/subjectSelect/components/ASubjectSelect.vue_vue_type_script_setup_true_lang.js +82 -83
- package/dist/domains/subjectSelect/components/ASubjectSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/subjectSelect/composables/useSubjectSelect.js +55 -54
- package/dist/domains/subjectSelect/composables/useSubjectSelect.js.map +1 -1
- package/dist/domains/subjectSelect/utils/selectStrategies.js +1 -2
- package/dist/domains/system/appShell/components/AActionbar.js +1 -2
- package/dist/domains/system/appShell/components/AActionbar.vue.d.ts +7 -5
- package/dist/domains/system/appShell/components/AActionbar.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/system/appShell/components/AActionbarTarget.js +1 -2
- package/dist/domains/system/appShell/components/AActionbarTarget.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/system/appShell/components/ALayoutLoader.js +1 -2
- package/dist/domains/system/appShell/components/ALayoutLoader.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/system/appShell/components/ALayoutSwitch.js +1 -2
- package/dist/domains/system/appShell/components/ALayoutSwitch.js.map +1 -1
- package/dist/domains/system/appShell/components/ALayoutSwitch.vue.d.ts +7 -5
- package/dist/domains/system/appShell/components/ALayoutSwitch.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/system/appShell/components/ALayoutSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/system/appShell/composables/teleportSlot.d.ts +0 -1
- package/dist/domains/system/appShell/composables/teleportSlot.js +1 -2
- package/dist/domains/system/appShell/composables/teleportSlot.js.map +1 -1
- package/dist/domains/system/components/AAdminSwitcher.js +1 -2
- package/dist/domains/system/components/AAdminSwitcher.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/system/components/AAlerts.js +1 -2
- package/dist/domains/system/components/AAlerts.js.map +1 -1
- package/dist/domains/system/components/AAlerts.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/system/components/AAlerts.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/system/components/ALanguageSelect.js +4 -5
- package/dist/domains/system/components/ALanguageSelect.js.map +1 -1
- package/dist/domains/system/components/ALanguageSelect.vue_vue_type_script_setup_true_lang.js +11 -12
- package/dist/domains/system/components/AThemeSelect.js +1 -2
- package/dist/domains/system/components/AThemeSelect.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/system/composables/alerts.js +1 -2
- package/dist/domains/system/composables/alerts.js.map +1 -1
- package/dist/domains/system/composables/alertsQueue.js +1 -2
- package/dist/domains/system/composables/breadcrumbs.d.ts +6 -6
- package/dist/domains/system/composables/breadcrumbs.js +8 -9
- package/dist/domains/system/composables/breadcrumbs.js.map +1 -1
- package/dist/domains/system/composables/languageSettings.js +1 -2
- package/dist/domains/system/composables/languageSettings.js.map +1 -1
- package/dist/domains/system/composables/loginStatus.js +1 -2
- package/dist/domains/system/composables/loginStatus.js.map +1 -1
- package/dist/domains/system/composables/navigationError.d.ts +6 -8
- package/dist/domains/system/composables/navigationError.js +1 -2
- package/dist/domains/system/composables/navigationError.js.map +1 -1
- package/dist/domains/system/composables/pageNavigation.d.ts +9 -10
- package/dist/domains/system/composables/pageNavigation.js +1 -2
- package/dist/domains/system/composables/pageNavigation.js.map +1 -1
- package/dist/domains/system/composables/recordActions.d.ts +33 -0
- package/dist/domains/system/composables/recordActions.js +32 -0
- package/dist/domains/system/composables/recordActions.js.map +1 -0
- package/dist/domains/system/composables/recordPage.d.ts +26 -31
- package/dist/domains/system/composables/recordPage.js +71 -70
- package/dist/domains/system/composables/recordPage.js.map +1 -1
- package/dist/domains/system/composables/routeHistory.d.ts +4 -5
- package/dist/domains/system/composables/routeHistory.js +34 -28
- package/dist/domains/system/composables/routeHistory.js.map +1 -1
- package/dist/domains/system/composables/sentry.js +1 -2
- package/dist/domains/system/composables/sentry.js.map +1 -1
- package/dist/domains/system/composables/themeSettings.js +1 -2
- package/dist/domains/system/composables/useDebugFeatures.d.ts +3 -6
- package/dist/domains/system/composables/useDebugFeatures.js +1 -2
- package/dist/domains/system/composables/useDebugFeatures.js.map +1 -1
- package/dist/domains/system/composables/useUnreleasedFeatures.js +1 -2
- package/dist/domains/system/composables/useUserActivity.js +1 -2
- package/dist/domains/system/flags/components/FlagCountry.js +1 -2
- package/dist/domains/system/flags/components/FlagCountry.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/system/flags/components/FlagEmpty.js +1 -2
- package/dist/domains/system/flags/components/FlagEn.js +1 -2
- package/dist/domains/system/flags/components/FlagSk.js +1 -2
- package/dist/domains/system/store/datatablePageStore.d.ts +8 -1
- package/dist/domains/system/store/datatablePageStore.js +11 -5
- package/dist/domains/system/store/datatablePageStore.js.map +1 -1
- package/dist/domains/system/systemBar/components/ASystemBar.js +1 -2
- package/dist/domains/system/systemBar/components/ASystemBar.js.map +1 -1
- package/dist/domains/system/systemBar/components/ASystemBar.vue_vue_type_script_setup_true_lang.js +13 -14
- package/dist/domains/system/systemBar/components/ASystemBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/system/systemBar/components/ASystemBarNewVersion.js +1 -2
- package/dist/domains/system/systemBar/components/ASystemBarNewVersion.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/system/systemBar/composables/systemBar.js +1 -2
- package/dist/domains/system/systemBar/utils/appReload.d.ts +5 -5
- package/dist/domains/system/systemBar/utils/appReload.js +7 -8
- package/dist/domains/system/systemBar/utils/appReload.js.map +1 -1
- package/dist/domains/system/systemBar/utils/pageReload.js +1 -2
- package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.js +1 -2
- package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.js.map +1 -1
- package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.vue.d.ts +2 -3
- package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/buttons/action/components/AActionCreateButton.js +1 -2
- package/dist/domains/ui/buttons/action/components/AActionCreateButton.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/buttons/action/components/AActionDeleteButton.js +1 -2
- package/dist/domains/ui/buttons/action/components/AActionDeleteButton.js.map +1 -1
- package/dist/domains/ui/buttons/action/components/AActionDeleteButton.vue_vue_type_script_setup_true_lang.js +7 -8
- package/dist/domains/ui/buttons/action/components/AActionDeleteButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/buttons/action/components/AActionEditButton.js +1 -2
- package/dist/domains/ui/buttons/action/components/AActionEditButton.vue_vue_type_script_setup_true_lang.js +5 -6
- package/dist/domains/ui/buttons/action/components/AActionSaveAndCloseButton.js +1 -2
- package/dist/domains/ui/buttons/action/components/AActionSaveAndCloseButton.vue_vue_type_script_setup_true_lang.js +8 -9
- package/dist/domains/ui/buttons/action/components/AActionSaveButton.js +1 -2
- package/dist/domains/ui/buttons/action/components/AActionSaveButton.vue_vue_type_script_setup_true_lang.js +5 -6
- package/dist/domains/ui/buttons/components/ABtnSplit.js +1 -2
- package/dist/domains/ui/buttons/components/ABtnSplit.vue.d.ts +9 -7
- package/dist/domains/ui/buttons/components/ABtnSplit.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/buttons/table/components/ATableCopyIdButton.js +1 -2
- package/dist/domains/ui/buttons/table/components/ATableCopyIdButton.vue_vue_type_script_setup_true_lang.js +8 -9
- package/dist/domains/ui/buttons/table/components/ATableDetailButton.js +1 -2
- package/dist/domains/ui/buttons/table/components/ATableDetailButton.vue_vue_type_script_setup_true_lang.js +4 -5
- package/dist/domains/ui/buttons/table/components/ATableEditButton.js +1 -2
- package/dist/domains/ui/buttons/table/components/ATableEditButton.vue_vue_type_script_setup_true_lang.js +4 -5
- package/dist/domains/ui/components/AAnzuUserAvatar.js +1 -2
- package/dist/domains/ui/components/AAnzuUserAvatar.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/components/AAvatarColorPicker.js +1 -2
- package/dist/domains/ui/components/AAvatarColorPicker.js.map +1 -1
- package/dist/domains/ui/components/AAvatarColorPicker.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/components/AAvatarColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/components/ABooleanSelect.js +1 -2
- package/dist/domains/ui/components/ABooleanSelect.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/components/ABooleanValue.js +1 -2
- package/dist/domains/ui/components/ABooleanValue.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/components/ACard.js +1 -2
- package/dist/domains/ui/components/ACard.js.map +1 -1
- package/dist/domains/ui/components/ACard.vue.d.ts +7 -3
- package/dist/domains/ui/components/ACard.vue_vue_type_script_setup_true_lang.js +7 -4
- package/dist/domains/ui/components/ACard.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/components/ACardLoader.js +1 -2
- package/dist/domains/ui/components/ACardLoader.js.map +1 -1
- package/dist/domains/ui/components/ACardLoader.vue.d.ts +1 -0
- package/dist/domains/ui/components/ACardLoader.vue_vue_type_script_setup_true_lang.js +14 -9
- package/dist/domains/ui/components/ACardLoader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/components/AChipNoLink.js +1 -2
- package/dist/domains/ui/components/AChipNoLink.vue.d.ts +5 -3
- package/dist/domains/ui/components/AChipNoLink.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/components/ACopyText.js +1 -2
- package/dist/domains/ui/components/ACopyText.vue.d.ts +9 -7
- package/dist/domains/ui/components/ACopyText.vue_vue_type_script_setup_true_lang.js +7 -8
- package/dist/domains/ui/components/ACreateDialog.js +1 -2
- package/dist/domains/ui/components/ACreateDialog.js.map +1 -1
- package/dist/domains/ui/components/ACreateDialog.vue.d.ts +11 -9
- package/dist/domains/ui/components/ACreateDialog.vue_vue_type_script_setup_true_lang.js +16 -17
- package/dist/domains/ui/components/ACreateDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/components/ACurrentUserDropdown.js +1 -2
- package/dist/domains/ui/components/ACurrentUserDropdown.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/components/ADialogToolbar.js +1 -2
- package/dist/domains/ui/components/ADialogToolbar.vue.d.ts +5 -3
- package/dist/domains/ui/components/ADialogToolbar.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/components/AIconGroup.js +1 -2
- package/dist/domains/ui/components/AIconGroup.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/components/AProgress.js +1 -2
- package/dist/domains/ui/components/AProgress.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/components/ARow.js +1 -2
- package/dist/domains/ui/components/ARow.vue.d.ts +5 -3
- package/dist/domains/ui/components/ARow.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/components/ATimeTrackingFields.js +1 -2
- package/dist/domains/ui/components/ATimeTrackingFields.js.map +1 -1
- package/dist/domains/ui/components/ATimeTrackingFields.vue_vue_type_script_setup_true_lang.js +6 -7
- package/dist/domains/ui/components/ATimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/components/AUserAndTimeTrackingFields.js +1 -2
- package/dist/domains/ui/components/AUserAndTimeTrackingFields.js.map +1 -1
- package/dist/domains/ui/components/AUserAndTimeTrackingFields.vue.d.ts +3 -5
- package/dist/domains/ui/components/AUserAndTimeTrackingFields.vue_vue_type_script_setup_true_lang.js +12 -13
- package/dist/domains/ui/components/AUserAndTimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/datetime/components/ADatetime.js +1 -2
- package/dist/domains/ui/datetime/components/ADatetime.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/datetime/components/ADatetimePicker.js +4 -5
- package/dist/domains/ui/datetime/components/ADatetimePicker.js.map +1 -1
- package/dist/domains/ui/datetime/components/ADatetimePicker.vue.d.ts +5 -3
- package/dist/domains/ui/datetime/components/ADatetimePicker.vue_vue_type_script_setup_true_lang.js +2 -3
- package/dist/domains/ui/datetime/components/ADatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/datetime/components/TimePicker.js +4 -5
- package/dist/domains/ui/datetime/components/TimePicker.js.map +1 -1
- package/dist/domains/ui/datetime/components/TimePicker.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/datetime/composables/remainingTime.js +1 -2
- package/dist/domains/ui/file/components/AFileDropzone.js +1 -2
- package/dist/domains/ui/file/components/AFileDropzone.js.map +1 -1
- package/dist/domains/ui/file/components/AFileDropzone.vue.d.ts +1 -1
- package/dist/domains/ui/file/components/AFileDropzone.vue_vue_type_script_setup_true_lang.js +6 -7
- package/dist/domains/ui/file/components/AFileDropzone.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/file/components/AFileInput.js +1 -2
- package/dist/domains/ui/file/components/AFileInput.js.map +1 -1
- package/dist/domains/ui/file/components/AFileInput.vue.d.ts +9 -7
- package/dist/domains/ui/file/components/AFileInput.vue_vue_type_script_setup_true_lang.js +5 -6
- package/dist/domains/ui/file/components/AFileInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/file/components/AFileInputDialog.js +1 -2
- package/dist/domains/ui/file/components/AFileInputDialog.js.map +1 -1
- package/dist/domains/ui/file/components/AFileInputDialog.vue.d.ts +9 -7
- package/dist/domains/ui/file/components/AFileInputDialog.vue_vue_type_script_setup_true_lang.js +7 -8
- package/dist/domains/ui/file/components/AFileInputDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/file/composables/dropzone.js +1 -2
- package/dist/domains/ui/file/composables/dropzone.js.map +1 -1
- package/dist/domains/ui/file/composables/formatAndSizeCheck.js +25 -26
- package/dist/domains/ui/file/composables/formatAndSizeCheck.js.map +1 -1
- package/dist/domains/ui/file/utils/fileType.js +1 -2
- package/dist/domains/ui/view/components/AGenericView.js +1 -2
- package/dist/domains/ui/view/components/AGenericView.vue.d.ts +7 -5
- package/dist/domains/ui/view/components/AGenericView.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/view/components/ALoginView.js +4 -5
- package/dist/domains/ui/view/components/ALoginView.js.map +1 -1
- package/dist/domains/ui/view/components/ALoginView.vue.d.ts +5 -3
- package/dist/domains/ui/view/components/ALoginView.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/view/components/ALoginView.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/view/components/ALogoutView.js +1 -2
- package/dist/domains/ui/view/components/ALogoutView.js.map +1 -1
- package/dist/domains/ui/view/components/ALogoutView.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/view/components/ALogoutView.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/view/components/ANotFoundView.js +1 -2
- package/dist/domains/ui/view/components/ANotFoundView.js.map +1 -1
- package/dist/domains/ui/view/components/ANotFoundView.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/ui/view/components/ANotFoundView.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/view/components/AUnauthorizedView.js +1 -2
- package/dist/domains/ui/view/components/AUnauthorizedView.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/unsavedGuard/components/AUnsavedConfirmDialog.js +4 -5
- package/dist/domains/unsavedGuard/components/AUnsavedConfirmDialog.js.map +1 -1
- package/dist/domains/unsavedGuard/components/AUnsavedConfirmDialog.vue_vue_type_script_setup_true_lang.js +1 -2
- package/dist/domains/unsavedGuard/composables/useUnsavedChangesGuard.d.ts +6 -7
- package/dist/domains/unsavedGuard/composables/useUnsavedChangesGuard.js +1 -2
- package/dist/domains/unsavedGuard/composables/useUnsavedChangesGuard.js.map +1 -1
- package/dist/domains/unsavedGuard/composables/useUnsavedSection.js +1 -2
- package/dist/lib.d.ts +6 -4
- package/dist/locales/cs/common/alert.js +1 -2
- package/dist/locales/cs/common/anzuUser.js +1 -2
- package/dist/locales/cs/common/assetSelect.js +1 -2
- package/dist/locales/cs/common/button.js +1 -2
- package/dist/locales/cs/common/collab.js +1 -2
- package/dist/locales/cs/common/confirmDialog.js +1 -2
- package/dist/locales/cs/common/customForm.js +1 -2
- package/dist/locales/cs/common/customFormElement.js +1 -2
- package/dist/locales/cs/common/damImage.js +30 -2
- package/dist/locales/cs/common/damImage.js.map +1 -1
- package/dist/locales/cs/common/dayOfWeek.js +1 -2
- package/dist/locales/cs/common/filter.js +1 -2
- package/dist/locales/cs/common/job.js +1 -2
- package/dist/locales/cs/common/linkDto.js +1 -2
- package/dist/locales/cs/common/listItemDto.js +1 -2
- package/dist/locales/cs/common/log.js +1 -2
- package/dist/locales/cs/common/model.js +1 -2
- package/dist/locales/cs/common/permission.js +1 -2
- package/dist/locales/cs/common/permissionEditor.js +1 -2
- package/dist/locales/cs/common/permissionGroup.js +1 -2
- package/dist/locales/cs/common/routeSettings.js +1 -2
- package/dist/locales/cs/common/sortable.js +1 -2
- package/dist/locales/cs/common/subjectSelect.js +1 -2
- package/dist/locales/cs/common/system.js +1 -2
- package/dist/locales/cs/common/time.js +1 -2
- package/dist/locales/cs/common/userSystem.js +1 -2
- package/dist/locales/cs/error/apiDependencyExists.js +1 -2
- package/dist/locales/cs/error/apiForbiddenOperation.js +1 -2
- package/dist/locales/cs/error/apiTimedOut.js +1 -2
- package/dist/locales/cs/error/apiValidation.js +1 -2
- package/dist/locales/cs/error/jsValidation.js +1 -2
- package/dist/locales/cs/vuetify.js +1 -2
- package/dist/locales/cs.d.ts +3 -0
- package/dist/locales/cs.js +1 -2
- package/dist/locales/en/common/alert.js +1 -2
- package/dist/locales/en/common/anzuUser.js +1 -2
- package/dist/locales/en/common/assetSelect.js +1 -2
- package/dist/locales/en/common/button.js +1 -2
- package/dist/locales/en/common/collab.js +1 -2
- package/dist/locales/en/common/confirmDialog.js +1 -2
- package/dist/locales/en/common/customForm.js +1 -2
- package/dist/locales/en/common/customFormElement.js +1 -2
- package/dist/locales/en/common/damImage.js +30 -2
- package/dist/locales/en/common/damImage.js.map +1 -1
- package/dist/locales/en/common/dayOfWeek.js +1 -2
- package/dist/locales/en/common/filter.js +1 -2
- package/dist/locales/en/common/job.js +1 -2
- package/dist/locales/en/common/linkDto.js +1 -2
- package/dist/locales/en/common/listItemDto.js +1 -2
- package/dist/locales/en/common/log.js +1 -2
- package/dist/locales/en/common/model.js +1 -2
- package/dist/locales/en/common/permission.js +1 -2
- package/dist/locales/en/common/permissionEditor.js +1 -2
- package/dist/locales/en/common/permissionGroup.js +1 -2
- package/dist/locales/en/common/routeSettings.js +1 -2
- package/dist/locales/en/common/sortable.js +1 -2
- package/dist/locales/en/common/subjectSelect.js +1 -2
- package/dist/locales/en/common/system.js +1 -2
- package/dist/locales/en/common/time.js +1 -2
- package/dist/locales/en/common/userSystem.js +1 -2
- package/dist/locales/en/error/apiDependencyExists.js +1 -2
- package/dist/locales/en/error/apiForbiddenOperation.js +1 -2
- package/dist/locales/en/error/apiTimedOut.js +1 -2
- package/dist/locales/en/error/apiValidation.js +1 -2
- package/dist/locales/en/error/jsValidation.js +1 -2
- package/dist/locales/en/vuetify.js +1 -2
- package/dist/locales/en.d.ts +3 -0
- package/dist/locales/en.js +1 -2
- package/dist/locales/sk/common/alert.js +1 -2
- package/dist/locales/sk/common/anzuUser.js +1 -2
- package/dist/locales/sk/common/assetSelect.js +1 -2
- package/dist/locales/sk/common/button.js +1 -2
- package/dist/locales/sk/common/collab.js +1 -2
- package/dist/locales/sk/common/confirmDialog.js +1 -2
- package/dist/locales/sk/common/customForm.js +1 -2
- package/dist/locales/sk/common/customFormElement.js +1 -2
- package/dist/locales/sk/common/damImage.js +30 -2
- package/dist/locales/sk/common/damImage.js.map +1 -1
- package/dist/locales/sk/common/dayOfWeek.js +1 -2
- package/dist/locales/sk/common/filter.js +1 -2
- package/dist/locales/sk/common/job.js +1 -2
- package/dist/locales/sk/common/linkDto.js +1 -2
- package/dist/locales/sk/common/listItemDto.js +1 -2
- package/dist/locales/sk/common/log.js +1 -2
- package/dist/locales/sk/common/model.js +1 -2
- package/dist/locales/sk/common/permission.js +1 -2
- package/dist/locales/sk/common/permissionEditor.js +1 -2
- package/dist/locales/sk/common/permissionGroup.js +1 -2
- package/dist/locales/sk/common/routeSettings.js +1 -2
- package/dist/locales/sk/common/sortable.js +1 -2
- package/dist/locales/sk/common/subjectSelect.js +1 -2
- package/dist/locales/sk/common/system.js +1 -2
- package/dist/locales/sk/common/time.js +1 -2
- package/dist/locales/sk/common/userSystem.js +1 -2
- package/dist/locales/sk/error/apiDependencyExists.js +1 -2
- package/dist/locales/sk/error/apiForbiddenOperation.js +1 -2
- package/dist/locales/sk/error/apiTimedOut.js +1 -2
- package/dist/locales/sk/error/apiValidation.js +1 -2
- package/dist/locales/sk/error/jsValidation.js +1 -2
- package/dist/locales/sk/vuetify.js +1 -2
- package/dist/locales/sk.d.ts +3 -0
- package/dist/locales/sk.js +1 -2
- package/dist/plugins/commonVuetifyConfig.d.ts +4 -49
- package/dist/plugins/commonVuetifyConfig.js +1 -2
- package/dist/plugins/commonVuetifyConfig.js.map +1 -1
- package/dist/plugins/i18n.d.ts +7 -5
- package/dist/plugins/i18n.js +1 -2
- package/dist/plugins/i18n.js.map +1 -1
- package/dist/plugins/pluginOptions.d.ts +4 -2
- package/dist/plugins/pluginOptions.js +1 -2
- package/dist/plugins/pluginOptions.js.map +1 -1
- package/dist/plugins/webfontloader.js +0 -1
- package/dist/plugins/webfontloader.js.map +1 -1
- package/dist/shared/commonConfig.js +0 -1
- package/dist/shared/error/AnzuApiAxiosError.js +1 -2
- package/dist/shared/error/AnzuApiCancelledError.d.ts +5 -8
- package/dist/shared/error/AnzuApiCancelledError.js +1 -2
- package/dist/shared/error/AnzuApiCancelledError.js.map +1 -1
- package/dist/shared/error/AnzuApiDependencyExistsError.js +1 -2
- package/dist/shared/error/AnzuApiForbiddenError.js +1 -2
- package/dist/shared/error/AnzuApiForbiddenOperationError.js +1 -2
- package/dist/shared/error/AnzuApiResponseCodeError.js +1 -2
- package/dist/shared/error/AnzuApiTimeoutError.js +1 -2
- package/dist/shared/error/AnzuApiValidationError.js +1 -2
- package/dist/shared/error/AnzuError.d.ts +3 -5
- package/dist/shared/error/AnzuError.js +1 -2
- package/dist/shared/error/AnzuError.js.map +1 -1
- package/dist/shared/error/AnzuFatalError.js +1 -2
- package/dist/shared/error/AnzuNewVersionFetchError.js +1 -2
- package/dist/shared/error/AuthUnavailableError.d.ts +3 -3
- package/dist/shared/error/AuthUnavailableError.js +1 -2
- package/dist/shared/error/AuthUnavailableError.js.map +1 -1
- package/dist/shared/error/SessionExpiredError.js +1 -2
- package/dist/shared/error/isInCauseChain.d.ts +2 -2
- package/dist/shared/error/isInCauseChain.js +1 -2
- package/dist/shared/error/isInCauseChain.js.map +1 -1
- package/dist/shared/injectionKeys.js +1 -2
- package/dist/shared/statusCodes.js +1 -2
- package/dist/shared/types/CreatedByAware.js +1 -2
- package/dist/shared/types/OwnerAware.js +1 -2
- package/dist/shared/types/UserAndTimeTracking.d.ts +5 -5
- package/dist/shared/types/Validation.d.ts +4 -5
- package/dist/shared/types/common.d.ts +1 -3
- package/dist/shared/types/globalComponents.d.ts +5 -6
- package/dist/shared/types/utils.js +1 -2
- package/dist/shared/utils/array.js +1 -2
- package/dist/shared/utils/boolean.js +1 -2
- package/dist/shared/utils/common.js +1 -2
- package/dist/shared/utils/common.js.map +1 -1
- package/dist/shared/utils/datetime.d.ts +0 -1
- package/dist/shared/utils/datetime.js +0 -1
- package/dist/shared/utils/datetime.js.map +1 -1
- package/dist/shared/utils/datetimePickerValue.d.ts +4 -7
- package/dist/shared/utils/datetimePickerValue.js +0 -1
- package/dist/shared/utils/datetimePickerValue.js.map +1 -1
- package/dist/shared/utils/development.d.ts +3 -3
- package/dist/shared/utils/development.js +1 -2
- package/dist/shared/utils/development.js.map +1 -1
- package/dist/shared/utils/enum.js +1 -2
- package/dist/shared/utils/envConfig.d.ts +4 -4
- package/dist/shared/utils/envConfig.js +1 -2
- package/dist/shared/utils/envConfig.js.map +1 -1
- package/dist/shared/utils/event.js +1 -2
- package/dist/shared/utils/file.js +1 -2
- package/dist/shared/utils/generator.js +1 -2
- package/dist/shared/utils/history.js +1 -2
- package/dist/shared/utils/json.d.ts +1 -1
- package/dist/shared/utils/json.js +1 -2
- package/dist/shared/utils/json.js.map +1 -1
- package/dist/shared/utils/number.js +1 -2
- package/dist/shared/utils/object.js +1 -2
- package/dist/shared/utils/string.js +1 -2
- package/dist/shared/utils/userAndTimeTracking.d.ts +5 -7
- package/dist/shared/utils/userAndTimeTracking.js +1 -2
- package/dist/shared/utils/userAndTimeTracking.js.map +1 -1
- package/dist/shared/validators/vuelidate/common/useValidateBetween.js +1 -2
- package/dist/shared/validators/vuelidate/common/useValidateCompareDates.js +1 -2
- package/dist/shared/validators/vuelidate/common/useValidateEmail.js +1 -2
- package/dist/shared/validators/vuelidate/common/useValidateHexColor.d.ts +3 -5
- package/dist/shared/validators/vuelidate/common/useValidateHexColor.js +1 -2
- package/dist/shared/validators/vuelidate/common/useValidateHexColor.js.map +1 -1
- package/dist/shared/validators/vuelidate/common/useValidateMaxLength.js +1 -2
- package/dist/shared/validators/vuelidate/common/useValidateMaxValue.js +1 -2
- package/dist/shared/validators/vuelidate/common/useValidateMinLength.js +1 -2
- package/dist/shared/validators/vuelidate/common/useValidateMinValue.js +1 -2
- package/dist/shared/validators/vuelidate/common/useValidateNumeric.js +1 -2
- package/dist/shared/validators/vuelidate/common/useValidateRequired.js +1 -2
- package/dist/shared/validators/vuelidate/common/useValidateRequiredIf.js +1 -2
- package/dist/shared/validators/vuelidate/common/useValidateSlug.js +1 -2
- package/dist/shared/validators/vuelidate/common/useValidateStringArrayItemLength.js +1 -2
- package/dist/shared/validators/vuelidate/common/useValidateUrl.js +1 -2
- package/dist/shared/validators/vuelidate/useValidate.js +1 -2
- package/dist/testing/appShell.d.ts +11 -11
- package/dist/testing/appShell.js +1 -2
- package/dist/testing/appShell.js.map +1 -1
- package/dist/testing/closeButtons.d.ts +9 -11
- package/dist/testing/closeButtons.js +1 -2
- package/dist/testing/closeButtons.js.map +1 -1
- package/dist/testing/declaredDependencies.d.ts +7 -7
- package/dist/testing/declaredDependencies.js +1 -2
- package/dist/testing/declaredDependencies.js.map +1 -1
- package/dist/testing/generatedRoutes.d.ts +6 -11
- package/dist/testing/generatedRoutes.js +1 -2
- package/dist/testing/generatedRoutes.js.map +1 -1
- package/dist/testing/routeHistory.d.ts +5 -12
- package/dist/testing/routeHistory.js +1 -2
- package/dist/testing/routeHistory.js.map +1 -1
- package/dist/testing/sortableLists.d.ts +16 -21
- package/dist/testing/sortableLists.js +1 -2
- package/dist/testing/sortableLists.js.map +1 -1
- package/dist/testing/typedRouter.d.ts +0 -1
- package/dist/testing/typedRouter.js +1 -2
- package/dist/testing/typedRouter.js.map +1 -1
- package/dist/vendor/@cropper/element/dist/element.esm.raw.js +2 -3
- package/dist/vendor/@cropper/element/dist/element.esm.raw.js.map +1 -1
- package/dist/vendor/@cropper/element-canvas/dist/element-canvas.esm.raw.js +51 -52
- package/dist/vendor/@cropper/element-canvas/dist/element-canvas.esm.raw.js.map +1 -1
- package/dist/vendor/@cropper/element-crosshair/dist/element-crosshair.esm.raw.js +5 -6
- package/dist/vendor/@cropper/element-crosshair/dist/element-crosshair.esm.raw.js.map +1 -1
- package/dist/vendor/@cropper/element-grid/dist/element-grid.esm.raw.js +5 -6
- package/dist/vendor/@cropper/element-grid/dist/element-grid.esm.raw.js.map +1 -1
- package/dist/vendor/@cropper/element-handle/dist/element-handle.esm.raw.js +6 -7
- package/dist/vendor/@cropper/element-handle/dist/element-handle.esm.raw.js.map +1 -1
- package/dist/vendor/@cropper/element-image/dist/element-image.esm.raw.js +119 -104
- package/dist/vendor/@cropper/element-image/dist/element-image.esm.raw.js.map +1 -1
- package/dist/vendor/@cropper/element-selection/dist/element-selection.esm.raw.js +231 -86
- package/dist/vendor/@cropper/element-selection/dist/element-selection.esm.raw.js.map +1 -1
- package/dist/vendor/@cropper/element-shade/dist/element-shade.esm.raw.js +29 -23
- package/dist/vendor/@cropper/element-shade/dist/element-shade.esm.raw.js.map +1 -1
- package/dist/vendor/@cropper/element-viewer/dist/element-viewer.esm.raw.js +21 -22
- package/dist/vendor/@cropper/element-viewer/dist/element-viewer.esm.raw.js.map +1 -1
- package/dist/vendor/@cropper/utils/dist/utils.esm.raw.js +90 -48
- package/dist/vendor/@cropper/utils/dist/utils.esm.raw.js.map +1 -1
- package/dist/vendor/{cropperjs2 → cropperjs}/dist/cropper.esm.raw.js +11 -12
- package/dist/vendor/cropperjs/dist/cropper.esm.raw.js.map +1 -0
- package/dist/vendor/rusha/dist/rusha.js +1 -2
- package/dist/vendor/uuid/dist/rng.js +1 -2
- package/dist/vendor/uuid/dist/stringify.js +1 -2
- package/dist/vendor/uuid/dist/v1.js +7 -8
- package/dist/vendor/uuid/dist/v4.js +5 -6
- package/package.json +53 -43
- package/src/e2e/conventions.d.mts +4 -0
- package/src/e2e/conventions.mjs +15 -0
- package/src/e2e/index.d.mts +8 -0
- package/src/e2e/index.mjs +1 -0
- package/src/e2e/routeWalk.d.mts +44 -0
- package/src/e2e/routeWalk.mjs +617 -0
- package/src/e2e/types.d.mts +161 -0
- package/src/eslint/adminConfig.mjs +21 -28
- package/src/eslint/globalComponentNames.mjs +3 -4
- package/src/eslint/oxlint-admin.json +3 -0
- package/src/eslint/oxlint.mjs +7 -20
- package/src/eslint/plugin.d.mts +2 -4
- package/src/eslint/plugin.mjs +18 -34
- package/src/eslint/validRouteName.mjs +6 -7
- package/src/vite/devWatch.mjs +30 -43
- package/src/vite/index.d.mts +5 -5
- package/src/vite/sentry.mjs +7 -12
- package/src/vite/sourcemaps.mjs +4 -8
- package/dist/vendor/cropperjs2/dist/cropper.esm.raw.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"damFilterUserAllowedUploadConfigs.js","names":["isDamUser","isObject","user","isArray","licenceJudgeOf","system","useCommonAdminCoreDamOptions","configName","defineAuth","useCurrentUser","currentUser","isUndefined","isSuperAdmin","filterAllowedImageWidgetSelectConfigs","cloneDeep","values","extSystems","assetLicences","assetLicenceValue","allowed","value","isImageWidgetUploadConfigAllowed"],"sources":["../../../../../src/domains/dam/config/utils/damFilterUserAllowedUploadConfigs.ts"],"sourcesContent":["import { cloneDeep, isArray, isObject, isUndefined } from '@/shared/utils/common'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/domains/dam/types/DamConfig'\nimport { defineAuth } from '@/domains/auth/composables/defineAuth'\nimport type { AclValue } from '@/domains/auth/types/Permission'\nimport type { DamCurrentUserDto } from '@/domains/dam/types/DamCurrentUser'\nimport { SYSTEM_DAM } from '@/domains/dam/api/damConstants'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\n\n/** A current user as DAM
|
|
1
|
+
{"version":3,"file":"damFilterUserAllowedUploadConfigs.js","names":["isDamUser","isObject","user","isArray","licenceJudgeOf","system","useCommonAdminCoreDamOptions","configName","defineAuth","useCurrentUser","currentUser","isUndefined","isSuperAdmin","filterAllowedImageWidgetSelectConfigs","cloneDeep","values","extSystems","assetLicences","assetLicenceValue","allowed","value","isImageWidgetUploadConfigAllowed"],"sources":["../../../../../src/domains/dam/config/utils/damFilterUserAllowedUploadConfigs.ts"],"sourcesContent":["import { cloneDeep, isArray, isObject, isUndefined } from '@/shared/utils/common'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/domains/dam/types/DamConfig'\nimport { defineAuth } from '@/domains/auth/composables/defineAuth'\nimport type { AclValue } from '@/domains/auth/types/Permission'\nimport type { DamCurrentUserDto } from '@/domains/dam/types/DamCurrentUser'\nimport { SYSTEM_DAM } from '@/domains/dam/api/damConstants'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\n\n/** A current user as DAM returns it. Its licences are decided by it. */\nconst isDamUser = (user: unknown): user is DamCurrentUserDto =>\n isObject(user) &&\n isArray((user as Partial<DamCurrentUserDto>).adminToExtSystems) &&\n isArray((user as Partial<DamCurrentUserDto>).userToExtSystems) &&\n isArray((user as Partial<DamCurrentUserDto>).resolvedAssetLicences)\n\n/**\n * Who decides the licences under `configName`.\n * `all` when `currentUser` is false or the user is a DAM admin. `none` while\n * no user is loaded or the user is not a DAM user. Otherwise the loaded user.\n * The system is the config's `currentUser`, `dam` by default. A user of another system is a config\n * error: it is logged and no licence is allowed. An admin of another system is not a DAM admin.\n */\nconst licenceJudgeOf = (configName: string): 'all' | 'none' | DamCurrentUserDto => {\n const system = useCommonAdminCoreDamOptions(configName).currentUser ?? SYSTEM_DAM\n if (system === false) return 'all'\n const { useCurrentUser } = defineAuth<AclValue>(system)\n const { currentUser, isSuperAdmin } = useCurrentUser<DamCurrentUserDto>(system)\n const user = currentUser.value\n if (isUndefined(user)) return 'none'\n if (!isDamUser(user)) {\n console.error(\n `commonAdmin: the current user of the system \"${system}\", which \\`currentUser\\` of the DAM configuration ` +\n `\"${configName}\" names, is no user of DAM: no licence is allowed.`\n )\n return 'none'\n }\n return isSuperAdmin.value ? 'all' : user\n}\n\n/** The licences the current user of the system `currentUser` of the configuration `configName` may pick from. */\nexport function filterAllowedImageWidgetSelectConfigs(\n values: DamConfigLicenceExtSystemReturnType[],\n configName: string\n) {\n const currentUser = licenceJudgeOf(configName)\n if (currentUser === 'all') return cloneDeep(values)\n if (currentUser === 'none') return []\n\n // Matches the backend licence voter: an admin or user of the ext. system may use any of its licences.\n const extSystems = [...currentUser.adminToExtSystems, ...currentUser.userToExtSystems]\n const assetLicences = currentUser.resolvedAssetLicences.map((assetLicenceValue) => assetLicenceValue.id)\n const allowed: DamConfigLicenceExtSystemReturnType[] = []\n values.forEach((value) => {\n if (extSystems.includes(value.extSystem)) {\n allowed.push(value)\n return\n }\n if (assetLicences.includes(value.licence)) {\n allowed.push(value)\n }\n })\n return allowed\n}\n\n/**\n * Whether the current user of the system `currentUser` of the configuration `configName` may upload into the licence.\n */\nexport function isImageWidgetUploadConfigAllowed(\n value: DamConfigLicenceExtSystemReturnType,\n configName: string\n): boolean {\n const currentUser = licenceJudgeOf(configName)\n if (currentUser === 'all') return true\n if (currentUser === 'none') return false\n\n // Matches the backend licence voter: an admin or user of the ext. system may use any of its licences.\n if (\n currentUser.adminToExtSystems.includes(value.extSystem) ||\n currentUser.userToExtSystems.includes(value.extSystem)\n ) {\n return true\n }\n\n const assetLicences = currentUser.resolvedAssetLicences.map((assetLicenceValue) => assetLicenceValue.id)\n if (assetLicences.includes(value.licence)) {\n return true\n }\n\n return false\n}\n"],"mappings":";;;;AASA,IAAMA,KAAa,MACjBC,EAASC,CAAI,KACbC,EAASD,EAAoC,iBAAiB,KAC9DC,EAASD,EAAoC,gBAAgB,KAC7DC,EAASD,EAAoC,qBAAqB,GAS9DE,KAAkB,MAA2D;CACjF,IAAMC,IAASC,EAA6BC,CAAU,CAAC,CAAC,eAAA;CACxD,IAAIF,MAAW,IAAO,OAAO;CAC7B,IAAM,EAAE,sBAAmBG,EAAqBH,CAAM,GAChD,EAAE,gBAAa,oBAAiBI,EAAkCJ,CAAM,GACxEH,IAAOQ,EAAY;CASzB,OARIC,EAAYT,CAAI,IAAU,SACzBF,EAAUE,CAAI,IAOZU,EAAa,QAAQ,QAAQV,KANlC,QAAQ,MACN,gDAAgDG,EAAO,qDACjDE,EAAW,mDACnB,GACO;AAGX;AAGA,SAAgBM,EACd,GACA,GACA;CACA,IAAMH,IAAcN,EAAeG,CAAU;CAC7C,IAAIG,MAAgB,OAAO,OAAOI,EAAUC,CAAM;CAClD,IAAIL,MAAgB,QAAQ,OAAO,CAAC;CAGpC,IAAMM,IAAa,CAAC,GAAGN,EAAY,mBAAmB,GAAGA,EAAY,gBAAgB,GAC/EO,IAAgBP,EAAY,sBAAsB,KAAK,MAAsBQ,EAAkB,EAAE,GACjGC,IAAiD,CAAC;CAUxD,OATAJ,EAAO,SAAS,MAAU;EACxB,CAAIC,EAAW,SAASI,EAAM,SAAS,KAInCH,EAAc,SAASG,EAAM,OAAO,MACtCD,EAAQ,KAAKC,CAAK;CAEtB,CAAC,GACMD;AACT;AAKA,SAAgBE,EACd,GACA,GACS;CACT,IAAMX,IAAcN,EAAeG,CAAU;CAiB7C,OAhBIG,MAAgB,SAChBA,MAAgB,UAWpB,GAPEA,EAAY,kBAAkB,SAASU,EAAM,SAAS,KACtDV,EAAY,iBAAiB,SAASU,EAAM,SAAS,KAKjCV,EAAY,sBAAsB,KAAK,MAAsBQ,EAAkB,EACjG,CAAA,CAAc,SAASE,EAAM,OAAO;AAK1C"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import e from "./ACropper.vue_vue_type_script_setup_true_lang.js";
|
|
2
2
|
/* empty css */
|
|
3
|
-
|
|
3
|
+
// src/domains/dam/cropper/components/ACropper.vue
|
|
4
4
|
var t = e;
|
|
5
|
-
//#endregion
|
|
6
5
|
export { t as default };
|
|
7
6
|
|
|
8
7
|
//# sourceMappingURL=ACropper.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ACropper.js","names":["_sfc_main","ACropper_vue_vue_type_script_setup_true_lang_default","ACropper_default"],"sources":["../../../../../src/domains/dam/cropper/components/ACropper.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref, useTemplateRef, watch } from 'vue'\nimport { useResizeObserver } from '@vueuse/core'\nimport {\n CropperCanvas,\n CropperCrosshair,\n CropperGrid,\n CropperHandle,\n CropperImage,\n CropperSelection,\n CropperShade,\n} from 'cropperjs2'\nimport {\n canvasSizeFor,\n clampRectInside,\n initialSelectionRect,\n isUsableAspectRatio,\n RESIZE_ANCHORS,\n rectsAreClose,\n type Rect,\n type Size,\n} from '@/domains/dam/cropper/utils/cropperGeometry'\nimport type { CropRect } from '@/domains/dam/cropper/utils/cropperTypes'\n\n/**\n * Image cropper built on cropper.js v2's custom elements, replacing the v1-based `ACropperjs`.\n *\n * It lives here, beside `DamAssetImageRoiSelect`, because that is the only thing that uses it and\n * nothing outside this library does. It is not exported: shaping it to one need rather than to a\n * general audience is what keeps it to its size.\n *\n * The crop is bound, not fetched: `v-model` carries it as fractions of the image, and `commit` says\n * the user has finished a gesture. There is no imperative surface — the one thing a host wants to do\n * with a cropper is know where the crop is, and a binding says that better than six methods did.\n *\n * The elements are assembled in script rather than in the template on purpose: a consumer of this\n * library does not configure `isCustomElement` in their own build, and setting element *properties*\n * instead of going through attribute strings avoids the coercion surprises (`NaN`, booleans,\n * fractional numbers) that come with the attribute round-trip.\n */\n\nconst props = withDefaults(\n defineProps<{\n src?: string\n /** The crop, as fractions of the image. Leave it null to start from the default box. */\n modelValue?: CropRect | null\n /** `NaN` (the default) leaves the crop free-form. */\n aspectRatio?: number\n containerStyle?: { [key: string]: string } | undefined\n /** Wash over everything outside the crop — the replacement for overriding `.cropper-modal`. */\n shadeColor?: string\n }>(),\n {\n src: '',\n modelValue: null,\n aspectRatio: NaN,\n containerStyle: undefined,\n shadeColor: 'rgba(0, 0, 0, 0.5)',\n }\n)\n\nconst emit = defineEmits<{\n (event: 'update:modelValue', crop: CropRect): void\n /** The user has finished a gesture; the crop is worth saving. */\n (event: 'commit', crop: CropRect): void\n (event: 'ready'): void\n}>()\n\n// cropper.js registers its elements as a side effect of loading its entry, and this package's\n// `sideEffects` lets the consumer's bundler drop that module once only the classes are used. `$define`\n// is a no-op for an element that is already registered.\nfor (const element of [\n CropperCanvas,\n CropperCrosshair,\n CropperGrid,\n CropperHandle,\n CropperImage,\n CropperSelection,\n CropperShade,\n]) {\n element.$define()\n}\n\n/**\n * Settings the one caller never varies, kept as constants rather than as props nobody passes.\n * Each of them is behaviour, not preference: no checkerboard behind a photograph, the wheel left to\n * the page, pinch zoom kept for tablets, and the minimum canvas cropper.js' own stylesheet declares.\n */\nconst AUTO_CROP_AREA = 0.8\nconst MIN_CONTAINER_WIDTH = 200\nconst MIN_CONTAINER_HEIGHT = 100\n\n// Matched to cropper.js v1's stylesheet so the two components are indistinguishable side by side.\nconst SELECTION_COLOR = 'rgba(51, 153, 255, 0.75)'\nconst FACE_COLOR = 'rgba(255, 255, 255, 0.1)'\nconst GRID_COLOR = 'rgba(238, 238, 238, 0.5)'\nconst CROSSHAIR_COLOR = 'rgba(238, 238, 238, 0.75)'\nconst RESIZE_ACTIONS = [\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n]\n\ninterface CropperParts {\n canvas: CropperCanvas\n image: CropperImage\n selection: CropperSelection\n}\n\nconst hostEl = useTemplateRef<HTMLDivElement>('hostEl')\nconst loading = ref(true)\n\nlet parts: CropperParts | null = null\nlet natural: Size = { width: 0, height: 0 }\n/** The action cropper.js is currently performing, so a clamp knows which edge to hold still. */\nlet currentAction: string | null = null\n/** Guards the re-entrant `$change` a clamp performs from being clamped again. */\nlet clamping = false\n/** Guards the half-applied transforms `$center` emits between its move and its scale. */\nlet centring = false\n/** Invalidates an in-flight build when `src` changes or the component goes away mid-load. */\nlet buildToken = 0\n/** The host box the current layout was computed for — not merely the last one observed. */\nlet laidOut: Size = { width: 0, height: 0 }\n/** The last crop handed out, so a model written straight back is not mistaken for a new one. */\nlet lastEmitted: CropRect | null = null\n/** Watches the ancestors that clip the host; their height is part of the room it has. */\nlet ancestorObserver: ResizeObserver | null = null\n\nconst create = <T extends HTMLElement>(name: string): T => document.createElement(name) as T\n\n/** The image box in canvas coordinates. Read from layout so panning and zooming stay accounted for. */\nconst imageBounds = (): Rect => {\n if (!parts) return { x: 0, y: 0, width: 0, height: 0 }\n const canvasRect = parts.canvas.getBoundingClientRect()\n const imageRect = parts.image.getBoundingClientRect()\n return {\n x: imageRect.left - canvasRect.left,\n y: imageRect.top - canvasRect.top,\n width: imageRect.width,\n height: imageRect.height,\n }\n}\n\n/**\n * Where the crop is allowed to be: the image, but never outside the visible canvas. The two are the\n * same box until the image is zoomed past its frame, and then it is the frame that wins — cropper.js\n * v1 limited its crop box to the canvas and the container both, so a zoomed-in image never let the\n * crop wander off the part of it you could actually see.\n */\nconst constraintBounds = (): Rect => {\n if (!parts) return { x: 0, y: 0, width: 0, height: 0 }\n const image = imageBounds()\n const canvas = parts.canvas.getBoundingClientRect()\n const left = Math.max(image.x, 0)\n const top = Math.max(image.y, 0)\n const right = Math.min(image.x + image.width, canvas.width)\n const bottom = Math.min(image.y + image.height, canvas.height)\n return { x: left, y: top, width: Math.max(0, right - left), height: Math.max(0, bottom - top) }\n}\n\nconst selectionRect = (): Rect => {\n if (!parts) return { x: 0, y: 0, width: 0, height: 0 }\n const { x, y, width, height } = parts.selection\n return { x, y, width, height }\n}\n\nconst applyRect = (rect: Rect) => {\n if (!parts) return\n clamping = true\n parts.selection.$change(rect.x, rect.y, rect.width, rect.height, props.aspectRatio, true)\n clamping = false\n}\n\n/**\n * Re-fits the image to the canvas. cropper.js only lets `$center` scale and move an image that is\n * marked scalable and translatable — it grants itself that permission while the image is still\n * loading, but not afterwards — so the flags are lifted for the call and put back straight after.\n */\nconst centerImage = () => {\n if (!parts) return\n const { image } = parts\n const { scalable, translatable } = image\n centring = true\n image.scalable = true\n image.translatable = true\n image.$center('contain')\n image.scalable = scalable\n image.translatable = translatable\n centring = false\n}\n\n/**\n * The crop a fresh picture starts with. Computed here rather than handed to cropper.js'\n * `initialCoverage`, whose deferred initialisation would land *after* a `ready` handler had already\n * positioned the crop. It is measured against the image rather than the canvas, which are the same\n * box for a source wider than its container and are not once the image sits centred between margins.\n */\nconst seedInitialCrop = () => {\n if (!parts) return\n const bounds = imageBounds()\n if (bounds.width <= 0 || bounds.height <= 0) return\n const initial = initialSelectionRect(bounds, props.aspectRatio, AUTO_CROP_AREA)\n applyRect({ ...initial, x: initial.x + bounds.x, y: initial.y + bounds.y })\n}\n\n/** Uses the bound crop if there is one, and the default box if there is not. */\nconst applyModelOrSeed = () => {\n const model = props.modelValue\n if (model && model.width > 0 && model.height > 0) applyCrop(model)\n else seedInitialCrop()\n emitCrop()\n}\n\n/** Pulls the selection back inside the image after something moved the image out from under it. */\nconst refit = () => {\n if (!parts || centring) return\n const current = selectionRect()\n if (current.width <= 0 || current.height <= 0) return\n const fitted = clampRectInside(current, constraintBounds(), props.aspectRatio)\n if (!rectsAreClose(current, fitted)) applyRect(fitted)\n}\n\nconst onSelectionChange = (event: Event) => {\n if (clamping || !parts) return\n const detail = (event as CustomEvent<Rect>).detail\n if (!detail) return\n // cropper.js reverses the action when a grip is dragged through the opposite edge, and it records\n // that on the canvas just before emitting this event — one move ahead of the `action` event the\n // tracking below sees. Prefer its own answer, and fall back if a future version stops publishing it.\n const liveAction = (parts.canvas as unknown as { $action?: unknown }).$action\n const action = typeof liveAction === 'string' && liveAction ? liveAction : currentAction\n const anchor = action ? RESIZE_ANCHORS[action] : undefined\n const clamped = clampRectInside(detail, constraintBounds(), props.aspectRatio, anchor)\n if (rectsAreClose(detail, clamped)) return\n // Rejecting the change and re-issuing the clamped one is what keeps the crop sliding along the\n // border instead of freezing there; the shade reads `defaultPrevented` and follows the new values.\n event.preventDefault()\n applyRect(clamped)\n}\n\nconst onActionStart = (event: Event) => {\n currentAction = (event as CustomEvent<{ action?: string }>).detail?.action ?? null\n}\n\nconst onAction = (event: Event) => {\n const action = (event as CustomEvent<{ action?: string }>).detail?.action\n // cropper.js turns a fresh \"select\" drag into the matching corner resize once it knows the\n // direction, and reports the new action on the next move — follow it so the anchor stays right.\n if (action) currentAction = action\n}\n\nconst onActionEnd = () => {\n currentAction = null\n emitCrop(true)\n}\n\n/**\n * The canvas must never see a wheel event: its own handler calls `preventDefault()` unconditionally,\n * which would swallow page scrolling over the picture the way cropper.js v1 never did. Pinching is\n * unaffected — that arrives as pointer events, and the picture stays scalable for it.\n */\nconst onWheelCapture = (event: WheelEvent) => {\n event.stopPropagation()\n}\n\n/**\n * cropper.js emits `transform` *before* it writes the new matrix to the element's style (it sets the\n * new transform to measure the result, puts the old one back, then emits and finally commits). Re-\n * fitting straight away would therefore measure the image as it was: after a zoom out the crop would\n * be judged against the larger, previous picture and left hanging over the edge of the new one.\n */\nconst onImageTransform = () => queueMicrotask(refit)\n\nconst teardown = () => {\n if (parts) {\n const { canvas, image, selection } = parts\n selection.removeEventListener('change', onSelectionChange)\n canvas.removeEventListener('actionstart', onActionStart)\n canvas.removeEventListener('action', onAction)\n canvas.removeEventListener('actionend', onActionEnd)\n image.removeEventListener('transform', onImageTransform)\n }\n // Every canvas, not just the one on `parts`: a build that was superseded while still waiting on\n // its image has already put one in the DOM and has nothing tracking it yet.\n hostEl.value?.querySelectorAll(CropperCanvas.$name).forEach((canvas) => {\n // Disconnecting a `cropper-image` drops its listeners but leaves its request running, and the\n // `$ready()` promise waiting on it keeps this component reachable until the server answers.\n canvas.querySelectorAll<CropperImage>(CropperImage.$name).forEach((image) => {\n if (image.$image) image.$image.src = ''\n })\n canvas.remove()\n })\n ancestorObserver?.disconnect()\n ancestorObserver = null\n parts = null\n natural = { width: 0, height: 0 }\n laidOut = { width: 0, height: 0 }\n currentAction = null\n}\n\n/**\n * How much of the host's height will actually be shown.\n *\n * The host's own `max-height` is the usual answer, and the one `DamAssetImageRoiSelect` relies on.\n * Ancestors count too when they clip with `overflow: hidden` — what they cut off cannot be scrolled\n * back into view, so it is no more reachable than the host's own overflow. An ancestor that\n * scrolls is left alone: there the rest of the picture is a scroll away, not gone.\n */\nconst clippingAncestorsOf = (host: HTMLElement): HTMLElement[] => {\n const found: HTMLElement[] = []\n let ancestor = host.parentElement\n while (ancestor && ancestor !== document.body && ancestor !== document.documentElement) {\n const { overflowY } = window.getComputedStyle(ancestor)\n if (overflowY === 'hidden' || overflowY === 'clip') found.push(ancestor)\n ancestor = ancestor.parentElement\n }\n return found\n}\n\nconst visibleHeightOf = (host: HTMLElement): number => {\n let available = host.clientHeight\n const hostTop = host.getBoundingClientRect().top\n\n clippingAncestorsOf(host).forEach((ancestor) => {\n const rect = ancestor.getBoundingClientRect()\n // From wherever the host starts being visible down to where the ancestor stops showing anything.\n // Taking the ancestor's own top into account matters when the host begins above it: what is\n // scrolled or positioned off the top is just as unreachable as what falls off the bottom.\n const room = rect.bottom - Math.max(rect.top, hostTop)\n if (room > 0) available = Math.min(available, room)\n })\n\n return available\n}\n\n/**\n * Sizes the canvas to the room the host actually gives it, in two passes because the second answer\n * depends on the first: the height a picture wants follows from its width, but a frame with a\n * `max-height` only reveals how much of that it will show once something is in it.\n *\n * cropper.js v1 did the same dance with its `<img>`, and the point of it is that its cropper never\n * overflowed: a tall picture in a short frame was scaled down to fit rather than cut off at the\n * bottom, where the part of the crop hidden by `overflow: hidden` could not be reached again.\n */\nconst sizeCanvas = (canvas: CropperCanvas, host: HTMLElement, availableWidth: number): Size => {\n const size = canvasSizeFor(natural, availableWidth, MIN_CONTAINER_WIDTH, MIN_CONTAINER_HEIGHT)\n canvas.style.width = `${size.width}px`\n canvas.style.height = `${size.height}px`\n\n const visibleHeight = visibleHeightOf(host)\n if (visibleHeight > 0 && visibleHeight < size.height) {\n size.height = Math.max(visibleHeight, MIN_CONTAINER_HEIGHT)\n canvas.style.height = `${size.height}px`\n }\n return size\n}\n\nconst buildSelectionChildren = (selection: CropperSelection) => {\n const grid = create<CropperGrid>(CropperGrid.$name)\n grid.rows = 3\n grid.columns = 3\n grid.covered = true\n grid.themeColor = GRID_COLOR\n grid.setAttribute('role', 'grid')\n selection.appendChild(grid)\n\n const crosshair = create<CropperCrosshair>(CropperCrosshair.$name)\n crosshair.centered = true\n crosshair.themeColor = CROSSHAIR_COLOR\n selection.appendChild(crosshair)\n\n const face = create<CropperHandle>(CropperHandle.$name)\n face.action = 'move'\n face.themeColor = FACE_COLOR\n selection.appendChild(face)\n\n RESIZE_ACTIONS.forEach((action) => {\n const handle = create<CropperHandle>(CropperHandle.$name)\n handle.action = action\n handle.themeColor = SELECTION_COLOR\n selection.appendChild(handle)\n })\n}\n\nconst build = async () => {\n const token = ++buildToken\n teardown()\n loading.value = true\n\n const host = hostEl.value\n if (!host || !props.src) {\n // Nothing to wait for: leaving the spinner up would make an empty cropper look like a stuck one.\n loading.value = false\n return\n }\n\n const canvas = create<CropperCanvas>(CropperCanvas.$name)\n canvas.background = false\n canvas.themeColor = SELECTION_COLOR\n canvas.style.display = 'block'\n sizeCanvas(canvas, host, host.clientWidth)\n\n const image = create<CropperImage>(CropperImage.$name)\n image.alt = ''\n image.initialFit = 'contain'\n image.rotatable = false\n image.skewable = false\n image.translatable = false\n image.scalable = true\n image.src = props.src\n\n const shade = create<CropperShade>(CropperShade.$name)\n shade.themeColor = props.shadeColor\n // Kept out of the way until the first crop box exists, or it would flash across the whole canvas.\n shade.hidden = true\n\n const selectHandle = create<CropperHandle>(CropperHandle.$name)\n selectHandle.action = 'select'\n selectHandle.plain = true\n\n const selection = create<CropperSelection>(CropperSelection.$name)\n selection.themeColor = SELECTION_COLOR\n selection.movable = true\n selection.resizable = true\n selection.outlined = true\n // Keep sub-pixel values: rounding to whole canvas pixels would drift the natural-pixel crop data\n // that callers persist, and cropper.js v1 did not round either.\n selection.precise = true\n selection.aspectRatio = props.aspectRatio\n buildSelectionChildren(selection)\n\n // Listeners go on before anything is connected, so the action in flight is already known by the\n // time the elements' own handlers react to it.\n canvas.addEventListener('actionstart', onActionStart)\n canvas.addEventListener('action', onAction)\n canvas.addEventListener('actionend', onActionEnd)\n image.addEventListener('transform', onImageTransform)\n selection.addEventListener('change', onSelectionChange)\n\n canvas.append(image, shade, selectHandle, selection)\n // The whole tree is attached in one move on purpose: each element wires itself up to its siblings\n // when it connects, and the shade in particular goes looking for the selection. Appending the\n // children one at a time leaves it looking at an empty canvas, and it never follows the crop.\n host.appendChild(canvas)\n // Second pass, now that there is something in the host for its own constraints to act on.\n sizeCanvas(canvas, host, host.clientWidth)\n\n let loaded: HTMLImageElement\n try {\n // The element runs the one request there is; its promise carries the picture that arrived.\n loaded = await image.$ready()\n } catch {\n // Mirrors cropper.js v1, which simply never became ready on a broken source.\n canvas.remove()\n if (token === buildToken) loading.value = false\n return\n }\n if (token !== buildToken) {\n canvas.remove()\n return\n }\n\n parts = { canvas, image, selection }\n // Only now is the picture's own size known, so the canvas gets its real dimensions here rather\n // than from a second request made ahead of time purely to measure it.\n natural = { width: loaded.naturalWidth, height: loaded.naturalHeight }\n sizeCanvas(canvas, host, host.clientWidth)\n\n // A prop that changed while the picture was loading found the watchers with no elements to write\n // to. Re-reading the two that can vary closes that window; it is idempotent otherwise.\n shade.themeColor = props.shadeColor\n selection.aspectRatio = props.aspectRatio\n\n centerImage()\n\n laidOut = hostBox(host)\n observeAncestors(host)\n applyModelOrSeed()\n\n loading.value = false\n emit('ready')\n}\n\n/** Where the crop sits, as fractions of the image. */\nconst currentCrop = (): CropRect | null => {\n if (!parts) return null\n const bounds = imageBounds()\n if (bounds.width <= 0 || bounds.height <= 0) return null\n const rect = selectionRect()\n return {\n x: (rect.x - bounds.x) / bounds.width,\n y: (rect.y - bounds.y) / bounds.height,\n width: rect.width / bounds.width,\n height: rect.height / bounds.height,\n }\n}\n\n/** Puts a crop given in fractions onto the canvas, clamped to the picture. */\nconst applyCrop = (crop: CropRect) => {\n const bounds = imageBounds()\n if (!parts || bounds.width <= 0 || bounds.height <= 0) return\n applyRect(\n clampRectInside(\n {\n x: bounds.x + crop.x * bounds.width,\n y: bounds.y + crop.y * bounds.height,\n width: crop.width * bounds.width,\n height: crop.height * bounds.height,\n },\n constraintBounds(),\n props.aspectRatio\n )\n )\n}\n\nconst cropsAreClose = (a: CropRect | null, b: CropRect | null): boolean =>\n a !== null &&\n b !== null &&\n Math.abs(a.x - b.x) < 0.0005 &&\n Math.abs(a.y - b.y) < 0.0005 &&\n Math.abs(a.width - b.width) < 0.0005 &&\n Math.abs(a.height - b.height) < 0.0005\n\n/**\n * Hands the crop back up. Also called after the component itself has adjusted one — a stored region\n * rarely matches the configured ratio, and the binding should say where the crop really is rather\n * than where it was asked to be.\n */\nconst emitCrop = (alsoCommit = false) => {\n const crop = currentCrop()\n if (!crop) return\n if (alsoCommit || !cropsAreClose(crop, lastEmitted)) {\n lastEmitted = crop\n emit('update:modelValue', crop)\n }\n if (alsoCommit) emit('commit', crop)\n}\n\n/** The room the host has: its width, and the height that will actually be shown. */\nconst hostBox = (host: HTMLElement): Size => ({ width: host.clientWidth, height: visibleHeightOf(host) })\n\n/** Re-fit the image to the new container while keeping the crop the user already chose. */\nconst relayout = () => {\n const host = hostEl.value\n if (!parts || !host) return\n // A crop of no size means the last layout had none either — fall back to the bound one, which is\n // what a cropper built inside a closed panel has been holding all along.\n const wanted = currentCrop() ?? props.modelValue\n\n const size = sizeCanvas(parts.canvas, host, host.clientWidth)\n laidOut = hostBox(host)\n // Re-read the ancestors as well: a cropper can be moved between frames, and the one clipping it\n // now is the one whose height matters.\n observeAncestors(host)\n centerImage()\n if (size.width <= 0 || size.height <= 0) return\n\n if (wanted && wanted.width > 0) applyCrop(wanted)\n else applyModelOrSeed()\n emitCrop()\n}\n\nconst onHostBoxChanged = () => {\n const host = hostEl.value\n if (!host) return\n const box = hostBox(host)\n if (box.width <= 0 || box.height <= 0) return\n // Compared against the box the current layout was built for, so a size seen while the cropper was\n // still loading cannot be mistaken for one that has already been laid out.\n if (box.width === laidOut.width && box.height === laidOut.height) return\n if (!parts) return\n // Deferred a frame: resizing the canvas from inside the observer's own callback is what makes\n // Chromium report an undelivered-notification loop.\n requestAnimationFrame(() => relayout())\n}\n\n// Height counts as much as width: the DAM sizes the cropper with `calc(100vh - 160px)`, so a\n// shorter window shrinks the frame without touching its width.\nuseResizeObserver(hostEl, onHostBoxChanged)\n\n/** An ancestor that clips can change how much it shows without the host's own box moving at all. */\nconst observeAncestors = (host: HTMLElement) => {\n ancestorObserver?.disconnect()\n const ancestors = clippingAncestorsOf(host)\n if (ancestors.length === 0) {\n ancestorObserver = null\n return\n }\n ancestorObserver = new ResizeObserver(onHostBoxChanged)\n ancestors.forEach((ancestor) => ancestorObserver?.observe(ancestor))\n}\n\nwatch(\n () => props.src,\n () => {\n build()\n }\n)\n\nwatch(\n () => props.modelValue,\n (model) => {\n // Ignore the echo of what this component just handed up, or the two would write to each other\n // for as long as the parent keeps binding it back.\n if (!parts || !model || cropsAreClose(model, lastEmitted)) return\n applyCrop(model)\n emitCrop()\n },\n { deep: true }\n)\n\nwatch(\n () => props.shadeColor,\n (shadeColor) => {\n const shade = parts?.canvas.querySelector<CropperShade>(CropperShade.$name)\n if (shade) shade.themeColor = shadeColor\n }\n)\n\nwatch(\n () => props.aspectRatio,\n (aspectRatio) => {\n if (!parts) return\n parts.selection.aspectRatio = aspectRatio\n if (!isUsableAspectRatio(aspectRatio)) return\n const current = selectionRect()\n applyRect(clampRectInside({ ...current, height: current.width / aspectRatio }, constraintBounds(), aspectRatio))\n }\n)\n\nonMounted(() => {\n build()\n})\n\nonBeforeUnmount(() => {\n buildToken += 1\n teardown()\n})\n</script>\n\n<template>\n <div class=\"a-cropper d-flex flex-column\">\n <div\n v-if=\"loading\"\n class=\"d-flex w-100 align-center justify-center\"\n >\n <VProgressCircular\n class=\"position-absolute\"\n indeterminate\n />\n </div>\n\n <div\n ref=\"hostEl\"\n class=\"a-cropper__container\"\n :style=\"containerStyle\"\n @wheel.capture=\"onWheelCapture\"\n />\n </div>\n</template>\n\n<style lang=\"scss\">\n// `cropper-crosshair` sizes itself in `em`, so without a size of its own the centre marker would\n// grow and shrink with whatever font the surrounding admin happens to use. 7px is the plus sign\n// cropper.js v1 drew through `.cropper-center`.\n.a-cropper cropper-crosshair {\n font-size: 7px;\n}\n\n// cropper.js v1 drew a `.cropper-line` along each edge of the crop box: a 5px band of the selection\n// colour at a tenth opacity, sitting 3px outside the border and 2px inside it. It is what made the\n// thin outline read as a grabbable edge, so it is drawn here too — as a pair of shadows rather than\n// four elements, which keeps it independent of how the v2 grips happen to be sized.\n.a-cropper cropper-selection[outlined] {\n box-shadow:\n inset 0 0 0 2px rgb(51 153 255 / 10%),\n 0 0 0 3px rgb(51 153 255 / 10%);\n}\n</style>\n"],"mappings":""}
|
|
1
|
+
{"version":3,"file":"ACropper.js","names":["_sfc_main","ACropper_vue_vue_type_script_setup_true_lang_default","ACropper_default"],"sources":["../../../../../src/domains/dam/cropper/components/ACropper.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref, useTemplateRef, watch } from 'vue'\nimport { useResizeObserver } from '@vueuse/core'\nimport {\n CropperCanvas,\n CropperCrosshair,\n CropperGrid,\n CropperHandle,\n CropperImage,\n CropperSelection,\n CropperShade,\n} from 'cropperjs'\nimport {\n canvasSizeFor,\n clampRectInside,\n initialSelectionRect,\n isUsableAspectRatio,\n RESIZE_ANCHORS,\n rectsAreClose,\n type Rect,\n type Size,\n} from '@/domains/dam/cropper/utils/cropperGeometry'\nimport type { CropRect } from '@/domains/dam/cropper/utils/cropperTypes'\n\n/**\n * Image cropper built on cropper.js v2 custom elements. Replaces the v1-based `ACropperjs`.\n * Not exported. Its only user is `DamAssetImageRoiSelect`, and it is shaped to that one need.\n * The crop is bound via `v-model` as fractions of the image.\n * `commit` signals that a gesture ended. There is no imperative API.\n * Elements are built in script, not the template. Consumers do not configure `isCustomElement`,\n * and setting properties avoids attribute coercion issues (`NaN`, booleans, fractions).\n */\n\nconst props = withDefaults(\n defineProps<{\n src?: string\n /** The crop as fractions of the image. Null starts from the default box. */\n modelValue?: CropRect | null\n /** `NaN` (the default) leaves the crop free-form. */\n aspectRatio?: number\n containerStyle?: { [key: string]: string } | undefined\n /** Colour over everything outside the crop. Replaces overriding `.cropper-modal`. */\n shadeColor?: string\n }>(),\n {\n src: '',\n modelValue: null,\n aspectRatio: NaN,\n containerStyle: undefined,\n shadeColor: 'rgba(0, 0, 0, 0.5)',\n }\n)\n\nconst emit = defineEmits<{\n (event: 'update:modelValue', crop: CropRect): void\n /** The user finished a gesture. The crop is worth saving. */\n (event: 'commit', crop: CropRect): void\n (event: 'ready'): void\n}>()\n\n// cropper.js registers its elements as a side effect of its entry module. Our `sideEffects`\n// setting lets the consumer's bundler drop that module, so register them here.\n// `$define` is a no-op for an already registered element.\nfor (const element of [\n CropperCanvas,\n CropperCrosshair,\n CropperGrid,\n CropperHandle,\n CropperImage,\n CropperSelection,\n CropperShade,\n]) {\n element.$define()\n}\n\n/**\n * Settings the only caller never varies. Each is behaviour: no checkerboard behind a photo, wheel left\n * to the page, pinch zoom kept for tablets, and the minimum canvas size from cropper.js' stylesheet.\n */\nconst AUTO_CROP_AREA = 0.8\nconst MIN_CONTAINER_WIDTH = 200\nconst MIN_CONTAINER_HEIGHT = 100\n\n// Matches cropper.js v1's stylesheet so both components look the same.\nconst SELECTION_COLOR = 'rgba(51, 153, 255, 0.75)'\nconst FACE_COLOR = 'rgba(255, 255, 255, 0.1)'\nconst GRID_COLOR = 'rgba(238, 238, 238, 0.5)'\nconst CROSSHAIR_COLOR = 'rgba(238, 238, 238, 0.75)'\nconst RESIZE_ACTIONS = [\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n]\n\ninterface CropperParts {\n canvas: CropperCanvas\n image: CropperImage\n selection: CropperSelection\n}\n\nconst hostEl = useTemplateRef<HTMLDivElement>('hostEl')\nconst loading = ref(true)\n\nlet parts: CropperParts | null = null\nlet natural: Size = { width: 0, height: 0 }\n/** The action cropper.js is performing, so a clamp knows which edge to hold still. */\nlet currentAction: string | null = null\n/** Guards the re-entrant `$change` a clamp performs from being clamped again. */\nlet clamping = false\n/** Ignores the half-applied transforms `$center` emits between its move and its scale. */\nlet centring = false\n/** Invalidates an in-flight build when `src` changes or the component goes away mid-load. */\nlet buildToken = 0\n/** The host box the current layout was computed for, not the last one observed. */\nlet laidOut: Size = { width: 0, height: 0 }\n/** The last emitted crop, so a model written straight back is not treated as new. */\nlet lastEmitted: CropRect | null = null\n/** Watches ancestors that clip the host. Their height limits the available room. */\nlet ancestorObserver: ResizeObserver | null = null\n\nconst create = <T extends HTMLElement>(name: string): T => document.createElement(name) as T\n\n/** The image box in canvas coordinates. Read from layout so panning and zooming are included. */\nconst imageBounds = (): Rect => {\n if (!parts) return { x: 0, y: 0, width: 0, height: 0 }\n const canvasRect = parts.canvas.getBoundingClientRect()\n const imageRect = parts.image.getBoundingClientRect()\n return {\n x: imageRect.left - canvasRect.left,\n y: imageRect.top - canvasRect.top,\n width: imageRect.width,\n height: imageRect.height,\n }\n}\n\n/**\n * Where the crop may be: the image, but never outside the visible canvas.\n * They differ only when the image is zoomed past its frame. Then the frame wins, as in cropper.js v1.\n */\nconst constraintBounds = (): Rect => {\n if (!parts) return { x: 0, y: 0, width: 0, height: 0 }\n const image = imageBounds()\n const canvas = parts.canvas.getBoundingClientRect()\n const left = Math.max(image.x, 0)\n const top = Math.max(image.y, 0)\n const right = Math.min(image.x + image.width, canvas.width)\n const bottom = Math.min(image.y + image.height, canvas.height)\n return { x: left, y: top, width: Math.max(0, right - left), height: Math.max(0, bottom - top) }\n}\n\nconst selectionRect = (): Rect => {\n if (!parts) return { x: 0, y: 0, width: 0, height: 0 }\n const { x, y, width, height } = parts.selection\n return { x, y, width, height }\n}\n\nconst applyRect = (rect: Rect) => {\n if (!parts) return\n clamping = true\n parts.selection.$change(rect.x, rect.y, rect.width, rect.height, props.aspectRatio, true)\n clamping = false\n}\n\n/**\n * Re-fits the image to the canvas.\n * `$center` only scales and moves an image marked scalable and translatable. cropper.js allows\n * this itself only while loading, so the flags are set for the call and restored after.\n */\nconst centerImage = () => {\n if (!parts) return\n const { image } = parts\n const { scalable, translatable } = image\n centring = true\n image.scalable = true\n image.translatable = true\n image.$center('contain')\n image.scalable = scalable\n image.translatable = translatable\n centring = false\n}\n\n/**\n * The initial crop of a new picture. Not using cropper.js' `initialCoverage`,\n * because its deferred init runs after a `ready` handler has positioned the crop.\n * Measured against the image, not the canvas. They differ when the image is centred between margins.\n */\nconst seedInitialCrop = () => {\n if (!parts) return\n const bounds = imageBounds()\n if (bounds.width <= 0 || bounds.height <= 0) return\n const initial = initialSelectionRect(bounds, props.aspectRatio, AUTO_CROP_AREA)\n applyRect({ ...initial, x: initial.x + bounds.x, y: initial.y + bounds.y })\n}\n\nconst applyModelOrSeed = () => {\n const model = props.modelValue\n if (model && model.width > 0 && model.height > 0) applyCrop(model)\n else seedInitialCrop()\n emitCrop()\n}\n\n/** Pulls the selection back inside the image after the image moved. */\nconst refit = () => {\n if (!parts || centring) return\n const current = selectionRect()\n if (current.width <= 0 || current.height <= 0) return\n const fitted = clampRectInside(current, constraintBounds(), props.aspectRatio)\n if (!rectsAreClose(current, fitted)) applyRect(fitted)\n}\n\nconst onSelectionChange = (event: Event) => {\n if (clamping || !parts) return\n const detail = (event as CustomEvent<Rect>).detail\n if (!detail) return\n // cropper.js reverses the action when a grip is dragged past the opposite edge. It records\n // this on the canvas before emitting this event, one move ahead of the `action` event.\n // Prefer that value, and fall back in case a future version stops setting it.\n const liveAction = (parts.canvas as unknown as { $action?: unknown }).$action\n const action = typeof liveAction === 'string' && liveAction ? liveAction : currentAction\n const anchor = action ? RESIZE_ANCHORS[action] : undefined\n const clamped = clampRectInside(detail, constraintBounds(), props.aspectRatio, anchor)\n if (rectsAreClose(detail, clamped)) return\n // Rejecting the change and applying the clamped one keeps the crop sliding along the border instead of freezing.\n // The shade reads `defaultPrevented` and follows the new values.\n event.preventDefault()\n applyRect(clamped)\n}\n\nconst onActionStart = (event: Event) => {\n currentAction = (event as CustomEvent<{ action?: string }>).detail?.action ?? null\n}\n\nconst onAction = (event: Event) => {\n const action = (event as CustomEvent<{ action?: string }>).detail?.action\n // cropper.js turns a new \"select\" drag into a corner resize once the direction is known.\n // It reports the new action on the next move. Follow it so the anchor stays correct.\n if (action) currentAction = action\n}\n\nconst onActionEnd = () => {\n currentAction = null\n emitCrop(true)\n}\n\n/**\n * The canvas must never see a wheel event. Its handler always calls\n * `preventDefault()`, which would block page scrolling over the picture.\n * Pinch zoom still works because it arrives as pointer events.\n */\nconst onWheelCapture = (event: WheelEvent) => {\n event.stopPropagation()\n}\n\n/**\n * cropper.js emits `transform` before it writes the new matrix to the element style.\n * Re-fitting at once would measure the old image. After a zoom out the crop would hang over the edge of the new one.\n */\nconst onImageTransform = () => queueMicrotask(refit)\n\nconst teardown = () => {\n if (parts) {\n const { canvas, image, selection } = parts\n selection.removeEventListener('change', onSelectionChange)\n canvas.removeEventListener('actionstart', onActionStart)\n canvas.removeEventListener('action', onAction)\n canvas.removeEventListener('actionend', onActionEnd)\n image.removeEventListener('transform', onImageTransform)\n }\n // Every canvas, not only the one on `parts`. A superseded build still waiting\n // on its image has already added one to the DOM, and nothing tracks it.\n hostEl.value?.querySelectorAll(CropperCanvas.$name).forEach((canvas) => {\n // Disconnecting a `cropper-image` drops its listeners but keeps its request running.\n // The pending `$ready()` promise keeps this component alive until the server answers.\n canvas.querySelectorAll<CropperImage>(CropperImage.$name).forEach((image) => {\n if (image.$image) image.$image.src = ''\n })\n canvas.remove()\n })\n ancestorObserver?.disconnect()\n ancestorObserver = null\n parts = null\n natural = { width: 0, height: 0 }\n laidOut = { width: 0, height: 0 }\n currentAction = null\n}\n\n/**\n * How much of the host's height is actually shown.\n * Usually the host's own `max-height`, which `DamAssetImageRoiSelect` relies on. Ancestors\n * with `overflow: hidden` count too, because what they cut off cannot be scrolled into view.\n * Scrolling ancestors are ignored. There the rest is reachable by scrolling.\n */\nconst clippingAncestorsOf = (host: HTMLElement): HTMLElement[] => {\n const found: HTMLElement[] = []\n let ancestor = host.parentElement\n while (ancestor && ancestor !== document.body && ancestor !== document.documentElement) {\n const { overflowY } = window.getComputedStyle(ancestor)\n if (overflowY === 'hidden' || overflowY === 'clip') found.push(ancestor)\n ancestor = ancestor.parentElement\n }\n return found\n}\n\nconst visibleHeightOf = (host: HTMLElement): number => {\n let available = host.clientHeight\n const hostTop = host.getBoundingClientRect().top\n\n clippingAncestorsOf(host).forEach((ancestor) => {\n const rect = ancestor.getBoundingClientRect()\n // From where the host becomes visible to where the ancestor stops showing content.\n // The ancestor's top matters when the host starts above it.\n // Content off the top is as unreachable as content off the bottom.\n const room = rect.bottom - Math.max(rect.top, hostTop)\n if (room > 0) available = Math.min(available, room)\n })\n\n return available\n}\n\n/**\n * Sizes the canvas to the room the host gives it, in two passes.\n * The picture's height follows from its width, but a frame with\n * `max-height` only shows how much it reveals once it has content.\n * This keeps a tall picture in a short frame scaled to fit, as in v1. A\n * part cut off by `overflow: hidden` could not be reached by the crop.\n */\nconst sizeCanvas = (canvas: CropperCanvas, host: HTMLElement, availableWidth: number): Size => {\n const size = canvasSizeFor(natural, availableWidth, MIN_CONTAINER_WIDTH, MIN_CONTAINER_HEIGHT)\n canvas.style.width = `${size.width}px`\n canvas.style.height = `${size.height}px`\n\n const visibleHeight = visibleHeightOf(host)\n if (visibleHeight > 0 && visibleHeight < size.height) {\n size.height = Math.max(visibleHeight, MIN_CONTAINER_HEIGHT)\n canvas.style.height = `${size.height}px`\n }\n return size\n}\n\nconst buildSelectionChildren = (selection: CropperSelection) => {\n const grid = create<CropperGrid>(CropperGrid.$name)\n grid.rows = 3\n grid.columns = 3\n grid.covered = true\n grid.themeColor = GRID_COLOR\n grid.setAttribute('role', 'grid')\n selection.appendChild(grid)\n\n const crosshair = create<CropperCrosshair>(CropperCrosshair.$name)\n crosshair.centered = true\n crosshair.themeColor = CROSSHAIR_COLOR\n selection.appendChild(crosshair)\n\n const face = create<CropperHandle>(CropperHandle.$name)\n face.action = 'move'\n face.themeColor = FACE_COLOR\n selection.appendChild(face)\n\n RESIZE_ACTIONS.forEach((action) => {\n const handle = create<CropperHandle>(CropperHandle.$name)\n handle.action = action\n handle.themeColor = SELECTION_COLOR\n selection.appendChild(handle)\n })\n}\n\nconst build = async () => {\n const token = ++buildToken\n teardown()\n loading.value = true\n\n const host = hostEl.value\n if (!host || !props.src) {\n // Nothing to load. A visible spinner would make an empty cropper look stuck.\n loading.value = false\n return\n }\n\n const canvas = create<CropperCanvas>(CropperCanvas.$name)\n canvas.background = false\n canvas.themeColor = SELECTION_COLOR\n canvas.style.display = 'block'\n sizeCanvas(canvas, host, host.clientWidth)\n\n const image = create<CropperImage>(CropperImage.$name)\n image.alt = ''\n image.initialFit = 'contain'\n image.rotatable = false\n image.skewable = false\n image.translatable = false\n image.scalable = true\n image.src = props.src\n\n const shade = create<CropperShade>(CropperShade.$name)\n shade.themeColor = props.shadeColor\n // Hidden until the first crop box exists, or it would flash across the whole canvas.\n shade.hidden = true\n\n const selectHandle = create<CropperHandle>(CropperHandle.$name)\n selectHandle.action = 'select'\n selectHandle.plain = true\n\n const selection = create<CropperSelection>(CropperSelection.$name)\n selection.themeColor = SELECTION_COLOR\n selection.movable = true\n selection.resizable = true\n selection.outlined = true\n // Keep sub-pixel values. Rounding would drift the natural-pixel crop data that callers persist.\n selection.precise = true\n selection.aspectRatio = props.aspectRatio\n buildSelectionChildren(selection)\n\n // Listeners are added before anything is connected, so the current\n // action is known before the elements' own handlers react.\n canvas.addEventListener('actionstart', onActionStart)\n canvas.addEventListener('action', onAction)\n canvas.addEventListener('actionend', onActionEnd)\n image.addEventListener('transform', onImageTransform)\n selection.addEventListener('change', onSelectionChange)\n\n canvas.append(image, shade, selectHandle, selection)\n // Attach the whole tree at once. Each element links to its\n // siblings on connect, and the shade looks for the selection.\n // Appending children one by one leaves the shade on an empty canvas, and it never follows the crop.\n host.appendChild(canvas)\n // Second pass, now that the host has content for its constraints to act on.\n sizeCanvas(canvas, host, host.clientWidth)\n\n let loaded: HTMLImageElement\n try {\n // The element makes the only request. Its promise returns the loaded picture.\n loaded = await image.$ready()\n } catch {\n // Matches cropper.js v1, which never became ready on a broken source.\n canvas.remove()\n if (token === buildToken) loading.value = false\n return\n }\n if (token !== buildToken) {\n canvas.remove()\n return\n }\n\n parts = { canvas, image, selection }\n // The natural size is known only now. Sizing here avoids a separate request just to measure the image.\n natural = { width: loaded.naturalWidth, height: loaded.naturalHeight }\n sizeCanvas(canvas, host, host.clientWidth)\n\n // A prop changed during loading found no elements for the watchers to\n // update. Re-apply the two variable props. This is idempotent otherwise.\n shade.themeColor = props.shadeColor\n selection.aspectRatio = props.aspectRatio\n\n centerImage()\n\n laidOut = hostBox(host)\n observeAncestors(host)\n applyModelOrSeed()\n\n loading.value = false\n emit('ready')\n}\n\nconst currentCrop = (): CropRect | null => {\n if (!parts) return null\n const bounds = imageBounds()\n if (bounds.width <= 0 || bounds.height <= 0) return null\n const rect = selectionRect()\n return {\n x: (rect.x - bounds.x) / bounds.width,\n y: (rect.y - bounds.y) / bounds.height,\n width: rect.width / bounds.width,\n height: rect.height / bounds.height,\n }\n}\n\n/** Applies a crop given in fractions to the canvas, clamped to the picture. */\nconst applyCrop = (crop: CropRect) => {\n const bounds = imageBounds()\n if (!parts || bounds.width <= 0 || bounds.height <= 0) return\n applyRect(\n clampRectInside(\n {\n x: bounds.x + crop.x * bounds.width,\n y: bounds.y + crop.y * bounds.height,\n width: crop.width * bounds.width,\n height: crop.height * bounds.height,\n },\n constraintBounds(),\n props.aspectRatio\n )\n )\n}\n\nconst cropsAreClose = (a: CropRect | null, b: CropRect | null): boolean =>\n a !== null &&\n b !== null &&\n Math.abs(a.x - b.x) < 0.0005 &&\n Math.abs(a.y - b.y) < 0.0005 &&\n Math.abs(a.width - b.width) < 0.0005 &&\n Math.abs(a.height - b.height) < 0.0005\n\n/**\n * Emits the crop. Also called after the component adjusts the crop itself. A stored region\n * rarely matches the configured ratio, and the binding should show the actual crop.\n */\nconst emitCrop = (alsoCommit = false) => {\n const crop = currentCrop()\n if (!crop) return\n if (alsoCommit || !cropsAreClose(crop, lastEmitted)) {\n lastEmitted = crop\n emit('update:modelValue', crop)\n }\n if (alsoCommit) emit('commit', crop)\n}\n\n/** The host's room: its width and the height that is actually shown. */\nconst hostBox = (host: HTMLElement): Size => ({ width: host.clientWidth, height: visibleHeightOf(host) })\n\n/** Re-fits the image to the new container and keeps the user's crop. */\nconst relayout = () => {\n const host = hostEl.value\n if (!parts || !host) return\n // No crop means the last layout had no size. Fall back to the bound\n // crop, which a cropper built inside a closed panel has held all along.\n const wanted = currentCrop() ?? props.modelValue\n\n const size = sizeCanvas(parts.canvas, host, host.clientWidth)\n laidOut = hostBox(host)\n // Re-read the ancestors too. A cropper can move between frames,\n // and the current clipping ancestor is the one that matters.\n observeAncestors(host)\n centerImage()\n if (size.width <= 0 || size.height <= 0) return\n\n if (wanted && wanted.width > 0) applyCrop(wanted)\n else applyModelOrSeed()\n emitCrop()\n}\n\nconst onHostBoxChanged = () => {\n const host = hostEl.value\n if (!host) return\n const box = hostBox(host)\n if (box.width <= 0 || box.height <= 0) return\n // Compare with the box the current layout was built for, so a\n // size seen during loading is not treated as already laid out.\n if (box.width === laidOut.width && box.height === laidOut.height) return\n if (!parts) return\n // Deferred a frame. Resizing the canvas inside the observer\n // callback makes Chromium report an undelivered-notification loop.\n requestAnimationFrame(() => relayout())\n}\n\n// Height matters as much as width. The DAM sizes the cropper with `calc(100vh\n// - 160px)`, so a shorter window shrinks the frame without changing its width.\nuseResizeObserver(hostEl, onHostBoxChanged)\n\n/** A clipping ancestor can change how much it shows without the host box changing. */\nconst observeAncestors = (host: HTMLElement) => {\n ancestorObserver?.disconnect()\n const ancestors = clippingAncestorsOf(host)\n if (ancestors.length === 0) {\n ancestorObserver = null\n return\n }\n ancestorObserver = new ResizeObserver(onHostBoxChanged)\n ancestors.forEach((ancestor) => ancestorObserver?.observe(ancestor))\n}\n\nwatch(\n () => props.src,\n () => {\n build()\n }\n)\n\nwatch(\n () => props.modelValue,\n (model) => {\n // Ignore the echo of the crop just emitted. Otherwise parent and component would keep writing to each other.\n if (!parts || !model || cropsAreClose(model, lastEmitted)) return\n applyCrop(model)\n emitCrop()\n },\n { deep: true }\n)\n\nwatch(\n () => props.shadeColor,\n (shadeColor) => {\n const shade = parts?.canvas.querySelector<CropperShade>(CropperShade.$name)\n if (shade) shade.themeColor = shadeColor\n }\n)\n\nwatch(\n () => props.aspectRatio,\n (aspectRatio) => {\n if (!parts) return\n parts.selection.aspectRatio = aspectRatio\n if (!isUsableAspectRatio(aspectRatio)) return\n const current = selectionRect()\n applyRect(clampRectInside({ ...current, height: current.width / aspectRatio }, constraintBounds(), aspectRatio))\n }\n)\n\nonMounted(() => {\n build()\n})\n\nonBeforeUnmount(() => {\n buildToken += 1\n teardown()\n})\n</script>\n\n<template>\n <div class=\"a-cropper d-flex flex-column\">\n <div\n v-if=\"loading\"\n class=\"d-flex w-100 align-center justify-center\"\n >\n <VProgressCircular\n class=\"position-absolute\"\n indeterminate\n />\n </div>\n\n <div\n ref=\"hostEl\"\n class=\"a-cropper__container\"\n :style=\"containerStyle\"\n @wheel.capture=\"onWheelCapture\"\n />\n </div>\n</template>\n\n<style lang=\"scss\">\n// Full width even as a flex item, such as in the asset detail dialog. The canvas is sized from the\n// host's width, and a shrink-wrapped root has none to give, so every picture got the 200px minimum.\n.a-cropper {\n width: 100%;\n}\n\n// `cropper-crosshair` is sized in `em`. Without its own size the centre marker would scale with the admin's font.\n// 7px matches the plus sign of v1's `.cropper-center`.\n.a-cropper cropper-crosshair {\n font-size: 7px;\n}\n\n// Recreates v1's `.cropper-line` on each crop edge: a 5px band of the selection colour at 10%\n// opacity, 3px outside and 2px inside the border. It makes the outline read as a grabbable edge.\n// Drawn as two shadows, so it does not depend on the v2 grip sizes.\n.a-cropper cropper-selection[outlined] {\n box-shadow:\n inset 0 0 0 2px rgb(51 153 255 / 10%),\n 0 0 0 3px rgb(51 153 255 / 10%);\n}\n</style>\n"],"mappings":""}
|
|
@@ -1,30 +1,22 @@
|
|
|
1
1
|
import { CropRect } from '../utils/cropperTypes';
|
|
2
2
|
/**
|
|
3
|
-
* Image cropper built on cropper.js v2
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* The crop is bound, not fetched: `v-model` carries it as fractions of the image, and `commit` says
|
|
10
|
-
* the user has finished a gesture. There is no imperative surface — the one thing a host wants to do
|
|
11
|
-
* with a cropper is know where the crop is, and a binding says that better than six methods did.
|
|
12
|
-
*
|
|
13
|
-
* The elements are assembled in script rather than in the template on purpose: a consumer of this
|
|
14
|
-
* library does not configure `isCustomElement` in their own build, and setting element *properties*
|
|
15
|
-
* instead of going through attribute strings avoids the coercion surprises (`NaN`, booleans,
|
|
16
|
-
* fractional numbers) that come with the attribute round-trip.
|
|
3
|
+
* Image cropper built on cropper.js v2 custom elements. Replaces the v1-based `ACropperjs`.
|
|
4
|
+
* Not exported. Its only user is `DamAssetImageRoiSelect`, and it is shaped to that one need.
|
|
5
|
+
* The crop is bound via `v-model` as fractions of the image.
|
|
6
|
+
* `commit` signals that a gesture ended. There is no imperative API.
|
|
7
|
+
* Elements are built in script, not the template. Consumers do not configure `isCustomElement`,
|
|
8
|
+
* and setting properties avoids attribute coercion issues (`NaN`, booleans, fractions).
|
|
17
9
|
*/
|
|
18
10
|
type __VLS_Props = {
|
|
19
11
|
src?: string;
|
|
20
|
-
/** The crop
|
|
12
|
+
/** The crop as fractions of the image. Null starts from the default box. */
|
|
21
13
|
modelValue?: CropRect | null;
|
|
22
14
|
/** `NaN` (the default) leaves the crop free-form. */
|
|
23
15
|
aspectRatio?: number;
|
|
24
16
|
containerStyle?: {
|
|
25
17
|
[key: string]: string;
|
|
26
18
|
} | undefined;
|
|
27
|
-
/**
|
|
19
|
+
/** Colour over everything outside the crop. Replaces overriding `.cropper-modal`. */
|
|
28
20
|
shadeColor?: string;
|
|
29
21
|
};
|
|
30
22
|
declare const __VLS_export: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
@@ -5,12 +5,12 @@ import r from "../../../../vendor/@cropper/element-handle/dist/element-handle.es
|
|
|
5
5
|
import i from "../../../../vendor/@cropper/element-selection/dist/element-selection.esm.raw.js";
|
|
6
6
|
import a from "../../../../vendor/@cropper/element-grid/dist/element-grid.esm.raw.js";
|
|
7
7
|
import o from "../../../../vendor/@cropper/element-crosshair/dist/element-crosshair.esm.raw.js";
|
|
8
|
-
import "../../../../vendor/
|
|
8
|
+
import "../../../../vendor/cropperjs/dist/cropper.esm.raw.js";
|
|
9
9
|
import { RESIZE_ANCHORS as s, canvasSizeFor as c, clampRectInside as l, initialSelectionRect as u, isUsableAspectRatio as d, rectsAreClose as f } from "../utils/cropperGeometry.js";
|
|
10
10
|
import { createCommentVNode as ee, createElementBlock as p, createElementVNode as te, createVNode as ne, defineComponent as m, normalizeStyle as re, onBeforeUnmount as ie, onMounted as ae, openBlock as h, ref as oe, useTemplateRef as se, watch as g } from "vue";
|
|
11
11
|
import { useResizeObserver as ce } from "@vueuse/core";
|
|
12
12
|
import { VProgressCircular as le } from "vuetify/components/VProgressCircular";
|
|
13
|
-
|
|
13
|
+
// src/domains/dam/cropper/components/ACropper.vue?vue&type=script&setup=true&lang.ts
|
|
14
14
|
var ue = { class: "a-cropper d-flex flex-column" }, de = {
|
|
15
15
|
key: 0,
|
|
16
16
|
class: "d-flex w-100 align-center justify-center"
|
|
@@ -242,7 +242,7 @@ var ue = { class: "a-cropper d-flex flex-column" }, de = {
|
|
|
242
242
|
let e = S.value;
|
|
243
243
|
if (!w || !e) return;
|
|
244
244
|
let t = Se() ?? b.modelValue, n = J(w.canvas, e, e.clientWidth);
|
|
245
|
-
A = Q(e), $(e), R(),
|
|
245
|
+
A = Q(e), $(e), R(), n.width <= 0 || n.height <= 0 || (t && t.width > 0 ? X(t) : z(), Z());
|
|
246
246
|
}, Te = () => {
|
|
247
247
|
let e = S.value;
|
|
248
248
|
if (!e) return;
|
|
@@ -285,7 +285,6 @@ var ue = { class: "a-cropper d-flex flex-column" }, de = {
|
|
|
285
285
|
}, null, 36)]));
|
|
286
286
|
}
|
|
287
287
|
});
|
|
288
|
-
//#endregion
|
|
289
288
|
export { y as default };
|
|
290
289
|
|
|
291
290
|
//# sourceMappingURL=ACropper.vue_vue_type_script_setup_true_lang.js.map
|
package/dist/domains/dam/cropper/components/ACropper.vue_vue_type_script_setup_true_lang.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ACropper.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createVNode","_component_VProgressCircular","_createCommentVNode","_createElementVNode","_normalizeStyle","CropperCanvas","CropperImage","CropperShade","CropperHandle","CropperSelection","CropperGrid","CropperCrosshair","_hoisted_1","_hoisted_2","AUTO_CROP_AREA","MIN_CONTAINER_WIDTH","MIN_CONTAINER_HEIGHT","SELECTION_COLOR","FACE_COLOR","GRID_COLOR","CROSSHAIR_COLOR","ACropper_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emit","element","RESIZE_ACTIONS","hostEl","useTemplateRef","loading","ref","parts","natural","currentAction","clamping","centring","buildToken","laidOut","lastEmitted","ancestorObserver","create","name","imageBounds","canvasRect","imageRect","constraintBounds","image","canvas","left","top","right","bottom","selectionRect","applyRect","rect","centerImage","scalable","translatable","seedInitialCrop","bounds","initial","initialSelectionRect","applyModelOrSeed","model","applyCrop","emitCrop","refit","current","fitted","clampRectInside","rectsAreClose","onSelectionChange","detail","event","liveAction","action","anchor","RESIZE_ANCHORS","clamped","onActionStart","onAction","onActionEnd","onWheelCapture","onImageTransform","teardown","selection","clippingAncestorsOf","found","ancestor","host","overflowY","visibleHeightOf","available","hostTop","room","sizeCanvas","size","canvasSizeFor","availableWidth","visibleHeight","buildSelectionChildren","grid","crosshair","face","handle","build","token","shade","selectHandle","loaded","hostBox","observeAncestors","currentCrop","crop","cropsAreClose","a","b","alsoCommit","relayout","wanted","onHostBoxChanged","box","ancestors","watch","shadeColor","aspectRatio","isUsableAspectRatio","onMounted","onBeforeUnmount","openBlock","createElementBlock","createVNode","VProgressCircular","createCommentVNode","createElementVNode","normalizeStyle"],"sources":["../../../../../src/domains/dam/cropper/components/ACropper.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref, useTemplateRef, watch } from 'vue'\nimport { useResizeObserver } from '@vueuse/core'\nimport {\n CropperCanvas,\n CropperCrosshair,\n CropperGrid,\n CropperHandle,\n CropperImage,\n CropperSelection,\n CropperShade,\n} from 'cropperjs2'\nimport {\n canvasSizeFor,\n clampRectInside,\n initialSelectionRect,\n isUsableAspectRatio,\n RESIZE_ANCHORS,\n rectsAreClose,\n type Rect,\n type Size,\n} from '@/domains/dam/cropper/utils/cropperGeometry'\nimport type { CropRect } from '@/domains/dam/cropper/utils/cropperTypes'\n\n/**\n * Image cropper built on cropper.js v2's custom elements, replacing the v1-based `ACropperjs`.\n *\n * It lives here, beside `DamAssetImageRoiSelect`, because that is the only thing that uses it and\n * nothing outside this library does. It is not exported: shaping it to one need rather than to a\n * general audience is what keeps it to its size.\n *\n * The crop is bound, not fetched: `v-model` carries it as fractions of the image, and `commit` says\n * the user has finished a gesture. There is no imperative surface — the one thing a host wants to do\n * with a cropper is know where the crop is, and a binding says that better than six methods did.\n *\n * The elements are assembled in script rather than in the template on purpose: a consumer of this\n * library does not configure `isCustomElement` in their own build, and setting element *properties*\n * instead of going through attribute strings avoids the coercion surprises (`NaN`, booleans,\n * fractional numbers) that come with the attribute round-trip.\n */\n\nconst props = withDefaults(\n defineProps<{\n src?: string\n /** The crop, as fractions of the image. Leave it null to start from the default box. */\n modelValue?: CropRect | null\n /** `NaN` (the default) leaves the crop free-form. */\n aspectRatio?: number\n containerStyle?: { [key: string]: string } | undefined\n /** Wash over everything outside the crop — the replacement for overriding `.cropper-modal`. */\n shadeColor?: string\n }>(),\n {\n src: '',\n modelValue: null,\n aspectRatio: NaN,\n containerStyle: undefined,\n shadeColor: 'rgba(0, 0, 0, 0.5)',\n }\n)\n\nconst emit = defineEmits<{\n (event: 'update:modelValue', crop: CropRect): void\n /** The user has finished a gesture; the crop is worth saving. */\n (event: 'commit', crop: CropRect): void\n (event: 'ready'): void\n}>()\n\n// cropper.js registers its elements as a side effect of loading its entry, and this package's\n// `sideEffects` lets the consumer's bundler drop that module once only the classes are used. `$define`\n// is a no-op for an element that is already registered.\nfor (const element of [\n CropperCanvas,\n CropperCrosshair,\n CropperGrid,\n CropperHandle,\n CropperImage,\n CropperSelection,\n CropperShade,\n]) {\n element.$define()\n}\n\n/**\n * Settings the one caller never varies, kept as constants rather than as props nobody passes.\n * Each of them is behaviour, not preference: no checkerboard behind a photograph, the wheel left to\n * the page, pinch zoom kept for tablets, and the minimum canvas cropper.js' own stylesheet declares.\n */\nconst AUTO_CROP_AREA = 0.8\nconst MIN_CONTAINER_WIDTH = 200\nconst MIN_CONTAINER_HEIGHT = 100\n\n// Matched to cropper.js v1's stylesheet so the two components are indistinguishable side by side.\nconst SELECTION_COLOR = 'rgba(51, 153, 255, 0.75)'\nconst FACE_COLOR = 'rgba(255, 255, 255, 0.1)'\nconst GRID_COLOR = 'rgba(238, 238, 238, 0.5)'\nconst CROSSHAIR_COLOR = 'rgba(238, 238, 238, 0.75)'\nconst RESIZE_ACTIONS = [\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n]\n\ninterface CropperParts {\n canvas: CropperCanvas\n image: CropperImage\n selection: CropperSelection\n}\n\nconst hostEl = useTemplateRef<HTMLDivElement>('hostEl')\nconst loading = ref(true)\n\nlet parts: CropperParts | null = null\nlet natural: Size = { width: 0, height: 0 }\n/** The action cropper.js is currently performing, so a clamp knows which edge to hold still. */\nlet currentAction: string | null = null\n/** Guards the re-entrant `$change` a clamp performs from being clamped again. */\nlet clamping = false\n/** Guards the half-applied transforms `$center` emits between its move and its scale. */\nlet centring = false\n/** Invalidates an in-flight build when `src` changes or the component goes away mid-load. */\nlet buildToken = 0\n/** The host box the current layout was computed for — not merely the last one observed. */\nlet laidOut: Size = { width: 0, height: 0 }\n/** The last crop handed out, so a model written straight back is not mistaken for a new one. */\nlet lastEmitted: CropRect | null = null\n/** Watches the ancestors that clip the host; their height is part of the room it has. */\nlet ancestorObserver: ResizeObserver | null = null\n\nconst create = <T extends HTMLElement>(name: string): T => document.createElement(name) as T\n\n/** The image box in canvas coordinates. Read from layout so panning and zooming stay accounted for. */\nconst imageBounds = (): Rect => {\n if (!parts) return { x: 0, y: 0, width: 0, height: 0 }\n const canvasRect = parts.canvas.getBoundingClientRect()\n const imageRect = parts.image.getBoundingClientRect()\n return {\n x: imageRect.left - canvasRect.left,\n y: imageRect.top - canvasRect.top,\n width: imageRect.width,\n height: imageRect.height,\n }\n}\n\n/**\n * Where the crop is allowed to be: the image, but never outside the visible canvas. The two are the\n * same box until the image is zoomed past its frame, and then it is the frame that wins — cropper.js\n * v1 limited its crop box to the canvas and the container both, so a zoomed-in image never let the\n * crop wander off the part of it you could actually see.\n */\nconst constraintBounds = (): Rect => {\n if (!parts) return { x: 0, y: 0, width: 0, height: 0 }\n const image = imageBounds()\n const canvas = parts.canvas.getBoundingClientRect()\n const left = Math.max(image.x, 0)\n const top = Math.max(image.y, 0)\n const right = Math.min(image.x + image.width, canvas.width)\n const bottom = Math.min(image.y + image.height, canvas.height)\n return { x: left, y: top, width: Math.max(0, right - left), height: Math.max(0, bottom - top) }\n}\n\nconst selectionRect = (): Rect => {\n if (!parts) return { x: 0, y: 0, width: 0, height: 0 }\n const { x, y, width, height } = parts.selection\n return { x, y, width, height }\n}\n\nconst applyRect = (rect: Rect) => {\n if (!parts) return\n clamping = true\n parts.selection.$change(rect.x, rect.y, rect.width, rect.height, props.aspectRatio, true)\n clamping = false\n}\n\n/**\n * Re-fits the image to the canvas. cropper.js only lets `$center` scale and move an image that is\n * marked scalable and translatable — it grants itself that permission while the image is still\n * loading, but not afterwards — so the flags are lifted for the call and put back straight after.\n */\nconst centerImage = () => {\n if (!parts) return\n const { image } = parts\n const { scalable, translatable } = image\n centring = true\n image.scalable = true\n image.translatable = true\n image.$center('contain')\n image.scalable = scalable\n image.translatable = translatable\n centring = false\n}\n\n/**\n * The crop a fresh picture starts with. Computed here rather than handed to cropper.js'\n * `initialCoverage`, whose deferred initialisation would land *after* a `ready` handler had already\n * positioned the crop. It is measured against the image rather than the canvas, which are the same\n * box for a source wider than its container and are not once the image sits centred between margins.\n */\nconst seedInitialCrop = () => {\n if (!parts) return\n const bounds = imageBounds()\n if (bounds.width <= 0 || bounds.height <= 0) return\n const initial = initialSelectionRect(bounds, props.aspectRatio, AUTO_CROP_AREA)\n applyRect({ ...initial, x: initial.x + bounds.x, y: initial.y + bounds.y })\n}\n\n/** Uses the bound crop if there is one, and the default box if there is not. */\nconst applyModelOrSeed = () => {\n const model = props.modelValue\n if (model && model.width > 0 && model.height > 0) applyCrop(model)\n else seedInitialCrop()\n emitCrop()\n}\n\n/** Pulls the selection back inside the image after something moved the image out from under it. */\nconst refit = () => {\n if (!parts || centring) return\n const current = selectionRect()\n if (current.width <= 0 || current.height <= 0) return\n const fitted = clampRectInside(current, constraintBounds(), props.aspectRatio)\n if (!rectsAreClose(current, fitted)) applyRect(fitted)\n}\n\nconst onSelectionChange = (event: Event) => {\n if (clamping || !parts) return\n const detail = (event as CustomEvent<Rect>).detail\n if (!detail) return\n // cropper.js reverses the action when a grip is dragged through the opposite edge, and it records\n // that on the canvas just before emitting this event — one move ahead of the `action` event the\n // tracking below sees. Prefer its own answer, and fall back if a future version stops publishing it.\n const liveAction = (parts.canvas as unknown as { $action?: unknown }).$action\n const action = typeof liveAction === 'string' && liveAction ? liveAction : currentAction\n const anchor = action ? RESIZE_ANCHORS[action] : undefined\n const clamped = clampRectInside(detail, constraintBounds(), props.aspectRatio, anchor)\n if (rectsAreClose(detail, clamped)) return\n // Rejecting the change and re-issuing the clamped one is what keeps the crop sliding along the\n // border instead of freezing there; the shade reads `defaultPrevented` and follows the new values.\n event.preventDefault()\n applyRect(clamped)\n}\n\nconst onActionStart = (event: Event) => {\n currentAction = (event as CustomEvent<{ action?: string }>).detail?.action ?? null\n}\n\nconst onAction = (event: Event) => {\n const action = (event as CustomEvent<{ action?: string }>).detail?.action\n // cropper.js turns a fresh \"select\" drag into the matching corner resize once it knows the\n // direction, and reports the new action on the next move — follow it so the anchor stays right.\n if (action) currentAction = action\n}\n\nconst onActionEnd = () => {\n currentAction = null\n emitCrop(true)\n}\n\n/**\n * The canvas must never see a wheel event: its own handler calls `preventDefault()` unconditionally,\n * which would swallow page scrolling over the picture the way cropper.js v1 never did. Pinching is\n * unaffected — that arrives as pointer events, and the picture stays scalable for it.\n */\nconst onWheelCapture = (event: WheelEvent) => {\n event.stopPropagation()\n}\n\n/**\n * cropper.js emits `transform` *before* it writes the new matrix to the element's style (it sets the\n * new transform to measure the result, puts the old one back, then emits and finally commits). Re-\n * fitting straight away would therefore measure the image as it was: after a zoom out the crop would\n * be judged against the larger, previous picture and left hanging over the edge of the new one.\n */\nconst onImageTransform = () => queueMicrotask(refit)\n\nconst teardown = () => {\n if (parts) {\n const { canvas, image, selection } = parts\n selection.removeEventListener('change', onSelectionChange)\n canvas.removeEventListener('actionstart', onActionStart)\n canvas.removeEventListener('action', onAction)\n canvas.removeEventListener('actionend', onActionEnd)\n image.removeEventListener('transform', onImageTransform)\n }\n // Every canvas, not just the one on `parts`: a build that was superseded while still waiting on\n // its image has already put one in the DOM and has nothing tracking it yet.\n hostEl.value?.querySelectorAll(CropperCanvas.$name).forEach((canvas) => {\n // Disconnecting a `cropper-image` drops its listeners but leaves its request running, and the\n // `$ready()` promise waiting on it keeps this component reachable until the server answers.\n canvas.querySelectorAll<CropperImage>(CropperImage.$name).forEach((image) => {\n if (image.$image) image.$image.src = ''\n })\n canvas.remove()\n })\n ancestorObserver?.disconnect()\n ancestorObserver = null\n parts = null\n natural = { width: 0, height: 0 }\n laidOut = { width: 0, height: 0 }\n currentAction = null\n}\n\n/**\n * How much of the host's height will actually be shown.\n *\n * The host's own `max-height` is the usual answer, and the one `DamAssetImageRoiSelect` relies on.\n * Ancestors count too when they clip with `overflow: hidden` — what they cut off cannot be scrolled\n * back into view, so it is no more reachable than the host's own overflow. An ancestor that\n * scrolls is left alone: there the rest of the picture is a scroll away, not gone.\n */\nconst clippingAncestorsOf = (host: HTMLElement): HTMLElement[] => {\n const found: HTMLElement[] = []\n let ancestor = host.parentElement\n while (ancestor && ancestor !== document.body && ancestor !== document.documentElement) {\n const { overflowY } = window.getComputedStyle(ancestor)\n if (overflowY === 'hidden' || overflowY === 'clip') found.push(ancestor)\n ancestor = ancestor.parentElement\n }\n return found\n}\n\nconst visibleHeightOf = (host: HTMLElement): number => {\n let available = host.clientHeight\n const hostTop = host.getBoundingClientRect().top\n\n clippingAncestorsOf(host).forEach((ancestor) => {\n const rect = ancestor.getBoundingClientRect()\n // From wherever the host starts being visible down to where the ancestor stops showing anything.\n // Taking the ancestor's own top into account matters when the host begins above it: what is\n // scrolled or positioned off the top is just as unreachable as what falls off the bottom.\n const room = rect.bottom - Math.max(rect.top, hostTop)\n if (room > 0) available = Math.min(available, room)\n })\n\n return available\n}\n\n/**\n * Sizes the canvas to the room the host actually gives it, in two passes because the second answer\n * depends on the first: the height a picture wants follows from its width, but a frame with a\n * `max-height` only reveals how much of that it will show once something is in it.\n *\n * cropper.js v1 did the same dance with its `<img>`, and the point of it is that its cropper never\n * overflowed: a tall picture in a short frame was scaled down to fit rather than cut off at the\n * bottom, where the part of the crop hidden by `overflow: hidden` could not be reached again.\n */\nconst sizeCanvas = (canvas: CropperCanvas, host: HTMLElement, availableWidth: number): Size => {\n const size = canvasSizeFor(natural, availableWidth, MIN_CONTAINER_WIDTH, MIN_CONTAINER_HEIGHT)\n canvas.style.width = `${size.width}px`\n canvas.style.height = `${size.height}px`\n\n const visibleHeight = visibleHeightOf(host)\n if (visibleHeight > 0 && visibleHeight < size.height) {\n size.height = Math.max(visibleHeight, MIN_CONTAINER_HEIGHT)\n canvas.style.height = `${size.height}px`\n }\n return size\n}\n\nconst buildSelectionChildren = (selection: CropperSelection) => {\n const grid = create<CropperGrid>(CropperGrid.$name)\n grid.rows = 3\n grid.columns = 3\n grid.covered = true\n grid.themeColor = GRID_COLOR\n grid.setAttribute('role', 'grid')\n selection.appendChild(grid)\n\n const crosshair = create<CropperCrosshair>(CropperCrosshair.$name)\n crosshair.centered = true\n crosshair.themeColor = CROSSHAIR_COLOR\n selection.appendChild(crosshair)\n\n const face = create<CropperHandle>(CropperHandle.$name)\n face.action = 'move'\n face.themeColor = FACE_COLOR\n selection.appendChild(face)\n\n RESIZE_ACTIONS.forEach((action) => {\n const handle = create<CropperHandle>(CropperHandle.$name)\n handle.action = action\n handle.themeColor = SELECTION_COLOR\n selection.appendChild(handle)\n })\n}\n\nconst build = async () => {\n const token = ++buildToken\n teardown()\n loading.value = true\n\n const host = hostEl.value\n if (!host || !props.src) {\n // Nothing to wait for: leaving the spinner up would make an empty cropper look like a stuck one.\n loading.value = false\n return\n }\n\n const canvas = create<CropperCanvas>(CropperCanvas.$name)\n canvas.background = false\n canvas.themeColor = SELECTION_COLOR\n canvas.style.display = 'block'\n sizeCanvas(canvas, host, host.clientWidth)\n\n const image = create<CropperImage>(CropperImage.$name)\n image.alt = ''\n image.initialFit = 'contain'\n image.rotatable = false\n image.skewable = false\n image.translatable = false\n image.scalable = true\n image.src = props.src\n\n const shade = create<CropperShade>(CropperShade.$name)\n shade.themeColor = props.shadeColor\n // Kept out of the way until the first crop box exists, or it would flash across the whole canvas.\n shade.hidden = true\n\n const selectHandle = create<CropperHandle>(CropperHandle.$name)\n selectHandle.action = 'select'\n selectHandle.plain = true\n\n const selection = create<CropperSelection>(CropperSelection.$name)\n selection.themeColor = SELECTION_COLOR\n selection.movable = true\n selection.resizable = true\n selection.outlined = true\n // Keep sub-pixel values: rounding to whole canvas pixels would drift the natural-pixel crop data\n // that callers persist, and cropper.js v1 did not round either.\n selection.precise = true\n selection.aspectRatio = props.aspectRatio\n buildSelectionChildren(selection)\n\n // Listeners go on before anything is connected, so the action in flight is already known by the\n // time the elements' own handlers react to it.\n canvas.addEventListener('actionstart', onActionStart)\n canvas.addEventListener('action', onAction)\n canvas.addEventListener('actionend', onActionEnd)\n image.addEventListener('transform', onImageTransform)\n selection.addEventListener('change', onSelectionChange)\n\n canvas.append(image, shade, selectHandle, selection)\n // The whole tree is attached in one move on purpose: each element wires itself up to its siblings\n // when it connects, and the shade in particular goes looking for the selection. Appending the\n // children one at a time leaves it looking at an empty canvas, and it never follows the crop.\n host.appendChild(canvas)\n // Second pass, now that there is something in the host for its own constraints to act on.\n sizeCanvas(canvas, host, host.clientWidth)\n\n let loaded: HTMLImageElement\n try {\n // The element runs the one request there is; its promise carries the picture that arrived.\n loaded = await image.$ready()\n } catch {\n // Mirrors cropper.js v1, which simply never became ready on a broken source.\n canvas.remove()\n if (token === buildToken) loading.value = false\n return\n }\n if (token !== buildToken) {\n canvas.remove()\n return\n }\n\n parts = { canvas, image, selection }\n // Only now is the picture's own size known, so the canvas gets its real dimensions here rather\n // than from a second request made ahead of time purely to measure it.\n natural = { width: loaded.naturalWidth, height: loaded.naturalHeight }\n sizeCanvas(canvas, host, host.clientWidth)\n\n // A prop that changed while the picture was loading found the watchers with no elements to write\n // to. Re-reading the two that can vary closes that window; it is idempotent otherwise.\n shade.themeColor = props.shadeColor\n selection.aspectRatio = props.aspectRatio\n\n centerImage()\n\n laidOut = hostBox(host)\n observeAncestors(host)\n applyModelOrSeed()\n\n loading.value = false\n emit('ready')\n}\n\n/** Where the crop sits, as fractions of the image. */\nconst currentCrop = (): CropRect | null => {\n if (!parts) return null\n const bounds = imageBounds()\n if (bounds.width <= 0 || bounds.height <= 0) return null\n const rect = selectionRect()\n return {\n x: (rect.x - bounds.x) / bounds.width,\n y: (rect.y - bounds.y) / bounds.height,\n width: rect.width / bounds.width,\n height: rect.height / bounds.height,\n }\n}\n\n/** Puts a crop given in fractions onto the canvas, clamped to the picture. */\nconst applyCrop = (crop: CropRect) => {\n const bounds = imageBounds()\n if (!parts || bounds.width <= 0 || bounds.height <= 0) return\n applyRect(\n clampRectInside(\n {\n x: bounds.x + crop.x * bounds.width,\n y: bounds.y + crop.y * bounds.height,\n width: crop.width * bounds.width,\n height: crop.height * bounds.height,\n },\n constraintBounds(),\n props.aspectRatio\n )\n )\n}\n\nconst cropsAreClose = (a: CropRect | null, b: CropRect | null): boolean =>\n a !== null &&\n b !== null &&\n Math.abs(a.x - b.x) < 0.0005 &&\n Math.abs(a.y - b.y) < 0.0005 &&\n Math.abs(a.width - b.width) < 0.0005 &&\n Math.abs(a.height - b.height) < 0.0005\n\n/**\n * Hands the crop back up. Also called after the component itself has adjusted one — a stored region\n * rarely matches the configured ratio, and the binding should say where the crop really is rather\n * than where it was asked to be.\n */\nconst emitCrop = (alsoCommit = false) => {\n const crop = currentCrop()\n if (!crop) return\n if (alsoCommit || !cropsAreClose(crop, lastEmitted)) {\n lastEmitted = crop\n emit('update:modelValue', crop)\n }\n if (alsoCommit) emit('commit', crop)\n}\n\n/** The room the host has: its width, and the height that will actually be shown. */\nconst hostBox = (host: HTMLElement): Size => ({ width: host.clientWidth, height: visibleHeightOf(host) })\n\n/** Re-fit the image to the new container while keeping the crop the user already chose. */\nconst relayout = () => {\n const host = hostEl.value\n if (!parts || !host) return\n // A crop of no size means the last layout had none either — fall back to the bound one, which is\n // what a cropper built inside a closed panel has been holding all along.\n const wanted = currentCrop() ?? props.modelValue\n\n const size = sizeCanvas(parts.canvas, host, host.clientWidth)\n laidOut = hostBox(host)\n // Re-read the ancestors as well: a cropper can be moved between frames, and the one clipping it\n // now is the one whose height matters.\n observeAncestors(host)\n centerImage()\n if (size.width <= 0 || size.height <= 0) return\n\n if (wanted && wanted.width > 0) applyCrop(wanted)\n else applyModelOrSeed()\n emitCrop()\n}\n\nconst onHostBoxChanged = () => {\n const host = hostEl.value\n if (!host) return\n const box = hostBox(host)\n if (box.width <= 0 || box.height <= 0) return\n // Compared against the box the current layout was built for, so a size seen while the cropper was\n // still loading cannot be mistaken for one that has already been laid out.\n if (box.width === laidOut.width && box.height === laidOut.height) return\n if (!parts) return\n // Deferred a frame: resizing the canvas from inside the observer's own callback is what makes\n // Chromium report an undelivered-notification loop.\n requestAnimationFrame(() => relayout())\n}\n\n// Height counts as much as width: the DAM sizes the cropper with `calc(100vh - 160px)`, so a\n// shorter window shrinks the frame without touching its width.\nuseResizeObserver(hostEl, onHostBoxChanged)\n\n/** An ancestor that clips can change how much it shows without the host's own box moving at all. */\nconst observeAncestors = (host: HTMLElement) => {\n ancestorObserver?.disconnect()\n const ancestors = clippingAncestorsOf(host)\n if (ancestors.length === 0) {\n ancestorObserver = null\n return\n }\n ancestorObserver = new ResizeObserver(onHostBoxChanged)\n ancestors.forEach((ancestor) => ancestorObserver?.observe(ancestor))\n}\n\nwatch(\n () => props.src,\n () => {\n build()\n }\n)\n\nwatch(\n () => props.modelValue,\n (model) => {\n // Ignore the echo of what this component just handed up, or the two would write to each other\n // for as long as the parent keeps binding it back.\n if (!parts || !model || cropsAreClose(model, lastEmitted)) return\n applyCrop(model)\n emitCrop()\n },\n { deep: true }\n)\n\nwatch(\n () => props.shadeColor,\n (shadeColor) => {\n const shade = parts?.canvas.querySelector<CropperShade>(CropperShade.$name)\n if (shade) shade.themeColor = shadeColor\n }\n)\n\nwatch(\n () => props.aspectRatio,\n (aspectRatio) => {\n if (!parts) return\n parts.selection.aspectRatio = aspectRatio\n if (!isUsableAspectRatio(aspectRatio)) return\n const current = selectionRect()\n applyRect(clampRectInside({ ...current, height: current.width / aspectRatio }, constraintBounds(), aspectRatio))\n }\n)\n\nonMounted(() => {\n build()\n})\n\nonBeforeUnmount(() => {\n buildToken += 1\n teardown()\n})\n</script>\n\n<template>\n <div class=\"a-cropper d-flex flex-column\">\n <div\n v-if=\"loading\"\n class=\"d-flex w-100 align-center justify-center\"\n >\n <VProgressCircular\n class=\"position-absolute\"\n indeterminate\n />\n </div>\n\n <div\n ref=\"hostEl\"\n class=\"a-cropper__container\"\n :style=\"containerStyle\"\n @wheel.capture=\"onWheelCapture\"\n />\n </div>\n</template>\n\n<style lang=\"scss\">\n// `cropper-crosshair` sizes itself in `em`, so without a size of its own the centre marker would\n// grow and shrink with whatever font the surrounding admin happens to use. 7px is the plus sign\n// cropper.js v1 drew through `.cropper-center`.\n.a-cropper cropper-crosshair {\n font-size: 7px;\n}\n\n// cropper.js v1 drew a `.cropper-line` along each edge of the crop box: a 5px band of the selection\n// colour at a tenth opacity, sitting 3px outside the border and 2px inside it. It is what made the\n// thin outline read as a grabbable edge, so it is drawn here too — as a pair of shadows rather than\n// four elements, which keeps it independent of how the v2 grips happen to be sized.\n.a-cropper cropper-selection[outlined] {\n box-shadow:\n inset 0 0 0 2px rgb(51 153 255 / 10%),\n 0 0 0 3px rgb(51 153 255 / 10%);\n}\n</style>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ACropper.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createVNode","_component_VProgressCircular","_createCommentVNode","_createElementVNode","_normalizeStyle","CropperCanvas","CropperImage","CropperShade","CropperHandle","CropperSelection","CropperGrid","CropperCrosshair","_hoisted_1","_hoisted_2","AUTO_CROP_AREA","MIN_CONTAINER_WIDTH","MIN_CONTAINER_HEIGHT","SELECTION_COLOR","FACE_COLOR","GRID_COLOR","CROSSHAIR_COLOR","ACropper_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emit","element","RESIZE_ACTIONS","hostEl","useTemplateRef","loading","ref","parts","natural","currentAction","clamping","centring","buildToken","laidOut","lastEmitted","ancestorObserver","create","name","imageBounds","canvasRect","imageRect","constraintBounds","image","canvas","left","top","right","bottom","selectionRect","applyRect","rect","centerImage","scalable","translatable","seedInitialCrop","bounds","initial","initialSelectionRect","applyModelOrSeed","model","applyCrop","emitCrop","refit","current","fitted","clampRectInside","rectsAreClose","onSelectionChange","detail","event","liveAction","action","anchor","RESIZE_ANCHORS","clamped","onActionStart","onAction","onActionEnd","onWheelCapture","onImageTransform","teardown","selection","clippingAncestorsOf","found","ancestor","host","overflowY","visibleHeightOf","available","hostTop","room","sizeCanvas","size","canvasSizeFor","availableWidth","visibleHeight","buildSelectionChildren","grid","crosshair","face","handle","build","token","shade","selectHandle","loaded","hostBox","observeAncestors","currentCrop","crop","cropsAreClose","a","b","alsoCommit","relayout","wanted","onHostBoxChanged","box","ancestors","watch","shadeColor","aspectRatio","isUsableAspectRatio","onMounted","onBeforeUnmount","openBlock","createElementBlock","createVNode","VProgressCircular","createCommentVNode","createElementVNode","normalizeStyle"],"sources":["../../../../../src/domains/dam/cropper/components/ACropper.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { onBeforeUnmount, onMounted, ref, useTemplateRef, watch } from 'vue'\nimport { useResizeObserver } from '@vueuse/core'\nimport {\n CropperCanvas,\n CropperCrosshair,\n CropperGrid,\n CropperHandle,\n CropperImage,\n CropperSelection,\n CropperShade,\n} from 'cropperjs'\nimport {\n canvasSizeFor,\n clampRectInside,\n initialSelectionRect,\n isUsableAspectRatio,\n RESIZE_ANCHORS,\n rectsAreClose,\n type Rect,\n type Size,\n} from '@/domains/dam/cropper/utils/cropperGeometry'\nimport type { CropRect } from '@/domains/dam/cropper/utils/cropperTypes'\n\n/**\n * Image cropper built on cropper.js v2 custom elements. Replaces the v1-based `ACropperjs`.\n * Not exported. Its only user is `DamAssetImageRoiSelect`, and it is shaped to that one need.\n * The crop is bound via `v-model` as fractions of the image.\n * `commit` signals that a gesture ended. There is no imperative API.\n * Elements are built in script, not the template. Consumers do not configure `isCustomElement`,\n * and setting properties avoids attribute coercion issues (`NaN`, booleans, fractions).\n */\n\nconst props = withDefaults(\n defineProps<{\n src?: string\n /** The crop as fractions of the image. Null starts from the default box. */\n modelValue?: CropRect | null\n /** `NaN` (the default) leaves the crop free-form. */\n aspectRatio?: number\n containerStyle?: { [key: string]: string } | undefined\n /** Colour over everything outside the crop. Replaces overriding `.cropper-modal`. */\n shadeColor?: string\n }>(),\n {\n src: '',\n modelValue: null,\n aspectRatio: NaN,\n containerStyle: undefined,\n shadeColor: 'rgba(0, 0, 0, 0.5)',\n }\n)\n\nconst emit = defineEmits<{\n (event: 'update:modelValue', crop: CropRect): void\n /** The user finished a gesture. The crop is worth saving. */\n (event: 'commit', crop: CropRect): void\n (event: 'ready'): void\n}>()\n\n// cropper.js registers its elements as a side effect of its entry module. Our `sideEffects`\n// setting lets the consumer's bundler drop that module, so register them here.\n// `$define` is a no-op for an already registered element.\nfor (const element of [\n CropperCanvas,\n CropperCrosshair,\n CropperGrid,\n CropperHandle,\n CropperImage,\n CropperSelection,\n CropperShade,\n]) {\n element.$define()\n}\n\n/**\n * Settings the only caller never varies. Each is behaviour: no checkerboard behind a photo, wheel left\n * to the page, pinch zoom kept for tablets, and the minimum canvas size from cropper.js' stylesheet.\n */\nconst AUTO_CROP_AREA = 0.8\nconst MIN_CONTAINER_WIDTH = 200\nconst MIN_CONTAINER_HEIGHT = 100\n\n// Matches cropper.js v1's stylesheet so both components look the same.\nconst SELECTION_COLOR = 'rgba(51, 153, 255, 0.75)'\nconst FACE_COLOR = 'rgba(255, 255, 255, 0.1)'\nconst GRID_COLOR = 'rgba(238, 238, 238, 0.5)'\nconst CROSSHAIR_COLOR = 'rgba(238, 238, 238, 0.75)'\nconst RESIZE_ACTIONS = [\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n]\n\ninterface CropperParts {\n canvas: CropperCanvas\n image: CropperImage\n selection: CropperSelection\n}\n\nconst hostEl = useTemplateRef<HTMLDivElement>('hostEl')\nconst loading = ref(true)\n\nlet parts: CropperParts | null = null\nlet natural: Size = { width: 0, height: 0 }\n/** The action cropper.js is performing, so a clamp knows which edge to hold still. */\nlet currentAction: string | null = null\n/** Guards the re-entrant `$change` a clamp performs from being clamped again. */\nlet clamping = false\n/** Ignores the half-applied transforms `$center` emits between its move and its scale. */\nlet centring = false\n/** Invalidates an in-flight build when `src` changes or the component goes away mid-load. */\nlet buildToken = 0\n/** The host box the current layout was computed for, not the last one observed. */\nlet laidOut: Size = { width: 0, height: 0 }\n/** The last emitted crop, so a model written straight back is not treated as new. */\nlet lastEmitted: CropRect | null = null\n/** Watches ancestors that clip the host. Their height limits the available room. */\nlet ancestorObserver: ResizeObserver | null = null\n\nconst create = <T extends HTMLElement>(name: string): T => document.createElement(name) as T\n\n/** The image box in canvas coordinates. Read from layout so panning and zooming are included. */\nconst imageBounds = (): Rect => {\n if (!parts) return { x: 0, y: 0, width: 0, height: 0 }\n const canvasRect = parts.canvas.getBoundingClientRect()\n const imageRect = parts.image.getBoundingClientRect()\n return {\n x: imageRect.left - canvasRect.left,\n y: imageRect.top - canvasRect.top,\n width: imageRect.width,\n height: imageRect.height,\n }\n}\n\n/**\n * Where the crop may be: the image, but never outside the visible canvas.\n * They differ only when the image is zoomed past its frame. Then the frame wins, as in cropper.js v1.\n */\nconst constraintBounds = (): Rect => {\n if (!parts) return { x: 0, y: 0, width: 0, height: 0 }\n const image = imageBounds()\n const canvas = parts.canvas.getBoundingClientRect()\n const left = Math.max(image.x, 0)\n const top = Math.max(image.y, 0)\n const right = Math.min(image.x + image.width, canvas.width)\n const bottom = Math.min(image.y + image.height, canvas.height)\n return { x: left, y: top, width: Math.max(0, right - left), height: Math.max(0, bottom - top) }\n}\n\nconst selectionRect = (): Rect => {\n if (!parts) return { x: 0, y: 0, width: 0, height: 0 }\n const { x, y, width, height } = parts.selection\n return { x, y, width, height }\n}\n\nconst applyRect = (rect: Rect) => {\n if (!parts) return\n clamping = true\n parts.selection.$change(rect.x, rect.y, rect.width, rect.height, props.aspectRatio, true)\n clamping = false\n}\n\n/**\n * Re-fits the image to the canvas.\n * `$center` only scales and moves an image marked scalable and translatable. cropper.js allows\n * this itself only while loading, so the flags are set for the call and restored after.\n */\nconst centerImage = () => {\n if (!parts) return\n const { image } = parts\n const { scalable, translatable } = image\n centring = true\n image.scalable = true\n image.translatable = true\n image.$center('contain')\n image.scalable = scalable\n image.translatable = translatable\n centring = false\n}\n\n/**\n * The initial crop of a new picture. Not using cropper.js' `initialCoverage`,\n * because its deferred init runs after a `ready` handler has positioned the crop.\n * Measured against the image, not the canvas. They differ when the image is centred between margins.\n */\nconst seedInitialCrop = () => {\n if (!parts) return\n const bounds = imageBounds()\n if (bounds.width <= 0 || bounds.height <= 0) return\n const initial = initialSelectionRect(bounds, props.aspectRatio, AUTO_CROP_AREA)\n applyRect({ ...initial, x: initial.x + bounds.x, y: initial.y + bounds.y })\n}\n\nconst applyModelOrSeed = () => {\n const model = props.modelValue\n if (model && model.width > 0 && model.height > 0) applyCrop(model)\n else seedInitialCrop()\n emitCrop()\n}\n\n/** Pulls the selection back inside the image after the image moved. */\nconst refit = () => {\n if (!parts || centring) return\n const current = selectionRect()\n if (current.width <= 0 || current.height <= 0) return\n const fitted = clampRectInside(current, constraintBounds(), props.aspectRatio)\n if (!rectsAreClose(current, fitted)) applyRect(fitted)\n}\n\nconst onSelectionChange = (event: Event) => {\n if (clamping || !parts) return\n const detail = (event as CustomEvent<Rect>).detail\n if (!detail) return\n // cropper.js reverses the action when a grip is dragged past the opposite edge. It records\n // this on the canvas before emitting this event, one move ahead of the `action` event.\n // Prefer that value, and fall back in case a future version stops setting it.\n const liveAction = (parts.canvas as unknown as { $action?: unknown }).$action\n const action = typeof liveAction === 'string' && liveAction ? liveAction : currentAction\n const anchor = action ? RESIZE_ANCHORS[action] : undefined\n const clamped = clampRectInside(detail, constraintBounds(), props.aspectRatio, anchor)\n if (rectsAreClose(detail, clamped)) return\n // Rejecting the change and applying the clamped one keeps the crop sliding along the border instead of freezing.\n // The shade reads `defaultPrevented` and follows the new values.\n event.preventDefault()\n applyRect(clamped)\n}\n\nconst onActionStart = (event: Event) => {\n currentAction = (event as CustomEvent<{ action?: string }>).detail?.action ?? null\n}\n\nconst onAction = (event: Event) => {\n const action = (event as CustomEvent<{ action?: string }>).detail?.action\n // cropper.js turns a new \"select\" drag into a corner resize once the direction is known.\n // It reports the new action on the next move. Follow it so the anchor stays correct.\n if (action) currentAction = action\n}\n\nconst onActionEnd = () => {\n currentAction = null\n emitCrop(true)\n}\n\n/**\n * The canvas must never see a wheel event. Its handler always calls\n * `preventDefault()`, which would block page scrolling over the picture.\n * Pinch zoom still works because it arrives as pointer events.\n */\nconst onWheelCapture = (event: WheelEvent) => {\n event.stopPropagation()\n}\n\n/**\n * cropper.js emits `transform` before it writes the new matrix to the element style.\n * Re-fitting at once would measure the old image. After a zoom out the crop would hang over the edge of the new one.\n */\nconst onImageTransform = () => queueMicrotask(refit)\n\nconst teardown = () => {\n if (parts) {\n const { canvas, image, selection } = parts\n selection.removeEventListener('change', onSelectionChange)\n canvas.removeEventListener('actionstart', onActionStart)\n canvas.removeEventListener('action', onAction)\n canvas.removeEventListener('actionend', onActionEnd)\n image.removeEventListener('transform', onImageTransform)\n }\n // Every canvas, not only the one on `parts`. A superseded build still waiting\n // on its image has already added one to the DOM, and nothing tracks it.\n hostEl.value?.querySelectorAll(CropperCanvas.$name).forEach((canvas) => {\n // Disconnecting a `cropper-image` drops its listeners but keeps its request running.\n // The pending `$ready()` promise keeps this component alive until the server answers.\n canvas.querySelectorAll<CropperImage>(CropperImage.$name).forEach((image) => {\n if (image.$image) image.$image.src = ''\n })\n canvas.remove()\n })\n ancestorObserver?.disconnect()\n ancestorObserver = null\n parts = null\n natural = { width: 0, height: 0 }\n laidOut = { width: 0, height: 0 }\n currentAction = null\n}\n\n/**\n * How much of the host's height is actually shown.\n * Usually the host's own `max-height`, which `DamAssetImageRoiSelect` relies on. Ancestors\n * with `overflow: hidden` count too, because what they cut off cannot be scrolled into view.\n * Scrolling ancestors are ignored. There the rest is reachable by scrolling.\n */\nconst clippingAncestorsOf = (host: HTMLElement): HTMLElement[] => {\n const found: HTMLElement[] = []\n let ancestor = host.parentElement\n while (ancestor && ancestor !== document.body && ancestor !== document.documentElement) {\n const { overflowY } = window.getComputedStyle(ancestor)\n if (overflowY === 'hidden' || overflowY === 'clip') found.push(ancestor)\n ancestor = ancestor.parentElement\n }\n return found\n}\n\nconst visibleHeightOf = (host: HTMLElement): number => {\n let available = host.clientHeight\n const hostTop = host.getBoundingClientRect().top\n\n clippingAncestorsOf(host).forEach((ancestor) => {\n const rect = ancestor.getBoundingClientRect()\n // From where the host becomes visible to where the ancestor stops showing content.\n // The ancestor's top matters when the host starts above it.\n // Content off the top is as unreachable as content off the bottom.\n const room = rect.bottom - Math.max(rect.top, hostTop)\n if (room > 0) available = Math.min(available, room)\n })\n\n return available\n}\n\n/**\n * Sizes the canvas to the room the host gives it, in two passes.\n * The picture's height follows from its width, but a frame with\n * `max-height` only shows how much it reveals once it has content.\n * This keeps a tall picture in a short frame scaled to fit, as in v1. A\n * part cut off by `overflow: hidden` could not be reached by the crop.\n */\nconst sizeCanvas = (canvas: CropperCanvas, host: HTMLElement, availableWidth: number): Size => {\n const size = canvasSizeFor(natural, availableWidth, MIN_CONTAINER_WIDTH, MIN_CONTAINER_HEIGHT)\n canvas.style.width = `${size.width}px`\n canvas.style.height = `${size.height}px`\n\n const visibleHeight = visibleHeightOf(host)\n if (visibleHeight > 0 && visibleHeight < size.height) {\n size.height = Math.max(visibleHeight, MIN_CONTAINER_HEIGHT)\n canvas.style.height = `${size.height}px`\n }\n return size\n}\n\nconst buildSelectionChildren = (selection: CropperSelection) => {\n const grid = create<CropperGrid>(CropperGrid.$name)\n grid.rows = 3\n grid.columns = 3\n grid.covered = true\n grid.themeColor = GRID_COLOR\n grid.setAttribute('role', 'grid')\n selection.appendChild(grid)\n\n const crosshair = create<CropperCrosshair>(CropperCrosshair.$name)\n crosshair.centered = true\n crosshair.themeColor = CROSSHAIR_COLOR\n selection.appendChild(crosshair)\n\n const face = create<CropperHandle>(CropperHandle.$name)\n face.action = 'move'\n face.themeColor = FACE_COLOR\n selection.appendChild(face)\n\n RESIZE_ACTIONS.forEach((action) => {\n const handle = create<CropperHandle>(CropperHandle.$name)\n handle.action = action\n handle.themeColor = SELECTION_COLOR\n selection.appendChild(handle)\n })\n}\n\nconst build = async () => {\n const token = ++buildToken\n teardown()\n loading.value = true\n\n const host = hostEl.value\n if (!host || !props.src) {\n // Nothing to load. A visible spinner would make an empty cropper look stuck.\n loading.value = false\n return\n }\n\n const canvas = create<CropperCanvas>(CropperCanvas.$name)\n canvas.background = false\n canvas.themeColor = SELECTION_COLOR\n canvas.style.display = 'block'\n sizeCanvas(canvas, host, host.clientWidth)\n\n const image = create<CropperImage>(CropperImage.$name)\n image.alt = ''\n image.initialFit = 'contain'\n image.rotatable = false\n image.skewable = false\n image.translatable = false\n image.scalable = true\n image.src = props.src\n\n const shade = create<CropperShade>(CropperShade.$name)\n shade.themeColor = props.shadeColor\n // Hidden until the first crop box exists, or it would flash across the whole canvas.\n shade.hidden = true\n\n const selectHandle = create<CropperHandle>(CropperHandle.$name)\n selectHandle.action = 'select'\n selectHandle.plain = true\n\n const selection = create<CropperSelection>(CropperSelection.$name)\n selection.themeColor = SELECTION_COLOR\n selection.movable = true\n selection.resizable = true\n selection.outlined = true\n // Keep sub-pixel values. Rounding would drift the natural-pixel crop data that callers persist.\n selection.precise = true\n selection.aspectRatio = props.aspectRatio\n buildSelectionChildren(selection)\n\n // Listeners are added before anything is connected, so the current\n // action is known before the elements' own handlers react.\n canvas.addEventListener('actionstart', onActionStart)\n canvas.addEventListener('action', onAction)\n canvas.addEventListener('actionend', onActionEnd)\n image.addEventListener('transform', onImageTransform)\n selection.addEventListener('change', onSelectionChange)\n\n canvas.append(image, shade, selectHandle, selection)\n // Attach the whole tree at once. Each element links to its\n // siblings on connect, and the shade looks for the selection.\n // Appending children one by one leaves the shade on an empty canvas, and it never follows the crop.\n host.appendChild(canvas)\n // Second pass, now that the host has content for its constraints to act on.\n sizeCanvas(canvas, host, host.clientWidth)\n\n let loaded: HTMLImageElement\n try {\n // The element makes the only request. Its promise returns the loaded picture.\n loaded = await image.$ready()\n } catch {\n // Matches cropper.js v1, which never became ready on a broken source.\n canvas.remove()\n if (token === buildToken) loading.value = false\n return\n }\n if (token !== buildToken) {\n canvas.remove()\n return\n }\n\n parts = { canvas, image, selection }\n // The natural size is known only now. Sizing here avoids a separate request just to measure the image.\n natural = { width: loaded.naturalWidth, height: loaded.naturalHeight }\n sizeCanvas(canvas, host, host.clientWidth)\n\n // A prop changed during loading found no elements for the watchers to\n // update. Re-apply the two variable props. This is idempotent otherwise.\n shade.themeColor = props.shadeColor\n selection.aspectRatio = props.aspectRatio\n\n centerImage()\n\n laidOut = hostBox(host)\n observeAncestors(host)\n applyModelOrSeed()\n\n loading.value = false\n emit('ready')\n}\n\nconst currentCrop = (): CropRect | null => {\n if (!parts) return null\n const bounds = imageBounds()\n if (bounds.width <= 0 || bounds.height <= 0) return null\n const rect = selectionRect()\n return {\n x: (rect.x - bounds.x) / bounds.width,\n y: (rect.y - bounds.y) / bounds.height,\n width: rect.width / bounds.width,\n height: rect.height / bounds.height,\n }\n}\n\n/** Applies a crop given in fractions to the canvas, clamped to the picture. */\nconst applyCrop = (crop: CropRect) => {\n const bounds = imageBounds()\n if (!parts || bounds.width <= 0 || bounds.height <= 0) return\n applyRect(\n clampRectInside(\n {\n x: bounds.x + crop.x * bounds.width,\n y: bounds.y + crop.y * bounds.height,\n width: crop.width * bounds.width,\n height: crop.height * bounds.height,\n },\n constraintBounds(),\n props.aspectRatio\n )\n )\n}\n\nconst cropsAreClose = (a: CropRect | null, b: CropRect | null): boolean =>\n a !== null &&\n b !== null &&\n Math.abs(a.x - b.x) < 0.0005 &&\n Math.abs(a.y - b.y) < 0.0005 &&\n Math.abs(a.width - b.width) < 0.0005 &&\n Math.abs(a.height - b.height) < 0.0005\n\n/**\n * Emits the crop. Also called after the component adjusts the crop itself. A stored region\n * rarely matches the configured ratio, and the binding should show the actual crop.\n */\nconst emitCrop = (alsoCommit = false) => {\n const crop = currentCrop()\n if (!crop) return\n if (alsoCommit || !cropsAreClose(crop, lastEmitted)) {\n lastEmitted = crop\n emit('update:modelValue', crop)\n }\n if (alsoCommit) emit('commit', crop)\n}\n\n/** The host's room: its width and the height that is actually shown. */\nconst hostBox = (host: HTMLElement): Size => ({ width: host.clientWidth, height: visibleHeightOf(host) })\n\n/** Re-fits the image to the new container and keeps the user's crop. */\nconst relayout = () => {\n const host = hostEl.value\n if (!parts || !host) return\n // No crop means the last layout had no size. Fall back to the bound\n // crop, which a cropper built inside a closed panel has held all along.\n const wanted = currentCrop() ?? props.modelValue\n\n const size = sizeCanvas(parts.canvas, host, host.clientWidth)\n laidOut = hostBox(host)\n // Re-read the ancestors too. A cropper can move between frames,\n // and the current clipping ancestor is the one that matters.\n observeAncestors(host)\n centerImage()\n if (size.width <= 0 || size.height <= 0) return\n\n if (wanted && wanted.width > 0) applyCrop(wanted)\n else applyModelOrSeed()\n emitCrop()\n}\n\nconst onHostBoxChanged = () => {\n const host = hostEl.value\n if (!host) return\n const box = hostBox(host)\n if (box.width <= 0 || box.height <= 0) return\n // Compare with the box the current layout was built for, so a\n // size seen during loading is not treated as already laid out.\n if (box.width === laidOut.width && box.height === laidOut.height) return\n if (!parts) return\n // Deferred a frame. Resizing the canvas inside the observer\n // callback makes Chromium report an undelivered-notification loop.\n requestAnimationFrame(() => relayout())\n}\n\n// Height matters as much as width. The DAM sizes the cropper with `calc(100vh\n// - 160px)`, so a shorter window shrinks the frame without changing its width.\nuseResizeObserver(hostEl, onHostBoxChanged)\n\n/** A clipping ancestor can change how much it shows without the host box changing. */\nconst observeAncestors = (host: HTMLElement) => {\n ancestorObserver?.disconnect()\n const ancestors = clippingAncestorsOf(host)\n if (ancestors.length === 0) {\n ancestorObserver = null\n return\n }\n ancestorObserver = new ResizeObserver(onHostBoxChanged)\n ancestors.forEach((ancestor) => ancestorObserver?.observe(ancestor))\n}\n\nwatch(\n () => props.src,\n () => {\n build()\n }\n)\n\nwatch(\n () => props.modelValue,\n (model) => {\n // Ignore the echo of the crop just emitted. Otherwise parent and component would keep writing to each other.\n if (!parts || !model || cropsAreClose(model, lastEmitted)) return\n applyCrop(model)\n emitCrop()\n },\n { deep: true }\n)\n\nwatch(\n () => props.shadeColor,\n (shadeColor) => {\n const shade = parts?.canvas.querySelector<CropperShade>(CropperShade.$name)\n if (shade) shade.themeColor = shadeColor\n }\n)\n\nwatch(\n () => props.aspectRatio,\n (aspectRatio) => {\n if (!parts) return\n parts.selection.aspectRatio = aspectRatio\n if (!isUsableAspectRatio(aspectRatio)) return\n const current = selectionRect()\n applyRect(clampRectInside({ ...current, height: current.width / aspectRatio }, constraintBounds(), aspectRatio))\n }\n)\n\nonMounted(() => {\n build()\n})\n\nonBeforeUnmount(() => {\n buildToken += 1\n teardown()\n})\n</script>\n\n<template>\n <div class=\"a-cropper d-flex flex-column\">\n <div\n v-if=\"loading\"\n class=\"d-flex w-100 align-center justify-center\"\n >\n <VProgressCircular\n class=\"position-absolute\"\n indeterminate\n />\n </div>\n\n <div\n ref=\"hostEl\"\n class=\"a-cropper__container\"\n :style=\"containerStyle\"\n @wheel.capture=\"onWheelCapture\"\n />\n </div>\n</template>\n\n<style lang=\"scss\">\n// Full width even as a flex item, such as in the asset detail dialog. The canvas is sized from the\n// host's width, and a shrink-wrapped root has none to give, so every picture got the 200px minimum.\n.a-cropper {\n width: 100%;\n}\n\n// `cropper-crosshair` is sized in `em`. Without its own size the centre marker would scale with the admin's font.\n// 7px matches the plus sign of v1's `.cropper-center`.\n.a-cropper cropper-crosshair {\n font-size: 7px;\n}\n\n// Recreates v1's `.cropper-line` on each crop edge: a 5px band of the selection colour at 10%\n// opacity, 3px outside and 2px inside the border. It makes the outline read as a grabbable edge.\n// Drawn as two shadows, so it does not depend on the v2 grip sizes.\n.a-cropper cropper-selection[outlined] {\n box-shadow:\n inset 0 0 0 2px rgb(51 153 255 / 10%),\n 0 0 0 3px rgb(51 153 255 / 10%);\n}\n</style>\n"],"mappings":"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"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import e from "./DamAssetImageRoiSelect.vue_vue_type_script_setup_true_lang.js";
|
|
2
|
-
|
|
2
|
+
// src/domains/dam/cropper/components/DamAssetImageRoiSelect.vue
|
|
3
3
|
var t = e;
|
|
4
|
-
//#endregion
|
|
5
4
|
export { t as default };
|
|
6
5
|
|
|
7
6
|
//# sourceMappingURL=DamAssetImageRoiSelect.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DamAssetImageRoiSelect.js","names":["_sfc_main","DamAssetImageRoiSelect_vue_vue_type_script_setup_true_lang_default","DamAssetImageRoiSelect_default"],"sources":["../../../../../src/domains/dam/cropper/components/DamAssetImageRoiSelect.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onUnmounted, ref, watch } from 'vue'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport { useImageRoiStore } from '@/domains/dam/cropper/store/imageRoiStore'\nimport { updateRoi } from '@/domains/dam/api/damImageRoiApi'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport { cropToRegion, regionToCrop } from '@/domains/dam/cropper/utils/cropperJsService'\nimport ACropper from '@/domains/dam/cropper/components/ACropper.vue'\nimport type { CropRect } from '@/domains/dam/cropper/utils/cropperTypes'\nimport { useDamConfigState } from '@/domains/dam/config/composables/damConfigState'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport { isUndefined } from '@/shared/utils/common'\nimport { fetchImageFile } from '@/domains/dam/api/damImageApi'\nimport type { AssetFileImage } from '@/domains/dam/types/AssetFile'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\n\nconst props = withDefaults(\n defineProps<{\n extSystem: IntegerId\n configName?: string\n readonly?: boolean\n }>(),\n {\n configName: undefined,\n readonly: false,\n }\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\nconst { showRecordWas, showErrorsDefault } = useAlerts()\n\nconst cropperContainerStyle = { overflow: 'hidden', maxHeight: 'calc(100vh - 160px)' }\n//
|
|
1
|
+
{"version":3,"file":"DamAssetImageRoiSelect.js","names":["_sfc_main","DamAssetImageRoiSelect_vue_vue_type_script_setup_true_lang_default","DamAssetImageRoiSelect_default"],"sources":["../../../../../src/domains/dam/cropper/components/DamAssetImageRoiSelect.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { computed, onUnmounted, ref, watch } from 'vue'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport { useImageRoiStore } from '@/domains/dam/cropper/store/imageRoiStore'\nimport { updateRoi } from '@/domains/dam/api/damImageRoiApi'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport { cropToRegion, regionToCrop } from '@/domains/dam/cropper/utils/cropperJsService'\nimport ACropper from '@/domains/dam/cropper/components/ACropper.vue'\nimport type { CropRect } from '@/domains/dam/cropper/utils/cropperTypes'\nimport { useDamConfigState } from '@/domains/dam/config/composables/damConfigState'\nimport type { DocId, IntegerId } from '@/shared/types/common'\nimport { isUndefined } from '@/shared/utils/common'\nimport { fetchImageFile } from '@/domains/dam/api/damImageApi'\nimport type { AssetFileImage } from '@/domains/dam/types/AssetFile'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\n\nconst props = withDefaults(\n defineProps<{\n extSystem: IntegerId\n configName?: string\n readonly?: boolean\n }>(),\n {\n configName: undefined,\n readonly: false,\n }\n)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\nconst { showRecordWas, showErrorsDefault } = useAlerts()\n\nconst cropperContainerStyle = { overflow: 'hidden', maxHeight: 'calc(100vh - 160px)' }\n// Shade outside the region uses the admin's light grey instead of cropper.js' black.\n// The v2 elements style inside a shadow root, so the colour is passed in rather than set with a selector.\nconst cropperShadeColor = 'rgba(241, 244, 246, 0.5)'\n\nconst imageRoiStore = useImageRoiStore()\n\nconst { damClient, endPointImage, endPointRoi } = useCommonAdminCoreDamOptions(damConfigName)\nconst { getDamConfigExtSystem } = useDamConfigState(undefined, damConfigName)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst configExtSystem = getDamConfigExtSystem(props.extSystem)\n\nif (isUndefined(configExtSystem)) {\n throw new Error('DamAssetImageRoiSelect: Ext system must be initialised.')\n}\n\nconst imageUrl = computed(() => {\n if (imageRoiStore.imageFile && imageRoiStore.imageFile.links?.image_detail) {\n return imageRoiStore.imageFile.links.image_detail.url + '?manipulated=' + imageRoiStore.imageFile.manipulatedAt\n }\n return ''\n})\n\n/** The stored region in the cropper's format: fractions of the picture. */\nconst crop = ref<CropRect | null>(null)\n\nconst readStoredRegion = () => {\n const { roi, imageFile } = imageRoiStore\n crop.value =\n roi && imageFile ? regionToCrop(roi, imageFile.imageAttributes.width, imageFile.imageAttributes.height) : null\n}\nreadStoredRegion()\nwatch(() => imageRoiStore.roi, readStoredRegion)\n\n// Two seconds after a save, the region file is read again because the DAM has redrawn it.\n// The read result is applied only if the store still holds the same file, the saved region and the cropper. A\n// rotation, another slot or another asset changes the file. admin-dam's slot change removes the region at once.\n// Only the read after the latest save is applied. An older read answering last would bring back the earlier drawing.\n// The save and read use the cropper's own loader, never one someone else turned on.\n// `cropperBusy` tells the region panel to offer no refresh meanwhile. After the read, region\n// previews are redrawn. A cropper gone before its save answered does not wait for a redraw.\ninterface SavedRegion {\n save: number\n file: AssetFileImage\n regionId: DocId\n}\nlet unmounted = false\nlet reloadTimer: ReturnType<typeof setTimeout> | undefined\nlet savedRegions = 0\nconst saving = ref(false)\nconst loaderShown = computed(() => imageRoiStore.loader || saving.value)\nconst busy = (on: boolean) => {\n saving.value = on\n imageRoiStore.setCropperBusy(on)\n}\n// Pending saves and whether the read after the latest answered\n// save is still due. The cropper is busy until neither is left.\n// Two commits make two saves. The older one's end must not clear the busy state while the newer one waits.\n// A cropper that goes away clears the busy state, as the store flag may already belong to another cropper.\nlet savesPending = 0\nlet readPending = false\nconst settleBusy = () => {\n if (!unmounted) busy(savesPending > 0 || readPending)\n}\nconst isStillShown = (saved: SavedRegion) =>\n !unmounted &&\n saved.save === savedRegions &&\n imageRoiStore.imageFile === saved.file &&\n imageRoiStore.roi?.id === saved.regionId\n\nconst reloadSavedFile = async (saved: SavedRegion) => {\n try {\n if (!isStillShown(saved)) return\n try {\n const file = await fetchImageFile(damClient, endPointImage, saved.file.id)\n if (isStillShown(saved)) {\n imageRoiStore.setImageFile(file)\n imageRoiStore.forceReloadRoiPreviews()\n }\n } catch (error) {\n if (isStillShown(saved)) showErrorsDefault(error)\n }\n } finally {\n // A newer save waits for a read of its own.\n if (saved.save === savedRegions) {\n readPending = false\n settleBusy()\n }\n }\n}\n\nconst saveRoi = async (committed: CropRect) => {\n const { roi, imageFile } = imageRoiStore\n if (!roi || !imageFile || props.readonly) return\n\n const region = cropToRegion(committed, roi, imageFile.imageAttributes.width, imageFile.imageAttributes.height)\n savesPending++\n busy(true)\n try {\n await updateRoi(damClient, endPointRoi, region.id, region)\n showRecordWas('updated')\n if (unmounted) return\n const saved: SavedRegion = { save: ++savedRegions, file: imageFile, regionId: region.id }\n readPending = true\n clearTimeout(reloadTimer)\n reloadTimer = setTimeout(() => reloadSavedFile(saved), 2000)\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n savesPending--\n settleBusy()\n }\n}\n\nconst showCropper = computed(() => {\n if (imageRoiStore.imageFile && imageUrl.value.length > 0 && !loaderShown.value) {\n return true\n }\n return false\n})\n\nonUnmounted(() => {\n unmounted = true\n clearTimeout(reloadTimer)\n imageRoiStore.setCropperBusy(false)\n crop.value = null\n})\n</script>\n\n<template>\n <div\n v-if=\"loaderShown\"\n class=\"d-flex w-100 align-center justify-center\"\n >\n <VProgressCircular indeterminate />\n </div>\n <ACropper\n v-if=\"showCropper && configExtSystem.image && !readonly\"\n :key=\"imageRoiStore.imageFile?.manipulatedAt || 0\"\n v-model=\"crop\"\n :aspect-ratio=\"configExtSystem.image.roiWidth / configExtSystem.image.roiHeight\"\n :container-style=\"cropperContainerStyle\"\n :shade-color=\"cropperShadeColor\"\n :src=\"imageUrl\"\n @commit=\"saveRoi\"\n />\n <VImg\n v-else-if=\"showCropper\"\n :src=\"imageUrl\"\n :max-height=\"cropperContainerStyle.maxHeight\"\n data-cy=\"roi-readonly-image\"\n />\n</template>\n"],"mappings":""}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import u from "
|
|
1
|
+
import { useAlerts as e } from "../../../system/composables/alerts.js";
|
|
2
|
+
import { useImageRoiStore as t } from "../store/imageRoiStore.js";
|
|
3
|
+
import { updateRoi as n } from "../../api/damImageRoiApi.js";
|
|
4
|
+
import { useCommonAdminCoreDamOptions as r } from "../../composables/commonAdminCoreDamOptions.js";
|
|
5
|
+
import { cropToRegion as i, regionToCrop as a } from "../utils/cropperJsService.js";
|
|
6
|
+
import o from "./ACropper.js";
|
|
7
|
+
import { useDamConfigState as s } from "../../config/composables/damConfigState.js";
|
|
8
|
+
import { isUndefined as c } from "../../../../shared/utils/common.js";
|
|
9
|
+
import { fetchImageFile as l } from "../../api/damImageApi.js";
|
|
10
|
+
import { useDamConfigName as u } from "../../composables/damConfigName.js";
|
|
11
11
|
import { Fragment as d, computed as f, createBlock as p, createCommentVNode as m, createElementBlock as h, createVNode as g, defineComponent as _, onUnmounted as v, openBlock as y, ref as b, unref as x, watch as S } from "vue";
|
|
12
12
|
import { VProgressCircular as C } from "vuetify/components/VProgressCircular";
|
|
13
13
|
import { VImg as w } from "vuetify/components/VImg";
|
|
14
|
-
|
|
14
|
+
// src/domains/dam/cropper/components/DamAssetImageRoiSelect.vue?vue&type=script&setup=true&lang.ts
|
|
15
15
|
var T = {
|
|
16
16
|
key: 0,
|
|
17
17
|
class: "d-flex w-100 align-center justify-center"
|
|
@@ -26,14 +26,14 @@ var T = {
|
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
28
|
setup(_) {
|
|
29
|
-
let D = _, O =
|
|
29
|
+
let D = _, O = u(D.configName), { showRecordWas: k, showErrorsDefault: A } = e(), j = {
|
|
30
30
|
overflow: "hidden",
|
|
31
31
|
maxHeight: "calc(100vh - 160px)"
|
|
32
|
-
}, M =
|
|
33
|
-
if (
|
|
32
|
+
}, M = t(), { damClient: N, endPointImage: P, endPointRoi: F } = r(O), { getDamConfigExtSystem: I } = s(void 0, O), L = I(D.extSystem);
|
|
33
|
+
if (c(L)) throw Error("DamAssetImageRoiSelect: Ext system must be initialised.");
|
|
34
34
|
let R = f(() => M.imageFile && M.imageFile.links?.image_detail ? M.imageFile.links.image_detail.url + "?manipulated=" + M.imageFile.manipulatedAt : ""), z = b(null), B = () => {
|
|
35
35
|
let { roi: e, imageFile: t } = M;
|
|
36
|
-
z.value = e && t ?
|
|
36
|
+
z.value = e && t ? a(e, t.imageAttributes.width, t.imageAttributes.height) : null;
|
|
37
37
|
};
|
|
38
38
|
B(), S(() => M.roi, B);
|
|
39
39
|
let V = !1, H, U = 0, W = b(!1), G = f(() => M.loader || W.value), K = (e) => {
|
|
@@ -44,7 +44,7 @@ var T = {
|
|
|
44
44
|
try {
|
|
45
45
|
if (!X(e)) return;
|
|
46
46
|
try {
|
|
47
|
-
let t = await
|
|
47
|
+
let t = await l(N, P, e.file.id);
|
|
48
48
|
X(e) && (M.setImageFile(t), M.forceReloadRoiPreviews());
|
|
49
49
|
} catch (t) {
|
|
50
50
|
X(e) && A(t);
|
|
@@ -53,16 +53,16 @@ var T = {
|
|
|
53
53
|
e.save === U && (J = !1, Y());
|
|
54
54
|
}
|
|
55
55
|
}, Q = async (e) => {
|
|
56
|
-
let { roi: t, imageFile:
|
|
57
|
-
if (!t || !
|
|
58
|
-
let
|
|
56
|
+
let { roi: t, imageFile: r } = M;
|
|
57
|
+
if (!t || !r || D.readonly) return;
|
|
58
|
+
let a = i(e, t, r.imageAttributes.width, r.imageAttributes.height);
|
|
59
59
|
q++, K(!0);
|
|
60
60
|
try {
|
|
61
|
-
if (await
|
|
61
|
+
if (await n(N, F, a.id, a), k("updated"), V) return;
|
|
62
62
|
let e = {
|
|
63
63
|
save: ++U,
|
|
64
|
-
file:
|
|
65
|
-
regionId:
|
|
64
|
+
file: r,
|
|
65
|
+
regionId: a.id
|
|
66
66
|
};
|
|
67
67
|
J = !0, clearTimeout(H), H = setTimeout(() => Z(e), 2e3);
|
|
68
68
|
} catch (e) {
|
|
@@ -73,7 +73,7 @@ var T = {
|
|
|
73
73
|
}, $ = f(() => !!(M.imageFile && R.value.length > 0 && !G.value));
|
|
74
74
|
return v(() => {
|
|
75
75
|
V = !0, clearTimeout(H), M.setCropperBusy(!1), z.value = null;
|
|
76
|
-
}), (e, t) => (y(), h(d, null, [G.value ? (y(), h("div", T, [g(C, { indeterminate: "" })])) : m("", !0), $.value && x(L).image && !_.readonly ? (y(), p(
|
|
76
|
+
}), (e, t) => (y(), h(d, null, [G.value ? (y(), h("div", T, [g(C, { indeterminate: "" })])) : m("", !0), $.value && x(L).image && !_.readonly ? (y(), p(o, {
|
|
77
77
|
key: x(M).imageFile?.manipulatedAt || 0,
|
|
78
78
|
modelValue: z.value,
|
|
79
79
|
"onUpdate:modelValue": t[0] ||= (e) => z.value = e,
|
|
@@ -94,7 +94,6 @@ var T = {
|
|
|
94
94
|
}, null, 8, ["src", "max-height"])) : m("", !0)], 64));
|
|
95
95
|
}
|
|
96
96
|
});
|
|
97
|
-
//#endregion
|
|
98
97
|
export { D as default };
|
|
99
98
|
|
|
100
99
|
//# sourceMappingURL=DamAssetImageRoiSelect.vue_vue_type_script_setup_true_lang.js.map
|