@anzusystems/common-admin 2.0.0-rc.10 → 2.0.0-rc.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (465) hide show
  1. package/dist/domains/anzuUser/components/AAnzuUserDatatable.js.map +1 -1
  2. package/dist/domains/anzuUser/components/AAnzuUserDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  3. package/dist/domains/anzuUser/components/AAnzuUserFilter.js.map +1 -1
  4. package/dist/domains/anzuUser/components/AAnzuUserFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  5. package/dist/domains/anzuUser/components/AAnzuUserForm.js.map +1 -1
  6. package/dist/domains/anzuUser/components/AAnzuUserForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  7. package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.js.map +1 -1
  8. package/dist/domains/anzuUser/components/AUserBulkActionDialog.js.map +1 -1
  9. package/dist/domains/anzuUser/components/AUserBulkActionDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  10. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.js.map +1 -1
  11. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  12. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.js.map +1 -1
  13. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  14. package/dist/domains/anzuUser/components/AUserEnabledSwitch.js.map +1 -1
  15. package/dist/domains/anzuUser/components/AUserEnabledSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  16. package/dist/domains/anzuUser/components/AUserManageButton.js.map +1 -1
  17. package/dist/domains/anzuUser/components/AUserMetadataForm.js.map +1 -1
  18. package/dist/domains/anzuUser/components/AUserMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  19. package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.js.map +1 -1
  20. package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  21. package/dist/domains/anzuUser/components/AUserOtherSystemsTable.js.map +1 -1
  22. package/dist/domains/anzuUser/components/AUserSystemOverview.js.map +1 -1
  23. package/dist/domains/anzuUser/components/AUserSystemOverview.vue_vue_type_script_setup_true_lang.js.map +1 -1
  24. package/dist/domains/anzuUser/components/AUserSystemPanel.js.map +1 -1
  25. package/dist/domains/anzuUser/components/AUserSystemPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  26. package/dist/domains/anzuUser/components/AUserSystemStatusChip.js.map +1 -1
  27. package/dist/domains/anzuUser/components/AUserTabsShell.js.map +1 -1
  28. package/dist/domains/anzuUser/components/AUserTabsShell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  29. package/dist/domains/auth/components/Acl.js.map +1 -1
  30. package/dist/domains/auth/components/Acl.vue_vue_type_script_setup_true_lang.js.map +1 -1
  31. package/dist/domains/cached/components/ACachedChip.js.map +1 -1
  32. package/dist/domains/cached/components/ACachedChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/domains/cached/components/ACachedUserChip.js.map +1 -1
  34. package/dist/domains/cached/components/ACachedUserChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  35. package/dist/domains/collab/components/ACollabCountdown.js.map +1 -1
  36. package/dist/domains/collab/components/ACollabCountdown.vue_vue_type_script_setup_true_lang.js.map +1 -1
  37. package/dist/domains/collab/components/ACollabLockedByUser.js.map +1 -1
  38. package/dist/domains/collab/components/ACollabManagement.js.map +1 -1
  39. package/dist/domains/collab/components/ACollabManagement.vue_vue_type_script_setup_true_lang.js.map +1 -1
  40. package/dist/domains/customDataForm/components/ACustomDataForm.js.map +1 -1
  41. package/dist/domains/customDataForm/components/ACustomDataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  42. package/dist/domains/customDataForm/components/ACustomDataFormElement.js.map +1 -1
  43. package/dist/domains/customDataForm/components/ACustomDataFormElement.vue_vue_type_script_setup_true_lang.js.map +1 -1
  44. package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.js.map +1 -1
  45. package/dist/domains/dam/assetDetail/components/AColorBox.js.map +1 -1
  46. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.js.map +1 -1
  47. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  48. package/dist/domains/dam/assetDetail/components/AssetDetailDialog.js.map +1 -1
  49. package/dist/domains/dam/assetDetail/components/AssetDetailDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  50. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.js.map +1 -1
  51. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
  52. package/dist/domains/dam/assetDetail/components/AssetDetailDialogLoader.js.map +1 -1
  53. package/dist/domains/dam/assetDetail/components/AssetDetailDialogSidebar.js.map +1 -1
  54. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsTeleportTarget.js.map +1 -1
  55. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsWrapper.js.map +1 -1
  56. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsWrapper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  57. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.js.map +1 -1
  58. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
  59. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.js.map +1 -1
  60. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  61. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.js.map +1 -1
  62. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.vue_vue_type_script_setup_true_lang.js.map +1 -1
  63. package/dist/domains/dam/assetDetail/components/AssetFileFailReasonChip.js.map +1 -1
  64. package/dist/domains/dam/assetDetail/components/AssetFileFailReasonChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  65. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.js.map +1 -1
  66. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  67. package/dist/domains/dam/assetDetail/components/AssetFileRotate.js.map +1 -1
  68. package/dist/domains/dam/assetDetail/components/AssetFileRotate.vue_vue_type_script_setup_true_lang.js.map +1 -1
  69. package/dist/domains/dam/assetDetail/components/AssetImage.js.map +1 -1
  70. package/dist/domains/dam/assetDetail/components/AssetImage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  71. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.js.map +1 -1
  72. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue_vue_type_script_setup_true_lang.js.map +1 -1
  73. package/dist/domains/dam/assetDetail/components/AssetInfobox.js.map +1 -1
  74. package/dist/domains/dam/assetDetail/components/AssetInfobox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  75. package/dist/domains/dam/assetDetail/components/AssetMetadata.js.map +1 -1
  76. package/dist/domains/dam/assetDetail/components/AssetMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  77. package/dist/domains/dam/assetDetail/components/AssetMetadataImageAttributes.js.map +1 -1
  78. package/dist/domains/dam/assetDetail/components/AssetMetadataImageAttributes.vue_vue_type_script_setup_true_lang.js.map +1 -1
  79. package/dist/domains/dam/assetSelect/components/AAssetListInner.js.map +1 -1
  80. package/dist/domains/dam/assetSelect/components/AAssetListInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  81. package/dist/domains/dam/assetSelect/components/AAssetSelect.js.map +1 -1
  82. package/dist/domains/dam/assetSelect/components/AAssetSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  83. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.js.map +1 -1
  84. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.vue_vue_type_script_setup_true_lang.js.map +1 -1
  85. package/dist/domains/dam/assetSelect/components/AssetDistributionServiceNameFilter.js.map +1 -1
  86. package/dist/domains/dam/assetSelect/components/AssetImagePreview.js.map +1 -1
  87. package/dist/domains/dam/assetSelect/components/AssetImagePreview.vue_vue_type_script_setup_true_lang.js.map +1 -1
  88. package/dist/domains/dam/assetSelect/components/AssetSelectFilter.js.map +1 -1
  89. package/dist/domains/dam/assetSelect/components/AssetSelectFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  90. package/dist/domains/dam/assetSelect/components/AssetSelectFilterForm.js.map +1 -1
  91. package/dist/domains/dam/assetSelect/components/AssetSelectFilterForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  92. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.js.map +1 -1
  93. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  94. package/dist/domains/dam/assetSelect/components/AssetSelectListTable.js.map +1 -1
  95. package/dist/domains/dam/assetSelect/components/AssetSelectListTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  96. package/dist/domains/dam/assetSelect/components/AssetSelectListTiles.js.map +1 -1
  97. package/dist/domains/dam/assetSelect/components/AssetSelectListTiles.vue_vue_type_script_setup_true_lang.js.map +1 -1
  98. package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.js.map +1 -1
  99. package/dist/domains/dam/assetSelect/components/AssetSelectTilesItem.js.map +1 -1
  100. package/dist/domains/dam/assetSelect/components/AssetSelectTilesItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  101. package/dist/domains/dam/assetSelect/components/FilterPodcastRemoteAutocomplete.js.map +1 -1
  102. package/dist/domains/dam/author/components/AuthorCreateButton.js.map +1 -1
  103. package/dist/domains/dam/author/components/AuthorCreateButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  104. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.js.map +1 -1
  105. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  106. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.js.map +1 -1
  107. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue_vue_type_script_setup_true_lang.js.map +1 -1
  108. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.js.map +1 -1
  109. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
  110. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.js.map +1 -1
  111. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  112. package/dist/domains/dam/components/DamAdminAssetLink.js.map +1 -1
  113. package/dist/domains/dam/cropper/components/ACropper.js.map +1 -1
  114. package/dist/domains/dam/cropper/components/ACropper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  115. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.js.map +1 -1
  116. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  117. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelectLazy.js.map +1 -1
  118. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelectLazy.vue_vue_type_script_setup_true_lang.js.map +1 -1
  119. package/dist/domains/dam/imageWidget/components/AImageMediaWidget.js.map +1 -1
  120. package/dist/domains/dam/imageWidget/components/AImageMediaWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
  121. package/dist/domains/dam/imageWidget/components/AImagePublicInput.js.map +1 -1
  122. package/dist/domains/dam/imageWidget/components/AImagePublicInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  123. package/dist/domains/dam/imageWidget/components/AImageWidget.js.map +1 -1
  124. package/dist/domains/dam/imageWidget/components/AImageWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
  125. package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.js.map +1 -1
  126. package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.vue_vue_type_script_setup_true_lang.js.map +1 -1
  127. package/dist/domains/dam/imageWidget/components/AImageWidgetMultipleSimple.js.map +1 -1
  128. package/dist/domains/dam/imageWidget/components/AImageWidgetSimple.js.map +1 -1
  129. package/dist/domains/dam/imageWidget/components/AImageWidgetSimple.vue_vue_type_script_setup_true_lang.js.map +1 -1
  130. package/dist/domains/dam/imageWidget/components/AMediaWidgetSimple.js.map +1 -1
  131. package/dist/domains/dam/imageWidget/components/AMediaWidgetSimple.vue_vue_type_script_setup_true_lang.js.map +1 -1
  132. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.js.map +1 -1
  133. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  134. package/dist/domains/dam/imageWidget/components/ImageMassOperations.js.map +1 -1
  135. package/dist/domains/dam/imageWidget/components/ImageMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
  136. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.js.map +1 -1
  137. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  138. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.js.map +1 -1
  139. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  140. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.js.map +1 -1
  141. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  142. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.js.map +1 -1
  143. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  144. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.js.map +1 -1
  145. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  146. package/dist/domains/dam/imageWidget/components/MediaWidgetSimpleDialog.js.map +1 -1
  147. package/dist/domains/dam/imageWidget/components/MediaWidgetSimpleDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  148. package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.js.map +1 -1
  149. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.js.map +1 -1
  150. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  151. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.js.map +1 -1
  152. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
  153. package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.js.map +1 -1
  154. package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
  155. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.js.map +1 -1
  156. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  157. package/dist/domains/dam/uploadQueue/components/UploadQueueButtonStop.js.map +1 -1
  158. package/dist/domains/dam/uploadQueue/components/UploadQueueButtonStop.vue_vue_type_script_setup_true_lang.js.map +1 -1
  159. package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.js.map +1 -1
  160. package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  161. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.js.map +1 -1
  162. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  163. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.js.map +1 -1
  164. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.js.map +1 -1
  165. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  166. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.js.map +1 -1
  167. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  168. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.js.map +1 -1
  169. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  170. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.js.map +1 -1
  171. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  172. package/dist/domains/dam/uploadQueue/components/UploadQueueItemErrorOverlay.js.map +1 -1
  173. package/dist/domains/dam/user/components/DamAssetLicenceGroupRemoteAutocomplete.js.map +1 -1
  174. package/dist/domains/dam/user/components/DamAssetLicenceRemoteAutocomplete.js.map +1 -1
  175. package/dist/domains/dam/user/components/DamDistributionServiceSelect.js.map +1 -1
  176. package/dist/domains/dam/user/components/DamExtSystemRemoteAutocomplete.js.map +1 -1
  177. package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.js.map +1 -1
  178. package/dist/domains/dam/user/components/DamUserFilterRemoteAutocomplete.js.map +1 -1
  179. package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.js.map +1 -1
  180. package/dist/domains/filters/bookmarks/components/AFilterBookmarkButton.js.map +1 -1
  181. package/dist/domains/filters/bookmarks/components/AFilterBookmarkButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  182. package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.js.map +1 -1
  183. package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  184. package/dist/domains/filters/bookmarks/components/FilterBookmarks.js.map +1 -1
  185. package/dist/domains/filters/bookmarks/components/FilterBookmarks.vue_vue_type_script_setup_true_lang.js.map +1 -1
  186. package/dist/domains/filters/components/AFilterAdvancedButton.js.map +1 -1
  187. package/dist/domains/filters/components/AFilterBooleanSelect.js.map +1 -1
  188. package/dist/domains/filters/components/AFilterDatetimePicker.js.map +1 -1
  189. package/dist/domains/filters/components/AFilterEmpty.js.map +1 -1
  190. package/dist/domains/filters/components/AFilterInteger.js.map +1 -1
  191. package/dist/domains/filters/components/AFilterResetButton.js.map +1 -1
  192. package/dist/domains/filters/components/AFilterString.js.map +1 -1
  193. package/dist/domains/filters/components/AFilterString.vue.d.ts +3 -0
  194. package/dist/domains/filters/components/AFilterString.vue_vue_type_script_setup_true_lang.js +8 -2
  195. package/dist/domains/filters/components/AFilterString.vue_vue_type_script_setup_true_lang.js.map +1 -1
  196. package/dist/domains/filters/components/AFilterSubmitButton.js.map +1 -1
  197. package/dist/domains/filters/components/AFilterTimeInterval.js.map +1 -1
  198. package/dist/domains/filters/components/AFilterTimeInterval.vue_vue_type_script_setup_true_lang.js.map +1 -1
  199. package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.js.map +1 -1
  200. package/dist/domains/filters/components/AFilterWrapper.js.map +1 -1
  201. package/dist/domains/filters/components/AFilterWrapper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  202. package/dist/domains/filters/components/AFilterWrapperSidebar.js.map +1 -1
  203. package/dist/domains/filters/components/FilterDetailItem.js.map +1 -1
  204. package/dist/domains/filters/components/FiltersSelected.js.map +1 -1
  205. package/dist/domains/filters/datatable/components/ADatatableConfigButton.js.map +1 -1
  206. package/dist/domains/filters/datatable/components/ADatatableOrdering.js.map +1 -1
  207. package/dist/domains/filters/datatable/components/ADatatablePagination.js.map +1 -1
  208. package/dist/domains/filters/datatable/components/ADatatablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  209. package/dist/domains/form/components/AFormDatetimePicker.js.map +1 -1
  210. package/dist/domains/form/components/AFormDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  211. package/dist/domains/form/components/AFormFlagDatetimePicker.js.map +1 -1
  212. package/dist/domains/form/components/AFormFlagDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  213. package/dist/domains/form/components/AFormRemoteCheckbox.js.map +1 -1
  214. package/dist/domains/form/components/AFormRemoteCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  215. package/dist/domains/form/components/AFormRemoteSwitch.js.map +1 -1
  216. package/dist/domains/form/components/AFormRemoteSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  217. package/dist/domains/form/components/AFormSwitch.js.map +1 -1
  218. package/dist/domains/form/components/AFormSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  219. package/dist/domains/form/components/AFormTextField.js.map +1 -1
  220. package/dist/domains/form/components/AFormTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  221. package/dist/domains/form/components/AFormTextarea.js.map +1 -1
  222. package/dist/domains/form/components/AFormTextarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
  223. package/dist/domains/form/components/AFormValueObjectOptionsSelect.js.map +1 -1
  224. package/dist/domains/form/components/AFormValueObjectOptionsSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  225. package/dist/domains/form/components/ASystemEntityScope.js.map +1 -1
  226. package/dist/domains/job/components/AJobBaseCreateForm.js.map +1 -1
  227. package/dist/domains/job/components/AJobBaseCreateForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  228. package/dist/domains/job/components/AJobDetailCommon.js.map +1 -1
  229. package/dist/domains/job/components/AJobPriorityChip.js.map +1 -1
  230. package/dist/domains/job/components/AJobStatusChip.js.map +1 -1
  231. package/dist/domains/listEditor/components/AListEditor.js.map +1 -1
  232. package/dist/domains/listEditor/components/AListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  233. package/dist/domains/listEditor/components/ANestedSortableListEditor.js.map +1 -1
  234. package/dist/domains/listEditor/components/ANestedSortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  235. package/dist/domains/listEditor/components/ASortableListEditor.js.map +1 -1
  236. package/dist/domains/listEditor/components/ASortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  237. package/dist/domains/listEditor/components/internal/LeChangeParentDialog.js.map +1 -1
  238. package/dist/domains/listEditor/components/internal/LeChangeParentDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  239. package/dist/domains/listEditor/components/internal/LeDeleteDialog.js.map +1 -1
  240. package/dist/domains/listEditor/components/internal/LeDeleteDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  241. package/dist/domains/listEditor/components/internal/LeDragHandle.js.map +1 -1
  242. package/dist/domains/listEditor/components/internal/LeEmptyState.js.map +1 -1
  243. package/dist/domains/listEditor/components/internal/LeEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -1
  244. package/dist/domains/listEditor/components/internal/LeMoveToPositionDialog.js.map +1 -1
  245. package/dist/domains/listEditor/components/internal/LeMoveToPositionDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  246. package/dist/domains/listEditor/components/internal/LeNestedRow.js.map +1 -1
  247. package/dist/domains/listEditor/components/internal/LeNestedRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  248. package/dist/domains/listEditor/components/internal/LeStatus.js.map +1 -1
  249. package/dist/domains/listEditor/components/internal/LeStatus.vue_vue_type_script_setup_true_lang.js.map +1 -1
  250. package/dist/domains/listEditor/components/internal/LeUnsavedLabel.js.map +1 -1
  251. package/dist/domains/listEditor/components/internal/LeUnsavedLabel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  252. package/dist/domains/log/components/ALogDatatable.js.map +1 -1
  253. package/dist/domains/log/components/ALogDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  254. package/dist/domains/log/components/ALogDetail.js.map +1 -1
  255. package/dist/domains/log/components/ALogDetailView.js.map +1 -1
  256. package/dist/domains/log/components/ALogDetailView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  257. package/dist/domains/log/components/ALogFilter.js.map +1 -1
  258. package/dist/domains/log/components/ALogLevelChip.js.map +1 -1
  259. package/dist/domains/log/components/ALogLevelChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  260. package/dist/domains/log/components/ALogListView.js.map +1 -1
  261. package/dist/domains/permission/components/APermissionEditor.js.map +1 -1
  262. package/dist/domains/permission/components/APermissionEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  263. package/dist/domains/permission/components/APermissionGrantEditor.js.map +1 -1
  264. package/dist/domains/permission/components/APermissionValueChip.js.map +1 -1
  265. package/dist/domains/permission/components/APermissionValueChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  266. package/dist/domains/permission/group/components/APermissionGroupDatatable.js.map +1 -1
  267. package/dist/domains/permission/group/components/APermissionGroupDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  268. package/dist/domains/permission/group/components/APermissionGroupDetail.js.map +1 -1
  269. package/dist/domains/permission/group/components/APermissionGroupFilter.js.map +1 -1
  270. package/dist/domains/permission/group/components/APermissionGroupManage.js.map +1 -1
  271. package/dist/domains/permission/group/components/APermissionGroupManage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  272. package/dist/domains/permission/group/components/APermissionGroupRemoteAutocomplete.js.map +1 -1
  273. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.js.map +1 -1
  274. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  275. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.js.map +1 -1
  276. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.js.map +1 -1
  277. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  278. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocompleteWithCached.js.map +1 -1
  279. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
  280. package/dist/domains/subjectSelect/components/AFilterWrapperSubjectSelect.js.map +1 -1
  281. package/dist/domains/subjectSelect/components/AFilterWrapperSubjectSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  282. package/dist/domains/subjectSelect/components/ASubjectSelect.js.map +1 -1
  283. package/dist/domains/subjectSelect/components/ASubjectSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  284. package/dist/domains/system/appShell/components/AActionbar.js.map +1 -1
  285. package/dist/domains/system/appShell/components/AActionbar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  286. package/dist/domains/system/appShell/components/AActionbarTarget.js.map +1 -1
  287. package/dist/domains/system/appShell/components/ALayoutLoader.js.map +1 -1
  288. package/dist/domains/system/appShell/components/ALayoutSwitch.js.map +1 -1
  289. package/dist/domains/system/appShell/components/ALayoutSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  290. package/dist/domains/system/components/AAdminSwitcher.js.map +1 -1
  291. package/dist/domains/system/components/AAdminSwitcher.vue_vue_type_script_setup_true_lang.js.map +1 -1
  292. package/dist/domains/system/components/AAlerts.js.map +1 -1
  293. package/dist/domains/system/components/ALanguageSelect.js.map +1 -1
  294. package/dist/domains/system/components/AThemeSelect.js.map +1 -1
  295. package/dist/domains/system/components/AThemeSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  296. package/dist/domains/system/flags/components/FlagCountry.js.map +1 -1
  297. package/dist/domains/system/flags/components/FlagEn.js.map +1 -1
  298. package/dist/domains/system/flags/components/FlagSk.js.map +1 -1
  299. package/dist/domains/system/systemBar/components/ASystemBar.js.map +1 -1
  300. package/dist/domains/system/systemBar/components/ASystemBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  301. package/dist/domains/system/systemBar/components/ASystemBarNewVersion.js.map +1 -1
  302. package/dist/domains/system/systemBar/components/ASystemBarNewVersion.vue_vue_type_script_setup_true_lang.js.map +1 -1
  303. package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.js.map +1 -1
  304. package/dist/domains/ui/buttons/action/components/AActionCreateButton.js.map +1 -1
  305. package/dist/domains/ui/buttons/action/components/AActionCreateButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  306. package/dist/domains/ui/buttons/action/components/AActionDeleteButton.js.map +1 -1
  307. package/dist/domains/ui/buttons/action/components/AActionDeleteButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  308. package/dist/domains/ui/buttons/action/components/AActionEditButton.js.map +1 -1
  309. package/dist/domains/ui/buttons/action/components/AActionEditButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  310. package/dist/domains/ui/buttons/action/components/AActionSaveAndCloseButton.js.map +1 -1
  311. package/dist/domains/ui/buttons/action/components/AActionSaveAndCloseButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  312. package/dist/domains/ui/buttons/action/components/AActionSaveButton.js.map +1 -1
  313. package/dist/domains/ui/buttons/action/components/AActionSaveButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  314. package/dist/domains/ui/buttons/components/ABtnSplit.js.map +1 -1
  315. package/dist/domains/ui/buttons/components/ABtnSplit.vue_vue_type_script_setup_true_lang.js.map +1 -1
  316. package/dist/domains/ui/buttons/table/components/ATableCopyIdButton.js.map +1 -1
  317. package/dist/domains/ui/buttons/table/components/ATableCopyIdButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  318. package/dist/domains/ui/buttons/table/components/ATableDetailButton.js.map +1 -1
  319. package/dist/domains/ui/buttons/table/components/ATableDetailButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  320. package/dist/domains/ui/buttons/table/components/ATableEditButton.js.map +1 -1
  321. package/dist/domains/ui/buttons/table/components/ATableEditButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  322. package/dist/domains/ui/components/AAnzuUserAvatar.js.map +1 -1
  323. package/dist/domains/ui/components/AAnzuUserAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  324. package/dist/domains/ui/components/AAvatarColorPicker.js.map +1 -1
  325. package/dist/domains/ui/components/AAvatarColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  326. package/dist/domains/ui/components/ABooleanSelect.js.map +1 -1
  327. package/dist/domains/ui/components/ABooleanValue.js.map +1 -1
  328. package/dist/domains/ui/components/ACard.js.map +1 -1
  329. package/dist/domains/ui/components/ACardLoader.js.map +1 -1
  330. package/dist/domains/ui/components/AChipNoLink.js.map +1 -1
  331. package/dist/domains/ui/components/ACopyText.js.map +1 -1
  332. package/dist/domains/ui/components/ACopyText.vue_vue_type_script_setup_true_lang.js.map +1 -1
  333. package/dist/domains/ui/components/ACreateDialog.js.map +1 -1
  334. package/dist/domains/ui/components/ACreateDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  335. package/dist/domains/ui/components/ACurrentUserDropdown.js.map +1 -1
  336. package/dist/domains/ui/components/ACurrentUserDropdown.vue_vue_type_script_setup_true_lang.js.map +1 -1
  337. package/dist/domains/ui/components/ADialogToolbar.js.map +1 -1
  338. package/dist/domains/ui/components/AIconGroup.js.map +1 -1
  339. package/dist/domains/ui/components/AProgress.js.map +1 -1
  340. package/dist/domains/ui/components/ARow.js.map +1 -1
  341. package/dist/domains/ui/components/ARow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  342. package/dist/domains/ui/components/ATimeTrackingFields.js.map +1 -1
  343. package/dist/domains/ui/components/ATimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
  344. package/dist/domains/ui/components/AUserAndTimeTrackingFields.js.map +1 -1
  345. package/dist/domains/ui/components/AUserAndTimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
  346. package/dist/domains/ui/datetime/components/ADatetime.js.map +1 -1
  347. package/dist/domains/ui/datetime/components/ADatetimePicker.js.map +1 -1
  348. package/dist/domains/ui/datetime/components/ADatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  349. package/dist/domains/ui/datetime/components/TimePicker.js.map +1 -1
  350. package/dist/domains/ui/file/components/AFileDropzone.js.map +1 -1
  351. package/dist/domains/ui/file/components/AFileInput.js.map +1 -1
  352. package/dist/domains/ui/file/components/AFileInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  353. package/dist/domains/ui/file/components/AFileInputDialog.js.map +1 -1
  354. package/dist/domains/ui/file/components/AFileInputDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  355. package/dist/domains/ui/view/components/AGenericView.js.map +1 -1
  356. package/dist/domains/ui/view/components/AGenericView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  357. package/dist/domains/ui/view/components/ALoginView.js.map +1 -1
  358. package/dist/domains/ui/view/components/ALoginView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  359. package/dist/domains/ui/view/components/ALogoutView.js.map +1 -1
  360. package/dist/domains/ui/view/components/ANotFoundView.js.map +1 -1
  361. package/dist/domains/ui/view/components/AUnauthorizedView.js.map +1 -1
  362. package/dist/domains/ui/view/components/AUnauthorizedView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  363. package/dist/domains/unsavedGuard/components/AUnsavedConfirmDialog.js.map +1 -1
  364. package/dist/locales/cs/common/alert.js.map +1 -1
  365. package/dist/locales/cs/common/anzuUser.js.map +1 -1
  366. package/dist/locales/cs/common/assetSelect.js.map +1 -1
  367. package/dist/locales/cs/common/button.js.map +1 -1
  368. package/dist/locales/cs/common/collab.js.map +1 -1
  369. package/dist/locales/cs/common/confirmDialog.js.map +1 -1
  370. package/dist/locales/cs/common/customForm.js.map +1 -1
  371. package/dist/locales/cs/common/customFormElement.js.map +1 -1
  372. package/dist/locales/cs/common/damImage.js.map +1 -1
  373. package/dist/locales/cs/common/dayOfWeek.js.map +1 -1
  374. package/dist/locales/cs/common/filter.js.map +1 -1
  375. package/dist/locales/cs/common/job.js.map +1 -1
  376. package/dist/locales/cs/common/linkDto.js.map +1 -1
  377. package/dist/locales/cs/common/listItemDto.js.map +1 -1
  378. package/dist/locales/cs/common/log.js.map +1 -1
  379. package/dist/locales/cs/common/model.js.map +1 -1
  380. package/dist/locales/cs/common/permission.js.map +1 -1
  381. package/dist/locales/cs/common/permissionEditor.js.map +1 -1
  382. package/dist/locales/cs/common/permissionGroup.js.map +1 -1
  383. package/dist/locales/cs/common/routeSettings.js.map +1 -1
  384. package/dist/locales/cs/common/sortable.js.map +1 -1
  385. package/dist/locales/cs/common/subjectSelect.js.map +1 -1
  386. package/dist/locales/cs/common/system.js.map +1 -1
  387. package/dist/locales/cs/common/time.js.map +1 -1
  388. package/dist/locales/cs/common/userSystem.js.map +1 -1
  389. package/dist/locales/cs/error/apiDependencyExists.js.map +1 -1
  390. package/dist/locales/cs/error/apiForbiddenOperation.js.map +1 -1
  391. package/dist/locales/cs/error/apiTimedOut.js.map +1 -1
  392. package/dist/locales/cs/error/apiValidation.js.map +1 -1
  393. package/dist/locales/cs/error/jsValidation.js.map +1 -1
  394. package/dist/locales/cs/vuetify.js.map +1 -1
  395. package/dist/locales/en/common/alert.js.map +1 -1
  396. package/dist/locales/en/common/anzuUser.js.map +1 -1
  397. package/dist/locales/en/common/assetSelect.js.map +1 -1
  398. package/dist/locales/en/common/button.js.map +1 -1
  399. package/dist/locales/en/common/collab.js.map +1 -1
  400. package/dist/locales/en/common/confirmDialog.js.map +1 -1
  401. package/dist/locales/en/common/customForm.js.map +1 -1
  402. package/dist/locales/en/common/customFormElement.js.map +1 -1
  403. package/dist/locales/en/common/damImage.js.map +1 -1
  404. package/dist/locales/en/common/dayOfWeek.js.map +1 -1
  405. package/dist/locales/en/common/filter.js.map +1 -1
  406. package/dist/locales/en/common/job.js.map +1 -1
  407. package/dist/locales/en/common/linkDto.js.map +1 -1
  408. package/dist/locales/en/common/listItemDto.js.map +1 -1
  409. package/dist/locales/en/common/log.js.map +1 -1
  410. package/dist/locales/en/common/model.js.map +1 -1
  411. package/dist/locales/en/common/permission.js.map +1 -1
  412. package/dist/locales/en/common/permissionEditor.js.map +1 -1
  413. package/dist/locales/en/common/permissionGroup.js.map +1 -1
  414. package/dist/locales/en/common/routeSettings.js.map +1 -1
  415. package/dist/locales/en/common/sortable.js.map +1 -1
  416. package/dist/locales/en/common/subjectSelect.js.map +1 -1
  417. package/dist/locales/en/common/system.js.map +1 -1
  418. package/dist/locales/en/common/time.js.map +1 -1
  419. package/dist/locales/en/common/userSystem.js.map +1 -1
  420. package/dist/locales/en/error/apiDependencyExists.js.map +1 -1
  421. package/dist/locales/en/error/apiForbiddenOperation.js.map +1 -1
  422. package/dist/locales/en/error/apiTimedOut.js.map +1 -1
  423. package/dist/locales/en/error/apiValidation.js.map +1 -1
  424. package/dist/locales/en/error/jsValidation.js.map +1 -1
  425. package/dist/locales/en/vuetify.js.map +1 -1
  426. package/dist/locales/sk/common/alert.js.map +1 -1
  427. package/dist/locales/sk/common/anzuUser.js.map +1 -1
  428. package/dist/locales/sk/common/assetSelect.js.map +1 -1
  429. package/dist/locales/sk/common/button.js.map +1 -1
  430. package/dist/locales/sk/common/collab.js.map +1 -1
  431. package/dist/locales/sk/common/confirmDialog.js.map +1 -1
  432. package/dist/locales/sk/common/customForm.js.map +1 -1
  433. package/dist/locales/sk/common/customFormElement.js.map +1 -1
  434. package/dist/locales/sk/common/damImage.js.map +1 -1
  435. package/dist/locales/sk/common/dayOfWeek.js.map +1 -1
  436. package/dist/locales/sk/common/filter.js.map +1 -1
  437. package/dist/locales/sk/common/job.js.map +1 -1
  438. package/dist/locales/sk/common/linkDto.js.map +1 -1
  439. package/dist/locales/sk/common/listItemDto.js.map +1 -1
  440. package/dist/locales/sk/common/log.js.map +1 -1
  441. package/dist/locales/sk/common/model.js.map +1 -1
  442. package/dist/locales/sk/common/permission.js.map +1 -1
  443. package/dist/locales/sk/common/permissionEditor.js.map +1 -1
  444. package/dist/locales/sk/common/permissionGroup.js.map +1 -1
  445. package/dist/locales/sk/common/routeSettings.js.map +1 -1
  446. package/dist/locales/sk/common/sortable.js.map +1 -1
  447. package/dist/locales/sk/common/subjectSelect.js.map +1 -1
  448. package/dist/locales/sk/common/system.js.map +1 -1
  449. package/dist/locales/sk/common/time.js.map +1 -1
  450. package/dist/locales/sk/common/userSystem.js.map +1 -1
  451. package/dist/locales/sk/error/apiDependencyExists.js.map +1 -1
  452. package/dist/locales/sk/error/apiForbiddenOperation.js.map +1 -1
  453. package/dist/locales/sk/error/apiTimedOut.js.map +1 -1
  454. package/dist/locales/sk/error/apiValidation.js.map +1 -1
  455. package/dist/locales/sk/error/jsValidation.js.map +1 -1
  456. package/dist/locales/sk/vuetify.js.map +1 -1
  457. package/package.json +15 -15
  458. package/src/e2e/env.d.mts +46 -0
  459. package/src/e2e/env.mjs +78 -0
  460. package/src/e2e/index.d.mts +3 -0
  461. package/src/e2e/index.mjs +2 -0
  462. package/src/e2e/routeWalk.mjs +2 -1
  463. package/src/e2e/routeWalkConfig.d.mts +16 -0
  464. package/src/e2e/routeWalkConfig.mjs +52 -0
  465. package/src/e2e/types.d.mts +5 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ImageMediaWidgetInner.vue_vue_type_script_setup_true_lang.js","names":["_useModel","imagePlaceholderPath","_openBlock","_createElementBlock","_Fragment","_createElementVNode","_normalizeClass","_normalizeStyle","_createTextVNode","_toDisplayString","_createCommentVNode","_createVNode","ACollabLockedByUser","_createBlock","_component_VBtn","_unref","_withCtx","AFileInputDialog","_mergeProps","_withModifiers","_component_VIcon","_component_VTooltip","_component_VMenu","_component_VCard","_component_VList","_component_VListItem","_component_VListItemTitle","_component_VImg","_component_VProgressCircular","AImageDropzone","_renderSlot","ImageDetailDialogMetadata","AAssetSelectMedia","AssetDetailDialog","UploadQueueDialogSingle","AFileDropzone_default","placeholder16x9_default","ImageDetailDialogMetadata_default","AssetDetailDialog_default","UploadQueueDialogSingle_default","ACollabLockedByUser_default","AFileInputDialog_default","AAssetSelectMedia_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","ImageMediaWidgetInner_vue_vue_type_script_setup_true_lang_default","CollabStatus","\"image\"","\"imageModifiers\"","\"media\"","\"mediaModifiers\"","__expose","__emit","props","__props","emit","imageModel","useModel","mediaModel","damConfigName","useDamConfigName","useCommonAdminCollabOptions","useCollabState","releaseFieldLock","ref","changeFieldData","acquireFieldLock","lockedByUserLocal","collabOptions","isDefined","useCollabField","releaseCollabFieldLock","changeCollabFieldData","acquireCollabFieldLock","watch","lockedByUser","newValue","addCollabFieldLockStatusListener","data","CollabFieldLockStatus","CollabFieldLockType","lockRequestPending","collabValue","lockedLocal","ownLockTurn","takeLockTurn","takeFieldLockTurn","lockTurnTakenSince","lastFieldLockTurn","acquireFieldLockLocal","again","releaseFieldLockLocal","releaseFieldLockWith","value","imageWidgetUploadConfig","inject","ImageWidgetUploadConfigKey","isUndefined","useI18n","useAlerts","imageOptions","useCommonAdminImageOptions","useImageActions","uploadQueuesStore","useUploadQueuesStore","useUploadQueueDialog","imageMediaWidgetStore","useImageMediaWidgetStore","storeToRefs","thisWidget","resImageMedia","clickMenuOpened","assetSelectDialog","metadataDialog","metadataDialogSaving","metadataDialogLoading","fileInputDialog","useImageDialogDamAuthors","isImageCreateUpdateAware","detail","shows","hideDropzoneText","computed","isNull","resolvedSrc","uploadQueue","imageMediaLoaded","ownInDialog","pickInDialog","loadingInDialog","answerTakenFor","disposed","opening","resImageReadAt","ownImageSaves","cancelSaveWait","dialogType","DamAssetType","actionEditMeta","type","heldId","id","othersSaves","isNumber","imageSavesOfOthersOver","thisOpening","over","withinWaitLimit","WAIT_RAN_OUT","showErrorT","heldAnew","readHeldAnew","anew","savedId","saved","imageSavedSince","reloadImage","toRaw","takeHeldAnew","showReadInForm","actionLibrary","useExtSystemIdForCached","collabFieldLockReallyLocked","LOCK_WAIT_CANCELLED","pendingLockWaits","wait","deletePending","holdImage","waitForFieldLockIsReallyAcquired","count","checkLock","resolve","dropInWait","onDrop","files","isLocked","config","thisDrop","anyWidgetDialogOpened","showWarningT","stopQueueLeftBehind","onCopyToLicence","onFileInput","useDamAcceptTypeAndSizeHelper","createdImageId","newImage","force","cloneDeep","widgetImageToDamImageUrl","newImageId","readAt","imageApi","imageClient","error","reloadMedia","newMedia","isMediaAware","damImageIdToDamImageUrl","reset","release","oldImage","oldImageId","oldMedia","created","assetSelectStore","useAssetSelectStore","useDamConfigState","assetPicksPending","onAssetSelectConfirm","thisPick","pickAsset","offerNoDamAuthors","description","source","selectedAsset","mediaDataFromDam","fetchAssetAsCmsMedia","damClient","endPointCmsAsset","assetFileIsVideoFile","mediaData","assetFileIsAudioFile","copyToLicenceEnabled","copyRes","copyToLicence","endPointImage","authorsToOffer","assetRes","fetchAsset","endPointAsset","customAssetSelectMetadataToImageMap","mapped","isString","fetchAuthorListByIds","endPointAuthor","getExtSystemByLicence","author","getDamConfigExtSystem","assetMetadataMayStillChange","offerDamAuthorsOf","image","createDamImage","forceReloadViewWithExpandMetadata","assetDetailStore","useAssetDetailStore","assetDialog","useCommonAdminCoreDamOptions","onEditAsset","extSystem","fetchAssetByFileId","assetFileId","shownUnder","loadAssetDetailExtSystem","onMetadataDialogClose","tryMediaConfirm","media","tryImageConfirm","holdConfirmForDetailAssetRead","detailDialogMetadataComponent","pressedOn","confirmIsOver","authorsSendIsOver","letGoHeld","letGoOnceSavedWithSource","authorsAsset","damAuthorsAsset","givenMeanwhile","authorsGivenMeanwhile","showErrorsDefault","showUnknownError","giveNamesToEmptySource","authorsRes","updateAssetAuthors","imageFieldsOf","res","noteImageSave","ownDialogOpen","shown","dialogOfAnotherPick","onMetadataDialogConfirm","onImageMediaDelete","imageId","onAssetUploadConfirm","items","expandedUploadDialog","onDropzoneClick","metadataConfirm","onOptionsButtonClick","uploadQueueDialog","preselectType","DamMediaType","oldValue","readonly","collabReconnecting","reconnecting","status","previous","openBlock","createElementBlock","Fragment","createElementVNode","normalizeClass","normalizeStyle","createTextVNode","toDisplayString","createCommentVNode","createVNode","createBlock","VBtn","unref","t","withCtx","replaceFromDamLabel","addFromDamLabel","_cache","$event","uploadAccept","uploadSizes","fileInputProps","mergeProps","withModifiers","VIcon","VTooltip","VMenu","VCard","VList","VListItem","VListItemTitle","VImg","VProgressCircular","renderSlot","_ctx","showSourceEnabled","sourceLabel","editAssetLabel","confirmWaits","pickDamAuthors","appendMedia","cachedExtSystemId","onAssetDetailClose"],"sources":["../../../../../src/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport AImageDropzone from '@/domains/ui/file/components/AFileDropzone.vue'\nimport type { DocId, IntegerId, IntegerIdNullable } from '@/shared/types/common'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/domains/dam/types/ImageAware'\nimport imagePlaceholderPath from '@/assets/image/placeholder16x9.svg'\nimport { useCommonAdminImageOptions } from '@/domains/dam/imageWidget/composables/commonAdminImageOptions'\nimport { useImageActions } from '@/domains/dam/imageWidget/composables/imageActions'\nimport { cloneDeep, isDefined, isNull, isNumber, isString, isUndefined } from '@/shared/utils/common'\nimport { useDamConfigState } from '@/domains/dam/config/composables/damConfigState'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport {\n type AssetDetailItemDto,\n DamAssetType,\n type DamAssetTypeType,\n type DamImageCopyToLicenceResponse,\n} from '@/domains/dam/types/Asset'\nimport { useDamAcceptTypeAndSizeHelper } from '@/domains/dam/config/composables/acceptTypeAndSizeHelper'\nimport { useUploadQueuesStore } from '@/domains/dam/uploadQueue/store/uploadQueuesStore'\nimport type { UploadQueueKey } from '@/domains/dam/types/UploadQueue'\nimport type { AssetSelectReturnData } from '@/domains/dam/types/AssetSelect'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/domains/dam/types/DamConfig'\nimport ImageDetailDialogMetadata from '@/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue'\nimport { computed, inject, onBeforeUnmount, ref, type ShallowRef, toRaw, watch } from 'vue'\nimport AssetDetailDialog from '@/domains/dam/assetDetail/components/AssetDetailDialog.vue'\nimport { useAssetDetailStore } from '@/domains/dam/assetDetail/store/assetDetailStore'\nimport { loadAssetDetailExtSystem } from '@/domains/dam/assetDetail/composables/assetDetailExtSystem'\nimport { storeToRefs } from 'pinia'\nimport {\n fetchAsset,\n fetchAssetAsCmsMedia,\n fetchAssetByFileId,\n showMetadataSaveError,\n updateAssetAuthors,\n} from '@/domains/dam/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport UploadQueueDialogSingle from '@/domains/dam/uploadQueue/components/UploadQueueDialogSingle.vue'\nimport { useUploadQueueDialog } from '@/domains/dam/uploadQueue/composables/useUploadQueueDialog'\nimport { fetchAuthorListByIds } from '@/domains/dam/author/api/authorApi'\nimport { useI18n } from 'vue-i18n'\nimport type { VBtn } from 'vuetify/components'\nimport { useExtSystemIdForCached } from '@/domains/dam/composables/extSystemIdForCached'\nimport { useAssetSelectStore } from '@/domains/dam/assetSelect/store/assetSelectStore'\nimport {\n type CollabComponentConfig,\n type CollabFieldData,\n type CollabFieldLockOptions,\n CollabStatus,\n type CollabStatusType,\n} from '@/domains/collab/types/Collab'\nimport { useCommonAdminCollabOptions } from '@/domains/collab/composables/commonAdminCollabOptions'\nimport { useCollabState } from '@/domains/collab/composables/collabState'\nimport { useCollabField } from '@/domains/collab/composables/collabField'\nimport ACollabLockedByUser from '@/domains/collab/components/ACollabLockedByUser.vue'\nimport AFileInputDialog from '@/domains/ui/file/components/AFileInputDialog.vue'\nimport {\n CollabFieldLockStatus,\n type CollabFieldLockStatusPayload,\n CollabFieldLockType,\n} from '@/domains/collab/composables/collabEventBus'\nimport { ImageWidgetUploadConfigKey } from '@/domains/dam/imageWidget/utils/imageWidgetInkectionKeys'\nimport AAssetSelectMedia from '@/domains/dam/assetSelect/components/AAssetSelectMedia.vue'\nimport {\n isImageCreateUpdateAware,\n isMediaAware,\n useImageMediaWidgetStore,\n} from '@/domains/dam/imageWidget/store/imageMediaWidgetStore'\nimport {\n type DamMediaFromDam,\n DamMediaType,\n type DamMediaTypeType,\n type ImageMediaCollabValue,\n type MediaAware,\n} from '@/domains/dam/types/MediaAware'\nimport { assetFileIsAudioFile, assetFileIsVideoFile } from '@/domains/dam/types/AssetFile'\nimport { copyToLicence } from '@/domains/dam/api/damImageApi'\nimport { createDamImage, imageFieldsOf } from '@/domains/dam/imageWidget/utils/damImage'\nimport { assetMetadataMayStillChange } from '@/domains/dam/assetDetail/utils/assetMetadataMayStillChange'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport {\n giveNamesToEmptySource,\n type HeldAssetAnew,\n useImageDialogDamAuthors,\n} from '@/domains/dam/imageWidget/composables/imageDialogDamAuthors'\nimport { lastFieldLockTurn, takeFieldLockTurn } from '@/domains/dam/imageWidget/utils/fieldLockTurns'\nimport {\n holdImage,\n imageSavedSince,\n imageSavesOfOthersOver,\n noteImageSave,\n} from '@/domains/dam/imageWidget/utils/imageSaves'\nimport { WAIT_RAN_OUT, withinWaitLimit } from '@/domains/dam/imageWidget/utils/waitLimit'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n uploadLicence: IntegerId\n selectLicences: IntegerId[]\n initialImage?: ImageAware | undefined // If given, the image data is not fetched.\n configName?: string\n collab?: CollabComponentConfig\n collabStatus?: CollabStatusType\n label?: string | undefined\n required?: boolean\n readonly?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n expandMetadata?: boolean // Only one per page at a time, for use in dialogs.\n disableOnClickMenu?: boolean\n width?: number | undefined\n maxWidth?: number | undefined\n height?: number | undefined\n callDeleteApiOnRemove?: boolean\n damWidth?: undefined | number\n damHeight?: undefined | number\n }>(),\n {\n configName: undefined,\n collab: undefined,\n collabStatus: CollabStatus.Inactive,\n label: undefined,\n required: false,\n initialImage: undefined,\n initialMedia: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n expandMetadata: false,\n disableOnClickMenu: false,\n width: undefined,\n maxWidth: undefined,\n height: undefined,\n callDeleteApiOnRemove: false,\n damWidth: undefined,\n damHeight: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'afterMetadataSaveSuccess'): void\n}>()\n\nconst imageModel = defineModel<IntegerIdNullable>('image', { required: true })\nconst mediaModel = defineModel<MediaAware | null>('media', { required: true })\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\nconst { collabOptions } = useCommonAdminCollabOptions()\nconst { collabReconnecting } = useCollabState()\n\nconst releaseFieldLock = ref((_data: CollabFieldData, _options?: Partial<CollabFieldLockOptions>) => {})\nconst changeFieldData = ref((_data: CollabFieldData) => {})\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst acquireFieldLock = ref((options?: Partial<CollabFieldLockOptions>) => {})\nconst lockedByUserLocal = ref<IntegerIdNullable>(null)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nif (collabOptions.value.enabled && isDefined(props.collab)) {\n const {\n releaseCollabFieldLock,\n acquireCollabFieldLock,\n changeCollabFieldData,\n addCollabFieldLockStatusListener,\n lockedByUser,\n } = useCollabField(props.collab.room, props.collab.field)\n releaseFieldLock.value = releaseCollabFieldLock\n changeFieldData.value = changeCollabFieldData\n acquireFieldLock.value = acquireCollabFieldLock\n watch(\n lockedByUser,\n (newValue) => {\n lockedByUserLocal.value = newValue\n },\n { immediate: true }\n )\n addCollabFieldLockStatusListener((data: CollabFieldLockStatusPayload) => {\n if (data.status === CollabFieldLockStatus.Success && data.type === CollabFieldLockType.Acquire) {\n lockRequestPending.value = false\n collabFieldLockReallyLocked.value = true\n } else if (data.status === CollabFieldLockStatus.Failure && data.type === CollabFieldLockType.Acquire) {\n lockRequestPending.value = false\n collabFieldLockReallyLocked.value = false\n } else if (lockRequestPending.value) {\n // A release answer sent before a pending request says nothing about that request. Only its own answer decides.\n // Reading a refused release as the lock held let a drop upload before its request was answered.\n return\n } else if (data.status === CollabFieldLockStatus.Success && data.type === CollabFieldLockType.Release) {\n collabFieldLockReallyLocked.value = false\n } else if (data.status === CollabFieldLockStatus.Failure && data.type === CollabFieldLockType.Release) {\n collabFieldLockReallyLocked.value = true\n }\n })\n}\n// Other editors need both the image and the media.\n// A `v-model` assignment reaches the models only after the parent\n// renders, so paths that just assigned send the assigned value directly.\nconst collabValue = (): ImageMediaCollabValue => ({ image: imageModel.value, media: mediaModel.value })\nconst lockedLocal = ref(false)\n// Lock turn this widget took last, by request or release.\n// A widget of the same field drawn in place of this one may have taken a turn since.\nlet ownLockTurn = 0\nconst takeLockTurn = () => {\n if (isDefined(props.collab)) ownLockTurn = takeFieldLockTurn(props.collab.room, props.collab.field)\n}\nconst lockTurnTakenSince = () =>\n isDefined(props.collab) && lastFieldLockTurn(props.collab.room, props.collab.field) !== ownLockTurn\n// Requested once per lock. A drop asks again for an unconfirmed\n// lock, otherwise one refusal left every later drop waiting forever.\n// A refusal still keeps the lock for release: a timed-out request\n// answers the same way and the server may have granted it.\n// Never requested while one is pending: a second answer could arrive after the\n// first, and a request from the menu-closing click raced its release on the server.\nconst lockRequestPending = ref(false)\nconst acquireFieldLockLocal = (again = false) => {\n if (props.collabStatus === CollabStatus.Inactive) return\n if (lockedLocal.value === true && (!again || lockRequestPending.value || collabFieldLockReallyLocked.value)) return\n // An earlier answer says nothing about this lock. Waiters wait for this answer.\n collabFieldLockReallyLocked.value = false\n lockRequestPending.value = true\n acquireFieldLock.value()\n takeLockTurn()\n lockedLocal.value = true\n}\n// A lock taken while the room was active is released in an inactive room too.\n// The room turns inactive when the other editor leaves, and the server still holds the lock for whoever returns.\nconst releaseFieldLockLocal = () => {\n if (lockedLocal.value === false) return\n releaseFieldLock.value(collabValue())\n takeLockTurn()\n lockedLocal.value = false\n}\n// One release per lock: the server refuses a second one, and the refusal reads as the lock still held.\n// An inactive room still gets the value for editors who join, lock or not.\nconst releaseFieldLockWith = (value: ImageMediaCollabValue) => {\n if (lockedLocal.value === false && props.collabStatus !== CollabStatus.Inactive) return\n releaseFieldLock.value(value)\n takeLockTurn()\n lockedLocal.value = false\n}\n\nconst imageWidgetUploadConfig = inject<ShallowRef<DamConfigLicenceExtSystemReturnType | undefined> | undefined>(\n ImageWidgetUploadConfigKey,\n undefined\n)\n\nif (isUndefined(imageWidgetUploadConfig) || isUndefined(imageWidgetUploadConfig.value)) {\n throw new Error(\"Fatal error, parent component doesn't provide necessary config ext system config.\")\n}\n\nconst { t } = useI18n()\n\nconst { showErrorsDefault, showErrorT, showWarningT, showUnknownError } = useAlerts()\n\nconst imageOptions = useCommonAdminImageOptions(damConfigName)\nconst { imageClient, imageApi } = imageOptions\nconst { widgetImageToDamImageUrl, damImageIdToDamImageUrl } = useImageActions(imageOptions)\nconst uploadQueuesStore = useUploadQueuesStore()\nconst { uploadQueueDialog, stopQueueLeftBehind } = useUploadQueueDialog()\n// Must run before the immediate watcher below, which writes the detail during setup with `expandMetadata`.\n// Keeps a form shown by another widget's open dialog: a late-drawn widget used to empty it.\nconst imageMediaWidgetStore = useImageMediaWidgetStore()\nimageMediaWidgetStore.resetUnlessShown()\nconst { detail } = storeToRefs(imageMediaWidgetStore)\nconst thisWidget = Symbol('image media widget')\n\nconst resImageMedia = ref<null | ImageCreateUpdateAware | MediaAware>(null)\nconst clickMenuOpened = ref(false)\nconst assetSelectDialog = ref(false)\nconst metadataDialog = ref(false)\nconst metadataDialogSaving = ref(false)\nconst metadataDialogLoading = ref(false)\nconst fileInputDialog = ref(false)\n\n// DAM authors offered in the image dialog come from an asset this widget read\n// itself for that image, also for the inline form with `expandMetadata`.\nconst {\n damAuthorsAsset,\n offerDamAuthorsOf,\n offerNoDamAuthors,\n pickDamAuthors,\n onAssetDetailClose,\n holdConfirmForDetailAssetRead,\n readHeldAnew,\n takeHeldAnew,\n letGoOnceSavedWithSource,\n authorsGivenMeanwhile,\n confirmWaits,\n} = useImageDialogDamAuthors(\n damConfigName,\n () =>\n (metadataDialog.value || props.expandMetadata) && isImageCreateUpdateAware(detail.value) ? detail.value : null,\n () => props.readonly\n)\n\n// Marks the store as shown by this widget while its dialog or inline form is open, so no other widget empties it.\nwatch(\n () => metadataDialog.value || props.expandMetadata,\n (shows) => imageMediaWidgetStore.setShownBy(thisWidget, shows),\n { immediate: true, flush: 'sync' }\n)\n\nconst hideDropzoneText = computed(() => {\n return !isNull(imageModel.value) || !isNull(mediaModel.value)\n})\n\nconst resolvedSrc = ref('')\n\nconst uploadQueue = computed(() => {\n return uploadQueuesStore.getQueue(props.queueKey)\n})\n\nconst imageMediaLoaded = computed(() => {\n return !isNull(resImageMedia.value)\n})\n\n// Copy of the widget's image or media that \"edit metadata\" put into the dialog.\nlet ownInDialog: typeof detail.value = null\n// What this widget's last pick or upload put into the dialog.\n// The dialog store is page-wide, so it may show another widget's dialog opened over this one.\nlet pickInDialog: typeof detail.value = null\n// What the dialog shows loading for: a pick being read, or \"edit metadata\"\n// waiting for another widget's save or for a read of the held asset.\n// The answer is applied only while the dialog still loads for it,\n// not after close or once the page-wide store shows another dialog.\n// Otherwise a pick answer replaced another widget's dialog form and lost the typed\n// input. The loading dialog then closes, since its confirm would save that form here.\nlet loadingInDialog: symbol | null = null\nconst answerTakenFor = (opening: symbol) => {\n if (disposed || loadingInDialog !== opening) return false\n if (isNull(detail.value)) return true\n loadingInDialog = null\n metadataDialogLoading.value = false\n metadataDialog.value = false\n return false\n}\n// Number of answered page saves of the held image at the time the widget read it.\nlet resImageReadAt = 0\n// Marks of this widget's image saves in flight.\nconst ownImageSaves = new Set<symbol>()\n// Cancels the \"edit metadata\" wait for another widget's save. Called when the dialog closes.\nlet cancelSaveWait: (() => void) | null = null\n// Type the dialog is opened for: held image or medium, picked asset, or uploaded image.\n// Sets the title from the start, so it stays the same while loading, waiting and saving.\nconst dialogType = ref<DamAssetTypeType>(DamAssetType.Image)\nconst actionEditMeta = async () => {\n dialogType.value = type.value ?? DamAssetType.Image\n const heldId = () => (isImageCreateUpdateAware(resImageMedia.value) ? resImageMedia.value.id : undefined)\n // Another widget is saving the image, for example the one this\n // widget replaced. The dialog shows loading until that save ends.\n const id = heldId()\n const othersSaves = isNumber(id) ? imageSavesOfOthersOver(damConfigName, id, ownImageSaves) : null\n if (othersSaves) {\n const thisOpening = (loadingInDialog = Symbol('edit'))\n imageMediaWidgetStore.setDetail(null)\n metadataDialogLoading.value = true\n metadataDialog.value = true\n cancelSaveWait = othersSaves.cancel\n const over = await withinWaitLimit(othersSaves.over, 1, damConfigName)\n cancelSaveWait = null\n if (!answerTakenFor(thisOpening)) return\n loadingInDialog = null\n metadataDialogLoading.value = false\n // The other save timed out: the dialog closes and the user is told. Before, it loaded until the editor closed it.\n // Showing the earlier read would let the confirm overwrite what that save may still write.\n if (over === WAIT_RAN_OUT) {\n othersSaves.cancel()\n metadataDialog.value = false\n showErrorT('error.apiTimedOut.message')\n return\n }\n }\n // The held asset was picked without authors: the dialog loads while it is read\n // again, and the result goes into the dialog with the image. Never for a medium.\n const heldAnew = readHeldAnew(\n isImageCreateUpdateAware(resImageMedia.value) ? resImageMedia.value.dam.damId : undefined\n )\n let anew: HeldAssetAnew | null = null\n if (heldAnew) {\n const thisOpening = (loadingInDialog = Symbol('edit'))\n imageMediaWidgetStore.setDetail(null)\n metadataDialogLoading.value = true\n metadataDialog.value = true\n anew = await heldAnew\n if (!answerTakenFor(thisOpening)) return\n loadingInDialog = null\n metadataDialogLoading.value = false\n }\n // Another widget saved the image after this one read it: take the image as saved.\n // Otherwise the dialog offered stale texts and its confirm overwrote the saved ones.\n const savedId = heldId()\n const saved = isNumber(savedId) ? imageSavedSince(damConfigName, savedId, resImageReadAt) : null\n if (saved) void reloadImage(saved, null, true)\n imageMediaWidgetStore.setDetail(toRaw(resImageMedia.value))\n takeHeldAnew(anew, isImageCreateUpdateAware(detail.value) ? detail.value : null)\n ownInDialog = detail.value\n metadataDialog.value = true\n}\n\n// With `expandMetadata` the form is inline, with no \"edit metadata\" opening to\n// wait for another widget's save or take its result, so the form does both.\n// Otherwise it showed texts read before that save, and the host's confirm overwrote the saved ones.\n// When the wait runs out the form shows the read data and the user is told the request timed out.\nconst showReadInForm = async () => {\n const heldId = () => (isImageCreateUpdateAware(resImageMedia.value) ? resImageMedia.value.id : undefined)\n const id = heldId()\n const othersSaves = isNumber(id) ? imageSavesOfOthersOver(damConfigName, id, ownImageSaves) : null\n if (othersSaves) {\n const thisOpening = (loadingInDialog = Symbol('edit'))\n imageMediaWidgetStore.setDetail(null)\n metadataDialogLoading.value = true\n cancelSaveWait = othersSaves.cancel\n const over = await withinWaitLimit(othersSaves.over, 1, damConfigName)\n cancelSaveWait = null\n if (!answerTakenFor(thisOpening)) return\n loadingInDialog = null\n metadataDialogLoading.value = false\n if (over === WAIT_RAN_OUT) {\n othersSaves.cancel()\n showErrorT('error.apiTimedOut.message')\n }\n if (heldId() !== id) return\n }\n const saved = isNumber(id) ? imageSavedSince(damConfigName, id, resImageReadAt) : null\n if (saved) return void reloadImage(saved, null, true)\n imageMediaWidgetStore.setDetail(toRaw(resImageMedia.value))\n}\n\nconst actionLibrary = () => {\n assetSelectDialog.value = true\n}\n\nconst { cachedExtSystemId } = useExtSystemIdForCached(damConfigName)\n\n// Updated only when the socket confirms lock success or failure. Needed for file drops.\nconst collabFieldLockReallyLocked = ref(false)\n\n// Cancelling must settle the promise, not only clear the timer, because `onDrop` awaits it.\n// A Set because overlapping drops each have their own wait.\nconst LOCK_WAIT_CANCELLED = Symbol('lock wait cancelled')\ntype PendingLockWait = { timer: ReturnType<typeof setTimeout>; reject: (reason: unknown) => void }\nconst pendingLockWaits = new Set<PendingLockWait>()\nlet disposed = false\n\nonBeforeUnmount(() => {\n disposed = true\n pendingLockWaits.forEach((wait) => {\n clearTimeout(wait.timer)\n wait.reject(LOCK_WAIT_CANCELLED)\n })\n pendingLockWaits.clear()\n // Whatever held the field lock goes with the widget. The server keeps a lock until\n // release or until the editor leaves, so the field stayed locked for others.\n // Released with the current value, unless a save or delete in flight releases\n // it at its end, or the replacing widget has taken a lock turn since.\n if (!metadataDialogSaving.value && !deletePending.value && !lockTurnTakenSince()) releaseFieldLockLocal()\n imageMediaWidgetStore.setShownBy(thisWidget, false)\n holdImage(damConfigName, thisWidget, null)\n cancelSaveWait?.()\n})\n\nconst waitForFieldLockIsReallyAcquired = async () => {\n if (!collabOptions.value.enabled || isUndefined(props.collab) || props.collabStatus === CollabStatus.Inactive) {\n return Promise.resolve(true)\n }\n\n let count = 0\n\n const checkLock: () => Promise<Awaited<boolean>> = () => {\n if (disposed) {\n return Promise.reject(LOCK_WAIT_CANCELLED)\n }\n if (collabFieldLockReallyLocked.value) {\n return Promise.resolve(true)\n }\n\n count++\n if (count < 50) {\n return new Promise((resolve, reject) => {\n const wait: PendingLockWait = {\n timer: setTimeout(() => {\n pendingLockWaits.delete(wait)\n resolve(checkLock())\n }, 100),\n reject,\n }\n pendingLockWaits.add(wait)\n })\n }\n\n return Promise.reject(false)\n }\n\n return checkLock()\n}\n\n// The single drop uploaded once the field lock arrives. The upload\n// dialog shows one file but saves all it gets, so only one is kept.\nlet dropInWait: symbol | null = null\n\nconst onDrop = async (files: File[]) => {\n if (props.readonly) return\n // The dropzone rejected every file and reported it, so no lock is requested.\n if (files.length === 0) return\n // An earlier drop's lock request is still pending, so this drop is ignored.\n if (!isNull(dropInWait) && lockRequestPending.value) return\n // Same as a click on the dropzone: another editor holds the field.\n if (isLocked.value) {\n showErrorT('common.damImage.error.unableToLock')\n return\n }\n acquireFieldLockLocal(true)\n const config = imageWidgetUploadConfig.value!\n // After a refusal this drop asks again and replaces the one still waiting.\n const thisDrop = Symbol('drop')\n dropInWait = thisDrop\n try {\n await waitForFieldLockIsReallyAcquired()\n // The lock can resolve after the widget is gone; uploading into it is worse than dropping.\n if (disposed) return\n if (dropInWait !== thisDrop) return\n // Turned read-only while waiting for the lock: release it and upload nothing.\n if (props.readonly) {\n if (pendingLockWaits.size === 0 && !clickMenuOpened.value && !anyWidgetDialogOpened.value) releaseFieldLockLocal()\n return\n }\n cachedExtSystemId.value = config.extSystem\n // The widget holds one image and the upload dialog shows one file,\n // so only the first dropped file is uploaded and the user is warned.\n // Otherwise the extra files were uploaded unseen and left without an image.\n if (files.length > 1) showWarningT('common.damImage.upload.onlyOneFile')\n stopQueueLeftBehind(props.queueKey)\n uploadQueuesStore.addByFiles(props.queueKey, config.extSystem, config.licence, files.slice(0, 1), damConfigName)\n uploadQueueDialog.value = props.queueKey\n } catch (e) {\n if (disposed || e === LOCK_WAIT_CANCELLED) return\n // A timed-out request may have been granted, and nothing else would release it.\n // Released only when nothing else waits for or holds the lock. A refused release reads as the lock\n // held, so another waiting drop uploaded without its lock, or a menu opened meanwhile lost its lock.\n if (pendingLockWaits.size === 0 && !clickMenuOpened.value && !anyWidgetDialogOpened.value) releaseFieldLockLocal()\n showErrorT('common.damImage.error.unableToLock')\n } finally {\n if (dropInWait === thisDrop) dropInWait = null\n }\n}\n\nconst onCopyToLicence = (data: DamImageCopyToLicenceResponse) => {\n if (props.readonly) return\n if (!data[0]) return\n const config = imageWidgetUploadConfig.value!\n cachedExtSystemId.value = config.extSystem\n stopQueueLeftBehind(props.queueKey)\n if (data[0].result === 'copy') {\n uploadQueuesStore.addByCopyToLicence(\n props.queueKey,\n config.extSystem,\n config.licence,\n [data[0].targetAsset],\n damConfigName\n )\n } else if (data[0].result === 'exists') {\n uploadQueuesStore.addByCopyToLicence(\n props.queueKey,\n config.extSystem,\n config.licence,\n [data[0].targetAsset],\n damConfigName\n )\n uploadQueuesStore.queueItemDuplicate(data[0].targetAsset, data[0].targetMainFile, DamAssetType.Image, damConfigName)\n } else {\n showErrorT('common.damImage.queueItem.errorUnableToCopyToLicence')\n return\n }\n uploadQueueDialog.value = props.queueKey\n}\n\nconst onFileInput = (files: File[]) => {\n if (props.readonly) return\n // The input rejected every file and reported it. A dialog over a queue without a row would only show loading.\n if (files.length === 0) return\n const config = imageWidgetUploadConfig.value!\n cachedExtSystemId.value = config.extSystem\n stopQueueLeftBehind(props.queueKey)\n uploadQueuesStore.addByFiles(props.queueKey, config.extSystem, config.licence, files, damConfigName)\n uploadQueueDialog.value = props.queueKey\n}\n\nconst { uploadSizes, uploadAccept } = useDamAcceptTypeAndSizeHelper(\n DamAssetType.Image,\n imageWidgetUploadConfig.value.extSystemConfig\n)\n\n// Id of the image this widget just created. The model changes to it, and the widget shows the create response.\n// Reading it again made the preview fall back to the placeholder, and a failed read\n// showed an error after a successful save. Any other id change triggers a read.\nlet createdImageId: IntegerIdNullable = null\n\nconst reloadImage = async (\n newImage: ImageCreateUpdateAware | undefined,\n newImageId: IntegerIdNullable,\n force = false\n) => {\n resolvedSrc.value = imagePlaceholderPath\n if ((newImage && isNull(resImageMedia.value)) || (newImage && force)) {\n resImageMedia.value = cloneDeep(newImage)\n resImageReadAt = holdImage(damConfigName, thisWidget, newImage.id ?? null)\n if (isImageCreateUpdateAware(resImageMedia.value)) {\n if (isNumber(props.damWidth) && isNumber(props.damHeight)) {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImageMedia.value), props.damWidth, props.damHeight)\n } else {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImageMedia.value))\n }\n if (props.expandMetadata) {\n imageMediaWidgetStore.setDetail(toRaw(resImageMedia.value))\n }\n }\n return\n }\n if (newImageId) {\n // Counted when the read is sent: a save answered later may have taken effect after the read.\n const readAt = holdImage(damConfigName, thisWidget, newImageId)\n try {\n resImageMedia.value = await imageApi.fetchImage(imageClient, newImageId)\n resImageReadAt = readAt\n } catch (error) {\n showErrorsDefault(error)\n }\n // The widget is gone. With `expandMetadata` it would write its image into\n // the page-wide dialog store, which now shows the next widget's image.\n if (disposed) return\n if (isImageCreateUpdateAware(resImageMedia.value)) {\n if (isNumber(props.damWidth) && isNumber(props.damHeight)) {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImageMedia.value), props.damWidth, props.damHeight)\n } else {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImageMedia.value))\n }\n if (props.expandMetadata) void showReadInForm()\n }\n return\n }\n resImageMedia.value = null\n holdImage(damConfigName, thisWidget, null)\n}\n\nconst reloadMedia = (newMedia: MediaAware | null) => {\n resolvedSrc.value = imagePlaceholderPath\n holdImage(damConfigName, thisWidget, null)\n if (newMedia) {\n resImageMedia.value = cloneDeep(newMedia)\n if (isMediaAware(resImageMedia.value) && !isNull(resImageMedia.value.damMedia.imageFileId)) {\n if (isNumber(props.damWidth) && isNumber(props.damHeight)) {\n resolvedSrc.value = damImageIdToDamImageUrl(\n resImageMedia.value.damMedia.imageFileId,\n props.damWidth,\n props.damHeight\n )\n } else {\n resolvedSrc.value = damImageIdToDamImageUrl(resImageMedia.value.damMedia.imageFileId)\n }\n if (props.expandMetadata) {\n imageMediaWidgetStore.setDetail(toRaw(resImageMedia.value))\n }\n }\n return\n }\n resImageMedia.value = null\n}\n\n// `release` false: an open menu or dialog holds the lock and releases it on close or confirm.\n// Otherwise the editor holds no lock, and the value reaches the buffer only here.\nconst reset = (release = true) => {\n resolvedSrc.value = imagePlaceholderPath\n resImageMedia.value = null\n holdImage(damConfigName, thisWidget, null)\n imageModel.value = null\n mediaModel.value = null\n // Keeps the form shown by another widget's open dialog.\n imageMediaWidgetStore.resetUnlessShown(thisWidget)\n if (release || props.collabStatus === CollabStatus.Inactive) releaseFieldLockWith({ image: null, media: null })\n}\n\nwatch(\n [() => props.initialImage, imageModel, mediaModel],\n async ([newImage, newImageId, newMedia], [oldImage, oldImageId, oldMedia]) => {\n // Cleared on every run, also one that ends with media. Otherwise a later change to that id would not be read.\n const created = createdImageId\n createdImageId = null\n if (!isNull(newMedia) && JSON.stringify(newMedia) !== JSON.stringify(oldMedia)) {\n reloadMedia(newMedia)\n return\n }\n\n if (newImage !== oldImage || newImageId !== oldImageId) {\n if (!isNull(created) && newImageId === created && newImage === oldImage) return\n await reloadImage(newImage, newImageId)\n return\n }\n\n if (isNull(newMedia) && !isNull(oldMedia)) {\n reloadMedia(null)\n }\n },\n { immediate: true }\n)\n\nconst assetSelectStore = useAssetSelectStore()\nconst { getDamConfigExtSystem } = useDamConfigState(undefined, damConfigName)\n\n// The picker closes as it answers, and the next dialog opens only after the asset is fetched or copied.\n// Until then the pick counts as an open dialog, or the close watcher released the lock with the old value.\n// Counts every pending pick: one whose dialog was closed released the lock under a later pick.\nconst assetPicksPending = ref(0)\nconst onAssetSelectConfirm = async (data: AssetSelectReturnData) => {\n if (props.readonly) return\n const thisPick = (loadingInDialog = Symbol('pick'))\n assetPicksPending.value++\n try {\n await pickAsset(data, thisPick)\n } finally {\n assetPicksPending.value--\n // A pick that ended early (no main file, media not loaded) left the\n // dialog loading, so the next upload or edit showed only a spinner.\n // Cleared unless the dialog now loads for something opened since.\n if (loadingInDialog === thisPick) {\n loadingInDialog = null\n metadataDialogLoading.value = false\n }\n }\n}\n\nconst pickAsset = async (data: AssetSelectReturnData, thisPick: symbol) => {\n if (data.type !== 'asset' || !data.value[0]) return\n metadataDialogLoading.value = true\n imageMediaWidgetStore.setDetail(null)\n offerNoDamAuthors()\n let description = ''\n let source = ''\n const selectedAsset = data.value[0]\n if (!selectedAsset.mainFile) return\n dialogType.value = selectedAsset.attributes.assetType\n // The asset's role is known only after it is read. The dialog shows loading\n // until then and during the copy into the upload licence, like the image widget.\n // Otherwise nothing was shown, and this dialog covered another widget's dialog opened meanwhile.\n metadataDialog.value = true\n let mediaDataFromDam: DamMediaFromDam | null = null\n try {\n mediaDataFromDam = await fetchAssetAsCmsMedia(damClient, selectedAsset.id, endPointCmsAsset)\n } catch (e) {\n showErrorsDefault(e)\n }\n // Nothing is written to the page-wide dialog store if the widget is gone or the dialog no longer loads for this pick.\n if (!answerTakenFor(thisPick)) return\n if (!mediaDataFromDam) return void (metadataDialog.value = false)\n if (selectedAsset.attributes.assetType === DamAssetType.Video && assetFileIsVideoFile(selectedAsset.mainFile)) {\n metadataDialog.value = true\n const mediaData: MediaAware = {\n extService: 'damVideo',\n damMedia: {\n imageFileId: selectedAsset.mainFile.imagePreview?.imageFile || null,\n assetId: selectedAsset.id,\n licenceId: selectedAsset.licence,\n assetType: DamAssetType.Video,\n title: mediaDataFromDam.title,\n description: mediaDataFromDam.description,\n seriesName: mediaDataFromDam.seriesName,\n authorNames: mediaDataFromDam.authorNames,\n publishedAt: mediaDataFromDam.publishedAt,\n duration: mediaDataFromDam.duration,\n mediaUrl: mediaDataFromDam.mediaUrl,\n playable: mediaDataFromDam.playable,\n syncedWithDam: true,\n episodeName: mediaDataFromDam.episodeName,\n episodeNumber: mediaDataFromDam.episodeNumber,\n },\n }\n imageMediaWidgetStore.setDetail(mediaData)\n } else if (\n selectedAsset.attributes.assetType === DamAssetType.Audio &&\n selectedAsset.podcasts.length > 0 &&\n assetFileIsAudioFile(selectedAsset.mainFile)\n ) {\n metadataDialog.value = true\n const mediaData: MediaAware = {\n extService: 'damPodcast',\n damMedia: {\n imageFileId: selectedAsset.mainFile.imagePreview?.imageFile || null,\n assetId: selectedAsset.id,\n licenceId: selectedAsset.licence,\n assetType: DamAssetType.Audio,\n title: mediaDataFromDam.title,\n description: mediaDataFromDam.description,\n seriesName: mediaDataFromDam.seriesName,\n authorNames: mediaDataFromDam.authorNames,\n publishedAt: mediaDataFromDam.publishedAt,\n duration: mediaDataFromDam.duration,\n mediaUrl: mediaDataFromDam.mediaUrl,\n playable: mediaDataFromDam.playable,\n syncedWithDam: true,\n episodeName: mediaDataFromDam.episodeName,\n episodeNumber: mediaDataFromDam.episodeNumber,\n },\n }\n imageMediaWidgetStore.setDetail(mediaData)\n } else if (selectedAsset.attributes.assetType === DamAssetType.Image) {\n // An asset already in the upload licence is used as is.\n if (\n copyToLicenceEnabled !== false &&\n !isUndefined(data.copyToLicence) &&\n selectedAsset.licence !== data.copyToLicence\n ) {\n let copyRes: DamImageCopyToLicenceResponse | null = null\n try {\n copyRes = await copyToLicence(damClient, endPointImage, [\n { asset: data.value[0].id, targetAssetLicence: data.copyToLicence },\n ])\n } catch (e) {\n showErrorsDefault(e)\n }\n // A gone widget, or a dialog no longer loading for this pick, opens no upload dialog.\n // Otherwise the copy continued in the replacing widget's upload dialog, which requested the field lock only then.\n if (!answerTakenFor(thisPick)) return\n // The upload dialog shows the copy and replaces the image dialog.\n metadataDialogLoading.value = false\n metadataDialog.value = false\n if (copyRes) onCopyToLicence(copyRes)\n return\n }\n metadataDialog.value = true\n // Authors are offered only if the pick still owns the dialog. Otherwise\n // a left pick's read offered its authors in a later pick's dialog.\n let authorsToOffer: AssetDetailItemDto | null = null\n try {\n const assetRes = await fetchAsset(damClient, endPointAsset, selectedAsset.id)\n // Like the image widget: if the application has its own mapping, it builds the texts from the asset.\n if (customAssetSelectMetadataToImageMap) {\n const mapped = customAssetSelectMetadataToImageMap(assetRes)\n description = mapped.description\n source = mapped.source\n } else {\n if (isString(assetRes.metadata.customData?.description)) {\n description = assetRes.metadata.customData.description.trim()\n }\n if (assetRes.authors.length > 0) {\n // Under the ext system of the asset's licence, like all DAM author names the\n // widgets write. Falls back to the picker's when the licence does not resolve.\n const authorsRes = await fetchAuthorListByIds(\n damClient,\n endPointAuthor,\n (await getExtSystemByLicence(assetRes.licence)) ?? assetSelectStore.requireSelectedSelectConfig().extSystem,\n assetRes.authors\n )\n source = authorsRes.map((author) => author.name).join(', ')\n } else if (assetRes.authors.length === 0) {\n const configExtSystem = getDamConfigExtSystem(imageWidgetUploadConfig.value!.extSystem)\n // Not while the server may still fill metadata from the file: saving\n // authors marks the asset described, and the server then fills nothing.\n if (configExtSystem?.[DamAssetType.Image]?.authors?.enabled && !assetMetadataMayStillChange(assetRes)) {\n authorsToOffer = assetRes\n }\n }\n }\n } catch (e) {\n showErrorsDefault(e)\n }\n if (!answerTakenFor(thisPick)) return\n if (authorsToOffer) offerDamAuthorsOf(authorsToOffer, selectedAsset.mainFile.id)\n const image = createDamImage(\n {\n fileId: selectedAsset.mainFile.id,\n licenceId: selectedAsset.licence,\n internal: selectedAsset.mainFileInternal,\n },\n { description, source },\n { position: 1, id: isNull(imageModel.value) ? undefined : imageModel.value }\n )\n imageMediaWidgetStore.setDetail(image)\n pickInDialog = detail.value\n } else {\n // Not a kind the widget accepts (audio not in a podcast, video without a video file): nothing to show.\n metadataDialog.value = false\n }\n metadataDialogLoading.value = false\n if (props.expandMetadata) {\n forceReloadViewWithExpandMetadata()\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { dialog: assetDialog } = storeToRefs(assetDetailStore)\nconst {\n damClient,\n endPointAsset,\n endPointImage,\n endPointAuthor,\n endPointCmsAsset,\n copyToLicenceEnabled,\n showSourceEnabled,\n sourceLabel,\n editAssetLabel,\n addFromDamLabel,\n replaceFromDamLabel,\n customAssetSelectMetadataToImageMap,\n} = useCommonAdminCoreDamOptions(damConfigName)\n\nconst { getExtSystemByLicence } = useDamConfigState(damClient, damConfigName)\n\nconst onEditAsset = async (assetFileId: DocId) => {\n let extSystem: IntegerId | null = null\n try {\n await assetDetailStore.open(\n props.queueKey,\n async () => {\n const assetRes = await fetchAssetByFileId(damClient, endPointAsset, assetFileId)\n // Falls back to the ext system of the widget's upload licence,\n // loaded by its root, when the licence cannot be resolved.\n const shownUnder = (await getExtSystemByLicence(assetRes.licence)) ?? imageWidgetUploadConfig.value!.extSystem\n // Must load before the detail shows the asset: it reads the ext\n // system configuration while rendering and threw without it.\n await loadAssetDetailExtSystem(damClient, shownUnder, assetRes.attributes.assetType, damConfigName)\n extSystem = shownUnder\n return assetRes\n },\n // Only for the asset the detail still shows: a stale answer must not change the ext system used for name lookups.\n () => {\n if (extSystem) cachedExtSystemId.value = extSystem\n }\n )\n } catch (e) {\n showErrorsDefault(e)\n }\n}\n\nconst onMetadataDialogClose = () => {\n imageMediaWidgetStore.setDetail(null)\n metadataDialog.value = false\n // Nothing is applied once the dialog is closed. Otherwise a pending\n // pick answer overwrote another widget's dialog form opened meanwhile.\n loadingInDialog = null\n metadataDialogLoading.value = false\n // Cancels this opening's wait for another widget's save.\n cancelSaveWait?.()\n}\n\nconst tryMediaConfirm = async () => {\n if (!isMediaAware(detail.value)) return\n // Ignored while this widget's image save is in flight, like a second image confirm. That save's\n // answer sets the image and dropped the media confirmed meanwhile. The button spins until then.\n if (metadataDialogSaving.value) return\n metadataDialogSaving.value = true\n try {\n metadataDialog.value = false\n const media = detail.value\n mediaModel.value = media\n imageModel.value = null\n imageMediaWidgetStore.setDetail(null)\n reloadMedia(media)\n emit('afterMetadataSaveSuccess')\n releaseFieldLockWith({ image: null, media })\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n metadataDialogSaving.value = false\n }\n}\n\nconst tryImageConfirm = async () => {\n if (!isImageCreateUpdateAware(detail.value)) return\n // The asset of a just-closed detail is still being read, and the read may change\n // what the form requires. The confirm waits for it, then the form confirms again.\n const confirmAgain = () => detailDialogMetadataComponent.value?.confirm()\n if (holdConfirmForDetailAssetRead(metadataDialogSaving.value, confirmAgain)) return\n // Ignores a second press during the save: a host button is not disabled meanwhile and\n // Enter reaches the dialog button. Otherwise the image is created or updated twice.\n if (metadataDialogSaving.value) return\n // A confirm belongs to the image it was pressed on. During waits the dialog\n // may close and reopen for another image or media, or the widget may unmount.\n // Until the save is sent, each step continues only if the widget exists and the dialog still shows that image.\n // Otherwise another image was saved without a press, or an image without fields was created for a media.\n const pressedOn = detail.value\n const confirmIsOver = () => disposed || detail.value !== pressedOn\n // Authors are also not sent if the widget turned read-only meanwhile.\n const authorsSendIsOver = () => confirmIsOver() || props.readonly\n metadataDialogSaving.value = true\n // The dialog shows the source from the held asset, not the pick (its read\n // failed). Once saved, the image has its own source and the asset is released.\n const letGoHeld = letGoOnceSavedWithSource(pressedOn)\n try {\n const authorsAsset = damAuthorsAsset.value\n if (authorsAsset) {\n if (authorsAsset.authors.length > 0) {\n // The asset was read at pick time and may have gained authors\n // since. The write would replace them, so it is read again first.\n // A failed read saves nothing. If it now has authors nothing is written: the pick is dropped,\n // an empty source takes their names, a persistent message is shown, and the dialog stays.\n let givenMeanwhile: string | null\n try {\n givenMeanwhile = await authorsGivenMeanwhile(authorsAsset)\n } catch (e) {\n if (!authorsSendIsOver() && !showErrorsDefault(e)) showUnknownError()\n return\n }\n if (authorsSendIsOver()) return\n if (!isNull(givenMeanwhile)) {\n offerNoDamAuthors()\n giveNamesToEmptySource(pressedOn, givenMeanwhile)\n showWarningT('common.damImage.image.meta.authorsGivenMeanwhile', -1)\n return\n }\n // Author names go into the image source only after the DAM accepts the authors, and are held aside until then.\n // Written earlier, they stayed in the hidden source after a refused\n // write, and a confirm with the pick cleared saved them with the image.\n // Looked up under the ext system of the asset's licence, like the read before the write.\n const authorsRes = await fetchAuthorListByIds(\n damClient,\n endPointAuthor,\n (await getExtSystemByLicence(authorsAsset.licence)) ??\n assetSelectStore.requireSelectedSelectConfig().extSystem,\n authorsAsset.authors\n )\n // Silently stops if the dialog was left or the widget is gone or read-only.\n if (authorsSendIsOver()) return\n const source = authorsRes.map((author) => author.name).join(', ')\n try {\n await updateAssetAuthors(damClient, endPointAsset, authorsAsset)\n } catch (e) {\n // Names the authors refused by validation as the forms name them. The image is not saved.\n showMetadataSaveError(e, assetSelectStore.requireSelectedSelectConfig().extSystem, damConfigName)\n return\n }\n // The DAM already has the authors. The image is not saved.\n if (confirmIsOver()) return\n pressedOn.texts.source = source\n offerNoDamAuthors()\n }\n }\n const image = imageFieldsOf(pressedOn)\n // The save is noted for the other widgets of the page, even if this widget is gone by the time it answers.\n const res = image.id\n ? await noteImageSave(damConfigName, image.id, ownImageSaves, imageApi.updateImage(imageClient, image.id, image))\n : await imageApi.createImage(imageClient, image)\n // The widget is gone, so nothing of the answer is written.\n // The dialog store is shared by the page and may already belong to the\n // next widget. Writing here emptied its form and then showed this image.\n if (disposed) return\n letGoHeld()\n // This confirm closes the dialog if it shows the pressed image or nothing, or if \"edit\n // metadata\" reopened it. That copy is stale and its confirm would overwrite this save.\n // A dialog of another pick or upload stays open and keeps the field lock. A dialog still\n // loading for a pick or \"edit metadata\" also stays open. Closing it broke that load.\n // If the dialog was closed meanwhile, the store may show another widget's dialog, so it is not emptied.\n // The `expandMetadata` form is not a dialog. It shows the widget's image, now the saved one.\n const ownDialogOpen = metadataDialog.value\n const shown = detail.value\n const dialogOfAnotherPick =\n !props.expandMetadata &&\n ownDialogOpen &&\n (isNull(shown) ? !isNull(loadingInDialog) : shown !== pressedOn && shown !== ownInDialog)\n if (!dialogOfAnotherPick) metadataDialog.value = false\n if (!image.id) createdImageId = res.id\n imageModel.value = res.id\n mediaModel.value = null\n if (!dialogOfAnotherPick && (ownDialogOpen || props.expandMetadata)) imageMediaWidgetStore.setDetail(null)\n // A dialog of another pick or upload opened during a create gets the created\n // id. Otherwise its confirm created a second image and left this one unused.\n // Only the pick of this widget is updated. An image another widget put in the store belongs to that widget.\n if (dialogOfAnotherPick && !image.id && shown === pickInDialog && isImageCreateUpdateAware(shown)) {\n if (isUndefined(shown.id)) shown.id = res.id\n }\n // Runs before the dialog close is observed, so this release with the saved value is the one\n // sent. When the editor is alone there is no lock and the value goes to the buffer here.\n // While the menu or another dialog holds the field, the lock\n // stays with it. Releasing here broke a picker opened since.\n // Not while a dialog of another pick or upload is open. It sets the final\n // value under this id, and other editors reload only when the id changes.\n if (props.collabStatus === CollabStatus.Inactive || (!clickMenuOpened.value && !anyWidgetDialogOpened.value)) {\n releaseFieldLockWith({ image: res.id, media: null })\n } else if (lockedLocal.value && !dialogOfAnotherPick) {\n changeFieldData.value({ image: res.id, media: null })\n }\n await reloadImage(res, res.id, true)\n emit('afterMetadataSaveSuccess')\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n metadataDialogSaving.value = false\n // A dialog closed during this confirm left the lock to it. It is released here once nothing else holds it.\n // A disposed widget also releases with its current field value.\n // The server keeps locks until release or leaving the room.\n // Skipped if the replacement widget has taken the lock since, because the release would free its lock.\n if (disposed ? !lockTurnTakenSince() : !clickMenuOpened.value && !anyWidgetDialogOpened.value) {\n releaseFieldLockLocal()\n }\n }\n}\n\nconst onMetadataDialogConfirm = async () => {\n if (props.readonly) return\n await tryMediaConfirm()\n await tryImageConfirm()\n}\n\n// While a delete is pending, closing the menu or a dialog does not release the\n// lock. The menu closes on the click and released with the image still there.\n// Same while a dialog confirm runs. Otherwise the lock went back with\n// the old value and the saved image never reached other editors.\nconst deletePending = ref(false)\nconst onImageMediaDelete = async () => {\n // Use the widget's own image. The store detail is shared and may be empty or another widget's.\n const imageId = imageModel.value\n if (props.callDeleteApiOnRemove && !isNull(imageId)) {\n deletePending.value = true\n try {\n await imageApi.deleteImage(imageClient, imageId)\n // A widget that is gone writes nothing into the page.\n if (!disposed) reset(!clickMenuOpened.value && !anyWidgetDialogOpened.value)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n deletePending.value = false\n }\n // A disposed widget releases the lock with its field value, unless the replacement widget has taken the lock since.\n // Otherwise the release freed the lock held by that widget's open menu.\n if (disposed ? !lockTurnTakenSince() : !clickMenuOpened.value && !anyWidgetDialogOpened.value)\n releaseFieldLockLocal()\n return\n }\n reset()\n}\n\nconst forceReloadViewWithExpandMetadata = () => {\n if (isMediaAware(detail.value)) {\n reloadMedia(detail.value)\n return\n } else if (isImageCreateUpdateAware(detail.value)) {\n reloadImage(detail.value, null, true)\n }\n}\n\nconst onAssetUploadConfirm = (items: ImageCreateUpdateAware[]) => {\n if (props.readonly) return\n if (!items[0]) return\n\n if (!isNull(imageModel.value)) {\n items[0].id = imageModel.value\n }\n // An upload brings its own source, so authors of a previously picked asset are not offered.\n offerNoDamAuthors()\n dialogType.value = DamAssetType.Image\n imageMediaWidgetStore.setDetail(items[0])\n pickInDialog = detail.value\n metadataDialog.value = true\n if (props.expandMetadata) {\n forceReloadViewWithExpandMetadata()\n }\n}\n\nconst expandedUploadDialog = ref<InstanceType<typeof AFileInputDialog> | null>(null)\n\nconst onDropzoneClick = () => {\n if (isLocked.value || props.readonly) return\n acquireFieldLockLocal()\n if (!props.expandOptions) {\n clickMenuOpened.value = true\n return\n }\n expandedUploadDialog.value?.activate()\n}\n\nconst detailDialogMetadataComponent = ref<InstanceType<typeof ImageDetailDialogMetadata> | null>(null)\n\nconst metadataConfirm = () => {\n if (props.readonly) return\n detailDialogMetadataComponent.value?.confirm()\n}\n\nconst onOptionsButtonClick = () => {\n acquireFieldLockLocal()\n}\n\nconst anyWidgetDialogOpened = computed(() => {\n return (\n assetPicksPending.value > 0 ||\n metadataDialog.value ||\n assetSelectDialog.value ||\n fileInputDialog.value ||\n uploadQueueDialog.value === props.queueKey\n )\n})\n\nconst isLocked = computed(() => {\n return !isNull(lockedByUserLocal.value)\n})\n\nconst preselectType = computed(() => {\n if (mediaModel.value && mediaModel.value.damMedia.assetType) {\n return mediaModel.value.damMedia.assetType\n }\n return DamAssetType.Image as DamMediaTypeType\n})\n\nconst type = computed<DamAssetTypeType | null>(() => {\n if (isMediaAware(resImageMedia.value)) {\n return resImageMedia.value.damMedia.assetType === DamMediaType.Video ? DamAssetType.Video : DamAssetType.Audio\n } else if (isImageCreateUpdateAware(resImageMedia.value)) {\n return DamAssetType.Image\n }\n return null\n})\n\nwatch(\n clickMenuOpened,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n // On open, a lock left unconfirmed by a refused drop is requested again. It\n // is done here, not in the click handler, because the click also closes.\n if (newValue) return void acquireFieldLockLocal(true)\n if (anyWidgetDialogOpened.value || deletePending.value || metadataDialogSaving.value) return\n releaseFieldLockLocal()\n },\n { immediate: false }\n)\n\nwatch(\n anyWidgetDialogOpened,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n // Opened from an `expandOptions` button there is no menu to request the lock, so\n // the dialog does. Opened from the menu, it requests only an unconfirmed lock.\n if (newValue) return void acquireFieldLockLocal(true)\n if (deletePending.value || metadataDialogSaving.value) return\n releaseFieldLockLocal()\n },\n { immediate: false }\n)\n\n// When read-only, open dialogs and menus close as on cancel and the lock is released\n// once none holds it. A dialog left open kept the lock unseen and reappeared on edit.\n// A dialog with a save in progress is left to that save, which closes it. If the save fails, it closes then.\n// With `expandMetadata` the in-page form is kept for its host to confirm later. Emptying it lost the pick still shown.\nwatch([() => props.readonly, metadataDialogSaving], ([readonly]) => {\n if (!readonly) return\n clickMenuOpened.value = false\n fileInputDialog.value = false\n if (metadataDialog.value && !metadataDialogSaving.value && !props.expandMetadata) onMetadataDialogClose()\n})\n\n// A lost connection drops this editor's locks on the server. Kept as\n// held, the lock was never requested again and its release was refused.\n// On reconnect, an open menu or dialog requests the lock again. This includes\n// one opened while alone and one whose request was refused or unanswered.\nwatch(collabReconnecting, (reconnecting) => {\n if (!reconnecting) return\n lockedLocal.value = false\n lockRequestPending.value = false\n collabFieldLockReallyLocked.value = false\n})\nwatch(\n () => props.collabStatus,\n (status, previous) => {\n if (status === CollabStatus.Inactive || previous !== CollabStatus.Inactive) return\n if (clickMenuOpened.value || anyWidgetDialogOpened.value) acquireFieldLockLocal(true)\n }\n)\n\ndefineExpose({\n metadataConfirm,\n})\n</script>\n\n<template>\n <div\n class=\"a-image-widget\"\n :class=\"{ 'a-image-widget--locked': isLocked }\"\n :style=\"{\n width: width ? width + 'px' : undefined,\n maxWidth: maxWidth ? maxWidth + 'px' : undefined,\n }\"\n >\n <div class=\"a-image-widget__options\">\n <h4\n v-if=\"label\"\n class=\"font-weight-bold text-label-large\"\n >\n {{ label\n }}<span\n v-if=\"required\"\n class=\"a-required-mark\"\n />\n </h4>\n <div class=\"d-flex\">\n <div v-if=\"isLocked && collab\">\n <ACollabLockedByUser\n :id=\"lockedByUserLocal\"\n :users=\"collab.cachedUsers\"\n />\n </div>\n <div v-if=\"!readonly\">\n <div\n v-if=\"expandOptions\"\n class=\"d-flex flex-row\"\n >\n <VBtn\n v-if=\"imageMediaLoaded && !expandMetadata\"\n class=\"mr-2 mb-2\"\n :disabled=\"isLocked\"\n :text=\"\n type === DamAssetType.Image\n ? t('common.damImage.image.meta.edit')\n : t('common.damImage.media.meta.edit')\n \"\n @click=\"actionEditMeta\"\n />\n <VBtn\n class=\"mr-2 mb-2\"\n :disabled=\"isLocked\"\n @click=\"actionLibrary\"\n >\n <span v-if=\"imageMediaLoaded\">{{ replaceFromDamLabel }}</span>\n <span v-else>{{ addFromDamLabel }}</span>\n </VBtn>\n <AFileInputDialog\n ref=\"expandedUploadDialog\"\n v-model=\"fileInputDialog\"\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n toolbar-t=\"common.damImage.image.button.upload\"\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn\n v-bind=\"fileInputProps\"\n :disabled=\"isLocked\"\n >\n {{ t('common.damImage.image.button.upload') }}\n </VBtn>\n </template>\n </AFileInputDialog>\n <span\n v-if=\"required\"\n class=\"a-required-mark ml-2\"\n />\n </div>\n <VBtn\n v-else\n variant=\"text\"\n size=\"x-small\"\n icon\n :disabled=\"isLocked\"\n :aria-label=\"t('common.damImage.image.button.options')\"\n @click.stop=\"onOptionsButtonClick\"\n >\n <VIcon icon=\"mdi-dots-horizontal\" />\n <VTooltip\n activator=\"parent\"\n location=\"top\"\n >\n {{ t('common.damImage.image.button.options') }}\n </VTooltip>\n <VMenu\n v-model=\"clickMenuOpened\"\n activator=\"parent\"\n location=\"bottom right\"\n eager\n >\n <VCard>\n <VList density=\"compact\">\n <VListItem\n v-if=\"imageMediaLoaded && !expandMetadata\"\n @click=\"actionEditMeta\"\n >\n <VListItemTitle>\n {{\n type === DamAssetType.Image\n ? t('common.damImage.image.meta.edit')\n : t('common.damImage.media.meta.edit')\n }}\n </VListItemTitle>\n </VListItem>\n <VListItem @click=\"actionLibrary\">\n <VListItemTitle>\n <span v-if=\"imageMediaLoaded\">{{ replaceFromDamLabel }}</span>\n <span v-else>{{ addFromDamLabel }}</span>\n </VListItemTitle>\n </VListItem>\n <AFileInputDialog\n v-model=\"fileInputDialog\"\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n toolbar-t=\"common.damImage.image.button.upload\"\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VListItem\n @click=\"\n ($event: any) => {\n fileInputProps.onClick($event)\n clickMenuOpened = false\n }\n \"\n >\n {{ t('common.damImage.image.button.upload') }}\n </VListItem>\n </template>\n </AFileInputDialog>\n <VListItem\n v-if=\"imageMediaLoaded\"\n @click=\"onImageMediaDelete\"\n >\n <VListItemTitle>\n {{\n type === DamAssetType.Image\n ? t('common.damImage.image.button.removeImage')\n : t('common.damImage.media.button.remove')\n }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n </VBtn>\n </div>\n </div>\n </div>\n <div class=\"position-relative\">\n <VImg\n :lazy-src=\"imagePlaceholderPath\"\n :src=\"resolvedSrc\"\n :width=\"width\"\n :height=\"height\"\n cover\n max-width=\"100%\"\n class=\"disable-radius\"\n >\n <template #placeholder>\n <div class=\"d-flex align-center justify-center h-100\">\n <VProgressCircular\n indeterminate\n color=\"grey-lighten-4\"\n />\n </div>\n </template>\n </VImg>\n <div\n v-if=\"type\"\n class=\"a-image-widget__icon\"\n >\n <div v-if=\"type === DamAssetType.Audio\">\n <VIcon\n size=\"80\"\n icon=\"mdi-music\"\n color=\"#505050\"\n />\n </div>\n <div v-else-if=\"type === DamAssetType.Video\">\n <VIcon\n size=\"80\"\n icon=\"mdi-video\"\n color=\"#505050\"\n />\n </div>\n </div>\n <AImageDropzone\n v-if=\"!readonly\"\n variant=\"fill\"\n transparent\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n :hide-text=\"hideDropzoneText || isLocked\"\n @click=\"onDropzoneClick\"\n @drop=\"onDrop\"\n />\n </div>\n <slot\n name=\"append\"\n :image-media=\"resImageMedia\"\n />\n <ImageDetailDialogMetadata\n v-if=\"!readonly\"\n ref=\"detailDialogMetadataComponent\"\n v-model=\"metadataDialog\"\n :show-dam-authors=\"!!damAuthorsAsset\"\n :dam-authors=\"damAuthorsAsset?.authors\"\n :show-source-enabled=\"showSourceEnabled\"\n :source-label=\"sourceLabel\"\n :edit-asset-label=\"editAssetLabel\"\n :expand=\"expandMetadata\"\n :saving=\"metadataDialogSaving || confirmWaits\"\n :loading=\"metadataDialogLoading\"\n :type=\"dialogType\"\n @edit-asset=\"onEditAsset\"\n @update:dam-authors=\"pickDamAuthors\"\n @confirm=\"onMetadataDialogConfirm\"\n @close=\"onMetadataDialogClose\"\n >\n <template #preview=\"{ imageMedia: appendMedia }\">\n <slot\n name=\"preview\"\n :image-media=\"appendMedia\"\n />\n </template>\n </ImageDetailDialogMetadata>\n </div>\n <AAssetSelectMedia\n v-model=\"assetSelectDialog\"\n :select-licences=\"selectLicences\"\n :upload-licence=\"uploadLicence\"\n :min-count=\"1\"\n :max-count=\"1\"\n :config-name=\"damConfigName\"\n return-type=\"asset\"\n :preselect-asset-type=\"preselectType\"\n :preselect-in-podcast=\"preselectType === DamAssetType.Audio || null\"\n @confirm=\"onAssetSelectConfirm\"\n />\n <AssetDetailDialog\n v-if=\"assetDialog === queueKey\"\n :queue-key=\"queueKey\"\n :config-name=\"damConfigName\"\n :ext-system=\"cachedExtSystemId\"\n @close=\"onAssetDetailClose\"\n />\n <UploadQueueDialogSingle\n v-if=\"uploadQueueDialog === queueKey && imageWidgetUploadConfig\"\n :queue-key=\"queueKey\"\n :ext-system=\"imageWidgetUploadConfig.extSystem\"\n :licence-id=\"imageWidgetUploadConfig.licence\"\n :file-input-key=\"uploadQueue?.fileInputKey ?? -1\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @apply=\"onAssetUploadConfirm\"\n />\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4FA,IAAMoE,IAAQC,GA+CRC,KAAOH,IAIPI,IAAavE,GAA8BqE,GAAC,OAA2B,GACvEI,IAAazE,GAA8BqE,GAAC,OAA2B,GAEvEK,IAAgBC,GAAiBP,EAAM,UAAU,GAEjD,EAAE,sBAAkBQ,GAA4B,GAChD,EAAE,2BAAuBC,GAAe,GAExCC,KAAmBC,GAAK,GAAwB,MAA+C,CAAC,CAAC,GACjGC,KAAkBD,GAAK,MAA2B,CAAC,CAAC,GAEpDE,KAAmBF,GAAK,MAA8C,CAAC,CAAC,GACxEG,KAAoBH,EAAuB,IAAI;EAErD,IAAII,GAAc,MAAM,WAAWC,EAAUhB,EAAM,MAAM,GAAG;GAC1D,IAAM,EACJ,2BACA,2BACA,0BACA,qCACA,oBACEiB,GAAejB,EAAM,OAAO,MAAMA,EAAM,OAAO,KAAK;GAWxD,AAVA,GAAiB,QAAQkB,GACzB,GAAgB,QAAQC,GACxB,GAAiB,QAAQC,GACzBC,EACEC,IACC,MAAa;IACZ,GAAkB,QAAQC;GAC5B,GACA,EAAE,WAAW,GAAK,CACpB,GACAC,GAAkC,MAAuC;IACvE,IAAIC,EAAK,WAAWC,GAAsB,WAAWD,EAAK,SAASE,GAAoB,SAErF,AADA,EAAmB,QAAQ,IAC3B,EAA4B,QAAQ;SAC/B,IAAIF,EAAK,WAAWC,GAAsB,WAAWD,EAAK,SAASE,GAAoB,SAE5F,AADA,EAAmB,QAAQ,IAC3B,EAA4B,QAAQ;SAC/B,IAAIC,EAAmB,OAG5B;SACK,AAAIH,EAAK,WAAWC,GAAsB,WAAWD,EAAK,SAASE,GAAoB,UAC5F,EAA4B,QAAQ,KAC3BF,EAAK,WAAWC,GAAsB,WAAWD,EAAK,SAASE,GAAoB,YAC5F,EAA4B,QAAQ;GAExC,CAAC;EACH;EAIA,IAAME,YAA4C;GAAE,OAAO1B,EAAW;GAAO,OAAOE,EAAW;EAAM,IAC/FyB,IAAcnB,EAAI,EAAK,GAGzBoB,KAAc,GACZC,WAAqB;GACzB,AAAIhB,EAAUhB,EAAM,MAAM,MAAG,KAAciC,GAAkBjC,EAAM,OAAO,MAAMA,EAAM,OAAO,KAAK;EACpG,GACMkC,WACJlB,EAAUhB,EAAM,MAAM,KAAKmC,GAAkBnC,EAAM,OAAO,MAAMA,EAAM,OAAO,KAAK,MAAM+B,IAOpFH,IAAqBjB,EAAI,EAAK,GAC9ByB,KAAyB,IAAQ,OAAU;GAC/C,AAAIpC,EAAM,iBAAiBP,EAAa,aACpCqC,EAAY,UAAU,MAAUO,KAAS,GAAmB,SAAS,GAA4B,WAErG,EAA4B,QAAQ,IACpC,EAAmB,QAAQ,IAC3BxB,GAAiB,MAAM,GACvBmB,GAAa,GACb,EAAY,QAAQ;EACtB,GAGMM,UAA8B;GAClC,AAAIR,EAAY,UAAU,OAC1BpB,GAAiB,MAAMmB,GAAY,CAAC,GACpCG,GAAa,GACb,EAAY,QAAQ;EACtB,GAGMO,MAAwB,MAAiC;GAC7D,CAAIT,EAAY,UAAU,MAAS9B,EAAM,iBAAiBP,EAAa,cACvEiB,GAAiB,MAAM8B,CAAK,GAC5BR,GAAa,GACb,EAAY,QAAQ;EACtB,GAEMS,IAA0BC,GAC9BC,IACA,KAAA,CACF;EAEA,IAAIC,GAAYH,CAAuB,KAAKG,GAAYH,EAAwB,KAAK,GACnF,MAAU,MAAM,mFAAmF;EAGrG,IAAM,EAAE,SAAMI,GAAQ,GAEhB,EAAE,sBAAmB,gBAAY,kBAAc,yBAAqBC,GAAU,GAE9EC,KAAeC,EAA2B1C,CAAa,GACvD,EAAE,iBAAa,iBAAayC,IAC5B,EAAE,8BAA0B,gCAA4BE,EAAgBF,EAAY,GACpFG,KAAoBC,GAAqB,GACzC,EAAE,uBAAmB,4BAAwBC,GAAqB,GAGlEC,IAAwBC,GAAyB;EACvD,EAAsB,iBAAiB;EACvC,IAAM,EAAE,cAAWC,GAAYF,CAAqB,GAC9CG,IAAa,OAAO,oBAAoB,GAExCC,IAAgB9C,EAAgD,IAAI,GACpE+C,IAAkB/C,EAAI,EAAK,GAC3BgD,KAAoBhD,EAAI,EAAK,GAC7BiD,IAAiBjD,EAAI,EAAK,GAC1BkD,IAAuBlD,EAAI,EAAK,GAChCmD,IAAwBnD,EAAI,EAAK,GACjCoD,KAAkBpD,EAAI,EAAK,GAI3B,EACJ,qBACA,uBACA,uBACA,oBACA,wBACA,mCACA,kBACA,kBACA,8BACA,2BACA,qBACEqD,GACF1D,UAEGsD,EAAe,SAAS5D,EAAM,mBAAmBiE,EAAyBC,EAAO,KAAK,IAAIA,EAAO,QAAQ,YACtGlE,EAAM,QACd;EAGA,QACQ4D,EAAe,SAAS5D,EAAM,iBACnC,MAAUqD,EAAsB,WAAWG,GAAYW,CAAK,GAC7D;GAAE,WAAW;GAAM,OAAO;EAAO,CACnC;EAEA,IAAMC,KAAmBC,QAChB,CAACC,EAAOnE,EAAW,KAAK,KAAK,CAACmE,EAAOjE,EAAW,KAAK,CAC7D,GAEKkE,IAAc5D,EAAI,EAAE,GAEpB6D,KAAcH,QACXnB,GAAkB,SAASlD,EAAM,QAAQ,CACjD,GAEKyE,KAAmBJ,QAChB,CAACC,EAAOb,EAAc,KAAK,CACnC,GAGGiB,KAAmC,MAGnCC,KAAoC,MAOpCC,IAAiC,MAC/BC,MAAkB,MAClBC,KAAYF,MAAoBG,IAAgB,KAChDT,EAAOJ,EAAO,KAAK,IAAU,MACjC,IAAkB,MAClB,EAAsB,QAAQ,IAC9B,EAAe,QAAQ,IAChB,KAGLc,KAAiB,GAEfC,qBAAgB,IAAI,IAAY,GAElCC,KAAsC,MAGpCC,KAAaxE,EAAsByE,EAAa,KAAK,GACrDC,KAAiB,YAAY;GACjC,GAAW,QAAQC,EAAK,SAASF,EAAa;GAC9C,IAAMG,UAAgBtB,EAAyBR,EAAc,KAAK,IAAIA,EAAc,MAAM,KAAK,KAAA,GAGzF+B,IAAKD,EAAO,GACZE,IAAcC,EAASF,CAAE,IAAIG,GAAuBrF,GAAekF,GAAIP,EAAa,IAAI;GAC9F,IAAIQ,GAAa;IACf,IAAMG,IAAe,IAAkB,OAAO,MAAM;IAIpD,AAHAvC,EAAsB,UAAU,IAAI,GACpC,EAAsB,QAAQ,IAC9B,EAAe,QAAQ,IACvB,KAAiBoC,EAAY;IAC7B,IAAMI,IAAO,MAAMC,GAAgBL,EAAY,MAAM,GAAGnF,CAAa;IAErE,IADA,KAAiB,MACb,CAACuE,GAAee,CAAW,GAAG;IAKlC,IAJA,IAAkB,MAClB,EAAsB,QAAQ,IAG1BC,MAASE,IAAc;KAGzB,AAFAN,EAAY,OAAO,GACnB,EAAe,QAAQ,IACvBO,GAAW,2BAA2B;KACtC;IACF;GACF;GAGA,IAAMC,IAAWC,GACfjC,EAAyBR,EAAc,KAAK,IAAIA,EAAc,MAAM,IAAI,QAAQ,KAAA,CAClF,GACI0C,IAA6B;GACjC,IAAIF,GAAU;IACZ,IAAML,IAAe,IAAkB,OAAO,MAAM;IAKpD,IAJAvC,EAAsB,UAAU,IAAI,GACpC,EAAsB,QAAQ,IAC9B,EAAe,QAAQ,IACvB,IAAO,MAAM4C,GACT,CAACpB,GAAee,CAAW,GAAG;IAElC,AADA,IAAkB,MAClB,EAAsB,QAAQ;GAChC;GAGA,IAAMQ,IAAUb,EAAO,GACjBc,IAAQX,EAASU,CAAO,IAAIE,GAAgBhG,GAAe8F,GAASpB,EAAc,IAAI;GAK5F,AAJIqB,KAAOE,GAAiBF,GAAO,MAAM,EAAI,GAC7ChD,EAAsB,UAAUmD,EAAM/C,EAAc,KAAK,CAAC,GAC1DgD,GAAaN,GAAMlC,EAAyBC,EAAO,KAAK,IAAIA,EAAO,QAAQ,IAAI,GAC/E,KAAcA,EAAO,OACrB,EAAe,QAAQ;EACzB,GAMMwC,KAAiB,YAAY;GACjC,IAAMnB,UAAgBtB,EAAyBR,EAAc,KAAK,IAAIA,EAAc,MAAM,KAAK,KAAA,GACzF+B,IAAKD,EAAO,GACZE,IAAcC,EAASF,CAAE,IAAIG,GAAuBrF,GAAekF,GAAIP,EAAa,IAAI;GAC9F,IAAIQ,GAAa;IACf,IAAMG,IAAe,IAAkB,OAAO,MAAM;IAGpD,AAFAvC,EAAsB,UAAU,IAAI,GACpC,EAAsB,QAAQ,IAC9B,KAAiBoC,EAAY;IAC7B,IAAMI,IAAO,MAAMC,GAAgBL,EAAY,MAAM,GAAGnF,CAAa;IASrE,IARA,KAAiB,MACb,CAACuE,GAAee,CAAW,MAC/B,IAAkB,MAClB,EAAsB,QAAQ,IAC1BC,MAASE,OACXN,EAAY,OAAO,GACnBO,GAAW,2BAA2B,IAEpCT,EAAO,MAAMC,IAAI;GACvB;GACA,IAAMa,IAAQX,EAASF,CAAE,IAAIc,GAAgBhG,GAAekF,GAAIR,EAAc,IAAI;GAClF,IAAIqB,GAAO,OAAO,KAAKE,GAAYF,GAAO,MAAM,EAAI;GACpD,EAAsB,UAAUG,EAAM/C,EAAc,KAAK,CAAC;EAC5D,GAEMkD,WAAsB;GAC1B,GAAkB,QAAQ;EAC5B,GAEM,EAAE,0BAAsBC,GAAwBtG,CAAa,GAG7DuG,IAA8BlG,EAAI,EAAK,GAIvCmG,KAAsB,OAAO,qBAAqB,GAElDC,qBAAmB,IAAI,IAAqB,GAC9CjC,IAAW;EAEf,SAAsB;GAcpB,AAbA,IAAW,IACXiC,GAAiB,SAAS,MAAS;IAEjC,AADA,aAAaC,EAAK,KAAK,GACvBA,EAAK,OAAOF,EAAmB;GACjC,CAAC,GACDC,GAAiB,MAAM,GAKlBlD,EAAqB,SAAUoD,GAAc,SAAU/E,GAAmB,KAAGI,EAAsB,GACxGe,EAAsB,WAAWG,GAAY,EAAK,GAClD0D,EAAU5G,GAAekD,GAAY,IAAI,GACzC0B,KAAiB;EACnB,CAAC;EAED,IAAMiC,KAAmC,YAAY;GACnD,IAAI,CAACpG,GAAc,MAAM,WAAW6B,GAAY5C,EAAM,MAAM,KAAKA,EAAM,iBAAiBP,EAAa,UACnG,OAAO,QAAQ,QAAQ,EAAI;GAG7B,IAAI2H,IAAQ,GAENC,UACAvC,IACK,QAAQ,OAAOgC,EAAmB,IAEvCD,EAA4B,QACvB,QAAQ,QAAQ,EAAI,KAG7B,KACIO,IAAQ,KACH,IAAI,SAAS,GAAS,MAAW;IACtC,IAAMJ,IAAwB;KAC5B,OAAO,iBAAiB;MAEtB,AADAD,GAAiB,OAAOC,CAAI,GAC5BM,EAAQD,EAAU,CAAC;KACrB,GAAG,GAAG;KACN;IACF;IACA,GAAiB,IAAIL,CAAI;GAC3B,CAAC,IAGI,QAAQ,OAAO,EAAK;GAG7B,OAAOK,EAAU;EACnB,GAIIE,KAA4B,MAE1BC,KAAS,OAAO,MAAkB;GAKtC,IAJIxH,EAAM,YAENyH,EAAM,WAAW,KAEjB,CAACnD,EAAOiD,EAAU,KAAK3F,EAAmB,OAAO;GAErD,IAAI8F,EAAS,OAAO;IAClB,GAAW,oCAAoC;IAC/C;GACF;GACA,EAAsB,EAAI;GAC1B,IAAMC,IAASlF,EAAwB,OAEjCmF,IAAW,OAAO,MAAM;GAC9B,KAAaA;GACb,IAAI;IAIF,IAHA,MAAMT,GAAiC,GAEnCrC,KACAyC,OAAeK,GAAU;IAE7B,IAAI5H,EAAM,UAAU;KAClB,AAAI+G,GAAiB,SAAS,KAAK,CAACrD,EAAgB,SAAS,CAACmE,EAAsB,SAAOvF,EAAsB;KACjH;IACF;IAQA,AAPA,GAAkB,QAAQqF,EAAO,WAI7BF,EAAM,SAAS,KAAGK,GAAa,oCAAoC,GACvEC,GAAoB/H,EAAM,QAAQ,GAClCkD,GAAkB,WAAWlD,EAAM,UAAU2H,EAAO,WAAWA,EAAO,SAASF,EAAM,MAAM,GAAG,CAAC,GAAGnH,CAAa,GAC/G,GAAkB,QAAQN,EAAM;GAClC,SAAS,GAAG;IACV,IAAI8E,KAAY,MAAMgC,IAAqB;IAK3C,AADIC,GAAiB,SAAS,KAAK,CAACrD,EAAgB,SAAS,CAACmE,EAAsB,SAAOvF,EAAsB,GACjH0D,GAAW,oCAAoC;GACjD,UAAU;IACR,AAAIuB,OAAeK,MAAU,KAAa;GAC5C;EACF,GAEMI,MAAmB,MAAwC;GAE/D,IADIhI,EAAM,YACN,CAACyB,EAAK,IAAI;GACd,IAAMkG,IAASlF,EAAwB;GAGvC,IAFA,GAAkB,QAAQkF,EAAO,WACjCI,GAAoB/H,EAAM,QAAQ,GAC9ByB,EAAK,EAAE,CAAC,WAAW,QACrB,GAAkB,mBAChBzB,EAAM,UACN2H,EAAO,WACPA,EAAO,SACP,CAAClG,EAAK,EAAE,CAAC,WAAW,GACpBnB,CACF;QACK,IAAImB,EAAK,EAAE,CAAC,WAAW,UAQ5B,AAPAyB,GAAkB,mBAChBlD,EAAM,UACN2H,EAAO,WACPA,EAAO,SACP,CAAClG,EAAK,EAAE,CAAC,WAAW,GACpBnB,CACF,GACA4C,GAAkB,mBAAmBzB,EAAK,EAAE,CAAC,aAAaA,EAAK,EAAE,CAAC,gBAAgB2D,EAAa,OAAO9E,CAAa;QAC9G;IACL,GAAW,sDAAsD;IACjE;GACF;GACA,GAAkB,QAAQN,EAAM;EAClC,GAEMiI,MAAe,MAAkB;GAGrC,IAFIjI,EAAM,YAENyH,EAAM,WAAW,GAAG;GACxB,IAAME,IAASlF,EAAwB;GAIvC,AAHA,GAAkB,QAAQkF,EAAO,WACjCI,GAAoB/H,EAAM,QAAQ,GAClCkD,GAAkB,WAAWlD,EAAM,UAAU2H,EAAO,WAAWA,EAAO,SAASF,GAAOnH,CAAa,GACnG,GAAkB,QAAQN,EAAM;EAClC,GAEM,EAAE,iBAAa,qBAAiBkI,GACpC9C,EAAa,OACb3C,EAAwB,MAAM,eAChC,GAKI0F,KAAoC,MAElC5B,KAAc,OAClB,GACA,GACA,IAAQ,OACL;GAEH,IADA,EAAY,QAAQ1K,GACfuM,KAAY9D,EAAOb,EAAc,KAAK,KAAO2E,KAAYC,GAG5D,AAFA,EAAc,QAAQC,EAAUF,CAAQ,GACxC,KAAiBlB,EAAU5G,GAAekD,GAAY4E,EAAS,MAAM,IAAI,GACrEnE,EAAyBR,EAAc,KAAK,MAC1CiC,EAAS1F,EAAM,QAAQ,KAAK0F,EAAS1F,EAAM,SAAS,IACtD,EAAY,QAAQuI,GAAyB/B,EAAM/C,EAAc,KAAK,GAAGzD,EAAM,UAAUA,EAAM,SAAS,IAExG,EAAY,QAAQuI,GAAyB/B,EAAM/C,EAAc,KAAK,CAAC,GAErEzD,EAAM,kBACRqD,EAAsB,UAAUmD,EAAM/C,EAAc,KAAK,CAAC;QAKhE,IAAI+E,GAAY;IAEd,IAAMC,IAASvB,EAAU5G,GAAekD,GAAYgF,CAAU;IAC9D,IAAI;KAEF,AADA,EAAc,QAAQ,MAAME,GAAS,WAAWC,IAAaH,CAAU,GACvE,KAAiBC;IACnB,SAASG,GAAO;KACd,EAAkBA,CAAK;IACzB;IAGA,IAAI9D,GAAU;IACd,AAAIb,EAAyBR,EAAc,KAAK,MAC1CiC,EAAS1F,EAAM,QAAQ,KAAK0F,EAAS1F,EAAM,SAAS,IACtD,EAAY,QAAQuI,GAAyB/B,EAAM/C,EAAc,KAAK,GAAGzD,EAAM,UAAUA,EAAM,SAAS,IAExG,EAAY,QAAQuI,GAAyB/B,EAAM/C,EAAc,KAAK,CAAC,GAErEzD,EAAM,kBAAgB0G,GAAoB;GAGlD,OAEA,AADA,EAAc,QAAQ,MACtBQ,EAAU5G,GAAekD,GAAY,IAAI;EAC3C,GAEMqF,MAAe,MAAgC;GAGnD,AAFA,EAAY,QAAQhN,GACpBqL,EAAU5G,GAAekD,GAAY,IAAI,GACrCsF,KACF,EAAc,QAAQR,EAAUQ,CAAQ,GACpCC,GAAatF,EAAc,KAAK,KAAK,CAACa,EAAOb,EAAc,MAAM,SAAS,WAAW,MACnFiC,EAAS1F,EAAM,QAAQ,KAAK0F,EAAS1F,EAAM,SAAS,IACtD,EAAY,QAAQgJ,GAClBvF,EAAc,MAAM,SAAS,aAC7BzD,EAAM,UACNA,EAAM,SACR,IAEA,EAAY,QAAQgJ,GAAwBvF,EAAc,MAAM,SAAS,WAAW,GAElFzD,EAAM,kBACRqD,EAAsB,UAAUmD,EAAM/C,EAAc,KAAK,CAAC,MAKhE,EAAc,QAAQ;EACxB,GAIMwF,MAAS,IAAU,OAAS;GAQhC,AAPA,EAAY,QAAQpN,GACpB,EAAc,QAAQ,MACtBqL,EAAU5G,GAAekD,GAAY,IAAI,GACzC,EAAW,QAAQ,MACnB,EAAW,QAAQ,MAEnBH,EAAsB,iBAAiBG,CAAU,IAC7C0F,KAAWlJ,EAAM,iBAAiBP,EAAa,aAAU8C,GAAqB;IAAE,OAAO;IAAM,OAAO;GAAK,CAAC;EAChH;EAEA,EACE;SAAOvC,EAAM;GAAcG;GAAYE;EAAU,GACjD,OAAO,CAAC+H,GAAUI,GAAYM,IAAW,CAACK,GAAUC,GAAYC,OAAc;GAE5E,IAAMC,IAAUnB;GAEhB,IADA,KAAiB,MACb,CAAC7D,EAAOwE,CAAQ,KAAK,KAAK,UAAUA,CAAQ,MAAM,KAAK,UAAUO,CAAQ,GAC3E,GAAYP,CAAQ;QAItB,IAAIV,MAAae,KAAYX,MAAeY,GAAY;IACtD,IAAI,CAAC9E,EAAOgF,CAAO,KAAKd,MAAec,KAAWlB,MAAae,GAAU;IACzE,MAAM5C,GAAY6B,GAAUI,CAAU;GAExC,OAEA,AAAIlE,EAAOwE,CAAQ,KAAK,CAACxE,EAAO+E,CAAQ,KACtCR,GAAY,IAAI;EAEpB,GACA,EAAE,WAAW,GAAK,CACpB;EAEA,IAAMU,KAAmBC,GAAoB,GACvC,EAAE,8BAA0BC,EAAkB,KAAA,GAAWnJ,CAAa,GAKtEoJ,KAAoB/I,EAAI,CAAC,GACzBgJ,KAAuB,OAAO,MAAgC;GAClE,IAAI3J,EAAM,UAAU;GACpB,IAAM4J,IAAY,IAAkB,OAAO,MAAM;GACjD,GAAkB;GAClB,IAAI;IACF,MAAMC,GAAUpI,GAAMmI,CAAQ;GAChC,UAAU;IAKR,AAJA,GAAkB,SAIdhF,MAAoBgF,MACtB,IAAkB,MAClB,EAAsB,QAAQ;GAElC;EACF,GAEMC,KAAY,OAAO,GAA6B,MAAqB;GACzE,IAAIpI,EAAK,SAAS,WAAW,CAACA,EAAK,MAAM,IAAI;GAG7C,AAFA,EAAsB,QAAQ,IAC9B4B,EAAsB,UAAU,IAAI,GACpCyG,GAAkB;GAClB,IAAIC,IAAc,IACdC,IAAS,IACPC,IAAgBxI,EAAK,MAAM;GACjC,IAAI,CAACwI,EAAc,UAAU;GAK7B,AAJA,GAAW,QAAQA,EAAc,WAAW,WAI5C,EAAe,QAAQ;GACvB,IAAIC,IAA2C;GAC/C,IAAI;IACF,IAAmB,MAAMC,GAAqBC,GAAWH,EAAc,IAAII,EAAgB;GAC7F,SAAS,GAAG;IACV,EAAkB,CAAC;GACrB;GAEA,IAAKxF,GAAe+E,CAAQ,GAC5B;QAAI,CAACM,GAAkB,OAAO,MAAM,EAAe,QAAQ;IAC3D,IAAID,EAAc,WAAW,cAAc7E,EAAa,SAASkF,GAAqBL,EAAc,QAAQ,GAAG;KAC7G,EAAe,QAAQ;KACvB,IAAMM,IAAwB;MAC5B,YAAY;MACZ,UAAU;OACR,aAAaN,EAAc,SAAS,cAAc,aAAa;OAC/D,SAASA,EAAc;OACvB,WAAWA,EAAc;OACzB,WAAW7E,EAAa;OACxB,OAAO8E,EAAiB;OACxB,aAAaA,EAAiB;OAC9B,YAAYA,EAAiB;OAC7B,aAAaA,EAAiB;OAC9B,aAAaA,EAAiB;OAC9B,UAAUA,EAAiB;OAC3B,UAAUA,EAAiB;OAC3B,UAAUA,EAAiB;OAC3B,eAAe;OACf,aAAaA,EAAiB;OAC9B,eAAeA,EAAiB;MAClC;KACF;KACA,EAAsB,UAAUK,CAAS;IAC3C,OAAO,IACLN,EAAc,WAAW,cAAc7E,EAAa,SACpD6E,EAAc,SAAS,SAAS,KAChCO,GAAqBP,EAAc,QAAQ,GAC3C;KACA,EAAe,QAAQ;KACvB,IAAMM,IAAwB;MAC5B,YAAY;MACZ,UAAU;OACR,aAAaN,EAAc,SAAS,cAAc,aAAa;OAC/D,SAASA,EAAc;OACvB,WAAWA,EAAc;OACzB,WAAW7E,EAAa;OACxB,OAAO8E,EAAiB;OACxB,aAAaA,EAAiB;OAC9B,YAAYA,EAAiB;OAC7B,aAAaA,EAAiB;OAC9B,aAAaA,EAAiB;OAC9B,UAAUA,EAAiB;OAC3B,UAAUA,EAAiB;OAC3B,UAAUA,EAAiB;OAC3B,eAAe;OACf,aAAaA,EAAiB;OAC9B,eAAeA,EAAiB;MAClC;KACF;KACA,EAAsB,UAAUK,CAAS;IAC3C,OAAO,IAAIN,EAAc,WAAW,cAAc7E,EAAa,OAAO;KAEpE,IACEqF,OAAyB,MACzB,CAAC7H,GAAYnB,EAAK,aAAa,KAC/BwI,EAAc,YAAYxI,EAAK,eAC/B;MACA,IAAIiJ,IAAgD;MACpD,IAAI;OACF,IAAU,MAAMC,GAAcP,GAAWQ,IAAe,CACtD;QAAE,OAAOnJ,EAAK,MAAM,EAAE,CAAC;QAAI,oBAAoBA,EAAK;OAAc,CACpE,CAAC;MACH,SAAS,GAAG;OACV,EAAkB,CAAC;MACrB;MAGA,IAAI,CAACoD,GAAe+E,CAAQ,GAAG;MAI/B,AAFA,EAAsB,QAAQ,IAC9B,EAAe,QAAQ,IACnBc,KAAS1C,GAAgB0C,CAAO;MACpC;KACF;KACA,EAAe,QAAQ;KAGvB,IAAIG,IAA4C;KAChD,IAAI;MACF,IAAMC,IAAW,MAAMC,GAAWX,GAAWY,IAAef,EAAc,EAAE;MAE5E,IAAIgB,IAAqC;OACvC,IAAMC,IAASD,GAAoCH,CAAQ;OAE3D,AADA,IAAcI,EAAO,aACrB,IAASA,EAAO;MAClB,OAIE,AAHIC,GAASL,EAAS,SAAS,YAAY,WAAW,MACpD,IAAcA,EAAS,SAAS,WAAW,YAAY,KAAK,IAE1DA,EAAS,QAAQ,SAAS,IAS5B,KAAS,MANgBM,GACvBhB,GACAiB,IACC,MAAMC,GAAsBR,EAAS,OAAO,KAAMvB,GAAiB,4BAA4B,CAAC,CAAC,WAClGuB,EAAS,OACX,EAAA,CACoB,KAAK,MAAWS,EAAO,IAAI,CAAC,CAAC,KAAK,IAAI,IACjDT,EAAS,QAAQ,WAAW,KACbU,GAAsB/I,EAAwB,MAAO,SAGzE,CAAA,GAAkB2C,EAAa,MAAM,EAAE,SAAS,WAAW,CAACqG,GAA4BX,CAAQ,MAClG,IAAiBA;KAIzB,SAAS,GAAG;MACV,EAAkB,CAAC;KACrB;KACA,IAAI,CAACjG,GAAe+E,CAAQ,GAAG;KAC/B,AAAIiB,KAAgBa,GAAkBb,GAAgBZ,EAAc,SAAS,EAAE;KAC/E,IAAM0B,IAAQC,GACZ;MACE,QAAQ3B,EAAc,SAAS;MAC/B,WAAWA,EAAc;MACzB,UAAUA,EAAc;KAC1B,GACA;MAAE;MAAa;KAAO,GACtB;MAAE,UAAU;MAAG,IAAI3F,EAAOnE,EAAW,KAAK,IAAI,KAAA,IAAYA,EAAW;KAAM,CAC7E;KAEA,AADAkD,EAAsB,UAAUsI,CAAK,GACrC,KAAezH,EAAO;IACxB,OAEE,EAAe,QAAQ;IAGzB,AADA,EAAsB,QAAQ,IAC1BlE,EAAM,kBACR6L,GAAkC;GAnIuB;EAqI7D,GAEMC,KAAmBC,GAAoB,GACvC,EAAE,QAAQC,OAAgBzI,GAAYuI,EAAgB,GACtD,EACJ,cACA,mBACA,mBACA,oBACA,sBACA,0BACA,uBACA,iBACA,oBACA,qBACA,yBACA,4CACEG,GAA6B3L,CAAa,GAExC,EAAE,8BAA0BmJ,EAAkBW,GAAW9J,CAAa,GAEtE4L,KAAc,OAAO,MAAuB;GAChD,IAAIC,IAA8B;GAClC,IAAI;IACF,MAAML,GAAiB,KACrB9L,EAAM,UACN,YAAY;KACV,IAAM8K,IAAW,MAAMsB,GAAmBhC,GAAWY,IAAeqB,CAAW,GAGzEC,IAAc,MAAMhB,GAAsBR,EAAS,OAAO,KAAMrI,EAAwB,MAAO;KAKrG,OAFA,MAAM8J,GAAyBnC,GAAWkC,GAAYxB,EAAS,WAAW,WAAWxK,CAAa,GAClG,IAAYgM,GACLxB;IACT,SAEM;KACJ,AAAIqB,MAAW,GAAkB,QAAQA;IAC3C,CACF;GACF,SAAS,GAAG;IACV,EAAkB,CAAC;GACrB;EACF,GAEMK,WAA8B;GAQlC,AAPAnJ,EAAsB,UAAU,IAAI,GACpC,EAAe,QAAQ,IAGvB,IAAkB,MAClB,EAAsB,QAAQ,IAE9B6B,KAAiB;EACnB,GAEMuH,KAAkB,YAAY;GAClC,IAAK1D,GAAa7E,EAAO,KAAK,KAG1B,GAAqB,OACzB;MAAqB,QAAQ;IAC7B,IAAI;KACF,EAAe,QAAQ;KACvB,IAAMwI,IAAQxI,EAAO;KAMrB,AALA,EAAW,QAAQwI,GACnB,EAAW,QAAQ,MACnBrJ,EAAsB,UAAU,IAAI,GACpCwF,GAAY6D,CAAK,GACjBxM,GAAK,0BAA0B,GAC/BqC,GAAqB;MAAE,OAAO;MAAM;KAAM,CAAC;IAC7C,SAAS,GAAG;KACV,EAAkB,CAAC;IACrB,UAAU;KACR,EAAqB,QAAQ;IAC/B;GAd6B;EAe/B,GAEMoK,KAAkB,YAAY;GAQlC,IAPI,CAAC1I,EAAyBC,EAAO,KAAK,KAItC0I,GAA8B/I,EAAqB,aAD5BgJ,GAA8B,OAAO,QAAQ,CACE,KAGtEhJ,EAAqB,OAAO;GAKhC,IAAMiJ,IAAY5I,EAAO,OACnB6I,UAAsBjI,KAAYZ,EAAO,UAAU4I,GAEnDE,UAA0BD,EAAc,KAAK/M,EAAM;GACzD,EAAqB,QAAQ;GAG7B,IAAMiN,IAAYC,GAAyBJ,CAAS;GACpD,IAAI;IACF,IAAMK,IAAeC,GAAgB;IACrC,IAAID,KACEA,EAAa,QAAQ,SAAS,GAAG;KAKnC,IAAIE;KACJ,IAAI;MACF,IAAiB,MAAMC,GAAsBH,CAAY;KAC3D,SAAS,GAAG;MACV,AAAI,CAACH,EAAkB,KAAK,CAACO,EAAkB,CAAC,KAAGC,GAAiB;MACpE;KACF;KACA,IAAIR,EAAkB,GAAG;KACzB,IAAI,CAAC1I,EAAO+I,CAAc,GAAG;MAG3B,AAFAvD,GAAkB,GAClB2D,GAAuBX,GAAWO,CAAc,GAChDvF,GAAa,oDAAoD,EAAE;MACnE;KACF;KAKA,IAAM4F,IAAa,MAAMtC,GACvBhB,GACAiB,IACC,MAAMC,GAAsB6B,EAAa,OAAO,KAC/C5D,GAAiB,4BAA4B,CAAC,CAAC,WACjD4D,EAAa,OACf;KAEA,IAAIH,EAAkB,GAAG;KACzB,IAAMhD,IAAS0D,EAAW,KAAK,MAAWnC,EAAO,IAAI,CAAC,CAAC,KAAK,IAAI;KAChE,IAAI;MACF,MAAMoC,GAAmBvD,GAAWY,IAAemC,CAAY;KACjE,SAAS,GAAG;MAEV,GAAsB,GAAG5D,GAAiB,4BAA4B,CAAC,CAAC,WAAWjJ,CAAa;MAChG;KACF;KAEA,IAAIyM,EAAc,GAAG;KAErB,AADA,EAAU,MAAM,SAAS/C,GACzBF,GAAkB;IACpB;IAEF,IAAM6B,IAAQiC,GAAcd,CAAS,GAE/Be,IAAMlC,EAAM,KACd,MAAMmC,GAAcxN,GAAeqL,EAAM,IAAI1G,IAAeyD,GAAS,YAAYC,IAAagD,EAAM,IAAIA,CAAK,CAAC,IAC9G,MAAMjD,GAAS,YAAYC,IAAagD,CAAK;IAIjD,IAAI7G,GAAU;IACd,EAAU;IAOV,IAAMiJ,KAAgBnK,EAAe,OAC/BoK,IAAQ9J,EAAO,OACf+J,KACJ,CAACjO,EAAM,kBACP+N,OACCzJ,EAAO0J,CAAK,IAAI,CAAC1J,EAAOM,CAAe,IAAIoJ,MAAUlB,KAAakB,MAAUtJ;IAwB/E,AAvBKuJ,OAAqB,EAAe,QAAQ,KAC5CtC,EAAM,OAAI,KAAiBkC,EAAI,KACpC,EAAW,QAAQA,EAAI,IACvB,EAAW,QAAQ,MACf,CAACI,OAAwBF,MAAiB/N,EAAM,mBAAiBqD,EAAsB,UAAU,IAAI,GAIrG4K,MAAuB,CAACtC,EAAM,MAAMqC,MAAUrJ,MAAgBV,EAAyB+J,CAAK,KAC1FpL,GAAYoL,EAAM,EAAE,MAAG,EAAM,KAAKH,EAAI,KAQxC7N,EAAM,iBAAiBP,EAAa,YAAa,CAACiE,EAAgB,SAAS,CAACmE,EAAsB,QACpGtF,GAAqB;KAAE,OAAOsL,EAAI;KAAI,OAAO;IAAK,CAAC,IAC1C/L,EAAY,SAAS,CAACmM,MAC/BrN,GAAgB,MAAM;KAAE,OAAOiN,EAAI;KAAI,OAAO;IAAK,CAAC,GAEtD,MAAMtH,GAAYsH,GAAKA,EAAI,IAAI,EAAI,GACnC3N,GAAK,0BAA0B;GACjC,SAAS,GAAG;IACV,EAAkB,CAAC;GACrB,UAAU;IAMR,AALA,EAAqB,QAAQ,KAKzB4E,IAAW,CAAC5C,GAAmB,IAAI,CAACwB,EAAgB,SAAS,CAACmE,EAAsB,UACtFvF,EAAsB;GAE1B;EACF,GAEM4L,KAA0B,YAAY;GAC1C,AAAIlO,EAAM,aACV,MAAMyM,GAAgB,GACtB,MAAME,GAAgB;EACxB,GAMM1F,KAAgBtG,EAAI,EAAK,GACzBwN,KAAqB,YAAY;GAErC,IAAMC,IAAUjO,EAAW;GAC3B,IAAIH,EAAM,yBAAyB,CAACsE,EAAO8J,CAAO,GAAG;IACnD,GAAc,QAAQ;IACtB,IAAI;KAGF,AAFA,MAAM1F,GAAS,YAAYC,IAAayF,CAAO,GAE1CtJ,KAAUmE,GAAM,CAACvF,EAAgB,SAAS,CAACmE,EAAsB,KAAK;IAC7E,SAAS,GAAG;KACV,EAAkB,CAAC;IACrB,UAAU;KACR,GAAc,QAAQ;IACxB;IAGA,CAAI/C,IAAW,CAAC5C,GAAmB,IAAI,CAACwB,EAAgB,SAAS,CAACmE,EAAsB,UACtFvF,EAAsB;GAE1B,OACA,GAAM;EACR,GAEMuJ,WAA0C;GAC9C,AAAI9C,GAAa7E,EAAO,KAAK,IAC3B2E,GAAY3E,EAAO,KAAK,IAEfD,EAAyBC,EAAO,KAAK,KAC9CqC,GAAYrC,EAAO,OAAO,MAAM,EAAI;EAExC,GAEMmK,MAAwB,MAAoC;GAChE,AAAIrO,EAAM,YACLsO,EAAM,OAENhK,EAAOnE,EAAW,KAAK,MAC1B,EAAM,EAAE,CAAC,KAAKA,EAAW,QAG3B2J,GAAkB,GAClB,GAAW,QAAQ1E,EAAa,OAChC/B,EAAsB,UAAUiL,EAAM,EAAE,GACxC,KAAepK,EAAO,OACtB,EAAe,QAAQ,IACnBlE,EAAM,kBACR6L,GAAkC;EAEtC,GAEM0C,KAAuB5N,EAAkD,IAAI,GAE7E6N,WAAwB;GAC5B,AAAI9G,EAAS,SAAS1H,EAAM,aAC5BoC,EAAsB,GACjBpC,EAAM,gBAIXuO,GAAqB,OAAO,SAAS,IAHnC,EAAgB,QAAQ;EAI5B,GAEM1B,KAAgClM,EAA2D,IAAI,GAE/F8N,WAAwB;GAC5B,AAAIzO,EAAM,YACV6M,GAA8B,OAAO,QAAQ;EAC/C,GAEM6B,WAA6B;GACjC,EAAsB;EACxB,GAEM7G,IAAwBxD,QAE1BqF,GAAkB,QAAQ,KAC1B9F,EAAe,SACfD,GAAkB,SAClBI,GAAgB,SAChB4K,GAAkB,UAAU3O,EAAM,QAErC,GAEK0H,IAAWrD,QACR,CAACC,EAAOxD,GAAkB,KAAK,CACvC,GAEK8N,KAAgBvK,QAChBhE,EAAW,SAASA,EAAW,MAAM,SAAS,YACzCA,EAAW,MAAM,SAAS,YAE5B+E,EAAa,KACrB,GAEKE,IAAOjB,QACP0E,GAAatF,EAAc,KAAK,IAC3BA,EAAc,MAAM,SAAS,cAAcoL,GAAa,QAAQzJ,EAAa,QAAQA,EAAa,QAChGnB,EAAyBR,EAAc,KAAK,IAC9C2B,EAAa,QAEf,IACR;E,OAED/D,EACEqC,IACC,GAAU,MAAa;GACtB,IAAInC,MAAauN,GAGjB;QAAIvN,GAAU,OAAO,KAAKa,EAAsB,EAAI;IACpD,AAAIyF,EAAsB,SAASZ,GAAc,SAASpD,EAAqB,SAC/EvB,EAAsB;GAF8B;EAGtD,GACA,EAAE,WAAW,GAAM,CACrB,GAEAjB,EACEwG,IACC,GAAU,MAAa;GACtB,IAAItG,MAAauN,GAGjB;QAAIvN,GAAU,OAAO,KAAKa,EAAsB,EAAI;IACpD,AAAI6E,GAAc,SAASpD,EAAqB,SAChDvB,EAAsB;GAF8B;EAGtD,GACA,EAAE,WAAW,GAAM,CACrB,GAMAjB,EAAM,OAAOrB,EAAM,UAAU6D,CAAoB,IAAI,CAACkL,OAAc;GAClE,AAAKA,MACL,EAAgB,QAAQ,IACxB,GAAgB,QAAQ,IACpBnL,EAAe,SAAS,CAACC,EAAqB,SAAS,CAAC7D,EAAM,kBAAgBwM,GAAsB;EAC1G,CAAC,GAMDnL,EAAM2N,KAAqB,MAAiB;GAC1C,AAAKC,MACL,EAAY,QAAQ,IACpB,EAAmB,QAAQ,IAC3B,EAA4B,QAAQ;EACtC,CAAC,GACD5N,QACQrB,EAAM,eACX,GAAQ,MAAa;GACpB,AAAIkP,MAAWzP,EAAa,YAAY0P,MAAa1P,EAAa,aAC9DiE,EAAgB,SAASmE,EAAsB,UAAOzF,EAAsB,EAAI;EACtF,CACF,GAEAtC,GAAa,EACX,oBACF,CAAC,I;GAIC7D,GAyOM,OAAA;IAxOJ,OAAKC,GAAA,CAAC,kBAAgB,EAAA,0BACcwL,EAAA,MAAQ,CAAA,CAAA;IAC3C,OAAKvL,GAAA;KAAiB,OAAA8D,EAAA,QAAQA,EAAA,QAAK,OAAU,KAAA;KAA2B,UAAAA,EAAA,WAAWA,EAAA,WAAQ,OAAU,KAAA;;;IAKtGhE,GAkJM,OAlJNsC,IAkJM,CAhJI0B,EAAA,SADRnE,EAAA,GAAAC,EASK,MATLyC,IASK,CALApC,EAAAC,EAAA4D,EAAA,KAAK,GAAA,CAAA,GAEAA,EAAA,YADNnE,EAAA,GAAAC,EAGA,QAHA0C,EAGA,K,0BAEJxC,GAsIM,OAtINyC,IAsIM,CArIOgJ,EAAA,SAAYzH,EAAA,UAAvBnE,EAAA,GAAAC,EAKM,OAAA4C,IAAA,CAJJpC,EAGEC,IAAA;KAFC,IAAIsE,GAAA;KACJ,OAAOb,EAAA,OAAO;I,6CAGPA,EAAA,W,aAAZnE,EAAA,GAAAC,EA8HM,OAAA6C,IAAA,CA5HIqB,EAAA,iBADRnE,EAAA,GAAAC,EA6CM,OA7CN8C,IA6CM;KAxCI4F,GAAA,SAAgB,CAAKxE,EAAA,kBAD7BnE,EAAA,GAAAW,EAUEC,IAAA;;MARA,OAAM;MACL,UAAUgL,EAAA;MACV,MAAuBpC,EAAA,UAAS3I,EAAAyI,CAAA,CAAY,CAAC,QAA0BzI,EAAAsT,CAAA,CAAC,CAAA,iCAAA,IAAwDtT,EAAAsT,CAAA,CAAC,CAAA,iCAAA;MAKjI,SAAO5K;;KAEV9I,EAOOG,IAAA;MANL,OAAM;MACL,UAAUgL,EAAA;MACV,SAAOf;;MAER,SAAA/J,QAA8D,CAAlD6H,GAAA,SAAZ3I,EAAA,GAAAC,EAA8D,QAAA+C,IAAAzC,EAA7BM,EAAAwT,EAAA,CAAmB,GAAA,CAAA,MACpDrU,EAAA,GAAAC,EAAyC,QAAAgD,IAAA1C,EAAzBM,EAAAyT,EAAA,CAAe,GAAA,CAAA,E;;;KAEjC7T,EAiBmBM,IAAA;MAhBb,SAAA;MAAJ,KAAI0R;MACK,YAAAxK,GAAA;MAAA,uBAAA,AAAAsM,EAAA,QAAA,MAAA,GAAe,QAAAC;MACvB,kBAAgB9L,GAAA,OAAa;MAC7B,QAAQ7H,EAAA4T,EAAA;MACR,aAAW5T,EAAA6T,EAAA;MACZ,aAAU;MACT,cAAavI;;MAEH,WAASrL,GAMX,EAAA,OANsB6T,QAAc,CAC3ClU,EAKOG,IALPI,GACU2T,GAAc,EACrB,UAAU/I,EAAA,MAAQ,CAAA,GAAA;OAEnB,SAAA9K,QAA8C,CAA3CR,EAAAC,EAAAM,EAAAsT,CAAA,CAAC,CAAA,qCAAA,CAAA,GAAA,CAAA,C;;;;;;;;;;KAKFhQ,EAAA,YADRnE,EAAA,GAAAC,EAGE,QAHFiD,EAGE,K;I,OAEJlD,EAAA,GAAAW,EA8EOC,IAAA;;KA5EL,SAAQ;KACR,MAAK;KACL,MAAA;KACC,UAAUgL,EAAA;KACV,cAAY/K,EAAAsT,CAAA,CAAC,CAAA,sCAAA;KACb,SAAKlT,GAAO2R,IAAoB,CAAA,MAAA,CAAA;;KAEjC,SAAA9R,QAAoC;MAApCL,EAAoCS,IAAA,EAA7B,MAAK,sBAAqB,CAAA;MACjCT,EAKWU,IAAA;OAJT,WAAU;OACV,UAAS;;OAET,SAAAL,QAA+C,CAA5CR,EAAAC,EAAAM,EAAAsT,CAAA,CAAC,CAAA,sCAAA,CAAA,GAAA,CAAA,C;;;MAEN1T,EA6DQW,IAAA;OA5DG,YAAAwG,EAAA;OAAA,uBAAA,AAAA2M,EAAA,QAAA,MAAA,EAAe,QAAAC;OACxB,WAAU;OACV,UAAS;OACT,OAAA;;OAEA,SAAA1T,QAsDQ,CAtDRL,EAsDQY,IAAA,MAAA;QArDN,SAAAP,QAoDQ,CApDRL,EAoDQa,IAAA,EApDD,SAAQ,UAAS,GAAA;SACtB,SAAAR,QAWY;UAVJ6H,GAAA,SAAgB,CAAKxE,EAAA,kBAD7BnE,EAAA,GAAAW,EAWYY,IAAA;;WATT,SAAOgI;;WAER,SAAAzI,QAMiB,CANjBL,EAMiBe,IAAA,MAAA;YALf,SAAAV,QAIE,CAHAR,EAAAC,EAAAiJ,EAAA,UAAS3I,EAAAyI,CAAA,CAAY,CAAC,QAAkCzI,EAAAsT,CAAA,CAAC,CAAA,iCAAA,IAAgEtT,EAAAsT,CAAA,CAAC,CAAA,iCAAA,CAAA,GAAA,CAAA,C;;;;;UAMhI1T,EAKYc,IAAA,EALA,SAAOsJ,GAAa,GAAA;WAC9B,SAAA/J,QAGiB,CAHjBL,EAGiBe,IAAA,MAAA;YAFf,SAAAV,QAA8D,CAAlD6H,GAAA,SAAZ3I,EAAA,GAAAC,EAA8D,QAAAkD,IAAA5C,EAA7BM,EAAAwT,EAAA,CAAmB,GAAA,CAAA,MACpDrU,EAAA,GAAAC,EAAyC,QAAAmD,IAAA7C,EAAzBM,EAAAyT,EAAA,CAAe,GAAA,CAAA,E;;;;;UAGnC7T,EAoBmBM,IAAA;WAnBR,YAAAkH,GAAA;WAAA,uBAAA,AAAAsM,EAAA,QAAA,MAAA,GAAe,QAAAC;WACvB,kBAAgB9L,GAAA,OAAa;WAC7B,QAAQ7H,EAAA4T,EAAA;WACR,aAAW5T,EAAA6T,EAAA;WACZ,aAAU;WACT,cAAavI;;WAEH,WAASrL,GAUN,EAAA,OAViB6T,QAAc,CAC3ClU,EASYc,IAAA,EART,UAAmC,MAAW;YAA8F,AAA3DoT,EAAe,QAAQH,CAAM,GAA8B,EAAA,QAAe;;YAO5J,SAAA1T,QAA8C,CAA3CR,EAAAC,EAAAM,EAAAsT,CAAA,CAAC,CAAA,qCAAA,CAAA,GAAA,CAAA,C;;;;;;;;;;UAKFxL,GAAA,SADR3I,EAAA,GAAAW,EAWYY,IAAA;;WATT,SAAO8Q;;WAER,SAAAvR,QAMiB,CANjBL,EAMiBe,IAAA,MAAA;YALf,SAAAV,QAIE,CAHAR,EAAAC,EAAAiJ,EAAA,UAAS3I,EAAAyI,CAAA,CAAY,CAAC,QAAkCzI,EAAAsT,CAAA,CAAC,CAAA,0CAAA,IAAyEtT,EAAAsT,CAAA,CAAC,CAAA,qCAAA,CAAA,GAAA,CAAA,C;;;;;;;;;;;;;;;IAavJhU,GAgDM,OAhDNkD,IAgDM;KA/CJ5C,EAiBOgB,IAAA;MAhBJ,YAAUZ,EAAAd,CAAA;MACV,KAAK0I,EAAA;MACL,OAAOtE,EAAA;MACP,QAAQA,EAAA;MACT,OAAA;MACA,aAAU;MACV,OAAM;;MAEK,aAAWrD,QAMd,CALNX,GAKM,OALNmD,IAKM,CAJJ7C,EAGEiB,IAAA;OAFA,eAAA;OACA,OAAM;;;;;;;;;KAMN8H,EAAA,SADRxJ,EAAA,GAAAC,EAkBM,OAlBNsD,IAkBM,CAdOiG,EAAA,UAAS3I,EAAAyI,CAAA,CAAY,CAAC,SAAjCtJ,EAAA,GAAAC,EAMM,OAAAuD,IAAA,CALJ/C,EAIES,IAAA;MAHA,MAAK;MACL,MAAK;MACL,OAAM;K,QAGMsI,EAAA,UAAS3I,EAAAyI,CAAA,CAAY,CAAC,SAAtCtJ,EAAA,GAAAC,EAMM,OAAAwD,IAAA,CALJhD,EAIES,IAAA;MAHA,MAAK;MACL,MAAK;MACL,OAAM;;KAKHiD,EAAA,W,aADTnE,EAAA,GAAAW,EASEgB,GAAA;;MAPA,SAAQ;MACR,aAAA;MACC,QAAQd,EAAA4T,EAAA;MACR,aAAW5T,EAAA6T,EAAA;MACX,aAAWpM,GAAA,SAAoBsD,EAAA;MAC/B,SAAO8G;MACD;;;;;;;IAGX9Q,GAGE4T,EAAA,QAAA,UAAA,EADC,YAAa7N,EAAA,MAAa,CAAA;IAGpBxD,EAAA,W,aADTnE,EAAA,GAAAW,EAwB4BkB,IAAA;;KAtBtB,SAAA;KAAJ,KAAIkP;KACK,YAAAjJ,EAAA;KAAA,uBAAA,AAAAyM,EAAA,QAAA,MAAA,EAAc,QAAAC;KACtB,oBAAgB,CAAA,CAAI3T,EAAAyQ,EAAA;KACpB,eAAazQ,EAAAyQ,EAAA,CAAe,EAAE;KAC9B,uBAAqBzQ,EAAA4U,EAAA;KACrB,gBAAc5U,EAAA6U,EAAA;KACd,oBAAkB7U,EAAA8U,EAAA;KAClB,QAAQxR,EAAA;KACR,QAAQ4D,EAAA,SAAwBlH,EAAA+U,EAAA;KAChC,SAAS5N,EAAA;KACT,MAAMqB,GAAA;KACM;KACZ,uBAAoBxI,EAAAgV,EAAA;KACpB,WAASzD;KACT,SAAO1B;;KAEG,SAAO5P,GAId,EAAA,YAJ8BgV,QAAW,CAC3ClU,GAGE4T,EAAA,QAAA,WAAA,EADC,YAAaM,EAAW,CAAA,C;;;;;;;;;;;;;;;;GAKjCrV,EAWEqB,IAAA;IAVS,YAAA+F,GAAA;IAAA,uBAAA,AAAA0M,EAAA,QAAA,MAAA,GAAiB,QAAAC;IACzB,mBAAiBrQ,EAAA;IACjB,kBAAgBA,EAAA;IAChB,aAAW;IACX,aAAW;IACX,eAAatD,EAAA2D,CAAA;IACd,eAAY;IACX,wBAAsBsO,GAAA;IACtB,wBAAsBA,GAAA,UAAkBjS,EAAAyI,CAAA,CAAY,CAAC,SAAK;IAC1D,WAASuE;;;;;;;;;GAGJhN,EAAAqP,EAAA,MAAgB/L,EAAA,YADxBnE,EAAA,GAAAW,EAMEoB,IAAA;;IAJC,aAAWoC,EAAA;IACX,eAAatD,EAAA2D,CAAA;IACb,cAAY3D,EAAAkV,EAAA;IACZ,SAAOlV,EAAAmV,EAAA;;;;;;;GAGFnV,EAAAgS,EAAA,MAAsB1O,EAAA,YAAYtD,EAAA8F,CAAA,KAD1C3G,EAAA,GAAAW,EASEqB,IAAA;;IAPC,aAAWmC,EAAA;IACX,cAAYtD,EAAA8F,CAAA,CAAuB,CAAC;IACpC,cAAY9F,EAAA8F,CAAA,CAAuB,CAAC;IACpC,kBAAgB+B,GAAA,OAAa,gBAAY;IACzC,QAAQ7H,EAAA4T,EAAA;IACR,aAAW5T,EAAA6T,EAAA;IACX,SAAOnC"}
1
+ {"version":3,"file":"ImageMediaWidgetInner.vue_vue_type_script_setup_true_lang.js","names":["_useModel","imagePlaceholderPath","_openBlock","_createElementBlock","_createElementVNode","_normalizeClass","_normalizeStyle","_createTextVNode","_toDisplayString","_createVNode","ACollabLockedByUser","_createBlock","_component_VBtn","_unref","_withCtx","AFileInputDialog","_mergeProps","_withModifiers","_component_VIcon","_component_VTooltip","_component_VMenu","_component_VCard","_component_VList","_component_VListItem","_component_VListItemTitle","_component_VImg","_component_VProgressCircular","AImageDropzone","_renderSlot","ImageDetailDialogMetadata","AAssetSelectMedia","AssetDetailDialog","UploadQueueDialogSingle","AFileDropzone_default","placeholder16x9_default","ImageDetailDialogMetadata_default","AssetDetailDialog_default","UploadQueueDialogSingle_default","ACollabLockedByUser_default","AFileInputDialog_default","AAssetSelectMedia_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","ImageMediaWidgetInner_vue_vue_type_script_setup_true_lang_default","CollabStatus","\"image\"","\"imageModifiers\"","\"media\"","\"mediaModifiers\"","__expose","__emit","props","__props","emit","imageModel","useModel","mediaModel","damConfigName","useDamConfigName","useCommonAdminCollabOptions","useCollabState","releaseFieldLock","ref","changeFieldData","acquireFieldLock","lockedByUserLocal","collabOptions","isDefined","useCollabField","releaseCollabFieldLock","changeCollabFieldData","acquireCollabFieldLock","watch","lockedByUser","newValue","addCollabFieldLockStatusListener","data","CollabFieldLockStatus","CollabFieldLockType","lockRequestPending","collabValue","lockedLocal","ownLockTurn","takeLockTurn","takeFieldLockTurn","lockTurnTakenSince","lastFieldLockTurn","acquireFieldLockLocal","again","releaseFieldLockLocal","releaseFieldLockWith","value","imageWidgetUploadConfig","inject","ImageWidgetUploadConfigKey","isUndefined","useI18n","useAlerts","imageOptions","useCommonAdminImageOptions","useImageActions","uploadQueuesStore","useUploadQueuesStore","useUploadQueueDialog","imageMediaWidgetStore","useImageMediaWidgetStore","storeToRefs","thisWidget","resImageMedia","clickMenuOpened","assetSelectDialog","metadataDialog","metadataDialogSaving","metadataDialogLoading","fileInputDialog","useImageDialogDamAuthors","isImageCreateUpdateAware","detail","shows","hideDropzoneText","computed","isNull","resolvedSrc","uploadQueue","imageMediaLoaded","ownInDialog","pickInDialog","loadingInDialog","answerTakenFor","disposed","opening","resImageReadAt","ownImageSaves","cancelSaveWait","dialogType","DamAssetType","actionEditMeta","type","heldId","id","othersSaves","isNumber","imageSavesOfOthersOver","thisOpening","over","withinWaitLimit","WAIT_RAN_OUT","showErrorT","heldAnew","readHeldAnew","anew","savedId","saved","imageSavedSince","reloadImage","toRaw","takeHeldAnew","showReadInForm","actionLibrary","useExtSystemIdForCached","collabFieldLockReallyLocked","LOCK_WAIT_CANCELLED","pendingLockWaits","wait","deletePending","holdImage","waitForFieldLockIsReallyAcquired","count","checkLock","resolve","dropInWait","onDrop","files","isLocked","config","thisDrop","anyWidgetDialogOpened","showWarningT","stopQueueLeftBehind","onCopyToLicence","onFileInput","useDamAcceptTypeAndSizeHelper","createdImageId","newImage","force","cloneDeep","widgetImageToDamImageUrl","newImageId","readAt","imageApi","imageClient","error","reloadMedia","newMedia","isMediaAware","damImageIdToDamImageUrl","reset","release","oldImage","oldImageId","oldMedia","created","assetSelectStore","useAssetSelectStore","useDamConfigState","assetPicksPending","onAssetSelectConfirm","thisPick","pickAsset","offerNoDamAuthors","description","source","selectedAsset","mediaDataFromDam","fetchAssetAsCmsMedia","damClient","endPointCmsAsset","assetFileIsVideoFile","mediaData","assetFileIsAudioFile","copyToLicenceEnabled","copyRes","copyToLicence","endPointImage","authorsToOffer","assetRes","fetchAsset","endPointAsset","customAssetSelectMetadataToImageMap","mapped","isString","fetchAuthorListByIds","endPointAuthor","getExtSystemByLicence","author","getDamConfigExtSystem","assetMetadataMayStillChange","offerDamAuthorsOf","image","createDamImage","forceReloadViewWithExpandMetadata","assetDetailStore","useAssetDetailStore","assetDialog","useCommonAdminCoreDamOptions","onEditAsset","extSystem","fetchAssetByFileId","assetFileId","shownUnder","loadAssetDetailExtSystem","onMetadataDialogClose","tryMediaConfirm","media","tryImageConfirm","holdConfirmForDetailAssetRead","detailDialogMetadataComponent","pressedOn","confirmIsOver","authorsSendIsOver","letGoHeld","letGoOnceSavedWithSource","authorsAsset","damAuthorsAsset","givenMeanwhile","authorsGivenMeanwhile","showErrorsDefault","showUnknownError","giveNamesToEmptySource","authorsRes","updateAssetAuthors","imageFieldsOf","res","noteImageSave","ownDialogOpen","shown","dialogOfAnotherPick","onMetadataDialogConfirm","onImageMediaDelete","imageId","onAssetUploadConfirm","items","expandedUploadDialog","onDropzoneClick","metadataConfirm","onOptionsButtonClick","uploadQueueDialog","preselectType","DamMediaType","oldValue","readonly","collabReconnecting","reconnecting","status","previous","openBlock","createElementBlock","Fragment","createElementVNode","normalizeClass","normalizeStyle","createTextVNode","toDisplayString","createCommentVNode","createVNode","createBlock","VBtn","unref","t","withCtx","replaceFromDamLabel","addFromDamLabel","_cache","$event","uploadAccept","uploadSizes","fileInputProps","mergeProps","withModifiers","VIcon","VTooltip","VMenu","VCard","VList","VListItem","VListItemTitle","VImg","VProgressCircular","renderSlot","_ctx","showSourceEnabled","sourceLabel","editAssetLabel","confirmWaits","pickDamAuthors","appendMedia","cachedExtSystemId","onAssetDetailClose"],"sources":["../../../../../src/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport AImageDropzone from '@/domains/ui/file/components/AFileDropzone.vue'\nimport type { DocId, IntegerId, IntegerIdNullable } from '@/shared/types/common'\nimport type { ImageAware, ImageCreateUpdateAware } from '@/domains/dam/types/ImageAware'\nimport imagePlaceholderPath from '@/assets/image/placeholder16x9.svg'\nimport { useCommonAdminImageOptions } from '@/domains/dam/imageWidget/composables/commonAdminImageOptions'\nimport { useImageActions } from '@/domains/dam/imageWidget/composables/imageActions'\nimport { cloneDeep, isDefined, isNull, isNumber, isString, isUndefined } from '@/shared/utils/common'\nimport { useDamConfigState } from '@/domains/dam/config/composables/damConfigState'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport {\n type AssetDetailItemDto,\n DamAssetType,\n type DamAssetTypeType,\n type DamImageCopyToLicenceResponse,\n} from '@/domains/dam/types/Asset'\nimport { useDamAcceptTypeAndSizeHelper } from '@/domains/dam/config/composables/acceptTypeAndSizeHelper'\nimport { useUploadQueuesStore } from '@/domains/dam/uploadQueue/store/uploadQueuesStore'\nimport type { UploadQueueKey } from '@/domains/dam/types/UploadQueue'\nimport type { AssetSelectReturnData } from '@/domains/dam/types/AssetSelect'\nimport type { DamConfigLicenceExtSystemReturnType } from '@/domains/dam/types/DamConfig'\nimport ImageDetailDialogMetadata from '@/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue'\nimport { computed, inject, onBeforeUnmount, ref, type ShallowRef, toRaw, watch } from 'vue'\nimport AssetDetailDialog from '@/domains/dam/assetDetail/components/AssetDetailDialog.vue'\nimport { useAssetDetailStore } from '@/domains/dam/assetDetail/store/assetDetailStore'\nimport { loadAssetDetailExtSystem } from '@/domains/dam/assetDetail/composables/assetDetailExtSystem'\nimport { storeToRefs } from 'pinia'\nimport {\n fetchAsset,\n fetchAssetAsCmsMedia,\n fetchAssetByFileId,\n showMetadataSaveError,\n updateAssetAuthors,\n} from '@/domains/dam/api/damAssetApi'\nimport { useCommonAdminCoreDamOptions } from '@/domains/dam/composables/commonAdminCoreDamOptions'\nimport UploadQueueDialogSingle from '@/domains/dam/uploadQueue/components/UploadQueueDialogSingle.vue'\nimport { useUploadQueueDialog } from '@/domains/dam/uploadQueue/composables/useUploadQueueDialog'\nimport { fetchAuthorListByIds } from '@/domains/dam/author/api/authorApi'\nimport { useI18n } from 'vue-i18n'\nimport type { VBtn } from 'vuetify/components'\nimport { useExtSystemIdForCached } from '@/domains/dam/composables/extSystemIdForCached'\nimport { useAssetSelectStore } from '@/domains/dam/assetSelect/store/assetSelectStore'\nimport {\n type CollabComponentConfig,\n type CollabFieldData,\n type CollabFieldLockOptions,\n CollabStatus,\n type CollabStatusType,\n} from '@/domains/collab/types/Collab'\nimport { useCommonAdminCollabOptions } from '@/domains/collab/composables/commonAdminCollabOptions'\nimport { useCollabState } from '@/domains/collab/composables/collabState'\nimport { useCollabField } from '@/domains/collab/composables/collabField'\nimport ACollabLockedByUser from '@/domains/collab/components/ACollabLockedByUser.vue'\nimport AFileInputDialog from '@/domains/ui/file/components/AFileInputDialog.vue'\nimport {\n CollabFieldLockStatus,\n type CollabFieldLockStatusPayload,\n CollabFieldLockType,\n} from '@/domains/collab/composables/collabEventBus'\nimport { ImageWidgetUploadConfigKey } from '@/domains/dam/imageWidget/utils/imageWidgetInkectionKeys'\nimport AAssetSelectMedia from '@/domains/dam/assetSelect/components/AAssetSelectMedia.vue'\nimport {\n isImageCreateUpdateAware,\n isMediaAware,\n useImageMediaWidgetStore,\n} from '@/domains/dam/imageWidget/store/imageMediaWidgetStore'\nimport {\n type DamMediaFromDam,\n DamMediaType,\n type DamMediaTypeType,\n type ImageMediaCollabValue,\n type MediaAware,\n} from '@/domains/dam/types/MediaAware'\nimport { assetFileIsAudioFile, assetFileIsVideoFile } from '@/domains/dam/types/AssetFile'\nimport { copyToLicence } from '@/domains/dam/api/damImageApi'\nimport { createDamImage, imageFieldsOf } from '@/domains/dam/imageWidget/utils/damImage'\nimport { assetMetadataMayStillChange } from '@/domains/dam/assetDetail/utils/assetMetadataMayStillChange'\nimport { useDamConfigName } from '@/domains/dam/composables/damConfigName'\nimport {\n giveNamesToEmptySource,\n type HeldAssetAnew,\n useImageDialogDamAuthors,\n} from '@/domains/dam/imageWidget/composables/imageDialogDamAuthors'\nimport { lastFieldLockTurn, takeFieldLockTurn } from '@/domains/dam/imageWidget/utils/fieldLockTurns'\nimport {\n holdImage,\n imageSavedSince,\n imageSavesOfOthersOver,\n noteImageSave,\n} from '@/domains/dam/imageWidget/utils/imageSaves'\nimport { WAIT_RAN_OUT, withinWaitLimit } from '@/domains/dam/imageWidget/utils/waitLimit'\n\nconst props = withDefaults(\n defineProps<{\n queueKey: UploadQueueKey\n uploadLicence: IntegerId\n selectLicences: IntegerId[]\n initialImage?: ImageAware | undefined // If given, the image data is not fetched.\n configName?: string\n collab?: CollabComponentConfig\n collabStatus?: CollabStatusType\n label?: string | undefined\n required?: boolean\n readonly?: boolean\n dataCy?: string | undefined\n expandOptions?: boolean\n expandMetadata?: boolean // Only one per page at a time, for use in dialogs.\n disableOnClickMenu?: boolean\n width?: number | undefined\n maxWidth?: number | undefined\n height?: number | undefined\n callDeleteApiOnRemove?: boolean\n damWidth?: undefined | number\n damHeight?: undefined | number\n }>(),\n {\n configName: undefined,\n collab: undefined,\n collabStatus: CollabStatus.Inactive,\n label: undefined,\n required: false,\n initialImage: undefined,\n initialMedia: undefined,\n readonly: false,\n lockable: false,\n lockedById: undefined,\n dataCy: undefined,\n expandOptions: false,\n expandMetadata: false,\n disableOnClickMenu: false,\n width: undefined,\n maxWidth: undefined,\n height: undefined,\n callDeleteApiOnRemove: false,\n damWidth: undefined,\n damHeight: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'afterMetadataSaveSuccess'): void\n}>()\n\nconst imageModel = defineModel<IntegerIdNullable>('image', { required: true })\nconst mediaModel = defineModel<MediaAware | null>('media', { required: true })\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst damConfigName = useDamConfigName(props.configName)\n\nconst { collabOptions } = useCommonAdminCollabOptions()\nconst { collabReconnecting } = useCollabState()\n\nconst releaseFieldLock = ref((_data: CollabFieldData, _options?: Partial<CollabFieldLockOptions>) => {})\nconst changeFieldData = ref((_data: CollabFieldData) => {})\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst acquireFieldLock = ref((options?: Partial<CollabFieldLockOptions>) => {})\nconst lockedByUserLocal = ref<IntegerIdNullable>(null)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nif (collabOptions.value.enabled && isDefined(props.collab)) {\n const {\n releaseCollabFieldLock,\n acquireCollabFieldLock,\n changeCollabFieldData,\n addCollabFieldLockStatusListener,\n lockedByUser,\n } = useCollabField(props.collab.room, props.collab.field)\n releaseFieldLock.value = releaseCollabFieldLock\n changeFieldData.value = changeCollabFieldData\n acquireFieldLock.value = acquireCollabFieldLock\n watch(\n lockedByUser,\n (newValue) => {\n lockedByUserLocal.value = newValue\n },\n { immediate: true }\n )\n addCollabFieldLockStatusListener((data: CollabFieldLockStatusPayload) => {\n if (data.status === CollabFieldLockStatus.Success && data.type === CollabFieldLockType.Acquire) {\n lockRequestPending.value = false\n collabFieldLockReallyLocked.value = true\n } else if (data.status === CollabFieldLockStatus.Failure && data.type === CollabFieldLockType.Acquire) {\n lockRequestPending.value = false\n collabFieldLockReallyLocked.value = false\n } else if (lockRequestPending.value) {\n // A release answer sent before a pending request says nothing about that request. Only its own answer decides.\n // Reading a refused release as the lock held let a drop upload before its request was answered.\n return\n } else if (data.status === CollabFieldLockStatus.Success && data.type === CollabFieldLockType.Release) {\n collabFieldLockReallyLocked.value = false\n } else if (data.status === CollabFieldLockStatus.Failure && data.type === CollabFieldLockType.Release) {\n collabFieldLockReallyLocked.value = true\n }\n })\n}\n// Other editors need both the image and the media.\n// A `v-model` assignment reaches the models only after the parent\n// renders, so paths that just assigned send the assigned value directly.\nconst collabValue = (): ImageMediaCollabValue => ({ image: imageModel.value, media: mediaModel.value })\nconst lockedLocal = ref(false)\n// Lock turn this widget took last, by request or release.\n// A widget of the same field drawn in place of this one may have taken a turn since.\nlet ownLockTurn = 0\nconst takeLockTurn = () => {\n if (isDefined(props.collab)) ownLockTurn = takeFieldLockTurn(props.collab.room, props.collab.field)\n}\nconst lockTurnTakenSince = () =>\n isDefined(props.collab) && lastFieldLockTurn(props.collab.room, props.collab.field) !== ownLockTurn\n// Requested once per lock. A drop asks again for an unconfirmed\n// lock, otherwise one refusal left every later drop waiting forever.\n// A refusal still keeps the lock for release: a timed-out request\n// answers the same way and the server may have granted it.\n// Never requested while one is pending: a second answer could arrive after the\n// first, and a request from the menu-closing click raced its release on the server.\nconst lockRequestPending = ref(false)\nconst acquireFieldLockLocal = (again = false) => {\n if (props.collabStatus === CollabStatus.Inactive) return\n if (lockedLocal.value === true && (!again || lockRequestPending.value || collabFieldLockReallyLocked.value)) return\n // An earlier answer says nothing about this lock. Waiters wait for this answer.\n collabFieldLockReallyLocked.value = false\n lockRequestPending.value = true\n acquireFieldLock.value()\n takeLockTurn()\n lockedLocal.value = true\n}\n// A lock taken while the room was active is released in an inactive room too.\n// The room turns inactive when the other editor leaves, and the server still holds the lock for whoever returns.\nconst releaseFieldLockLocal = () => {\n if (lockedLocal.value === false) return\n releaseFieldLock.value(collabValue())\n takeLockTurn()\n lockedLocal.value = false\n}\n// One release per lock: the server refuses a second one, and the refusal reads as the lock still held.\n// An inactive room still gets the value for editors who join, lock or not.\nconst releaseFieldLockWith = (value: ImageMediaCollabValue) => {\n if (lockedLocal.value === false && props.collabStatus !== CollabStatus.Inactive) return\n releaseFieldLock.value(value)\n takeLockTurn()\n lockedLocal.value = false\n}\n\nconst imageWidgetUploadConfig = inject<ShallowRef<DamConfigLicenceExtSystemReturnType | undefined> | undefined>(\n ImageWidgetUploadConfigKey,\n undefined\n)\n\nif (isUndefined(imageWidgetUploadConfig) || isUndefined(imageWidgetUploadConfig.value)) {\n throw new Error(\"Fatal error, parent component doesn't provide necessary config ext system config.\")\n}\n\nconst { t } = useI18n()\n\nconst { showErrorsDefault, showErrorT, showWarningT, showUnknownError } = useAlerts()\n\nconst imageOptions = useCommonAdminImageOptions(damConfigName)\nconst { imageClient, imageApi } = imageOptions\nconst { widgetImageToDamImageUrl, damImageIdToDamImageUrl } = useImageActions(imageOptions)\nconst uploadQueuesStore = useUploadQueuesStore()\nconst { uploadQueueDialog, stopQueueLeftBehind } = useUploadQueueDialog()\n// Must run before the immediate watcher below, which writes the detail during setup with `expandMetadata`.\n// Keeps a form shown by another widget's open dialog: a late-drawn widget used to empty it.\nconst imageMediaWidgetStore = useImageMediaWidgetStore()\nimageMediaWidgetStore.resetUnlessShown()\nconst { detail } = storeToRefs(imageMediaWidgetStore)\nconst thisWidget = Symbol('image media widget')\n\nconst resImageMedia = ref<null | ImageCreateUpdateAware | MediaAware>(null)\nconst clickMenuOpened = ref(false)\nconst assetSelectDialog = ref(false)\nconst metadataDialog = ref(false)\nconst metadataDialogSaving = ref(false)\nconst metadataDialogLoading = ref(false)\nconst fileInputDialog = ref(false)\n\n// DAM authors offered in the image dialog come from an asset this widget read\n// itself for that image, also for the inline form with `expandMetadata`.\nconst {\n damAuthorsAsset,\n offerDamAuthorsOf,\n offerNoDamAuthors,\n pickDamAuthors,\n onAssetDetailClose,\n holdConfirmForDetailAssetRead,\n readHeldAnew,\n takeHeldAnew,\n letGoOnceSavedWithSource,\n authorsGivenMeanwhile,\n confirmWaits,\n} = useImageDialogDamAuthors(\n damConfigName,\n () =>\n (metadataDialog.value || props.expandMetadata) && isImageCreateUpdateAware(detail.value) ? detail.value : null,\n () => props.readonly\n)\n\n// Marks the store as shown by this widget while its dialog or inline form is open, so no other widget empties it.\nwatch(\n () => metadataDialog.value || props.expandMetadata,\n (shows) => imageMediaWidgetStore.setShownBy(thisWidget, shows),\n { immediate: true, flush: 'sync' }\n)\n\nconst hideDropzoneText = computed(() => {\n return !isNull(imageModel.value) || !isNull(mediaModel.value)\n})\n\nconst resolvedSrc = ref('')\n\nconst uploadQueue = computed(() => {\n return uploadQueuesStore.getQueue(props.queueKey)\n})\n\nconst imageMediaLoaded = computed(() => {\n return !isNull(resImageMedia.value)\n})\n\n// Copy of the widget's image or media that \"edit metadata\" put into the dialog.\nlet ownInDialog: typeof detail.value = null\n// What this widget's last pick or upload put into the dialog.\n// The dialog store is page-wide, so it may show another widget's dialog opened over this one.\nlet pickInDialog: typeof detail.value = null\n// What the dialog shows loading for: a pick being read, or \"edit metadata\"\n// waiting for another widget's save or for a read of the held asset.\n// The answer is applied only while the dialog still loads for it,\n// not after close or once the page-wide store shows another dialog.\n// Otherwise a pick answer replaced another widget's dialog form and lost the typed\n// input. The loading dialog then closes, since its confirm would save that form here.\nlet loadingInDialog: symbol | null = null\nconst answerTakenFor = (opening: symbol) => {\n if (disposed || loadingInDialog !== opening) return false\n if (isNull(detail.value)) return true\n loadingInDialog = null\n metadataDialogLoading.value = false\n metadataDialog.value = false\n return false\n}\n// Number of answered page saves of the held image at the time the widget read it.\nlet resImageReadAt = 0\n// Marks of this widget's image saves in flight.\nconst ownImageSaves = new Set<symbol>()\n// Cancels the \"edit metadata\" wait for another widget's save. Called when the dialog closes.\nlet cancelSaveWait: (() => void) | null = null\n// Type the dialog is opened for: held image or medium, picked asset, or uploaded image.\n// Sets the title from the start, so it stays the same while loading, waiting and saving.\nconst dialogType = ref<DamAssetTypeType>(DamAssetType.Image)\nconst actionEditMeta = async () => {\n dialogType.value = type.value ?? DamAssetType.Image\n const heldId = () => (isImageCreateUpdateAware(resImageMedia.value) ? resImageMedia.value.id : undefined)\n // Another widget is saving the image, for example the one this\n // widget replaced. The dialog shows loading until that save ends.\n const id = heldId()\n const othersSaves = isNumber(id) ? imageSavesOfOthersOver(damConfigName, id, ownImageSaves) : null\n if (othersSaves) {\n const thisOpening = (loadingInDialog = Symbol('edit'))\n imageMediaWidgetStore.setDetail(null)\n metadataDialogLoading.value = true\n metadataDialog.value = true\n cancelSaveWait = othersSaves.cancel\n const over = await withinWaitLimit(othersSaves.over, 1, damConfigName)\n cancelSaveWait = null\n if (!answerTakenFor(thisOpening)) return\n loadingInDialog = null\n metadataDialogLoading.value = false\n // The other save timed out: the dialog closes and the user is told. Before, it loaded until the editor closed it.\n // Showing the earlier read would let the confirm overwrite what that save may still write.\n if (over === WAIT_RAN_OUT) {\n othersSaves.cancel()\n metadataDialog.value = false\n showErrorT('error.apiTimedOut.message')\n return\n }\n }\n // The held asset was picked without authors: the dialog loads while it is read\n // again, and the result goes into the dialog with the image. Never for a medium.\n const heldAnew = readHeldAnew(\n isImageCreateUpdateAware(resImageMedia.value) ? resImageMedia.value.dam.damId : undefined\n )\n let anew: HeldAssetAnew | null = null\n if (heldAnew) {\n const thisOpening = (loadingInDialog = Symbol('edit'))\n imageMediaWidgetStore.setDetail(null)\n metadataDialogLoading.value = true\n metadataDialog.value = true\n anew = await heldAnew\n if (!answerTakenFor(thisOpening)) return\n loadingInDialog = null\n metadataDialogLoading.value = false\n }\n // Another widget saved the image after this one read it: take the image as saved.\n // Otherwise the dialog offered stale texts and its confirm overwrote the saved ones.\n const savedId = heldId()\n const saved = isNumber(savedId) ? imageSavedSince(damConfigName, savedId, resImageReadAt) : null\n if (saved) void reloadImage(saved, null, true)\n imageMediaWidgetStore.setDetail(toRaw(resImageMedia.value))\n takeHeldAnew(anew, isImageCreateUpdateAware(detail.value) ? detail.value : null)\n ownInDialog = detail.value\n metadataDialog.value = true\n}\n\n// With `expandMetadata` the form is inline, with no \"edit metadata\" opening to\n// wait for another widget's save or take its result, so the form does both.\n// Otherwise it showed texts read before that save, and the host's confirm overwrote the saved ones.\n// When the wait runs out the form shows the read data and the user is told the request timed out.\nconst showReadInForm = async () => {\n const heldId = () => (isImageCreateUpdateAware(resImageMedia.value) ? resImageMedia.value.id : undefined)\n const id = heldId()\n const othersSaves = isNumber(id) ? imageSavesOfOthersOver(damConfigName, id, ownImageSaves) : null\n if (othersSaves) {\n const thisOpening = (loadingInDialog = Symbol('edit'))\n imageMediaWidgetStore.setDetail(null)\n metadataDialogLoading.value = true\n cancelSaveWait = othersSaves.cancel\n const over = await withinWaitLimit(othersSaves.over, 1, damConfigName)\n cancelSaveWait = null\n if (!answerTakenFor(thisOpening)) return\n loadingInDialog = null\n metadataDialogLoading.value = false\n if (over === WAIT_RAN_OUT) {\n othersSaves.cancel()\n showErrorT('error.apiTimedOut.message')\n }\n if (heldId() !== id) return\n }\n const saved = isNumber(id) ? imageSavedSince(damConfigName, id, resImageReadAt) : null\n if (saved) return void reloadImage(saved, null, true)\n imageMediaWidgetStore.setDetail(toRaw(resImageMedia.value))\n}\n\nconst actionLibrary = () => {\n assetSelectDialog.value = true\n}\n\nconst { cachedExtSystemId } = useExtSystemIdForCached(damConfigName)\n\n// Updated only when the socket confirms lock success or failure. Needed for file drops.\nconst collabFieldLockReallyLocked = ref(false)\n\n// Cancelling must settle the promise, not only clear the timer, because `onDrop` awaits it.\n// A Set because overlapping drops each have their own wait.\nconst LOCK_WAIT_CANCELLED = Symbol('lock wait cancelled')\ntype PendingLockWait = { timer: ReturnType<typeof setTimeout>; reject: (reason: unknown) => void }\nconst pendingLockWaits = new Set<PendingLockWait>()\nlet disposed = false\n\nonBeforeUnmount(() => {\n disposed = true\n pendingLockWaits.forEach((wait) => {\n clearTimeout(wait.timer)\n wait.reject(LOCK_WAIT_CANCELLED)\n })\n pendingLockWaits.clear()\n // Whatever held the field lock goes with the widget. The server keeps a lock until\n // release or until the editor leaves, so the field stayed locked for others.\n // Released with the current value, unless a save or delete in flight releases\n // it at its end, or the replacing widget has taken a lock turn since.\n if (!metadataDialogSaving.value && !deletePending.value && !lockTurnTakenSince()) releaseFieldLockLocal()\n imageMediaWidgetStore.setShownBy(thisWidget, false)\n holdImage(damConfigName, thisWidget, null)\n cancelSaveWait?.()\n})\n\nconst waitForFieldLockIsReallyAcquired = async () => {\n if (!collabOptions.value.enabled || isUndefined(props.collab) || props.collabStatus === CollabStatus.Inactive) {\n return Promise.resolve(true)\n }\n\n let count = 0\n\n const checkLock: () => Promise<Awaited<boolean>> = () => {\n if (disposed) {\n return Promise.reject(LOCK_WAIT_CANCELLED)\n }\n if (collabFieldLockReallyLocked.value) {\n return Promise.resolve(true)\n }\n\n count++\n if (count < 50) {\n return new Promise((resolve, reject) => {\n const wait: PendingLockWait = {\n timer: setTimeout(() => {\n pendingLockWaits.delete(wait)\n resolve(checkLock())\n }, 100),\n reject,\n }\n pendingLockWaits.add(wait)\n })\n }\n\n return Promise.reject(false)\n }\n\n return checkLock()\n}\n\n// The single drop uploaded once the field lock arrives. The upload\n// dialog shows one file but saves all it gets, so only one is kept.\nlet dropInWait: symbol | null = null\n\nconst onDrop = async (files: File[]) => {\n if (props.readonly) return\n // The dropzone rejected every file and reported it, so no lock is requested.\n if (files.length === 0) return\n // An earlier drop's lock request is still pending, so this drop is ignored.\n if (!isNull(dropInWait) && lockRequestPending.value) return\n // Same as a click on the dropzone: another editor holds the field.\n if (isLocked.value) {\n showErrorT('common.damImage.error.unableToLock')\n return\n }\n acquireFieldLockLocal(true)\n const config = imageWidgetUploadConfig.value!\n // After a refusal this drop asks again and replaces the one still waiting.\n const thisDrop = Symbol('drop')\n dropInWait = thisDrop\n try {\n await waitForFieldLockIsReallyAcquired()\n // The lock can resolve after the widget is gone; uploading into it is worse than dropping.\n if (disposed) return\n if (dropInWait !== thisDrop) return\n // Turned read-only while waiting for the lock: release it and upload nothing.\n if (props.readonly) {\n if (pendingLockWaits.size === 0 && !clickMenuOpened.value && !anyWidgetDialogOpened.value) releaseFieldLockLocal()\n return\n }\n cachedExtSystemId.value = config.extSystem\n // The widget holds one image and the upload dialog shows one file,\n // so only the first dropped file is uploaded and the user is warned.\n // Otherwise the extra files were uploaded unseen and left without an image.\n if (files.length > 1) showWarningT('common.damImage.upload.onlyOneFile')\n stopQueueLeftBehind(props.queueKey)\n uploadQueuesStore.addByFiles(props.queueKey, config.extSystem, config.licence, files.slice(0, 1), damConfigName)\n uploadQueueDialog.value = props.queueKey\n } catch (e) {\n if (disposed || e === LOCK_WAIT_CANCELLED) return\n // A timed-out request may have been granted, and nothing else would release it.\n // Released only when nothing else waits for or holds the lock. A refused release reads as the lock\n // held, so another waiting drop uploaded without its lock, or a menu opened meanwhile lost its lock.\n if (pendingLockWaits.size === 0 && !clickMenuOpened.value && !anyWidgetDialogOpened.value) releaseFieldLockLocal()\n showErrorT('common.damImage.error.unableToLock')\n } finally {\n if (dropInWait === thisDrop) dropInWait = null\n }\n}\n\nconst onCopyToLicence = (data: DamImageCopyToLicenceResponse) => {\n if (props.readonly) return\n if (!data[0]) return\n const config = imageWidgetUploadConfig.value!\n cachedExtSystemId.value = config.extSystem\n stopQueueLeftBehind(props.queueKey)\n if (data[0].result === 'copy') {\n uploadQueuesStore.addByCopyToLicence(\n props.queueKey,\n config.extSystem,\n config.licence,\n [data[0].targetAsset],\n damConfigName\n )\n } else if (data[0].result === 'exists') {\n uploadQueuesStore.addByCopyToLicence(\n props.queueKey,\n config.extSystem,\n config.licence,\n [data[0].targetAsset],\n damConfigName\n )\n uploadQueuesStore.queueItemDuplicate(data[0].targetAsset, data[0].targetMainFile, DamAssetType.Image, damConfigName)\n } else {\n showErrorT('common.damImage.queueItem.errorUnableToCopyToLicence')\n return\n }\n uploadQueueDialog.value = props.queueKey\n}\n\nconst onFileInput = (files: File[]) => {\n if (props.readonly) return\n // The input rejected every file and reported it. A dialog over a queue without a row would only show loading.\n if (files.length === 0) return\n const config = imageWidgetUploadConfig.value!\n cachedExtSystemId.value = config.extSystem\n stopQueueLeftBehind(props.queueKey)\n uploadQueuesStore.addByFiles(props.queueKey, config.extSystem, config.licence, files, damConfigName)\n uploadQueueDialog.value = props.queueKey\n}\n\nconst { uploadSizes, uploadAccept } = useDamAcceptTypeAndSizeHelper(\n DamAssetType.Image,\n imageWidgetUploadConfig.value.extSystemConfig\n)\n\n// Id of the image this widget just created. The model changes to it, and the widget shows the create response.\n// Reading it again made the preview fall back to the placeholder, and a failed read\n// showed an error after a successful save. Any other id change triggers a read.\nlet createdImageId: IntegerIdNullable = null\n\nconst reloadImage = async (\n newImage: ImageCreateUpdateAware | undefined,\n newImageId: IntegerIdNullable,\n force = false\n) => {\n resolvedSrc.value = imagePlaceholderPath\n if ((newImage && isNull(resImageMedia.value)) || (newImage && force)) {\n resImageMedia.value = cloneDeep(newImage)\n resImageReadAt = holdImage(damConfigName, thisWidget, newImage.id ?? null)\n if (isImageCreateUpdateAware(resImageMedia.value)) {\n if (isNumber(props.damWidth) && isNumber(props.damHeight)) {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImageMedia.value), props.damWidth, props.damHeight)\n } else {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImageMedia.value))\n }\n if (props.expandMetadata) {\n imageMediaWidgetStore.setDetail(toRaw(resImageMedia.value))\n }\n }\n return\n }\n if (newImageId) {\n // Counted when the read is sent: a save answered later may have taken effect after the read.\n const readAt = holdImage(damConfigName, thisWidget, newImageId)\n try {\n resImageMedia.value = await imageApi.fetchImage(imageClient, newImageId)\n resImageReadAt = readAt\n } catch (error) {\n showErrorsDefault(error)\n }\n // The widget is gone. With `expandMetadata` it would write its image into\n // the page-wide dialog store, which now shows the next widget's image.\n if (disposed) return\n if (isImageCreateUpdateAware(resImageMedia.value)) {\n if (isNumber(props.damWidth) && isNumber(props.damHeight)) {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImageMedia.value), props.damWidth, props.damHeight)\n } else {\n resolvedSrc.value = widgetImageToDamImageUrl(toRaw(resImageMedia.value))\n }\n if (props.expandMetadata) void showReadInForm()\n }\n return\n }\n resImageMedia.value = null\n holdImage(damConfigName, thisWidget, null)\n}\n\nconst reloadMedia = (newMedia: MediaAware | null) => {\n resolvedSrc.value = imagePlaceholderPath\n holdImage(damConfigName, thisWidget, null)\n if (newMedia) {\n resImageMedia.value = cloneDeep(newMedia)\n if (isMediaAware(resImageMedia.value) && !isNull(resImageMedia.value.damMedia.imageFileId)) {\n if (isNumber(props.damWidth) && isNumber(props.damHeight)) {\n resolvedSrc.value = damImageIdToDamImageUrl(\n resImageMedia.value.damMedia.imageFileId,\n props.damWidth,\n props.damHeight\n )\n } else {\n resolvedSrc.value = damImageIdToDamImageUrl(resImageMedia.value.damMedia.imageFileId)\n }\n if (props.expandMetadata) {\n imageMediaWidgetStore.setDetail(toRaw(resImageMedia.value))\n }\n }\n return\n }\n resImageMedia.value = null\n}\n\n// `release` false: an open menu or dialog holds the lock and releases it on close or confirm.\n// Otherwise the editor holds no lock, and the value reaches the buffer only here.\nconst reset = (release = true) => {\n resolvedSrc.value = imagePlaceholderPath\n resImageMedia.value = null\n holdImage(damConfigName, thisWidget, null)\n imageModel.value = null\n mediaModel.value = null\n // Keeps the form shown by another widget's open dialog.\n imageMediaWidgetStore.resetUnlessShown(thisWidget)\n if (release || props.collabStatus === CollabStatus.Inactive) releaseFieldLockWith({ image: null, media: null })\n}\n\nwatch(\n [() => props.initialImage, imageModel, mediaModel],\n async ([newImage, newImageId, newMedia], [oldImage, oldImageId, oldMedia]) => {\n // Cleared on every run, also one that ends with media. Otherwise a later change to that id would not be read.\n const created = createdImageId\n createdImageId = null\n if (!isNull(newMedia) && JSON.stringify(newMedia) !== JSON.stringify(oldMedia)) {\n reloadMedia(newMedia)\n return\n }\n\n if (newImage !== oldImage || newImageId !== oldImageId) {\n if (!isNull(created) && newImageId === created && newImage === oldImage) return\n await reloadImage(newImage, newImageId)\n return\n }\n\n if (isNull(newMedia) && !isNull(oldMedia)) {\n reloadMedia(null)\n }\n },\n { immediate: true }\n)\n\nconst assetSelectStore = useAssetSelectStore()\nconst { getDamConfigExtSystem } = useDamConfigState(undefined, damConfigName)\n\n// The picker closes as it answers, and the next dialog opens only after the asset is fetched or copied.\n// Until then the pick counts as an open dialog, or the close watcher released the lock with the old value.\n// Counts every pending pick: one whose dialog was closed released the lock under a later pick.\nconst assetPicksPending = ref(0)\nconst onAssetSelectConfirm = async (data: AssetSelectReturnData) => {\n if (props.readonly) return\n const thisPick = (loadingInDialog = Symbol('pick'))\n assetPicksPending.value++\n try {\n await pickAsset(data, thisPick)\n } finally {\n assetPicksPending.value--\n // A pick that ended early (no main file, media not loaded) left the\n // dialog loading, so the next upload or edit showed only a spinner.\n // Cleared unless the dialog now loads for something opened since.\n if (loadingInDialog === thisPick) {\n loadingInDialog = null\n metadataDialogLoading.value = false\n }\n }\n}\n\nconst pickAsset = async (data: AssetSelectReturnData, thisPick: symbol) => {\n if (data.type !== 'asset' || !data.value[0]) return\n metadataDialogLoading.value = true\n imageMediaWidgetStore.setDetail(null)\n offerNoDamAuthors()\n let description = ''\n let source = ''\n const selectedAsset = data.value[0]\n if (!selectedAsset.mainFile) return\n dialogType.value = selectedAsset.attributes.assetType\n // The asset's role is known only after it is read. The dialog shows loading\n // until then and during the copy into the upload licence, like the image widget.\n // Otherwise nothing was shown, and this dialog covered another widget's dialog opened meanwhile.\n metadataDialog.value = true\n let mediaDataFromDam: DamMediaFromDam | null = null\n try {\n mediaDataFromDam = await fetchAssetAsCmsMedia(damClient, selectedAsset.id, endPointCmsAsset)\n } catch (e) {\n showErrorsDefault(e)\n }\n // Nothing is written to the page-wide dialog store if the widget is gone or the dialog no longer loads for this pick.\n if (!answerTakenFor(thisPick)) return\n if (!mediaDataFromDam) return void (metadataDialog.value = false)\n if (selectedAsset.attributes.assetType === DamAssetType.Video && assetFileIsVideoFile(selectedAsset.mainFile)) {\n metadataDialog.value = true\n const mediaData: MediaAware = {\n extService: 'damVideo',\n damMedia: {\n imageFileId: selectedAsset.mainFile.imagePreview?.imageFile || null,\n assetId: selectedAsset.id,\n licenceId: selectedAsset.licence,\n assetType: DamAssetType.Video,\n title: mediaDataFromDam.title,\n description: mediaDataFromDam.description,\n seriesName: mediaDataFromDam.seriesName,\n authorNames: mediaDataFromDam.authorNames,\n publishedAt: mediaDataFromDam.publishedAt,\n duration: mediaDataFromDam.duration,\n mediaUrl: mediaDataFromDam.mediaUrl,\n playable: mediaDataFromDam.playable,\n syncedWithDam: true,\n episodeName: mediaDataFromDam.episodeName,\n episodeNumber: mediaDataFromDam.episodeNumber,\n },\n }\n imageMediaWidgetStore.setDetail(mediaData)\n } else if (\n selectedAsset.attributes.assetType === DamAssetType.Audio &&\n selectedAsset.podcasts.length > 0 &&\n assetFileIsAudioFile(selectedAsset.mainFile)\n ) {\n metadataDialog.value = true\n const mediaData: MediaAware = {\n extService: 'damPodcast',\n damMedia: {\n imageFileId: selectedAsset.mainFile.imagePreview?.imageFile || null,\n assetId: selectedAsset.id,\n licenceId: selectedAsset.licence,\n assetType: DamAssetType.Audio,\n title: mediaDataFromDam.title,\n description: mediaDataFromDam.description,\n seriesName: mediaDataFromDam.seriesName,\n authorNames: mediaDataFromDam.authorNames,\n publishedAt: mediaDataFromDam.publishedAt,\n duration: mediaDataFromDam.duration,\n mediaUrl: mediaDataFromDam.mediaUrl,\n playable: mediaDataFromDam.playable,\n syncedWithDam: true,\n episodeName: mediaDataFromDam.episodeName,\n episodeNumber: mediaDataFromDam.episodeNumber,\n },\n }\n imageMediaWidgetStore.setDetail(mediaData)\n } else if (selectedAsset.attributes.assetType === DamAssetType.Image) {\n // An asset already in the upload licence is used as is.\n if (\n copyToLicenceEnabled !== false &&\n !isUndefined(data.copyToLicence) &&\n selectedAsset.licence !== data.copyToLicence\n ) {\n let copyRes: DamImageCopyToLicenceResponse | null = null\n try {\n copyRes = await copyToLicence(damClient, endPointImage, [\n { asset: data.value[0].id, targetAssetLicence: data.copyToLicence },\n ])\n } catch (e) {\n showErrorsDefault(e)\n }\n // A gone widget, or a dialog no longer loading for this pick, opens no upload dialog.\n // Otherwise the copy continued in the replacing widget's upload dialog, which requested the field lock only then.\n if (!answerTakenFor(thisPick)) return\n // The upload dialog shows the copy and replaces the image dialog.\n metadataDialogLoading.value = false\n metadataDialog.value = false\n if (copyRes) onCopyToLicence(copyRes)\n return\n }\n metadataDialog.value = true\n // Authors are offered only if the pick still owns the dialog. Otherwise\n // a left pick's read offered its authors in a later pick's dialog.\n let authorsToOffer: AssetDetailItemDto | null = null\n try {\n const assetRes = await fetchAsset(damClient, endPointAsset, selectedAsset.id)\n // Like the image widget: if the application has its own mapping, it builds the texts from the asset.\n if (customAssetSelectMetadataToImageMap) {\n const mapped = customAssetSelectMetadataToImageMap(assetRes)\n description = mapped.description\n source = mapped.source\n } else {\n if (isString(assetRes.metadata.customData?.description)) {\n description = assetRes.metadata.customData.description.trim()\n }\n if (assetRes.authors.length > 0) {\n // Under the ext system of the asset's licence, like all DAM author names the\n // widgets write. Falls back to the picker's when the licence does not resolve.\n const authorsRes = await fetchAuthorListByIds(\n damClient,\n endPointAuthor,\n (await getExtSystemByLicence(assetRes.licence)) ?? assetSelectStore.requireSelectedSelectConfig().extSystem,\n assetRes.authors\n )\n source = authorsRes.map((author) => author.name).join(', ')\n } else if (assetRes.authors.length === 0) {\n const configExtSystem = getDamConfigExtSystem(imageWidgetUploadConfig.value!.extSystem)\n // Not while the server may still fill metadata from the file: saving\n // authors marks the asset described, and the server then fills nothing.\n if (configExtSystem?.[DamAssetType.Image]?.authors?.enabled && !assetMetadataMayStillChange(assetRes)) {\n authorsToOffer = assetRes\n }\n }\n }\n } catch (e) {\n showErrorsDefault(e)\n }\n if (!answerTakenFor(thisPick)) return\n if (authorsToOffer) offerDamAuthorsOf(authorsToOffer, selectedAsset.mainFile.id)\n const image = createDamImage(\n {\n fileId: selectedAsset.mainFile.id,\n licenceId: selectedAsset.licence,\n internal: selectedAsset.mainFileInternal,\n },\n { description, source },\n { position: 1, id: isNull(imageModel.value) ? undefined : imageModel.value }\n )\n imageMediaWidgetStore.setDetail(image)\n pickInDialog = detail.value\n } else {\n // Not a kind the widget accepts (audio not in a podcast, video without a video file): nothing to show.\n metadataDialog.value = false\n }\n metadataDialogLoading.value = false\n if (props.expandMetadata) {\n forceReloadViewWithExpandMetadata()\n }\n}\n\nconst assetDetailStore = useAssetDetailStore()\nconst { dialog: assetDialog } = storeToRefs(assetDetailStore)\nconst {\n damClient,\n endPointAsset,\n endPointImage,\n endPointAuthor,\n endPointCmsAsset,\n copyToLicenceEnabled,\n showSourceEnabled,\n sourceLabel,\n editAssetLabel,\n addFromDamLabel,\n replaceFromDamLabel,\n customAssetSelectMetadataToImageMap,\n} = useCommonAdminCoreDamOptions(damConfigName)\n\nconst { getExtSystemByLicence } = useDamConfigState(damClient, damConfigName)\n\nconst onEditAsset = async (assetFileId: DocId) => {\n let extSystem: IntegerId | null = null\n try {\n await assetDetailStore.open(\n props.queueKey,\n async () => {\n const assetRes = await fetchAssetByFileId(damClient, endPointAsset, assetFileId)\n // Falls back to the ext system of the widget's upload licence,\n // loaded by its root, when the licence cannot be resolved.\n const shownUnder = (await getExtSystemByLicence(assetRes.licence)) ?? imageWidgetUploadConfig.value!.extSystem\n // Must load before the detail shows the asset: it reads the ext\n // system configuration while rendering and threw without it.\n await loadAssetDetailExtSystem(damClient, shownUnder, assetRes.attributes.assetType, damConfigName)\n extSystem = shownUnder\n return assetRes\n },\n // Only for the asset the detail still shows: a stale answer must not change the ext system used for name lookups.\n () => {\n if (extSystem) cachedExtSystemId.value = extSystem\n }\n )\n } catch (e) {\n showErrorsDefault(e)\n }\n}\n\nconst onMetadataDialogClose = () => {\n imageMediaWidgetStore.setDetail(null)\n metadataDialog.value = false\n // Nothing is applied once the dialog is closed. Otherwise a pending\n // pick answer overwrote another widget's dialog form opened meanwhile.\n loadingInDialog = null\n metadataDialogLoading.value = false\n // Cancels this opening's wait for another widget's save.\n cancelSaveWait?.()\n}\n\nconst tryMediaConfirm = async () => {\n if (!isMediaAware(detail.value)) return\n // Ignored while this widget's image save is in flight, like a second image confirm. That save's\n // answer sets the image and dropped the media confirmed meanwhile. The button spins until then.\n if (metadataDialogSaving.value) return\n metadataDialogSaving.value = true\n try {\n metadataDialog.value = false\n const media = detail.value\n mediaModel.value = media\n imageModel.value = null\n imageMediaWidgetStore.setDetail(null)\n reloadMedia(media)\n emit('afterMetadataSaveSuccess')\n releaseFieldLockWith({ image: null, media })\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n metadataDialogSaving.value = false\n }\n}\n\nconst tryImageConfirm = async () => {\n if (!isImageCreateUpdateAware(detail.value)) return\n // The asset of a just-closed detail is still being read, and the read may change\n // what the form requires. The confirm waits for it, then the form confirms again.\n const confirmAgain = () => detailDialogMetadataComponent.value?.confirm()\n if (holdConfirmForDetailAssetRead(metadataDialogSaving.value, confirmAgain)) return\n // Ignores a second press during the save: a host button is not disabled meanwhile and\n // Enter reaches the dialog button. Otherwise the image is created or updated twice.\n if (metadataDialogSaving.value) return\n // A confirm belongs to the image it was pressed on. During waits the dialog\n // may close and reopen for another image or media, or the widget may unmount.\n // Until the save is sent, each step continues only if the widget exists and the dialog still shows that image.\n // Otherwise another image was saved without a press, or an image without fields was created for a media.\n const pressedOn = detail.value\n const confirmIsOver = () => disposed || detail.value !== pressedOn\n // Authors are also not sent if the widget turned read-only meanwhile.\n const authorsSendIsOver = () => confirmIsOver() || props.readonly\n metadataDialogSaving.value = true\n // The dialog shows the source from the held asset, not the pick (its read\n // failed). Once saved, the image has its own source and the asset is released.\n const letGoHeld = letGoOnceSavedWithSource(pressedOn)\n try {\n const authorsAsset = damAuthorsAsset.value\n if (authorsAsset) {\n if (authorsAsset.authors.length > 0) {\n // The asset was read at pick time and may have gained authors\n // since. The write would replace them, so it is read again first.\n // A failed read saves nothing. If it now has authors nothing is written: the pick is dropped,\n // an empty source takes their names, a persistent message is shown, and the dialog stays.\n let givenMeanwhile: string | null\n try {\n givenMeanwhile = await authorsGivenMeanwhile(authorsAsset)\n } catch (e) {\n if (!authorsSendIsOver() && !showErrorsDefault(e)) showUnknownError()\n return\n }\n if (authorsSendIsOver()) return\n if (!isNull(givenMeanwhile)) {\n offerNoDamAuthors()\n giveNamesToEmptySource(pressedOn, givenMeanwhile)\n showWarningT('common.damImage.image.meta.authorsGivenMeanwhile', -1)\n return\n }\n // Author names go into the image source only after the DAM accepts the authors, and are held aside until then.\n // Written earlier, they stayed in the hidden source after a refused\n // write, and a confirm with the pick cleared saved them with the image.\n // Looked up under the ext system of the asset's licence, like the read before the write.\n const authorsRes = await fetchAuthorListByIds(\n damClient,\n endPointAuthor,\n (await getExtSystemByLicence(authorsAsset.licence)) ??\n assetSelectStore.requireSelectedSelectConfig().extSystem,\n authorsAsset.authors\n )\n // Silently stops if the dialog was left or the widget is gone or read-only.\n if (authorsSendIsOver()) return\n const source = authorsRes.map((author) => author.name).join(', ')\n try {\n await updateAssetAuthors(damClient, endPointAsset, authorsAsset)\n } catch (e) {\n // Names the authors refused by validation as the forms name them. The image is not saved.\n showMetadataSaveError(e, assetSelectStore.requireSelectedSelectConfig().extSystem, damConfigName)\n return\n }\n // The DAM already has the authors. The image is not saved.\n if (confirmIsOver()) return\n pressedOn.texts.source = source\n offerNoDamAuthors()\n }\n }\n const image = imageFieldsOf(pressedOn)\n // The save is noted for the other widgets of the page, even if this widget is gone by the time it answers.\n const res = image.id\n ? await noteImageSave(damConfigName, image.id, ownImageSaves, imageApi.updateImage(imageClient, image.id, image))\n : await imageApi.createImage(imageClient, image)\n // The widget is gone, so nothing of the answer is written.\n // The dialog store is shared by the page and may already belong to the\n // next widget. Writing here emptied its form and then showed this image.\n if (disposed) return\n letGoHeld()\n // This confirm closes the dialog if it shows the pressed image or nothing, or if \"edit\n // metadata\" reopened it. That copy is stale and its confirm would overwrite this save.\n // A dialog of another pick or upload stays open and keeps the field lock. A dialog still\n // loading for a pick or \"edit metadata\" also stays open. Closing it broke that load.\n // If the dialog was closed meanwhile, the store may show another widget's dialog, so it is not emptied.\n // The `expandMetadata` form is not a dialog. It shows the widget's image, now the saved one.\n const ownDialogOpen = metadataDialog.value\n const shown = detail.value\n const dialogOfAnotherPick =\n !props.expandMetadata &&\n ownDialogOpen &&\n (isNull(shown) ? !isNull(loadingInDialog) : shown !== pressedOn && shown !== ownInDialog)\n if (!dialogOfAnotherPick) metadataDialog.value = false\n if (!image.id) createdImageId = res.id\n imageModel.value = res.id\n mediaModel.value = null\n if (!dialogOfAnotherPick && (ownDialogOpen || props.expandMetadata)) imageMediaWidgetStore.setDetail(null)\n // A dialog of another pick or upload opened during a create gets the created\n // id. Otherwise its confirm created a second image and left this one unused.\n // Only the pick of this widget is updated. An image another widget put in the store belongs to that widget.\n if (dialogOfAnotherPick && !image.id && shown === pickInDialog && isImageCreateUpdateAware(shown)) {\n if (isUndefined(shown.id)) shown.id = res.id\n }\n // Runs before the dialog close is observed, so this release with the saved value is the one\n // sent. When the editor is alone there is no lock and the value goes to the buffer here.\n // While the menu or another dialog holds the field, the lock\n // stays with it. Releasing here broke a picker opened since.\n // Not while a dialog of another pick or upload is open. It sets the final\n // value under this id, and other editors reload only when the id changes.\n if (props.collabStatus === CollabStatus.Inactive || (!clickMenuOpened.value && !anyWidgetDialogOpened.value)) {\n releaseFieldLockWith({ image: res.id, media: null })\n } else if (lockedLocal.value && !dialogOfAnotherPick) {\n changeFieldData.value({ image: res.id, media: null })\n }\n await reloadImage(res, res.id, true)\n emit('afterMetadataSaveSuccess')\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n metadataDialogSaving.value = false\n // A dialog closed during this confirm left the lock to it. It is released here once nothing else holds it.\n // A disposed widget also releases with its current field value.\n // The server keeps locks until release or leaving the room.\n // Skipped if the replacement widget has taken the lock since, because the release would free its lock.\n if (disposed ? !lockTurnTakenSince() : !clickMenuOpened.value && !anyWidgetDialogOpened.value) {\n releaseFieldLockLocal()\n }\n }\n}\n\nconst onMetadataDialogConfirm = async () => {\n if (props.readonly) return\n await tryMediaConfirm()\n await tryImageConfirm()\n}\n\n// While a delete is pending, closing the menu or a dialog does not release the\n// lock. The menu closes on the click and released with the image still there.\n// Same while a dialog confirm runs. Otherwise the lock went back with\n// the old value and the saved image never reached other editors.\nconst deletePending = ref(false)\nconst onImageMediaDelete = async () => {\n // Use the widget's own image. The store detail is shared and may be empty or another widget's.\n const imageId = imageModel.value\n if (props.callDeleteApiOnRemove && !isNull(imageId)) {\n deletePending.value = true\n try {\n await imageApi.deleteImage(imageClient, imageId)\n // A widget that is gone writes nothing into the page.\n if (!disposed) reset(!clickMenuOpened.value && !anyWidgetDialogOpened.value)\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n deletePending.value = false\n }\n // A disposed widget releases the lock with its field value, unless the replacement widget has taken the lock since.\n // Otherwise the release freed the lock held by that widget's open menu.\n if (disposed ? !lockTurnTakenSince() : !clickMenuOpened.value && !anyWidgetDialogOpened.value)\n releaseFieldLockLocal()\n return\n }\n reset()\n}\n\nconst forceReloadViewWithExpandMetadata = () => {\n if (isMediaAware(detail.value)) {\n reloadMedia(detail.value)\n return\n } else if (isImageCreateUpdateAware(detail.value)) {\n reloadImage(detail.value, null, true)\n }\n}\n\nconst onAssetUploadConfirm = (items: ImageCreateUpdateAware[]) => {\n if (props.readonly) return\n if (!items[0]) return\n\n if (!isNull(imageModel.value)) {\n items[0].id = imageModel.value\n }\n // An upload brings its own source, so authors of a previously picked asset are not offered.\n offerNoDamAuthors()\n dialogType.value = DamAssetType.Image\n imageMediaWidgetStore.setDetail(items[0])\n pickInDialog = detail.value\n metadataDialog.value = true\n if (props.expandMetadata) {\n forceReloadViewWithExpandMetadata()\n }\n}\n\nconst expandedUploadDialog = ref<InstanceType<typeof AFileInputDialog> | null>(null)\n\nconst onDropzoneClick = () => {\n if (isLocked.value || props.readonly) return\n acquireFieldLockLocal()\n if (!props.expandOptions) {\n clickMenuOpened.value = true\n return\n }\n expandedUploadDialog.value?.activate()\n}\n\nconst detailDialogMetadataComponent = ref<InstanceType<typeof ImageDetailDialogMetadata> | null>(null)\n\nconst metadataConfirm = () => {\n if (props.readonly) return\n detailDialogMetadataComponent.value?.confirm()\n}\n\nconst onOptionsButtonClick = () => {\n acquireFieldLockLocal()\n}\n\nconst anyWidgetDialogOpened = computed(() => {\n return (\n assetPicksPending.value > 0 ||\n metadataDialog.value ||\n assetSelectDialog.value ||\n fileInputDialog.value ||\n uploadQueueDialog.value === props.queueKey\n )\n})\n\nconst isLocked = computed(() => {\n return !isNull(lockedByUserLocal.value)\n})\n\nconst preselectType = computed(() => {\n if (mediaModel.value && mediaModel.value.damMedia.assetType) {\n return mediaModel.value.damMedia.assetType\n }\n return DamAssetType.Image as DamMediaTypeType\n})\n\nconst type = computed<DamAssetTypeType | null>(() => {\n if (isMediaAware(resImageMedia.value)) {\n return resImageMedia.value.damMedia.assetType === DamMediaType.Video ? DamAssetType.Video : DamAssetType.Audio\n } else if (isImageCreateUpdateAware(resImageMedia.value)) {\n return DamAssetType.Image\n }\n return null\n})\n\nwatch(\n clickMenuOpened,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n // On open, a lock left unconfirmed by a refused drop is requested again. It\n // is done here, not in the click handler, because the click also closes.\n if (newValue) return void acquireFieldLockLocal(true)\n if (anyWidgetDialogOpened.value || deletePending.value || metadataDialogSaving.value) return\n releaseFieldLockLocal()\n },\n { immediate: false }\n)\n\nwatch(\n anyWidgetDialogOpened,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n // Opened from an `expandOptions` button there is no menu to request the lock, so\n // the dialog does. Opened from the menu, it requests only an unconfirmed lock.\n if (newValue) return void acquireFieldLockLocal(true)\n if (deletePending.value || metadataDialogSaving.value) return\n releaseFieldLockLocal()\n },\n { immediate: false }\n)\n\n// When read-only, open dialogs and menus close as on cancel and the lock is released\n// once none holds it. A dialog left open kept the lock unseen and reappeared on edit.\n// A dialog with a save in progress is left to that save, which closes it. If the save fails, it closes then.\n// With `expandMetadata` the in-page form is kept for its host to confirm later. Emptying it lost the pick still shown.\nwatch([() => props.readonly, metadataDialogSaving], ([readonly]) => {\n if (!readonly) return\n clickMenuOpened.value = false\n fileInputDialog.value = false\n if (metadataDialog.value && !metadataDialogSaving.value && !props.expandMetadata) onMetadataDialogClose()\n})\n\n// A lost connection drops this editor's locks on the server. Kept as\n// held, the lock was never requested again and its release was refused.\n// On reconnect, an open menu or dialog requests the lock again. This includes\n// one opened while alone and one whose request was refused or unanswered.\nwatch(collabReconnecting, (reconnecting) => {\n if (!reconnecting) return\n lockedLocal.value = false\n lockRequestPending.value = false\n collabFieldLockReallyLocked.value = false\n})\nwatch(\n () => props.collabStatus,\n (status, previous) => {\n if (status === CollabStatus.Inactive || previous !== CollabStatus.Inactive) return\n if (clickMenuOpened.value || anyWidgetDialogOpened.value) acquireFieldLockLocal(true)\n }\n)\n\ndefineExpose({\n metadataConfirm,\n})\n</script>\n\n<template>\n <div\n class=\"a-image-widget\"\n :class=\"{ 'a-image-widget--locked': isLocked }\"\n :style=\"{\n width: width ? width + 'px' : undefined,\n maxWidth: maxWidth ? maxWidth + 'px' : undefined,\n }\"\n >\n <div class=\"a-image-widget__options\">\n <h4\n v-if=\"label\"\n class=\"font-weight-bold text-label-large\"\n >\n {{ label\n }}<span\n v-if=\"required\"\n class=\"a-required-mark\"\n />\n </h4>\n <div class=\"d-flex\">\n <div v-if=\"isLocked && collab\">\n <ACollabLockedByUser\n :id=\"lockedByUserLocal\"\n :users=\"collab.cachedUsers\"\n />\n </div>\n <div v-if=\"!readonly\">\n <div\n v-if=\"expandOptions\"\n class=\"d-flex flex-row\"\n >\n <VBtn\n v-if=\"imageMediaLoaded && !expandMetadata\"\n class=\"mr-2 mb-2\"\n :disabled=\"isLocked\"\n :text=\"\n type === DamAssetType.Image\n ? t('common.damImage.image.meta.edit')\n : t('common.damImage.media.meta.edit')\n \"\n @click=\"actionEditMeta\"\n />\n <VBtn\n class=\"mr-2 mb-2\"\n :disabled=\"isLocked\"\n @click=\"actionLibrary\"\n >\n <span v-if=\"imageMediaLoaded\">{{ replaceFromDamLabel }}</span>\n <span v-else>{{ addFromDamLabel }}</span>\n </VBtn>\n <AFileInputDialog\n ref=\"expandedUploadDialog\"\n v-model=\"fileInputDialog\"\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n toolbar-t=\"common.damImage.image.button.upload\"\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VBtn\n v-bind=\"fileInputProps\"\n :disabled=\"isLocked\"\n >\n {{ t('common.damImage.image.button.upload') }}\n </VBtn>\n </template>\n </AFileInputDialog>\n <span\n v-if=\"required\"\n class=\"a-required-mark ml-2\"\n />\n </div>\n <VBtn\n v-else\n variant=\"text\"\n size=\"x-small\"\n icon\n :disabled=\"isLocked\"\n :aria-label=\"t('common.damImage.image.button.options')\"\n @click.stop=\"onOptionsButtonClick\"\n >\n <VIcon icon=\"mdi-dots-horizontal\" />\n <VTooltip\n activator=\"parent\"\n location=\"top\"\n >\n {{ t('common.damImage.image.button.options') }}\n </VTooltip>\n <VMenu\n v-model=\"clickMenuOpened\"\n activator=\"parent\"\n location=\"bottom right\"\n eager\n >\n <VCard>\n <VList density=\"compact\">\n <VListItem\n v-if=\"imageMediaLoaded && !expandMetadata\"\n @click=\"actionEditMeta\"\n >\n <VListItemTitle>\n {{\n type === DamAssetType.Image\n ? t('common.damImage.image.meta.edit')\n : t('common.damImage.media.meta.edit')\n }}\n </VListItemTitle>\n </VListItem>\n <VListItem @click=\"actionLibrary\">\n <VListItemTitle>\n <span v-if=\"imageMediaLoaded\">{{ replaceFromDamLabel }}</span>\n <span v-else>{{ addFromDamLabel }}</span>\n </VListItemTitle>\n </VListItem>\n <AFileInputDialog\n v-model=\"fileInputDialog\"\n :file-input-key=\"uploadQueue?.fileInputKey\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n toolbar-t=\"common.damImage.image.button.upload\"\n @files-input=\"onFileInput\"\n >\n <template #activator=\"{ props: fileInputProps }\">\n <VListItem\n @click=\"\n ($event: any) => {\n fileInputProps.onClick($event)\n clickMenuOpened = false\n }\n \"\n >\n {{ t('common.damImage.image.button.upload') }}\n </VListItem>\n </template>\n </AFileInputDialog>\n <VListItem\n v-if=\"imageMediaLoaded\"\n @click=\"onImageMediaDelete\"\n >\n <VListItemTitle>\n {{\n type === DamAssetType.Image\n ? t('common.damImage.image.button.removeImage')\n : t('common.damImage.media.button.remove')\n }}\n </VListItemTitle>\n </VListItem>\n </VList>\n </VCard>\n </VMenu>\n </VBtn>\n </div>\n </div>\n </div>\n <div class=\"position-relative\">\n <VImg\n :lazy-src=\"imagePlaceholderPath\"\n :src=\"resolvedSrc\"\n :width=\"width\"\n :height=\"height\"\n cover\n max-width=\"100%\"\n class=\"disable-radius\"\n >\n <template #placeholder>\n <div class=\"d-flex align-center justify-center h-100\">\n <VProgressCircular\n indeterminate\n color=\"grey-lighten-4\"\n />\n </div>\n </template>\n </VImg>\n <div\n v-if=\"type\"\n class=\"a-image-widget__icon\"\n >\n <div v-if=\"type === DamAssetType.Audio\">\n <VIcon\n size=\"80\"\n icon=\"mdi-music\"\n color=\"#505050\"\n />\n </div>\n <div v-else-if=\"type === DamAssetType.Video\">\n <VIcon\n size=\"80\"\n icon=\"mdi-video\"\n color=\"#505050\"\n />\n </div>\n </div>\n <AImageDropzone\n v-if=\"!readonly\"\n variant=\"fill\"\n transparent\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n :hide-text=\"hideDropzoneText || isLocked\"\n @click=\"onDropzoneClick\"\n @drop=\"onDrop\"\n />\n </div>\n <slot\n name=\"append\"\n :image-media=\"resImageMedia\"\n />\n <ImageDetailDialogMetadata\n v-if=\"!readonly\"\n ref=\"detailDialogMetadataComponent\"\n v-model=\"metadataDialog\"\n :show-dam-authors=\"!!damAuthorsAsset\"\n :dam-authors=\"damAuthorsAsset?.authors\"\n :show-source-enabled=\"showSourceEnabled\"\n :source-label=\"sourceLabel\"\n :edit-asset-label=\"editAssetLabel\"\n :expand=\"expandMetadata\"\n :saving=\"metadataDialogSaving || confirmWaits\"\n :loading=\"metadataDialogLoading\"\n :type=\"dialogType\"\n @edit-asset=\"onEditAsset\"\n @update:dam-authors=\"pickDamAuthors\"\n @confirm=\"onMetadataDialogConfirm\"\n @close=\"onMetadataDialogClose\"\n >\n <template #preview=\"{ imageMedia: appendMedia }\">\n <slot\n name=\"preview\"\n :image-media=\"appendMedia\"\n />\n </template>\n </ImageDetailDialogMetadata>\n </div>\n <AAssetSelectMedia\n v-model=\"assetSelectDialog\"\n :select-licences=\"selectLicences\"\n :upload-licence=\"uploadLicence\"\n :min-count=\"1\"\n :max-count=\"1\"\n :config-name=\"damConfigName\"\n return-type=\"asset\"\n :preselect-asset-type=\"preselectType\"\n :preselect-in-podcast=\"preselectType === DamAssetType.Audio || null\"\n @confirm=\"onAssetSelectConfirm\"\n />\n <AssetDetailDialog\n v-if=\"assetDialog === queueKey\"\n :queue-key=\"queueKey\"\n :config-name=\"damConfigName\"\n :ext-system=\"cachedExtSystemId\"\n @close=\"onAssetDetailClose\"\n />\n <UploadQueueDialogSingle\n v-if=\"uploadQueueDialog === queueKey && imageWidgetUploadConfig\"\n :queue-key=\"queueKey\"\n :ext-system=\"imageWidgetUploadConfig.extSystem\"\n :licence-id=\"imageWidgetUploadConfig.licence\"\n :file-input-key=\"uploadQueue?.fileInputKey ?? -1\"\n :accept=\"uploadAccept\"\n :max-sizes=\"uploadSizes\"\n @apply=\"onAssetUploadConfirm\"\n />\n</template>\n"],"mappings":"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"}