@anzusystems/common-admin 2.0.0-rc.5 → 2.0.0-rc.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AnzuSystemsCommonAdmin.d.ts +42 -32
- package/dist/AnzuSystemsCommonAdmin.js.map +1 -1
- package/dist/common-admin.css +1 -1
- package/dist/common-admin.js +282 -282
- package/dist/domains/anzuUser/api/anzuUserApi.d.ts +9 -12
- package/dist/domains/anzuUser/api/anzuUserApi.js.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.js.map +1 -1
- package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserBulkActionDialog.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserBulkActionDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
- 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.map +1 -1
- package/dist/domains/anzuUser/components/AUserSystemOverview.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserSystemOverview.vue_vue_type_script_setup_true_lang.js.map +1 -1
- 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.map +1 -1
- package/dist/domains/anzuUser/components/AUserSystemStatusChip.js.map +1 -1
- package/dist/domains/anzuUser/components/AUserSystemStatusChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
- 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.map +1 -1
- package/dist/domains/anzuUser/composables/anzuUserActions.d.ts +5 -9
- 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.map +1 -1
- package/dist/domains/anzuUser/composables/cachedAnzuUsers.d.ts +3 -3
- 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.map +1 -1
- package/dist/domains/anzuUser/composables/userCrossSystemWrites.d.ts +5 -11
- 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.map +1 -1
- package/dist/domains/anzuUser/composables/userSystemProbe.d.ts +7 -27
- package/dist/domains/anzuUser/composables/userSystemProbe.js.map +1 -1
- package/dist/domains/anzuUser/filter/anzuUserFilter.d.ts +6 -16
- 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.map +1 -1
- package/dist/domains/anzuUser/store/userCrossSystemStore.d.ts +3 -14
- 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.map +1 -1
- package/dist/domains/anzuUser/utils/userSystemState.d.ts +12 -30
- 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.map +1 -1
- package/dist/domains/api/composables/defineApiClient.d.ts +4 -8
- package/dist/domains/api/composables/defineApiClient.js.map +1 -1
- package/dist/domains/api/composables/request.d.ts +18 -48
- 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.map +1 -1
- package/dist/domains/api/composables/useApiFetchItems.d.ts +18 -57
- 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.map +1 -1
- package/dist/domains/api/composables/useApiFetchListBatch.d.ts +5 -22
- package/dist/domains/api/composables/useApiFetchListBatch.js.map +1 -1
- 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.map +1 -1
- package/dist/domains/api/utils/apiErrors.d.ts +28 -55
- package/dist/domains/api/utils/apiErrors.js.map +1 -1
- package/dist/domains/api/utils/listBody.d.ts +22 -43
- package/dist/domains/api/utils/listBody.js.map +1 -1
- package/dist/domains/auth/components/Acl.js.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/cached/components/ACachedUserChip.js +1 -1
- 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.map +1 -1
- package/dist/domains/cached/composables/createUserAndTimeTrackingFields.d.ts +9 -9
- 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.map +1 -1
- package/dist/domains/cached/composables/useCachedItem.d.ts +7 -8
- package/dist/domains/cached/composables/useCachedItem.js.map +1 -1
- package/dist/domains/collab/components/ACollabLockedByUser.js.map +1 -1
- package/dist/domains/collab/components/ACollabLockedByUser.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/collab/composables/collabAnyDataChange.js.map +1 -1
- package/dist/domains/collab/composables/collabField.d.ts +5 -3
- package/dist/domains/collab/composables/collabField.js.map +1 -1
- package/dist/domains/collab/composables/collabInit.js +58 -54
- 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 +106 -106
- 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 +34 -25
- package/dist/domains/collab/composables/collabState.js.map +1 -1
- package/dist/domains/collab/composables/commonAdminCollabOptions.d.ts +4 -2
- package/dist/domains/collab/types/Collab.d.ts +31 -5
- package/dist/domains/collab/types/Collab.js +23 -11
- package/dist/domains/collab/types/Collab.js.map +1 -1
- 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.map +1 -1
- package/dist/domains/customDataForm/components/ACustomDataFormElement.js.map +1 -1
- package/dist/domains/customDataForm/components/ACustomDataFormElement.vue_vue_type_script_setup_true_lang.js.map +1 -1
- 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.map +1 -1
- package/dist/domains/customDataForm/composables/useCustomDataForm.js.map +1 -1
- package/dist/domains/customDataForm/types/CustomDataForm.d.ts +4 -1
- package/dist/domains/dam/api/damAssetApi.d.ts +7 -7
- 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.map +1 -1
- package/dist/domains/dam/api/damConstants.js.map +1 -1
- package/dist/domains/dam/api/damEndPoints.js.map +1 -1
- package/dist/domains/dam/api/damImageApi.js.map +1 -1
- package/dist/domains/dam/api/uploadApi.js.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsWrapper.vue.d.ts +5 -3
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue.d.ts +1 -1
- package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetImage.js.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetImage.vue.d.ts +1 -1
- 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.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue.d.ts +2 -2
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/dam/assetDetail/components/AssetMetadata.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.map +1 -1
- package/dist/domains/dam/assetDetail/composables/assetDetailView.d.ts +10 -10
- package/dist/domains/dam/assetDetail/composables/assetDetailView.js.map +1 -1
- package/dist/domains/dam/assetDetail/store/assetDetailStore.js.map +1 -1
- package/dist/domains/dam/assetDetail/utils/assetMetadataMayStillChange.d.ts +4 -3
- package/dist/domains/dam/assetDetail/utils/assetMetadataMayStillChange.js.map +1 -1
- package/dist/domains/dam/assetSelect/api/damPodcastApi.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AAssetListInner.js.map +1 -1
- package/dist/domains/dam/assetSelect/components/AAssetListInner.vue.d.ts +789 -787
- 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.map +1 -1
- package/dist/domains/dam/assetSelect/components/AAssetSelect.vue.d.ts +395 -393
- 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.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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/dam/assetSelect/composables/assetSelectListActions.js.map +1 -1
- package/dist/domains/dam/assetSelect/store/assetSelectStore.js.map +1 -1
- package/dist/domains/dam/author/api/authorApi.js.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.js +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/dam/author/composables/cachedAuthors.d.ts +5 -4
- 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.map +1 -1
- package/dist/domains/dam/author/composables/damAuthorConfig.d.ts +2 -2
- package/dist/domains/dam/author/composables/damAuthorConfig.js.map +1 -1
- package/dist/domains/dam/components/DamAdminAssetLink.js.map +1 -1
- 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 +10 -8
- 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.map +1 -1
- package/dist/domains/dam/composables/damNotifications.d.ts +9 -9
- 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.map +1 -1
- package/dist/domains/dam/composables/damNotificationsEventBus.d.ts +2 -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.map +1 -1
- package/dist/domains/dam/config/api/damAssetCustomFormApi.js.map +1 -1
- package/dist/domains/dam/config/api/damConfigApi.js.map +1 -1
- package/dist/domains/dam/config/composables/damConfigState.d.ts +5 -5
- 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.map +1 -1
- package/dist/domains/dam/config/utils/damFilterUserAllowedUploadConfigs.d.ts +3 -1
- package/dist/domains/dam/config/utils/damFilterUserAllowedUploadConfigs.js.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/dam/cropper/store/imageRoiStore.d.ts +9 -12
- 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.map +1 -1
- package/dist/domains/dam/cropper/utils/cropperJsService.d.ts +3 -7
- package/dist/domains/dam/cropper/utils/cropperJsService.js +10 -3
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/dam/imageWidget/components/AImageWidgetSimple.vue.d.ts +43 -41
- package/dist/domains/dam/imageWidget/components/AMediaWidgetSimple.vue.d.ts +31 -29
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetInner.js.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue.d.ts +402 -400
- 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.map +1 -1
- package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue.d.ts +384 -382
- 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.map +1 -1
- 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.map +1 -1
- 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.vue.d.ts +7 -5
- package/dist/domains/dam/imageWidget/composables/commonAdminImageOptions.js.map +1 -1
- package/dist/domains/dam/imageWidget/composables/imageApiCms.js.map +1 -1
- package/dist/domains/dam/imageWidget/composables/imageDialogDamAuthors.d.ts +11 -13
- package/dist/domains/dam/imageWidget/composables/imageDialogDamAuthors.js.map +1 -1
- package/dist/domains/dam/imageWidget/composables/useImageMassOperations.js.map +1 -1
- package/dist/domains/dam/imageWidget/store/imageMediaWidgetStore.js.map +1 -1
- 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.map +1 -1
- package/dist/domains/dam/imageWidget/utils/fieldLockTurns.d.ts +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.map +1 -1
- 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.map +1 -1
- package/dist/domains/dam/keyword/api/keywordApi.js.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.js +1 -1
- 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.map +1 -1
- package/dist/domains/dam/keyword/composables/cachedKeywords.d.ts +5 -4
- 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.map +1 -1
- package/dist/domains/dam/types/Asset.d.ts +1 -1
- package/dist/domains/dam/types/Asset.js.map +1 -1
- package/dist/domains/dam/types/UploadQueue.d.ts +5 -4
- package/dist/domains/dam/types/UploadQueue.js.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/dam/uploadQueue/components/uploadQueueBindings.d.ts +13 -13
- package/dist/domains/dam/uploadQueue/components/uploadQueueBindings.js.map +1 -1
- package/dist/domains/dam/uploadQueue/composables/damUploadChunkSize.d.ts +2 -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.map +1 -1
- package/dist/domains/dam/uploadQueue/composables/uploadQueueItemRefresh.d.ts +5 -5
- package/dist/domains/dam/uploadQueue/composables/uploadQueueItemRefresh.js.map +1 -1
- package/dist/domains/dam/uploadQueue/composables/uploadService.d.ts +2 -3
- 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.map +1 -1
- package/dist/domains/dam/uploadQueue/core/uploadQueueCore.d.ts +3 -2
- 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.map +1 -1
- package/dist/domains/dam/uploadQueue/core/uploadQueueFill.d.ts +3 -3
- package/dist/domains/dam/uploadQueue/core/uploadQueueFill.js.map +1 -1
- package/dist/domains/dam/uploadQueue/presets/queuePresets.d.ts +8 -5
- 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.map +1 -1
- package/dist/domains/dam/uploadQueue/settlement/uploadPollSchedule.d.ts +7 -7
- 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.map +1 -1
- package/dist/domains/dam/uploadQueue/settlement/uploadSettle.d.ts +28 -30
- 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.map +1 -1
- package/dist/domains/dam/uploadQueue/settlement/uploadSettlementRuntime.d.ts +2 -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.map +1 -1
- package/dist/domains/dam/uploadQueue/store/uploadQueuesStore.d.ts +8 -9
- package/dist/domains/dam/uploadQueue/store/uploadQueuesStore.js.map +1 -1
- package/dist/domains/dam/user/api/userApi.d.ts +2 -2
- package/dist/domains/dam/user/api/userApi.js.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/dam/user/composables/damUserSelectActions.d.ts +1 -1
- package/dist/domains/dam/user/composables/damUserSelectActions.js.map +1 -1
- package/dist/domains/dam/user/types/DamDistributionServiceType.d.ts +2 -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.map +1 -1
- 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.map +1 -1
- package/dist/domains/filters/bookmarks/store/bookmarksStore.d.ts +3 -3
- package/dist/domains/filters/bookmarks/store/bookmarksStore.js.map +1 -1
- package/dist/domains/filters/components/AFilterDatetimePicker.js.map +1 -1
- package/dist/domains/filters/components/AFilterDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/components/AFilterInteger.js.map +1 -1
- package/dist/domains/filters/components/AFilterInteger.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/components/AFilterString.js.map +1 -1
- package/dist/domains/filters/components/AFilterString.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/components/AFilterTimeInterval.js +1 -1
- 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.map +1 -1
- package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.js.map +1 -1
- package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/components/AFilterWrapper.vue.d.ts +17 -15
- package/dist/domains/filters/components/AFilterWrapperSidebar.vue.d.ts +5 -3
- package/dist/domains/filters/components/FiltersSelected.js.map +1 -1
- 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 +16 -26
- package/dist/domains/filters/composables/filterFactory.js +38 -31
- package/dist/domains/filters/composables/filterFactory.js.map +1 -1
- 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 +3 -1
- 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.map +1 -1
- package/dist/domains/filters/datatable/components/ADatatablePagination.vue_vue_type_script_setup_true_lang.js +2 -4
- package/dist/domains/filters/datatable/components/ADatatablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/filters/utils/filterInjectionKeys.js.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/form/components/AFormSwitch.vue.d.ts +7 -5
- 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.map +1 -1
- package/dist/domains/form/components/AFormTextarea.vue.d.ts +13 -11
- package/dist/domains/form/components/AFormValueObjectOptionsSelect.vue.d.ts +7 -5
- package/dist/domains/form/components/ASystemEntityScope.vue.d.ts +5 -3
- package/dist/domains/job/api/jobApi.js.map +1 -1
- package/dist/domains/job/components/AJobDetailCommon.vue.d.ts +5 -3
- package/dist/domains/listEditor/components/AListEditor.js.map +1 -1
- package/dist/domains/listEditor/components/AListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/listEditor/composables/useListEditorController.d.ts +4 -5
- package/dist/domains/listEditor/composables/useListEditorController.js.map +1 -1
- package/dist/domains/listEditor/composables/useNestedListEditor.d.ts +3 -4
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/listEditor/utils/resolveCompactText.js.map +1 -1
- package/dist/domains/log/api/logApi.d.ts +2 -3
- package/dist/domains/log/api/logApi.js.map +1 -1
- package/dist/domains/log/components/ALogDatatable.js.map +1 -1
- package/dist/domains/log/components/ALogDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
- 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.map +1 -1
- package/dist/domains/log/components/ALogFilter.js.map +1 -1
- package/dist/domains/log/components/ALogFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
- 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.map +1 -1
- package/dist/domains/log/composables/logActions.d.ts +4 -5
- 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.map +1 -1
- package/dist/domains/log/filter/logFilter.d.ts +8 -11
- package/dist/domains/log/filter/logFilter.js.map +1 -1
- 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.map +1 -1
- package/dist/domains/permission/composables/permissionActions.d.ts +3 -6
- 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.map +1 -1
- package/dist/domains/permission/config/composables/permissionConfigActions.d.ts +3 -7
- package/dist/domains/permission/config/composables/permissionConfigActions.js.map +1 -1
- package/dist/domains/permission/config/store/permissionConfigStore.d.ts +2 -4
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/permission/group/composables/permissionGroupValidations.d.ts +2 -3
- package/dist/domains/permission/group/composables/permissionGroupValidations.js.map +1 -1
- package/dist/domains/permission/group/filter/permissionGroupFilter.d.ts +2 -3
- 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.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocompleteWithCached.vue.d.ts +5 -3
- package/dist/domains/remoteAutocomplete/composables/createRemoteAutocomplete.d.ts +11 -13
- package/dist/domains/remoteAutocomplete/composables/createRemoteAutocomplete.js.map +1 -1
- package/dist/domains/subjectSelect/components/AFilterWrapperSubjectSelect.vue.d.ts +13 -11
- package/dist/domains/subjectSelect/components/ASubjectSelect.js.map +1 -1
- package/dist/domains/subjectSelect/components/ASubjectSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/subjectSelect/composables/useSubjectSelect.js +53 -51
- package/dist/domains/subjectSelect/composables/useSubjectSelect.js.map +1 -1
- package/dist/domains/system/appShell/components/AActionbar.vue.d.ts +7 -5
- 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.map +1 -1
- package/dist/domains/system/appShell/composables/teleportSlot.d.ts +0 -1
- package/dist/domains/system/appShell/composables/teleportSlot.js.map +1 -1
- package/dist/domains/system/components/AAlerts.js.map +1 -1
- package/dist/domains/system/components/AAlerts.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/system/composables/alerts.js.map +1 -1
- package/dist/domains/system/composables/breadcrumbs.d.ts +3 -3
- package/dist/domains/system/composables/breadcrumbs.js.map +1 -1
- package/dist/domains/system/composables/languageSettings.js.map +1 -1
- 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.map +1 -1
- package/dist/domains/system/composables/pageNavigation.d.ts +9 -10
- package/dist/domains/system/composables/pageNavigation.js.map +1 -1
- package/dist/domains/system/composables/recordActions.d.ts +14 -22
- package/dist/domains/system/composables/recordActions.js.map +1 -1
- package/dist/domains/system/composables/recordPage.d.ts +23 -38
- 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.map +1 -1
- package/dist/domains/system/composables/sentry.js.map +1 -1
- package/dist/domains/system/composables/useDebugFeatures.d.ts +3 -6
- package/dist/domains/system/composables/useDebugFeatures.js.map +1 -1
- package/dist/domains/system/store/datatablePageStore.d.ts +8 -1
- package/dist/domains/system/store/datatablePageStore.js +10 -3
- package/dist/domains/system/store/datatablePageStore.js.map +1 -1
- 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.map +1 -1
- package/dist/domains/system/systemBar/utils/appReload.d.ts +5 -5
- package/dist/domains/system/systemBar/utils/appReload.js.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/ui/buttons/components/ABtnSplit.vue.d.ts +9 -7
- package/dist/domains/ui/components/AAvatarColorPicker.js.map +1 -1
- package/dist/domains/ui/components/AAvatarColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
- 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 +6 -2
- package/dist/domains/ui/components/ACard.vue_vue_type_script_setup_true_lang.js.map +1 -1
- 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 +13 -7
- package/dist/domains/ui/components/ACardLoader.vue_vue_type_script_setup_true_lang.js.map +1 -1
- package/dist/domains/ui/components/AChipNoLink.vue.d.ts +5 -3
- package/dist/domains/ui/components/ACopyText.vue.d.ts +9 -7
- 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.map +1 -1
- package/dist/domains/ui/components/ADialogToolbar.vue.d.ts +5 -3
- package/dist/domains/ui/components/ARow.vue.d.ts +5 -3
- package/dist/domains/ui/components/ATimeTrackingFields.js.map +1 -1
- package/dist/domains/ui/components/ATimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
- 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.map +1 -1
- package/dist/domains/ui/datetime/components/ADatetimePicker.js +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/ui/file/composables/dropzone.js.map +1 -1
- package/dist/domains/ui/file/composables/formatAndSizeCheck.js.map +1 -1
- package/dist/domains/ui/view/components/AGenericView.vue.d.ts +7 -5
- package/dist/domains/ui/view/components/ALoginView.js +1 -1
- 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.map +1 -1
- 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.map +1 -1
- 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.map +1 -1
- package/dist/domains/unsavedGuard/composables/useUnsavedChangesGuard.d.ts +6 -7
- package/dist/domains/unsavedGuard/composables/useUnsavedChangesGuard.js.map +1 -1
- package/dist/lib.d.ts +2 -2
- package/dist/plugins/commonVuetifyConfig.d.ts +3 -3
- package/dist/plugins/commonVuetifyConfig.js.map +1 -1
- package/dist/plugins/i18n.d.ts +4 -5
- package/dist/plugins/i18n.js.map +1 -1
- package/dist/plugins/pluginOptions.d.ts +4 -2
- package/dist/plugins/pluginOptions.js.map +1 -1
- package/dist/plugins/webfontloader.js.map +1 -1
- package/dist/shared/error/AnzuApiCancelledError.d.ts +5 -8
- package/dist/shared/error/AnzuApiCancelledError.js.map +1 -1
- package/dist/shared/error/AnzuError.d.ts +3 -5
- package/dist/shared/error/AnzuError.js.map +1 -1
- package/dist/shared/error/AuthUnavailableError.d.ts +3 -3
- package/dist/shared/error/AuthUnavailableError.js.map +1 -1
- package/dist/shared/error/isInCauseChain.d.ts +2 -2
- package/dist/shared/error/isInCauseChain.js.map +1 -1
- 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/utils/common.js.map +1 -1
- package/dist/shared/utils/datetime.d.ts +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.map +1 -1
- package/dist/shared/utils/development.d.ts +3 -3
- package/dist/shared/utils/development.js.map +1 -1
- package/dist/shared/utils/envConfig.d.ts +4 -4
- package/dist/shared/utils/envConfig.js.map +1 -1
- package/dist/shared/utils/json.d.ts +1 -1
- package/dist/shared/utils/json.js.map +1 -1
- package/dist/shared/utils/userAndTimeTracking.d.ts +5 -7
- package/dist/shared/utils/userAndTimeTracking.js.map +1 -1
- package/dist/shared/validators/vuelidate/common/useValidateHexColor.d.ts +3 -5
- package/dist/shared/validators/vuelidate/common/useValidateHexColor.js.map +1 -1
- package/dist/testing/appShell.d.ts +11 -11
- package/dist/testing/appShell.js.map +1 -1
- package/dist/testing/closeButtons.d.ts +9 -11
- package/dist/testing/closeButtons.js.map +1 -1
- package/dist/testing/declaredDependencies.d.ts +7 -7
- package/dist/testing/declaredDependencies.js.map +1 -1
- package/dist/testing/generatedRoutes.d.ts +6 -11
- package/dist/testing/generatedRoutes.js.map +1 -1
- package/dist/testing/routeHistory.d.ts +5 -12
- package/dist/testing/routeHistory.js.map +1 -1
- package/dist/testing/sortableLists.d.ts +16 -21
- package/dist/testing/sortableLists.js.map +1 -1
- package/dist/testing/typedRouter.d.ts +0 -1
- package/dist/testing/typedRouter.js.map +1 -1
- package/package.json +27 -27
- package/src/eslint/adminConfig.mjs +19 -27
- package/src/eslint/globalComponentNames.mjs +3 -4
- 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
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ASortableListEditor.vue_vue_type_script_setup_true_lang.js","names":["$slots","_useModel","resolveCompactText","resolveCompactTextUtil","_openBlock","_createElementBlock","_normalizeClass","_unref","_createElementVNode","_renderSlot","_mergeProps","_toDisplayString","_createCommentVNode","_normalizeProps","_guardReactiveProps","_createVNode","LeStatus","_component_VBtn","_withCtx","_createTextVNode","_createBlock","_component_VIcon","_component_VTooltip","_component_VProgressCircular","_component_VAlert","LeEmptyState","_Fragment","_renderList","LeDragHandle","LeUnsavedLabel","_withModifiers","_component_VMenu","_component_VList","_component_VListItem","_component_VListItemTitle","LeMoveToPositionDialog","LeDeleteDialog","_isRef","LeDeleteDialog_default","LeMoveToPositionDialog_default","LeEmptyState_default","LeStatus_default","LeUnsavedLabel_default","LeDragHandle_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","ASortableListEditor_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","\"mode\"","\"modeModifiers\"","__expose","__emit","props","__props","emit","modelProp","useModel","pendingWrite","wroteDuringLoad","modelValue","customRef","current","v","trigger","nextTick","mode","useI18n","slots","useSlots","rootEl","useTemplateRef","useContainerWidth","isTouch","useIsTouchDevice","hasCoarsePointer","useHasCoarsePointer","controllerOptions","stateEntry","useListEditorStateEntry","controller","useListEditorController","cleanAtLoadStart","now","getKeyOpt","rowStateScope","provideListEditorStateScope","keyOf","item","positionFieldName","computed","p","viewItems","raw","vi","expandedKeys","ref","movedKeys","sessionDeferredDeletes","sessionImmediateDeletes","sessionAddedKeys","sessionMovedKeys","snapshot","shallowRef","rowsContainer","isInlineEdit","hasReadonlyDetail","useInlineEditing","key","data","it","hit","canInteract","canEnterReorder","embeddedRef","allowEditInReorderRef","useReorderMode","cloneDeep","m","clearEditing","items","payload","err","childContributions","shallowReactive","provide","SharedReorderRegistryKey","id","totalMovedCount","sum","movedCount","c","totalHasPendingChanges","hasPendingChanges","totalPendingCount","totalPendingChanges","parent","inject","validateAllSelf","onBeforeUnmount","canAdd","reorderMode","dragEnabled","addLabelResolved","t","emptyTitleResolved","deleteConfirmTitleResolved","deleteConfirmTextResolved","reorderToggleVisible","compactReorderButton","isNarrow","unsavedCount","unsavedCountVisible","headerVisible","headerHasContent","showInlineSaveFooter","markMoved","decoratorCache","viewItemsDecorated","total","next","liveKeys","editing","editingKeys","expanded","loading","moved","unsaved","dirty","validationState","canMoveUp","canMoveDown","cached","decorated","isEmpty","findVi","openRow","beginEdit","openAll","validateAllAndReveal","keyboardNav","useKeyboardNav","onEditClick","onCloseClick","moveUp","moveDown","moveTop","moveBottom","cancelReorderMode","moveToPositionDialogOpen","moveToPositionTarget","moveToPositionLabel","resolveCompactText$1","openMoveToPosition","onMoveToPositionConfirm","target","newIndex","resolveCompactText","sortable","useSortable","DRAG_GHOST_CLASS","DRAG_CHOSEN_CLASS","DRAG_CLASS","event","oldIndex","from","el","n","stringToInt","onAddClick","requestAutoOpen","onRowAddAfterClick","onExpandClick","currentlyExpanded","k","isRowClickable","onRowClick","triggerDeleteClick","useDeleteDialog","editingSnapshots","deferred","onDeleteClick","savingKeys","onSaveClick","commitEdit","onCancelClick","closeEdit","keyAtIndex","idx","actionsCache","getActions","actions","buildSlotProps","toolbarSlotProps","applying","applyError","applyReorder","reorderToggleSlotProps","useUnsavedSection","savedItems","selfValid","valid","child","openBlock","createElementBlock","normalizeClass","unref","createElementVNode","renderSlot","_ctx","mergeProps","toDisplayString","createCommentVNode","normalizeProps","guardReactiveProps","createVNode","VBtn","withCtx","createTextVNode","createBlock","enterReorderMode","VIcon","VTooltip","VProgressCircular","VAlert","Fragment","renderList","$event","withModifiers","VMenu","VList","VListItem","VListItemTitle","_cache","deleteDialog","isRef","deleteError","deleteInFlight","onDeleteDialogConfirm","onDeleteDialogCancel"],"sources":["../../../../src/domains/listEditor/components/ASortableListEditor.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"TItem extends Record<string, any>\">\nimport {\n customRef,\n nextTick,\n computed,\n inject,\n onBeforeUnmount,\n provide,\n ref,\n shallowReactive,\n shallowRef,\n useSlots,\n useTemplateRef,\n watch,\n type ComputedRef,\n} from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useContainerWidth } from '@/domains/listEditor/composables/useContainerWidth'\nimport { useHasCoarsePointer, useIsTouchDevice } from '@/domains/listEditor/composables/useIsTouchDevice'\nimport { useKeyboardNav } from '@/domains/listEditor/composables/useKeyboardNav'\nimport { useSortable } from '@vueuse/integrations/useSortable'\nimport {\n useListEditorController,\n type GetKey,\n type ListEditorHandle,\n type ListEditorValidationResult,\n type PositionAction,\n type PositionOption,\n type PositionStrategy,\n} from '@/domains/listEditor/composables/useListEditorController'\nimport {\n provideListEditorStateScope,\n useListEditorStateEntry,\n type ListEditorStateBindings,\n} from '@/domains/listEditor/composables/useListEditorStateScope'\nimport { resolveCompactText as resolveCompactTextUtil } from '@/domains/listEditor/utils/resolveCompactText'\nimport { useUnsavedSection } from '@/domains/unsavedGuard/composables/useUnsavedSection'\nimport { useDeleteDialog } from '@/domains/listEditor/composables/useDeleteDialog'\nimport { useInlineEditing } from '@/domains/listEditor/composables/useInlineEditing'\nimport { validateAllAndReveal } from '@/domains/listEditor/utils/revealInvalidRows'\nimport { useListEditorScopeValidity } from '@/domains/listEditor/composables/useListEditorScopeValidity'\nimport {\n useReorderMode,\n SharedReorderRegistryKey,\n type SharedReorderRegistry,\n} from '@/domains/listEditor/composables/useReorderMode'\nimport LeDeleteDialog from '@/domains/listEditor/components/internal/LeDeleteDialog.vue'\nimport LeMoveToPositionDialog from '@/domains/listEditor/components/internal/LeMoveToPositionDialog.vue'\nimport LeEmptyState from '@/domains/listEditor/components/internal/LeEmptyState.vue'\nimport LeStatus from '@/domains/listEditor/components/internal/LeStatus.vue'\nimport LeUnsavedLabel from '@/domains/listEditor/components/internal/LeUnsavedLabel.vue'\nimport LeDragHandle from '@/domains/listEditor/components/internal/LeDragHandle.vue'\nimport { DRAG_GHOST_CLASS, DRAG_CHOSEN_CLASS, DRAG_CLASS } from '@/domains/listEditor/components/internal/constants'\nimport { cloneDeep } from '@/shared/utils/common'\nimport { stringToInt } from '@/shared/utils/string'\nimport type {\n ListEditorKey,\n ListEditorValidationScope,\n ListEditorValidationState,\n ListViewItem,\n} from '@/domains/listEditor/types/listEditorTypes'\n\nexport interface DecoratedViewItem<T> extends ListViewItem<T> {\n editing: boolean\n expanded: boolean\n loading: boolean\n dirty: boolean\n moved: boolean\n unsaved: boolean\n validationState: ListEditorValidationState\n canMoveUp: boolean\n canMoveDown: boolean\n}\n\nexport type ReorderMode = 'view' | 'reorder'\n\n// Public slot scope shapes — see AListEditor for the hoisting rationale.\nexport interface RowActions<TItem> {\n edit: () => void\n save: () => Promise<void> | void\n cancel: () => void\n close: () => void\n delete: () => Promise<void>\n addAfter: () => void\n toggleExpand: () => void\n moveUp: () => void\n moveDown: () => void\n moveTop: () => void\n moveBottom: () => void\n update: (next: TItem | Partial<TItem> | ((current: TItem) => TItem)) => void\n}\nexport interface RowSlotProps<TItem extends Record<string, any>> {\n item: DecoratedViewItem<TItem>\n raw: TItem\n index: number\n key: ListEditorKey\n readonly: boolean\n disabled: boolean\n expanded: boolean\n editing: boolean\n dirty: boolean\n unsaved: boolean\n reorderMode: boolean\n moved: boolean\n canMoveUp: boolean\n canMoveDown: boolean\n touch: boolean\n /**\n * Row-scoped `state-key` prefix. Thread it down to any list editor rendered in this slot and set\n * its `:state-key=\"`${stateKeyPrefix}:someList`\"` — that editor's controller then lives in THIS\n * editor's scope and survives the row collapsing (which unmounts the whole slot subtree). Entries\n * under this prefix are disposed when the row is removed.\n */\n stateKeyPrefix: string\n actions: RowActions<TItem>\n}\nexport interface ToolbarSlotProps {\n applying: boolean\n hasPendingChanges: boolean\n movedCount: number\n error: string | null\n actions: { apply: () => Promise<void>; cancel: () => void }\n}\nexport interface ReorderToggleSlotProps {\n mode: ReorderMode\n disabled: boolean\n hasPendingChanges: boolean\n actions: { enterReorderMode: () => void; exitReorderMode: () => void }\n}\nexport interface HeaderSlotProps extends ReorderToggleSlotProps {\n title: string | null\n}\nexport interface EmptySlotProps {\n readonly: boolean\n disabled: boolean\n actions: { add: () => void }\n}\nexport interface AddButtonSlotProps {\n readonly: boolean\n disabled: boolean\n props: { onClick: () => void }\n actions: { add: () => void }\n}\nexport interface ViewBodySlotProps<TItem extends Record<string, any>> {\n items: TItem[]\n mode: ReorderMode\n actions: { enterReorderMode: () => void }\n}\n\nexport interface Props<TItem extends Record<string, any>> {\n /**\n * New-row factory (required). The add button + \"add after this item\" insert\n * `factory()` into the model directly through the controller (positions\n * renumbered) — no consumer `@add` push handler is needed.\n */\n factory?: () => TItem\n /**\n * Stable row identity. Default `'id'`. Never point this at the position field.\n * Typed `string` (not `keyof TItem`): a bare `keyof TItem` on a generic\n * component compiles to a Boolean-only runtime type that coerces `get-key=\"id\"` to `true`.\n */\n getKey?: string | ((item: TItem) => ListEditorKey)\n /**\n * Managed order field. Default `'position'`. `false` opts out. Typed `string`\n * before `false` so the runtime prop type is `[String, Boolean, Object]`:\n * `keyof TItem` would be Boolean-only, and `false` listed first would coerce\n * `position=\"position\"` (value == prop name) to `true`.\n */\n position?:\n | string\n | false\n | {\n field: string\n multiplier?: number\n strategy?: PositionStrategy\n strategyOverrides?: Partial<Record<PositionAction, PositionStrategy>>\n }\n /**\n * Extra fields to drop from the dirty content-hash (position is always\n * dropped). Use when a SEPARATE nested editor tracks a row's child collection,\n * so editing a child doesn't flip the parent amber. The field is still saved.\n */\n dirtyExclude?: string[]\n /** Per-row validity — `true` (or `{ valid: true }`) = VALID. Drives the red rail + save guard. */\n validate?: (item: TItem) => ListEditorValidationResult\n /**\n * Vuelidate `$scope` (the same one the consumer's row forms / save-gate collector use). When set,\n * the editor registers its aggregate validity under it, so a plain `v$.$invalid` save gate blocks\n * AND reveals a collapsed invalid row — no `validateAll()` call needed in the save flow. Omit to\n * keep legacy behavior (gate the save on the exposed `validateAll()` yourself); `false` opts out.\n */\n validationScope?: ListEditorValidationScope | false\n /**\n * Opt-in lifted state controller (from consumer's `useListEditorController()`)\n * so editor state survives this component's unmount/remount (pinned-widget\n * relocation). When omitted the editor owns an internal controller.\n */\n editor?: ListEditorHandle<TItem>\n /**\n * Persist this editor's controller in the nearest ANCESTOR editor's row-state scope under this\n * key, instead of owning it. Use it for an editor rendered in another editor's `#item` slot: that\n * slot is behind a `v-if`, so collapsing the row unmounts this editor and a component-owned\n * controller would re-baseline the already-edited data on re-expand (losing amber, moved rows,\n * tombstones and the red rail). Derive the key from the row slot's `stateKeyPrefix`, e.g.\n * `:state-key=\"`${stateKeyPrefix}:answers`\"`. Options stay declared here, on this tag: the\n * controller is built from THIS editor's `factory`/`get-key`/`position`/`dirty-exclude`/`validate`\n * and rebound to each new instance's model on remount. Ignored when `:editor` is passed, and a\n * no-op without an ancestor scope.\n */\n stateKey?: string\n\n readonly?: boolean\n disabled?: boolean\n loading?: boolean\n error?: string | null\n\n /** Heading above the list. A ready translated string, like every text prop here. */\n title?: string | null\n\n /**\n * Field shown in a collapsed row when no `#item-compact` slot is given. A dotted path reads\n * through nested objects (`texts.title`); a path that runs into nothing renders empty.\n */\n compactField?: string | null\n statusField?: string | null\n twoRows?: 'never' | 'mobile' | 'always'\n chips?: boolean\n\n showAddButton?: boolean\n showDeleteButton?: boolean\n showEditButton?: boolean\n showAddAfterAction?: boolean\n\n /** Label of the add button. A ready translated string; omit it for the library's own wording. */\n addLabel?: string | null\n /** Heading of the empty state. A ready translated string. */\n emptyTitle?: string | null\n\n disableRowClick?: boolean\n disableDeleteConfirm?: boolean\n /**\n * Disable unsaved-state tracking — no dirty markers, never reads as unsaved. For a list that is a\n * VIEW of data owned elsewhere (a display cache rebuilt from a parent's field, say): nothing in\n * such a component can ever clear an amber row, so it must not raise one. Mirrors `AListEditor`.\n */\n disableUnsaved?: boolean\n deleteConfirmTitle?: string | null\n deleteConfirmText?: string | null\n /**\n * How a row delete persists. `deferred` (default): the row disappears but the deletion counts as an\n * unconfirmed change until save (revertible until then, incl. via reorder Cancel). `immediate`: the\n * consumer deletes on the backend — the dialog says it is irreversible and it does NOT read as unsaved.\n */\n deleteMode?: 'immediate' | 'deferred'\n\n closeVariant?: 'auto' | 'icon' | 'labeled'\n\n loadingKeys?: Set<ListEditorKey> | null\n\n showReorderToggle?: boolean\n disableReorder?: boolean\n disableDrag?: boolean\n showMoveToPosition?: boolean\n\n /**\n * Embedded mode — nested inside another editor's `#item` slot, following a\n * shared `v-model:mode`. Hides own Reorder button + toolbar, skips the\n * snapshot/restore (the outer editor's deep snapshot covers nested data), and\n * paints lighter chrome. Pair with `v-model:mode` bound to the outer ref.\n */\n embedded?: boolean\n /**\n * Keep rows inline-editable in reorder mode. By default entering reorder\n * closes any open edit and hides the `#item` body to focus on dragging. Set\n * for a shared-reorder pair's parent, where the open row exposes its embedded\n * answers list for dragging.\n */\n allowEditInReorder?: boolean\n\n onDeleteConfirm?: (item: TItem) => Promise<boolean> | boolean\n onDelete?: (item: TItem) => Promise<void> | void\n onItemSave?: (item: TItem) => Promise<void> | void\n onReorderApply?: (items: TItem[]) => Promise<void> | void\n\n /** Register as a named unsaved-changes section under this (translated) label. */\n unsavedSectionLabel?: string\n}\n\nconst props = withDefaults(defineProps<Props<TItem>>(), {\n factory: undefined,\n getKey: undefined,\n position: undefined,\n dirtyExclude: undefined,\n validate: undefined,\n validationScope: undefined,\n editor: undefined,\n stateKey: undefined,\n readonly: false,\n disabled: false,\n loading: false,\n error: null,\n title: null,\n compactField: null,\n statusField: null,\n twoRows: 'never',\n chips: false,\n showAddButton: true,\n showDeleteButton: true,\n showEditButton: true,\n showAddAfterAction: false,\n addLabel: null,\n emptyTitle: null,\n disableRowClick: false,\n disableDeleteConfirm: false,\n disableUnsaved: false,\n deleteConfirmTitle: null,\n deleteConfirmText: null,\n deleteMode: 'deferred',\n closeVariant: 'auto',\n loadingKeys: null,\n showReorderToggle: true,\n disableReorder: false,\n disableDrag: false,\n showMoveToPosition: false,\n embedded: false,\n allowEditInReorder: false,\n onDeleteConfirm: undefined,\n onDelete: undefined,\n onItemSave: undefined,\n onReorderApply: undefined,\n unsavedSectionLabel: undefined,\n})\n\nconst emit = defineEmits<{\n edit: [item: ListViewItem<TItem>]\n deleted: [item: ListViewItem<TItem>]\n close: [item: ListViewItem<TItem>]\n 'item-saved': [item: ListViewItem<TItem>]\n 'item-expand': [item: ListViewItem<TItem>, expanded: boolean]\n 'reorder-start': []\n 'reorder-cancel': []\n 'reorder-applied': [items: TItem[]]\n 'reorder-apply-error': [error: unknown]\n 'reorder-end': []\n}>()\n\ndefineSlots<{\n header?: (props: HeaderSlotProps) => unknown\n 'reorder-toggle'?: (props: ReorderToggleSlotProps) => unknown\n 'reorder-toolbar'?: (props: ToolbarSlotProps) => unknown\n empty?: (props: EmptySlotProps) => unknown\n 'add-button'?: (props: AddButtonSlotProps) => unknown\n 'view-body'?: (props: ViewBodySlotProps<TItem>) => unknown\n item?: (props: RowSlotProps<TItem>) => unknown\n 'item-compact'?: (props: RowSlotProps<TItem>) => unknown\n 'item-readonly'?: (props: RowSlotProps<TItem>) => unknown\n 'item-status'?: (props: RowSlotProps<TItem>) => unknown\n 'item-actions'?: (props: RowSlotProps<TItem>) => unknown\n 'item-footer'?: (props: RowSlotProps<TItem>) => unknown\n 'before-item'?: (props: RowSlotProps<TItem>) => unknown\n 'after-item'?: (props: RowSlotProps<TItem>) => unknown\n}>()\n\nconst modelProp = defineModel<TItem[]>({ required: true })\n// The v-model prop lags an emitted write until the parent re-renders; reads in the same tick must see\n// the write, or a second write (or the reorder-Cancel reconciliation) clobbers the first.\nlet pendingWrite: TItem[] | null = null\nlet wroteDuringLoad = false\nwatch(modelProp, () => (pendingWrite = null), { flush: 'sync' })\nconst modelValue = customRef<TItem[]>((track, trigger) => ({\n get: () => {\n track()\n // Read the prop every time, pending write or not: a computed evaluated while a write is pending must\n // still subscribe to it.\n const current = modelProp.value\n return pendingWrite ?? current\n },\n set: (v) => {\n wroteDuringLoad = true\n pendingWrite = v\n modelProp.value = v\n trigger()\n // Only this write's own clear: a newer pending write stays. The trigger lets readers see the prop\n // again, e.g. when the parent ignored the update.\n nextTick(() => {\n if (pendingWrite !== v) return\n pendingWrite = null\n trigger()\n })\n },\n}))\nconst mode = defineModel<ReorderMode>('mode', { default: 'view' })\n\nconst { t } = useI18n()\nconst slots = useSlots()\n\nconst rootEl = useTemplateRef<HTMLElement>('rootEl')\nconst { isNarrow } = useContainerWidth(rootEl)\n\nconst isTouch = useIsTouchDevice()\nconst hasCoarsePointer = useHasCoarsePointer()\n\n// State controller (v2). `factory`/`getKey`/`position`/`validate` are construction-time options read\n// once to seed the controller, not reactive props — hence the suppressed reactivity-loss rule.\n// Undefined options fall back to controller defaults ('id' / 'position' / always-valid).\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst controllerOptions: ListEditorStateBindings<TItem> = {\n get: () => modelValue.value,\n set: (v) => (modelValue.value = v),\n factory: props.factory,\n getKey: props.getKey as GetKey<TItem> | undefined,\n position: props.position as PositionOption<TItem> | undefined,\n dirtyExclude: () => props.dirtyExclude ?? [],\n validate: props.validate,\n}\n// Precedence: an explicitly lifted `:editor` wins; then a `state-key`'d entry persisted in the\n// nearest ancestor editor's row-state scope (built from the options above, rebound to this instance\n// on every remount); else this component owns the controller — today's behaviour, unchanged.\nconst stateEntry = props.editor ? null : useListEditorStateEntry<TItem>(props.stateKey, controllerOptions)\nconst controller = props.editor ?? stateEntry?.handle ?? useListEditorController<TItem>(controllerOptions)\n// Rows that arrive while `loading` are the loaded state, not user adds — but only when the editor was\n// clean when loading began (`loading` also covers a save of pending work, which must stay pending).\n// A controller passed in (`:editor`, `state-key`) can hold pending edits across a remount: not clean then.\nlet cleanAtLoadStart = props.loading && !controller.hasUnsaved.value\nwatch(\n () => props.loading,\n (now) => {\n if (now) {\n cleanAtLoadStart = !controller.hasUnsaved.value\n wroteDuringLoad = false\n } else if (cleanAtLoadStart && !wroteDuringLoad) controller.commit(modelValue.value)\n }\n)\n\n// Local mirror of the controller's key resolution so rendered rows key the same\n// way the controller tracks them (v2 spec point 7).\nconst getKeyOpt = props.getKey ?? 'id'\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\n// Row-state scope for THIS editor's `#item` slot subtree: a nested editor with a `state-key` builds\n// its controller in here, so it outlives the row collapsing (which unmounts the slot). When this\n// editor is itself persisted, the scope comes from its own entry — so the chain holds at any depth.\nconst rowStateScope = provideListEditorStateScope(stateEntry?.childScope ?? null)\nconst keyOf = (item: TItem): ListEditorKey =>\n typeof getKeyOpt === 'function' ? getKeyOpt(item) : (item[getKeyOpt as keyof TItem] as ListEditorKey)\n\n// Managed position field (for the row position view field + move-to-position\n// dialog). Mirrors the controller's resolution.\nconst positionFieldName = computed<string>(() => {\n const p = props.position\n if (p === undefined) return 'position'\n if (p === false) return 'position'\n if (typeof p === 'object') return p.field as string\n return p as string\n})\n\n// Keyed render projection (key + index + raw + position); the controller owns the data.\nconst viewItems = computed<ListViewItem<TItem>[]>(() =>\n modelValue.value.map((raw, index) => ({\n key: keyOf(raw),\n index,\n raw,\n position: raw[positionFieldName.value] as number | undefined,\n }))\n)\n\n// Drop the persisted controllers of rows that no longer exist. `post` so the removed row's subtree\n// has already unmounted (its editors released their entries) before we stop their effect scopes.\nwatch(\n () => viewItems.value.map((vi) => String(vi.key)).join('|'),\n () => rowStateScope.retainOwners(viewItems.value.map((vi) => vi.key)),\n { flush: 'post' }\n)\n\nconst expandedKeys = ref<Set<ListEditorKey>>(new Set())\n\n// Reorder-session moved set — component view state, distinct from the\n// controller's persistent moved tracking. Drives the toolbar's \"N pending\n// changes\" counter; cleared on every mode transition by `useReorderMode`.\nconst movedKeys = ref<Set<ListEditorKey>>(new Set())\n// Deletes made DURING the current reorder session, split by mode. Deferred ones count in the toolbar\n// and are reverted on Cancel (row restored, tombstone cleared). Immediate (backend) ones are re-applied\n// on Cancel so they stay gone — else Cancel's snapshot-restore would resurrect a row already deleted on\n// the server (a phantom a later save could re-create).\nconst sessionDeferredDeletes = ref<Set<ListEditorKey>>(new Set())\nconst sessionImmediateDeletes = ref<Set<ListEditorKey>>(new Set())\n// Rows ADDED during the current reorder session (\"Pridať za túto položku\"). Count in the toolbar so\n// Apply enables instead of trapping the user; Cancel drops them (snapshot-restore removes rows that\n// weren't in the enter-time snapshot).\nconst sessionAddedKeys = ref<Set<ListEditorKey>>(new Set())\n// Rows MOVED during the current reorder session. On Cancel the snapshot-restore undoes the reorder, so\n// these keys' persistent \"moved\" flag must be dropped from the controller too (else they stay falsely\n// amber + arm the leave guard for a reorder that never happened). Apply keeps them (persisted on save).\nconst sessionMovedKeys = ref<Set<ListEditorKey>>(new Set())\n\nconst snapshot = shallowRef<TItem[] | null>(null)\n\nconst rowsContainer = useTemplateRef<HTMLElement>('rowsContainer')\n\nconst isInlineEdit = computed(() => !props.chips && !!slots.item)\nconst hasReadonlyDetail = computed(() => !props.chips && !!slots['item-readonly'])\n\nconst { editingKeys, editingSnapshots, clearEditing, beginEdit, cancelEdit, commitEdit, closeEdit, requestAutoOpen } =\n useInlineEditing<TItem, ListViewItem<TItem>>({\n rowsContainer,\n rowSelector: '.a-le-row',\n isInlineEdit,\n restoreSnapshot: (key, data) => controller.updateItem(key, data),\n watchKeys: () => modelValue.value.map((it) => keyOf(it)),\n findEntry: (key) => {\n const hit = modelValue.value.find((it) => keyOf(it) === key)\n return hit ? { data: hit } : null\n },\n afterAutoOpen: (key) => {\n expandedKeys.value.delete(key)\n },\n })\n\nconst canInteract = computed(() => !props.readonly && !props.disabled && !props.loading)\nconst canEnterReorder = computed(() => canInteract.value && !props.disableReorder && modelValue.value.length > 1)\n\nconst embeddedRef = computed(() => props.embedded)\nconst allowEditInReorderRef = computed(() => props.allowEditInReorder)\n\nconst {\n applying,\n applyError,\n hasPendingChanges,\n movedCount,\n reorderMode,\n enterReorderMode,\n cancelReorderMode,\n applyReorder,\n} = useReorderMode<TItem[]>({\n mode,\n snapshot,\n movedKeys,\n modelValue,\n cloneModel: (m) => cloneDeep(m) as TItem[],\n applyModel: (m) => {\n modelValue.value = m\n },\n canEnterReorder,\n embedded: embeddedRef,\n onEnter: () => {\n sessionDeferredDeletes.value = new Set()\n sessionImmediateDeletes.value = new Set()\n sessionAddedKeys.value = new Set()\n sessionMovedKeys.value = new Set()\n if (!allowEditInReorderRef.value) {\n clearEditing()\n expandedKeys.value.clear()\n }\n },\n onExternalEnter: () => {\n sessionDeferredDeletes.value = new Set()\n sessionImmediateDeletes.value = new Set()\n sessionAddedKeys.value = new Set()\n sessionMovedKeys.value = new Set()\n if (!allowEditInReorderRef.value) {\n clearEditing()\n expandedKeys.value.clear()\n }\n },\n // Cancel reverts the session. The composable's snapshot-restore has already brought EVERY deleted row\n // back into the model; reconcile the controller: deferred deletes are truly reverted (clear tombstone,\n // row stays), immediate deletes are re-applied (row removed again — it is gone on the backend and must\n // not resurrect or be re-created by a later save).\n onCancel: () => {\n for (const key of sessionDeferredDeletes.value) controller.restoreDeleted(key)\n for (const key of sessionImmediateDeletes.value) controller.deleteItem(key, { trackDeleted: false })\n // Snapshot-restore already undid the reorder — drop the controller's \"moved\" flag for exactly the\n // rows moved this session (edits/adds keep their amber), so a cancelled reorder leaves no false unsaved.\n controller.clearMoved(sessionMovedKeys.value)\n sessionDeferredDeletes.value = new Set()\n sessionImmediateDeletes.value = new Set()\n sessionAddedKeys.value = new Set()\n sessionMovedKeys.value = new Set()\n },\n // Apply keeps the session's changes (deferred deletes persist on the entity's main save; moved rows stay\n // amber in the controller until the consumer commits after their save — only reset the session tracker).\n onApplyEnd: () => {\n sessionDeferredDeletes.value = new Set()\n sessionImmediateDeletes.value = new Set()\n sessionAddedKeys.value = new Set()\n sessionMovedKeys.value = new Set()\n },\n // Embedded editor exit (parent Cancel or Apply — it owns the snapshot, we never do). On a parent\n // Cancel the snapshot-restore resurrects any row we deleted IMMEDIATELY on the backend; re-remove it so\n // it stays gone. On Apply it never came back, so `deleteItem` is a no-op. Deferred deletes need nothing:\n // the controller's re-add watch drops their tombstone when the restore brings the row back.\n onEmbeddedExit: () => {\n for (const key of sessionImmediateDeletes.value) controller.deleteItem(key, { trackDeleted: false })\n sessionDeferredDeletes.value = new Set()\n sessionImmediateDeletes.value = new Set()\n sessionAddedKeys.value = new Set()\n sessionMovedKeys.value = new Set()\n },\n onReorderApply: (items) => props.onReorderApply?.(items),\n emit: {\n reorderStart: () => emit('reorder-start'),\n reorderCancel: () => emit('reorder-cancel'),\n reorderApplied: (payload) => emit('reorder-applied', payload),\n reorderApplyError: (err) => emit('reorder-apply-error', err),\n reorderEnd: () => emit('reorder-end'),\n },\n})\n\n// Stacked-editor registry: outer collects movedCount + hasChanges from embedded\n// children for the toolbar counter. shallowReactive preserves ComputedRef\n// identity (no auto-unwrap).\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst childContributions = props.embedded\n ? null\n : shallowReactive(\n new Map<symbol, { count: ComputedRef<number>; hasChanges: ComputedRef<boolean>; validateAll: () => boolean }>()\n )\n\nif (childContributions) {\n const registry: SharedReorderRegistry = {\n register: (id, count, hasChanges, validateAll) => {\n childContributions.set(id, { count, hasChanges, validateAll })\n },\n unregister: (id) => {\n childContributions.delete(id)\n },\n }\n provide(SharedReorderRegistryKey, registry)\n}\n\n// Own session moves + each embedded child's FULL pending contribution (moves + its own deferred\n// deletes — children register `totalPendingCount`, see below). The outer's own deferred deletes are\n// added on top in `totalPendingCount`.\nconst totalMovedCount = computed<number>(() => {\n let sum = movedCount.value\n if (childContributions) {\n for (const c of childContributions.values()) sum += c.count.value\n }\n return sum\n})\n\nconst totalHasPendingChanges = computed<boolean>(() => {\n if (hasPendingChanges.value) return true\n if (childContributions) {\n for (const c of childContributions.values()) {\n if (c.hasChanges.value) return true\n }\n }\n return false\n})\n\n// Reorder-toolbar pending indicator = session moves + deferred deletes made in the session, so\n// deleting a row in reorder mode no longer reads as \"no pending changes\" and Apply stays enabled.\nconst totalPendingCount = computed<number>(\n () => totalMovedCount.value + sessionDeferredDeletes.value.size + sessionAddedKeys.value.size\n)\nconst totalPendingChanges = computed<boolean>(\n () => totalHasPendingChanges.value || sessionDeferredDeletes.value.size > 0 || sessionAddedKeys.value.size > 0\n)\n\n// An embedded editor pushes its FULL pending contribution — moves AND deferred deletes — up to the\n// nearest non-embedded outer, so deleting a row in an embedded child during a shared reorder lights up\n// the outer's toolbar (count + Apply-enabled) instead of reading \"no pending changes\". Registered after\n// `totalPendingCount`/`totalPendingChanges` so they exist (TDZ); `validateAllSelf` is a lazy thunk.\nif (props.embedded) {\n const parent = inject(SharedReorderRegistryKey, null)\n if (parent) {\n const id = Symbol('le.embedded')\n parent.register(id, totalPendingCount, totalPendingChanges, () => validateAllSelf())\n onBeforeUnmount(() => parent.unregister(id))\n }\n}\n\nconst canAdd = computed(() => canInteract.value && props.showAddButton && !reorderMode.value)\n// Chips mode keeps drag always-on (no mode toggle) on non-touch devices.\nconst dragEnabled = computed(\n () => canInteract.value && (reorderMode.value || props.chips) && !isTouch.value && !props.disableDrag\n)\n\nconst addLabelResolved = computed(() => props.addLabel ?? t('common.sortable.add'))\nconst emptyTitleResolved = computed(() => props.emptyTitle ?? t('common.sortable.emptyTitle'))\nconst deleteConfirmTitleResolved = computed(() => props.deleteConfirmTitle ?? t('common.sortable.deleteConfirmTitle'))\nconst deleteConfirmTextResolved = computed(\n () =>\n props.deleteConfirmText ??\n (props.deleteMode === 'immediate'\n ? t('common.sortable.deleteConfirmText')\n : t('common.sortable.deleteConfirmTextDeferred'))\n)\n\nconst reorderToggleVisible = computed<boolean>(\n (): boolean =>\n !props.chips && !props.embedded && props.showReorderToggle && !reorderMode.value && modelValue.value.length > 0\n)\n\n// With a title and a narrow viewport, the reorder button shrinks to an icon-only\n// round button to keep the single-line header from overflowing.\nconst compactReorderButton = computed<boolean>((): boolean => !!props.title && isNarrow.value)\n\n// Total unconfirmed-change count (added/edited/moved rows + deferred deletions) — a delete lights it\n// up even though its row is gone. Shown as a view-mode header badge + on the handle; in reorder mode\n// the toolbar status shows the session count instead.\nconst unsavedCount = controller.unsavedCount\nconst unsavedCountVisible = computed(() => !props.readonly && !props.disableUnsaved && unsavedCount.value > 0)\nconst headerVisible = computed<boolean>(\n (): boolean =>\n !!(\n props.title ||\n slots.header ||\n slots['reorder-toggle'] ||\n reorderToggleVisible.value ||\n (reorderMode.value && !props.embedded) ||\n (!reorderMode.value && unsavedCountVisible.value)\n )\n)\n\n// True when the header has substantive content (title or custom header slot).\n// When false it still renders as a slim band right-aligning just the\n// reorder/apply controls, holding height across idle ↔ reorder so it doesn't jump.\nconst headerHasContent = computed<boolean>(\n (): boolean => !!(props.title || slots.header || slots['reorder-toggle'] || slots['view-body'])\n)\n\n// Per-row Save/Cancel footer only matters with a per-item persist callback;\n// otherwise the parent form's global save flushes everything, so hide it.\nconst showInlineSaveFooter = computed(() => !!props.onItemSave)\n\n// Reorder-session moved marker (drag, arrow buttons) feeding the toolbar counter;\n// the persistent amber `unsaved` flag is the controller's.\nconst markMoved = (key: ListEditorKey) => {\n movedKeys.value.add(key)\n sessionMovedKeys.value.add(key)\n}\n\n// Per-key decorator cache — see AListEditor for rationale. `unsaved` (amber) and\n// `validationState` (red rail) come from the controller; `moved` is the\n// reorder-session flag.\nconst decoratorCache = new Map<ListEditorKey, DecoratedViewItem<TItem>>()\nconst viewItemsDecorated = computed<DecoratedViewItem<TItem>[]>(() => {\n const total = modelValue.value.length\n const next: DecoratedViewItem<TItem>[] = []\n const liveKeys = new Set<ListEditorKey>()\n for (const vi of viewItems.value) {\n liveKeys.add(vi.key)\n const editing = editingKeys.value.has(vi.key)\n const expanded = expandedKeys.value.has(vi.key)\n const loading = props.loadingKeys?.has(vi.key) ?? false\n const moved = movedKeys.value.has(vi.key)\n // readonly → no amber markers (can't have unsaved changes; also dodges a\n // mount-before-load empty baseline). (QA 85050 sweep)\n // `disableUnsaved` suppresses only the amber marker — the validation rail still shows, since\n // hiding dirty state should not hide a real error.\n const unsaved = props.disableUnsaved || props.readonly ? false : controller.isUnsaved(vi.key)\n const dirty = unsaved\n // `editing` → the controller reads amber (not red) while the row is being filled in. (QA 85050 b7)\n const validationState = controller.rowState(vi.raw, vi.key, editing)\n const canMoveUp = vi.index > 0\n const canMoveDown = vi.index < total - 1\n const cached = decoratorCache.get(vi.key)\n if (\n cached &&\n cached.raw === vi.raw &&\n cached.index === vi.index &&\n cached.position === vi.position &&\n cached.editing === editing &&\n cached.expanded === expanded &&\n cached.loading === loading &&\n cached.dirty === dirty &&\n cached.moved === moved &&\n cached.unsaved === unsaved &&\n cached.validationState === validationState &&\n cached.canMoveUp === canMoveUp &&\n cached.canMoveDown === canMoveDown\n ) {\n next.push(cached)\n continue\n }\n const decorated: DecoratedViewItem<TItem> = {\n ...vi,\n editing,\n expanded,\n loading,\n dirty,\n moved,\n unsaved,\n validationState,\n canMoveUp,\n canMoveDown,\n }\n decoratorCache.set(vi.key, decorated)\n next.push(decorated)\n }\n for (const key of decoratorCache.keys()) {\n if (!liveKeys.has(key)) decoratorCache.delete(key)\n }\n return next\n})\n\nconst isEmpty = computed(() => viewItemsDecorated.value.length === 0)\n\nconst findVi = (key: ListEditorKey): DecoratedViewItem<TItem> | undefined =>\n viewItemsDecorated.value.find((v) => v.key === key)\n\n// Programmatically open a row's inline-edit form (e.g. open auto-seeded rows on mount). Multiple\n// rows can be open at once. No-op for chips / when there is no `#item` slot.\nconst openRow = (key: ListEditorKey): void => {\n if (!isInlineEdit.value) return\n const vi = findVi(key)\n if (vi) beginEdit(vi)\n}\nconst openAll = (): void => {\n if (!isInlineEdit.value) return\n for (const vi of viewItemsDecorated.value) beginEdit(vi)\n}\n\n// Validate + reveal this editor's OWN rows (no cascade). The exposed `validateAll`\n// wraps this and also cascades into embedded children; embedded children register\n// this self-only variant so a parent save reveals their invalid rows red too.\nconst validateAllSelf = (): boolean =>\n validateAllAndReveal(controller, (key) => {\n const vi = viewItems.value.find((v) => v.key === key)\n if (vi) beginEdit(vi)\n })\n\n// Auto-bridge the editor's aggregate validity into the consumer's `validation-scope` collector so a\n// plain `$invalid` save gate blocks (and reveals) a collapsed invalid row. No-op without the prop.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss -- construction-time opt-in, read once\nuseListEditorScopeValidity({\n hasErrors: controller.hasErrors,\n validationScope: props.validationScope,\n validateProvided: props.validate !== undefined,\n reveal: validateAllSelf,\n})\n\nconst keyboardNav = useKeyboardNav({\n viewItems: computed(() => viewItemsDecorated.value.map((vi) => ({ key: vi.key }))),\n variant: 'sortable',\n isReorderMode: reorderMode,\n disabled: computed(() => !canInteract.value),\n isEditing: (key) => editingKeys.value.has(key),\n onToggleEdit: (key) => {\n const vi = findVi(key)\n if (vi) onEditClick(vi)\n },\n onCancelEdit: (key) => {\n const vi = findVi(key)\n if (vi) onCloseClick(vi)\n },\n onMoveUp: (key) => {\n const vi = findVi(key)\n if (vi) moveUp(vi.index)\n },\n onMoveDown: (key) => {\n const vi = findVi(key)\n if (vi) moveDown(vi.index)\n },\n onMoveTop: (key) => {\n const vi = findVi(key)\n if (vi) moveTop(vi.index)\n },\n onMoveBottom: (key) => {\n const vi = findVi(key)\n if (vi) moveBottom(vi.index)\n },\n onCancelReorder: () => cancelReorderMode(),\n})\n\nconst moveToPositionDialogOpen = ref<boolean>(false)\nconst moveToPositionTarget = shallowRef<DecoratedViewItem<TItem> | null>(null)\nconst moveToPositionLabel = computed<string>(() =>\n moveToPositionTarget.value ? resolveCompactText(moveToPositionTarget.value.raw) : ''\n)\nconst openMoveToPosition = (vi: DecoratedViewItem<TItem>) => {\n if (!props.showMoveToPosition) return\n moveToPositionTarget.value = vi\n moveToPositionDialogOpen.value = true\n}\nconst onMoveToPositionConfirm = (newIndex: number) => {\n const target = moveToPositionTarget.value\n moveToPositionTarget.value = null\n if (!target) return\n if (newIndex === target.index) return\n controller.moveItem(target.index, newIndex)\n markMoved(target.key)\n}\n\nconst resolveCompactText = (raw: TItem): string => resolveCompactTextUtil(raw, { compactField: props.compactField })\n\n// Always instantiate SortableJS, seeded `disabled: !dragEnabled` and kept in sync\n// by the watch below. It used to be created only when `isTouch` was false at setup\n// — but `isTouch` is a live media query (plug in a mouse, toggle device emulation),\n// and that one-shot read left the instance missing when it later flipped: the drag\n// handle rendered but dragging did nothing. The setup cost this saved on touch\n// devices is not worth a dead handle.\n/* eslint-disable vue/no-ref-object-reactivity-loss */\nconst sortable = useSortable(rowsContainer, modelValue, {\n // The rows container can mount/unmount across mode flips (e.g. a `#view-body`\n // slot in view mode, rows only in reorder mode). vueuse's default\n // `tryOnMounted` fires once and would bind to a null ref, leaving SortableJS\n // dead; `watchElement: true` re-inits whenever the ref populates.\n watchElement: true,\n handle: '.a-le-drag-handle',\n animation: 150,\n // Force the fallback renderer so `dragClass` applies to a CSS-controlled\n // clone following the cursor — a row-shaped ghost instead of the opaque\n // browser-native drag bitmap.\n forceFallback: true,\n fallbackTolerance: 3,\n fallbackOnBody: true,\n ghostClass: DRAG_GHOST_CLASS,\n chosenClass: DRAG_CHOSEN_CLASS,\n dragClass: DRAG_CLASS,\n disabled: !dragEnabled.value,\n // Own `onUpdate` REPLACES vueuse's default array-move, which moved the array\n // and renumbered positions in separate `nextTick`s — a gap that let a\n // consumer's \"sort by position\" watch re-sort on stale positions and revert\n // the drop. One synchronous `controller.moveItem` closes that window so every\n // observer sees the final order and positions at once.\n onUpdate: (event) => {\n const { oldIndex, newIndex, item, from } = event\n if (oldIndex === undefined || newIndex === undefined) return\n // Undo SortableJS's DOM relocation so Vue's keyed v-for stays the single\n // source of truth (mirrors vueuse's removeNode + insertNodeAt).\n if (item && from) {\n item.parentNode?.removeChild(item)\n from.insertBefore(item, from.children[oldIndex] ?? null)\n }\n // moveItem rewrites the array, renumbers positions, and records the moved\n // key — all synchronously.\n controller.moveItem(oldIndex, newIndex)\n },\n onEnd: (event) => {\n // Mark only the dragged row (via its data-id) moved rather than diffing the\n // whole list, so siblings that shifted index stay clean. `event.item` is the\n // `.a-le-row-wrapper` sortable item; the `[data-id]` lives on the inner `.a-le-row`.\n const el = event.item as HTMLElement\n // `:scope >` so a consumer editor nested in a `#before-item` slot (its own\n // `.a-le-row` descendants) can't shadow this row's own id.\n const raw = (el.querySelector(':scope > .a-le-row') ?? el).getAttribute('data-id')\n if (raw !== null && raw !== '') {\n // Numeric key only when `data-id` is a pure integer string (incl. negative\n // temp ids like \"-1\"); otherwise keep the UUID-style string. `n > 0`\n // wrongly sent negative ids down the string branch, landing amber on the\n // wrong key.\n const n = stringToInt(raw)\n const key: ListEditorKey = String(n) === raw ? n : raw\n markMoved(key)\n }\n },\n})\n\n// Options are built once at setup, when a `#view-body` consumer is still in view mode and\n// `dragEnabled` is false; entering reorder mode mounts the container and `watchElement` re-creates\n// SortableJS from that stale object. Hence watching the container too.\nwatch(\n [dragEnabled, rowsContainer],\n async () => {\n // after `watchElement` has re-created the instance\n await nextTick()\n sortable.option('disabled', !dragEnabled.value)\n },\n { flush: 'post' }\n)\n/* eslint-enable vue/no-ref-object-reactivity-loss */\n\n// Managed add: the controller mints + inserts `factory()` and renumbers\n// positions; the inline-editing watch picks up the new key and auto-opens it.\nconst onAddClick = () => {\n if (!canAdd.value) return\n requestAutoOpen()\n controller.addItem(undefined, undefined)\n}\n\nconst onRowAddAfterClick = (vi: ListViewItem<TItem>) => {\n if (!canInteract.value) return\n requestAutoOpen()\n const key = controller.addItem(undefined, { afterId: vi.key })\n // Added during a reorder session (\"Pridať za túto položku\") → count it in the toolbar.\n if (reorderMode.value && key !== undefined) sessionAddedKeys.value.add(key)\n}\n\nconst onEditClick = (vi: ListViewItem<TItem>) => {\n if (!canInteract.value) return\n if (reorderMode.value && !props.allowEditInReorder) return\n // Clicking edit while already editing closes the form (matches row-header click).\n if (editingKeys.value.has(vi.key)) {\n onCloseClick(vi)\n return\n }\n if (isInlineEdit.value) {\n beginEdit(vi)\n expandedKeys.value.delete(vi.key)\n }\n emit('edit', vi)\n}\n\nconst onExpandClick = (vi: ListViewItem<TItem>) => {\n if (props.disabled || props.loading) return\n if (reorderMode.value && !props.allowEditInReorder) return\n const key = vi.key\n const currentlyExpanded = expandedKeys.value.has(key)\n if (currentlyExpanded) {\n expandedKeys.value.delete(key)\n } else {\n for (const k of expandedKeys.value) expandedKeys.value.delete(k)\n expandedKeys.value.add(key)\n }\n emit('item-expand', vi, !currentlyExpanded)\n}\n\nconst isRowClickable = (vi: DecoratedViewItem<TItem>): boolean => {\n if (props.chips) return false\n if (props.disableRowClick) return false\n if (props.disabled || props.loading) return false\n if (reorderMode.value && !props.allowEditInReorder) return false\n if (vi.editing || vi.expanded) return true\n if (!props.readonly && props.showEditButton) return true\n return false\n}\n\nconst onRowClick = (vi: DecoratedViewItem<TItem>) => {\n if (!isRowClickable(vi)) return\n if (vi.editing || vi.expanded) {\n onCloseClick(vi)\n return\n }\n if (props.readonly && hasReadonlyDetail.value) {\n onExpandClick(vi)\n } else {\n onEditClick(vi)\n }\n}\n\nconst {\n deleteDialog,\n deleteInFlight,\n deleteError,\n onDeleteClick: triggerDeleteClick,\n onDeleteDialogConfirm,\n onDeleteDialogCancel,\n} = useDeleteDialog<TItem, ListViewItem<TItem>>({\n onDeleteConfirm: (raw) => (props.onDeleteConfirm ? props.onDeleteConfirm(raw) : true),\n onDelete: (raw) => props.onDelete?.(raw),\n onDeleted: (vi) => {\n editingKeys.value.delete(vi.key)\n editingSnapshots.value.delete(vi.key)\n expandedKeys.value.delete(vi.key)\n movedKeys.value.delete(vi.key)\n const deferred = props.deleteMode === 'deferred'\n // In reorder mode: a deferred delete is a reversible session change (counts in the toolbar,\n // reverts on Cancel); an immediate delete is already gone on the backend, so drop it from the\n // reorder snapshot too — else Cancel's snapshot-restore would resurrect it.\n if (reorderMode.value) {\n if (sessionAddedKeys.value.has(vi.key)) {\n // Added AND deleted within the same reorder session — net zero. The controller drops the temp\n // row with no tombstone, so it must not linger in either counter (was double-counted: L1).\n sessionAddedKeys.value.delete(vi.key)\n } else if (deferred) {\n sessionDeferredDeletes.value.add(vi.key)\n } else {\n sessionImmediateDeletes.value.add(vi.key)\n }\n }\n // Controller owns the data: temp rows vanish; a deferred saved-row delete lands in\n // `getChanges().deleted` + counts as unsaved; immediate skips the tombstone (already persisted).\n controller.deleteItem(vi.key, { trackDeleted: deferred })\n emit('deleted', vi)\n },\n disableDeleteConfirm: () => props.disableDeleteConfirm || props.chips,\n})\n\nconst onDeleteClick = async (vi: ListViewItem<TItem>) => {\n if (!canInteract.value) return\n await triggerDeleteClick(vi)\n}\n\n// In-flight guard: a second click while the consumer's save is pending must not send a duplicate.\n// A rejected save keeps the row open and still reaches the app's error handler, as before the guard.\nconst savingKeys = ref<Set<ListEditorKey>>(new Set())\nconst onSaveClick = async (vi: ListViewItem<TItem>) => {\n if (savingKeys.value.has(vi.key)) return\n savingKeys.value.add(vi.key)\n try {\n if (props.onItemSave) await props.onItemSave(vi.raw)\n } finally {\n savingKeys.value.delete(vi.key)\n }\n commitEdit(vi)\n emit('item-saved', vi)\n}\n\nconst onCancelClick = (vi: ListViewItem<TItem>) => {\n cancelEdit(vi)\n}\n\nconst onCloseClick = (vi: ListViewItem<TItem>) => {\n closeEdit(vi)\n expandedKeys.value.delete(vi.key)\n emit('close', vi)\n}\n\nconst keyAtIndex = (idx: number): ListEditorKey | null => {\n const item = modelValue.value[idx]\n if (!item) return null\n return keyOf(item)\n}\n\nconst moveUp = (idx: number) => {\n if (idx <= 0) return\n const key = keyAtIndex(idx)\n controller.moveItem(idx, idx - 1)\n if (key !== null) markMoved(key)\n}\nconst moveDown = (idx: number) => {\n if (idx >= modelValue.value.length - 1) return\n const key = keyAtIndex(idx)\n controller.moveItem(idx, idx + 1)\n if (key !== null) markMoved(key)\n}\nconst moveTop = (idx: number) => {\n if (idx <= 0) return\n const key = keyAtIndex(idx)\n controller.moveItem(idx, 0)\n if (key !== null) markMoved(key)\n}\nconst moveBottom = (idx: number) => {\n if (idx >= modelValue.value.length - 1) return\n const key = keyAtIndex(idx)\n controller.moveItem(idx, modelValue.value.length - 1)\n if (key !== null) markMoved(key)\n}\n\n// Per-key actions cache: stable identity per row — see AListEditor for\n// rationale. Closures capture the stable key and resolve the current vi via\n// findVi at call time.\ntype ActionsBundle = {\n edit: () => void\n save: () => Promise<void> | void\n cancel: () => void\n close: () => void\n delete: () => Promise<void>\n addAfter: () => void\n toggleExpand: () => void\n moveUp: () => void\n moveDown: () => void\n moveTop: () => void\n moveBottom: () => void\n update: (next: TItem | Partial<TItem> | ((current: TItem) => TItem)) => void\n}\nconst actionsCache = new Map<ListEditorKey, ActionsBundle>()\nconst getActions = (key: ListEditorKey): ActionsBundle => {\n let actions = actionsCache.get(key)\n if (!actions) {\n actions = {\n edit: () => {\n const vi = findVi(key)\n if (vi) onEditClick(vi)\n },\n save: () => {\n const vi = findVi(key)\n return vi ? onSaveClick(vi) : undefined\n },\n cancel: () => {\n const vi = findVi(key)\n if (vi) onCancelClick(vi)\n },\n close: () => {\n const vi = findVi(key)\n if (vi) onCloseClick(vi)\n },\n delete: async () => {\n const vi = findVi(key)\n if (vi) await onDeleteClick(vi)\n },\n addAfter: () => {\n const vi = findVi(key)\n if (vi) onRowAddAfterClick(vi)\n },\n toggleExpand: () => {\n const vi = findVi(key)\n if (vi) onExpandClick(vi)\n },\n moveUp: () => {\n const vi = findVi(key)\n if (vi) moveUp(vi.index)\n },\n moveDown: () => {\n const vi = findVi(key)\n if (vi) moveDown(vi.index)\n },\n moveTop: () => {\n const vi = findVi(key)\n if (vi) moveTop(vi.index)\n },\n moveBottom: () => {\n const vi = findVi(key)\n if (vi) moveBottom(vi.index)\n },\n update: (next) => controller.updateItem(key, next),\n }\n actionsCache.set(key, actions)\n }\n return actions\n}\nwatch(\n () => viewItemsDecorated.value,\n (now) => {\n if (actionsCache.size === 0) return\n const liveKeys = new Set(now.map((v) => v.key))\n for (const key of actionsCache.keys()) {\n if (!liveKeys.has(key)) actionsCache.delete(key)\n }\n }\n)\n\nconst buildSlotProps = (vi: DecoratedViewItem<TItem>) => ({\n item: vi,\n raw: vi.raw,\n index: vi.index,\n key: vi.key,\n readonly: props.readonly,\n disabled: props.disabled,\n expanded: vi.expanded,\n editing: vi.editing,\n dirty: vi.dirty,\n unsaved: vi.unsaved,\n reorderMode: reorderMode.value,\n moved: vi.moved,\n canMoveUp: vi.canMoveUp,\n canMoveDown: vi.canMoveDown,\n touch: isTouch.value,\n stateKeyPrefix: rowStateScope.prefixFor(vi.key),\n actions: getActions(vi.key),\n})\n\nconst toolbarSlotProps = computed(() => ({\n applying: applying.value,\n hasPendingChanges: totalPendingChanges.value,\n movedCount: totalPendingCount.value,\n error: applyError.value,\n actions: {\n apply: applyReorder,\n cancel: cancelReorderMode,\n },\n}))\n\nconst reorderToggleSlotProps = computed(() => ({\n mode: mode.value,\n disabled: !canEnterReorder.value,\n hasPendingChanges: totalHasPendingChanges.value,\n actions: {\n enterReorderMode,\n exitReorderMode: cancelReorderMode,\n },\n}))\n\n// Registers a named unsaved-changes section when the consumer passes a label.\nuseUnsavedSection(() =>\n props.unsavedSectionLabel && !props.disableUnsaved\n ? { label: props.unsavedSectionLabel, dirty: controller.hasUnsaved.value }\n : []\n)\n\n// Expose the controller handle (validateAll/getPayload/commit/etc. via\n// `useTemplateRef<ListEditorHandle<TItem>>`) plus the reorder-mode controls.\ndefineExpose<\n ListEditorHandle<TItem> & {\n enterReorderMode: () => void\n cancelReorderMode: () => void\n applyReorder: () => Promise<void>\n openRow: (key: ListEditorKey) => void\n openAll: () => void\n }\n>({\n ...controller,\n openRow,\n openAll,\n // Saving is separate from the editor's \"Apply\", so a consumer can commit while still in\n // reorder mode with an unapplied move. The reorder session (component-level `movedKeys` +\n // snapshot) is NOT controller state, so re-baseline it here too — otherwise the \"N pending\n // changes\" badge lingers after the save and a later Cancel would revert past it.\n commit: (savedItems?: TItem[]) => {\n controller.commit(savedItems)\n movedKeys.value = new Set()\n if (snapshot.value) snapshot.value = cloneDeep(modelValue.value) as TItem[]\n },\n // validateAll() also opens invalid rows so a blocked save surfaces WHICH rows\n // are wrong — their #item form mounts instead of a collapsed red rail (QA 85050\n // B4-17). The body is gated on `editing` (not `expanded`), so drive `beginEdit`.\n // Shared with AListEditor + ANestedSortableListEditor via the helper.\n validateAll: () => {\n // Cascade into embedded children — a single outer save reveals invalid rows red\n // at every nesting level (e.g. quiz question turning red must also red its answers).\n const selfValid = validateAllSelf()\n if (!childContributions) return selfValid\n let valid = selfValid\n for (const child of childContributions.values()) {\n if (!child.validateAll()) valid = false\n }\n return valid\n },\n enterReorderMode,\n cancelReorderMode,\n applyReorder,\n})\n</script>\n\n<template>\n <div\n ref=\"rootEl\"\n class=\"a-sortable-list-editor\"\n :class=\"[\n `a-sortable-list-editor--two-rows-${twoRows}`,\n `a-sortable-list-editor--mode-${mode}`,\n {\n 'a-sortable-list-editor--readonly': readonly,\n 'a-sortable-list-editor--disabled': disabled,\n 'a-sortable-list-editor--touch': isTouch,\n 'a-sortable-list-editor--drag-enabled': dragEnabled,\n 'a-sortable-list-editor--chips': chips,\n 'a-sortable-list-editor--embedded': embedded,\n 'a-sortable-list-editor--header-floating': !embedded && !chips && !headerHasContent && headerVisible,\n },\n ]\"\n >\n <div class=\"a-le-card\">\n <div\n v-if=\"headerVisible\"\n class=\"a-le-header\"\n >\n <slot\n name=\"header\"\n :title=\"title\"\n v-bind=\"reorderToggleSlotProps\"\n >\n <h3\n v-if=\"title\"\n class=\"a-le-title-heading\"\n >\n {{ title }}\n </h3>\n <span\n v-if=\"!reorderMode && unsavedCountVisible\"\n class=\"a-le-unsaved-count\"\n :data-unsaved-count=\"unsavedCount\"\n >\n {{ t('common.sortable.pendingChanges', { count: unsavedCount }) }}\n </span>\n <div class=\"a-le-header-actions\">\n <template v-if=\"reorderMode && !embedded\">\n <!-- Reorder-mode header: pending count + Cancel/Apply, sitting\n where the \"Reorder\" button lives in view mode. -->\n <slot\n name=\"reorder-toolbar\"\n v-bind=\"toolbarSlotProps\"\n >\n <LeStatus\n :class=\"{ 'a-le-toolbar-status--pending': totalPendingChanges }\"\n :has-pending-changes=\"totalPendingChanges\"\n :pending-count=\"totalPendingCount\"\n :error=\"applyError\"\n />\n <VBtn\n variant=\"text\"\n size=\"small\"\n :disabled=\"applying\"\n @click=\"cancelReorderMode\"\n >\n {{ t('common.sortable.reorderCancel') }}\n </VBtn>\n <VBtn\n color=\"primary\"\n variant=\"flat\"\n size=\"small\"\n prepend-icon=\"mdi-check\"\n :loading=\"applying\"\n :disabled=\"applying || !totalPendingChanges\"\n @click=\"applyReorder\"\n >\n {{ t('common.sortable.reorderApply') }}\n </VBtn>\n </slot>\n </template>\n <slot\n v-else-if=\"reorderToggleVisible\"\n name=\"reorder-toggle\"\n v-bind=\"reorderToggleSlotProps\"\n >\n <VBtn\n v-if=\"compactReorderButton\"\n :aria-label=\"t('common.sortable.reorder')\"\n variant=\"tonal\"\n color=\"primary\"\n icon\n size=\"x-small\"\n :disabled=\"!canEnterReorder\"\n @click=\"enterReorderMode\"\n >\n <VIcon\n icon=\"mdi-sort\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.reorder')\"\n />\n </VBtn>\n <VBtn\n v-else\n variant=\"tonal\"\n color=\"primary\"\n prepend-icon=\"mdi-sort\"\n size=\"small\"\n :disabled=\"!canEnterReorder\"\n @click=\"enterReorderMode\"\n >\n {{ t('common.sortable.reorder') }}\n </VBtn>\n </slot>\n </div>\n </slot>\n </div>\n\n <div\n v-if=\"loading\"\n class=\"a-le-state a-le-state--loading\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n size=\"32\"\n />\n </div>\n\n <div\n v-else-if=\"error\"\n class=\"a-le-state a-le-state--error\"\n >\n <VAlert\n type=\"error\"\n variant=\"tonal\"\n density=\"compact\"\n border=\"start\"\n >\n {{ error }}\n </VAlert>\n </div>\n\n <div\n v-else-if=\"!reorderMode && $slots['view-body']\"\n class=\"a-le-view-body\"\n >\n <slot\n name=\"view-body\"\n :items=\"modelValue\"\n :mode=\"mode\"\n :actions=\"{ enterReorderMode }\"\n />\n </div>\n\n <div\n v-else-if=\"isEmpty\"\n class=\"a-le-state a-le-state--empty\"\n >\n <slot\n name=\"empty\"\n :readonly=\"readonly\"\n :disabled=\"disabled\"\n :actions=\"{ add: onAddClick }\"\n >\n <LeEmptyState\n :title=\"emptyTitleResolved\"\n :add-label=\"addLabelResolved\"\n :can-add=\"canAdd\"\n @add=\"onAddClick\"\n />\n </slot>\n </div>\n\n <div\n v-else\n ref=\"rowsContainer\"\n class=\"a-sortable-list-editor__rows\"\n >\n <div\n v-for=\"vi in viewItemsDecorated\"\n :key=\"String(vi.key)\"\n class=\"a-le-row-wrapper\"\n >\n <!-- Interstitial slots render as SIBLINGS of `.a-le-row` (inside this\n wrapper), so consumer content placed between rows never inherits the\n row's unsaved/editing/grabbed/validation tint. (QA 85050 BUG-04/05) -->\n <slot\n name=\"before-item\"\n v-bind=\"buildSlotProps(vi)\"\n />\n\n <div\n :data-id=\"String(vi.key)\"\n role=\"listitem\"\n :tabindex=\"keyboardNav.rowTabindex(vi.key)\"\n class=\"a-le-row\"\n :class=\"{\n 'a-le-row--two-rows': twoRows === 'always',\n 'a-le-row--editing': vi.editing,\n 'a-le-row--expanded': vi.expanded,\n 'a-le-row--unsaved': vi.unsaved,\n 'a-le-row--reorder': reorderMode,\n 'a-le-row--grabbed': keyboardNav.isGrabbed(vi.key),\n 'a-le-row--clickable': isRowClickable(vi),\n [`a-le-row--validation-${vi.validationState}`]: vi.validationState !== null,\n }\"\n @keydown=\"keyboardNav.handleKeydown(vi.key, $event)\"\n >\n <div\n class=\"a-le-row-header\"\n @click=\"onRowClick(vi)\"\n >\n <LeDragHandle v-if=\"dragEnabled\" />\n\n <div class=\"a-le-row-main\">\n <slot\n name=\"item-compact\"\n v-bind=\"buildSlotProps(vi)\"\n >\n <span class=\"a-le-title\">\n {{ resolveCompactText(vi.raw) }}\n </span>\n </slot>\n <LeUnsavedLabel\n v-if=\"vi.unsaved\"\n :dot-only=\"chips\"\n />\n </div>\n\n <div\n v-if=\"!chips && !reorderMode\"\n class=\"a-le-status\"\n >\n <slot\n name=\"item-status\"\n v-bind=\"buildSlotProps(vi)\"\n >\n <span\n v-if=\"statusField && vi.raw[statusField] != null && vi.raw[statusField] !== ''\"\n class=\"a-le-status-badge\"\n >\n {{ vi.raw[statusField] }}\n </span>\n </slot>\n </div>\n\n <div class=\"a-le-actions\">\n <slot\n name=\"item-actions\"\n v-bind=\"buildSlotProps(vi)\"\n >\n <template v-if=\"chips && canInteract\">\n <!-- Chips is the one layout that would otherwise swap the arrows out for the handle.\n Keep them whenever dragging is unavailable (covers `disable-drag`, which gating on\n `isTouch` did not) AND whenever a finger could be used at all — a hybrid gets both,\n so putting the mouse down never leaves the row unmovable. Every other layout here\n already keeps its arrows unconditionally in reorder mode. -->\n <template v-if=\"(!dragEnabled || hasCoarsePointer) && !disableReorder\">\n <VBtn\n icon\n size=\"x-small\"\n variant=\"text\"\n density=\"compact\"\n :active=\"false\"\n :disabled=\"!vi.canMoveUp\"\n :aria-label=\"t('common.sortable.moveUp')\"\n class=\"a-le-action a-le-action--up\"\n @click.stop=\"moveUp(vi.index)\"\n >\n <VIcon\n icon=\"mdi-arrow-up\"\n size=\"14\"\n />\n </VBtn>\n <VBtn\n icon\n size=\"x-small\"\n variant=\"text\"\n density=\"compact\"\n :active=\"false\"\n :disabled=\"!vi.canMoveDown\"\n :aria-label=\"t('common.sortable.moveDown')\"\n class=\"a-le-action a-le-action--down\"\n @click.stop=\"moveDown(vi.index)\"\n >\n <VIcon\n icon=\"mdi-arrow-down\"\n size=\"14\"\n />\n </VBtn>\n </template>\n <VBtn\n v-if=\"showDeleteButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n density=\"compact\"\n :active=\"false\"\n class=\"a-le-action a-le-action--chip-close\"\n :aria-label=\"t('common.sortable.delete')\"\n @click.stop=\"onDeleteClick(vi)\"\n >\n <VIcon\n icon=\"mdi-close\"\n size=\"14\"\n />\n </VBtn>\n </template>\n <template v-else-if=\"reorderMode\">\n <VBtn\n :aria-label=\"t('common.sortable.moveUp')\"\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n :disabled=\"!vi.canMoveUp\"\n class=\"mx-1 a-le-action a-le-action--up\"\n @click.stop=\"moveUp(vi.index)\"\n >\n <VIcon\n icon=\"mdi-arrow-up\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.moveUp')\"\n />\n </VBtn>\n <VBtn\n :aria-label=\"t('common.sortable.moveDown')\"\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n :disabled=\"!vi.canMoveDown\"\n class=\"mx-1 a-le-action a-le-action--down\"\n @click.stop=\"moveDown(vi.index)\"\n >\n <VIcon\n icon=\"mdi-arrow-down\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.moveDown')\"\n />\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n :active=\"false\"\n class=\"mx-1 a-le-action a-le-action--menu\"\n :aria-label=\"t('common.sortable.more')\"\n >\n <VIcon\n icon=\"mdi-dots-vertical\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.more')\"\n />\n <VMenu activator=\"parent\">\n <VList density=\"compact\">\n <VListItem\n :disabled=\"!vi.canMoveUp\"\n @click.stop=\"moveTop(vi.index)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-arrow-collapse-up\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.moveToTop') }}\n </VListItemTitle>\n </VListItem>\n <VListItem\n :disabled=\"!vi.canMoveDown\"\n @click.stop=\"moveBottom(vi.index)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-arrow-collapse-down\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.moveToBottom') }}\n </VListItemTitle>\n </VListItem>\n <VListItem\n v-if=\"showMoveToPosition && viewItemsDecorated.length > 1\"\n @click.stop=\"openMoveToPosition(vi)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-target\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.moveToPosition.action') }}\n </VListItemTitle>\n </VListItem>\n <VListItem\n v-if=\"showAddAfterAction && canInteract\"\n @click=\"onRowAddAfterClick(vi)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-plus\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.addAfter') }}\n </VListItemTitle>\n </VListItem>\n <VListItem\n v-if=\"showDeleteButton && canInteract\"\n @click.stop=\"onDeleteClick(vi)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-trash-can-outline\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.delete') }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </template>\n <template v-else>\n <VBtn\n v-if=\"showEditButton && canInteract\"\n :aria-label=\"t('common.sortable.edit')\"\n icon\n size=\"small\"\n variant=\"tonal\"\n color=\"primary\"\n density=\"comfortable\"\n class=\"mx-1 a-le-action a-le-action--edit\"\n @click.stop=\"onEditClick(vi)\"\n >\n <VIcon\n icon=\"mdi-pencil-outline\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.edit')\"\n />\n </VBtn>\n <VBtn\n v-if=\"showDeleteButton && canInteract\"\n :aria-label=\"t('common.sortable.delete')\"\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n class=\"mx-1 a-le-action a-le-action--delete\"\n @click.stop=\"onDeleteClick(vi)\"\n >\n <VIcon\n icon=\"mdi-trash-can-outline\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.delete')\"\n />\n </VBtn>\n <VBtn\n v-if=\"showAddAfterAction && canInteract\"\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n :active=\"false\"\n class=\"mx-1 a-le-action a-le-action--menu\"\n :aria-label=\"t('common.sortable.more')\"\n >\n <VIcon\n icon=\"mdi-dots-vertical\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.more')\"\n />\n <VMenu activator=\"parent\">\n <VList density=\"compact\">\n <VListItem @click=\"onRowAddAfterClick(vi)\">\n <template #prepend>\n <VIcon icon=\"mdi-plus\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.addAfter') }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </template>\n </slot>\n </div>\n </div>\n\n <template v-if=\"vi.editing && (allowEditInReorder || !reorderMode) && $slots.item\">\n <div class=\"a-le-row-body\">\n <div class=\"a-le-form\">\n <slot\n name=\"item\"\n v-bind=\"buildSlotProps(vi)\"\n />\n </div>\n </div>\n <slot\n name=\"item-footer\"\n v-bind=\"buildSlotProps(vi)\"\n >\n <div\n v-if=\"showInlineSaveFooter && !reorderMode\"\n class=\"a-le-row-footer\"\n >\n <div class=\"a-le-row-footer-spacer\" />\n <VBtn\n variant=\"text\"\n :disabled=\"vi.loading\"\n @click.stop=\"onCancelClick(vi)\"\n >\n {{ t('common.button.cancel') }}\n </VBtn>\n <VBtn\n color=\"primary\"\n variant=\"flat\"\n prepend-icon=\"mdi-check\"\n :disabled=\"vi.loading\"\n @click.stop=\"onSaveClick(vi)\"\n >\n {{ t('common.button.save') }}\n </VBtn>\n </div>\n </slot>\n </template>\n\n <div\n v-else-if=\"$slots['item-readonly'] && (readonly || vi.expanded) && (allowEditInReorder || !reorderMode)\"\n class=\"a-le-row-body\"\n >\n <div class=\"a-le-form\">\n <slot\n name=\"item-readonly\"\n v-bind=\"buildSlotProps(vi)\"\n />\n </div>\n </div>\n </div>\n\n <slot\n name=\"after-item\"\n v-bind=\"buildSlotProps(vi)\"\n />\n </div>\n </div>\n\n <slot\n v-if=\"canAdd && !loading && !error && !isEmpty\"\n name=\"add-button\"\n :readonly=\"readonly\"\n :disabled=\"disabled\"\n :props=\"{ onClick: onAddClick }\"\n :actions=\"{ add: onAddClick }\"\n >\n <button\n type=\"button\"\n class=\"a-le-row-add\"\n @click=\"onAddClick\"\n >\n <VIcon\n icon=\"mdi-plus\"\n size=\"18\"\n />\n <span>{{ addLabelResolved }}</span>\n </button>\n </slot>\n </div>\n\n <LeMoveToPositionDialog\n v-model=\"moveToPositionDialogOpen\"\n :total=\"viewItemsDecorated.length\"\n :current-index=\"moveToPositionTarget?.index ?? 0\"\n :item-label=\"moveToPositionLabel\"\n @confirm=\"onMoveToPositionConfirm\"\n />\n\n <LeDeleteDialog\n v-model=\"deleteDialog\"\n :title=\"deleteConfirmTitleResolved\"\n :text=\"deleteConfirmTextResolved\"\n :confirm-label=\"t('common.sortable.delete')\"\n :cancel-label=\"t('common.button.cancel')\"\n :error=\"deleteError\"\n :in-flight=\"deleteInFlight\"\n @confirm=\"onDeleteDialogConfirm\"\n @cancel=\"onDeleteDialogCancel\"\n />\n\n <div\n class=\"a-le-sr-only\"\n aria-live=\"polite\"\n role=\"status\"\n >\n {{\n keyboardNav.grabbedKey.value !== null\n ? t('common.sortable.keyboardGrab.status', {\n n: keyboardNav.grabbedIndex.value + 1,\n total: keyboardNav.totalCount.value,\n })\n : ''\n }}\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use '../styles/tokens';\n@use '../styles/shared';\n\n// Variant-specific rules: reorder-mode trims, drag clone styling, chips\n// flex-wrap layout, validation rail.\n.a-sortable-list-editor {\n &__rows {\n display: flex;\n flex-direction: column;\n }\n\n // View-mode body slot — match the row's horizontal rhythm (~16 px) with a\n // vertical inset so content doesn't sit flush against the border.\n .a-le-view-body {\n padding: 12px 16px;\n }\n\n // Reorder mode trims row-header padding since the drag handle eats some of it.\n .a-le-row--reorder .a-le-row-header {\n padding-left: 12px;\n padding-right: 8px;\n gap: 8px;\n }\n\n // Drag rendering — SortableJS clone + ghost + chosen source.\n .a-le-row--ghost {\n opacity: 0.35;\n background: var(--le-primary-state);\n }\n\n .a-le-row--chosen {\n opacity: 0.5;\n }\n\n // Floating clone following the cursor — row-shaped card with elevation; action\n // column + status badge hidden (below) so the preview stays clean.\n .a-le-row--drag {\n background: var(--le-surface);\n border: 1px solid var(--le-border);\n border-radius: var(--le-radius);\n box-shadow: var(--le-elev-3);\n max-width: 420px;\n opacity: 0.96;\n pointer-events: none;\n }\n\n .a-le-row--drag .a-le-actions,\n .a-le-row--drag .a-le-status {\n display: none;\n }\n\n // Header-only-with-reorder variant — no title/header slot, so render a slim\n // band right-aligning just the Reorder button.\n &--header-floating .a-le-header {\n justify-content: flex-end;\n padding: 6px 8px;\n min-height: 0;\n }\n\n // Embedded variant — sits inside another editor's row. Drop card chrome,\n // tighten rows, lighten background so it reads as part of the parent's body.\n &--embedded .a-le-card {\n background: transparent;\n border: none;\n box-shadow: none;\n border-radius: 0;\n }\n\n &--embedded .a-le-header {\n padding: 4px 0 6px;\n min-height: auto;\n background: transparent;\n border: none;\n }\n\n &--embedded .a-le-title-heading {\n font-size: 13px;\n font-weight: 500;\n color: var(--le-on-surface-medium, rgb(0 0 0 / 70%));\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n\n &--embedded .a-le-row {\n background: var(--le-surface);\n border: 1px solid var(--le-border);\n border-radius: 6px;\n }\n\n // The inter-row gap lives on the wrapper (the real list item). `.a-le-row` is no\n // longer its wrapper's last child once `#after-item` renders, so the old\n // `.a-le-row:last-of-type` reset stopped clearing the trailing gap. (QA 85050 BUG-04/05)\n &--embedded .a-le-row-wrapper:not(:last-child) {\n margin-bottom: 4px;\n }\n\n &--embedded .a-le-row-add {\n min-height: var(--le-row-min-height);\n padding: 0 16px;\n background: transparent;\n border: 1px dashed var(--le-border);\n border-radius: 6px;\n color: var(--le-primary);\n margin-top: 4px;\n width: 100%;\n }\n\n &--embedded .a-le-row-add:hover {\n background: var(--le-primary-state);\n border-style: solid;\n }\n\n // Chips-layout overrides — `__rows` flex-wraps into pills, `row-header` gets\n // 8 px left padding (vs 12 px in AListEditor), `drag-handle` shrinks to the\n // pill height.\n &--chips &__rows {\n display: flex;\n\n // Reset the base column direction — chips flow inline and wrap.\n flex-flow: row wrap;\n gap: 6px;\n flex: 1 1 100%;\n }\n\n &--chips .a-le-row-header {\n padding: 2px 4px 2px 8px;\n gap: 4px;\n min-height: 28px;\n }\n\n &--chips .a-le-drag-handle {\n padding: 0;\n font-size: 16px;\n }\n}\n\n// Narrow-container / mobile layout — taller rows, always-visible actions,\n// status badge dropped for room.\n/* stylelint-disable selector-max-compound-selectors */\n@container le-shell (max-width: 768px) {\n .a-sortable-list-editor {\n --le-row-min-height: 48px;\n --le-row-pad-y: 10px;\n\n .a-le-row:not(.a-le-row--editing) .a-le-status {\n display: none;\n }\n\n .a-le-row .a-le-action--edit,\n .a-le-row .a-le-action--delete,\n .a-le-row .a-le-action--menu {\n opacity: 1;\n }\n }\n}\n/* stylelint-enable selector-max-compound-selectors */\n</style>\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ASortableListEditor.vue_vue_type_script_setup_true_lang.js","names":["$slots","_useModel","resolveCompactText","resolveCompactTextUtil","_openBlock","_createElementBlock","_normalizeClass","_unref","_createElementVNode","_renderSlot","_mergeProps","_toDisplayString","_createCommentVNode","_normalizeProps","_guardReactiveProps","_createVNode","LeStatus","_component_VBtn","_withCtx","_createTextVNode","_createBlock","_component_VIcon","_component_VTooltip","_component_VProgressCircular","_component_VAlert","LeEmptyState","_Fragment","_renderList","LeDragHandle","LeUnsavedLabel","_withModifiers","_component_VMenu","_component_VList","_component_VListItem","_component_VListItemTitle","LeMoveToPositionDialog","LeDeleteDialog","_isRef","LeDeleteDialog_default","LeMoveToPositionDialog_default","LeEmptyState_default","LeStatus_default","LeUnsavedLabel_default","LeDragHandle_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","_hoisted_18","_hoisted_19","_hoisted_20","_hoisted_21","_hoisted_22","ASortableListEditor_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","\"mode\"","\"modeModifiers\"","__expose","__emit","props","__props","emit","modelProp","useModel","pendingWrite","wroteDuringLoad","modelValue","customRef","current","v","trigger","nextTick","mode","useI18n","slots","useSlots","rootEl","useTemplateRef","useContainerWidth","isTouch","useIsTouchDevice","hasCoarsePointer","useHasCoarsePointer","controllerOptions","stateEntry","useListEditorStateEntry","controller","useListEditorController","cleanAtLoadStart","now","getKeyOpt","rowStateScope","provideListEditorStateScope","keyOf","item","positionFieldName","computed","p","viewItems","raw","vi","expandedKeys","ref","movedKeys","sessionDeferredDeletes","sessionImmediateDeletes","sessionAddedKeys","sessionMovedKeys","snapshot","shallowRef","rowsContainer","isInlineEdit","hasReadonlyDetail","useInlineEditing","key","data","it","hit","canInteract","canEnterReorder","embeddedRef","allowEditInReorderRef","useReorderMode","cloneDeep","m","clearEditing","items","payload","err","childContributions","shallowReactive","provide","SharedReorderRegistryKey","id","totalMovedCount","sum","movedCount","c","totalHasPendingChanges","hasPendingChanges","totalPendingCount","totalPendingChanges","parent","inject","validateAllSelf","onBeforeUnmount","canAdd","reorderMode","dragEnabled","addLabelResolved","t","emptyTitleResolved","deleteConfirmTitleResolved","deleteConfirmTextResolved","reorderToggleVisible","compactReorderButton","isNarrow","unsavedCount","unsavedCountVisible","headerVisible","headerHasContent","showInlineSaveFooter","markMoved","decoratorCache","viewItemsDecorated","total","next","liveKeys","editing","editingKeys","expanded","loading","moved","unsaved","dirty","validationState","canMoveUp","canMoveDown","cached","decorated","isEmpty","findVi","openRow","beginEdit","openAll","validateAllAndReveal","keyboardNav","useKeyboardNav","onEditClick","onCloseClick","moveUp","moveDown","moveTop","moveBottom","cancelReorderMode","moveToPositionDialogOpen","moveToPositionTarget","moveToPositionLabel","resolveCompactText$1","openMoveToPosition","onMoveToPositionConfirm","target","newIndex","resolveCompactText","sortable","useSortable","DRAG_GHOST_CLASS","DRAG_CHOSEN_CLASS","DRAG_CLASS","event","oldIndex","from","el","n","stringToInt","onAddClick","requestAutoOpen","onRowAddAfterClick","onExpandClick","currentlyExpanded","k","isRowClickable","onRowClick","triggerDeleteClick","useDeleteDialog","editingSnapshots","deferred","onDeleteClick","savingKeys","onSaveClick","commitEdit","onCancelClick","closeEdit","keyAtIndex","idx","actionsCache","getActions","actions","buildSlotProps","toolbarSlotProps","applying","applyError","applyReorder","reorderToggleSlotProps","useUnsavedSection","savedItems","selfValid","valid","child","openBlock","createElementBlock","normalizeClass","unref","createElementVNode","renderSlot","_ctx","mergeProps","toDisplayString","createCommentVNode","normalizeProps","guardReactiveProps","createVNode","VBtn","withCtx","createTextVNode","createBlock","enterReorderMode","VIcon","VTooltip","VProgressCircular","VAlert","Fragment","renderList","$event","withModifiers","VMenu","VList","VListItem","VListItemTitle","_cache","deleteDialog","isRef","deleteError","deleteInFlight","onDeleteDialogConfirm","onDeleteDialogCancel"],"sources":["../../../../src/domains/listEditor/components/ASortableListEditor.vue"],"sourcesContent":["<script setup lang=\"ts\" generic=\"TItem extends Record<string, any>\">\nimport {\n customRef,\n nextTick,\n computed,\n inject,\n onBeforeUnmount,\n provide,\n ref,\n shallowReactive,\n shallowRef,\n useSlots,\n useTemplateRef,\n watch,\n type ComputedRef,\n} from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useContainerWidth } from '@/domains/listEditor/composables/useContainerWidth'\nimport { useHasCoarsePointer, useIsTouchDevice } from '@/domains/listEditor/composables/useIsTouchDevice'\nimport { useKeyboardNav } from '@/domains/listEditor/composables/useKeyboardNav'\nimport { useSortable } from '@vueuse/integrations/useSortable'\nimport {\n useListEditorController,\n type GetKey,\n type ListEditorHandle,\n type ListEditorValidationResult,\n type PositionAction,\n type PositionOption,\n type PositionStrategy,\n} from '@/domains/listEditor/composables/useListEditorController'\nimport {\n provideListEditorStateScope,\n useListEditorStateEntry,\n type ListEditorStateBindings,\n} from '@/domains/listEditor/composables/useListEditorStateScope'\nimport { resolveCompactText as resolveCompactTextUtil } from '@/domains/listEditor/utils/resolveCompactText'\nimport { useUnsavedSection } from '@/domains/unsavedGuard/composables/useUnsavedSection'\nimport { useDeleteDialog } from '@/domains/listEditor/composables/useDeleteDialog'\nimport { useInlineEditing } from '@/domains/listEditor/composables/useInlineEditing'\nimport { validateAllAndReveal } from '@/domains/listEditor/utils/revealInvalidRows'\nimport { useListEditorScopeValidity } from '@/domains/listEditor/composables/useListEditorScopeValidity'\nimport {\n useReorderMode,\n SharedReorderRegistryKey,\n type SharedReorderRegistry,\n} from '@/domains/listEditor/composables/useReorderMode'\nimport LeDeleteDialog from '@/domains/listEditor/components/internal/LeDeleteDialog.vue'\nimport LeMoveToPositionDialog from '@/domains/listEditor/components/internal/LeMoveToPositionDialog.vue'\nimport LeEmptyState from '@/domains/listEditor/components/internal/LeEmptyState.vue'\nimport LeStatus from '@/domains/listEditor/components/internal/LeStatus.vue'\nimport LeUnsavedLabel from '@/domains/listEditor/components/internal/LeUnsavedLabel.vue'\nimport LeDragHandle from '@/domains/listEditor/components/internal/LeDragHandle.vue'\nimport { DRAG_GHOST_CLASS, DRAG_CHOSEN_CLASS, DRAG_CLASS } from '@/domains/listEditor/components/internal/constants'\nimport { cloneDeep } from '@/shared/utils/common'\nimport { stringToInt } from '@/shared/utils/string'\nimport type {\n ListEditorKey,\n ListEditorValidationScope,\n ListEditorValidationState,\n ListViewItem,\n} from '@/domains/listEditor/types/listEditorTypes'\n\nexport interface DecoratedViewItem<T> extends ListViewItem<T> {\n editing: boolean\n expanded: boolean\n loading: boolean\n dirty: boolean\n moved: boolean\n unsaved: boolean\n validationState: ListEditorValidationState\n canMoveUp: boolean\n canMoveDown: boolean\n}\n\nexport type ReorderMode = 'view' | 'reorder'\n\n// Public slot scope shapes — see AListEditor for the hoisting rationale.\nexport interface RowActions<TItem> {\n edit: () => void\n save: () => Promise<void> | void\n cancel: () => void\n close: () => void\n delete: () => Promise<void>\n addAfter: () => void\n toggleExpand: () => void\n moveUp: () => void\n moveDown: () => void\n moveTop: () => void\n moveBottom: () => void\n update: (next: TItem | Partial<TItem> | ((current: TItem) => TItem)) => void\n}\nexport interface RowSlotProps<TItem extends Record<string, any>> {\n item: DecoratedViewItem<TItem>\n raw: TItem\n index: number\n key: ListEditorKey\n readonly: boolean\n disabled: boolean\n expanded: boolean\n editing: boolean\n dirty: boolean\n unsaved: boolean\n reorderMode: boolean\n moved: boolean\n canMoveUp: boolean\n canMoveDown: boolean\n touch: boolean\n /**\n * Row-scoped `state-key` prefix. Thread it down to any list editor rendered in this slot and set\n * its `:state-key=\"`${stateKeyPrefix}:someList`\"` — that editor's controller then lives in THIS\n * editor's scope and survives the row collapsing (which unmounts the whole slot subtree). Entries\n * under this prefix are disposed when the row is removed.\n */\n stateKeyPrefix: string\n actions: RowActions<TItem>\n}\nexport interface ToolbarSlotProps {\n applying: boolean\n hasPendingChanges: boolean\n movedCount: number\n error: string | null\n actions: { apply: () => Promise<void>; cancel: () => void }\n}\nexport interface ReorderToggleSlotProps {\n mode: ReorderMode\n disabled: boolean\n hasPendingChanges: boolean\n actions: { enterReorderMode: () => void; exitReorderMode: () => void }\n}\nexport interface HeaderSlotProps extends ReorderToggleSlotProps {\n title: string | null\n}\nexport interface EmptySlotProps {\n readonly: boolean\n disabled: boolean\n actions: { add: () => void }\n}\nexport interface AddButtonSlotProps {\n readonly: boolean\n disabled: boolean\n props: { onClick: () => void }\n actions: { add: () => void }\n}\nexport interface ViewBodySlotProps<TItem extends Record<string, any>> {\n items: TItem[]\n mode: ReorderMode\n actions: { enterReorderMode: () => void }\n}\n\nexport interface Props<TItem extends Record<string, any>> {\n /**\n * New-row factory (required). The add button + \"add after this item\" insert\n * `factory()` into the model directly through the controller (positions\n * renumbered) — no consumer `@add` push handler is needed.\n */\n factory?: () => TItem\n /**\n * Stable row identity. Default `'id'`. Never point this at the position field.\n * Typed `string` (not `keyof TItem`): a bare `keyof TItem` on a generic\n * component compiles to a Boolean-only runtime type that coerces `get-key=\"id\"` to `true`.\n */\n getKey?: string | ((item: TItem) => ListEditorKey)\n /**\n * Managed order field. Default `'position'`. `false` opts out. Typed `string`\n * before `false` so the runtime prop type is `[String, Boolean, Object]`:\n * `keyof TItem` would be Boolean-only, and `false` listed first would coerce\n * `position=\"position\"` (value == prop name) to `true`.\n */\n position?:\n | string\n | false\n | {\n field: string\n multiplier?: number\n strategy?: PositionStrategy\n strategyOverrides?: Partial<Record<PositionAction, PositionStrategy>>\n }\n /**\n * Extra fields to drop from the dirty content-hash (position is always\n * dropped). Use when a SEPARATE nested editor tracks a row's child collection,\n * so editing a child doesn't flip the parent amber. The field is still saved.\n */\n dirtyExclude?: string[]\n /** Per-row validity — `true` (or `{ valid: true }`) = VALID. Drives the red rail + save guard. */\n validate?: (item: TItem) => ListEditorValidationResult\n /**\n * Vuelidate `$scope` (the same one the consumer's row forms / save-gate collector use). When set,\n * the editor registers its aggregate validity under it, so a plain `v$.$invalid` save gate blocks\n * AND reveals a collapsed invalid row — no `validateAll()` call needed in the save flow. Omit to\n * keep legacy behavior (gate the save on the exposed `validateAll()` yourself); `false` opts out.\n */\n validationScope?: ListEditorValidationScope | false\n /**\n * Opt-in lifted state controller (from consumer's `useListEditorController()`)\n * so editor state survives this component's unmount/remount (pinned-widget\n * relocation). When omitted the editor owns an internal controller.\n */\n editor?: ListEditorHandle<TItem>\n /**\n * Persist this editor's controller in the nearest ANCESTOR editor's row-state scope under this\n * key, instead of owning it. Use it for an editor rendered in another editor's `#item` slot: that\n * slot is behind a `v-if`, so collapsing the row unmounts this editor and a component-owned\n * controller would re-baseline the already-edited data on re-expand (losing amber, moved rows,\n * tombstones and the red rail). Derive the key from the row slot's `stateKeyPrefix`, e.g.\n * `:state-key=\"`${stateKeyPrefix}:answers`\"`. Options stay declared here, on this tag: the\n * controller is built from THIS editor's `factory`/`get-key`/`position`/`dirty-exclude`/`validate`\n * and rebound to each new instance's model on remount. Ignored when `:editor` is passed, and a\n * no-op without an ancestor scope.\n */\n stateKey?: string\n\n readonly?: boolean\n disabled?: boolean\n loading?: boolean\n error?: string | null\n\n /** Heading above the list. A ready translated string, like every text prop here. */\n title?: string | null\n\n /**\n * Field shown in a collapsed row when no `#item-compact` slot is given. A dotted path reads\n * through nested objects (`texts.title`); a path that runs into nothing renders empty.\n */\n compactField?: string | null\n statusField?: string | null\n twoRows?: 'never' | 'mobile' | 'always'\n chips?: boolean\n\n showAddButton?: boolean\n showDeleteButton?: boolean\n showEditButton?: boolean\n showAddAfterAction?: boolean\n\n /** Label of the add button. A ready translated string; omit it for the library's own wording. */\n addLabel?: string | null\n /** Heading of the empty state. A ready translated string. */\n emptyTitle?: string | null\n\n disableRowClick?: boolean\n disableDeleteConfirm?: boolean\n /**\n * Disables unsaved-state tracking: no dirty markers, never reads as unsaved.\n * For a list that is a view of data owned elsewhere, where nothing can clear an amber row. Mirrors `AListEditor`.\n */\n disableUnsaved?: boolean\n deleteConfirmTitle?: string | null\n deleteConfirmText?: string | null\n /**\n * How a row delete persists. `deferred` (default): the row disappears but the deletion counts as an\n * unconfirmed change until save (revertible until then, incl. via reorder Cancel). `immediate`: the\n * consumer deletes on the backend — the dialog says it is irreversible and it does NOT read as unsaved.\n */\n deleteMode?: 'immediate' | 'deferred'\n\n closeVariant?: 'auto' | 'icon' | 'labeled'\n\n loadingKeys?: Set<ListEditorKey> | null\n\n showReorderToggle?: boolean\n disableReorder?: boolean\n disableDrag?: boolean\n showMoveToPosition?: boolean\n\n /**\n * Embedded mode — nested inside another editor's `#item` slot, following a\n * shared `v-model:mode`. Hides own Reorder button + toolbar, skips the\n * snapshot/restore (the outer editor's deep snapshot covers nested data), and\n * paints lighter chrome. Pair with `v-model:mode` bound to the outer ref.\n */\n embedded?: boolean\n /**\n * Keep rows inline-editable in reorder mode. By default entering reorder\n * closes any open edit and hides the `#item` body to focus on dragging. Set\n * for a shared-reorder pair's parent, where the open row exposes its embedded\n * answers list for dragging.\n */\n allowEditInReorder?: boolean\n\n onDeleteConfirm?: (item: TItem) => Promise<boolean> | boolean\n onDelete?: (item: TItem) => Promise<void> | void\n onItemSave?: (item: TItem) => Promise<void> | void\n onReorderApply?: (items: TItem[]) => Promise<void> | void\n\n /** Register as a named unsaved-changes section under this (translated) label. */\n unsavedSectionLabel?: string\n}\n\nconst props = withDefaults(defineProps<Props<TItem>>(), {\n factory: undefined,\n getKey: undefined,\n position: undefined,\n dirtyExclude: undefined,\n validate: undefined,\n validationScope: undefined,\n editor: undefined,\n stateKey: undefined,\n readonly: false,\n disabled: false,\n loading: false,\n error: null,\n title: null,\n compactField: null,\n statusField: null,\n twoRows: 'never',\n chips: false,\n showAddButton: true,\n showDeleteButton: true,\n showEditButton: true,\n showAddAfterAction: false,\n addLabel: null,\n emptyTitle: null,\n disableRowClick: false,\n disableDeleteConfirm: false,\n disableUnsaved: false,\n deleteConfirmTitle: null,\n deleteConfirmText: null,\n deleteMode: 'deferred',\n closeVariant: 'auto',\n loadingKeys: null,\n showReorderToggle: true,\n disableReorder: false,\n disableDrag: false,\n showMoveToPosition: false,\n embedded: false,\n allowEditInReorder: false,\n onDeleteConfirm: undefined,\n onDelete: undefined,\n onItemSave: undefined,\n onReorderApply: undefined,\n unsavedSectionLabel: undefined,\n})\n\nconst emit = defineEmits<{\n edit: [item: ListViewItem<TItem>]\n deleted: [item: ListViewItem<TItem>]\n close: [item: ListViewItem<TItem>]\n 'item-saved': [item: ListViewItem<TItem>]\n 'item-expand': [item: ListViewItem<TItem>, expanded: boolean]\n 'reorder-start': []\n 'reorder-cancel': []\n 'reorder-applied': [items: TItem[]]\n 'reorder-apply-error': [error: unknown]\n 'reorder-end': []\n}>()\n\ndefineSlots<{\n header?: (props: HeaderSlotProps) => unknown\n 'reorder-toggle'?: (props: ReorderToggleSlotProps) => unknown\n 'reorder-toolbar'?: (props: ToolbarSlotProps) => unknown\n empty?: (props: EmptySlotProps) => unknown\n 'add-button'?: (props: AddButtonSlotProps) => unknown\n 'view-body'?: (props: ViewBodySlotProps<TItem>) => unknown\n item?: (props: RowSlotProps<TItem>) => unknown\n 'item-compact'?: (props: RowSlotProps<TItem>) => unknown\n 'item-readonly'?: (props: RowSlotProps<TItem>) => unknown\n 'item-status'?: (props: RowSlotProps<TItem>) => unknown\n 'item-actions'?: (props: RowSlotProps<TItem>) => unknown\n 'item-footer'?: (props: RowSlotProps<TItem>) => unknown\n 'before-item'?: (props: RowSlotProps<TItem>) => unknown\n 'after-item'?: (props: RowSlotProps<TItem>) => unknown\n}>()\n\nconst modelProp = defineModel<TItem[]>({ required: true })\n// The v-model prop lags an emitted write until the parent re-renders. Same-tick reads must see the write.\n// Otherwise a second write or the reorder-Cancel reconciliation overwrites the first.\nlet pendingWrite: TItem[] | null = null\nlet wroteDuringLoad = false\nwatch(modelProp, () => (pendingWrite = null), { flush: 'sync' })\nconst modelValue = customRef<TItem[]>((track, trigger) => ({\n get: () => {\n track()\n // Read the prop every time, pending write or not: a computed evaluated while a write is pending must\n // still subscribe to it.\n const current = modelProp.value\n return pendingWrite ?? current\n },\n set: (v) => {\n wroteDuringLoad = true\n pendingWrite = v\n modelProp.value = v\n trigger()\n // Only this write's own clear: a newer pending write stays. The trigger lets readers see the prop\n // again, e.g. when the parent ignored the update.\n nextTick(() => {\n if (pendingWrite !== v) return\n pendingWrite = null\n trigger()\n })\n },\n}))\nconst mode = defineModel<ReorderMode>('mode', { default: 'view' })\n\nconst { t } = useI18n()\nconst slots = useSlots()\n\nconst rootEl = useTemplateRef<HTMLElement>('rootEl')\nconst { isNarrow } = useContainerWidth(rootEl)\n\nconst isTouch = useIsTouchDevice()\nconst hasCoarsePointer = useHasCoarsePointer()\n\n// State controller (v2). `factory`/`getKey`/`position`/`validate` are construction-time options read\n// once to seed the controller, not reactive props — hence the suppressed reactivity-loss rule.\n// Undefined options fall back to controller defaults ('id' / 'position' / always-valid).\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst controllerOptions: ListEditorStateBindings<TItem> = {\n get: () => modelValue.value,\n set: (v) => (modelValue.value = v),\n factory: props.factory,\n getKey: props.getKey as GetKey<TItem> | undefined,\n position: props.position as PositionOption<TItem> | undefined,\n dirtyExclude: () => props.dirtyExclude ?? [],\n validate: props.validate,\n}\n// Precedence: an explicitly lifted `:editor` wins; then a `state-key`'d entry persisted in the\n// nearest ancestor editor's row-state scope (built from the options above, rebound to this instance\n// on every remount); else this component owns the controller — today's behaviour, unchanged.\nconst stateEntry = props.editor ? null : useListEditorStateEntry<TItem>(props.stateKey, controllerOptions)\nconst controller = props.editor ?? stateEntry?.handle ?? useListEditorController<TItem>(controllerOptions)\n// Rows arriving while `loading` are the loaded state, not user\n// adds, but only if the editor was clean when loading began.\n// `loading` also covers saving pending work, which must stay pending.\n// A controller passed in (`:editor`, `state-key`) can keep pending edits across a remount, so it is not clean then.\nlet cleanAtLoadStart = props.loading && !controller.hasUnsaved.value\nwatch(\n () => props.loading,\n (now) => {\n if (now) {\n cleanAtLoadStart = !controller.hasUnsaved.value\n wroteDuringLoad = false\n } else if (cleanAtLoadStart && !wroteDuringLoad) controller.commit(modelValue.value)\n }\n)\n\n// Local mirror of the controller's key resolution so rendered rows key the same\n// way the controller tracks them (v2 spec point 7).\nconst getKeyOpt = props.getKey ?? 'id'\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\n// Row-state scope for THIS editor's `#item` slot subtree: a nested editor with a `state-key` builds\n// its controller in here, so it outlives the row collapsing (which unmounts the slot). When this\n// editor is itself persisted, the scope comes from its own entry — so the chain holds at any depth.\nconst rowStateScope = provideListEditorStateScope(stateEntry?.childScope ?? null)\nconst keyOf = (item: TItem): ListEditorKey =>\n typeof getKeyOpt === 'function' ? getKeyOpt(item) : (item[getKeyOpt as keyof TItem] as ListEditorKey)\n\n// Managed position field (for the row position view field + move-to-position\n// dialog). Mirrors the controller's resolution.\nconst positionFieldName = computed<string>(() => {\n const p = props.position\n if (p === undefined) return 'position'\n if (p === false) return 'position'\n if (typeof p === 'object') return p.field as string\n return p as string\n})\n\n// Keyed render projection (key + index + raw + position); the controller owns the data.\nconst viewItems = computed<ListViewItem<TItem>[]>(() =>\n modelValue.value.map((raw, index) => ({\n key: keyOf(raw),\n index,\n raw,\n position: raw[positionFieldName.value] as number | undefined,\n }))\n)\n\n// Drop the persisted controllers of rows that no longer exist. `post` so the removed row's subtree\n// has already unmounted (its editors released their entries) before we stop their effect scopes.\nwatch(\n () => viewItems.value.map((vi) => String(vi.key)).join('|'),\n () => rowStateScope.retainOwners(viewItems.value.map((vi) => vi.key)),\n { flush: 'post' }\n)\n\nconst expandedKeys = ref<Set<ListEditorKey>>(new Set())\n\n// Reorder-session moved set — component view state, distinct from the\n// controller's persistent moved tracking. Drives the toolbar's \"N pending\n// changes\" counter; cleared on every mode transition by `useReorderMode`.\nconst movedKeys = ref<Set<ListEditorKey>>(new Set())\n// Deletes made DURING the current reorder session, split by mode. Deferred ones count in the toolbar\n// and are reverted on Cancel (row restored, tombstone cleared). Immediate (backend) ones are re-applied\n// on Cancel so they stay gone — else Cancel's snapshot-restore would resurrect a row already deleted on\n// the server (a phantom a later save could re-create).\nconst sessionDeferredDeletes = ref<Set<ListEditorKey>>(new Set())\nconst sessionImmediateDeletes = ref<Set<ListEditorKey>>(new Set())\n// Rows ADDED during the current reorder session (\"Pridať za túto položku\"). Count in the toolbar so\n// Apply enables instead of trapping the user; Cancel drops them (snapshot-restore removes rows that\n// weren't in the enter-time snapshot).\nconst sessionAddedKeys = ref<Set<ListEditorKey>>(new Set())\n// Rows MOVED during the current reorder session. On Cancel the snapshot-restore undoes the reorder, so\n// these keys' persistent \"moved\" flag must be dropped from the controller too (else they stay falsely\n// amber + arm the leave guard for a reorder that never happened). Apply keeps them (persisted on save).\nconst sessionMovedKeys = ref<Set<ListEditorKey>>(new Set())\n\nconst snapshot = shallowRef<TItem[] | null>(null)\n\nconst rowsContainer = useTemplateRef<HTMLElement>('rowsContainer')\n\nconst isInlineEdit = computed(() => !props.chips && !!slots.item)\nconst hasReadonlyDetail = computed(() => !props.chips && !!slots['item-readonly'])\n\nconst { editingKeys, editingSnapshots, clearEditing, beginEdit, cancelEdit, commitEdit, closeEdit, requestAutoOpen } =\n useInlineEditing<TItem, ListViewItem<TItem>>({\n rowsContainer,\n rowSelector: '.a-le-row',\n isInlineEdit,\n restoreSnapshot: (key, data) => controller.updateItem(key, data),\n watchKeys: () => modelValue.value.map((it) => keyOf(it)),\n findEntry: (key) => {\n const hit = modelValue.value.find((it) => keyOf(it) === key)\n return hit ? { data: hit } : null\n },\n afterAutoOpen: (key) => {\n expandedKeys.value.delete(key)\n },\n })\n\nconst canInteract = computed(() => !props.readonly && !props.disabled && !props.loading)\nconst canEnterReorder = computed(() => canInteract.value && !props.disableReorder && modelValue.value.length > 1)\n\nconst embeddedRef = computed(() => props.embedded)\nconst allowEditInReorderRef = computed(() => props.allowEditInReorder)\n\nconst {\n applying,\n applyError,\n hasPendingChanges,\n movedCount,\n reorderMode,\n enterReorderMode,\n cancelReorderMode,\n applyReorder,\n} = useReorderMode<TItem[]>({\n mode,\n snapshot,\n movedKeys,\n modelValue,\n cloneModel: (m) => cloneDeep(m) as TItem[],\n applyModel: (m) => {\n modelValue.value = m\n },\n canEnterReorder,\n embedded: embeddedRef,\n onEnter: () => {\n sessionDeferredDeletes.value = new Set()\n sessionImmediateDeletes.value = new Set()\n sessionAddedKeys.value = new Set()\n sessionMovedKeys.value = new Set()\n if (!allowEditInReorderRef.value) {\n clearEditing()\n expandedKeys.value.clear()\n }\n },\n onExternalEnter: () => {\n sessionDeferredDeletes.value = new Set()\n sessionImmediateDeletes.value = new Set()\n sessionAddedKeys.value = new Set()\n sessionMovedKeys.value = new Set()\n if (!allowEditInReorderRef.value) {\n clearEditing()\n expandedKeys.value.clear()\n }\n },\n // Cancel reverts the session. The composable's snapshot-restore has already brought EVERY deleted row\n // back into the model; reconcile the controller: deferred deletes are truly reverted (clear tombstone,\n // row stays), immediate deletes are re-applied (row removed again — it is gone on the backend and must\n // not resurrect or be re-created by a later save).\n onCancel: () => {\n for (const key of sessionDeferredDeletes.value) controller.restoreDeleted(key)\n for (const key of sessionImmediateDeletes.value) controller.deleteItem(key, { trackDeleted: false })\n // Snapshot-restore already undid the reorder — drop the controller's \"moved\" flag for exactly the\n // rows moved this session (edits/adds keep their amber), so a cancelled reorder leaves no false unsaved.\n controller.clearMoved(sessionMovedKeys.value)\n sessionDeferredDeletes.value = new Set()\n sessionImmediateDeletes.value = new Set()\n sessionAddedKeys.value = new Set()\n sessionMovedKeys.value = new Set()\n },\n // Apply keeps the session's changes (deferred deletes persist on the entity's main save; moved rows stay\n // amber in the controller until the consumer commits after their save — only reset the session tracker).\n onApplyEnd: () => {\n sessionDeferredDeletes.value = new Set()\n sessionImmediateDeletes.value = new Set()\n sessionAddedKeys.value = new Set()\n sessionMovedKeys.value = new Set()\n },\n // Embedded editor exit (parent Cancel or Apply — it owns the snapshot, we never do). On a parent\n // Cancel the snapshot-restore resurrects any row we deleted IMMEDIATELY on the backend; re-remove it so\n // it stays gone. On Apply it never came back, so `deleteItem` is a no-op. Deferred deletes need nothing:\n // the controller's re-add watch drops their tombstone when the restore brings the row back.\n onEmbeddedExit: () => {\n for (const key of sessionImmediateDeletes.value) controller.deleteItem(key, { trackDeleted: false })\n sessionDeferredDeletes.value = new Set()\n sessionImmediateDeletes.value = new Set()\n sessionAddedKeys.value = new Set()\n sessionMovedKeys.value = new Set()\n },\n onReorderApply: (items) => props.onReorderApply?.(items),\n emit: {\n reorderStart: () => emit('reorder-start'),\n reorderCancel: () => emit('reorder-cancel'),\n reorderApplied: (payload) => emit('reorder-applied', payload),\n reorderApplyError: (err) => emit('reorder-apply-error', err),\n reorderEnd: () => emit('reorder-end'),\n },\n})\n\n// Stacked-editor registry: outer collects movedCount + hasChanges from embedded\n// children for the toolbar counter. shallowReactive preserves ComputedRef\n// identity (no auto-unwrap).\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst childContributions = props.embedded\n ? null\n : shallowReactive(\n new Map<symbol, { count: ComputedRef<number>; hasChanges: ComputedRef<boolean>; validateAll: () => boolean }>()\n )\n\nif (childContributions) {\n const registry: SharedReorderRegistry = {\n register: (id, count, hasChanges, validateAll) => {\n childContributions.set(id, { count, hasChanges, validateAll })\n },\n unregister: (id) => {\n childContributions.delete(id)\n },\n }\n provide(SharedReorderRegistryKey, registry)\n}\n\n// Own session moves + each embedded child's FULL pending contribution (moves + its own deferred\n// deletes — children register `totalPendingCount`, see below). The outer's own deferred deletes are\n// added on top in `totalPendingCount`.\nconst totalMovedCount = computed<number>(() => {\n let sum = movedCount.value\n if (childContributions) {\n for (const c of childContributions.values()) sum += c.count.value\n }\n return sum\n})\n\nconst totalHasPendingChanges = computed<boolean>(() => {\n if (hasPendingChanges.value) return true\n if (childContributions) {\n for (const c of childContributions.values()) {\n if (c.hasChanges.value) return true\n }\n }\n return false\n})\n\n// Reorder-toolbar pending indicator = session moves + deferred deletes made in the session, so\n// deleting a row in reorder mode no longer reads as \"no pending changes\" and Apply stays enabled.\nconst totalPendingCount = computed<number>(\n () => totalMovedCount.value + sessionDeferredDeletes.value.size + sessionAddedKeys.value.size\n)\nconst totalPendingChanges = computed<boolean>(\n () => totalHasPendingChanges.value || sessionDeferredDeletes.value.size > 0 || sessionAddedKeys.value.size > 0\n)\n\n// An embedded editor pushes its FULL pending contribution — moves AND deferred deletes — up to the\n// nearest non-embedded outer, so deleting a row in an embedded child during a shared reorder lights up\n// the outer's toolbar (count + Apply-enabled) instead of reading \"no pending changes\". Registered after\n// `totalPendingCount`/`totalPendingChanges` so they exist (TDZ); `validateAllSelf` is a lazy thunk.\nif (props.embedded) {\n const parent = inject(SharedReorderRegistryKey, null)\n if (parent) {\n const id = Symbol('le.embedded')\n parent.register(id, totalPendingCount, totalPendingChanges, () => validateAllSelf())\n onBeforeUnmount(() => parent.unregister(id))\n }\n}\n\nconst canAdd = computed(() => canInteract.value && props.showAddButton && !reorderMode.value)\n// Chips mode keeps drag always-on (no mode toggle) on non-touch devices.\nconst dragEnabled = computed(\n () => canInteract.value && (reorderMode.value || props.chips) && !isTouch.value && !props.disableDrag\n)\n\nconst addLabelResolved = computed(() => props.addLabel ?? t('common.sortable.add'))\nconst emptyTitleResolved = computed(() => props.emptyTitle ?? t('common.sortable.emptyTitle'))\nconst deleteConfirmTitleResolved = computed(() => props.deleteConfirmTitle ?? t('common.sortable.deleteConfirmTitle'))\nconst deleteConfirmTextResolved = computed(\n () =>\n props.deleteConfirmText ??\n (props.deleteMode === 'immediate'\n ? t('common.sortable.deleteConfirmText')\n : t('common.sortable.deleteConfirmTextDeferred'))\n)\n\nconst reorderToggleVisible = computed<boolean>(\n (): boolean =>\n !props.chips && !props.embedded && props.showReorderToggle && !reorderMode.value && modelValue.value.length > 0\n)\n\n// With a title and a narrow viewport, the reorder button shrinks to an icon-only\n// round button to keep the single-line header from overflowing.\nconst compactReorderButton = computed<boolean>((): boolean => !!props.title && isNarrow.value)\n\n// Total unconfirmed-change count (added/edited/moved rows + deferred deletions) — a delete lights it\n// up even though its row is gone. Shown as a view-mode header badge + on the handle; in reorder mode\n// the toolbar status shows the session count instead.\nconst unsavedCount = controller.unsavedCount\nconst unsavedCountVisible = computed(() => !props.readonly && !props.disableUnsaved && unsavedCount.value > 0)\nconst headerVisible = computed<boolean>(\n (): boolean =>\n !!(\n props.title ||\n slots.header ||\n slots['reorder-toggle'] ||\n reorderToggleVisible.value ||\n (reorderMode.value && !props.embedded) ||\n (!reorderMode.value && unsavedCountVisible.value)\n )\n)\n\n// True when the header has substantive content (title or custom header slot).\n// When false it still renders as a slim band right-aligning just the\n// reorder/apply controls, holding height across idle ↔ reorder so it doesn't jump.\nconst headerHasContent = computed<boolean>(\n (): boolean => !!(props.title || slots.header || slots['reorder-toggle'] || slots['view-body'])\n)\n\n// Per-row Save/Cancel footer only matters with a per-item persist callback;\n// otherwise the parent form's global save flushes everything, so hide it.\nconst showInlineSaveFooter = computed(() => !!props.onItemSave)\n\n// Reorder-session moved marker (drag, arrow buttons) feeding the toolbar counter;\n// the persistent amber `unsaved` flag is the controller's.\nconst markMoved = (key: ListEditorKey) => {\n movedKeys.value.add(key)\n sessionMovedKeys.value.add(key)\n}\n\n// Per-key decorator cache — see AListEditor for rationale. `unsaved` (amber) and\n// `validationState` (red rail) come from the controller; `moved` is the\n// reorder-session flag.\nconst decoratorCache = new Map<ListEditorKey, DecoratedViewItem<TItem>>()\nconst viewItemsDecorated = computed<DecoratedViewItem<TItem>[]>(() => {\n const total = modelValue.value.length\n const next: DecoratedViewItem<TItem>[] = []\n const liveKeys = new Set<ListEditorKey>()\n for (const vi of viewItems.value) {\n liveKeys.add(vi.key)\n const editing = editingKeys.value.has(vi.key)\n const expanded = expandedKeys.value.has(vi.key)\n const loading = props.loadingKeys?.has(vi.key) ?? false\n const moved = movedKeys.value.has(vi.key)\n // Readonly shows no amber markers. It cannot have unsaved changes,\n // and this avoids an empty baseline from mounting before load.\n // `disableUnsaved` hides only the amber marker. The validation rail still shows real errors.\n const unsaved = props.disableUnsaved || props.readonly ? false : controller.isUnsaved(vi.key)\n const dirty = unsaved\n // `editing` → the controller reads amber (not red) while the row is being filled in. (QA 85050 b7)\n const validationState = controller.rowState(vi.raw, vi.key, editing)\n const canMoveUp = vi.index > 0\n const canMoveDown = vi.index < total - 1\n const cached = decoratorCache.get(vi.key)\n if (\n cached &&\n cached.raw === vi.raw &&\n cached.index === vi.index &&\n cached.position === vi.position &&\n cached.editing === editing &&\n cached.expanded === expanded &&\n cached.loading === loading &&\n cached.dirty === dirty &&\n cached.moved === moved &&\n cached.unsaved === unsaved &&\n cached.validationState === validationState &&\n cached.canMoveUp === canMoveUp &&\n cached.canMoveDown === canMoveDown\n ) {\n next.push(cached)\n continue\n }\n const decorated: DecoratedViewItem<TItem> = {\n ...vi,\n editing,\n expanded,\n loading,\n dirty,\n moved,\n unsaved,\n validationState,\n canMoveUp,\n canMoveDown,\n }\n decoratorCache.set(vi.key, decorated)\n next.push(decorated)\n }\n for (const key of decoratorCache.keys()) {\n if (!liveKeys.has(key)) decoratorCache.delete(key)\n }\n return next\n})\n\nconst isEmpty = computed(() => viewItemsDecorated.value.length === 0)\n\nconst findVi = (key: ListEditorKey): DecoratedViewItem<TItem> | undefined =>\n viewItemsDecorated.value.find((v) => v.key === key)\n\n// Programmatically open a row's inline-edit form (e.g. open auto-seeded rows on mount). Multiple\n// rows can be open at once. No-op for chips / when there is no `#item` slot.\nconst openRow = (key: ListEditorKey): void => {\n if (!isInlineEdit.value) return\n const vi = findVi(key)\n if (vi) beginEdit(vi)\n}\nconst openAll = (): void => {\n if (!isInlineEdit.value) return\n for (const vi of viewItemsDecorated.value) beginEdit(vi)\n}\n\n// Validate + reveal this editor's OWN rows (no cascade). The exposed `validateAll`\n// wraps this and also cascades into embedded children; embedded children register\n// this self-only variant so a parent save reveals their invalid rows red too.\nconst validateAllSelf = (): boolean =>\n validateAllAndReveal(controller, (key) => {\n const vi = viewItems.value.find((v) => v.key === key)\n if (vi) beginEdit(vi)\n })\n\n// Auto-bridge the editor's aggregate validity into the consumer's `validation-scope` collector so a\n// plain `$invalid` save gate blocks (and reveals) a collapsed invalid row. No-op without the prop.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss -- construction-time opt-in, read once\nuseListEditorScopeValidity({\n hasErrors: controller.hasErrors,\n validationScope: props.validationScope,\n validateProvided: props.validate !== undefined,\n reveal: validateAllSelf,\n})\n\nconst keyboardNav = useKeyboardNav({\n viewItems: computed(() => viewItemsDecorated.value.map((vi) => ({ key: vi.key }))),\n variant: 'sortable',\n isReorderMode: reorderMode,\n disabled: computed(() => !canInteract.value),\n isEditing: (key) => editingKeys.value.has(key),\n onToggleEdit: (key) => {\n const vi = findVi(key)\n if (vi) onEditClick(vi)\n },\n onCancelEdit: (key) => {\n const vi = findVi(key)\n if (vi) onCloseClick(vi)\n },\n onMoveUp: (key) => {\n const vi = findVi(key)\n if (vi) moveUp(vi.index)\n },\n onMoveDown: (key) => {\n const vi = findVi(key)\n if (vi) moveDown(vi.index)\n },\n onMoveTop: (key) => {\n const vi = findVi(key)\n if (vi) moveTop(vi.index)\n },\n onMoveBottom: (key) => {\n const vi = findVi(key)\n if (vi) moveBottom(vi.index)\n },\n onCancelReorder: () => cancelReorderMode(),\n})\n\nconst moveToPositionDialogOpen = ref<boolean>(false)\nconst moveToPositionTarget = shallowRef<DecoratedViewItem<TItem> | null>(null)\nconst moveToPositionLabel = computed<string>(() =>\n moveToPositionTarget.value ? resolveCompactText(moveToPositionTarget.value.raw) : ''\n)\nconst openMoveToPosition = (vi: DecoratedViewItem<TItem>) => {\n if (!props.showMoveToPosition) return\n moveToPositionTarget.value = vi\n moveToPositionDialogOpen.value = true\n}\nconst onMoveToPositionConfirm = (newIndex: number) => {\n const target = moveToPositionTarget.value\n moveToPositionTarget.value = null\n if (!target) return\n if (newIndex === target.index) return\n controller.moveItem(target.index, newIndex)\n markMoved(target.key)\n}\n\nconst resolveCompactText = (raw: TItem): string => resolveCompactTextUtil(raw, { compactField: props.compactField })\n\n// Always instantiate SortableJS, seeded `disabled: !dragEnabled` and kept in sync\n// by the watch below. It used to be created only when `isTouch` was false at setup\n// — but `isTouch` is a live media query (plug in a mouse, toggle device emulation),\n// and that one-shot read left the instance missing when it later flipped: the drag\n// handle rendered but dragging did nothing. The setup cost this saved on touch\n// devices is not worth a dead handle.\n/* eslint-disable vue/no-ref-object-reactivity-loss */\nconst sortable = useSortable(rowsContainer, modelValue, {\n // The rows container can mount/unmount across mode flips (e.g. a `#view-body`\n // slot in view mode, rows only in reorder mode). vueuse's default\n // `tryOnMounted` fires once and would bind to a null ref, leaving SortableJS\n // dead; `watchElement: true` re-inits whenever the ref populates.\n watchElement: true,\n handle: '.a-le-drag-handle',\n animation: 150,\n // Force the fallback renderer so `dragClass` applies to a CSS-controlled\n // clone following the cursor — a row-shaped ghost instead of the opaque\n // browser-native drag bitmap.\n forceFallback: true,\n fallbackTolerance: 3,\n fallbackOnBody: true,\n ghostClass: DRAG_GHOST_CLASS,\n chosenClass: DRAG_CHOSEN_CLASS,\n dragClass: DRAG_CLASS,\n disabled: !dragEnabled.value,\n // Own `onUpdate` REPLACES vueuse's default array-move, which moved the array\n // and renumbered positions in separate `nextTick`s — a gap that let a\n // consumer's \"sort by position\" watch re-sort on stale positions and revert\n // the drop. One synchronous `controller.moveItem` closes that window so every\n // observer sees the final order and positions at once.\n onUpdate: (event) => {\n const { oldIndex, newIndex, item, from } = event\n if (oldIndex === undefined || newIndex === undefined) return\n // Undo SortableJS's DOM relocation so Vue's keyed v-for stays the single\n // source of truth (mirrors vueuse's removeNode + insertNodeAt).\n if (item && from) {\n item.parentNode?.removeChild(item)\n from.insertBefore(item, from.children[oldIndex] ?? null)\n }\n // moveItem rewrites the array, renumbers positions, and records the moved\n // key — all synchronously.\n controller.moveItem(oldIndex, newIndex)\n },\n onEnd: (event) => {\n // Mark only the dragged row (via its data-id) moved rather than diffing the\n // whole list, so siblings that shifted index stay clean. `event.item` is the\n // `.a-le-row-wrapper` sortable item; the `[data-id]` lives on the inner `.a-le-row`.\n const el = event.item as HTMLElement\n // `:scope >` so a consumer editor nested in a `#before-item` slot (its own\n // `.a-le-row` descendants) can't shadow this row's own id.\n const raw = (el.querySelector(':scope > .a-le-row') ?? el).getAttribute('data-id')\n if (raw !== null && raw !== '') {\n // Numeric key only when `data-id` is a pure integer string (incl. negative\n // temp ids like \"-1\"); otherwise keep the UUID-style string. `n > 0`\n // wrongly sent negative ids down the string branch, landing amber on the\n // wrong key.\n const n = stringToInt(raw)\n const key: ListEditorKey = String(n) === raw ? n : raw\n markMoved(key)\n }\n },\n})\n\n// Options are built once at setup, when a `#view-body` consumer is still in view mode and\n// `dragEnabled` is false; entering reorder mode mounts the container and `watchElement` re-creates\n// SortableJS from that stale object. Hence watching the container too.\nwatch(\n [dragEnabled, rowsContainer],\n async () => {\n // after `watchElement` has re-created the instance\n await nextTick()\n sortable.option('disabled', !dragEnabled.value)\n },\n { flush: 'post' }\n)\n/* eslint-enable vue/no-ref-object-reactivity-loss */\n\n// Managed add: the controller mints + inserts `factory()` and renumbers\n// positions; the inline-editing watch picks up the new key and auto-opens it.\nconst onAddClick = () => {\n if (!canAdd.value) return\n requestAutoOpen()\n controller.addItem(undefined, undefined)\n}\n\nconst onRowAddAfterClick = (vi: ListViewItem<TItem>) => {\n if (!canInteract.value) return\n requestAutoOpen()\n const key = controller.addItem(undefined, { afterId: vi.key })\n // Added during a reorder session (\"Pridať za túto položku\") → count it in the toolbar.\n if (reorderMode.value && key !== undefined) sessionAddedKeys.value.add(key)\n}\n\nconst onEditClick = (vi: ListViewItem<TItem>) => {\n if (!canInteract.value) return\n if (reorderMode.value && !props.allowEditInReorder) return\n // Clicking edit while already editing closes the form (matches row-header click).\n if (editingKeys.value.has(vi.key)) {\n onCloseClick(vi)\n return\n }\n if (isInlineEdit.value) {\n beginEdit(vi)\n expandedKeys.value.delete(vi.key)\n }\n emit('edit', vi)\n}\n\nconst onExpandClick = (vi: ListViewItem<TItem>) => {\n if (props.disabled || props.loading) return\n if (reorderMode.value && !props.allowEditInReorder) return\n const key = vi.key\n const currentlyExpanded = expandedKeys.value.has(key)\n if (currentlyExpanded) {\n expandedKeys.value.delete(key)\n } else {\n for (const k of expandedKeys.value) expandedKeys.value.delete(k)\n expandedKeys.value.add(key)\n }\n emit('item-expand', vi, !currentlyExpanded)\n}\n\nconst isRowClickable = (vi: DecoratedViewItem<TItem>): boolean => {\n if (props.chips) return false\n if (props.disableRowClick) return false\n if (props.disabled || props.loading) return false\n if (reorderMode.value && !props.allowEditInReorder) return false\n if (vi.editing || vi.expanded) return true\n if (!props.readonly && props.showEditButton) return true\n return false\n}\n\nconst onRowClick = (vi: DecoratedViewItem<TItem>) => {\n if (!isRowClickable(vi)) return\n if (vi.editing || vi.expanded) {\n onCloseClick(vi)\n return\n }\n if (props.readonly && hasReadonlyDetail.value) {\n onExpandClick(vi)\n } else {\n onEditClick(vi)\n }\n}\n\nconst {\n deleteDialog,\n deleteInFlight,\n deleteError,\n onDeleteClick: triggerDeleteClick,\n onDeleteDialogConfirm,\n onDeleteDialogCancel,\n} = useDeleteDialog<TItem, ListViewItem<TItem>>({\n onDeleteConfirm: (raw) => (props.onDeleteConfirm ? props.onDeleteConfirm(raw) : true),\n onDelete: (raw) => props.onDelete?.(raw),\n onDeleted: (vi) => {\n editingKeys.value.delete(vi.key)\n editingSnapshots.value.delete(vi.key)\n expandedKeys.value.delete(vi.key)\n movedKeys.value.delete(vi.key)\n const deferred = props.deleteMode === 'deferred'\n // In reorder mode: a deferred delete is a reversible session change (counts in the toolbar,\n // reverts on Cancel); an immediate delete is already gone on the backend, so drop it from the\n // reorder snapshot too — else Cancel's snapshot-restore would resurrect it.\n if (reorderMode.value) {\n if (sessionAddedKeys.value.has(vi.key)) {\n // Added AND deleted within the same reorder session — net zero. The controller drops the temp\n // row with no tombstone, so it must not linger in either counter (was double-counted: L1).\n sessionAddedKeys.value.delete(vi.key)\n } else if (deferred) {\n sessionDeferredDeletes.value.add(vi.key)\n } else {\n sessionImmediateDeletes.value.add(vi.key)\n }\n }\n // Controller owns the data: temp rows vanish; a deferred saved-row delete lands in\n // `getChanges().deleted` + counts as unsaved; immediate skips the tombstone (already persisted).\n controller.deleteItem(vi.key, { trackDeleted: deferred })\n emit('deleted', vi)\n },\n disableDeleteConfirm: () => props.disableDeleteConfirm || props.chips,\n})\n\nconst onDeleteClick = async (vi: ListViewItem<TItem>) => {\n if (!canInteract.value) return\n await triggerDeleteClick(vi)\n}\n\n// Blocks a second click while the consumer's save is pending, so no duplicate is sent.\n// A rejected save keeps the row open and still reaches the app's error handler.\nconst savingKeys = ref<Set<ListEditorKey>>(new Set())\nconst onSaveClick = async (vi: ListViewItem<TItem>) => {\n if (savingKeys.value.has(vi.key)) return\n savingKeys.value.add(vi.key)\n try {\n if (props.onItemSave) await props.onItemSave(vi.raw)\n } finally {\n savingKeys.value.delete(vi.key)\n }\n commitEdit(vi)\n emit('item-saved', vi)\n}\n\nconst onCancelClick = (vi: ListViewItem<TItem>) => {\n cancelEdit(vi)\n}\n\nconst onCloseClick = (vi: ListViewItem<TItem>) => {\n closeEdit(vi)\n expandedKeys.value.delete(vi.key)\n emit('close', vi)\n}\n\nconst keyAtIndex = (idx: number): ListEditorKey | null => {\n const item = modelValue.value[idx]\n if (!item) return null\n return keyOf(item)\n}\n\nconst moveUp = (idx: number) => {\n if (idx <= 0) return\n const key = keyAtIndex(idx)\n controller.moveItem(idx, idx - 1)\n if (key !== null) markMoved(key)\n}\nconst moveDown = (idx: number) => {\n if (idx >= modelValue.value.length - 1) return\n const key = keyAtIndex(idx)\n controller.moveItem(idx, idx + 1)\n if (key !== null) markMoved(key)\n}\nconst moveTop = (idx: number) => {\n if (idx <= 0) return\n const key = keyAtIndex(idx)\n controller.moveItem(idx, 0)\n if (key !== null) markMoved(key)\n}\nconst moveBottom = (idx: number) => {\n if (idx >= modelValue.value.length - 1) return\n const key = keyAtIndex(idx)\n controller.moveItem(idx, modelValue.value.length - 1)\n if (key !== null) markMoved(key)\n}\n\n// Per-key actions cache: stable identity per row — see AListEditor for\n// rationale. Closures capture the stable key and resolve the current vi via\n// findVi at call time.\ntype ActionsBundle = {\n edit: () => void\n save: () => Promise<void> | void\n cancel: () => void\n close: () => void\n delete: () => Promise<void>\n addAfter: () => void\n toggleExpand: () => void\n moveUp: () => void\n moveDown: () => void\n moveTop: () => void\n moveBottom: () => void\n update: (next: TItem | Partial<TItem> | ((current: TItem) => TItem)) => void\n}\nconst actionsCache = new Map<ListEditorKey, ActionsBundle>()\nconst getActions = (key: ListEditorKey): ActionsBundle => {\n let actions = actionsCache.get(key)\n if (!actions) {\n actions = {\n edit: () => {\n const vi = findVi(key)\n if (vi) onEditClick(vi)\n },\n save: () => {\n const vi = findVi(key)\n return vi ? onSaveClick(vi) : undefined\n },\n cancel: () => {\n const vi = findVi(key)\n if (vi) onCancelClick(vi)\n },\n close: () => {\n const vi = findVi(key)\n if (vi) onCloseClick(vi)\n },\n delete: async () => {\n const vi = findVi(key)\n if (vi) await onDeleteClick(vi)\n },\n addAfter: () => {\n const vi = findVi(key)\n if (vi) onRowAddAfterClick(vi)\n },\n toggleExpand: () => {\n const vi = findVi(key)\n if (vi) onExpandClick(vi)\n },\n moveUp: () => {\n const vi = findVi(key)\n if (vi) moveUp(vi.index)\n },\n moveDown: () => {\n const vi = findVi(key)\n if (vi) moveDown(vi.index)\n },\n moveTop: () => {\n const vi = findVi(key)\n if (vi) moveTop(vi.index)\n },\n moveBottom: () => {\n const vi = findVi(key)\n if (vi) moveBottom(vi.index)\n },\n update: (next) => controller.updateItem(key, next),\n }\n actionsCache.set(key, actions)\n }\n return actions\n}\nwatch(\n () => viewItemsDecorated.value,\n (now) => {\n if (actionsCache.size === 0) return\n const liveKeys = new Set(now.map((v) => v.key))\n for (const key of actionsCache.keys()) {\n if (!liveKeys.has(key)) actionsCache.delete(key)\n }\n }\n)\n\nconst buildSlotProps = (vi: DecoratedViewItem<TItem>) => ({\n item: vi,\n raw: vi.raw,\n index: vi.index,\n key: vi.key,\n readonly: props.readonly,\n disabled: props.disabled,\n expanded: vi.expanded,\n editing: vi.editing,\n dirty: vi.dirty,\n unsaved: vi.unsaved,\n reorderMode: reorderMode.value,\n moved: vi.moved,\n canMoveUp: vi.canMoveUp,\n canMoveDown: vi.canMoveDown,\n touch: isTouch.value,\n stateKeyPrefix: rowStateScope.prefixFor(vi.key),\n actions: getActions(vi.key),\n})\n\nconst toolbarSlotProps = computed(() => ({\n applying: applying.value,\n hasPendingChanges: totalPendingChanges.value,\n movedCount: totalPendingCount.value,\n error: applyError.value,\n actions: {\n apply: applyReorder,\n cancel: cancelReorderMode,\n },\n}))\n\nconst reorderToggleSlotProps = computed(() => ({\n mode: mode.value,\n disabled: !canEnterReorder.value,\n hasPendingChanges: totalHasPendingChanges.value,\n actions: {\n enterReorderMode,\n exitReorderMode: cancelReorderMode,\n },\n}))\n\n// Registers a named unsaved-changes section when the consumer passes a label.\nuseUnsavedSection(() =>\n props.unsavedSectionLabel && !props.disableUnsaved\n ? { label: props.unsavedSectionLabel, dirty: controller.hasUnsaved.value }\n : []\n)\n\n// Expose the controller handle (validateAll/getPayload/commit/etc. via\n// `useTemplateRef<ListEditorHandle<TItem>>`) plus the reorder-mode controls.\ndefineExpose<\n ListEditorHandle<TItem> & {\n enterReorderMode: () => void\n cancelReorderMode: () => void\n applyReorder: () => Promise<void>\n openRow: (key: ListEditorKey) => void\n openAll: () => void\n }\n>({\n ...controller,\n openRow,\n openAll,\n // Saving is separate from the editor's \"Apply\", so a consumer can commit while still in\n // reorder mode with an unapplied move. The reorder session (component-level `movedKeys` +\n // snapshot) is NOT controller state, so re-baseline it here too — otherwise the \"N pending\n // changes\" badge lingers after the save and a later Cancel would revert past it.\n commit: (savedItems?: TItem[]) => {\n controller.commit(savedItems)\n movedKeys.value = new Set()\n if (snapshot.value) snapshot.value = cloneDeep(modelValue.value) as TItem[]\n },\n // validateAll() also opens invalid rows so a blocked save surfaces WHICH rows\n // are wrong — their #item form mounts instead of a collapsed red rail (QA 85050\n // B4-17). The body is gated on `editing` (not `expanded`), so drive `beginEdit`.\n // Shared with AListEditor + ANestedSortableListEditor via the helper.\n validateAll: () => {\n // Cascade into embedded children — a single outer save reveals invalid rows red\n // at every nesting level (e.g. quiz question turning red must also red its answers).\n const selfValid = validateAllSelf()\n if (!childContributions) return selfValid\n let valid = selfValid\n for (const child of childContributions.values()) {\n if (!child.validateAll()) valid = false\n }\n return valid\n },\n enterReorderMode,\n cancelReorderMode,\n applyReorder,\n})\n</script>\n\n<template>\n <div\n ref=\"rootEl\"\n class=\"a-sortable-list-editor\"\n :class=\"[\n `a-sortable-list-editor--two-rows-${twoRows}`,\n `a-sortable-list-editor--mode-${mode}`,\n {\n 'a-sortable-list-editor--readonly': readonly,\n 'a-sortable-list-editor--disabled': disabled,\n 'a-sortable-list-editor--touch': isTouch,\n 'a-sortable-list-editor--drag-enabled': dragEnabled,\n 'a-sortable-list-editor--chips': chips,\n 'a-sortable-list-editor--embedded': embedded,\n 'a-sortable-list-editor--header-floating': !embedded && !chips && !headerHasContent && headerVisible,\n },\n ]\"\n >\n <div class=\"a-le-card\">\n <div\n v-if=\"headerVisible\"\n class=\"a-le-header\"\n >\n <slot\n name=\"header\"\n :title=\"title\"\n v-bind=\"reorderToggleSlotProps\"\n >\n <h3\n v-if=\"title\"\n class=\"a-le-title-heading\"\n >\n {{ title }}\n </h3>\n <span\n v-if=\"!reorderMode && unsavedCountVisible\"\n class=\"a-le-unsaved-count\"\n :data-unsaved-count=\"unsavedCount\"\n >\n {{ t('common.sortable.pendingChanges', { count: unsavedCount }) }}\n </span>\n <div class=\"a-le-header-actions\">\n <template v-if=\"reorderMode && !embedded\">\n <!-- Reorder-mode header: pending count + Cancel/Apply, sitting\n where the \"Reorder\" button lives in view mode. -->\n <slot\n name=\"reorder-toolbar\"\n v-bind=\"toolbarSlotProps\"\n >\n <LeStatus\n :class=\"{ 'a-le-toolbar-status--pending': totalPendingChanges }\"\n :has-pending-changes=\"totalPendingChanges\"\n :pending-count=\"totalPendingCount\"\n :error=\"applyError\"\n />\n <VBtn\n variant=\"text\"\n size=\"small\"\n :disabled=\"applying\"\n @click=\"cancelReorderMode\"\n >\n {{ t('common.sortable.reorderCancel') }}\n </VBtn>\n <VBtn\n color=\"primary\"\n variant=\"flat\"\n size=\"small\"\n prepend-icon=\"mdi-check\"\n :loading=\"applying\"\n :disabled=\"applying || !totalPendingChanges\"\n @click=\"applyReorder\"\n >\n {{ t('common.sortable.reorderApply') }}\n </VBtn>\n </slot>\n </template>\n <slot\n v-else-if=\"reorderToggleVisible\"\n name=\"reorder-toggle\"\n v-bind=\"reorderToggleSlotProps\"\n >\n <VBtn\n v-if=\"compactReorderButton\"\n :aria-label=\"t('common.sortable.reorder')\"\n variant=\"tonal\"\n color=\"primary\"\n icon\n size=\"x-small\"\n :disabled=\"!canEnterReorder\"\n @click=\"enterReorderMode\"\n >\n <VIcon\n icon=\"mdi-sort\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.reorder')\"\n />\n </VBtn>\n <VBtn\n v-else\n variant=\"tonal\"\n color=\"primary\"\n prepend-icon=\"mdi-sort\"\n size=\"small\"\n :disabled=\"!canEnterReorder\"\n @click=\"enterReorderMode\"\n >\n {{ t('common.sortable.reorder') }}\n </VBtn>\n </slot>\n </div>\n </slot>\n </div>\n\n <div\n v-if=\"loading\"\n class=\"a-le-state a-le-state--loading\"\n >\n <VProgressCircular\n indeterminate\n color=\"primary\"\n size=\"32\"\n />\n </div>\n\n <div\n v-else-if=\"error\"\n class=\"a-le-state a-le-state--error\"\n >\n <VAlert\n type=\"error\"\n variant=\"tonal\"\n density=\"compact\"\n border=\"start\"\n >\n {{ error }}\n </VAlert>\n </div>\n\n <div\n v-else-if=\"!reorderMode && $slots['view-body']\"\n class=\"a-le-view-body\"\n >\n <slot\n name=\"view-body\"\n :items=\"modelValue\"\n :mode=\"mode\"\n :actions=\"{ enterReorderMode }\"\n />\n </div>\n\n <div\n v-else-if=\"isEmpty\"\n class=\"a-le-state a-le-state--empty\"\n >\n <slot\n name=\"empty\"\n :readonly=\"readonly\"\n :disabled=\"disabled\"\n :actions=\"{ add: onAddClick }\"\n >\n <LeEmptyState\n :title=\"emptyTitleResolved\"\n :add-label=\"addLabelResolved\"\n :can-add=\"canAdd\"\n @add=\"onAddClick\"\n />\n </slot>\n </div>\n\n <div\n v-else\n ref=\"rowsContainer\"\n class=\"a-sortable-list-editor__rows\"\n >\n <div\n v-for=\"vi in viewItemsDecorated\"\n :key=\"String(vi.key)\"\n class=\"a-le-row-wrapper\"\n >\n <!-- Interstitial slots render as SIBLINGS of `.a-le-row` (inside this\n wrapper), so consumer content placed between rows never inherits the\n row's unsaved/editing/grabbed/validation tint. (QA 85050 BUG-04/05) -->\n <slot\n name=\"before-item\"\n v-bind=\"buildSlotProps(vi)\"\n />\n\n <div\n :data-id=\"String(vi.key)\"\n role=\"listitem\"\n :tabindex=\"keyboardNav.rowTabindex(vi.key)\"\n class=\"a-le-row\"\n :class=\"{\n 'a-le-row--two-rows': twoRows === 'always',\n 'a-le-row--editing': vi.editing,\n 'a-le-row--expanded': vi.expanded,\n 'a-le-row--unsaved': vi.unsaved,\n 'a-le-row--reorder': reorderMode,\n 'a-le-row--grabbed': keyboardNav.isGrabbed(vi.key),\n 'a-le-row--clickable': isRowClickable(vi),\n [`a-le-row--validation-${vi.validationState}`]: vi.validationState !== null,\n }\"\n @keydown=\"keyboardNav.handleKeydown(vi.key, $event)\"\n >\n <div\n class=\"a-le-row-header\"\n @click=\"onRowClick(vi)\"\n >\n <LeDragHandle v-if=\"dragEnabled\" />\n\n <div class=\"a-le-row-main\">\n <slot\n name=\"item-compact\"\n v-bind=\"buildSlotProps(vi)\"\n >\n <span class=\"a-le-title\">\n {{ resolveCompactText(vi.raw) }}\n </span>\n </slot>\n <LeUnsavedLabel\n v-if=\"vi.unsaved\"\n :dot-only=\"chips\"\n />\n </div>\n\n <div\n v-if=\"!chips && !reorderMode\"\n class=\"a-le-status\"\n >\n <slot\n name=\"item-status\"\n v-bind=\"buildSlotProps(vi)\"\n >\n <span\n v-if=\"statusField && vi.raw[statusField] != null && vi.raw[statusField] !== ''\"\n class=\"a-le-status-badge\"\n >\n {{ vi.raw[statusField] }}\n </span>\n </slot>\n </div>\n\n <div class=\"a-le-actions\">\n <slot\n name=\"item-actions\"\n v-bind=\"buildSlotProps(vi)\"\n >\n <template v-if=\"chips && canInteract\">\n <!-- Chips is the one layout that would otherwise swap the arrows out for the handle.\n Keep them whenever dragging is unavailable (covers `disable-drag`, which gating on\n `isTouch` did not) AND whenever a finger could be used at all — a hybrid gets both,\n so putting the mouse down never leaves the row unmovable. Every other layout here\n already keeps its arrows unconditionally in reorder mode. -->\n <template v-if=\"(!dragEnabled || hasCoarsePointer) && !disableReorder\">\n <VBtn\n icon\n size=\"x-small\"\n variant=\"text\"\n density=\"compact\"\n :active=\"false\"\n :disabled=\"!vi.canMoveUp\"\n :aria-label=\"t('common.sortable.moveUp')\"\n class=\"a-le-action a-le-action--up\"\n @click.stop=\"moveUp(vi.index)\"\n >\n <VIcon\n icon=\"mdi-arrow-up\"\n size=\"14\"\n />\n </VBtn>\n <VBtn\n icon\n size=\"x-small\"\n variant=\"text\"\n density=\"compact\"\n :active=\"false\"\n :disabled=\"!vi.canMoveDown\"\n :aria-label=\"t('common.sortable.moveDown')\"\n class=\"a-le-action a-le-action--down\"\n @click.stop=\"moveDown(vi.index)\"\n >\n <VIcon\n icon=\"mdi-arrow-down\"\n size=\"14\"\n />\n </VBtn>\n </template>\n <VBtn\n v-if=\"showDeleteButton\"\n icon\n size=\"x-small\"\n variant=\"text\"\n density=\"compact\"\n :active=\"false\"\n class=\"a-le-action a-le-action--chip-close\"\n :aria-label=\"t('common.sortable.delete')\"\n @click.stop=\"onDeleteClick(vi)\"\n >\n <VIcon\n icon=\"mdi-close\"\n size=\"14\"\n />\n </VBtn>\n </template>\n <template v-else-if=\"reorderMode\">\n <VBtn\n :aria-label=\"t('common.sortable.moveUp')\"\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n :disabled=\"!vi.canMoveUp\"\n class=\"mx-1 a-le-action a-le-action--up\"\n @click.stop=\"moveUp(vi.index)\"\n >\n <VIcon\n icon=\"mdi-arrow-up\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.moveUp')\"\n />\n </VBtn>\n <VBtn\n :aria-label=\"t('common.sortable.moveDown')\"\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n :disabled=\"!vi.canMoveDown\"\n class=\"mx-1 a-le-action a-le-action--down\"\n @click.stop=\"moveDown(vi.index)\"\n >\n <VIcon\n icon=\"mdi-arrow-down\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.moveDown')\"\n />\n </VBtn>\n <VBtn\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n :active=\"false\"\n class=\"mx-1 a-le-action a-le-action--menu\"\n :aria-label=\"t('common.sortable.more')\"\n >\n <VIcon\n icon=\"mdi-dots-vertical\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.more')\"\n />\n <VMenu activator=\"parent\">\n <VList density=\"compact\">\n <VListItem\n :disabled=\"!vi.canMoveUp\"\n @click.stop=\"moveTop(vi.index)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-arrow-collapse-up\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.moveToTop') }}\n </VListItemTitle>\n </VListItem>\n <VListItem\n :disabled=\"!vi.canMoveDown\"\n @click.stop=\"moveBottom(vi.index)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-arrow-collapse-down\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.moveToBottom') }}\n </VListItemTitle>\n </VListItem>\n <VListItem\n v-if=\"showMoveToPosition && viewItemsDecorated.length > 1\"\n @click.stop=\"openMoveToPosition(vi)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-target\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.moveToPosition.action') }}\n </VListItemTitle>\n </VListItem>\n <VListItem\n v-if=\"showAddAfterAction && canInteract\"\n @click=\"onRowAddAfterClick(vi)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-plus\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.addAfter') }}\n </VListItemTitle>\n </VListItem>\n <VListItem\n v-if=\"showDeleteButton && canInteract\"\n @click.stop=\"onDeleteClick(vi)\"\n >\n <template #prepend>\n <VIcon icon=\"mdi-trash-can-outline\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.delete') }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </template>\n <template v-else>\n <VBtn\n v-if=\"showEditButton && canInteract\"\n :aria-label=\"t('common.sortable.edit')\"\n icon\n size=\"small\"\n variant=\"tonal\"\n color=\"primary\"\n density=\"comfortable\"\n class=\"mx-1 a-le-action a-le-action--edit\"\n @click.stop=\"onEditClick(vi)\"\n >\n <VIcon\n icon=\"mdi-pencil-outline\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.edit')\"\n />\n </VBtn>\n <VBtn\n v-if=\"showDeleteButton && canInteract\"\n :aria-label=\"t('common.sortable.delete')\"\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n class=\"mx-1 a-le-action a-le-action--delete\"\n @click.stop=\"onDeleteClick(vi)\"\n >\n <VIcon\n icon=\"mdi-trash-can-outline\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.delete')\"\n />\n </VBtn>\n <VBtn\n v-if=\"showAddAfterAction && canInteract\"\n icon\n size=\"small\"\n variant=\"text\"\n density=\"comfortable\"\n :active=\"false\"\n class=\"mx-1 a-le-action a-le-action--menu\"\n :aria-label=\"t('common.sortable.more')\"\n >\n <VIcon\n icon=\"mdi-dots-vertical\"\n size=\"18\"\n />\n <VTooltip\n activator=\"parent\"\n location=\"bottom\"\n :text=\"t('common.sortable.more')\"\n />\n <VMenu activator=\"parent\">\n <VList density=\"compact\">\n <VListItem @click=\"onRowAddAfterClick(vi)\">\n <template #prepend>\n <VIcon icon=\"mdi-plus\" />\n </template>\n <VListItemTitle>\n {{ t('common.sortable.addAfter') }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VMenu>\n </VBtn>\n </template>\n </slot>\n </div>\n </div>\n\n <template v-if=\"vi.editing && (allowEditInReorder || !reorderMode) && $slots.item\">\n <div class=\"a-le-row-body\">\n <div class=\"a-le-form\">\n <slot\n name=\"item\"\n v-bind=\"buildSlotProps(vi)\"\n />\n </div>\n </div>\n <slot\n name=\"item-footer\"\n v-bind=\"buildSlotProps(vi)\"\n >\n <div\n v-if=\"showInlineSaveFooter && !reorderMode\"\n class=\"a-le-row-footer\"\n >\n <div class=\"a-le-row-footer-spacer\" />\n <VBtn\n variant=\"text\"\n :disabled=\"vi.loading\"\n @click.stop=\"onCancelClick(vi)\"\n >\n {{ t('common.button.cancel') }}\n </VBtn>\n <VBtn\n color=\"primary\"\n variant=\"flat\"\n prepend-icon=\"mdi-check\"\n :disabled=\"vi.loading\"\n @click.stop=\"onSaveClick(vi)\"\n >\n {{ t('common.button.save') }}\n </VBtn>\n </div>\n </slot>\n </template>\n\n <div\n v-else-if=\"$slots['item-readonly'] && (readonly || vi.expanded) && (allowEditInReorder || !reorderMode)\"\n class=\"a-le-row-body\"\n >\n <div class=\"a-le-form\">\n <slot\n name=\"item-readonly\"\n v-bind=\"buildSlotProps(vi)\"\n />\n </div>\n </div>\n </div>\n\n <slot\n name=\"after-item\"\n v-bind=\"buildSlotProps(vi)\"\n />\n </div>\n </div>\n\n <slot\n v-if=\"canAdd && !loading && !error && !isEmpty\"\n name=\"add-button\"\n :readonly=\"readonly\"\n :disabled=\"disabled\"\n :props=\"{ onClick: onAddClick }\"\n :actions=\"{ add: onAddClick }\"\n >\n <button\n type=\"button\"\n class=\"a-le-row-add\"\n @click=\"onAddClick\"\n >\n <VIcon\n icon=\"mdi-plus\"\n size=\"18\"\n />\n <span>{{ addLabelResolved }}</span>\n </button>\n </slot>\n </div>\n\n <LeMoveToPositionDialog\n v-model=\"moveToPositionDialogOpen\"\n :total=\"viewItemsDecorated.length\"\n :current-index=\"moveToPositionTarget?.index ?? 0\"\n :item-label=\"moveToPositionLabel\"\n @confirm=\"onMoveToPositionConfirm\"\n />\n\n <LeDeleteDialog\n v-model=\"deleteDialog\"\n :title=\"deleteConfirmTitleResolved\"\n :text=\"deleteConfirmTextResolved\"\n :confirm-label=\"t('common.sortable.delete')\"\n :cancel-label=\"t('common.button.cancel')\"\n :error=\"deleteError\"\n :in-flight=\"deleteInFlight\"\n @confirm=\"onDeleteDialogConfirm\"\n @cancel=\"onDeleteDialogCancel\"\n />\n\n <div\n class=\"a-le-sr-only\"\n aria-live=\"polite\"\n role=\"status\"\n >\n {{\n keyboardNav.grabbedKey.value !== null\n ? t('common.sortable.keyboardGrab.status', {\n n: keyboardNav.grabbedIndex.value + 1,\n total: keyboardNav.totalCount.value,\n })\n : ''\n }}\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n@use '../styles/tokens';\n@use '../styles/shared';\n\n// Variant-specific rules: reorder-mode trims, drag clone styling, chips\n// flex-wrap layout, validation rail.\n.a-sortable-list-editor {\n &__rows {\n display: flex;\n flex-direction: column;\n }\n\n // View-mode body slot — match the row's horizontal rhythm (~16 px) with a\n // vertical inset so content doesn't sit flush against the border.\n .a-le-view-body {\n padding: 12px 16px;\n }\n\n // Reorder mode trims row-header padding since the drag handle eats some of it.\n .a-le-row--reorder .a-le-row-header {\n padding-left: 12px;\n padding-right: 8px;\n gap: 8px;\n }\n\n // Drag rendering — SortableJS clone + ghost + chosen source.\n .a-le-row--ghost {\n opacity: 0.35;\n background: var(--le-primary-state);\n }\n\n .a-le-row--chosen {\n opacity: 0.5;\n }\n\n // Floating clone following the cursor — row-shaped card with elevation; action\n // column + status badge hidden (below) so the preview stays clean.\n .a-le-row--drag {\n background: var(--le-surface);\n border: 1px solid var(--le-border);\n border-radius: var(--le-radius);\n box-shadow: var(--le-elev-3);\n max-width: 420px;\n opacity: 0.96;\n pointer-events: none;\n }\n\n .a-le-row--drag .a-le-actions,\n .a-le-row--drag .a-le-status {\n display: none;\n }\n\n // Header-only-with-reorder variant — no title/header slot, so render a slim\n // band right-aligning just the Reorder button.\n &--header-floating .a-le-header {\n justify-content: flex-end;\n padding: 6px 8px;\n min-height: 0;\n }\n\n // Embedded variant — sits inside another editor's row. Drop card chrome,\n // tighten rows, lighten background so it reads as part of the parent's body.\n &--embedded .a-le-card {\n background: transparent;\n border: none;\n box-shadow: none;\n border-radius: 0;\n }\n\n &--embedded .a-le-header {\n padding: 4px 0 6px;\n min-height: auto;\n background: transparent;\n border: none;\n }\n\n &--embedded .a-le-title-heading {\n font-size: 13px;\n font-weight: 500;\n color: var(--le-on-surface-medium, rgb(0 0 0 / 70%));\n text-transform: uppercase;\n letter-spacing: 0.04em;\n }\n\n &--embedded .a-le-row {\n background: var(--le-surface);\n border: 1px solid var(--le-border);\n border-radius: 6px;\n }\n\n // The inter-row gap lives on the wrapper (the real list item). `.a-le-row` is no\n // longer its wrapper's last child once `#after-item` renders, so the old\n // `.a-le-row:last-of-type` reset stopped clearing the trailing gap. (QA 85050 BUG-04/05)\n &--embedded .a-le-row-wrapper:not(:last-child) {\n margin-bottom: 4px;\n }\n\n &--embedded .a-le-row-add {\n min-height: var(--le-row-min-height);\n padding: 0 16px;\n background: transparent;\n border: 1px dashed var(--le-border);\n border-radius: 6px;\n color: var(--le-primary);\n margin-top: 4px;\n width: 100%;\n }\n\n &--embedded .a-le-row-add:hover {\n background: var(--le-primary-state);\n border-style: solid;\n }\n\n // Chips-layout overrides — `__rows` flex-wraps into pills, `row-header` gets\n // 8 px left padding (vs 12 px in AListEditor), `drag-handle` shrinks to the\n // pill height.\n &--chips &__rows {\n display: flex;\n\n // Reset the base column direction — chips flow inline and wrap.\n flex-flow: row wrap;\n gap: 6px;\n flex: 1 1 100%;\n }\n\n &--chips .a-le-row-header {\n padding: 2px 4px 2px 8px;\n gap: 4px;\n min-height: 28px;\n }\n\n &--chips .a-le-drag-handle {\n padding: 0;\n font-size: 16px;\n }\n}\n\n// Narrow-container / mobile layout — taller rows, always-visible actions,\n// status badge dropped for room.\n/* stylelint-disable selector-max-compound-selectors */\n@container le-shell (max-width: 768px) {\n .a-sortable-list-editor {\n --le-row-min-height: 48px;\n --le-row-pad-y: 10px;\n\n .a-le-row:not(.a-le-row--editing) .a-le-status {\n display: none;\n }\n\n .a-le-row .a-le-action--edit,\n .a-le-row .a-le-action--delete,\n .a-le-row .a-le-action--menu {\n opacity: 1;\n }\n }\n}\n/* stylelint-enable selector-max-compound-selectors */\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA+RA,IAAMyE,IAAQC,GA6CRC,IAAOH,IA8BPI,KAAY3E,GAAoByE,GAAA,YAAmB,GAGrDI,IAA+B,MAC/BC,KAAkB;EACtB,EAAMH,UAAkB,IAAe,MAAO,EAAE,OAAO,OAAO,CAAC;EAC/D,IAAMI,IAAaC,IAAoB,GAAO,OAAa;GACzD,WAAW;IACT,EAAM;IAGN,IAAMC,IAAUN,GAAU;IAC1B,OAAOE,KAAgBI;GACzB;GACA,MAAM,MAAM;IAOV,AANA,KAAkB,IAClB,IAAeC,GACf,GAAU,QAAQA,GAClBC,EAAQ,GAGRC,SAAe;KACb,AAAIP,MAAiBK,MACrB,IAAe,MACfC,EAAQ;IACV,CAAC;GACH;EACF,EAAE,GACIE,KAAOrF,GAAwByE,GAAC,MAA2B,GAE3D,EAAE,SAAMa,GAAQ,GAChBC,IAAQC,GAAS,GAEjBC,KAASC,GAA4B,QAAQ,GAC7C,EAAE,iBAAaC,EAAkBF,EAAM,GAEvCG,KAAUC,GAAiB,GAC3BC,KAAmBC,EAAoB,GAMvCC,KAAoD;GACxD,WAAWjB,EAAW;GACtB,MAAM,MAAO,EAAW,QAAQG;GAChC,SAASV,EAAM;GACf,QAAQA,EAAM;GACd,UAAUA,EAAM;GAChB,oBAAoBA,EAAM,gBAAgB,CAAC;GAC3C,UAAUA,EAAM;EAClB,GAIMyB,KAAazB,EAAM,SAAS,OAAO0B,GAA+B1B,EAAM,UAAUwB,EAAiB,GACnGG,IAAa3B,EAAM,UAAUyB,IAAY,UAAUG,GAA+BJ,EAAiB,GAKrGK,KAAmB7B,EAAM,WAAW,CAAC2B,EAAW,WAAW;EAC/D,QACQ3B,EAAM,UACX,MAAQ;GACP,AAAI8B,KACF,KAAmB,CAACH,EAAW,WAAW,OAC1C,KAAkB,MACTE,MAAoB,CAACvB,MAAiBqB,EAAW,OAAOpB,EAAW,KAAK;EACrF,CACF;EAIA,IAAMwB,KAAY/B,EAAM,UAAU,MAM5BgC,KAAgBC,GAA4BR,IAAY,cAAc,IAAI,GAC1ES,MAAS,MACb,OAAOH,MAAc,aAAaA,GAAUI,CAAI,IAAKA,EAAKJ,KAItDK,KAAoBC,QAAuB;GAC/C,IAAMC,IAAItC,EAAM;GAIhB,OAHIsC,MAAM,KAAA,KACNA,MAAM,KAAc,aACpB,OAAOA,KAAM,WAAiBA,EAAE,QAC7BA;EACT,CAAC,GAGKC,KAAYF,QAChB9B,EAAW,MAAM,KAAK,GAAK,OAAW;GACpC,KAAK2B,GAAMM,CAAG;GACd;GACA;GACA,UAAUA,EAAIJ,GAAkB;EAClC,EAAE,CACJ;EAIA,QACQG,GAAU,MAAM,KAAK,MAAO,OAAOE,EAAG,GAAG,CAAC,CAAC,CAAC,KAAK,GAAG,SACpDT,GAAc,aAAaO,GAAU,MAAM,KAAK,MAAOE,EAAG,GAAG,CAAC,GACpE,EAAE,OAAO,OAAO,CAClB;EAEA,IAAMC,IAAeC,kBAAwB,IAAI,IAAI,CAAC,GAKhDC,KAAYD,kBAAwB,IAAI,IAAI,CAAC,GAK7CE,IAAyBF,kBAAwB,IAAI,IAAI,CAAC,GAC1DG,IAA0BH,kBAAwB,IAAI,IAAI,CAAC,GAI3DI,IAAmBJ,kBAAwB,IAAI,IAAI,CAAC,GAIpDK,IAAmBL,kBAAwB,IAAI,IAAI,CAAC,GAEpDM,KAAWC,GAA2B,IAAI,GAE1CC,KAAgBjC,GAA4B,eAAe,GAE3DkC,KAAef,QAAe,CAACrC,EAAM,SAAS,CAAC,CAACe,EAAM,IAAI,GAC1DsC,KAAoBhB,QAAe,CAACrC,EAAM,SAAS,CAAC,CAACe,EAAM,gBAAgB,GAE3E,EAAE,iBAAa,sBAAkB,kBAAc,eAAW,gBAAY,gBAAY,eAAW,wBACjGuC,GAA6C;GAC3C;GACA,aAAa;GACb;GACA,kBAAkB,GAAK,MAAS3B,EAAW,WAAW4B,GAAKC,CAAI;GAC/D,iBAAiBjD,EAAW,MAAM,KAAK,MAAO2B,GAAMuB,CAAE,CAAC;GACvD,YAAY,MAAQ;IAClB,IAAMC,IAAMnD,EAAW,MAAM,MAAM,MAAO2B,GAAMuB,CAAE,MAAMF,CAAG;IAC3D,OAAOG,IAAM,EAAE,MAAMA,EAAI,IAAI;GAC/B;GACA,gBAAgB,MAAQ;IACtB,EAAa,MAAM,OAAOH,CAAG;GAC/B;EACF,CAAC,GAEGI,IAActB,QAAe,CAACrC,EAAM,YAAY,CAACA,EAAM,YAAY,CAACA,EAAM,OAAO,GACjF4D,KAAkBvB,QAAesB,EAAY,SAAS,CAAC3D,EAAM,kBAAkBO,EAAW,MAAM,SAAS,CAAC,GAE1GsD,KAAcxB,QAAerC,EAAM,QAAQ,GAC3C8D,KAAwBzB,QAAerC,EAAM,kBAAkB,GAE/D,EACJ,cACA,gBACA,uBACA,gBACA,gBACA,qBACA,sBACA,qBACE+D,GAAwB;GAC1B;GACA;GACA;GACA;GACA,aAAa,MAAMC,EAAUC,CAAC;GAC9B,aAAa,MAAM;IACjB,EAAW,QAAQA;GACrB;GACA;GACA,UAAUJ;GACV,eAAe;IAKb,AAJA,EAAuB,wBAAQ,IAAI,IAAI,GACvC,EAAwB,wBAAQ,IAAI,IAAI,GACxC,EAAiB,wBAAQ,IAAI,IAAI,GACjC,EAAiB,wBAAQ,IAAI,IAAI,GAC5BC,GAAsB,UACzBI,GAAa,GACbxB,EAAa,MAAM,MAAM;GAE7B;GACA,uBAAuB;IAKrB,AAJA,EAAuB,wBAAQ,IAAI,IAAI,GACvC,EAAwB,wBAAQ,IAAI,IAAI,GACxC,EAAiB,wBAAQ,IAAI,IAAI,GACjC,EAAiB,wBAAQ,IAAI,IAAI,GAC5BoB,GAAsB,UACzBI,GAAa,GACbxB,EAAa,MAAM,MAAM;GAE7B;GAKA,gBAAgB;IACd,KAAK,IAAMa,KAAOV,EAAuB,OAAO,EAAW,eAAeU,CAAG;IAC7E,KAAK,IAAMA,KAAOT,EAAwB,OAAO,EAAW,WAAWS,GAAK,EAAE,cAAc,GAAM,CAAC;IAOnG,AAJA5B,EAAW,WAAWqB,EAAiB,KAAK,GAC5C,EAAuB,wBAAQ,IAAI,IAAI,GACvC,EAAwB,wBAAQ,IAAI,IAAI,GACxC,EAAiB,wBAAQ,IAAI,IAAI,GACjC,EAAiB,wBAAQ,IAAI,IAAI;GACnC;GAGA,kBAAkB;IAIhB,AAHA,EAAuB,wBAAQ,IAAI,IAAI,GACvC,EAAwB,wBAAQ,IAAI,IAAI,GACxC,EAAiB,wBAAQ,IAAI,IAAI,GACjC,EAAiB,wBAAQ,IAAI,IAAI;GACnC;GAKA,sBAAsB;IACpB,KAAK,IAAMO,KAAOT,EAAwB,OAAO,EAAW,WAAWS,GAAK,EAAE,cAAc,GAAM,CAAC;IAInG,AAHA,EAAuB,wBAAQ,IAAI,IAAI,GACvC,EAAwB,wBAAQ,IAAI,IAAI,GACxC,EAAiB,wBAAQ,IAAI,IAAI,GACjC,EAAiB,wBAAQ,IAAI,IAAI;GACnC;GACA,iBAAiB,MAAUvD,EAAM,iBAAiBmE,CAAK;GACvD,MAAM;IACJ,oBAAoBjE,EAAK,eAAe;IACxC,qBAAqBA,EAAK,gBAAgB;IAC1C,iBAAiB,MAAYA,EAAK,mBAAmBkE,CAAO;IAC5D,oBAAoB,MAAQlE,EAAK,uBAAuBmE,CAAG;IAC3D,kBAAkBnE,EAAK,aAAa;GACtC;EACF,CAAC,GAMKoE,IAAqBtE,EAAM,WAC7B,OACAuE,mBACE,IAAI,IAA0G,CAChH;EAEJ,AAAID,KASFE,GAAQC,IAA0B;GAPhC,WAAW,GAAI,GAAO,GAAY,MAAgB;IAChD,EAAmB,IAAIC,GAAI;KAAE;KAAO;KAAY;IAAY,CAAC;GAC/D;GACA,aAAa,MAAO;IAClB,EAAmB,OAAOA,CAAE;GAC9B;EAEgC,CAAQ;EAM5C,IAAMC,KAAkBtC,QAAuB;GAC7C,IAAIuC,IAAMC,GAAW;GACrB,IAAIP,GACF,KAAK,IAAMQ,KAAKR,EAAmB,OAAO,GAAG,KAAOQ,EAAE,MAAM;GAE9D,OAAOF;EACT,CAAC,GAEKG,KAAyB1C,QAAwB;GACrD,IAAI2C,GAAkB,OAAO,OAAO;GACpC,IAAIV,GACG;SAAA,IAAMQ,KAAKR,EAAmB,OAAO,GACxC,IAAIQ,EAAE,WAAW,OAAO,OAAO;GAAA;GAGnC,OAAO;EACT,CAAC,GAIKG,KAAoB5C,QAClBsC,GAAgB,QAAQ9B,EAAuB,MAAM,OAAOE,EAAiB,MAAM,IAC3F,GACMmC,IAAsB7C,QACpB0C,GAAuB,SAASlC,EAAuB,MAAM,OAAO,KAAKE,EAAiB,MAAM,OAAO,CAC/G;EAMA,IAAI/C,EAAM,UAAU;GAClB,IAAMmF,IAASC,GAAOX,IAA0B,IAAI;GACpD,IAAIU,GAAQ;IACV,IAAMT,IAAK,OAAO,aAAa;IAE/B,AADAS,EAAO,SAAST,GAAIO,IAAmBC,SAA2BG,GAAgB,CAAC,GACnFC,SAAsBH,EAAO,WAAWT,CAAE,CAAC;GAC7C;EACF;EAEA,IAAMa,KAASlD,QAAesB,EAAY,SAAS3D,EAAM,iBAAiB,CAACwF,EAAY,KAAK,GAEtFC,IAAcpD,QACZsB,EAAY,UAAU6B,EAAY,SAASxF,EAAM,UAAU,CAACoB,GAAQ,SAAS,CAACpB,EAAM,WAC5F,GAEM0F,KAAmBrD,QAAerC,EAAM,YAAY2F,EAAE,qBAAqB,CAAC,GAC5EC,KAAqBvD,QAAerC,EAAM,cAAc2F,EAAE,4BAA4B,CAAC,GACvFE,KAA6BxD,QAAerC,EAAM,sBAAsB2F,EAAE,oCAAoC,CAAC,GAC/GG,KAA4BzD,QAE9BrC,EAAM,sBACLA,EAAM,eAAe,cAClB2F,EAAE,mCAAmC,IACrCA,EAAE,2CAA2C,EACrD,GAEMI,KAAuB1D,QAEzB,CAACrC,EAAM,SAAS,CAACA,EAAM,YAAYA,EAAM,qBAAqB,CAACwF,EAAY,SAASjF,EAAW,MAAM,SAAS,CAClH,GAIMyF,KAAuB3D,QAAiC,CAAC,CAACrC,EAAM,SAASiG,GAAS,KAAK,GAKvFC,KAAevE,EAAW,cAC1BwE,KAAsB9D,QAAe,CAACrC,EAAM,YAAY,CAACA,EAAM,kBAAkBkG,GAAa,QAAQ,CAAC,GACvGE,KAAgB/D,QAElB,CAAC,EACCrC,EAAM,SACNe,EAAM,UACNA,EAAM,qBACNgF,GAAqB,SACpBP,EAAY,SAAS,CAACxF,EAAM,YAC5B,CAACwF,EAAY,SAASW,GAAoB,MAEjD,GAKME,KAAmBhE,QACR,CAAC,EAAErC,EAAM,SAASe,EAAM,UAAUA,EAAM,qBAAqBA,EAAM,aACpF,GAIMuF,KAAuBjE,QAAe,CAAC,CAACrC,EAAM,UAAU,GAIxDuG,KAAa,MAAuB;GAExC,AADA3D,GAAU,MAAM,IAAIW,CAAG,GACvBP,EAAiB,MAAM,IAAIO,CAAG;EAChC,GAKMiD,qBAAiB,IAAI,IAA6C,GAClEC,IAAqBpE,QAA2C;GACpE,IAAMqE,IAAQnG,EAAW,MAAM,QACzBoG,IAAmC,CAAC,GACpCC,oBAAW,IAAI,IAAmB;GACxC,KAAK,IAAMnE,KAAMF,GAAU,OAAO;IAChC,EAAS,IAAIE,EAAG,GAAG;IACnB,IAAMoE,IAAUC,GAAY,MAAM,IAAIrE,EAAG,GAAG,GACtCsE,KAAWrE,EAAa,MAAM,IAAID,EAAG,GAAG,GACxCuE,KAAUhH,EAAM,aAAa,IAAIyC,EAAG,GAAG,KAAK,IAC5CwE,KAAQrE,GAAU,MAAM,IAAIH,EAAG,GAAG,GAIlCyE,KAAUlH,EAAM,kBAAkBA,EAAM,WAAW,KAAQ2B,EAAW,UAAUc,EAAG,GAAG,GACtF0E,KAAQD,IAERE,KAAkBzF,EAAW,SAASc,EAAG,KAAKA,EAAG,KAAKoE,CAAO,GAC7DQ,KAAY5E,EAAG,QAAQ,GACvB6E,KAAc7E,EAAG,QAAQiE,IAAQ,GACjCa,IAASf,GAAe,IAAI/D,EAAG,GAAG;IACxC,IACE8E,KACAA,EAAO,QAAQ9E,EAAG,OAClB8E,EAAO,UAAU9E,EAAG,SACpB8E,EAAO,aAAa9E,EAAG,YACvB8E,EAAO,YAAYV,KACnBU,EAAO,aAAaR,MACpBQ,EAAO,YAAYP,MACnBO,EAAO,UAAUJ,MACjBI,EAAO,UAAUN,MACjBM,EAAO,YAAYL,MACnBK,EAAO,oBAAoBH,MAC3BG,EAAO,cAAcF,MACrBE,EAAO,gBAAgBD,IACvB;KACA,EAAK,KAAKC,CAAM;KAChB;IACF;IACA,IAAMC,KAAsC;KAC1C,GAAG/E;KACH;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IAEA,AADA+D,GAAe,IAAI/D,EAAG,KAAK+E,EAAS,GACpCb,EAAK,KAAKa,EAAS;GACrB;GACA,KAAK,IAAMjE,KAAOiD,GAAe,KAAK,GACpC,AAAKI,EAAS,IAAIrD,CAAG,KAAGiD,GAAe,OAAOjD,CAAG;GAEnD,OAAOoD;EACT,CAAC,GAEKc,KAAUpF,QAAeoE,EAAmB,MAAM,WAAW,CAAC,GAE9DiB,KAAU,MACdjB,EAAmB,MAAM,MAAM,MAAM/F,EAAE,QAAQ6C,CAAG,GAI9CoE,MAAW,MAA6B;GAC5C,IAAI,CAACvE,GAAa,OAAO;GACzB,IAAMX,IAAKiF,EAAOnE,CAAG;GACrB,AAAId,KAAImF,GAAUnF,CAAE;EACtB,GACMoF,WAAsB;GAC1B,IAAKzE,GAAa,OAClB,KAAK,IAAMX,KAAMgE,EAAmB,OAAO,GAAUhE,CAAE;EACzD,GAKM4C,WACJyC,EAAqBnG,IAAa,MAAQ;GACxC,IAAMc,IAAKF,GAAU,MAAM,MAAM,MAAM7B,EAAE,QAAQ6C,CAAG;GACpD,AAAId,KAAImF,GAAUnF,CAAE;EACtB,CAAC;EAKH,GAA2B;GACzB,WAAWd,EAAW;GACtB,iBAAiB3B,EAAM;GACvB,kBAAkBA,EAAM,aAAa,KAAA;GACrC,QAAQqF;EACV,CAAC;EAED,IAAM0C,IAAcC,GAAe;GACjC,WAAW3F,QAAeoE,EAAmB,MAAM,KAAK,OAAQ,EAAE,KAAKhE,EAAG,IAAI,EAAE,CAAC;GACjF,SAAS;GACT,eAAe+C;GACf,UAAUnD,QAAe,CAACsB,EAAY,KAAK;GAC3C,YAAY,MAAQmD,GAAY,MAAM,IAAIvD,CAAG;GAC7C,eAAe,MAAQ;IACrB,IAAMd,IAAKiF,EAAOnE,CAAG;IACrB,AAAId,KAAIwF,GAAYxF,CAAE;GACxB;GACA,eAAe,MAAQ;IACrB,IAAMA,IAAKiF,EAAOnE,CAAG;IACrB,AAAId,KAAIyF,GAAazF,CAAE;GACzB;GACA,WAAW,MAAQ;IACjB,IAAMA,IAAKiF,EAAOnE,CAAG;IACrB,AAAId,KAAI0F,GAAO1F,EAAG,KAAK;GACzB;GACA,aAAa,MAAQ;IACnB,IAAMA,IAAKiF,EAAOnE,CAAG;IACrB,AAAId,KAAI2F,GAAS3F,EAAG,KAAK;GAC3B;GACA,YAAY,MAAQ;IAClB,IAAMA,IAAKiF,EAAOnE,CAAG;IACrB,AAAId,KAAI4F,GAAQ5F,EAAG,KAAK;GAC1B;GACA,eAAe,MAAQ;IACrB,IAAMA,IAAKiF,EAAOnE,CAAG;IACrB,AAAId,KAAI6F,GAAW7F,EAAG,KAAK;GAC7B;GACA,uBAAuB8F,EAAkB;EAC3C,CAAC,GAEKC,KAA2B7F,EAAa,EAAK,GAC7C8F,IAAuBvF,GAA4C,IAAI,GACvEwF,KAAsBrG,QAC1BoG,EAAqB,QAAQhN,GAAmBgN,EAAqB,MAAM,GAAG,IAAI,EACpF,GACMG,MAAsB,MAAiC;GAC3D,AAAK5I,EAAM,uBACX,EAAqB,QAAQyC,GAC7B,GAAyB,QAAQ;EACnC,GACMoG,MAA2B,MAAqB;GACpD,IAAMC,IAASL,EAAqB;GAEpC,AADA,EAAqB,QAAQ,MACxBK,KACDC,MAAaD,EAAO,UACxBnH,EAAW,SAASmH,EAAO,OAAOC,CAAQ,GAC1CxC,EAAUuC,EAAO,GAAG;EACtB,GAEMrN,MAAsB,MAAuBC,GAAuB8G,GAAK,EAAE,cAAcxC,EAAM,aAAa,CAAC,GAS7GiJ,KAAWC,GAAY/F,IAAe5C,GAAY;GAKtD,cAAc;GACd,QAAQ;GACR,WAAW;GAIX,eAAe;GACf,mBAAmB;GACnB,gBAAgB;GAChB,YAAY4I;GACZ,aAAaC;GACb,WAAWC;GACX,UAAU,CAAC5D,EAAY;GAMvB,WAAW,MAAU;IACnB,IAAM,EAAE,aAAU,aAAU,SAAM,YAAS6D;IAC3C,AAAIC,MAAa,KAAA,KAAaR,MAAa,KAAA,MAGvC5G,KAAQqH,MACVrH,EAAK,YAAY,YAAYA,CAAI,GACjCqH,EAAK,aAAarH,GAAMqH,EAAK,SAASD,MAAa,IAAI,IAIzD5H,EAAW,SAAS4H,GAAUR,CAAQ;GACxC;GACA,QAAQ,MAAU;IAIhB,IAAMU,IAAKH,EAAM,MAGX9G,KAAOiH,EAAG,cAAc,oBAAoB,KAAKA,EAAA,CAAI,aAAa,SAAS;IACjF,IAAIjH,MAAQ,QAAQA,MAAQ,IAAI;KAK9B,IAAMkH,IAAIC,EAAYnH,CAAG;KAEzB,EAD2B,OAAOkH,CAAC,MAAMlH,IAAMkH,IAAIlH,CACtC;IACf;GACF;EACF,CAAC;EAKD,EACE,CAACiD,GAAatC,EAAa,GAC3B,YAAY;GAGV,AADA,MAAMvC,GAAS,GACfqI,GAAS,OAAO,YAAY,CAACxD,EAAY,KAAK;EAChD,GACA,EAAE,OAAO,OAAO,CAClB;EAKA,IAAMmE,WAAmB;GACvB,AAAKrE,GAAO,UACZsE,GAAgB,GAChBlI,EAAW,QAAQ,KAAA,GAAW,KAAA,CAAS;EACzC,GAEMmI,MAAsB,MAA4B;GACtD,IAAI,CAACnG,EAAY,OAAO;GACxB,GAAgB;GAChB,IAAMJ,IAAM5B,EAAW,QAAQ,KAAA,GAAW,EAAE,SAASc,EAAG,IAAI,CAAC;GAE7D,AAAI+C,EAAY,SAASjC,MAAQ,KAAA,KAAWR,EAAiB,MAAM,IAAIQ,CAAG;EAC5E,GAEM0E,MAAe,MAA4B;GAC/C,AAAKtE,EAAY,UACb,GAAY,SAAU3D,EAAM,wBAE5B8G,GAAY,MAAM,IAAIrE,EAAG,GAAG,IAC9ByF,GAAazF,CAAE,KAGbW,GAAa,UACfwE,GAAUnF,CAAE,GACZC,EAAa,MAAM,OAAOD,EAAG,GAAG,IAElCvC,EAAK,QAAQuC,CAAE;EACjB,GAEMsH,MAAiB,MAA4B;GAEjD,IADI/J,EAAM,YAAYA,EAAM,WACxBwF,EAAY,SAAS,CAACxF,EAAM,oBAAoB;GACpD,IAAMuD,IAAMd,EAAG,KACTuH,IAAoBtH,EAAa,MAAM,IAAIa,CAAG;GACpD,IAAIyG,GACF,EAAa,MAAM,OAAOzG,CAAG;QACxB;IACL,KAAK,IAAM0G,KAAKvH,EAAa,OAAO,EAAa,MAAM,OAAOuH,CAAC;IAC/D,EAAa,MAAM,IAAI1G,CAAG;GAC5B;GACA,EAAK,eAAed,GAAI,CAACuH,CAAiB;EAC5C,GAEME,MAAkB,MAClBlK,EAAM,SACNA,EAAM,mBACNA,EAAM,YAAYA,EAAM,WACxBwF,EAAY,SAAS,CAACxF,EAAM,qBAA2B,KAE3D,GADIyC,EAAG,WAAWA,EAAG,YACjB,CAACzC,EAAM,YAAYA,EAAM,iBAIzBmK,MAAc,MAAiC;GACnD,AAAKD,GAAezH,CAAE,MAClBA,EAAG,WAAWA,EAAG,WACnByF,GAAazF,CAAE,IAGbzC,EAAM,YAAYqD,GAAkB,QACtC0G,GAActH,CAAE,IAEhBwF,GAAYxF,CAAE;EAElB,GAEM,EACJ,kBACA,oBACA,iBACA,eAAe2H,IACf,2BACA,6BACEC,GAA4C;GAC9C,kBAAkB,MAAS,GAAM,mBAAkBrK,EAAM,gBAAgBwC,CAAG;GAC5E,WAAW,MAAQxC,EAAM,WAAWwC,CAAG;GACvC,YAAY,MAAO;IAIjB,AAHAsE,GAAY,MAAM,OAAOrE,EAAG,GAAG,GAC/B6H,GAAiB,MAAM,OAAO7H,EAAG,GAAG,GACpCC,EAAa,MAAM,OAAOD,EAAG,GAAG,GAChCG,GAAU,MAAM,OAAOH,EAAG,GAAG;IAC7B,IAAM8H,IAAWvK,EAAM,eAAe;IAkBtC,AAdIwF,EAAY,UACVzC,EAAiB,MAAM,IAAIN,EAAG,GAAG,IAGnCM,EAAiB,MAAM,OAAON,EAAG,GAAG,IAC3B8H,IACT1H,EAAuB,MAAM,IAAIJ,EAAG,GAAG,IAEvCK,EAAwB,MAAM,IAAIL,EAAG,GAAG,IAK5Cd,EAAW,WAAWc,EAAG,KAAK,EAAE,cAAc8H,EAAS,CAAC,GACxDrK,EAAK,WAAWuC,CAAE;GACpB;GACA,4BAA4BzC,EAAM,wBAAwBA,EAAM;EAClE,CAAC,GAEKwK,KAAgB,OAAO,MAA4B;GACvD,AAAK7G,EAAY,SACjB,MAAMyG,GAAmB3H,CAAE;EAC7B,GAIMgI,KAAa9H,kBAAwB,IAAI,IAAI,CAAC,GAC9C+H,KAAc,OAAO,MAA4B;GACrD,IAAI,IAAW,MAAM,IAAIjI,EAAG,GAAG,GAC/B;OAAW,MAAM,IAAIA,EAAG,GAAG;IAC3B,IAAI;KACF,AAAIzC,EAAM,cAAY,MAAMA,EAAM,WAAWyC,EAAG,GAAG;IACrD,UAAU;KACR,GAAW,MAAM,OAAOA,EAAG,GAAG;IAChC;IAEA,AADAkI,GAAWlI,CAAE,GACbvC,EAAK,cAAcuC,CAAE;GAPM;EAQ7B,GAEMmI,MAAiB,MAA4B;GACjD,GAAWnI,CAAE;EACf,GAEMyF,MAAgB,MAA4B;GAGhD,AAFA2C,GAAUpI,CAAE,GACZC,EAAa,MAAM,OAAOD,EAAG,GAAG,GAChCvC,EAAK,SAASuC,CAAE;EAClB,GAEMqI,MAAc,MAAsC;GACxD,IAAM3I,IAAO5B,EAAW,MAAMwK;GAE9B,OADK5I,IACED,GAAMC,CAAI,IADC;EAEpB,GAEMgG,MAAU,MAAgB;GAC9B,IAAI4C,KAAO,GAAG;GACd,IAAMxH,IAAMuH,GAAWC,CAAG;GAE1B,AADApJ,EAAW,SAASoJ,GAAKA,IAAM,CAAC,GAC5BxH,MAAQ,QAAMgD,EAAUhD,CAAG;EACjC,GACM6E,MAAY,MAAgB;GAChC,IAAI2C,KAAOxK,EAAW,MAAM,SAAS,GAAG;GACxC,IAAMgD,IAAMuH,GAAWC,CAAG;GAE1B,AADApJ,EAAW,SAASoJ,GAAKA,IAAM,CAAC,GAC5BxH,MAAQ,QAAMgD,EAAUhD,CAAG;EACjC,GACM8E,MAAW,MAAgB;GAC/B,IAAI0C,KAAO,GAAG;GACd,IAAMxH,IAAMuH,GAAWC,CAAG;GAE1B,AADApJ,EAAW,SAASoJ,GAAK,CAAC,GACtBxH,MAAQ,QAAMgD,EAAUhD,CAAG;EACjC,GACM+E,MAAc,MAAgB;GAClC,IAAIyC,KAAOxK,EAAW,MAAM,SAAS,GAAG;GACxC,IAAMgD,IAAMuH,GAAWC,CAAG;GAE1B,AADApJ,EAAW,SAASoJ,GAAKxK,EAAW,MAAM,SAAS,CAAC,GAChDgD,MAAQ,QAAMgD,EAAUhD,CAAG;EACjC,GAmBMyH,qBAAe,IAAI,IAAkC,GACrDC,MAAc,MAAsC;GACxD,IAAIC,IAAUF,GAAa,IAAIzH,CAAG;GAmDlC,OAlDK2H,MACH,IAAU;IACR,YAAY;KACV,IAAMzI,IAAKiF,EAAOnE,CAAG;KACrB,AAAId,KAAIwF,GAAYxF,CAAE;IACxB;IACA,YAAY;KACV,IAAMA,IAAKiF,EAAOnE,CAAG;KACrB,OAAOd,IAAKiI,GAAYjI,CAAE,IAAI,KAAA;IAChC;IACA,cAAc;KACZ,IAAMA,IAAKiF,EAAOnE,CAAG;KACrB,AAAId,KAAImI,GAAcnI,CAAE;IAC1B;IACA,aAAa;KACX,IAAMA,IAAKiF,EAAOnE,CAAG;KACrB,AAAId,KAAIyF,GAAazF,CAAE;IACzB;IACA,QAAQ,YAAY;KAClB,IAAMA,IAAKiF,EAAOnE,CAAG;KACrB,AAAId,KAAI,MAAM+H,GAAc/H,CAAE;IAChC;IACA,gBAAgB;KACd,IAAMA,IAAKiF,EAAOnE,CAAG;KACrB,AAAId,KAAIqH,GAAmBrH,CAAE;IAC/B;IACA,oBAAoB;KAClB,IAAMA,IAAKiF,EAAOnE,CAAG;KACrB,AAAId,KAAIsH,GAActH,CAAE;IAC1B;IACA,cAAc;KACZ,IAAMA,IAAKiF,EAAOnE,CAAG;KACrB,AAAId,KAAI0F,GAAO1F,EAAG,KAAK;IACzB;IACA,gBAAgB;KACd,IAAMA,IAAKiF,EAAOnE,CAAG;KACrB,AAAId,KAAI2F,GAAS3F,EAAG,KAAK;IAC3B;IACA,eAAe;KACb,IAAMA,IAAKiF,EAAOnE,CAAG;KACrB,AAAId,KAAI4F,GAAQ5F,EAAG,KAAK;IAC1B;IACA,kBAAkB;KAChB,IAAMA,IAAKiF,EAAOnE,CAAG;KACrB,AAAId,KAAI6F,GAAW7F,EAAG,KAAK;IAC7B;IACA,SAAS,MAASd,EAAW,WAAW4B,GAAKoD,CAAI;GACnD,GACAqE,GAAa,IAAIzH,GAAK2H,CAAO,IAExBA;EACT;EACA,QACQzE,EAAmB,QACxB,MAAQ;GACP,IAAIuE,GAAa,SAAS,GAAG;GAC7B,IAAMpE,IAAW,IAAI,IAAI9E,EAAI,KAAK,MAAMpB,EAAE,GAAG,CAAC;GAC9C,KAAK,IAAM6C,KAAOyH,GAAa,KAAK,GAClC,AAAKpE,EAAS,IAAIrD,CAAG,KAAGyH,GAAa,OAAOzH,CAAG;EAEnD,CACF;EAEA,IAAM4H,KAAkB,OAAkC;GACxD,MAAM1I;GACN,KAAKA,EAAG;GACR,OAAOA,EAAG;GACV,KAAKA,EAAG;GACR,UAAUzC,EAAM;GAChB,UAAUA,EAAM;GAChB,UAAUyC,EAAG;GACb,SAASA,EAAG;GACZ,OAAOA,EAAG;GACV,SAASA,EAAG;GACZ,aAAa+C,EAAY;GACzB,OAAO/C,EAAG;GACV,WAAWA,EAAG;GACd,aAAaA,EAAG;GAChB,OAAOrB,GAAQ;GACf,gBAAgBY,GAAc,UAAUS,EAAG,GAAG;GAC9C,SAASwI,GAAWxI,EAAG,GAAG;EAC5B,IAEM2I,KAAmB/I,SAAgB;GACvC,UAAUgJ,GAAS;GACnB,mBAAmBnG,EAAoB;GACvC,YAAYD,GAAkB;GAC9B,OAAOqG,GAAW;GAClB,SAAS;IACP,OAAOC;IACP,QAAQhD;GACV;EACF,EAAE,GAEIiD,KAAyBnJ,SAAgB;GAC7C,MAAMxB,GAAK;GACX,UAAU,CAAC+C,GAAgB;GAC3B,mBAAmBmB,GAAuB;GAC1C,SAAS;IACP;IACA,iBAAiBwD;GACnB;EACF,EAAE;E,OAGFkD,QACEzL,EAAM,uBAAuB,CAACA,EAAM,iBAChC;GAAE,OAAOA,EAAM;GAAqB,OAAO2B,EAAW,WAAW;EAAM,IACvE,CAAC,CACP,GAIA7B,GAQE;GACA,GAAG6B;GACH;GACA;GAKA,SAAS,MAAyB;IAGhC,AAFAA,EAAW,OAAO+J,CAAU,GAC5B,GAAU,wBAAQ,IAAI,IAAI,GAC1B,AAAoBzI,GAAS,UAAQe,EAAUzD,EAAW,KAAK;GACjE;GAKA,mBAAmB;IAGjB,IAAMoL,IAAYtG,GAAgB;IAClC,IAAI,CAACf,GAAoB,OAAOqH;IAChC,IAAIC,IAAQD;IACZ,KAAK,IAAME,KAASvH,EAAmB,OAAO,GAC5C,AAAKuH,EAAM,YAAY,MAAG,IAAQ;IAEpC,OAAOD;GACT;GACA;GACA;GACA;EACF,CAAC,I,UAICjQ,EAAA,GAAAC,EA4mBM,OAAA;GA3mBA,SAAA;GAAJ,KAAIqF;GACJ,OAAKpF,GAAA,CAAC,0BAAwB;IACsB,oCAAAoE,EAAA;IAAiD,gCAAAY,GAAA;;KAA4D,oCAAAZ,EAAA;KAAsD,oCAAAA,EAAA;KAAmD,iCAAAnE,EAAAsF,EAAA;KAAyD,wCAAAqE,EAAA;KAAsD,iCAAAxF,EAAA;KAAmD,oCAAAA,EAAA;KAA8D,2CAAA,CAAAA,EAAA,YAAQ,CAAKA,EAAA,SAAK,CAAKoG,GAAA,SAAoBD,GAAA;;;;GAcrhBrK,EAujBM,OAvjBNoC,IAujBM;IArjBIiI,GAAA,SADRzK,EAAA,GAAAC,EAgGM,OAhGNwC,IAgGM,CA5FJpC,EA2FOoQ,EAAA,QAAA,UA3FPnQ,EA2FO,EAzFJ,OAAOgE,EAAA,MAAK,GACLuL,GAAA,KAAsB,SAwFzB;KArFGvL,EAAA,SADRtE,EAAA,GAAAC,EAKK,MALLyC,IAKKnC,EADA+D,EAAA,KAAK,GAAA,CAAA,K;KAGD,CAAAnE,EAAA0J,CAAA,KAAeW,GAAA,SADxBxK,EAAA,GAAAC,EAMO,QAAA;;MAJL,OAAM;MACL,sBAAoBE,EAAAoK,EAAA;KAElB,GAAAhK,EAAAJ,EAAA6J,CAAA,CAAC,CAAA,kCAAA,EAAA,OAA4C7J,EAAAoK,EAAA,EAAY,CAAA,CAAA,GAAA,GAAA5H,EAAA,K;KAE9DvC,EAwEM,OAxENwC,IAwEM,CAvEYzC,EAAA0J,CAAA,KAAW,CAAKvF,EAAA,WAG9BjE,EA6BOoQ,EAAA,QAAA,mBAAAhQ,GAAAC,GA3BG+O,GAAA,KAAgB,CAAA,SA2BnB;MAzBL9O,EAKEC,IAAA;OAJC,OAAKV,GAAA,EAAA,gCAAoCqJ,EAAA,MAAmB,CAAA;OAC5D,uBAAqBA,EAAA;OACrB,iBAAeD,GAAA;OACf,OAAOnJ,EAAAwP,EAAA;;;;;;;MAEVhP,EAOOE,GAAA;OANL,SAAQ;OACR,MAAK;OACJ,UAAUV,EAAAuP,EAAA;OACV,SAAOvP,EAAAyM,CAAA;;OAER,SAAA9L,QAAwC,CAArCC,EAAAR,EAAAJ,EAAA6J,CAAA,CAAC,CAAA,+BAAA,CAAA,GAAA,CAAA,C;;;MAENrJ,EAUOE,GAAA;OATL,OAAM;OACN,SAAQ;OACR,MAAK;OACL,gBAAa;OACZ,SAASV,EAAAuP,EAAA;OACT,UAAUvP,EAAAuP,EAAA,KAAQ,CAAKnG,EAAA;OACvB,SAAOpJ,EAAAyP,EAAA;;OAER,SAAA9O,QAAuC,CAApCC,EAAAR,EAAAJ,EAAA6J,CAAA,CAAC,CAAA,8BAAA,CAAA,GAAA,CAAA,C;;;;;;;K,gBAKGI,GAAA,QADb/J,EAoCOoQ,EAAA,QAAA,kBAAAhQ,GAAAC,GAjCGmP,GAAA,KAAsB,CAAA,SAiCzB,CA9BGxF,GAAA,SADRrK,EAAA,GAAAgB,EAmBOH,GAAA;;MAjBJ,cAAYV,EAAA6J,CAAA,CAAC,CAAA,yBAAA;MACd,SAAQ;MACR,OAAM;MACN,MAAA;MACA,MAAK;MACJ,UAAQ,CAAG/B,GAAA;MACX,SAAO9H,EAAAiR,CAAA;;MAER,SAAAtQ,QAGE,CAHFH,EAGEM,GAAA;OAFA,MAAK;OACL,MAAK;M,IAEPN,EAIEO,GAAA;OAHA,WAAU;OACV,UAAS;OACR,MAAMf,EAAA6J,CAAA,CAAC,CAAA,yBAAA;;;;;;;K,OAGZhK,EAAA,GAAAgB,EAUOH,GAAA;;MARL,SAAQ;MACR,OAAM;MACN,gBAAa;MACb,MAAK;MACJ,UAAQ,CAAGoH,GAAA;MACX,SAAO9H,EAAAiR,CAAA;;MAER,SAAAtQ,QAAkC,CAA/BC,EAAAR,EAAAJ,EAAA6J,CAAA,CAAC,CAAA,yBAAA,CAAA,GAAA,CAAA,C;;;;IAQN1F,EAAA,WADRtE,EAAA,GAAAC,EASM,OATN4C,IASM,CALJlC,EAIEQ,IAAA;KAHA,eAAA;KACA,OAAM;KACN,MAAK;I,QAKImD,EAAA,SADbtE,EAAA,GAAAC,EAYM,OAZN6C,IAYM,CARJnC,EAOSS,IAAA;KANP,MAAK;KACL,SAAQ;KACR,SAAQ;KACR,QAAO;;KAEP,SAAAN,QAAW,CAARC,EAAAR,EAAA+D,EAAA,KAAK,GAAA,CAAA,C;;I,QAKE,CAAAnE,EAAA0J,CAAA,KAAejK,EAAAA,OAAM,gBADnCI,EAAA,GAAAC,EAUM,OAVN8C,IAUM,CANJ1C,EAKEoQ,EAAA,QAAA,aAAA;KAHC,OAAO7L,EAAA;KACP,MAAMM,GAAA;KACN,SAAO,EAAA,kBAAI/E,EAAAiR,CAAA,EAAgB;I,QAKnBtF,GAAA,SADb9L,EAAA,GAAAC,EAiBM,OAjBN+C,IAiBM,CAbJ3C,EAYOoQ,EAAA,QAAA,SAAA;KAVJ,UAAUnM,EAAA;KACV,UAAUA,EAAA;KACV,SAAO,EAAA,KAAS2J,GAAU;IAJ7B,SAYO,CANLtN,EAKEU,IAAA;KAJC,OAAO4I,GAAA;KACP,aAAWF,GAAA;KACX,WAASH,GAAA;KACT,OAAKqE;;;;;I,WAKZjO,EAAA,GAAAC,EAsYM,OAAA;;KApYA,SAAA;KAAJ,KAAIuH;KACJ,OAAM;I,KAENxH,EAAA,EAAA,GAAAC,EAgYMqB,GAAA,MAAAC,GA/XSuJ,EAAA,QAAN,OADT9K,EAAA,GAAAC,EAgYM,OAAA;KA9XH,KAAK,OAAO6G,EAAG,GAAG;KACnB,OAAM;;KAKNzG,EAGEoQ,EAAA,QAAA,eAHFnQ,EAGE,EAAA,SAAA,GAAA,GADQkP,EAAe1I,CAAE,CAAA,CAAA;KAG3B1G,EA6WM,OAAA;MA5WH,WAAS,OAAO0G,EAAG,GAAG;MACvB,MAAK;MACJ,UAAU3G,EAAAiM,CAAA,CAAW,CAAC,YAAYtF,EAAG,GAAG;MACzC,OAAK5G,GAAA,CAAC,YAAU;OAC8B,sBAAAoE,EAAA,YAAO;OAAkD,qBAAAwC,EAAG;OAA6C,sBAAAA,EAAG;OAA6C,qBAAAA,EAAG;OAA4C,qBAAA3G,EAAA0J,CAAA;OAAgD,qBAAA1J,EAAAiM,CAAA,CAAW,CAAC,UAAUtF,EAAG,GAAG;OAAwC,uBAAAyH,GAAezH,CAAE;QAA0C,wBAAAA,EAAG,oBAAoBA,EAAG,oBAAe;;MAU7c,YAAO,MAAE3G,EAAAiM,CAAA,CAAW,CAAC,cAActF,EAAG,KAAK6K,CAAM;K,IAElDvR,EAySM,OAAA;MAxSJ,OAAM;MACL,UAAK,MAAEoO,GAAW1H,CAAE;;MAEDgD,EAAA,SAApB9J,EAAA,GAAAgB,EAAmCQ,IAAA,EAAA,KAAA,EAAA,CAAA,K;MAEnCpB,EAaM,OAbN+C,IAaM,CAZJ9C,EAOOoQ,EAAA,QAAA,gBAPPnQ,EAOO,EAAA,SAAA,GAAA,GALGkP,EAAe1I,CAAE,CAAA,SAKpB,CAHL1G,EAEO,QAFPgD,IAEO7C,EADFT,GAAmBgH,EAAG,GAAG,CAAA,GAAA,CAAA,C,IAIxBA,EAAG,WADX9G,EAAA,GAAAgB,EAGES,IAAA;;OADC,YAAU6C,EAAA;;MAKN,CAAAA,EAAA,SAAK,CAAKnE,EAAA0J,CAAA,KADnB7J,EAAA,GAAAC,EAeM,OAfNoD,IAeM,CAXJhD,EAUOoQ,EAAA,QAAA,eAVPnQ,EAUO,EAAA,SAAA,GAAA,GARGkP,EAAe1I,CAAE,CAAA,SAQpB,CALGxC,EAAA,eAAewC,EAAG,IAAIxC,EAAA,gBAAW,QAAawC,EAAG,IAAIxC,EAAA,iBAAW,MADxEtE,EAAA,GAAAC,EAKO,QALPqD,IAKO/C,EADFuG,EAAG,IAAIxC,EAAA,YAAW,GAAA,CAAA,K;MAK3BlE,EAkQM,OAlQNmD,IAkQM,CAjQJlD,EAgQOoQ,EAAA,QAAA,gBAhQPnQ,EAgQO,EAAA,SAAA,GAAA,GA9PGkP,EAAe1I,CAAE,CAAA,SA8PpB,CA5PWxC,EAAA,SAAS0D,EAAA,SAAzBhI,EAAA,GAAAC,EAwDWqB,GAAA,EAAA,KAAA,EAAA,GAAA,EAlDS,CAAAwI,EAAA,SAAe3J,EAAAwF,EAAA,MAAgB,CAAMrB,EAAA,kBAAvDtE,EAAA,GAAAC,EAiCWqB,GAAA,EAAA,KAAA,EAAA,GAAA,CAhCTX,EAeOE,GAAA;OAdL,MAAA;OACA,MAAK;OACL,SAAQ;OACR,SAAQ;OACP,QAAQ;OACR,UAAQ,CAAGiG,EAAG;OACd,cAAY3G,EAAA6J,CAAA,CAAC,CAAA,wBAAA;OACd,OAAM;OACL,SAAKtI,GAAA,MAAO8K,GAAO1F,EAAG,KAAK,GAAA,CAAA,MAAA,CAAA;;OAE5B,SAAAhG,QAGE,CAHFH,EAGEM,GAAA;QAFA,MAAK;QACL,MAAK;;;;;;;M,IAGTN,EAeOE,GAAA;OAdL,MAAA;OACA,MAAK;OACL,SAAQ;OACR,SAAQ;OACP,QAAQ;OACR,UAAQ,CAAGiG,EAAG;OACd,cAAY3G,EAAA6J,CAAA,CAAC,CAAA,0BAAA;OACd,OAAM;OACL,SAAKtI,GAAA,MAAO+K,GAAS3F,EAAG,KAAK,GAAA,CAAA,MAAA,CAAA;;OAE9B,SAAAhG,QAGE,CAHFH,EAGEM,GAAA;QAFA,MAAK;QACL,MAAK;;;;;;;M,uBAKHqD,EAAA,oBADRtE,EAAA,GAAAgB,EAeOH,GAAA;;OAbL,MAAA;OACA,MAAK;OACL,SAAQ;OACR,SAAQ;OACP,QAAQ;OACT,OAAM;OACL,cAAYV,EAAA6J,CAAA,CAAC,CAAA,wBAAA;OACb,SAAKtI,GAAA,MAAOmN,GAAc/H,CAAE,GAAA,CAAA,MAAA,CAAA;;OAE7B,SAAAhG,QAGE,CAHFH,EAGEM,GAAA;QAFA,MAAK;QACL,MAAK;;;M,uDAIUd,EAAA0J,CAAA,KAArB7J,EAAA,GAAAC,EAuHWqB,GAAA,EAAA,KAAA,EAAA,GAAA;OAtHTX,EAmBOE,GAAA;QAlBJ,cAAYV,EAAA6J,CAAA,CAAC,CAAA,wBAAA;QACd,MAAA;QACA,MAAK;QACL,SAAQ;QACR,SAAQ;QACP,UAAQ,CAAGlD,EAAG;QACf,OAAM;QACL,SAAKpF,GAAA,MAAO8K,GAAO1F,EAAG,KAAK,GAAA,CAAA,MAAA,CAAA;;QAE5B,SAAAhG,QAGE,CAHFH,EAGEM,GAAA;SAFA,MAAK;SACL,MAAK;Q,IAEPN,EAIEO,GAAA;SAHA,WAAU;SACV,UAAS;SACR,MAAMf,EAAA6J,CAAA,CAAC,CAAA,wBAAA;;;;;;;;OAGZrJ,EAmBOE,GAAA;QAlBJ,cAAYV,EAAA6J,CAAA,CAAC,CAAA,0BAAA;QACd,MAAA;QACA,MAAK;QACL,SAAQ;QACR,SAAQ;QACP,UAAQ,CAAGlD,EAAG;QACf,OAAM;QACL,SAAKpF,GAAA,MAAO+K,GAAS3F,EAAG,KAAK,GAAA,CAAA,MAAA,CAAA;;QAE9B,SAAAhG,QAGE,CAHFH,EAGEM,GAAA;SAFA,MAAK;SACL,MAAK;Q,IAEPN,EAIEO,GAAA;SAHA,WAAU;SACV,UAAS;SACR,MAAMf,EAAA6J,CAAA,CAAC,CAAA,0BAAA;;;;;;;;OAGZrJ,EA6EOE,GAAA;QA5EL,MAAA;QACA,MAAK;QACL,SAAQ;QACR,SAAQ;QACP,QAAQ;QACT,OAAM;QACL,cAAYV,EAAA6J,CAAA,CAAC,CAAA,sBAAA;;QAEd,SAAAlJ,QAGE;SAHFH,EAGEM,GAAA;UAFA,MAAK;UACL,MAAK;;SAEPN,EAIEO,GAAA;UAHA,WAAU;UACV,UAAS;UACR,MAAMf,EAAA6J,CAAA,CAAC,CAAA,sBAAA;;SAEVrJ,EA0DQgB,IAAA,EA1DD,WAAU,SAAQ,GAAA;UACvB,SAAAb,QAwDQ,CAxDRH,EAwDQiB,IAAA,EAxDD,SAAQ,UAAS,GAAA;WACtB,SAAAd,QAUY;YAVZH,EAUYkB,GAAA;aATT,UAAQ,CAAGiF,EAAG;aACd,SAAKpF,GAAA,MAAOgL,GAAQ5F,EAAG,KAAK,GAAA,CAAA,MAAA,CAAA;;aAElB,SAAOhG,QACsB,CAAtCH,EAAsCM,GAAA,EAA/B,MAAK,wBAAuB,CAAA,C;aAErC,SAAAH,QAEiB,CAFjBH,EAEiBmB,GAAA,MAAA;cADf,SAAAhB,QAAoC,CAAjCC,EAAAR,EAAAJ,EAAA6J,CAAA,CAAC,CAAA,2BAAA,CAAA,GAAA,CAAA,C;;;;;YAGRrJ,EAUYkB,GAAA;aATT,UAAQ,CAAGiF,EAAG;aACd,SAAKpF,GAAA,MAAOiL,GAAW7F,EAAG,KAAK,GAAA,CAAA,MAAA,CAAA;;aAErB,SAAOhG,QACwB,CAAxCH,EAAwCM,GAAA,EAAjC,MAAK,0BAAyB,CAAA,C;aAEvC,SAAAH,QAEiB,CAFjBH,EAEiBmB,GAAA,MAAA;cADf,SAAAhB,QAAuC,CAApCC,EAAAR,EAAAJ,EAAA6J,CAAA,CAAC,CAAA,8BAAA,CAAA,GAAA,CAAA,C;;;;;YAIA1F,EAAA,sBAAsBwG,EAAA,MAAmB,SAAM,KADvD9K,EAAA,GAAAgB,EAUYa,GAAA;;aART,SAAKH,GAAA,MAAOuL,GAAmBnG,CAAE,GAAA,CAAA,MAAA,CAAA;;aAEvB,SAAOhG,QACW,CAA3BH,EAA2BM,GAAA,EAApB,MAAK,aAAY,CAAA,C;aAE1B,SAAAH,QAEiB,CAFjBH,EAEiBmB,GAAA,MAAA;cADf,SAAAhB,QAAgD,CAA7CC,EAAAR,EAAAJ,EAAA6J,CAAA,CAAC,CAAA,uCAAA,CAAA,GAAA,CAAA,C;;;;;YAIA1F,EAAA,sBAAsB0D,EAAA,SAD9BhI,EAAA,GAAAgB,EAUYa,GAAA;;aART,UAAK,MAAEsM,GAAmBrH,CAAE;;aAElB,SAAOhG,QACS,CAAzBH,EAAyBM,GAAA,EAAlB,MAAK,WAAU,CAAA,C;aAExB,SAAAH,QAEiB,CAFjBH,EAEiBmB,GAAA,MAAA;cADf,SAAAhB,QAAmC,CAAhCC,EAAAR,EAAAJ,EAAA6J,CAAA,CAAC,CAAA,0BAAA,CAAA,GAAA,CAAA,C;;;;;YAIA1F,EAAA,oBAAoB0D,EAAA,SAD5BhI,EAAA,GAAAgB,EAUYa,GAAA;;aART,SAAKH,GAAA,MAAOmN,GAAc/H,CAAE,GAAA,CAAA,MAAA,CAAA;;aAElB,SAAOhG,QACsB,CAAtCH,EAAsCM,GAAA,EAA/B,MAAK,wBAAuB,CAAA,C;aAErC,SAAAH,QAEiB,CAFjBH,EAEiBmB,GAAA,MAAA;cADf,SAAAhB,QAAiC,CAA9BC,EAAAR,EAAAJ,EAAA6J,CAAA,CAAC,CAAA,wBAAA,CAAA,GAAA,CAAA,C;;;;;;;;;;;;;M,WAOhBhK,EAAA,GAAAC,EA0EWqB,GAAA,EAAA,KAAA,EAAA,GAAA;OAxEDgD,EAAA,kBAAkB0D,EAAA,SAD1BhI,EAAA,GAAAgB,EAoBOH,GAAA;;QAlBJ,cAAYV,EAAA6J,CAAA,CAAC,CAAA,sBAAA;QACd,MAAA;QACA,MAAK;QACL,SAAQ;QACR,OAAM;QACN,SAAQ;QACR,OAAM;QACL,SAAKtI,GAAA,MAAO4K,GAAYxF,CAAE,GAAA,CAAA,MAAA,CAAA;;QAE3B,SAAAhG,QAGE,CAHFH,EAGEM,GAAA;SAFA,MAAK;SACL,MAAK;Q,IAEPN,EAIEO,GAAA;SAHA,WAAU;SACV,UAAS;SACR,MAAMf,EAAA6J,CAAA,CAAC,CAAA,sBAAA;;;;OAIJ1F,EAAA,oBAAoB0D,EAAA,SAD5BhI,EAAA,GAAAgB,EAmBOH,GAAA;;QAjBJ,cAAYV,EAAA6J,CAAA,CAAC,CAAA,wBAAA;QACd,MAAA;QACA,MAAK;QACL,SAAQ;QACR,SAAQ;QACR,OAAM;QACL,SAAKtI,GAAA,MAAOmN,GAAc/H,CAAE,GAAA,CAAA,MAAA,CAAA;;QAE7B,SAAAhG,QAGE,CAHFH,EAGEM,GAAA;SAFA,MAAK;SACL,MAAK;Q,IAEPN,EAIEO,GAAA;SAHA,WAAU;SACV,UAAS;SACR,MAAMf,EAAA6J,CAAA,CAAC,CAAA,wBAAA;;;;OAIJ1F,EAAA,sBAAsB0D,EAAA,SAD9BhI,EAAA,GAAAgB,EA+BOH,GAAA;;QA7BL,MAAA;QACA,MAAK;QACL,SAAQ;QACR,SAAQ;QACP,QAAQ;QACT,OAAM;QACL,cAAYV,EAAA6J,CAAA,CAAC,CAAA,sBAAA;;QAEd,SAAAlJ,QAGE;SAHFH,EAGEM,GAAA;UAFA,MAAK;UACL,MAAK;;SAEPN,EAIEO,GAAA;UAHA,WAAU;UACV,UAAS;UACR,MAAMf,EAAA6J,CAAA,CAAC,CAAA,sBAAA;;SAEVrJ,EAWQgB,IAAA,EAXD,WAAU,SAAQ,GAAA;UACvB,SAAAb,QASQ,CATRH,EASQiB,IAAA,EATD,SAAQ,UAAS,GAAA;WACtB,SAAAd,QAOY,CAPZH,EAOYkB,GAAA,EAPA,UAAK,MAAEsM,GAAmBrH,CAAE,E;YAC3B,SAAOhG,QACS,CAAzBH,EAAyBM,GAAA,EAAlB,MAAK,WAAU,CAAA,C;YAExB,SAAAH,QAEiB,CAFjBH,EAEiBmB,GAAA,MAAA;aADf,SAAAhB,QAAmC,CAAhCC,EAAAR,EAAAJ,EAAA6J,CAAA,CAAC,CAAA,0BAAA,CAAA,GAAA,CAAA,C;;;;;;;;;;;;;K,WAWNlD,EAAG,YAAYxC,EAAA,sBAAkB,CAAKnE,EAAA0J,CAAA,MAAgBjK,EAAAA,OAAO,QAA7EI,EAAA,GAAAC,EAoCWqB,GAAA,EAAA,KAAA,EAAA,GAAA,CAnCTlB,EAOM,OAPNoD,IAOM,CANJpD,EAKM,OALNqD,IAKM,CAJJpD,EAGEoQ,EAAA,QAAA,QAHFnQ,EAGE,EAAA,SAAA,GAAA,GADQkP,EAAe1I,CAAE,CAAA,CAAA,C,MAI/BzG,EA0BOoQ,EAAA,QAAA,eA1BPnQ,EA0BO,EAAA,SAAA,GAAA,GAxBGkP,EAAe1I,CAAE,CAAA,SAwBpB,CArBG6D,GAAA,SAAoB,CAAKxK,EAAA0J,CAAA,KADjC7J,EAAA,GAAAC,EAqBM,OArBNyD,IAqBM;MAjBJ,AAAAuO,EAAA,OAAA7R,EAAsC,OAAA,EAAjC,OAAM,yBAAwB,GAAA,MAAA,EAAA;MACnCO,EAMOE,GAAA;OALL,SAAQ;OACP,UAAUiG,EAAG;OACb,SAAKpF,GAAA,MAAOuN,GAAcnI,CAAE,GAAA,CAAA,MAAA,CAAA;;OAE7B,SAAAhG,QAA+B,CAA5BC,EAAAR,EAAAJ,EAAA6J,CAAA,CAAC,CAAA,sBAAA,CAAA,GAAA,CAAA,C;;;MAENrJ,EAQOE,GAAA;OAPL,OAAM;OACN,SAAQ;OACR,gBAAa;OACZ,UAAUiG,EAAG;OACb,SAAKpF,GAAA,MAAOqN,GAAYjI,CAAE,GAAA,CAAA,MAAA,CAAA;;OAE3B,SAAAhG,QAA6B,CAA1BC,EAAAR,EAAAJ,EAAA6J,CAAA,CAAC,CAAA,oBAAA,CAAA,GAAA,CAAA,C;;;K,2BAOCpK,EAAAA,OAAM,qBAAsB0E,EAAA,YAAYwC,EAAG,cAAcxC,EAAA,sBAAkB,CAAKnE,EAAA0J,CAAA,MAD7F7J,EAAA,GAAAC,EAUM,OAVN0D,IAUM,CANJvD,EAKM,OALNwD,IAKM,CAJJvD,EAGEoQ,EAAA,QAAA,iBAHFnQ,EAGE,EAAA,SAAA,GAAA,GADQkP,EAAe1I,CAAE,CAAA,CAAA,C;KAMjCzG,EAGEoQ,EAAA,QAAA,cAHFnQ,EAGE,EAAA,SAAA,GAAA,GADQkP,EAAe1I,CAAE,CAAA,CAAA;;IAMvB8C,GAAA,SAAM,CAAKtF,EAAA,WAAO,CAAKA,EAAA,SAAK,CAAKwH,GAAA,QADzCzL,EAmBOoQ,EAAA,QAAA,cAAA;KAhBJ,UAAUnM,EAAA;KACV,UAAUA,EAAA;KACV,OAAK,EAAA,SAAa2J,GAAU;KAC5B,SAAO,EAAA,KAASA,GAAU;IAN7B,SAmBO,CAXL7N,EAUS,UAAA;KATP,MAAK;KACL,OAAM;KACL,SAAO6N;I,IAERtN,EAGEM,GAAA;KAFA,MAAK;KACL,MAAK;I,IAEPb,EAAmC,QAAA,MAAAG,EAA1BwJ,GAAA,KAAgB,GAAA,CAAA,C;;GAK/BpJ,EAMEoB,IAAA;IALS,YAAA8K,GAAA;IAAA,uBAAA,AAAAoF,EAAA,QAAA,MAAA,GAAwB,QAAAN;IAChC,OAAO7G,EAAA,MAAmB;IAC1B,iBAAegC,EAAA,OAAsB,SAAK;IAC1C,cAAYC,GAAA;IACZ,WAASG;;;;;;;GAGZvM,EAUEqB,IAAA;IATS,YAAA7B,EAAA+R,EAAA;IAAA,uBAAA,AAAAD,EAAA,QAAA,MAAAhQ,GAAAiQ,EAAA,IAAA,GAAY,QAAAP,IAAA;IACpB,OAAOzH,GAAA;IACP,MAAMC,GAAA;IACN,iBAAehK,EAAA6J,CAAA,CAAC,CAAA,wBAAA;IAChB,gBAAc7J,EAAA6J,CAAA,CAAC,CAAA,sBAAA;IACf,OAAO7J,EAAAiS,EAAA;IACP,aAAWjS,EAAAkS,EAAA;IACX,WAASlS,EAAAmS,EAAA;IACT,UAAQnS,EAAAoS,EAAA;;;;;;;;;;;;GAGXnS,EAaM,OAbNyD,IAaMtD,EAPFJ,EAAAiM,CAAA,CAAW,CAAC,WAAW,UAAK,O,KAAsBjM,EAAA6J,CAAA,CAAC,CAAA,uCAAA;IAA2D,GAAA7J,EAAAiM,CAAA,CAAW,CAAC,aAAa,QAAK;IAA2B,OAAAjM,EAAAiM,CAAA,CAAW,CAAC,WAAW"}
|
|
@@ -115,10 +115,9 @@ export interface ListEditorHandle<TItem extends Record<string, any>> {
|
|
|
115
115
|
*/
|
|
116
116
|
export type ExposedListEditorHandle<TItem extends Record<string, any>> = ShallowUnwrapRef<ListEditorHandle<TItem>>;
|
|
117
117
|
/**
|
|
118
|
-
*
|
|
119
|
-
*
|
|
120
|
-
*
|
|
121
|
-
*
|
|
122
|
-
* that passes it in as `:editor`, so the state survives unmount/remount.
|
|
118
|
+
* State controller for the list editors, exposed as a `ListEditorHandle`. Owns row keys, declared dirty
|
|
119
|
+
* tracking (no whole-list JSON diff), validation summary, position renumbering and the save lifecycle.
|
|
120
|
+
* An editor creates it by default. A consumer can create it and
|
|
121
|
+
* pass it as `:editor` so state survives unmount and remount.
|
|
123
122
|
*/
|
|
124
123
|
export declare function useListEditorController<TItem extends Record<string, any>>(options: UseListEditorControllerOptions<TItem>): ListEditorHandle<TItem>;
|