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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (679) hide show
  1. package/dist/AnzuSystemsCommonAdmin.d.ts +42 -32
  2. package/dist/AnzuSystemsCommonAdmin.js.map +1 -1
  3. package/dist/common-admin.css +1 -1
  4. package/dist/common-admin.js +282 -282
  5. package/dist/domains/anzuUser/api/anzuUserApi.d.ts +9 -12
  6. package/dist/domains/anzuUser/api/anzuUserApi.js.map +1 -1
  7. package/dist/domains/anzuUser/components/AAnzuUserDatatable.js.map +1 -1
  8. package/dist/domains/anzuUser/components/AAnzuUserDatatable.vue.d.ts +38 -44
  9. package/dist/domains/anzuUser/components/AAnzuUserDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  10. package/dist/domains/anzuUser/components/AAnzuUserFilter.js.map +1 -1
  11. package/dist/domains/anzuUser/components/AAnzuUserFilter.vue.d.ts +12 -13
  12. package/dist/domains/anzuUser/components/AAnzuUserFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  13. package/dist/domains/anzuUser/components/AAnzuUserForm.js.map +1 -1
  14. package/dist/domains/anzuUser/components/AAnzuUserForm.vue.d.ts +18 -20
  15. package/dist/domains/anzuUser/components/AAnzuUserForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  16. package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.js.map +1 -1
  17. package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  18. package/dist/domains/anzuUser/components/AUserBulkActionDialog.js.map +1 -1
  19. package/dist/domains/anzuUser/components/AUserBulkActionDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  20. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.js.map +1 -1
  21. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.vue.d.ts +2 -3
  22. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  23. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.js.map +1 -1
  24. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.vue.d.ts +9 -15
  25. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  26. package/dist/domains/anzuUser/components/AUserEnabledSwitch.js.map +1 -1
  27. package/dist/domains/anzuUser/components/AUserEnabledSwitch.vue.d.ts +8 -7
  28. package/dist/domains/anzuUser/components/AUserEnabledSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  29. package/dist/domains/anzuUser/components/AUserManageButton.js.map +1 -1
  30. package/dist/domains/anzuUser/components/AUserManageButton.vue.d.ts +0 -1
  31. package/dist/domains/anzuUser/components/AUserManageButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  32. package/dist/domains/anzuUser/components/AUserMetadataForm.js.map +1 -1
  33. package/dist/domains/anzuUser/components/AUserMetadataForm.vue.d.ts +8 -9
  34. package/dist/domains/anzuUser/components/AUserMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  35. package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.js.map +1 -1
  36. package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  37. package/dist/domains/anzuUser/components/AUserOtherSystemsTable.js.map +1 -1
  38. package/dist/domains/anzuUser/components/AUserOtherSystemsTable.vue.d.ts +1 -2
  39. package/dist/domains/anzuUser/components/AUserOtherSystemsTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  40. package/dist/domains/anzuUser/components/AUserSystemOverview.js.map +1 -1
  41. package/dist/domains/anzuUser/components/AUserSystemOverview.vue_vue_type_script_setup_true_lang.js.map +1 -1
  42. package/dist/domains/anzuUser/components/AUserSystemPanel.js.map +1 -1
  43. package/dist/domains/anzuUser/components/AUserSystemPanel.vue.d.ts +2 -2
  44. package/dist/domains/anzuUser/components/AUserSystemPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  45. package/dist/domains/anzuUser/components/AUserSystemStatusChip.js.map +1 -1
  46. package/dist/domains/anzuUser/components/AUserSystemStatusChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  47. package/dist/domains/anzuUser/components/AUserTabsShell.js.map +1 -1
  48. package/dist/domains/anzuUser/components/AUserTabsShell.vue.d.ts +17 -22
  49. package/dist/domains/anzuUser/components/AUserTabsShell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  50. package/dist/domains/anzuUser/composables/anzuUserActions.d.ts +5 -9
  51. package/dist/domains/anzuUser/composables/anzuUserActions.js.map +1 -1
  52. package/dist/domains/anzuUser/composables/anzuUserValidations.d.ts +4 -6
  53. package/dist/domains/anzuUser/composables/anzuUserValidations.js.map +1 -1
  54. package/dist/domains/anzuUser/composables/cachedAnzuUsers.d.ts +3 -3
  55. package/dist/domains/anzuUser/composables/cachedAnzuUsers.js.map +1 -1
  56. package/dist/domains/anzuUser/composables/userCrossSystemSearch.d.ts +2 -4
  57. package/dist/domains/anzuUser/composables/userCrossSystemSearch.js.map +1 -1
  58. package/dist/domains/anzuUser/composables/userCrossSystemWrites.d.ts +5 -11
  59. package/dist/domains/anzuUser/composables/userCrossSystemWrites.js.map +1 -1
  60. package/dist/domains/anzuUser/composables/userSystemDescriptor.d.ts +33 -57
  61. package/dist/domains/anzuUser/composables/userSystemDescriptor.js.map +1 -1
  62. package/dist/domains/anzuUser/composables/userSystemProbe.d.ts +7 -27
  63. package/dist/domains/anzuUser/composables/userSystemProbe.js.map +1 -1
  64. package/dist/domains/anzuUser/filter/anzuUserFilter.d.ts +6 -16
  65. package/dist/domains/anzuUser/filter/anzuUserFilter.js.map +1 -1
  66. package/dist/domains/anzuUser/store/anzuUserStore.d.ts +1 -5
  67. package/dist/domains/anzuUser/store/anzuUserStore.js.map +1 -1
  68. package/dist/domains/anzuUser/store/userCrossSystemStore.d.ts +3 -14
  69. package/dist/domains/anzuUser/store/userCrossSystemStore.js.map +1 -1
  70. package/dist/domains/anzuUser/utils/userMetadataDiff.d.ts +7 -19
  71. package/dist/domains/anzuUser/utils/userMetadataDiff.js.map +1 -1
  72. package/dist/domains/anzuUser/utils/userSystemState.d.ts +12 -30
  73. package/dist/domains/anzuUser/utils/userSystemState.js.map +1 -1
  74. package/dist/domains/anzuUser/utils/userTabs.d.ts +1 -3
  75. package/dist/domains/anzuUser/utils/userTabs.js.map +1 -1
  76. package/dist/domains/api/composables/defineApiClient.d.ts +4 -8
  77. package/dist/domains/api/composables/defineApiClient.js.map +1 -1
  78. package/dist/domains/api/composables/request.d.ts +18 -48
  79. package/dist/domains/api/composables/request.js.map +1 -1
  80. package/dist/domains/api/composables/useApiFetchByIds.d.ts +7 -21
  81. package/dist/domains/api/composables/useApiFetchByIds.js.map +1 -1
  82. package/dist/domains/api/composables/useApiFetchItems.d.ts +18 -57
  83. package/dist/domains/api/composables/useApiFetchItems.js.map +1 -1
  84. package/dist/domains/api/composables/useApiFetchList.d.ts +7 -23
  85. package/dist/domains/api/composables/useApiFetchList.js.map +1 -1
  86. package/dist/domains/api/composables/useApiFetchListBatch.d.ts +5 -22
  87. package/dist/domains/api/composables/useApiFetchListBatch.js.map +1 -1
  88. package/dist/domains/api/composables/useApiQueryBuilder.js.map +1 -1
  89. package/dist/domains/api/composables/useApiRequest.d.ts +16 -39
  90. package/dist/domains/api/composables/useApiRequest.js.map +1 -1
  91. package/dist/domains/api/utils/apiErrors.d.ts +28 -55
  92. package/dist/domains/api/utils/apiErrors.js.map +1 -1
  93. package/dist/domains/api/utils/listBody.d.ts +22 -43
  94. package/dist/domains/api/utils/listBody.js.map +1 -1
  95. package/dist/domains/auth/components/Acl.js.map +1 -1
  96. package/dist/domains/auth/components/Acl.vue_vue_type_script_setup_true_lang.js.map +1 -1
  97. package/dist/domains/auth/composables/aclAllowed.d.ts +2 -3
  98. package/dist/domains/auth/composables/aclAllowed.js.map +1 -1
  99. package/dist/domains/auth/composables/defineAuth.js.map +1 -1
  100. package/dist/domains/auth/composables/refreshSession.d.ts +10 -13
  101. package/dist/domains/auth/composables/refreshSession.js.map +1 -1
  102. package/dist/domains/cached/components/ACachedChip.js.map +1 -1
  103. package/dist/domains/cached/components/ACachedChip.vue.d.ts +13 -11
  104. package/dist/domains/cached/components/ACachedChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  105. package/dist/domains/cached/components/ACachedUserChip.js +1 -1
  106. package/dist/domains/cached/components/ACachedUserChip.js.map +1 -1
  107. package/dist/domains/cached/components/ACachedUserChip.vue.d.ts +3 -3
  108. package/dist/domains/cached/components/ACachedUserChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  109. package/dist/domains/cached/composables/createUserAndTimeTrackingFields.d.ts +9 -9
  110. package/dist/domains/cached/composables/createUserAndTimeTrackingFields.js.map +1 -1
  111. package/dist/domains/cached/composables/defineCached.d.ts +13 -11
  112. package/dist/domains/cached/composables/defineCached.js.map +1 -1
  113. package/dist/domains/cached/composables/useCachedItem.d.ts +7 -8
  114. package/dist/domains/cached/composables/useCachedItem.js.map +1 -1
  115. package/dist/domains/collab/components/ACollabLockedByUser.js.map +1 -1
  116. package/dist/domains/collab/components/ACollabLockedByUser.vue_vue_type_script_setup_true_lang.js.map +1 -1
  117. package/dist/domains/collab/composables/collabAnyDataChange.js.map +1 -1
  118. package/dist/domains/collab/composables/collabField.d.ts +5 -3
  119. package/dist/domains/collab/composables/collabField.js.map +1 -1
  120. package/dist/domains/collab/composables/collabInit.js +58 -54
  121. package/dist/domains/collab/composables/collabInit.js.map +1 -1
  122. package/dist/domains/collab/composables/collabRecovery.d.ts +49 -0
  123. package/dist/domains/collab/composables/collabRecovery.js +99 -0
  124. package/dist/domains/collab/composables/collabRecovery.js.map +1 -0
  125. package/dist/domains/collab/composables/collabRoom.js +106 -106
  126. package/dist/domains/collab/composables/collabRoom.js.map +1 -1
  127. package/dist/domains/collab/composables/collabState.d.ts +11 -4
  128. package/dist/domains/collab/composables/collabState.js +34 -25
  129. package/dist/domains/collab/composables/collabState.js.map +1 -1
  130. package/dist/domains/collab/composables/commonAdminCollabOptions.d.ts +4 -2
  131. package/dist/domains/collab/types/Collab.d.ts +31 -5
  132. package/dist/domains/collab/types/Collab.js +23 -11
  133. package/dist/domains/collab/types/Collab.js.map +1 -1
  134. package/dist/domains/customDataForm/components/ACustomDataForm.js.map +1 -1
  135. package/dist/domains/customDataForm/components/ACustomDataForm.vue.d.ts +7 -5
  136. package/dist/domains/customDataForm/components/ACustomDataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  137. package/dist/domains/customDataForm/components/ACustomDataFormElement.js.map +1 -1
  138. package/dist/domains/customDataForm/components/ACustomDataFormElement.vue_vue_type_script_setup_true_lang.js.map +1 -1
  139. package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.js.map +1 -1
  140. package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.vue.d.ts +5 -3
  141. package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.vue_vue_type_script_setup_true_lang.js.map +1 -1
  142. package/dist/domains/customDataForm/composables/useCustomDataForm.js.map +1 -1
  143. package/dist/domains/customDataForm/types/CustomDataForm.d.ts +4 -1
  144. package/dist/domains/dam/api/damAssetApi.d.ts +7 -7
  145. package/dist/domains/dam/api/damAssetApi.js.map +1 -1
  146. package/dist/domains/dam/api/damAssetLicenceApi.d.ts +1 -1
  147. package/dist/domains/dam/api/damAssetLicenceApi.js.map +1 -1
  148. package/dist/domains/dam/api/damConstants.js.map +1 -1
  149. package/dist/domains/dam/api/damEndPoints.js.map +1 -1
  150. package/dist/domains/dam/api/damImageApi.js.map +1 -1
  151. package/dist/domains/dam/api/uploadApi.js.map +1 -1
  152. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.js.map +1 -1
  153. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue.d.ts +7 -5
  154. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  155. package/dist/domains/dam/assetDetail/components/AssetDetailDialog.js.map +1 -1
  156. package/dist/domains/dam/assetDetail/components/AssetDetailDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  157. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.js.map +1 -1
  158. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue.d.ts +1 -1
  159. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
  160. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsWrapper.vue.d.ts +5 -3
  161. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.js.map +1 -1
  162. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
  163. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.js.map +1 -1
  164. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  165. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.js.map +1 -1
  166. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.vue_vue_type_script_setup_true_lang.js.map +1 -1
  167. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.js.map +1 -1
  168. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue.d.ts +1 -1
  169. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  170. package/dist/domains/dam/assetDetail/components/AssetImage.js.map +1 -1
  171. package/dist/domains/dam/assetDetail/components/AssetImage.vue.d.ts +1 -1
  172. package/dist/domains/dam/assetDetail/components/AssetImage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  173. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.js.map +1 -1
  174. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue.d.ts +2 -2
  175. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue_vue_type_script_setup_true_lang.js.map +1 -1
  176. package/dist/domains/dam/assetDetail/components/AssetInfobox.js.map +1 -1
  177. package/dist/domains/dam/assetDetail/components/AssetInfobox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  178. package/dist/domains/dam/assetDetail/components/AssetMetadata.js.map +1 -1
  179. package/dist/domains/dam/assetDetail/components/AssetMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  180. package/dist/domains/dam/assetDetail/composables/assetDetailExtSystem.d.ts +5 -6
  181. package/dist/domains/dam/assetDetail/composables/assetDetailExtSystem.js.map +1 -1
  182. package/dist/domains/dam/assetDetail/composables/assetDetailView.d.ts +10 -10
  183. package/dist/domains/dam/assetDetail/composables/assetDetailView.js.map +1 -1
  184. package/dist/domains/dam/assetDetail/store/assetDetailStore.js.map +1 -1
  185. package/dist/domains/dam/assetDetail/utils/assetMetadataMayStillChange.d.ts +4 -3
  186. package/dist/domains/dam/assetDetail/utils/assetMetadataMayStillChange.js.map +1 -1
  187. package/dist/domains/dam/assetSelect/api/damPodcastApi.js.map +1 -1
  188. package/dist/domains/dam/assetSelect/components/AAssetListInner.js.map +1 -1
  189. package/dist/domains/dam/assetSelect/components/AAssetListInner.vue.d.ts +789 -787
  190. package/dist/domains/dam/assetSelect/components/AAssetListInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  191. package/dist/domains/dam/assetSelect/components/AAssetSelect.js.map +1 -1
  192. package/dist/domains/dam/assetSelect/components/AAssetSelect.vue.d.ts +395 -393
  193. package/dist/domains/dam/assetSelect/components/AAssetSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  194. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.js.map +1 -1
  195. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.vue.d.ts +14 -12
  196. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.vue_vue_type_script_setup_true_lang.js.map +1 -1
  197. package/dist/domains/dam/assetSelect/components/AssetDistributionServiceNameFilter.js.map +1 -1
  198. package/dist/domains/dam/assetSelect/components/AssetDistributionServiceNameFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  199. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.js.map +1 -1
  200. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.vue.d.ts +9 -7
  201. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  202. package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.js.map +1 -1
  203. package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  204. package/dist/domains/dam/assetSelect/composables/assetSelectListActions.js.map +1 -1
  205. package/dist/domains/dam/assetSelect/store/assetSelectStore.js.map +1 -1
  206. package/dist/domains/dam/author/api/authorApi.js.map +1 -1
  207. package/dist/domains/dam/author/components/AuthorCreateButton.js.map +1 -1
  208. package/dist/domains/dam/author/components/AuthorCreateButton.vue.d.ts +1 -1
  209. package/dist/domains/dam/author/components/AuthorCreateButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  210. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.js.map +1 -1
  211. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.vue.d.ts +9 -6
  212. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  213. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.js.map +1 -1
  214. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue_vue_type_script_setup_true_lang.js.map +1 -1
  215. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.js +1 -1
  216. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.js.map +1 -1
  217. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue.d.ts +2 -2
  218. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
  219. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.js.map +1 -1
  220. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.vue.d.ts +1 -1
  221. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  222. package/dist/domains/dam/author/composables/cachedAuthors.d.ts +5 -4
  223. package/dist/domains/dam/author/composables/cachedAuthors.js.map +1 -1
  224. package/dist/domains/dam/author/composables/cachedUsers.d.ts +5 -4
  225. package/dist/domains/dam/author/composables/cachedUsers.js.map +1 -1
  226. package/dist/domains/dam/author/composables/damAuthorConfig.d.ts +2 -2
  227. package/dist/domains/dam/author/composables/damAuthorConfig.js.map +1 -1
  228. package/dist/domains/dam/components/DamAdminAssetLink.js.map +1 -1
  229. package/dist/domains/dam/components/DamAdminAssetLink.vue_vue_type_script_setup_true_lang.js.map +1 -1
  230. package/dist/domains/dam/composables/commonAdminCoreDamOptions.d.ts +10 -8
  231. package/dist/domains/dam/composables/commonAdminCoreDamOptions.js.map +1 -1
  232. package/dist/domains/dam/composables/damConfigName.d.ts +8 -9
  233. package/dist/domains/dam/composables/damConfigName.js.map +1 -1
  234. package/dist/domains/dam/composables/damNotifications.d.ts +9 -9
  235. package/dist/domains/dam/composables/damNotifications.js.map +1 -1
  236. package/dist/domains/dam/composables/damNotificationsConnection.d.ts +4 -4
  237. package/dist/domains/dam/composables/damNotificationsConnection.js.map +1 -1
  238. package/dist/domains/dam/composables/damNotificationsEventBus.d.ts +2 -2
  239. package/dist/domains/dam/composables/damNotificationsEventBus.js.map +1 -1
  240. package/dist/domains/dam/composables/extSystemIdForCached.d.ts +5 -4
  241. package/dist/domains/dam/composables/extSystemIdForCached.js.map +1 -1
  242. package/dist/domains/dam/config/api/damAssetCustomFormApi.js.map +1 -1
  243. package/dist/domains/dam/config/api/damConfigApi.js.map +1 -1
  244. package/dist/domains/dam/config/composables/damConfigState.d.ts +5 -5
  245. package/dist/domains/dam/config/composables/damConfigState.js.map +1 -1
  246. package/dist/domains/dam/config/store/damConfigStore.d.ts +5 -4
  247. package/dist/domains/dam/config/store/damConfigStore.js.map +1 -1
  248. package/dist/domains/dam/config/utils/damFilterUserAllowedUploadConfigs.d.ts +3 -1
  249. package/dist/domains/dam/config/utils/damFilterUserAllowedUploadConfigs.js.map +1 -1
  250. package/dist/domains/dam/cropper/components/ACropper.js.map +1 -1
  251. package/dist/domains/dam/cropper/components/ACropper.vue.d.ts +8 -16
  252. package/dist/domains/dam/cropper/components/ACropper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  253. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.js.map +1 -1
  254. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  255. package/dist/domains/dam/cropper/store/imageRoiStore.d.ts +9 -12
  256. package/dist/domains/dam/cropper/store/imageRoiStore.js.map +1 -1
  257. package/dist/domains/dam/cropper/utils/cropperGeometry.d.ts +24 -38
  258. package/dist/domains/dam/cropper/utils/cropperGeometry.js.map +1 -1
  259. package/dist/domains/dam/cropper/utils/cropperJsService.d.ts +3 -7
  260. package/dist/domains/dam/cropper/utils/cropperJsService.js +10 -3
  261. package/dist/domains/dam/cropper/utils/cropperJsService.js.map +1 -1
  262. package/dist/domains/dam/cropper/utils/cropperTypes.d.ts +3 -6
  263. package/dist/domains/dam/cropper/utils/damAssetImageRoiSelectLoader.d.ts +5 -5
  264. package/dist/domains/dam/cropper/utils/damAssetImageRoiSelectLoader.js.map +1 -1
  265. package/dist/domains/dam/imageWidget/components/AImageMediaWidget.js.map +1 -1
  266. package/dist/domains/dam/imageWidget/components/AImageMediaWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
  267. package/dist/domains/dam/imageWidget/components/AImagePublicInput.js.map +1 -1
  268. package/dist/domains/dam/imageWidget/components/AImagePublicInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  269. package/dist/domains/dam/imageWidget/components/AImageWidget.js.map +1 -1
  270. package/dist/domains/dam/imageWidget/components/AImageWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
  271. package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.js.map +1 -1
  272. package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.vue_vue_type_script_setup_true_lang.js.map +1 -1
  273. package/dist/domains/dam/imageWidget/components/AImageWidgetSimple.vue.d.ts +43 -41
  274. package/dist/domains/dam/imageWidget/components/AMediaWidgetSimple.vue.d.ts +31 -29
  275. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.js.map +1 -1
  276. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue.d.ts +29 -27
  277. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  278. package/dist/domains/dam/imageWidget/components/ImageMassOperations.js.map +1 -1
  279. package/dist/domains/dam/imageWidget/components/ImageMassOperations.vue.d.ts +1 -1
  280. package/dist/domains/dam/imageWidget/components/ImageMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
  281. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.js.map +1 -1
  282. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue.d.ts +68 -66
  283. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  284. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.js.map +1 -1
  285. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue.d.ts +402 -400
  286. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  287. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.js.map +1 -1
  288. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue.d.ts +384 -382
  289. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  290. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.js.map +1 -1
  291. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  292. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.js.map +1 -1
  293. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  294. package/dist/domains/dam/imageWidget/components/MediaWidgetSimpleDialog.vue.d.ts +7 -5
  295. package/dist/domains/dam/imageWidget/composables/commonAdminImageOptions.js.map +1 -1
  296. package/dist/domains/dam/imageWidget/composables/imageApiCms.js.map +1 -1
  297. package/dist/domains/dam/imageWidget/composables/imageDialogDamAuthors.d.ts +11 -13
  298. package/dist/domains/dam/imageWidget/composables/imageDialogDamAuthors.js.map +1 -1
  299. package/dist/domains/dam/imageWidget/composables/useImageMassOperations.js.map +1 -1
  300. package/dist/domains/dam/imageWidget/store/imageMediaWidgetStore.js.map +1 -1
  301. package/dist/domains/dam/imageWidget/store/imageStore.js.map +1 -1
  302. package/dist/domains/dam/imageWidget/utils/damImage.d.ts +5 -6
  303. package/dist/domains/dam/imageWidget/utils/damImage.js.map +1 -1
  304. package/dist/domains/dam/imageWidget/utils/fieldLockTurns.d.ts +1 -2
  305. package/dist/domains/dam/imageWidget/utils/fieldLockTurns.js.map +1 -1
  306. package/dist/domains/dam/imageWidget/utils/imageSaves.d.ts +10 -14
  307. package/dist/domains/dam/imageWidget/utils/imageSaves.js.map +1 -1
  308. package/dist/domains/dam/imageWidget/utils/metadataToImageMap.js.map +1 -1
  309. package/dist/domains/dam/imageWidget/utils/waitLimit.d.ts +4 -6
  310. package/dist/domains/dam/imageWidget/utils/waitLimit.js.map +1 -1
  311. package/dist/domains/dam/keyword/api/keywordApi.js.map +1 -1
  312. package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.js.map +1 -1
  313. package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.vue.d.ts +1 -1
  314. package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  315. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.js.map +1 -1
  316. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.vue.d.ts +8 -5
  317. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  318. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.js +1 -1
  319. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.js.map +1 -1
  320. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue.d.ts +2 -2
  321. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
  322. package/dist/domains/dam/keyword/composables/cachedKeywords.d.ts +5 -4
  323. package/dist/domains/dam/keyword/composables/cachedKeywords.js.map +1 -1
  324. package/dist/domains/dam/keyword/composables/damKeywordConfig.d.ts +2 -2
  325. package/dist/domains/dam/keyword/composables/damKeywordConfig.js.map +1 -1
  326. package/dist/domains/dam/types/Asset.d.ts +1 -1
  327. package/dist/domains/dam/types/Asset.js.map +1 -1
  328. package/dist/domains/dam/types/UploadQueue.d.ts +5 -4
  329. package/dist/domains/dam/types/UploadQueue.js.map +1 -1
  330. package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.js.map +1 -1
  331. package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
  332. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.js.map +1 -1
  333. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue.d.ts +2 -2
  334. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  335. package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.js.map +1 -1
  336. package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  337. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.js.map +1 -1
  338. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  339. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.js.map +1 -1
  340. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.vue.d.ts +6 -4
  341. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  342. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.js.map +1 -1
  343. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue.d.ts +1 -1
  344. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  345. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.js.map +1 -1
  346. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  347. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.js.map +1 -1
  348. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.vue.d.ts +6 -6
  349. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  350. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.js.map +1 -1
  351. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue.d.ts +13 -13
  352. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  353. package/dist/domains/dam/uploadQueue/components/uploadQueueBindings.d.ts +13 -13
  354. package/dist/domains/dam/uploadQueue/components/uploadQueueBindings.js.map +1 -1
  355. package/dist/domains/dam/uploadQueue/composables/damUploadChunkSize.d.ts +2 -2
  356. package/dist/domains/dam/uploadQueue/composables/damUploadChunkSize.js.map +1 -1
  357. package/dist/domains/dam/uploadQueue/composables/uploadMeter.d.ts +12 -12
  358. package/dist/domains/dam/uploadQueue/composables/uploadMeter.js.map +1 -1
  359. package/dist/domains/dam/uploadQueue/composables/uploadQueueItemRefresh.d.ts +5 -5
  360. package/dist/domains/dam/uploadQueue/composables/uploadQueueItemRefresh.js.map +1 -1
  361. package/dist/domains/dam/uploadQueue/composables/uploadService.d.ts +2 -3
  362. package/dist/domains/dam/uploadQueue/composables/uploadService.js.map +1 -1
  363. package/dist/domains/dam/uploadQueue/composables/useUploadQueueDialog.d.ts +5 -4
  364. package/dist/domains/dam/uploadQueue/composables/useUploadQueueDialog.js.map +1 -1
  365. package/dist/domains/dam/uploadQueue/core/uploadQueueCore.d.ts +3 -2
  366. package/dist/domains/dam/uploadQueue/core/uploadQueueCore.js.map +1 -1
  367. package/dist/domains/dam/uploadQueue/core/uploadQueueCoreTypes.d.ts +8 -5
  368. package/dist/domains/dam/uploadQueue/core/uploadQueueCoreTypes.js.map +1 -1
  369. package/dist/domains/dam/uploadQueue/core/uploadQueueFill.d.ts +3 -3
  370. package/dist/domains/dam/uploadQueue/core/uploadQueueFill.js.map +1 -1
  371. package/dist/domains/dam/uploadQueue/presets/queuePresets.d.ts +8 -5
  372. package/dist/domains/dam/uploadQueue/presets/queuePresets.js.map +1 -1
  373. package/dist/domains/dam/uploadQueue/presets/uploadPresets.d.ts +15 -13
  374. package/dist/domains/dam/uploadQueue/presets/uploadPresets.js.map +1 -1
  375. package/dist/domains/dam/uploadQueue/settlement/uploadPollSchedule.d.ts +7 -7
  376. package/dist/domains/dam/uploadQueue/settlement/uploadPollSchedule.js.map +1 -1
  377. package/dist/domains/dam/uploadQueue/settlement/uploadPoller.d.ts +4 -4
  378. package/dist/domains/dam/uploadQueue/settlement/uploadPoller.js.map +1 -1
  379. package/dist/domains/dam/uploadQueue/settlement/uploadSettle.d.ts +28 -30
  380. package/dist/domains/dam/uploadQueue/settlement/uploadSettle.js.map +1 -1
  381. package/dist/domains/dam/uploadQueue/settlement/uploadSettlement.d.ts +2 -2
  382. package/dist/domains/dam/uploadQueue/settlement/uploadSettlement.js.map +1 -1
  383. package/dist/domains/dam/uploadQueue/settlement/uploadSettlementRuntime.d.ts +2 -2
  384. package/dist/domains/dam/uploadQueue/settlement/uploadSettlementRuntime.js.map +1 -1
  385. package/dist/domains/dam/uploadQueue/settlement/uploadSettlementTypes.d.ts +63 -73
  386. package/dist/domains/dam/uploadQueue/settlement/uploadSettlementTypes.js.map +1 -1
  387. package/dist/domains/dam/uploadQueue/store/uploadQueuesStore.d.ts +8 -9
  388. package/dist/domains/dam/uploadQueue/store/uploadQueuesStore.js.map +1 -1
  389. package/dist/domains/dam/user/api/userApi.d.ts +2 -2
  390. package/dist/domains/dam/user/api/userApi.js.map +1 -1
  391. package/dist/domains/dam/user/components/DamDistributionServiceSelect.js.map +1 -1
  392. package/dist/domains/dam/user/components/DamDistributionServiceSelect.vue.d.ts +1 -1
  393. package/dist/domains/dam/user/components/DamDistributionServiceSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  394. package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.js.map +1 -1
  395. package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.vue.d.ts +1 -1
  396. package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  397. package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.js.map +1 -1
  398. package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.vue.d.ts +1 -1
  399. package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  400. package/dist/domains/dam/user/composables/damUserSelectActions.d.ts +1 -1
  401. package/dist/domains/dam/user/composables/damUserSelectActions.js.map +1 -1
  402. package/dist/domains/dam/user/types/DamDistributionServiceType.d.ts +2 -2
  403. package/dist/domains/dam/user/types/DamDistributionServiceType.js.map +1 -1
  404. package/dist/domains/dam/user/types/DamExternalProviderAssetType.d.ts +1 -1
  405. package/dist/domains/dam/user/types/DamExternalProviderAssetType.js.map +1 -1
  406. package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.js.map +1 -1
  407. package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  408. package/dist/domains/filters/bookmarks/store/bookmarksStore.d.ts +3 -3
  409. package/dist/domains/filters/bookmarks/store/bookmarksStore.js.map +1 -1
  410. package/dist/domains/filters/components/AFilterDatetimePicker.js.map +1 -1
  411. package/dist/domains/filters/components/AFilterDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  412. package/dist/domains/filters/components/AFilterInteger.js.map +1 -1
  413. package/dist/domains/filters/components/AFilterInteger.vue_vue_type_script_setup_true_lang.js.map +1 -1
  414. package/dist/domains/filters/components/AFilterString.js.map +1 -1
  415. package/dist/domains/filters/components/AFilterString.vue_vue_type_script_setup_true_lang.js.map +1 -1
  416. package/dist/domains/filters/components/AFilterTimeInterval.js +1 -1
  417. package/dist/domains/filters/components/AFilterTimeInterval.js.map +1 -1
  418. package/dist/domains/filters/components/AFilterTimeInterval.vue.d.ts +5 -3
  419. package/dist/domains/filters/components/AFilterTimeInterval.vue_vue_type_script_setup_true_lang.js.map +1 -1
  420. package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.js.map +1 -1
  421. package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  422. package/dist/domains/filters/components/AFilterWrapper.vue.d.ts +17 -15
  423. package/dist/domains/filters/components/AFilterWrapperSidebar.vue.d.ts +5 -3
  424. package/dist/domains/filters/components/FiltersSelected.js.map +1 -1
  425. package/dist/domains/filters/components/FiltersSelected.vue_vue_type_script_setup_true_lang.js.map +1 -1
  426. package/dist/domains/filters/composables/filterFactory.d.ts +16 -26
  427. package/dist/domains/filters/composables/filterFactory.js +38 -31
  428. package/dist/domains/filters/composables/filterFactory.js.map +1 -1
  429. package/dist/domains/filters/datatable/components/ADatatableOrdering.js.map +1 -1
  430. package/dist/domains/filters/datatable/components/ADatatableOrdering.vue_vue_type_script_setup_true_lang.js +3 -1
  431. package/dist/domains/filters/datatable/components/ADatatableOrdering.vue_vue_type_script_setup_true_lang.js.map +1 -1
  432. package/dist/domains/filters/datatable/components/ADatatablePagination.js.map +1 -1
  433. package/dist/domains/filters/datatable/components/ADatatablePagination.vue_vue_type_script_setup_true_lang.js +2 -4
  434. package/dist/domains/filters/datatable/components/ADatatablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  435. package/dist/domains/filters/utils/filterInjectionKeys.js.map +1 -1
  436. package/dist/domains/form/components/AFormDatetimePicker.js.map +1 -1
  437. package/dist/domains/form/components/AFormDatetimePicker.vue.d.ts +7 -5
  438. package/dist/domains/form/components/AFormDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  439. package/dist/domains/form/components/AFormFlagDatetimePicker.js.map +1 -1
  440. package/dist/domains/form/components/AFormFlagDatetimePicker.vue.d.ts +7 -5
  441. package/dist/domains/form/components/AFormFlagDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  442. package/dist/domains/form/components/AFormSwitch.vue.d.ts +7 -5
  443. package/dist/domains/form/components/AFormTextField.js.map +1 -1
  444. package/dist/domains/form/components/AFormTextField.vue.d.ts +9 -7
  445. package/dist/domains/form/components/AFormTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  446. package/dist/domains/form/components/AFormTextarea.vue.d.ts +13 -11
  447. package/dist/domains/form/components/AFormValueObjectOptionsSelect.vue.d.ts +7 -5
  448. package/dist/domains/form/components/ASystemEntityScope.vue.d.ts +5 -3
  449. package/dist/domains/job/api/jobApi.js.map +1 -1
  450. package/dist/domains/job/components/AJobDetailCommon.vue.d.ts +5 -3
  451. package/dist/domains/listEditor/components/AListEditor.js.map +1 -1
  452. package/dist/domains/listEditor/components/AListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  453. package/dist/domains/listEditor/components/ANestedSortableListEditor.js.map +1 -1
  454. package/dist/domains/listEditor/components/ANestedSortableListEditor.vue.d.ts +2 -3
  455. package/dist/domains/listEditor/components/ANestedSortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  456. package/dist/domains/listEditor/components/ASortableListEditor.js.map +1 -1
  457. package/dist/domains/listEditor/components/ASortableListEditor.vue.d.ts +2 -3
  458. package/dist/domains/listEditor/components/ASortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  459. package/dist/domains/listEditor/composables/useListEditorController.d.ts +4 -5
  460. package/dist/domains/listEditor/composables/useListEditorController.js.map +1 -1
  461. package/dist/domains/listEditor/composables/useNestedListEditor.d.ts +3 -4
  462. package/dist/domains/listEditor/composables/useNestedListEditor.js.map +1 -1
  463. package/dist/domains/listEditor/composables/useNestedListEditorController.d.ts +5 -4
  464. package/dist/domains/listEditor/composables/useNestedListEditorController.js.map +1 -1
  465. package/dist/domains/listEditor/composables/useReorderMode.js.map +1 -1
  466. package/dist/domains/listEditor/types/listEditorTypes.d.ts +2 -2
  467. package/dist/domains/listEditor/utils/listEditorLoader.d.ts +5 -5
  468. package/dist/domains/listEditor/utils/listEditorLoader.js.map +1 -1
  469. package/dist/domains/listEditor/utils/resolveCompactText.js.map +1 -1
  470. package/dist/domains/log/api/logApi.d.ts +2 -3
  471. package/dist/domains/log/api/logApi.js.map +1 -1
  472. package/dist/domains/log/components/ALogDatatable.js.map +1 -1
  473. package/dist/domains/log/components/ALogDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  474. package/dist/domains/log/components/ALogDetailView.js.map +1 -1
  475. package/dist/domains/log/components/ALogDetailView.vue.d.ts +1 -1
  476. package/dist/domains/log/components/ALogDetailView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  477. package/dist/domains/log/components/ALogFilter.js.map +1 -1
  478. package/dist/domains/log/components/ALogFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  479. package/dist/domains/log/components/ALogListView.js.map +1 -1
  480. package/dist/domains/log/components/ALogListView.vue.d.ts +1 -1
  481. package/dist/domains/log/components/ALogListView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  482. package/dist/domains/log/composables/logActions.d.ts +4 -5
  483. package/dist/domains/log/composables/logActions.js.map +1 -1
  484. package/dist/domains/log/composables/logType.d.ts +6 -7
  485. package/dist/domains/log/composables/logType.js.map +1 -1
  486. package/dist/domains/log/filter/logFilter.d.ts +8 -11
  487. package/dist/domains/log/filter/logFilter.js.map +1 -1
  488. package/dist/domains/permission/components/APermissionEditor.js.map +1 -1
  489. package/dist/domains/permission/components/APermissionEditor.vue.d.ts +4 -4
  490. package/dist/domains/permission/components/APermissionEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  491. package/dist/domains/permission/composables/permissionActions.d.ts +3 -6
  492. package/dist/domains/permission/composables/permissionActions.js.map +1 -1
  493. package/dist/domains/permission/config/api/permissionConfigApi.d.ts +2 -2
  494. package/dist/domains/permission/config/api/permissionConfigApi.js.map +1 -1
  495. package/dist/domains/permission/config/composables/permissionConfigActions.d.ts +3 -7
  496. package/dist/domains/permission/config/composables/permissionConfigActions.js.map +1 -1
  497. package/dist/domains/permission/config/store/permissionConfigStore.d.ts +2 -4
  498. package/dist/domains/permission/config/store/permissionConfigStore.js.map +1 -1
  499. package/dist/domains/permission/group/api/permissionGroupApi.d.ts +8 -10
  500. package/dist/domains/permission/group/api/permissionGroupApi.js.map +1 -1
  501. package/dist/domains/permission/group/components/APermissionGroupDatatable.js.map +1 -1
  502. package/dist/domains/permission/group/components/APermissionGroupDatatable.vue.d.ts +12 -10
  503. package/dist/domains/permission/group/components/APermissionGroupDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  504. package/dist/domains/permission/group/components/APermissionGroupDetail.js.map +1 -1
  505. package/dist/domains/permission/group/components/APermissionGroupDetail.vue.d.ts +21 -22
  506. package/dist/domains/permission/group/components/APermissionGroupDetail.vue_vue_type_script_setup_true_lang.js.map +1 -1
  507. package/dist/domains/permission/group/components/APermissionGroupManage.js.map +1 -1
  508. package/dist/domains/permission/group/components/APermissionGroupManage.vue.d.ts +21 -22
  509. package/dist/domains/permission/group/components/APermissionGroupManage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  510. package/dist/domains/permission/group/composables/cachedPermissionGroups.js.map +1 -1
  511. package/dist/domains/permission/group/composables/permissionGroupActions.d.ts +6 -8
  512. package/dist/domains/permission/group/composables/permissionGroupActions.js.map +1 -1
  513. package/dist/domains/permission/group/composables/permissionGroupValidations.d.ts +2 -3
  514. package/dist/domains/permission/group/composables/permissionGroupValidations.js.map +1 -1
  515. package/dist/domains/permission/group/filter/permissionGroupFilter.d.ts +2 -3
  516. package/dist/domains/permission/group/filter/permissionGroupFilter.js.map +1 -1
  517. package/dist/domains/permission/group/store/permissionGroupStore.d.ts +3 -6
  518. package/dist/domains/permission/group/store/permissionGroupStore.js.map +1 -1
  519. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.js.map +1 -1
  520. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  521. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.js.map +1 -1
  522. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.vue_vue_type_script_setup_true_lang.js.map +1 -1
  523. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.js.map +1 -1
  524. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  525. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocompleteWithCached.vue.d.ts +5 -3
  526. package/dist/domains/remoteAutocomplete/composables/createRemoteAutocomplete.d.ts +11 -13
  527. package/dist/domains/remoteAutocomplete/composables/createRemoteAutocomplete.js.map +1 -1
  528. package/dist/domains/subjectSelect/components/AFilterWrapperSubjectSelect.vue.d.ts +13 -11
  529. package/dist/domains/subjectSelect/components/ASubjectSelect.js.map +1 -1
  530. package/dist/domains/subjectSelect/components/ASubjectSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  531. package/dist/domains/subjectSelect/composables/useSubjectSelect.js +53 -51
  532. package/dist/domains/subjectSelect/composables/useSubjectSelect.js.map +1 -1
  533. package/dist/domains/system/appShell/components/AActionbar.vue.d.ts +7 -5
  534. package/dist/domains/system/appShell/components/ALayoutSwitch.js.map +1 -1
  535. package/dist/domains/system/appShell/components/ALayoutSwitch.vue.d.ts +7 -5
  536. package/dist/domains/system/appShell/components/ALayoutSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  537. package/dist/domains/system/appShell/composables/teleportSlot.d.ts +0 -1
  538. package/dist/domains/system/appShell/composables/teleportSlot.js.map +1 -1
  539. package/dist/domains/system/components/AAlerts.js.map +1 -1
  540. package/dist/domains/system/components/AAlerts.vue_vue_type_script_setup_true_lang.js.map +1 -1
  541. package/dist/domains/system/composables/alerts.js.map +1 -1
  542. package/dist/domains/system/composables/breadcrumbs.d.ts +3 -3
  543. package/dist/domains/system/composables/breadcrumbs.js.map +1 -1
  544. package/dist/domains/system/composables/languageSettings.js.map +1 -1
  545. package/dist/domains/system/composables/loginStatus.js.map +1 -1
  546. package/dist/domains/system/composables/navigationError.d.ts +6 -8
  547. package/dist/domains/system/composables/navigationError.js.map +1 -1
  548. package/dist/domains/system/composables/pageNavigation.d.ts +9 -10
  549. package/dist/domains/system/composables/pageNavigation.js.map +1 -1
  550. package/dist/domains/system/composables/recordActions.d.ts +14 -22
  551. package/dist/domains/system/composables/recordActions.js.map +1 -1
  552. package/dist/domains/system/composables/recordPage.d.ts +23 -38
  553. package/dist/domains/system/composables/recordPage.js.map +1 -1
  554. package/dist/domains/system/composables/routeHistory.d.ts +4 -5
  555. package/dist/domains/system/composables/routeHistory.js.map +1 -1
  556. package/dist/domains/system/composables/sentry.js.map +1 -1
  557. package/dist/domains/system/composables/useDebugFeatures.d.ts +3 -6
  558. package/dist/domains/system/composables/useDebugFeatures.js.map +1 -1
  559. package/dist/domains/system/store/datatablePageStore.d.ts +8 -1
  560. package/dist/domains/system/store/datatablePageStore.js +10 -3
  561. package/dist/domains/system/store/datatablePageStore.js.map +1 -1
  562. package/dist/domains/system/systemBar/components/ASystemBar.js.map +1 -1
  563. package/dist/domains/system/systemBar/components/ASystemBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  564. package/dist/domains/system/systemBar/utils/appReload.d.ts +5 -5
  565. package/dist/domains/system/systemBar/utils/appReload.js.map +1 -1
  566. package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.js.map +1 -1
  567. package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.vue.d.ts +2 -3
  568. package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.vue_vue_type_script_setup_true_lang.js.map +1 -1
  569. package/dist/domains/ui/buttons/action/components/AActionDeleteButton.js.map +1 -1
  570. package/dist/domains/ui/buttons/action/components/AActionDeleteButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  571. package/dist/domains/ui/buttons/components/ABtnSplit.vue.d.ts +9 -7
  572. package/dist/domains/ui/components/AAvatarColorPicker.js.map +1 -1
  573. package/dist/domains/ui/components/AAvatarColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  574. package/dist/domains/ui/components/ACard.js.map +1 -1
  575. package/dist/domains/ui/components/ACard.vue.d.ts +7 -3
  576. package/dist/domains/ui/components/ACard.vue_vue_type_script_setup_true_lang.js +6 -2
  577. package/dist/domains/ui/components/ACard.vue_vue_type_script_setup_true_lang.js.map +1 -1
  578. package/dist/domains/ui/components/ACardLoader.js.map +1 -1
  579. package/dist/domains/ui/components/ACardLoader.vue.d.ts +1 -0
  580. package/dist/domains/ui/components/ACardLoader.vue_vue_type_script_setup_true_lang.js +13 -7
  581. package/dist/domains/ui/components/ACardLoader.vue_vue_type_script_setup_true_lang.js.map +1 -1
  582. package/dist/domains/ui/components/AChipNoLink.vue.d.ts +5 -3
  583. package/dist/domains/ui/components/ACopyText.vue.d.ts +9 -7
  584. package/dist/domains/ui/components/ACreateDialog.js.map +1 -1
  585. package/dist/domains/ui/components/ACreateDialog.vue.d.ts +11 -9
  586. package/dist/domains/ui/components/ACreateDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  587. package/dist/domains/ui/components/ADialogToolbar.vue.d.ts +5 -3
  588. package/dist/domains/ui/components/ARow.vue.d.ts +5 -3
  589. package/dist/domains/ui/components/ATimeTrackingFields.js.map +1 -1
  590. package/dist/domains/ui/components/ATimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
  591. package/dist/domains/ui/components/AUserAndTimeTrackingFields.js.map +1 -1
  592. package/dist/domains/ui/components/AUserAndTimeTrackingFields.vue.d.ts +3 -5
  593. package/dist/domains/ui/components/AUserAndTimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
  594. package/dist/domains/ui/datetime/components/ADatetimePicker.js +1 -1
  595. package/dist/domains/ui/datetime/components/ADatetimePicker.js.map +1 -1
  596. package/dist/domains/ui/datetime/components/ADatetimePicker.vue.d.ts +5 -3
  597. package/dist/domains/ui/datetime/components/ADatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  598. package/dist/domains/ui/file/components/AFileDropzone.js.map +1 -1
  599. package/dist/domains/ui/file/components/AFileDropzone.vue.d.ts +1 -1
  600. package/dist/domains/ui/file/components/AFileDropzone.vue_vue_type_script_setup_true_lang.js.map +1 -1
  601. package/dist/domains/ui/file/components/AFileInput.js.map +1 -1
  602. package/dist/domains/ui/file/components/AFileInput.vue.d.ts +9 -7
  603. package/dist/domains/ui/file/components/AFileInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  604. package/dist/domains/ui/file/components/AFileInputDialog.js.map +1 -1
  605. package/dist/domains/ui/file/components/AFileInputDialog.vue.d.ts +9 -7
  606. package/dist/domains/ui/file/components/AFileInputDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  607. package/dist/domains/ui/file/composables/dropzone.js.map +1 -1
  608. package/dist/domains/ui/file/composables/formatAndSizeCheck.js.map +1 -1
  609. package/dist/domains/ui/view/components/AGenericView.vue.d.ts +7 -5
  610. package/dist/domains/ui/view/components/ALoginView.js +1 -1
  611. package/dist/domains/ui/view/components/ALoginView.js.map +1 -1
  612. package/dist/domains/ui/view/components/ALoginView.vue.d.ts +5 -3
  613. package/dist/domains/ui/view/components/ALoginView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  614. package/dist/domains/ui/view/components/ALogoutView.js.map +1 -1
  615. package/dist/domains/ui/view/components/ALogoutView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  616. package/dist/domains/ui/view/components/ANotFoundView.js.map +1 -1
  617. package/dist/domains/ui/view/components/ANotFoundView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  618. package/dist/domains/unsavedGuard/composables/useUnsavedChangesGuard.d.ts +6 -7
  619. package/dist/domains/unsavedGuard/composables/useUnsavedChangesGuard.js.map +1 -1
  620. package/dist/lib.d.ts +2 -2
  621. package/dist/plugins/commonVuetifyConfig.d.ts +3 -3
  622. package/dist/plugins/commonVuetifyConfig.js.map +1 -1
  623. package/dist/plugins/i18n.d.ts +4 -5
  624. package/dist/plugins/i18n.js.map +1 -1
  625. package/dist/plugins/pluginOptions.d.ts +4 -2
  626. package/dist/plugins/pluginOptions.js.map +1 -1
  627. package/dist/plugins/webfontloader.js.map +1 -1
  628. package/dist/shared/error/AnzuApiCancelledError.d.ts +5 -8
  629. package/dist/shared/error/AnzuApiCancelledError.js.map +1 -1
  630. package/dist/shared/error/AnzuError.d.ts +3 -5
  631. package/dist/shared/error/AnzuError.js.map +1 -1
  632. package/dist/shared/error/AuthUnavailableError.d.ts +3 -3
  633. package/dist/shared/error/AuthUnavailableError.js.map +1 -1
  634. package/dist/shared/error/isInCauseChain.d.ts +2 -2
  635. package/dist/shared/error/isInCauseChain.js.map +1 -1
  636. package/dist/shared/types/UserAndTimeTracking.d.ts +5 -5
  637. package/dist/shared/types/Validation.d.ts +4 -5
  638. package/dist/shared/types/common.d.ts +1 -3
  639. package/dist/shared/types/globalComponents.d.ts +5 -6
  640. package/dist/shared/utils/common.js.map +1 -1
  641. package/dist/shared/utils/datetime.d.ts +0 -1
  642. package/dist/shared/utils/datetime.js.map +1 -1
  643. package/dist/shared/utils/datetimePickerValue.d.ts +4 -7
  644. package/dist/shared/utils/datetimePickerValue.js.map +1 -1
  645. package/dist/shared/utils/development.d.ts +3 -3
  646. package/dist/shared/utils/development.js.map +1 -1
  647. package/dist/shared/utils/envConfig.d.ts +4 -4
  648. package/dist/shared/utils/envConfig.js.map +1 -1
  649. package/dist/shared/utils/json.d.ts +1 -1
  650. package/dist/shared/utils/json.js.map +1 -1
  651. package/dist/shared/utils/userAndTimeTracking.d.ts +5 -7
  652. package/dist/shared/utils/userAndTimeTracking.js.map +1 -1
  653. package/dist/shared/validators/vuelidate/common/useValidateHexColor.d.ts +3 -5
  654. package/dist/shared/validators/vuelidate/common/useValidateHexColor.js.map +1 -1
  655. package/dist/testing/appShell.d.ts +11 -11
  656. package/dist/testing/appShell.js.map +1 -1
  657. package/dist/testing/closeButtons.d.ts +9 -11
  658. package/dist/testing/closeButtons.js.map +1 -1
  659. package/dist/testing/declaredDependencies.d.ts +7 -7
  660. package/dist/testing/declaredDependencies.js.map +1 -1
  661. package/dist/testing/generatedRoutes.d.ts +6 -11
  662. package/dist/testing/generatedRoutes.js.map +1 -1
  663. package/dist/testing/routeHistory.d.ts +5 -12
  664. package/dist/testing/routeHistory.js.map +1 -1
  665. package/dist/testing/sortableLists.d.ts +16 -21
  666. package/dist/testing/sortableLists.js.map +1 -1
  667. package/dist/testing/typedRouter.d.ts +0 -1
  668. package/dist/testing/typedRouter.js.map +1 -1
  669. package/package.json +27 -27
  670. package/src/eslint/adminConfig.mjs +19 -27
  671. package/src/eslint/globalComponentNames.mjs +3 -4
  672. package/src/eslint/oxlint.mjs +7 -20
  673. package/src/eslint/plugin.d.mts +2 -4
  674. package/src/eslint/plugin.mjs +18 -34
  675. package/src/eslint/validRouteName.mjs +6 -7
  676. package/src/vite/devWatch.mjs +30 -43
  677. package/src/vite/index.d.mts +5 -5
  678. package/src/vite/sentry.mjs +7 -12
  679. package/src/vite/sourcemaps.mjs +4 -8
@@ -1 +1 @@
1
- {"version":3,"file":"AAnzuUserForm.vue_vue_type_script_setup_true_lang.js","names":["$slots","_useModel","_openBlock","_createBlock","ASystemEntityScope","_unref","_withCtx","_createVNode","_component_VRow","_component_VCol","AUserEnabledSwitch","AUserMetadataForm","_renderSlot","_createCommentVNode","AAnzuUserRoleAutocomplete","APermissionGroupRemoteAutocomplete","APermissionEditor","ASystemEntityScope_default","APermissionEditor_default","AUserEnabledSwitch_default","AUserMetadataForm_default","AAnzuUserRoleAutocomplete_default","APermissionGroupRemoteAutocomplete_default","AAnzuUserForm_vue_vue_type_script_setup_true_lang_default","PERMISSION_GROUP_ENDPOINT","\"user\"","\"userModifiers\"","props","__props","user","useModel","useI18n","usePermissionActions","resolvedPermissions","computed","resolvePermissions","openBlock","createBlock","unref","ANZU_USER_ENTITY","withCtx","createVNode","VRow","VCol","_cache","$event","_ctx","renderSlot","createCommentVNode","t"],"sources":["../../../../src/domains/anzuUser/components/AAnzuUserForm.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport AUserEnabledSwitch from '@/domains/anzuUser/components/AUserEnabledSwitch.vue'\nimport AUserMetadataForm from '@/domains/anzuUser/components/AUserMetadataForm.vue'\nimport AAnzuUserRoleAutocomplete from '@/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue'\nimport { ANZU_USER_ENTITY } from '@/domains/anzuUser/api/anzuUserApi'\nimport APermissionEditor from '@/domains/permission/components/APermissionEditor.vue'\nimport { usePermissionActions } from '@/domains/permission/composables/permissionActions'\nimport APermissionGroupRemoteAutocomplete from '@/domains/permission/group/components/APermissionGroupRemoteAutocomplete.vue'\nimport { PERMISSION_GROUP_ENDPOINT } from '@/domains/permission/group/api/permissionGroupApi'\nimport type { AnzuUser } from '@/shared/types/AnzuUser'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n system: string\n /**\n * The permission-group endpoint, which is not the user one.\n *\n * There is deliberately no `entity` prop here. `entity` names a *resource*, not a system, and\n * it is what a server validation failure is filed under -- so the group autocomplete, the role\n * list and the permission editor each use their own, and passing the user's down would file a\n * group's error under the user's labels.\n */\n permissionGroupEndPoint?: string\n /**\n * One component for detail and edit (decision 27). Two parallel components drift: a field\n * added to the editable one and forgotten in the other is a silent divergence with nothing to\n * fail.\n */\n readonly?: boolean\n isEdit?: boolean\n /** From the system's descriptor. */\n requiredMetadata?: boolean\n idInput?: boolean\n randomColor?: boolean\n enabledNote?: string | undefined\n metadataNote?: string | undefined\n }>(),\n {\n permissionGroupEndPoint: PERMISSION_GROUP_ENDPOINT,\n readonly: false,\n isEdit: false,\n requiredMetadata: false,\n idInput: true,\n randomColor: false,\n enabledNote: undefined,\n metadataNote: undefined,\n }\n)\n\nconst user = defineModel<AnzuUser>('user', { required: true })\n\nconst { t } = useI18n()\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { resolvePermissions } = usePermissionActions({\n client: props.client,\n system: props.system,\n endPoint: props.permissionGroupEndPoint,\n})\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\n/**\n * What the account would end up with if saved now: the grants of the groups currently ticked, plus\n * the ones set on the user. Recomputed locally so ticking a group shows its effect without a round\n * trip -- the server's own `resolvedPermissions` describes the record as it was loaded.\n */\nconst resolvedPermissions = computed(() => resolvePermissions(user.value))\n</script>\n\n<template>\n <ASystemEntityScope\n system=\"common\"\n :subject=\"ANZU_USER_ENTITY\"\n >\n <VRow>\n <VCol cols=\"12\">\n <AUserEnabledSwitch\n v-model=\"user.enabled\"\n :readonly=\"readonly\"\n :note=\"enabledNote\"\n />\n </VCol>\n <VCol cols=\"12\">\n <AUserMetadataForm\n v-model:user=\"user\"\n :required=\"requiredMetadata\"\n :id-input=\"idInput\"\n :is-edit=\"isEdit\"\n :readonly=\"readonly\"\n :random-color=\"randomColor\"\n :note=\"metadataNote\"\n />\n </VCol>\n <VCol\n v-if=\"isEdit && !readonly && $slots.copyPermissions\"\n cols=\"12\"\n >\n <!-- Copying roles and grants from another account. Only cms offers it today. -->\n <slot name=\"copyPermissions\" />\n </VCol>\n <VCol\n v-if=\"$slots.systemFields\"\n cols=\"12\"\n >\n <!--\n The system's own fields: autocompletes over that backend's entities, which the library\n cannot build. The same `readonly` reaches them, so the app swaps its autocompletes for\n chips inside.\n -->\n <slot\n name=\"systemFields\"\n :readonly=\"readonly\"\n :is-edit=\"isEdit\"\n />\n </VCol>\n <VCol cols=\"12\">\n <AAnzuUserRoleAutocomplete\n v-model=\"user.roles\"\n :client=\"client\"\n :system=\"system\"\n :readonly=\"readonly\"\n />\n </VCol>\n <VCol cols=\"12\">\n <APermissionGroupRemoteAutocomplete\n v-model=\"user.permissionGroups\"\n :client=\"client\"\n :system=\"system\"\n :end-point=\"permissionGroupEndPoint\"\n :label=\"t('common.anzuUser.model.permissionGroups')\"\n :readonly=\"readonly\"\n multiple\n clearable\n />\n </VCol>\n <VCol\n v-if=\"$slots.actions\"\n cols=\"12\"\n >\n <!-- Impersonation and anything else the app hangs off this form. -->\n <slot\n name=\"actions\"\n :user=\"user\"\n />\n </VCol>\n <VCol cols=\"12\">\n <APermissionEditor\n v-model=\"user.permissions\"\n :resolved-permissions=\"resolvedPermissions\"\n :roles=\"user.roles\"\n :client=\"client\"\n :system=\"system\"\n :readonly=\"readonly\"\n />\n </VCol>\n </VRow>\n </ASystemEntityScope>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAeA,IAAM2B,IAAQC,GAuCRC,IAAO5B,EAAqB2B,GAAC,MAA0B,GAEvD,EAAE,SAAMG,EAAQ,GAGhB,EAAE,0BAAuBC,EAAqB;GAClD,QAAQL,EAAM;GACd,QAAQA,EAAM;GACd,UAAUA,EAAM;EAClB,CAAC,GAQKM,IAAsBC,QAAeC,EAAmBN,EAAK,KAAK,CAAC;E,kBAIvE3B,EAAA,GAAAC,EAsFqBC,GAAA;GArFnB,QAAO;GACN,SAASC,EAAAkC,CAAA;;GAEV,SAAAjC,QAiFO,CAjFPC,EAiFOC,GAAA,MAAA;IAhFL,SAAAF,QAMO;KANPC,EAMOE,GAAA,EAND,MAAK,KAAI,GAAA;MACb,SAAAH,QAIE,CAJFC,EAIEG,GAAA;OAHS,YAAAmB,EAAA,MAAK;OAAL,uBAAA,AAAAe,EAAA,QAAA,MAAA,EAAA,MAAK,UAAOC;OACpB,UAAUjB,EAAA;OACV,MAAMA,EAAA;;;;;;;;KAGXrB,EAUOE,GAAA,EAVD,MAAK,KAAI,GAAA;MACb,SAAAH,QAQE,CARFC,EAQEI,GAAA;OAPQ,MAAMkB,EAAA;OAAA,iBAAA,AAAAe,EAAA,QAAA,MAAA,EAAI,QAAAC;OACjB,UAAUjB,EAAA;OACV,YAAUA,EAAA;OACV,WAASA,EAAA;OACT,UAAUA,EAAA;OACV,gBAAcA,EAAA;OACd,MAAMA,EAAA;;;;;;;;;;;;KAIHA,EAAA,UAAM,CAAKA,EAAA,YAAY5B,EAAAA,OAAO,mBADtCE,EAAA,GAAAC,EAMOM,GAAA;;MAJL,MAAK;;MAGL,SAAAH,QAA+B,CAA/BM,EAA+BkC,EAAA,QAAA,iBAAA,C;;;KAGzB9C,EAAAA,OAAO,gBADfE,EAAA,GAAAC,EAcOM,GAAA;;MAZL,MAAK;;MAOL,SAAAH,QAIE,CAJFM,EAIEkC,EAAA,QAAA,gBAAA;OAFC,UAAUlB,EAAA;OACV,QAASA,EAAA;;;;KAGdrB,EAOOE,GAAA,EAPD,MAAK,KAAI,GAAA;MACb,SAAAH,QAKE,CALFC,EAKEO,GAAA;OAJS,YAAAe,EAAA,MAAK;OAAL,uBAAA,AAAAe,EAAA,QAAA,MAAA,EAAA,MAAK,QAAKC;OAClB,QAAQjB,EAAA;OACR,QAAQA,EAAA;OACR,UAAUA,EAAA;;;;;;;;;KAGfrB,EAWOE,GAAA,EAXD,MAAK,KAAI,GAAA;MACb,SAAAH,QASE,CATFC,EASEQ,GAAA;OARS,YAAAc,EAAA,MAAK;OAAL,uBAAA,AAAAe,EAAA,QAAA,MAAA,EAAA,MAAK,mBAAgBC;OAC7B,QAAQjB,EAAA;OACR,QAAQA,EAAA;OACR,aAAWA,EAAA;OACX,OAAOvB,EAAA4C,CAAA,CAAC,CAAA,wCAAA;OACR,UAAUrB,EAAA;OACX,UAAA;OACA,WAAA;;;;;;;;;;;KAII5B,EAAAA,OAAO,WADfE,EAAA,GAAAC,EASOM,GAAA;;MAPL,MAAK;;MAGL,SAAAH,QAGE,CAHFM,EAGEkC,EAAA,QAAA,WAAA,EADC,MAAMjB,EAAA,MAAI,CAAA,C;;;KAGftB,EASOE,GAAA,EATD,MAAK,KAAI,GAAA;MACb,SAAAH,QAOE,CAPFC,EAOES,GAAA;OANS,YAAAa,EAAA,MAAK;OAAL,uBAAA,AAAAe,EAAA,QAAA,MAAA,EAAA,MAAK,cAAWC;OACxB,wBAAsBZ,EAAA;OACtB,OAAOJ,EAAA,MAAK;OACZ,QAAQD,EAAA;OACR,QAAQA,EAAA;OACR,UAAUA,EAAA"}
1
+ {"version":3,"file":"AAnzuUserForm.vue_vue_type_script_setup_true_lang.js","names":["$slots","_useModel","_openBlock","_createBlock","ASystemEntityScope","_unref","_withCtx","_createVNode","_component_VRow","_component_VCol","AUserEnabledSwitch","AUserMetadataForm","_renderSlot","_createCommentVNode","AAnzuUserRoleAutocomplete","APermissionGroupRemoteAutocomplete","APermissionEditor","ASystemEntityScope_default","APermissionEditor_default","AUserEnabledSwitch_default","AUserMetadataForm_default","AAnzuUserRoleAutocomplete_default","APermissionGroupRemoteAutocomplete_default","AAnzuUserForm_vue_vue_type_script_setup_true_lang_default","PERMISSION_GROUP_ENDPOINT","\"user\"","\"userModifiers\"","props","__props","user","useModel","useI18n","usePermissionActions","resolvedPermissions","computed","resolvePermissions","openBlock","createBlock","unref","ANZU_USER_ENTITY","withCtx","createVNode","VRow","VCol","_cache","$event","_ctx","renderSlot","createCommentVNode","t"],"sources":["../../../../src/domains/anzuUser/components/AAnzuUserForm.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport AUserEnabledSwitch from '@/domains/anzuUser/components/AUserEnabledSwitch.vue'\nimport AUserMetadataForm from '@/domains/anzuUser/components/AUserMetadataForm.vue'\nimport AAnzuUserRoleAutocomplete from '@/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue'\nimport { ANZU_USER_ENTITY } from '@/domains/anzuUser/api/anzuUserApi'\nimport APermissionEditor from '@/domains/permission/components/APermissionEditor.vue'\nimport { usePermissionActions } from '@/domains/permission/composables/permissionActions'\nimport APermissionGroupRemoteAutocomplete from '@/domains/permission/group/components/APermissionGroupRemoteAutocomplete.vue'\nimport { PERMISSION_GROUP_ENDPOINT } from '@/domains/permission/group/api/permissionGroupApi'\nimport type { AnzuUser } from '@/shared/types/AnzuUser'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n system: string\n /**\n * The permission-group endpoint, which is not the user one.\n * There is deliberately no `entity` prop. `entity` names the resource that server validation\n * errors are filed under. Passing the user's down would file group errors under user labels.\n */\n permissionGroupEndPoint?: string\n /**\n * One component for detail and edit (decision 27). Two components drift:\n * a field added to one and forgotten in the other fails silently.\n */\n readonly?: boolean\n isEdit?: boolean\n /** From the system's descriptor. */\n requiredMetadata?: boolean\n idInput?: boolean\n randomColor?: boolean\n enabledNote?: string | undefined\n metadataNote?: string | undefined\n }>(),\n {\n permissionGroupEndPoint: PERMISSION_GROUP_ENDPOINT,\n readonly: false,\n isEdit: false,\n requiredMetadata: false,\n idInput: true,\n randomColor: false,\n enabledNote: undefined,\n metadataNote: undefined,\n }\n)\n\nconst user = defineModel<AnzuUser>('user', { required: true })\n\nconst { t } = useI18n()\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { resolvePermissions } = usePermissionActions({\n client: props.client,\n system: props.system,\n endPoint: props.permissionGroupEndPoint,\n})\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\n/**\n * Grants the account would have if saved now: those of the ticked groups plus the user's own.\n * Computed locally so ticking a group shows its effect without a round\n * trip. The server's `resolvedPermissions` reflects the record as loaded.\n */\nconst resolvedPermissions = computed(() => resolvePermissions(user.value))\n</script>\n\n<template>\n <ASystemEntityScope\n system=\"common\"\n :subject=\"ANZU_USER_ENTITY\"\n >\n <VRow>\n <VCol cols=\"12\">\n <AUserEnabledSwitch\n v-model=\"user.enabled\"\n :readonly=\"readonly\"\n :note=\"enabledNote\"\n />\n </VCol>\n <VCol cols=\"12\">\n <AUserMetadataForm\n v-model:user=\"user\"\n :required=\"requiredMetadata\"\n :id-input=\"idInput\"\n :is-edit=\"isEdit\"\n :readonly=\"readonly\"\n :random-color=\"randomColor\"\n :note=\"metadataNote\"\n />\n </VCol>\n <VCol\n v-if=\"isEdit && !readonly && $slots.copyPermissions\"\n cols=\"12\"\n >\n <!-- Copying roles and grants from another account. Only cms offers it today. -->\n <slot name=\"copyPermissions\" />\n </VCol>\n <VCol\n v-if=\"$slots.systemFields\"\n cols=\"12\"\n >\n <!--\n The system's own fields: autocompletes over that backend's entities, which the library\n cannot build. They get the same `readonly`, so the app can swap autocompletes for chips.\n -->\n <slot\n name=\"systemFields\"\n :readonly=\"readonly\"\n :is-edit=\"isEdit\"\n />\n </VCol>\n <VCol cols=\"12\">\n <AAnzuUserRoleAutocomplete\n v-model=\"user.roles\"\n :client=\"client\"\n :system=\"system\"\n :readonly=\"readonly\"\n />\n </VCol>\n <VCol cols=\"12\">\n <APermissionGroupRemoteAutocomplete\n v-model=\"user.permissionGroups\"\n :client=\"client\"\n :system=\"system\"\n :end-point=\"permissionGroupEndPoint\"\n :label=\"t('common.anzuUser.model.permissionGroups')\"\n :readonly=\"readonly\"\n multiple\n clearable\n />\n </VCol>\n <VCol\n v-if=\"$slots.actions\"\n cols=\"12\"\n >\n <slot\n name=\"actions\"\n :user=\"user\"\n />\n </VCol>\n <VCol cols=\"12\">\n <APermissionEditor\n v-model=\"user.permissions\"\n :resolved-permissions=\"resolvedPermissions\"\n :roles=\"user.roles\"\n :client=\"client\"\n :system=\"system\"\n :readonly=\"readonly\"\n />\n </VCol>\n </VRow>\n </ASystemEntityScope>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAeA,IAAM2B,IAAQC,GAmCRC,IAAO5B,EAAqB2B,GAAC,MAA0B,GAEvD,EAAE,SAAMG,EAAQ,GAGhB,EAAE,0BAAuBC,EAAqB;GAClD,QAAQL,EAAM;GACd,QAAQA,EAAM;GACd,UAAUA,EAAM;EAClB,CAAC,GAQKM,IAAsBC,QAAeC,EAAmBN,EAAK,KAAK,CAAC;E,kBAIvE3B,EAAA,GAAAC,EAoFqBC,GAAA;GAnFnB,QAAO;GACN,SAASC,EAAAkC,CAAA;;GAEV,SAAAjC,QA+EO,CA/EPC,EA+EOC,GAAA,MAAA;IA9EL,SAAAF,QAMO;KANPC,EAMOE,GAAA,EAND,MAAK,KAAI,GAAA;MACb,SAAAH,QAIE,CAJFC,EAIEG,GAAA;OAHS,YAAAmB,EAAA,MAAK;OAAL,uBAAA,AAAAe,EAAA,QAAA,MAAA,EAAA,MAAK,UAAOC;OACpB,UAAUjB,EAAA;OACV,MAAMA,EAAA;;;;;;;;KAGXrB,EAUOE,GAAA,EAVD,MAAK,KAAI,GAAA;MACb,SAAAH,QAQE,CARFC,EAQEI,GAAA;OAPQ,MAAMkB,EAAA;OAAA,iBAAA,AAAAe,EAAA,QAAA,MAAA,EAAI,QAAAC;OACjB,UAAUjB,EAAA;OACV,YAAUA,EAAA;OACV,WAASA,EAAA;OACT,UAAUA,EAAA;OACV,gBAAcA,EAAA;OACd,MAAMA,EAAA;;;;;;;;;;;;KAIHA,EAAA,UAAM,CAAKA,EAAA,YAAY5B,EAAAA,OAAO,mBADtCE,EAAA,GAAAC,EAMOM,GAAA;;MAJL,MAAK;;MAGL,SAAAH,QAA+B,CAA/BM,EAA+BkC,EAAA,QAAA,iBAAA,C;;;KAGzB9C,EAAAA,OAAO,gBADfE,EAAA,GAAAC,EAaOM,GAAA;;MAXL,MAAK;;MAML,SAAAH,QAIE,CAJFM,EAIEkC,EAAA,QAAA,gBAAA;OAFC,UAAUlB,EAAA;OACV,QAASA,EAAA;;;;KAGdrB,EAOOE,GAAA,EAPD,MAAK,KAAI,GAAA;MACb,SAAAH,QAKE,CALFC,EAKEO,GAAA;OAJS,YAAAe,EAAA,MAAK;OAAL,uBAAA,AAAAe,EAAA,QAAA,MAAA,EAAA,MAAK,QAAKC;OAClB,QAAQjB,EAAA;OACR,QAAQA,EAAA;OACR,UAAUA,EAAA;;;;;;;;;KAGfrB,EAWOE,GAAA,EAXD,MAAK,KAAI,GAAA;MACb,SAAAH,QASE,CATFC,EASEQ,GAAA;OARS,YAAAc,EAAA,MAAK;OAAL,uBAAA,AAAAe,EAAA,QAAA,MAAA,EAAA,MAAK,mBAAgBC;OAC7B,QAAQjB,EAAA;OACR,QAAQA,EAAA;OACR,aAAWA,EAAA;OACX,OAAOvB,EAAA4C,CAAA,CAAC,CAAA,wCAAA;OACR,UAAUrB,EAAA;OACX,UAAA;OACA,WAAA;;;;;;;;;;;KAII5B,EAAAA,OAAO,WADfE,EAAA,GAAAC,EAQOM,GAAA;;MANL,MAAK;;MAEL,SAAAH,QAGE,CAHFM,EAGEkC,EAAA,QAAA,WAAA,EADC,MAAMjB,EAAA,MAAI,CAAA,C;;;KAGftB,EASOE,GAAA,EATD,MAAK,KAAI,GAAA;MACb,SAAAH,QAOE,CAPFC,EAOES,GAAA;OANS,YAAAa,EAAA,MAAK;OAAL,uBAAA,AAAAe,EAAA,QAAA,MAAA,EAAA,MAAK,cAAWC;OACxB,wBAAsBZ,EAAA;OACtB,OAAOJ,EAAA,MAAK;OACZ,QAAQD,EAAA;OACR,QAAQA,EAAA;OACR,UAAUA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"AAnzuUserRoleAutocomplete.js","names":["_sfc_main","AAnzuUserRoleAutocomplete_vue_vue_type_script_setup_true_lang_default","AAnzuUserRoleAutocomplete_default"],"sources":["../../../../src/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { usePermissionConfigActions } from '@/domains/permission/config/composables/permissionConfigActions'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n /** Roles are per backend: they come from that system's `/adm/v1/permissions/config`. */\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n readonly?: boolean\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n readonly: false,\n }\n)\n\nconst modelValue = defineModel<string[]>({ required: true })\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { permissionConfig, translatePermission } = usePermissionConfigActions({\n client: props.client,\n system: props.system,\n entity: props.entity,\n endPoint: props.endPoint,\n})\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\nconst items = computed(() =>\n permissionConfig.value.roles.map((role) => ({\n title: translatePermission('roles', role),\n value: role,\n }))\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n :items=\"items\"\n item-value=\"value\"\n item-title=\"title\"\n :label=\"t('common.anzuUser.model.roles')\"\n :readonly=\"readonly\"\n :clearable=\"!readonly\"\n multiple\n chips\n closable-chips\n hide-details\n autocomplete=\"off\"\n data-cy=\"user-roles\"\n >\n <!-- The chip the autocomplete draws itself, with its close named for what it does: it removes the role. -->\n <template #chip=\"{ props: chipProps }\">\n <VChip\n v-bind=\"chipProps\"\n close-label=\"common.button.remove\"\n />\n </template>\n </VAutocomplete>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AAnzuUserRoleAutocomplete.js","names":["_sfc_main","AAnzuUserRoleAutocomplete_vue_vue_type_script_setup_true_lang_default","AAnzuUserRoleAutocomplete_default"],"sources":["../../../../src/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { usePermissionConfigActions } from '@/domains/permission/config/composables/permissionConfigActions'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n /** Roles are per backend: they come from that system's `/adm/v1/permissions/config`. */\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n readonly?: boolean\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n readonly: false,\n }\n)\n\nconst modelValue = defineModel<string[]>({ required: true })\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { permissionConfig, translatePermission } = usePermissionConfigActions({\n client: props.client,\n system: props.system,\n entity: props.entity,\n endPoint: props.endPoint,\n})\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\nconst items = computed(() =>\n permissionConfig.value.roles.map((role) => ({\n title: translatePermission('roles', role),\n value: role,\n }))\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n :items=\"items\"\n item-value=\"value\"\n item-title=\"title\"\n :label=\"t('common.anzuUser.model.roles')\"\n :readonly=\"readonly\"\n :clearable=\"!readonly\"\n multiple\n chips\n closable-chips\n hide-details\n autocomplete=\"off\"\n data-cy=\"user-roles\"\n >\n <!-- Custom chip so its close button is labelled as removing the role. -->\n <template #chip=\"{ props: chipProps }\">\n <VChip\n v-bind=\"chipProps\"\n close-label=\"common.button.remove\"\n />\n </template>\n </VAutocomplete>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AAnzuUserRoleAutocomplete.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createBlock","_component_VAutocomplete","_unref","_withCtx","_createVNode","_component_VChip","_mergeProps","AAnzuUserRoleAutocomplete_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","props","__props","modelValue","useModel","usePermissionConfigActions","items","computed","permissionConfig","translatePermission","role","useI18n","openBlock","createBlock","VAutocomplete","_cache","$event","unref","t","withCtx","chipProps","createVNode","VChip","mergeProps"],"sources":["../../../../src/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { usePermissionConfigActions } from '@/domains/permission/config/composables/permissionConfigActions'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n /** Roles are per backend: they come from that system's `/adm/v1/permissions/config`. */\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n readonly?: boolean\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n readonly: false,\n }\n)\n\nconst modelValue = defineModel<string[]>({ required: true })\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { permissionConfig, translatePermission } = usePermissionConfigActions({\n client: props.client,\n system: props.system,\n entity: props.entity,\n endPoint: props.endPoint,\n})\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\nconst items = computed(() =>\n permissionConfig.value.roles.map((role) => ({\n title: translatePermission('roles', role),\n value: role,\n }))\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n :items=\"items\"\n item-value=\"value\"\n item-title=\"title\"\n :label=\"t('common.anzuUser.model.roles')\"\n :readonly=\"readonly\"\n :clearable=\"!readonly\"\n multiple\n chips\n closable-chips\n hide-details\n autocomplete=\"off\"\n data-cy=\"user-roles\"\n >\n <!-- The chip the autocomplete draws itself, with its close named for what it does: it removes the role. -->\n <template #chip=\"{ props: chipProps }\">\n <VChip\n v-bind=\"chipProps\"\n close-label=\"common.button.remove\"\n />\n </template>\n </VAutocomplete>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EAMA,IAAMY,IAAQC,GAgBRC,IAAad,EAAqBa,GAAA,YAAmB,GAGrD,EAAE,qBAAkB,2BAAwBG,EAA2B;GAC3E,QAAQJ,EAAM;GACd,QAAQA,EAAM;GACd,QAAQA,EAAM;GACd,UAAUA,EAAM;EAClB,CAAC,GAGKK,IAAQC,QACZC,EAAiB,MAAM,MAAM,KAAK,OAAU;GAC1C,OAAOC,EAAoB,SAASC,CAAI;GACxC,OAAOA;EACT,EAAE,CACJ,GAEM,EAAE,SAAMC,EAAQ;E,kBAIpBrB,EAAA,GAAAC,EAsBgBC,GAAA;GArBL,YAAAW,EAAA;GAAA,uBAAA,AAAAY,EAAA,QAAA,MAAA,EAAU,QAAAC;GAClB,OAAOV,EAAA;GACR,cAAW;GACX,cAAW;GACV,OAAOb,EAAAyB,CAAA,CAAC,CAAA,6BAAA;GACR,UAAUhB,EAAA;GACV,WAAS,CAAGA,EAAA;GACb,UAAA;GACA,OAAA;GACA,kBAAA;GACA,gBAAA;GACA,cAAa;GACb,WAAQ;;GAGG,MAAIR,GAIX,EAAA,OAJsB0B,QAAS,CACjCzB,EAGEC,GAHFC,EACUuB,GAAS,EACjB,eAAY,uBAAsB,CAAA,GAAA,MAAA,EAAA,C"}
1
+ {"version":3,"file":"AAnzuUserRoleAutocomplete.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createBlock","_component_VAutocomplete","_unref","_withCtx","_createVNode","_component_VChip","_mergeProps","AAnzuUserRoleAutocomplete_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","props","__props","modelValue","useModel","usePermissionConfigActions","items","computed","permissionConfig","translatePermission","role","useI18n","openBlock","createBlock","VAutocomplete","_cache","$event","unref","t","withCtx","chipProps","createVNode","VChip","mergeProps"],"sources":["../../../../src/domains/anzuUser/components/AAnzuUserRoleAutocomplete.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { usePermissionConfigActions } from '@/domains/permission/config/composables/permissionConfigActions'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n /** Roles are per backend: they come from that system's `/adm/v1/permissions/config`. */\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n readonly?: boolean\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n readonly: false,\n }\n)\n\nconst modelValue = defineModel<string[]>({ required: true })\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { permissionConfig, translatePermission } = usePermissionConfigActions({\n client: props.client,\n system: props.system,\n entity: props.entity,\n endPoint: props.endPoint,\n})\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\nconst items = computed(() =>\n permissionConfig.value.roles.map((role) => ({\n title: translatePermission('roles', role),\n value: role,\n }))\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"modelValue\"\n :items=\"items\"\n item-value=\"value\"\n item-title=\"title\"\n :label=\"t('common.anzuUser.model.roles')\"\n :readonly=\"readonly\"\n :clearable=\"!readonly\"\n multiple\n chips\n closable-chips\n hide-details\n autocomplete=\"off\"\n data-cy=\"user-roles\"\n >\n <!-- Custom chip so its close button is labelled as removing the role. -->\n <template #chip=\"{ props: chipProps }\">\n <VChip\n v-bind=\"chipProps\"\n close-label=\"common.button.remove\"\n />\n </template>\n </VAutocomplete>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EAMA,IAAMY,IAAQC,GAgBRC,IAAad,EAAqBa,GAAA,YAAmB,GAGrD,EAAE,qBAAkB,2BAAwBG,EAA2B;GAC3E,QAAQJ,EAAM;GACd,QAAQA,EAAM;GACd,QAAQA,EAAM;GACd,UAAUA,EAAM;EAClB,CAAC,GAGKK,IAAQC,QACZC,EAAiB,MAAM,MAAM,KAAK,OAAU;GAC1C,OAAOC,EAAoB,SAASC,CAAI;GACxC,OAAOA;EACT,EAAE,CACJ,GAEM,EAAE,SAAMC,EAAQ;E,kBAIpBrB,EAAA,GAAAC,EAsBgBC,GAAA;GArBL,YAAAW,EAAA;GAAA,uBAAA,AAAAY,EAAA,QAAA,MAAA,EAAU,QAAAC;GAClB,OAAOV,EAAA;GACR,cAAW;GACX,cAAW;GACV,OAAOb,EAAAyB,CAAA,CAAC,CAAA,6BAAA;GACR,UAAUhB,EAAA;GACV,WAAS,CAAGA,EAAA;GACb,UAAA;GACA,OAAA;GACA,kBAAA;GACA,gBAAA;GACA,cAAa;GACb,WAAQ;;GAGG,MAAIR,GAIX,EAAA,OAJsB0B,QAAS,CACjCzB,EAGEC,GAHFC,EACUuB,GAAS,EACjB,eAAY,uBAAsB,CAAA,GAAA,MAAA,EAAA,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"AUserBulkActionDialog.js","names":["_sfc_main","AUserBulkActionDialog_vue_vue_type_script_setup_true_lang_default","AUserBulkActionDialog_default"],"sources":["../../../../src/domains/anzuUser/components/AUserBulkActionDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport AUserSystemStatusChip from '@/domains/anzuUser/components/AUserSystemStatusChip.vue'\nimport {\n BulkAction,\n BulkOutcome,\n useUserCrossSystemStore,\n type BulkActionType,\n} from '@/domains/anzuUser/store/userCrossSystemStore'\nimport { type AnyUserSystemDescriptor, descriptorMayWrite } from '@/domains/anzuUser/composables/userSystemDescriptor'\nimport { isActionable, UserSystemAccess } from '@/domains/anzuUser/utils/userSystemState'\nimport { isUndefined } from '@/shared/utils/common'\n\nconst props = defineProps<{\n action: BulkActionType\n descriptors: AnyUserSystemDescriptor[]\n}>()\n\nconst emit = defineEmits<{\n (e: 'run', systems: string[]): void\n}>()\n\nconst open = defineModel<boolean>('open', { required: true })\n\nconst { t } = useI18n()\nconst store = useUserCrossSystemStore()\n\nconst selected = ref<string[]>([])\n/** The dialog shows the list first and the log after the operator confirms. */\nconst showingLog = ref(false)\n\ninterface Row {\n descriptor: AnyUserSystemDescriptor\n selectable: boolean\n reason: string | null\n}\n\n/**\n * Which systems can be ticked, decided by the probe and not by ACL.\n *\n * This is a cross-system surface: no current user is loaded for the other backends, so `<Acl>`\n * would return false everywhere and quietly tick nothing. Not selectable are the systems the probe\n * can speak for -- 403, 404, switched off in configuration -- plus the ones that did not answer at\n * all, because acting on those would be a guess. \"May read but may not write\" cannot be seen from\n * here and ends up as a 403 in the log.\n */\nconst rows = computed<Row[]>(() =>\n props.descriptors.map((descriptor) => {\n const result = store.results.get(descriptor.system)\n if (!descriptor.isEnabled()) {\n return { descriptor, selectable: false, reason: t('common.userSystem.state.configDisabled') }\n }\n if (!descriptorMayWrite(descriptor, 'update')) {\n return { descriptor, selectable: false, reason: t('common.userSystem.state.noWriteRight') }\n }\n if (isUndefined(result) || !isActionable(result.axes)) {\n const access = result?.axes.access\n const reason =\n access === UserSystemAccess.Forbidden\n ? t('common.userSystem.state.forbidden')\n : access === UserSystemAccess.Ok\n ? t('common.userSystem.state.absent')\n : t('common.userSystem.state.unavailable')\n return { descriptor, selectable: false, reason }\n }\n // Already where the action would take it. A no-op PUT would still run `updateRelations()` in\n // cms over seven scalars and twelve collections -- risk for nothing.\n if (props.action === BulkAction.Enable && result.axes.enabled === true) {\n return { descriptor, selectable: false, reason: t('common.userSystem.bulk.alreadyInState') }\n }\n if (props.action === BulkAction.Disable && result.axes.enabled === false) {\n return { descriptor, selectable: false, reason: t('common.userSystem.bulk.alreadyInState') }\n }\n return { descriptor, selectable: true, reason: null }\n })\n)\n\nconst selectableSystems = computed(() => rows.value.filter((row) => row.selectable).map((row) => row.descriptor.system))\n\n// Everything that can be acted on, ticked. Blog and forum included: in practice a departing\n// employee is switched off there too in almost every case, so leaving them out would mean an extra\n// click nearly always. The note in their row stays -- as information, not as a reason to untick.\nwatch(\n open,\n (value) => {\n if (!value) return\n showingLog.value = false\n selected.value = [...selectableSystems.value]\n },\n { immediate: true }\n)\n\nconst titleKey = computed(() => `common.userSystem.bulk.${props.action}.title`)\nconst confirmKey = computed(() => `common.userSystem.bulk.${props.action}.confirm`)\n\n/**\n * This run's lines only.\n *\n * The log outlives a run on purpose, so without the filter the dialog would show a metadata repair's\n * failures and offer to retry them -- as an enable or a disable, against whichever account is on\n * screen now.\n */\nconst currentLog = computed(() =>\n store.bulkLog.filter((entry) => entry.action === props.action && entry.subjectId === store.resolvedId)\n)\n\nconst failed = computed(() =>\n currentLog.value.filter((entry) => entry.outcome !== BulkOutcome.Done && entry.outcome !== BulkOutcome.Pending)\n)\n\n// What can be acted on now: a right that arrived or went while the dialog was open counts.\nconst actionable = computed(() => selected.value.filter((system) => selectableSystems.value.includes(system)))\n\nconst run = () => {\n if (actionable.value.length === 0) return\n showingLog.value = true\n emit('run', actionable.value)\n}\n\n/** Retries everything that failed, 403 included: the operator may have been granted the right meanwhile. */\nconst retryFailed = () => {\n emit(\n 'run',\n failed.value.map((entry) => entry.system)\n )\n}\n\nconst labelFor = (descriptor: AnyUserSystemDescriptor) => descriptor.label ?? descriptor.system\n</script>\n\n<template>\n <VDialog\n v-model=\"open\"\n :max-width=\"720\"\n data-cy=\"user-bulk-dialog\"\n >\n <VCard>\n <!-- Closing while the calls are still going is allowed; the run lives in the store. -->\n <ADialogToolbar @cancel=\"open = false\">\n {{ t(titleKey) }}\n </ADialogToolbar>\n <VCardText v-if=\"!showingLog\">\n <VAlert\n v-if=\"store.identityConflict\"\n type=\"error\"\n variant=\"tonal\"\n density=\"compact\"\n class=\"mb-3\"\n >\n {{ t('common.userSystem.search.identityConflict') }}\n </VAlert>\n <div\n v-for=\"row in rows\"\n :key=\"row.descriptor.system\"\n class=\"d-flex align-center ga-2 py-1\"\n >\n <VCheckbox\n v-model=\"selected\"\n :value=\"row.descriptor.system\"\n :disabled=\"!row.selectable || !!store.identityConflict\"\n :data-cy=\"`bulk-system-${row.descriptor.system}`\"\n density=\"compact\"\n hide-details\n />\n <div class=\"font-weight-medium\">{{ labelFor(row.descriptor) }}</div>\n <AUserSystemStatusChip\n v-if=\"store.results.get(row.descriptor.system)\"\n :axes=\"store.results.get(row.descriptor.system)!.axes\"\n />\n <div\n v-if=\"row.reason\"\n class=\"text-body-small text-medium-emphasis\"\n >\n {{ row.reason }}\n </div>\n <div\n v-if=\"row.descriptor.enabledNote && action !== BulkAction.Metadata\"\n class=\"text-body-small text-warning w-100\"\n >\n {{ row.descriptor.enabledNote }}\n </div>\n <div\n v-if=\"row.descriptor.metadataNote && action === BulkAction.Metadata\"\n class=\"text-body-small text-warning w-100\"\n >\n {{ row.descriptor.metadataNote }}\n </div>\n </div>\n </VCardText>\n <VCardText v-else>\n <div class=\"text-label-large mb-2\">{{ t('common.userSystem.bulk.log') }}</div>\n <!--\n `polite`, never `assertive`: nine systems finishing one after another would flood a screen\n reader. Focus deliberately stays where it is when the dialog switches to this view.\n -->\n <div\n aria-live=\"polite\"\n data-cy=\"user-bulk-log\"\n >\n <div\n v-for=\"entry in currentLog\"\n :key=\"entry.system\"\n class=\"d-flex align-center ga-2 py-1\"\n >\n <div class=\"font-weight-medium\">{{ entry.system }}</div>\n <div class=\"text-body-small\">{{ t(`common.userSystem.bulk.outcome.${entry.outcome}`) }}</div>\n <div\n v-if=\"entry.detail\"\n class=\"text-body-small text-medium-emphasis\"\n >\n {{ entry.detail }}\n </div>\n </div>\n </div>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"open = false\">\n {{ showingLog ? t('common.userSystem.bulk.close') : t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnTertiary\n v-if=\"showingLog && failed.length > 0 && !store.bulkRunning\"\n data-cy=\"user-bulk-retry\"\n @click.stop=\"retryFailed\"\n >\n {{ t('common.userSystem.bulk.retryFailed') }}\n </ABtnTertiary>\n <ABtnPrimary\n v-if=\"!showingLog\"\n :disabled=\"actionable.length === 0 || !!store.identityConflict\"\n data-cy=\"user-bulk-confirm\"\n @click.stop=\"run\"\n >\n {{ t(confirmKey, { count: actionable.length }, actionable.length) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AUserBulkActionDialog.js","names":["_sfc_main","AUserBulkActionDialog_vue_vue_type_script_setup_true_lang_default","AUserBulkActionDialog_default"],"sources":["../../../../src/domains/anzuUser/components/AUserBulkActionDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport AUserSystemStatusChip from '@/domains/anzuUser/components/AUserSystemStatusChip.vue'\nimport {\n BulkAction,\n BulkOutcome,\n useUserCrossSystemStore,\n type BulkActionType,\n} from '@/domains/anzuUser/store/userCrossSystemStore'\nimport { type AnyUserSystemDescriptor, descriptorMayWrite } from '@/domains/anzuUser/composables/userSystemDescriptor'\nimport { isActionable, UserSystemAccess } from '@/domains/anzuUser/utils/userSystemState'\nimport { isUndefined } from '@/shared/utils/common'\n\nconst props = defineProps<{\n action: BulkActionType\n descriptors: AnyUserSystemDescriptor[]\n}>()\n\nconst emit = defineEmits<{\n (e: 'run', systems: string[]): void\n}>()\n\nconst open = defineModel<boolean>('open', { required: true })\n\nconst { t } = useI18n()\nconst store = useUserCrossSystemStore()\n\nconst selected = ref<string[]>([])\nconst showingLog = ref(false)\n\ninterface Row {\n descriptor: AnyUserSystemDescriptor\n selectable: boolean\n reason: string | null\n}\n\n/**\n * Which systems can be ticked is decided by the probe, not by ACL.\n * No current user is loaded for the other backends, so `<Acl>` would return false everywhere.\n * Not selectable: systems the probe reports as 403, 404 or switched off, and systems that did not answer.\n * Read-but-not-write cannot be seen here and ends up as a 403 in the log.\n */\nconst rows = computed<Row[]>(() =>\n props.descriptors.map((descriptor) => {\n const result = store.results.get(descriptor.system)\n if (!descriptor.isEnabled()) {\n return { descriptor, selectable: false, reason: t('common.userSystem.state.configDisabled') }\n }\n if (!descriptorMayWrite(descriptor, 'update')) {\n return { descriptor, selectable: false, reason: t('common.userSystem.state.noWriteRight') }\n }\n if (isUndefined(result) || !isActionable(result.axes)) {\n const access = result?.axes.access\n const reason =\n access === UserSystemAccess.Forbidden\n ? t('common.userSystem.state.forbidden')\n : access === UserSystemAccess.Ok\n ? t('common.userSystem.state.absent')\n : t('common.userSystem.state.unavailable')\n return { descriptor, selectable: false, reason }\n }\n // Already in the target state. A no-op PUT would still run `updateRelations()` in cms over many fields, so skip it.\n if (props.action === BulkAction.Enable && result.axes.enabled === true) {\n return { descriptor, selectable: false, reason: t('common.userSystem.bulk.alreadyInState') }\n }\n if (props.action === BulkAction.Disable && result.axes.enabled === false) {\n return { descriptor, selectable: false, reason: t('common.userSystem.bulk.alreadyInState') }\n }\n return { descriptor, selectable: true, reason: null }\n })\n)\n\nconst selectableSystems = computed(() => rows.value.filter((row) => row.selectable).map((row) => row.descriptor.system))\n\n// Tick everything actionable, blog and forum included. A departing employee is almost always switched off there too.\n// Their row note stays as information, not as a reason to untick.\nwatch(\n open,\n (value) => {\n if (!value) return\n showingLog.value = false\n selected.value = [...selectableSystems.value]\n },\n { immediate: true }\n)\n\nconst titleKey = computed(() => `common.userSystem.bulk.${props.action}.title`)\nconst confirmKey = computed(() => `common.userSystem.bulk.${props.action}.confirm`)\n\n/**\n * Only this run's entries. The log outlives a run, so without the filter the dialog would offer\n * to retry other actions' failures, such as a metadata repair, against the account on screen.\n */\nconst currentLog = computed(() =>\n store.bulkLog.filter((entry) => entry.action === props.action && entry.subjectId === store.resolvedId)\n)\n\nconst failed = computed(() =>\n currentLog.value.filter((entry) => entry.outcome !== BulkOutcome.Done && entry.outcome !== BulkOutcome.Pending)\n)\n\n// Re-check selectability: a right may have been granted or revoked while the dialog was open.\nconst actionable = computed(() => selected.value.filter((system) => selectableSystems.value.includes(system)))\n\nconst run = () => {\n if (actionable.value.length === 0) return\n showingLog.value = true\n emit('run', actionable.value)\n}\n\n/** Retries everything that failed, 403 included: the operator may have been granted the right meanwhile. */\nconst retryFailed = () => {\n emit(\n 'run',\n failed.value.map((entry) => entry.system)\n )\n}\n\nconst labelFor = (descriptor: AnyUserSystemDescriptor) => descriptor.label ?? descriptor.system\n</script>\n\n<template>\n <VDialog\n v-model=\"open\"\n :max-width=\"720\"\n data-cy=\"user-bulk-dialog\"\n >\n <VCard>\n <!-- Closing while the calls are still going is allowed; the run lives in the store. -->\n <ADialogToolbar @cancel=\"open = false\">\n {{ t(titleKey) }}\n </ADialogToolbar>\n <VCardText v-if=\"!showingLog\">\n <VAlert\n v-if=\"store.identityConflict\"\n type=\"error\"\n variant=\"tonal\"\n density=\"compact\"\n class=\"mb-3\"\n >\n {{ t('common.userSystem.search.identityConflict') }}\n </VAlert>\n <div\n v-for=\"row in rows\"\n :key=\"row.descriptor.system\"\n class=\"d-flex align-center ga-2 py-1\"\n >\n <VCheckbox\n v-model=\"selected\"\n :value=\"row.descriptor.system\"\n :disabled=\"!row.selectable || !!store.identityConflict\"\n :data-cy=\"`bulk-system-${row.descriptor.system}`\"\n density=\"compact\"\n hide-details\n />\n <div class=\"font-weight-medium\">{{ labelFor(row.descriptor) }}</div>\n <AUserSystemStatusChip\n v-if=\"store.results.get(row.descriptor.system)\"\n :axes=\"store.results.get(row.descriptor.system)!.axes\"\n />\n <div\n v-if=\"row.reason\"\n class=\"text-body-small text-medium-emphasis\"\n >\n {{ row.reason }}\n </div>\n <div\n v-if=\"row.descriptor.enabledNote && action !== BulkAction.Metadata\"\n class=\"text-body-small text-warning w-100\"\n >\n {{ row.descriptor.enabledNote }}\n </div>\n <div\n v-if=\"row.descriptor.metadataNote && action === BulkAction.Metadata\"\n class=\"text-body-small text-warning w-100\"\n >\n {{ row.descriptor.metadataNote }}\n </div>\n </div>\n </VCardText>\n <VCardText v-else>\n <div class=\"text-label-large mb-2\">{{ t('common.userSystem.bulk.log') }}</div>\n <!--\n `polite`, not `assertive`: nine systems finishing in sequence would flood a screen reader.\n Focus deliberately stays put when the dialog switches to this view.\n -->\n <div\n aria-live=\"polite\"\n data-cy=\"user-bulk-log\"\n >\n <div\n v-for=\"entry in currentLog\"\n :key=\"entry.system\"\n class=\"d-flex align-center ga-2 py-1\"\n >\n <div class=\"font-weight-medium\">{{ entry.system }}</div>\n <div class=\"text-body-small\">{{ t(`common.userSystem.bulk.outcome.${entry.outcome}`) }}</div>\n <div\n v-if=\"entry.detail\"\n class=\"text-body-small text-medium-emphasis\"\n >\n {{ entry.detail }}\n </div>\n </div>\n </div>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"open = false\">\n {{ showingLog ? t('common.userSystem.bulk.close') : t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnTertiary\n v-if=\"showingLog && failed.length > 0 && !store.bulkRunning\"\n data-cy=\"user-bulk-retry\"\n @click.stop=\"retryFailed\"\n >\n {{ t('common.userSystem.bulk.retryFailed') }}\n </ABtnTertiary>\n <ABtnPrimary\n v-if=\"!showingLog\"\n :disabled=\"actionable.length === 0 || !!store.identityConflict\"\n data-cy=\"user-bulk-confirm\"\n @click.stop=\"run\"\n >\n {{ t(confirmKey, { count: actionable.length }, actionable.length) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n"],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AUserBulkActionDialog.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_resolveComponent","_openBlock","_createBlock","_component_VDialog","_withCtx","_createVNode","_component_VCard","ADialogToolbar","_createTextVNode","_toDisplayString","_unref","_component_VCardText","_component_VAlert","_createCommentVNode","_createElementBlock","_Fragment","_renderList","_component_VCheckbox","_createElementVNode","AUserSystemStatusChip","_component_VCardActions","_withModifiers","_component_VSpacer","ADialogToolbar_default","AUserSystemStatusChip_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","AUserBulkActionDialog_vue_vue_type_script_setup_true_lang_default","\"open\"","\"openModifiers\"","__emit","props","__props","emit","open","useModel","useI18n","store","useUserCrossSystemStore","selected","ref","showingLog","rows","computed","result","descriptor","t","descriptorMayWrite","isUndefined","isActionable","access","UserSystemAccess","BulkAction","selectableSystems","row","value","titleKey","confirmKey","currentLog","entry","failed","BulkOutcome","actionable","system","run","retryFailed","labelFor","_component_ABtnTertiary","resolveComponent","_component_ABtnPrimary","openBlock","createBlock","VDialog","_cache","$event","withCtx","createVNode","VCard","createTextVNode","toDisplayString","unref","VCardText","createElementVNode","createElementBlock","Fragment","renderList","createCommentVNode","VAlert","VCheckbox","VCardActions","withModifiers","VSpacer"],"sources":["../../../../src/domains/anzuUser/components/AUserBulkActionDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport AUserSystemStatusChip from '@/domains/anzuUser/components/AUserSystemStatusChip.vue'\nimport {\n BulkAction,\n BulkOutcome,\n useUserCrossSystemStore,\n type BulkActionType,\n} from '@/domains/anzuUser/store/userCrossSystemStore'\nimport { type AnyUserSystemDescriptor, descriptorMayWrite } from '@/domains/anzuUser/composables/userSystemDescriptor'\nimport { isActionable, UserSystemAccess } from '@/domains/anzuUser/utils/userSystemState'\nimport { isUndefined } from '@/shared/utils/common'\n\nconst props = defineProps<{\n action: BulkActionType\n descriptors: AnyUserSystemDescriptor[]\n}>()\n\nconst emit = defineEmits<{\n (e: 'run', systems: string[]): void\n}>()\n\nconst open = defineModel<boolean>('open', { required: true })\n\nconst { t } = useI18n()\nconst store = useUserCrossSystemStore()\n\nconst selected = ref<string[]>([])\n/** The dialog shows the list first and the log after the operator confirms. */\nconst showingLog = ref(false)\n\ninterface Row {\n descriptor: AnyUserSystemDescriptor\n selectable: boolean\n reason: string | null\n}\n\n/**\n * Which systems can be ticked, decided by the probe and not by ACL.\n *\n * This is a cross-system surface: no current user is loaded for the other backends, so `<Acl>`\n * would return false everywhere and quietly tick nothing. Not selectable are the systems the probe\n * can speak for -- 403, 404, switched off in configuration -- plus the ones that did not answer at\n * all, because acting on those would be a guess. \"May read but may not write\" cannot be seen from\n * here and ends up as a 403 in the log.\n */\nconst rows = computed<Row[]>(() =>\n props.descriptors.map((descriptor) => {\n const result = store.results.get(descriptor.system)\n if (!descriptor.isEnabled()) {\n return { descriptor, selectable: false, reason: t('common.userSystem.state.configDisabled') }\n }\n if (!descriptorMayWrite(descriptor, 'update')) {\n return { descriptor, selectable: false, reason: t('common.userSystem.state.noWriteRight') }\n }\n if (isUndefined(result) || !isActionable(result.axes)) {\n const access = result?.axes.access\n const reason =\n access === UserSystemAccess.Forbidden\n ? t('common.userSystem.state.forbidden')\n : access === UserSystemAccess.Ok\n ? t('common.userSystem.state.absent')\n : t('common.userSystem.state.unavailable')\n return { descriptor, selectable: false, reason }\n }\n // Already where the action would take it. A no-op PUT would still run `updateRelations()` in\n // cms over seven scalars and twelve collections -- risk for nothing.\n if (props.action === BulkAction.Enable && result.axes.enabled === true) {\n return { descriptor, selectable: false, reason: t('common.userSystem.bulk.alreadyInState') }\n }\n if (props.action === BulkAction.Disable && result.axes.enabled === false) {\n return { descriptor, selectable: false, reason: t('common.userSystem.bulk.alreadyInState') }\n }\n return { descriptor, selectable: true, reason: null }\n })\n)\n\nconst selectableSystems = computed(() => rows.value.filter((row) => row.selectable).map((row) => row.descriptor.system))\n\n// Everything that can be acted on, ticked. Blog and forum included: in practice a departing\n// employee is switched off there too in almost every case, so leaving them out would mean an extra\n// click nearly always. The note in their row stays -- as information, not as a reason to untick.\nwatch(\n open,\n (value) => {\n if (!value) return\n showingLog.value = false\n selected.value = [...selectableSystems.value]\n },\n { immediate: true }\n)\n\nconst titleKey = computed(() => `common.userSystem.bulk.${props.action}.title`)\nconst confirmKey = computed(() => `common.userSystem.bulk.${props.action}.confirm`)\n\n/**\n * This run's lines only.\n *\n * The log outlives a run on purpose, so without the filter the dialog would show a metadata repair's\n * failures and offer to retry them -- as an enable or a disable, against whichever account is on\n * screen now.\n */\nconst currentLog = computed(() =>\n store.bulkLog.filter((entry) => entry.action === props.action && entry.subjectId === store.resolvedId)\n)\n\nconst failed = computed(() =>\n currentLog.value.filter((entry) => entry.outcome !== BulkOutcome.Done && entry.outcome !== BulkOutcome.Pending)\n)\n\n// What can be acted on now: a right that arrived or went while the dialog was open counts.\nconst actionable = computed(() => selected.value.filter((system) => selectableSystems.value.includes(system)))\n\nconst run = () => {\n if (actionable.value.length === 0) return\n showingLog.value = true\n emit('run', actionable.value)\n}\n\n/** Retries everything that failed, 403 included: the operator may have been granted the right meanwhile. */\nconst retryFailed = () => {\n emit(\n 'run',\n failed.value.map((entry) => entry.system)\n )\n}\n\nconst labelFor = (descriptor: AnyUserSystemDescriptor) => descriptor.label ?? descriptor.system\n</script>\n\n<template>\n <VDialog\n v-model=\"open\"\n :max-width=\"720\"\n data-cy=\"user-bulk-dialog\"\n >\n <VCard>\n <!-- Closing while the calls are still going is allowed; the run lives in the store. -->\n <ADialogToolbar @cancel=\"open = false\">\n {{ t(titleKey) }}\n </ADialogToolbar>\n <VCardText v-if=\"!showingLog\">\n <VAlert\n v-if=\"store.identityConflict\"\n type=\"error\"\n variant=\"tonal\"\n density=\"compact\"\n class=\"mb-3\"\n >\n {{ t('common.userSystem.search.identityConflict') }}\n </VAlert>\n <div\n v-for=\"row in rows\"\n :key=\"row.descriptor.system\"\n class=\"d-flex align-center ga-2 py-1\"\n >\n <VCheckbox\n v-model=\"selected\"\n :value=\"row.descriptor.system\"\n :disabled=\"!row.selectable || !!store.identityConflict\"\n :data-cy=\"`bulk-system-${row.descriptor.system}`\"\n density=\"compact\"\n hide-details\n />\n <div class=\"font-weight-medium\">{{ labelFor(row.descriptor) }}</div>\n <AUserSystemStatusChip\n v-if=\"store.results.get(row.descriptor.system)\"\n :axes=\"store.results.get(row.descriptor.system)!.axes\"\n />\n <div\n v-if=\"row.reason\"\n class=\"text-body-small text-medium-emphasis\"\n >\n {{ row.reason }}\n </div>\n <div\n v-if=\"row.descriptor.enabledNote && action !== BulkAction.Metadata\"\n class=\"text-body-small text-warning w-100\"\n >\n {{ row.descriptor.enabledNote }}\n </div>\n <div\n v-if=\"row.descriptor.metadataNote && action === BulkAction.Metadata\"\n class=\"text-body-small text-warning w-100\"\n >\n {{ row.descriptor.metadataNote }}\n </div>\n </div>\n </VCardText>\n <VCardText v-else>\n <div class=\"text-label-large mb-2\">{{ t('common.userSystem.bulk.log') }}</div>\n <!--\n `polite`, never `assertive`: nine systems finishing one after another would flood a screen\n reader. Focus deliberately stays where it is when the dialog switches to this view.\n -->\n <div\n aria-live=\"polite\"\n data-cy=\"user-bulk-log\"\n >\n <div\n v-for=\"entry in currentLog\"\n :key=\"entry.system\"\n class=\"d-flex align-center ga-2 py-1\"\n >\n <div class=\"font-weight-medium\">{{ entry.system }}</div>\n <div class=\"text-body-small\">{{ t(`common.userSystem.bulk.outcome.${entry.outcome}`) }}</div>\n <div\n v-if=\"entry.detail\"\n class=\"text-body-small text-medium-emphasis\"\n >\n {{ entry.detail }}\n </div>\n </div>\n </div>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"open = false\">\n {{ showingLog ? t('common.userSystem.bulk.close') : t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnTertiary\n v-if=\"showingLog && failed.length > 0 && !store.bulkRunning\"\n data-cy=\"user-bulk-retry\"\n @click.stop=\"retryFailed\"\n >\n {{ t('common.userSystem.bulk.retryFailed') }}\n </ABtnTertiary>\n <ABtnPrimary\n v-if=\"!showingLog\"\n :disabled=\"actionable.length === 0 || !!store.identityConflict\"\n data-cy=\"user-bulk-confirm\"\n @click.stop=\"run\"\n >\n {{ t(confirmKey, { count: actionable.length }, actionable.length) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"AUserBulkActionDialog.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_resolveComponent","_openBlock","_createBlock","_component_VDialog","_withCtx","_createVNode","_component_VCard","ADialogToolbar","_createTextVNode","_toDisplayString","_unref","_component_VCardText","_component_VAlert","_createCommentVNode","_createElementBlock","_Fragment","_renderList","_component_VCheckbox","_createElementVNode","AUserSystemStatusChip","_component_VCardActions","_withModifiers","_component_VSpacer","ADialogToolbar_default","AUserSystemStatusChip_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","AUserBulkActionDialog_vue_vue_type_script_setup_true_lang_default","\"open\"","\"openModifiers\"","__emit","props","__props","emit","open","useModel","useI18n","store","useUserCrossSystemStore","selected","ref","showingLog","rows","computed","result","descriptor","t","descriptorMayWrite","isUndefined","isActionable","access","UserSystemAccess","BulkAction","selectableSystems","row","value","titleKey","confirmKey","currentLog","entry","failed","BulkOutcome","actionable","system","run","retryFailed","labelFor","_component_ABtnTertiary","resolveComponent","_component_ABtnPrimary","openBlock","createBlock","VDialog","_cache","$event","withCtx","createVNode","VCard","createTextVNode","toDisplayString","unref","VCardText","createElementVNode","createElementBlock","Fragment","renderList","createCommentVNode","VAlert","VCheckbox","VCardActions","withModifiers","VSpacer"],"sources":["../../../../src/domains/anzuUser/components/AUserBulkActionDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, ref, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport AUserSystemStatusChip from '@/domains/anzuUser/components/AUserSystemStatusChip.vue'\nimport {\n BulkAction,\n BulkOutcome,\n useUserCrossSystemStore,\n type BulkActionType,\n} from '@/domains/anzuUser/store/userCrossSystemStore'\nimport { type AnyUserSystemDescriptor, descriptorMayWrite } from '@/domains/anzuUser/composables/userSystemDescriptor'\nimport { isActionable, UserSystemAccess } from '@/domains/anzuUser/utils/userSystemState'\nimport { isUndefined } from '@/shared/utils/common'\n\nconst props = defineProps<{\n action: BulkActionType\n descriptors: AnyUserSystemDescriptor[]\n}>()\n\nconst emit = defineEmits<{\n (e: 'run', systems: string[]): void\n}>()\n\nconst open = defineModel<boolean>('open', { required: true })\n\nconst { t } = useI18n()\nconst store = useUserCrossSystemStore()\n\nconst selected = ref<string[]>([])\nconst showingLog = ref(false)\n\ninterface Row {\n descriptor: AnyUserSystemDescriptor\n selectable: boolean\n reason: string | null\n}\n\n/**\n * Which systems can be ticked is decided by the probe, not by ACL.\n * No current user is loaded for the other backends, so `<Acl>` would return false everywhere.\n * Not selectable: systems the probe reports as 403, 404 or switched off, and systems that did not answer.\n * Read-but-not-write cannot be seen here and ends up as a 403 in the log.\n */\nconst rows = computed<Row[]>(() =>\n props.descriptors.map((descriptor) => {\n const result = store.results.get(descriptor.system)\n if (!descriptor.isEnabled()) {\n return { descriptor, selectable: false, reason: t('common.userSystem.state.configDisabled') }\n }\n if (!descriptorMayWrite(descriptor, 'update')) {\n return { descriptor, selectable: false, reason: t('common.userSystem.state.noWriteRight') }\n }\n if (isUndefined(result) || !isActionable(result.axes)) {\n const access = result?.axes.access\n const reason =\n access === UserSystemAccess.Forbidden\n ? t('common.userSystem.state.forbidden')\n : access === UserSystemAccess.Ok\n ? t('common.userSystem.state.absent')\n : t('common.userSystem.state.unavailable')\n return { descriptor, selectable: false, reason }\n }\n // Already in the target state. A no-op PUT would still run `updateRelations()` in cms over many fields, so skip it.\n if (props.action === BulkAction.Enable && result.axes.enabled === true) {\n return { descriptor, selectable: false, reason: t('common.userSystem.bulk.alreadyInState') }\n }\n if (props.action === BulkAction.Disable && result.axes.enabled === false) {\n return { descriptor, selectable: false, reason: t('common.userSystem.bulk.alreadyInState') }\n }\n return { descriptor, selectable: true, reason: null }\n })\n)\n\nconst selectableSystems = computed(() => rows.value.filter((row) => row.selectable).map((row) => row.descriptor.system))\n\n// Tick everything actionable, blog and forum included. A departing employee is almost always switched off there too.\n// Their row note stays as information, not as a reason to untick.\nwatch(\n open,\n (value) => {\n if (!value) return\n showingLog.value = false\n selected.value = [...selectableSystems.value]\n },\n { immediate: true }\n)\n\nconst titleKey = computed(() => `common.userSystem.bulk.${props.action}.title`)\nconst confirmKey = computed(() => `common.userSystem.bulk.${props.action}.confirm`)\n\n/**\n * Only this run's entries. The log outlives a run, so without the filter the dialog would offer\n * to retry other actions' failures, such as a metadata repair, against the account on screen.\n */\nconst currentLog = computed(() =>\n store.bulkLog.filter((entry) => entry.action === props.action && entry.subjectId === store.resolvedId)\n)\n\nconst failed = computed(() =>\n currentLog.value.filter((entry) => entry.outcome !== BulkOutcome.Done && entry.outcome !== BulkOutcome.Pending)\n)\n\n// Re-check selectability: a right may have been granted or revoked while the dialog was open.\nconst actionable = computed(() => selected.value.filter((system) => selectableSystems.value.includes(system)))\n\nconst run = () => {\n if (actionable.value.length === 0) return\n showingLog.value = true\n emit('run', actionable.value)\n}\n\n/** Retries everything that failed, 403 included: the operator may have been granted the right meanwhile. */\nconst retryFailed = () => {\n emit(\n 'run',\n failed.value.map((entry) => entry.system)\n )\n}\n\nconst labelFor = (descriptor: AnyUserSystemDescriptor) => descriptor.label ?? descriptor.system\n</script>\n\n<template>\n <VDialog\n v-model=\"open\"\n :max-width=\"720\"\n data-cy=\"user-bulk-dialog\"\n >\n <VCard>\n <!-- Closing while the calls are still going is allowed; the run lives in the store. -->\n <ADialogToolbar @cancel=\"open = false\">\n {{ t(titleKey) }}\n </ADialogToolbar>\n <VCardText v-if=\"!showingLog\">\n <VAlert\n v-if=\"store.identityConflict\"\n type=\"error\"\n variant=\"tonal\"\n density=\"compact\"\n class=\"mb-3\"\n >\n {{ t('common.userSystem.search.identityConflict') }}\n </VAlert>\n <div\n v-for=\"row in rows\"\n :key=\"row.descriptor.system\"\n class=\"d-flex align-center ga-2 py-1\"\n >\n <VCheckbox\n v-model=\"selected\"\n :value=\"row.descriptor.system\"\n :disabled=\"!row.selectable || !!store.identityConflict\"\n :data-cy=\"`bulk-system-${row.descriptor.system}`\"\n density=\"compact\"\n hide-details\n />\n <div class=\"font-weight-medium\">{{ labelFor(row.descriptor) }}</div>\n <AUserSystemStatusChip\n v-if=\"store.results.get(row.descriptor.system)\"\n :axes=\"store.results.get(row.descriptor.system)!.axes\"\n />\n <div\n v-if=\"row.reason\"\n class=\"text-body-small text-medium-emphasis\"\n >\n {{ row.reason }}\n </div>\n <div\n v-if=\"row.descriptor.enabledNote && action !== BulkAction.Metadata\"\n class=\"text-body-small text-warning w-100\"\n >\n {{ row.descriptor.enabledNote }}\n </div>\n <div\n v-if=\"row.descriptor.metadataNote && action === BulkAction.Metadata\"\n class=\"text-body-small text-warning w-100\"\n >\n {{ row.descriptor.metadataNote }}\n </div>\n </div>\n </VCardText>\n <VCardText v-else>\n <div class=\"text-label-large mb-2\">{{ t('common.userSystem.bulk.log') }}</div>\n <!--\n `polite`, not `assertive`: nine systems finishing in sequence would flood a screen reader.\n Focus deliberately stays put when the dialog switches to this view.\n -->\n <div\n aria-live=\"polite\"\n data-cy=\"user-bulk-log\"\n >\n <div\n v-for=\"entry in currentLog\"\n :key=\"entry.system\"\n class=\"d-flex align-center ga-2 py-1\"\n >\n <div class=\"font-weight-medium\">{{ entry.system }}</div>\n <div class=\"text-body-small\">{{ t(`common.userSystem.bulk.outcome.${entry.outcome}`) }}</div>\n <div\n v-if=\"entry.detail\"\n class=\"text-body-small text-medium-emphasis\"\n >\n {{ entry.detail }}\n </div>\n </div>\n </div>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"open = false\">\n {{ showingLog ? t('common.userSystem.bulk.close') : t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnTertiary\n v-if=\"showingLog && failed.length > 0 && !store.bulkRunning\"\n data-cy=\"user-bulk-retry\"\n @click.stop=\"retryFailed\"\n >\n {{ t('common.userSystem.bulk.retryFailed') }}\n </ABtnTertiary>\n <ABtnPrimary\n v-if=\"!showingLog\"\n :disabled=\"actionable.length === 0 || !!store.identityConflict\"\n data-cy=\"user-bulk-confirm\"\n @click.stop=\"run\"\n >\n {{ t(confirmKey, { count: actionable.length }, actionable.length) }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AUserCopyPermissionsDialog.js","names":["_sfc_main","AUserCopyPermissionsDialog_vue_vue_type_script_setup_true_lang_default","AUserCopyPermissionsDialog_default"],"sources":["../../../../src/domains/anzuUser/components/AUserCopyPermissionsDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"TUser extends Pick<AnzuUser, 'roles' | 'permissionGroups' | 'permissions'>\">\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\n// `ABtnPrimary` / `ABtnTertiary` are Vuetify aliases registered globally by\n// `commonVuetifyConfig`, so they are not imported.\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport type { AnzuUser } from '@/shared/types/AnzuUser'\nimport type { IntegerIdNullable } from '@/shared/types/common'\nimport { cloneDeep, isNull } from '@/shared/utils/common'\n\nconst props = defineProps<{\n /**\n * Reads the source account from the server. It is a prop because the shape of a user differs per\n * system -- cms answers `CmsUserDto`, dam `DamUserDto` -- and because the page already holds an\n * api instance pointed at the right backend.\n */\n fetchSourceUser: (id: number) => Promise<AnzuUser>\n /**\n * Copies whatever the system keeps beyond roles, groups and grants. cms has nineteen such\n * fields; systems with none leave this out.\n */\n copySystemFields?: ((target: TUser, source: AnzuUser) => void) | undefined\n /** i18n keys listed in the dialog, so the operator sees exactly what will be overwritten. */\n copiedSettingKeys?: string[]\n}>()\n\n// What the dialog overwrites is all it needs of the account: a wizard holds a system's permissions without the rest.\nconst user = defineModel<TUser>('user', { required: true })\n\nconst dialog = ref(false)\nconst loading = ref(false)\nconst srcUserId = ref<IntegerIdNullable>(null)\n\nconst { t } = useI18n()\nconst { showErrorsDefault } = useAlerts()\n\nconst showDialog = () => {\n srcUserId.value = null\n dialog.value = true\n}\n\nconst confirmDialog = async () => {\n if (isNull(srcUserId.value)) return\n loading.value = true\n try {\n const source = await props.fetchSourceUser(srcUserId.value)\n user.value.roles = cloneDeep(source.roles)\n user.value.permissionGroups = cloneDeep(source.permissionGroups)\n user.value.permissions = cloneDeep(source.permissions)\n props.copySystemFields?.(user.value, source)\n dialog.value = false\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n loading.value = false\n }\n}\n</script>\n\n<template>\n <div>\n <p class=\"text-body-small\">\n {{ t('common.anzuUser.copyPermissions.desc') }}\n </p>\n <div class=\"text-right\">\n <ABtnTertiary\n size=\"small\"\n data-cy=\"user-copy-permissions\"\n @click.stop=\"showDialog\"\n >\n {{ t('common.anzuUser.copyPermissions.title') }}\n </ABtnTertiary>\n </div>\n <VDialog\n v-if=\"dialog\"\n :model-value=\"dialog\"\n :max-width=\"900\"\n >\n <VCard>\n <ADialogToolbar @cancel=\"dialog = false\">\n {{ t('common.anzuUser.copyPermissions.title') }}\n </ADialogToolbar>\n <VCardText>\n <!-- Whose account to copy from. The app owns the picker: it knows its own user list. -->\n <slot\n name=\"sourcePicker\"\n :select=\"(id: IntegerIdNullable) => (srcUserId = id)\"\n :selected=\"srcUserId\"\n />\n <strong>{{ t('common.anzuUser.copyPermissions.copiedSettings') }}</strong>\n <ul class=\"ml-5 text-body-small\">\n <li>{{ t('common.anzuUser.model.roles') }}</li>\n <li>{{ t('common.anzuUser.model.permissionGroups') }}</li>\n <li>{{ t('common.anzuUser.model.permissions') }}</li>\n <li\n v-for=\"key in copiedSettingKeys\"\n :key=\"key\"\n >\n {{ t(key) }}\n </li>\n </ul>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"dialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnPrimary\n :disabled=\"isNull(srcUserId)\"\n :loading=\"loading\"\n data-cy=\"user-copy-permissions-confirm\"\n @click.stop=\"confirmDialog\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AUserCopyPermissionsDialog.js","names":["_sfc_main","AUserCopyPermissionsDialog_vue_vue_type_script_setup_true_lang_default","AUserCopyPermissionsDialog_default"],"sources":["../../../../src/domains/anzuUser/components/AUserCopyPermissionsDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"TUser extends Pick<AnzuUser, 'roles' | 'permissionGroups' | 'permissions'>\">\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\n// `ABtnPrimary` / `ABtnTertiary` are Vuetify aliases registered globally by\n// `commonVuetifyConfig`, so they are not imported.\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport type { AnzuUser } from '@/shared/types/AnzuUser'\nimport type { IntegerIdNullable } from '@/shared/types/common'\nimport { cloneDeep, isNull } from '@/shared/utils/common'\n\nconst props = defineProps<{\n /**\n * Reads the source account from the server. A prop because the user shape differs per system (cms\n * `CmsUserDto`, dam `DamUserDto`), and the page already has an api instance for the right backend.\n */\n fetchSourceUser: (id: number) => Promise<AnzuUser>\n /**\n * Copies whatever the system keeps beyond roles, groups and grants. cms has nineteen such\n * fields; systems with none leave this out.\n */\n copySystemFields?: ((target: TUser, source: AnzuUser) => void) | undefined\n /** i18n keys listed in the dialog, so the operator sees exactly what will be overwritten. */\n copiedSettingKeys?: string[]\n}>()\n\n// Typed `TUser` with only the overwritten fields, because a wizard\n// holds a system's permissions without the rest of the account.\nconst user = defineModel<TUser>('user', { required: true })\n\nconst dialog = ref(false)\nconst loading = ref(false)\nconst srcUserId = ref<IntegerIdNullable>(null)\n\nconst { t } = useI18n()\nconst { showErrorsDefault } = useAlerts()\n\nconst showDialog = () => {\n srcUserId.value = null\n dialog.value = true\n}\n\nconst confirmDialog = async () => {\n if (isNull(srcUserId.value)) return\n loading.value = true\n try {\n const source = await props.fetchSourceUser(srcUserId.value)\n user.value.roles = cloneDeep(source.roles)\n user.value.permissionGroups = cloneDeep(source.permissionGroups)\n user.value.permissions = cloneDeep(source.permissions)\n props.copySystemFields?.(user.value, source)\n dialog.value = false\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n loading.value = false\n }\n}\n</script>\n\n<template>\n <div>\n <p class=\"text-body-small\">\n {{ t('common.anzuUser.copyPermissions.desc') }}\n </p>\n <div class=\"text-right\">\n <ABtnTertiary\n size=\"small\"\n data-cy=\"user-copy-permissions\"\n @click.stop=\"showDialog\"\n >\n {{ t('common.anzuUser.copyPermissions.title') }}\n </ABtnTertiary>\n </div>\n <VDialog\n v-if=\"dialog\"\n :model-value=\"dialog\"\n :max-width=\"900\"\n >\n <VCard>\n <ADialogToolbar @cancel=\"dialog = false\">\n {{ t('common.anzuUser.copyPermissions.title') }}\n </ADialogToolbar>\n <VCardText>\n <!-- Whose account to copy from. The app owns the picker: it knows its own user list. -->\n <slot\n name=\"sourcePicker\"\n :select=\"(id: IntegerIdNullable) => (srcUserId = id)\"\n :selected=\"srcUserId\"\n />\n <strong>{{ t('common.anzuUser.copyPermissions.copiedSettings') }}</strong>\n <ul class=\"ml-5 text-body-small\">\n <li>{{ t('common.anzuUser.model.roles') }}</li>\n <li>{{ t('common.anzuUser.model.permissionGroups') }}</li>\n <li>{{ t('common.anzuUser.model.permissions') }}</li>\n <li\n v-for=\"key in copiedSettingKeys\"\n :key=\"key\"\n >\n {{ t(key) }}\n </li>\n </ul>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"dialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnPrimary\n :disabled=\"isNull(srcUserId)\"\n :loading=\"loading\"\n data-cy=\"user-copy-permissions-confirm\"\n @click.stop=\"confirmDialog\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n"],"mappings":""}
@@ -3,9 +3,8 @@ import { IntegerIdNullable } from '../../../shared/types/common';
3
3
  declare const __VLS_export: <TUser extends Pick<AnzuUser, "roles" | "permissionGroups" | "permissions">>(__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: __VLS_PrettifyLocal<Pick<NonNullable<Awaited<typeof __VLS_setup>>, "attrs" | "emit" | "slots">>, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
4
4
  props: import('vue').PublicProps & __VLS_PrettifyLocal<({
5
5
  /**
6
- * Reads the source account from the server. It is a prop because the shape of a user differs per
7
- * system -- cms answers `CmsUserDto`, dam `DamUserDto` -- and because the page already holds an
8
- * api instance pointed at the right backend.
6
+ * Reads the source account from the server. A prop because the user shape differs per system (cms
7
+ * `CmsUserDto`, dam `DamUserDto`), and the page already has an api instance for the right backend.
9
8
  */
10
9
  fetchSourceUser: (id: number) => Promise<AnzuUser>;
11
10
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"AUserCopyPermissionsDialog.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_resolveComponent","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_unref","_createVNode","_withModifiers","_withCtx","_createTextVNode","_createBlock","_component_VDialog","_component_VCard","ADialogToolbar","_component_VCardText","_renderSlot","_Fragment","_renderList","_component_VCardActions","_component_VSpacer","_createCommentVNode","ADialogToolbar_default","_hoisted_1","_hoisted_2","_hoisted_3","AUserCopyPermissionsDialog_vue_vue_type_script_setup_true_lang_default","\"user\"","\"userModifiers\"","props","__props","user","useModel","dialog","ref","loading","srcUserId","useI18n","useAlerts","showDialog","confirmDialog","source","cloneDeep","error","_component_ABtnTertiary","resolveComponent","_component_ABtnPrimary","openBlock","createElementBlock","createElementVNode","toDisplayString","unref","t","createVNode","withModifiers","withCtx","createTextVNode","createBlock","VDialog","VCard","_cache","VCardText","renderSlot","_ctx","id","Fragment","renderList","key","VCardActions","VSpacer","isNull","createCommentVNode"],"sources":["../../../../src/domains/anzuUser/components/AUserCopyPermissionsDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"TUser extends Pick<AnzuUser, 'roles' | 'permissionGroups' | 'permissions'>\">\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\n// `ABtnPrimary` / `ABtnTertiary` are Vuetify aliases registered globally by\n// `commonVuetifyConfig`, so they are not imported.\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport type { AnzuUser } from '@/shared/types/AnzuUser'\nimport type { IntegerIdNullable } from '@/shared/types/common'\nimport { cloneDeep, isNull } from '@/shared/utils/common'\n\nconst props = defineProps<{\n /**\n * Reads the source account from the server. It is a prop because the shape of a user differs per\n * system -- cms answers `CmsUserDto`, dam `DamUserDto` -- and because the page already holds an\n * api instance pointed at the right backend.\n */\n fetchSourceUser: (id: number) => Promise<AnzuUser>\n /**\n * Copies whatever the system keeps beyond roles, groups and grants. cms has nineteen such\n * fields; systems with none leave this out.\n */\n copySystemFields?: ((target: TUser, source: AnzuUser) => void) | undefined\n /** i18n keys listed in the dialog, so the operator sees exactly what will be overwritten. */\n copiedSettingKeys?: string[]\n}>()\n\n// What the dialog overwrites is all it needs of the account: a wizard holds a system's permissions without the rest.\nconst user = defineModel<TUser>('user', { required: true })\n\nconst dialog = ref(false)\nconst loading = ref(false)\nconst srcUserId = ref<IntegerIdNullable>(null)\n\nconst { t } = useI18n()\nconst { showErrorsDefault } = useAlerts()\n\nconst showDialog = () => {\n srcUserId.value = null\n dialog.value = true\n}\n\nconst confirmDialog = async () => {\n if (isNull(srcUserId.value)) return\n loading.value = true\n try {\n const source = await props.fetchSourceUser(srcUserId.value)\n user.value.roles = cloneDeep(source.roles)\n user.value.permissionGroups = cloneDeep(source.permissionGroups)\n user.value.permissions = cloneDeep(source.permissions)\n props.copySystemFields?.(user.value, source)\n dialog.value = false\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n loading.value = false\n }\n}\n</script>\n\n<template>\n <div>\n <p class=\"text-body-small\">\n {{ t('common.anzuUser.copyPermissions.desc') }}\n </p>\n <div class=\"text-right\">\n <ABtnTertiary\n size=\"small\"\n data-cy=\"user-copy-permissions\"\n @click.stop=\"showDialog\"\n >\n {{ t('common.anzuUser.copyPermissions.title') }}\n </ABtnTertiary>\n </div>\n <VDialog\n v-if=\"dialog\"\n :model-value=\"dialog\"\n :max-width=\"900\"\n >\n <VCard>\n <ADialogToolbar @cancel=\"dialog = false\">\n {{ t('common.anzuUser.copyPermissions.title') }}\n </ADialogToolbar>\n <VCardText>\n <!-- Whose account to copy from. The app owns the picker: it knows its own user list. -->\n <slot\n name=\"sourcePicker\"\n :select=\"(id: IntegerIdNullable) => (srcUserId = id)\"\n :selected=\"srcUserId\"\n />\n <strong>{{ t('common.anzuUser.copyPermissions.copiedSettings') }}</strong>\n <ul class=\"ml-5 text-body-small\">\n <li>{{ t('common.anzuUser.model.roles') }}</li>\n <li>{{ t('common.anzuUser.model.permissionGroups') }}</li>\n <li>{{ t('common.anzuUser.model.permissions') }}</li>\n <li\n v-for=\"key in copiedSettingKeys\"\n :key=\"key\"\n >\n {{ t(key) }}\n </li>\n </ul>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"dialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnPrimary\n :disabled=\"isNull(srcUserId)\"\n :loading=\"loading\"\n data-cy=\"user-copy-permissions-confirm\"\n @click.stop=\"confirmDialog\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"AUserCopyPermissionsDialog.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_resolveComponent","_openBlock","_createElementBlock","_createElementVNode","_toDisplayString","_unref","_createVNode","_withModifiers","_withCtx","_createTextVNode","_createBlock","_component_VDialog","_component_VCard","ADialogToolbar","_component_VCardText","_renderSlot","_Fragment","_renderList","_component_VCardActions","_component_VSpacer","_createCommentVNode","ADialogToolbar_default","_hoisted_1","_hoisted_2","_hoisted_3","AUserCopyPermissionsDialog_vue_vue_type_script_setup_true_lang_default","\"user\"","\"userModifiers\"","props","__props","user","useModel","dialog","ref","loading","srcUserId","useI18n","useAlerts","showDialog","confirmDialog","source","cloneDeep","error","_component_ABtnTertiary","resolveComponent","_component_ABtnPrimary","openBlock","createElementBlock","createElementVNode","toDisplayString","unref","t","createVNode","withModifiers","withCtx","createTextVNode","createBlock","VDialog","VCard","_cache","VCardText","renderSlot","_ctx","id","Fragment","renderList","key","VCardActions","VSpacer","isNull","createCommentVNode"],"sources":["../../../../src/domains/anzuUser/components/AUserCopyPermissionsDialog.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"TUser extends Pick<AnzuUser, 'roles' | 'permissionGroups' | 'permissions'>\">\nimport { ref } from 'vue'\nimport { useI18n } from 'vue-i18n'\n// `ABtnPrimary` / `ABtnTertiary` are Vuetify aliases registered globally by\n// `commonVuetifyConfig`, so they are not imported.\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport type { AnzuUser } from '@/shared/types/AnzuUser'\nimport type { IntegerIdNullable } from '@/shared/types/common'\nimport { cloneDeep, isNull } from '@/shared/utils/common'\n\nconst props = defineProps<{\n /**\n * Reads the source account from the server. A prop because the user shape differs per system (cms\n * `CmsUserDto`, dam `DamUserDto`), and the page already has an api instance for the right backend.\n */\n fetchSourceUser: (id: number) => Promise<AnzuUser>\n /**\n * Copies whatever the system keeps beyond roles, groups and grants. cms has nineteen such\n * fields; systems with none leave this out.\n */\n copySystemFields?: ((target: TUser, source: AnzuUser) => void) | undefined\n /** i18n keys listed in the dialog, so the operator sees exactly what will be overwritten. */\n copiedSettingKeys?: string[]\n}>()\n\n// Typed `TUser` with only the overwritten fields, because a wizard\n// holds a system's permissions without the rest of the account.\nconst user = defineModel<TUser>('user', { required: true })\n\nconst dialog = ref(false)\nconst loading = ref(false)\nconst srcUserId = ref<IntegerIdNullable>(null)\n\nconst { t } = useI18n()\nconst { showErrorsDefault } = useAlerts()\n\nconst showDialog = () => {\n srcUserId.value = null\n dialog.value = true\n}\n\nconst confirmDialog = async () => {\n if (isNull(srcUserId.value)) return\n loading.value = true\n try {\n const source = await props.fetchSourceUser(srcUserId.value)\n user.value.roles = cloneDeep(source.roles)\n user.value.permissionGroups = cloneDeep(source.permissionGroups)\n user.value.permissions = cloneDeep(source.permissions)\n props.copySystemFields?.(user.value, source)\n dialog.value = false\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n loading.value = false\n }\n}\n</script>\n\n<template>\n <div>\n <p class=\"text-body-small\">\n {{ t('common.anzuUser.copyPermissions.desc') }}\n </p>\n <div class=\"text-right\">\n <ABtnTertiary\n size=\"small\"\n data-cy=\"user-copy-permissions\"\n @click.stop=\"showDialog\"\n >\n {{ t('common.anzuUser.copyPermissions.title') }}\n </ABtnTertiary>\n </div>\n <VDialog\n v-if=\"dialog\"\n :model-value=\"dialog\"\n :max-width=\"900\"\n >\n <VCard>\n <ADialogToolbar @cancel=\"dialog = false\">\n {{ t('common.anzuUser.copyPermissions.title') }}\n </ADialogToolbar>\n <VCardText>\n <!-- Whose account to copy from. The app owns the picker: it knows its own user list. -->\n <slot\n name=\"sourcePicker\"\n :select=\"(id: IntegerIdNullable) => (srcUserId = id)\"\n :selected=\"srcUserId\"\n />\n <strong>{{ t('common.anzuUser.copyPermissions.copiedSettings') }}</strong>\n <ul class=\"ml-5 text-body-small\">\n <li>{{ t('common.anzuUser.model.roles') }}</li>\n <li>{{ t('common.anzuUser.model.permissionGroups') }}</li>\n <li>{{ t('common.anzuUser.model.permissions') }}</li>\n <li\n v-for=\"key in copiedSettingKeys\"\n :key=\"key\"\n >\n {{ t(key) }}\n </li>\n </ul>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"dialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnPrimary\n :disabled=\"isNull(srcUserId)\"\n :loading=\"loading\"\n data-cy=\"user-copy-permissions-confirm\"\n @click.stop=\"confirmDialog\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AUserCreateInSystemButton.js","names":["_sfc_main","AUserCreateInSystemButton_vue_vue_type_script_setup_true_lang_default","AUserCreateInSystemButton_default"],"sources":["../../../../src/domains/anzuUser/components/AUserCreateInSystemButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ref, watch } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport AUserMetadataForm from '@/domains/anzuUser/components/AUserMetadataForm.vue'\nimport { useAnzuUserFactory } from '@/domains/anzuUser/factory/AnzuUserFactory'\nimport type { BaseUser } from '@/shared/types/AnzuUser'\nimport type { IntegerIdNullable } from '@/shared/types/common'\nimport { cloneDeep, isNull } from '@/shared/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n /** The system's name as the app translates it. */\n systemLabel: string\n /** The system's `createNote` -- what is special about having an account there. */\n createNote?: string | undefined\n /**\n * Whether the account about to be created will be switched on.\n *\n * The sentence about a working public account is composed here rather than carried by the\n * descriptor, because it depends on the value being sent: creating from a panel copies the\n * source account's `enabled` -- usually true -- while creating after a search that found\n * nobody sends false, since there is no source to copy from.\n */\n willBeEnabled?: boolean\n loading?: boolean\n disabled?: boolean\n /** The target system's `requiredMetadata`: the profile the form validates against. */\n requiredMetadata?: boolean\n /** The person's id. Always drawn and never editable here -- this path is about somebody who exists. */\n userId?: IntegerIdNullable\n /**\n * What is already known about them, to prefill the form.\n *\n * Not the body that gets posted: the caller reads the source again immediately before the POST.\n * This is what the operator sees and completes, and completing it is the point -- a person known\n * only in blog usually has an empty `person`, while the target may require it, so a silent copy\n * would create a record the target's own form then refuses to save.\n */\n source?: BaseUser | null\n }>(),\n {\n createNote: undefined,\n willBeEnabled: false,\n loading: false,\n disabled: false,\n requiredMetadata: false,\n userId: null,\n source: null,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'confirm', user: BaseUser): void\n}>()\n\nconst { t } = useI18n()\nconst { createAnzuUser } = useAnzuUserFactory()\nconst dialog = ref(false)\n\nconst user = ref<BaseUser>(createAnzuUser())\nconst v$ = useVuelidate()\n\n// Seeded on every open, not once: the row behind it is re-probed after each write, and a stale\n// prefill would put what the account looked like two writes ago into the body.\nwatch(dialog, (open) => {\n if (!open) return\n const seed = isNull(props.source) ? createAnzuUser() : cloneDeep(props.source)\n if (!isNull(props.userId)) seed.id = props.userId\n user.value = seed\n v$.value.$reset()\n})\n\nconst confirm = async () => {\n if (!(await v$.value.$validate())) return\n dialog.value = false\n emit('confirm', cloneDeep(user.value))\n}\n</script>\n\n<template>\n <div class=\"d-inline-flex\">\n <VBtn\n :disabled=\"disabled\"\n :loading=\"loading\"\n size=\"small\"\n variant=\"flat\"\n color=\"primary\"\n data-cy=\"user-system-create\"\n @click.stop=\"dialog = true\"\n >\n {{ t('common.userSystem.button.create') }}\n </VBtn>\n <VDialog\n v-model=\"dialog\"\n :max-width=\"640\"\n >\n <VCard>\n <ADialogToolbar @cancel=\"dialog = false\">\n {{ t('common.userSystem.create.title', { system: systemLabel }) }}\n </ADialogToolbar>\n <VCardText>\n <!--\n The id is shown and locked: the person exists, this is their global id, and the whole\n operation is about giving that same identity an account here.\n -->\n <AUserMetadataForm\n v-model:user=\"user\"\n :required=\"requiredMetadata\"\n id-input\n is-edit\n />\n <!--\n Said out loud, because neither is obvious and neither can be undone: the account is\n created with nothing granted, and no admin in the fleet can delete an AnzuUser.\n -->\n <p class=\"mt-2\">{{ t('common.userSystem.create.note') }}</p>\n <p\n v-if=\"createNote\"\n class=\"mt-2\"\n >\n {{ createNote }}\n </p>\n <p class=\"mt-2\">\n {{\n props.willBeEnabled\n ? t('common.userSystem.create.willBeEnabled')\n : t('common.userSystem.create.willBeDisabled')\n }}\n </p>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"dialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnPrimary\n :loading=\"loading\"\n data-cy=\"user-system-create-confirm\"\n @click.stop=\"confirm\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AUserCreateInSystemButton.js","names":["_sfc_main","AUserCreateInSystemButton_vue_vue_type_script_setup_true_lang_default","AUserCreateInSystemButton_default"],"sources":["../../../../src/domains/anzuUser/components/AUserCreateInSystemButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ref, watch } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport AUserMetadataForm from '@/domains/anzuUser/components/AUserMetadataForm.vue'\nimport { useAnzuUserFactory } from '@/domains/anzuUser/factory/AnzuUserFactory'\nimport type { BaseUser } from '@/shared/types/AnzuUser'\nimport type { IntegerIdNullable } from '@/shared/types/common'\nimport { cloneDeep, isNull } from '@/shared/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n systemLabel: string\n /** The system's `createNote`: what is special about having an account there. */\n createNote?: string | undefined\n /**\n * Whether the created account will be switched on.\n * The sentence about a working public account is composed here, not in the descriptor, because it depends on\n * this value. Creating from a panel copies the source's `enabled`; creating after an empty search sends false.\n */\n willBeEnabled?: boolean\n loading?: boolean\n disabled?: boolean\n /** The target system's `requiredMetadata`: the profile the form validates against. */\n requiredMetadata?: boolean\n /** The person's id. Always shown and never editable here, because this path is for a person who already exists. */\n userId?: IntegerIdNullable\n /**\n * Known data used to prefill the form. It is not the posted\n * body: the caller re-reads the source right before the POST.\n * The operator must complete it. A person known only in blog usually has an empty `person`, which\n * the target may require, so a silent copy would create a record the target's form refuses to save.\n */\n source?: BaseUser | null\n }>(),\n {\n createNote: undefined,\n willBeEnabled: false,\n loading: false,\n disabled: false,\n requiredMetadata: false,\n userId: null,\n source: null,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'confirm', user: BaseUser): void\n}>()\n\nconst { t } = useI18n()\nconst { createAnzuUser } = useAnzuUserFactory()\nconst dialog = ref(false)\n\nconst user = ref<BaseUser>(createAnzuUser())\nconst v$ = useVuelidate()\n\n// Seeded on every open, not once. The row is re-probed after\n// each write, and a stale prefill would send outdated values.\nwatch(dialog, (open) => {\n if (!open) return\n const seed = isNull(props.source) ? createAnzuUser() : cloneDeep(props.source)\n if (!isNull(props.userId)) seed.id = props.userId\n user.value = seed\n v$.value.$reset()\n})\n\nconst confirm = async () => {\n if (!(await v$.value.$validate())) return\n dialog.value = false\n emit('confirm', cloneDeep(user.value))\n}\n</script>\n\n<template>\n <div class=\"d-inline-flex\">\n <VBtn\n :disabled=\"disabled\"\n :loading=\"loading\"\n size=\"small\"\n variant=\"flat\"\n color=\"primary\"\n data-cy=\"user-system-create\"\n @click.stop=\"dialog = true\"\n >\n {{ t('common.userSystem.button.create') }}\n </VBtn>\n <VDialog\n v-model=\"dialog\"\n :max-width=\"640\"\n >\n <VCard>\n <ADialogToolbar @cancel=\"dialog = false\">\n {{ t('common.userSystem.create.title', { system: systemLabel }) }}\n </ADialogToolbar>\n <VCardText>\n <!-- The id is shown and locked: this gives the existing person's global id an account here. -->\n <AUserMetadataForm\n v-model:user=\"user\"\n :required=\"requiredMetadata\"\n id-input\n is-edit\n />\n <!--\n Stated explicitly because neither is obvious or reversible: the account\n is created with nothing granted, and no admin can delete an AnzuUser.\n -->\n <p class=\"mt-2\">{{ t('common.userSystem.create.note') }}</p>\n <p\n v-if=\"createNote\"\n class=\"mt-2\"\n >\n {{ createNote }}\n </p>\n <p class=\"mt-2\">\n {{\n props.willBeEnabled\n ? t('common.userSystem.create.willBeEnabled')\n : t('common.userSystem.create.willBeDisabled')\n }}\n </p>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"dialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnPrimary\n :loading=\"loading\"\n data-cy=\"user-system-create-confirm\"\n @click.stop=\"confirm\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n"],"mappings":""}
@@ -1,32 +1,26 @@
1
1
  import { BaseUser } from '../../../shared/types/AnzuUser';
2
2
  import { IntegerIdNullable } from '../../../shared/types/common';
3
3
  type __VLS_Props = {
4
- /** The system's name as the app translates it. */
5
4
  systemLabel: string;
6
- /** The system's `createNote` -- what is special about having an account there. */
5
+ /** The system's `createNote`: what is special about having an account there. */
7
6
  createNote?: string | undefined;
8
7
  /**
9
- * Whether the account about to be created will be switched on.
10
- *
11
- * The sentence about a working public account is composed here rather than carried by the
12
- * descriptor, because it depends on the value being sent: creating from a panel copies the
13
- * source account's `enabled` -- usually true -- while creating after a search that found
14
- * nobody sends false, since there is no source to copy from.
8
+ * Whether the created account will be switched on.
9
+ * The sentence about a working public account is composed here, not in the descriptor, because it depends on
10
+ * this value. Creating from a panel copies the source's `enabled`; creating after an empty search sends false.
15
11
  */
16
12
  willBeEnabled?: boolean;
17
13
  loading?: boolean;
18
14
  disabled?: boolean;
19
15
  /** The target system's `requiredMetadata`: the profile the form validates against. */
20
16
  requiredMetadata?: boolean;
21
- /** The person's id. Always drawn and never editable here -- this path is about somebody who exists. */
17
+ /** The person's id. Always shown and never editable here, because this path is for a person who already exists. */
22
18
  userId?: IntegerIdNullable;
23
19
  /**
24
- * What is already known about them, to prefill the form.
25
- *
26
- * Not the body that gets posted: the caller reads the source again immediately before the POST.
27
- * This is what the operator sees and completes, and completing it is the point -- a person known
28
- * only in blog usually has an empty `person`, while the target may require it, so a silent copy
29
- * would create a record the target's own form then refuses to save.
20
+ * Known data used to prefill the form. It is not the posted
21
+ * body: the caller re-reads the source right before the POST.
22
+ * The operator must complete it. A person known only in blog usually has an empty `person`, which
23
+ * the target may require, so a silent copy would create a record the target's form refuses to save.
30
24
  */
31
25
  source?: BaseUser | null;
32
26
  };
@@ -1 +1 @@
1
- {"version":3,"file":"AUserCreateInSystemButton.vue_vue_type_script_setup_true_lang.js","names":["_resolveComponent","_openBlock","_createElementBlock","_createVNode","_component_VBtn","_withModifiers","_withCtx","_createTextVNode","_toDisplayString","_unref","_component_VDialog","_component_VCard","ADialogToolbar","_component_VCardText","AUserMetadataForm","_createElementVNode","_createCommentVNode","_component_VCardActions","_component_VSpacer","ADialogToolbar_default","AUserMetadataForm_default","useVuelidate","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","AUserCreateInSystemButton_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emit","useI18n","useAnzuUserFactory","dialog","ref","user","createAnzuUser","v$","open","seed","isNull","cloneDeep","confirm","_component_ABtnTertiary","resolveComponent","_component_ABtnPrimary","openBlock","createElementBlock","createVNode","VBtn","_cache","withModifiers","withCtx","createTextVNode","toDisplayString","unref","t","VDialog","$event","VCard","VCardText","createElementVNode","createCommentVNode","VCardActions","VSpacer"],"sources":["../../../../src/domains/anzuUser/components/AUserCreateInSystemButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ref, watch } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport AUserMetadataForm from '@/domains/anzuUser/components/AUserMetadataForm.vue'\nimport { useAnzuUserFactory } from '@/domains/anzuUser/factory/AnzuUserFactory'\nimport type { BaseUser } from '@/shared/types/AnzuUser'\nimport type { IntegerIdNullable } from '@/shared/types/common'\nimport { cloneDeep, isNull } from '@/shared/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n /** The system's name as the app translates it. */\n systemLabel: string\n /** The system's `createNote` -- what is special about having an account there. */\n createNote?: string | undefined\n /**\n * Whether the account about to be created will be switched on.\n *\n * The sentence about a working public account is composed here rather than carried by the\n * descriptor, because it depends on the value being sent: creating from a panel copies the\n * source account's `enabled` -- usually true -- while creating after a search that found\n * nobody sends false, since there is no source to copy from.\n */\n willBeEnabled?: boolean\n loading?: boolean\n disabled?: boolean\n /** The target system's `requiredMetadata`: the profile the form validates against. */\n requiredMetadata?: boolean\n /** The person's id. Always drawn and never editable here -- this path is about somebody who exists. */\n userId?: IntegerIdNullable\n /**\n * What is already known about them, to prefill the form.\n *\n * Not the body that gets posted: the caller reads the source again immediately before the POST.\n * This is what the operator sees and completes, and completing it is the point -- a person known\n * only in blog usually has an empty `person`, while the target may require it, so a silent copy\n * would create a record the target's own form then refuses to save.\n */\n source?: BaseUser | null\n }>(),\n {\n createNote: undefined,\n willBeEnabled: false,\n loading: false,\n disabled: false,\n requiredMetadata: false,\n userId: null,\n source: null,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'confirm', user: BaseUser): void\n}>()\n\nconst { t } = useI18n()\nconst { createAnzuUser } = useAnzuUserFactory()\nconst dialog = ref(false)\n\nconst user = ref<BaseUser>(createAnzuUser())\nconst v$ = useVuelidate()\n\n// Seeded on every open, not once: the row behind it is re-probed after each write, and a stale\n// prefill would put what the account looked like two writes ago into the body.\nwatch(dialog, (open) => {\n if (!open) return\n const seed = isNull(props.source) ? createAnzuUser() : cloneDeep(props.source)\n if (!isNull(props.userId)) seed.id = props.userId\n user.value = seed\n v$.value.$reset()\n})\n\nconst confirm = async () => {\n if (!(await v$.value.$validate())) return\n dialog.value = false\n emit('confirm', cloneDeep(user.value))\n}\n</script>\n\n<template>\n <div class=\"d-inline-flex\">\n <VBtn\n :disabled=\"disabled\"\n :loading=\"loading\"\n size=\"small\"\n variant=\"flat\"\n color=\"primary\"\n data-cy=\"user-system-create\"\n @click.stop=\"dialog = true\"\n >\n {{ t('common.userSystem.button.create') }}\n </VBtn>\n <VDialog\n v-model=\"dialog\"\n :max-width=\"640\"\n >\n <VCard>\n <ADialogToolbar @cancel=\"dialog = false\">\n {{ t('common.userSystem.create.title', { system: systemLabel }) }}\n </ADialogToolbar>\n <VCardText>\n <!--\n The id is shown and locked: the person exists, this is their global id, and the whole\n operation is about giving that same identity an account here.\n -->\n <AUserMetadataForm\n v-model:user=\"user\"\n :required=\"requiredMetadata\"\n id-input\n is-edit\n />\n <!--\n Said out loud, because neither is obvious and neither can be undone: the account is\n created with nothing granted, and no admin in the fleet can delete an AnzuUser.\n -->\n <p class=\"mt-2\">{{ t('common.userSystem.create.note') }}</p>\n <p\n v-if=\"createNote\"\n class=\"mt-2\"\n >\n {{ createNote }}\n </p>\n <p class=\"mt-2\">\n {{\n props.willBeEnabled\n ? t('common.userSystem.create.willBeEnabled')\n : t('common.userSystem.create.willBeDisabled')\n }}\n </p>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"dialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnPrimary\n :loading=\"loading\"\n data-cy=\"user-system-create-confirm\"\n @click.stop=\"confirm\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWA,IAAM4B,IAAQC,GA0CRC,IAAOH,GAIP,EAAE,SAAMI,EAAQ,GAChB,EAAE,sBAAmBC,EAAmB,GACxCC,IAASC,EAAI,EAAK,GAElBC,IAAOD,EAAcE,EAAe,CAAC,GACrCC,IAAKhB,EAAa;EAIxB,EAAMY,IAAS,MAAS;GACtB,IAAI,CAACK,GAAM;GACX,IAAMC,IAAOC,EAAOZ,EAAM,MAAM,IAAIQ,EAAe,IAAIK,EAAUb,EAAM,MAAM;GAG7E,AAFKY,EAAOZ,EAAM,MAAM,MAAG,EAAK,KAAKA,EAAM,SAC3C,EAAK,QAAQW,GACbF,EAAG,MAAM,OAAO;EAClB,CAAC;EAED,IAAMK,IAAU,YAAY;GAC1B,AAAM,MAAML,EAAG,MAAM,UAAU,MAC/B,EAAO,QAAQ,IACfP,EAAK,WAAWW,EAAUN,EAAK,KAAK,CAAC;EACvC;;;GAIE,OAAAlC,EAAA,GAAAC,EAiEM,OAjENoB,GAiEM,CAhEJnB,EAUOC,GAAA;IATJ,UAAUyB,EAAA;IACV,SAASA,EAAA;IACV,MAAK;IACL,SAAQ;IACR,OAAM;IACN,WAAQ;IACP,SAAK,AAAAqB,EAAA,OAAA7C,GAAA,MAAO,EAAA,QAAM,IAAA,CAAA,MAAA,CAAA;;IAEnB,SAAAC,QAA0C,CAAvCC,EAAAC,EAAAC,EAAA+C,CAAA,CAAC,CAAA,iCAAA,CAAA,GAAA,CAAA,C;;G,gCAENrD,EAoDUO,GAAA;IAnDC,YAAAuB,EAAA;IAAA,uBAAA,AAAAiB,EAAA,QAAA,MAAA,EAAM,QAAAQ;IACd,aAAW;;IAEZ,SAAApD,QA+CQ,CA/CRH,EA+CQQ,GAAA,MAAA;KA9CN,SAAAL,QAEiB;MAFjBH,EAEiBS,GAAA,EAFA,UAAM,AAAAsC,EAAA,QAAA,MAAE,EAAA,QAAM,G;OAC7B,SAAA5C,QAAkE,CAA/DC,EAAAC,EAAAC,EAAA+C,CAAA,CAAC,CAAA,kCAAA,EAAA,QAA6C3B,EAAA,YAAW,CAAA,CAAA,GAAA,CAAA,C;;;MAE9D1B,EA6BYU,GAAA,MAAA;OAxBV,SAAAP,QAKE;QALFH,EAKEW,GAAA;SAJQ,MAAMqB,EAAA;SAAA,iBAAA,AAAAe,EAAA,QAAA,MAAA,EAAI,QAAAQ;SACjB,UAAU7B,EAAA;SACX,YAAA;SACA,WAAA;;QAMFd,EAA4D,KAA5DQ,GAA4Df,EAAzCC,EAAA+C,CAAA,CAAC,CAAA,+BAAA,CAAA,GAAA,CAAA;QAEZ3B,EAAA,cADR5B,EAAA,GAAAC,EAKI,KALJsB,GAKIhB,EADCqB,EAAA,UAAU,GAAA,CAAA,K;QAEfd,EAMI,KANJU,GAMIjB,EAJAoB,EAAM,gBAAgCnB,EAAA+C,CAAA,CAAC,CAAA,wCAAA,IAA6D/C,EAAA+C,CAAA,CAAC,CAAA,yCAAA,CAAA,GAAA,CAAA;;;;MAM3GrD,EAYec,GAAA,MAAA;OAXb,SAAAX,QAEe;QAFfH,EAEewC,GAAA,EAFA,SAAK,AAAAO,EAAA,OAAA7C,GAAA,MAAO,EAAA,QAAM,IAAA,CAAA,MAAA,CAAA,E;SAC/B,SAAAC,QAA+B,CAA5BC,EAAAC,EAAAC,EAAA+C,CAAA,CAAC,CAAA,sBAAA,CAAA,GAAA,CAAA,C;;;QAENrD,EAAWe,CAAA;QACXf,EAMc0C,GAAA;SALX,SAAShB,EAAA;SACV,WAAQ;SACP,SAAKxB,EAAOqC,GAAO,CAAA,MAAA,CAAA;;SAEpB,SAAApC,QAAgC,CAA7BC,EAAAC,EAAAC,EAAA+C,CAAA,CAAC,CAAA,uBAAA,CAAA,GAAA,CAAA,C"}
1
+ {"version":3,"file":"AUserCreateInSystemButton.vue_vue_type_script_setup_true_lang.js","names":["_resolveComponent","_openBlock","_createElementBlock","_createVNode","_component_VBtn","_withModifiers","_withCtx","_createTextVNode","_toDisplayString","_unref","_component_VDialog","_component_VCard","ADialogToolbar","_component_VCardText","AUserMetadataForm","_createElementVNode","_createCommentVNode","_component_VCardActions","_component_VSpacer","ADialogToolbar_default","AUserMetadataForm_default","useVuelidate","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","AUserCreateInSystemButton_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emit","useI18n","useAnzuUserFactory","dialog","ref","user","createAnzuUser","v$","open","seed","isNull","cloneDeep","confirm","_component_ABtnTertiary","resolveComponent","_component_ABtnPrimary","openBlock","createElementBlock","createVNode","VBtn","_cache","withModifiers","withCtx","createTextVNode","toDisplayString","unref","t","VDialog","$event","VCard","VCardText","createElementVNode","createCommentVNode","VCardActions","VSpacer"],"sources":["../../../../src/domains/anzuUser/components/AUserCreateInSystemButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ref, watch } from 'vue'\nimport useVuelidate from '@vuelidate/core'\nimport { useI18n } from 'vue-i18n'\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport AUserMetadataForm from '@/domains/anzuUser/components/AUserMetadataForm.vue'\nimport { useAnzuUserFactory } from '@/domains/anzuUser/factory/AnzuUserFactory'\nimport type { BaseUser } from '@/shared/types/AnzuUser'\nimport type { IntegerIdNullable } from '@/shared/types/common'\nimport { cloneDeep, isNull } from '@/shared/utils/common'\n\nconst props = withDefaults(\n defineProps<{\n systemLabel: string\n /** The system's `createNote`: what is special about having an account there. */\n createNote?: string | undefined\n /**\n * Whether the created account will be switched on.\n * The sentence about a working public account is composed here, not in the descriptor, because it depends on\n * this value. Creating from a panel copies the source's `enabled`; creating after an empty search sends false.\n */\n willBeEnabled?: boolean\n loading?: boolean\n disabled?: boolean\n /** The target system's `requiredMetadata`: the profile the form validates against. */\n requiredMetadata?: boolean\n /** The person's id. Always shown and never editable here, because this path is for a person who already exists. */\n userId?: IntegerIdNullable\n /**\n * Known data used to prefill the form. It is not the posted\n * body: the caller re-reads the source right before the POST.\n * The operator must complete it. A person known only in blog usually has an empty `person`, which\n * the target may require, so a silent copy would create a record the target's form refuses to save.\n */\n source?: BaseUser | null\n }>(),\n {\n createNote: undefined,\n willBeEnabled: false,\n loading: false,\n disabled: false,\n requiredMetadata: false,\n userId: null,\n source: null,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'confirm', user: BaseUser): void\n}>()\n\nconst { t } = useI18n()\nconst { createAnzuUser } = useAnzuUserFactory()\nconst dialog = ref(false)\n\nconst user = ref<BaseUser>(createAnzuUser())\nconst v$ = useVuelidate()\n\n// Seeded on every open, not once. The row is re-probed after\n// each write, and a stale prefill would send outdated values.\nwatch(dialog, (open) => {\n if (!open) return\n const seed = isNull(props.source) ? createAnzuUser() : cloneDeep(props.source)\n if (!isNull(props.userId)) seed.id = props.userId\n user.value = seed\n v$.value.$reset()\n})\n\nconst confirm = async () => {\n if (!(await v$.value.$validate())) return\n dialog.value = false\n emit('confirm', cloneDeep(user.value))\n}\n</script>\n\n<template>\n <div class=\"d-inline-flex\">\n <VBtn\n :disabled=\"disabled\"\n :loading=\"loading\"\n size=\"small\"\n variant=\"flat\"\n color=\"primary\"\n data-cy=\"user-system-create\"\n @click.stop=\"dialog = true\"\n >\n {{ t('common.userSystem.button.create') }}\n </VBtn>\n <VDialog\n v-model=\"dialog\"\n :max-width=\"640\"\n >\n <VCard>\n <ADialogToolbar @cancel=\"dialog = false\">\n {{ t('common.userSystem.create.title', { system: systemLabel }) }}\n </ADialogToolbar>\n <VCardText>\n <!-- The id is shown and locked: this gives the existing person's global id an account here. -->\n <AUserMetadataForm\n v-model:user=\"user\"\n :required=\"requiredMetadata\"\n id-input\n is-edit\n />\n <!--\n Stated explicitly because neither is obvious or reversible: the account\n is created with nothing granted, and no admin can delete an AnzuUser.\n -->\n <p class=\"mt-2\">{{ t('common.userSystem.create.note') }}</p>\n <p\n v-if=\"createNote\"\n class=\"mt-2\"\n >\n {{ createNote }}\n </p>\n <p class=\"mt-2\">\n {{\n props.willBeEnabled\n ? t('common.userSystem.create.willBeEnabled')\n : t('common.userSystem.create.willBeDisabled')\n }}\n </p>\n </VCardText>\n <VCardActions>\n <ABtnTertiary @click.stop=\"dialog = false\">\n {{ t('common.button.cancel') }}\n </ABtnTertiary>\n <VSpacer />\n <ABtnPrimary\n :loading=\"loading\"\n data-cy=\"user-system-create-confirm\"\n @click.stop=\"confirm\"\n >\n {{ t('common.button.confirm') }}\n </ABtnPrimary>\n </VCardActions>\n </VCard>\n </VDialog>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWA,IAAM4B,IAAQC,GAoCRC,IAAOH,GAIP,EAAE,SAAMI,EAAQ,GAChB,EAAE,sBAAmBC,EAAmB,GACxCC,IAASC,EAAI,EAAK,GAElBC,IAAOD,EAAcE,EAAe,CAAC,GACrCC,IAAKhB,EAAa;EAIxB,EAAMY,IAAS,MAAS;GACtB,IAAI,CAACK,GAAM;GACX,IAAMC,IAAOC,EAAOZ,EAAM,MAAM,IAAIQ,EAAe,IAAIK,EAAUb,EAAM,MAAM;GAG7E,AAFKY,EAAOZ,EAAM,MAAM,MAAG,EAAK,KAAKA,EAAM,SAC3C,EAAK,QAAQW,GACbF,EAAG,MAAM,OAAO;EAClB,CAAC;EAED,IAAMK,IAAU,YAAY;GAC1B,AAAM,MAAML,EAAG,MAAM,UAAU,MAC/B,EAAO,QAAQ,IACfP,EAAK,WAAWW,EAAUN,EAAK,KAAK,CAAC;EACvC;;;GAIE,OAAAlC,EAAA,GAAAC,EA8DM,OA9DNoB,GA8DM,CA7DJnB,EAUOC,GAAA;IATJ,UAAUyB,EAAA;IACV,SAASA,EAAA;IACV,MAAK;IACL,SAAQ;IACR,OAAM;IACN,WAAQ;IACP,SAAK,AAAAqB,EAAA,OAAA7C,GAAA,MAAO,EAAA,QAAM,IAAA,CAAA,MAAA,CAAA;;IAEnB,SAAAC,QAA0C,CAAvCC,EAAAC,EAAAC,EAAA+C,CAAA,CAAC,CAAA,iCAAA,CAAA,GAAA,CAAA,C;;G,gCAENrD,EAiDUO,GAAA;IAhDC,YAAAuB,EAAA;IAAA,uBAAA,AAAAiB,EAAA,QAAA,MAAA,EAAM,QAAAQ;IACd,aAAW;;IAEZ,SAAApD,QA4CQ,CA5CRH,EA4CQQ,GAAA,MAAA;KA3CN,SAAAL,QAEiB;MAFjBH,EAEiBS,GAAA,EAFA,UAAM,AAAAsC,EAAA,QAAA,MAAE,EAAA,QAAM,G;OAC7B,SAAA5C,QAAkE,CAA/DC,EAAAC,EAAAC,EAAA+C,CAAA,CAAC,CAAA,kCAAA,EAAA,QAA6C3B,EAAA,YAAW,CAAA,CAAA,GAAA,CAAA,C;;;MAE9D1B,EA0BYU,GAAA,MAAA;OAxBV,SAAAP,QAKE;QALFH,EAKEW,GAAA;SAJQ,MAAMqB,EAAA;SAAA,iBAAA,AAAAe,EAAA,QAAA,MAAA,EAAI,QAAAQ;SACjB,UAAU7B,EAAA;SACX,YAAA;SACA,WAAA;;QAMFd,EAA4D,KAA5DQ,GAA4Df,EAAzCC,EAAA+C,CAAA,CAAC,CAAA,+BAAA,CAAA,GAAA,CAAA;QAEZ3B,EAAA,cADR5B,EAAA,GAAAC,EAKI,KALJsB,GAKIhB,EADCqB,EAAA,UAAU,GAAA,CAAA,K;QAEfd,EAMI,KANJU,GAMIjB,EAJAoB,EAAM,gBAAgCnB,EAAA+C,CAAA,CAAC,CAAA,wCAAA,IAA6D/C,EAAA+C,CAAA,CAAC,CAAA,yCAAA,CAAA,GAAA,CAAA;;;;MAM3GrD,EAYec,GAAA,MAAA;OAXb,SAAAX,QAEe;QAFfH,EAEewC,GAAA,EAFA,SAAK,AAAAO,EAAA,OAAA7C,GAAA,MAAO,EAAA,QAAM,IAAA,CAAA,MAAA,CAAA,E;SAC/B,SAAAC,QAA+B,CAA5BC,EAAAC,EAAAC,EAAA+C,CAAA,CAAC,CAAA,sBAAA,CAAA,GAAA,CAAA,C;;;QAENrD,EAAWe,CAAA;QACXf,EAMc0C,GAAA;SALX,SAAShB,EAAA;SACV,WAAQ;SACP,SAAKxB,EAAOqC,GAAO,CAAA,MAAA,CAAA;;SAEpB,SAAApC,QAAgC,CAA7BC,EAAAC,EAAAC,EAAA+C,CAAA,CAAC,CAAA,uBAAA,CAAA,GAAA,CAAA,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"AUserEnabledSwitch.js","names":["_sfc_main","AUserEnabledSwitch_vue_vue_type_script_setup_true_lang_default","AUserEnabledSwitch_default"],"sources":["../../../../src/domains/anzuUser/components/AUserEnabledSwitch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport ABooleanValue from '@/domains/ui/components/ABooleanValue.vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\n\nwithDefaults(\n defineProps<{\n readonly?: boolean\n /**\n * The system's `enabledNote`. A static string from the descriptor rather than a slot: a slot\n * would have to be filled by every admin separately, could drift from the wording in the bulk\n * dialog, and -- worst -- could be forgotten in admin-blog, which is the one place the sentence\n * matters most. The slot below stays as an escape hatch for more than a line of text.\n */\n note?: string | undefined\n }>(),\n {\n readonly: false,\n note: undefined,\n }\n)\n\nconst modelValue = defineModel<boolean>({ required: true })\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div>\n <!--\n Outside `AUserMetadataForm` on purpose: that one mirrors `BaseUserDto`, which has no\n `enabled`, and is also used by the cross-system metadata repair -- which must not write this\n field and would otherwise have to hide it.\n -->\n <ARow\n v-if=\"readonly\"\n :title=\"t('common.anzuUser.model.enabled')\"\n >\n <ABooleanValue\n :value=\"modelValue\"\n chip\n />\n </ARow>\n <VSwitch\n v-else\n v-model=\"modelValue\"\n :label=\"t('common.anzuUser.model.enabled')\"\n color=\"success\"\n density=\"compact\"\n hide-details\n data-cy=\"user-enabled\"\n />\n <div class=\"text-body-small text-medium-emphasis\">\n <slot name=\"note\">\n <template v-if=\"note\">{{ note }}</template>\n </slot>\n </div>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AUserEnabledSwitch.js","names":["_sfc_main","AUserEnabledSwitch_vue_vue_type_script_setup_true_lang_default","AUserEnabledSwitch_default"],"sources":["../../../../src/domains/anzuUser/components/AUserEnabledSwitch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport ABooleanValue from '@/domains/ui/components/ABooleanValue.vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\n\nwithDefaults(\n defineProps<{\n readonly?: boolean\n /**\n * The system's `enabledNote`. A descriptor string rather than a slot, so every admin shows the\n * same wording as the bulk dialog and admin-blog, where it matters most, cannot forget it.\n * The slot below remains for content longer than a line.\n */\n note?: string | undefined\n }>(),\n {\n readonly: false,\n note: undefined,\n }\n)\n\nconst modelValue = defineModel<boolean>({ required: true })\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div>\n <!--\n Outside `AUserMetadataForm` on purpose. That form mirrors `BaseUserDto`, which has no\n `enabled`, and the cross-system metadata repair uses it and must not write this field.\n -->\n <ARow\n v-if=\"readonly\"\n :title=\"t('common.anzuUser.model.enabled')\"\n >\n <ABooleanValue\n :value=\"modelValue\"\n chip\n />\n </ARow>\n <VSwitch\n v-else\n v-model=\"modelValue\"\n :label=\"t('common.anzuUser.model.enabled')\"\n color=\"success\"\n density=\"compact\"\n hide-details\n data-cy=\"user-enabled\"\n />\n <div class=\"text-body-small text-medium-emphasis\">\n <slot name=\"note\">\n <template v-if=\"note\">{{ note }}</template>\n </slot>\n </div>\n </div>\n</template>\n"],"mappings":""}
@@ -1,10 +1,9 @@
1
1
  type __VLS_Props = {
2
2
  readonly?: boolean;
3
3
  /**
4
- * The system's `enabledNote`. A static string from the descriptor rather than a slot: a slot
5
- * would have to be filled by every admin separately, could drift from the wording in the bulk
6
- * dialog, and -- worst -- could be forgotten in admin-blog, which is the one place the sentence
7
- * matters most. The slot below stays as an escape hatch for more than a line of text.
4
+ * The system's `enabledNote`. A descriptor string rather than a slot, so every admin shows the
5
+ * same wording as the bulk dialog and admin-blog, where it matters most, cannot forget it.
6
+ * The slot below remains for content longer than a line.
8
7
  */
9
8
  note?: string | undefined;
10
9
  };
@@ -12,10 +11,12 @@ type __VLS_ModelProps = {
12
11
  modelValue: boolean;
13
12
  };
14
13
  type __VLS_PublicProps = __VLS_Props & __VLS_ModelProps;
15
- declare var __VLS_17: {};
16
- type __VLS_Slots = {} & {
17
- note?: (props: typeof __VLS_17) => any;
14
+ declare const __VLS_template: () => {
15
+ __VLS_Slots: {
16
+ note?: (props: {}) => any;
17
+ };
18
18
  };
19
+ type __VLS_Slots = ReturnType<typeof __VLS_template>['__VLS_Slots'];
19
20
  declare const __VLS_base: import('vue').DefineComponent<__VLS_PublicProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
20
21
  "update:modelValue": (value: boolean) => any;
21
22
  }, string, import('vue').PublicProps, Readonly<__VLS_PublicProps> & Readonly<{
@@ -1 +1 @@
1
- {"version":3,"file":"AUserEnabledSwitch.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createElementBlock","_createBlock","ARow","_unref","_withCtx","_createVNode","ABooleanValue","_component_VSwitch","_createElementVNode","_renderSlot","_Fragment","_createTextVNode","_toDisplayString","_createCommentVNode","ABooleanValue_default","ARow_default","_hoisted_1","AUserEnabledSwitch_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","modelValue","useModel","__props","useI18n","openBlock","createElementBlock","createBlock","unref","t","withCtx","createVNode","VSwitch","_cache","$event","createElementVNode","renderSlot","_ctx","Fragment","createTextVNode","toDisplayString","createCommentVNode"],"sources":["../../../../src/domains/anzuUser/components/AUserEnabledSwitch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport ABooleanValue from '@/domains/ui/components/ABooleanValue.vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\n\nwithDefaults(\n defineProps<{\n readonly?: boolean\n /**\n * The system's `enabledNote`. A static string from the descriptor rather than a slot: a slot\n * would have to be filled by every admin separately, could drift from the wording in the bulk\n * dialog, and -- worst -- could be forgotten in admin-blog, which is the one place the sentence\n * matters most. The slot below stays as an escape hatch for more than a line of text.\n */\n note?: string | undefined\n }>(),\n {\n readonly: false,\n note: undefined,\n }\n)\n\nconst modelValue = defineModel<boolean>({ required: true })\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div>\n <!--\n Outside `AUserMetadataForm` on purpose: that one mirrors `BaseUserDto`, which has no\n `enabled`, and is also used by the cross-system metadata repair -- which must not write this\n field and would otherwise have to hide it.\n -->\n <ARow\n v-if=\"readonly\"\n :title=\"t('common.anzuUser.model.enabled')\"\n >\n <ABooleanValue\n :value=\"modelValue\"\n chip\n />\n </ARow>\n <VSwitch\n v-else\n v-model=\"modelValue\"\n :label=\"t('common.anzuUser.model.enabled')\"\n color=\"success\"\n density=\"compact\"\n hide-details\n data-cy=\"user-enabled\"\n />\n <div class=\"text-body-small text-medium-emphasis\">\n <slot name=\"note\">\n <template v-if=\"note\">{{ note }}</template>\n </slot>\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EAsBA,IAAMsB,IAAatB,EAAoBwB,GAAA,YAAmB,GAEpD,EAAE,SAAMC,EAAQ;E,kBAIpBxB,EAAA,GAAAC,EA6BM,OAAA,MAAA,CAtBIsB,EAAA,YADRvB,EAAA,GAAAE,EAQOC,GAAA;;GANJ,OAAOC,EAAAyB,CAAA,CAAC,CAAA,+BAAA;;GAET,SAAAxB,QAGE,CAHFC,EAGEC,GAAA;IAFC,OAAOc,EAAA;IACR,MAAA;;;E,qBAGJrB,EAAA,GAAAE,EAQEM,GAAA;;GANS,YAAAa,EAAA;GAAA,uBAAA,AAAAY,EAAA,QAAA,MAAA,EAAU,QAAAC;GAClB,OAAO9B,EAAAyB,CAAA,CAAC,CAAA,+BAAA;GACT,OAAM;GACN,SAAQ;GACR,gBAAA;GACA,WAAQ;E,uCAEVpB,EAIM,OAJNQ,GAIM,CAHJP,EAEO2B,EAAA,QAAA,QAAA,CAAA,SAAA,CADWd,EAAA,QAAhBvB,EAAA,GAAAC,EAA2CU,GAAA,EAAA,KAAA,EAAA,GAAA,CAAlBC,EAAAC,EAAAU,EAAA,IAAI,GAAA,CAAA,C"}
1
+ {"version":3,"file":"AUserEnabledSwitch.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createElementBlock","_createBlock","ARow","_unref","_withCtx","_createVNode","ABooleanValue","_component_VSwitch","_createElementVNode","_renderSlot","_Fragment","_createTextVNode","_toDisplayString","_createCommentVNode","ABooleanValue_default","ARow_default","_hoisted_1","AUserEnabledSwitch_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","modelValue","useModel","__props","useI18n","openBlock","createElementBlock","createBlock","unref","t","withCtx","createVNode","VSwitch","_cache","$event","createElementVNode","renderSlot","_ctx","Fragment","createTextVNode","toDisplayString","createCommentVNode"],"sources":["../../../../src/domains/anzuUser/components/AUserEnabledSwitch.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport ABooleanValue from '@/domains/ui/components/ABooleanValue.vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\n\nwithDefaults(\n defineProps<{\n readonly?: boolean\n /**\n * The system's `enabledNote`. A descriptor string rather than a slot, so every admin shows the\n * same wording as the bulk dialog and admin-blog, where it matters most, cannot forget it.\n * The slot below remains for content longer than a line.\n */\n note?: string | undefined\n }>(),\n {\n readonly: false,\n note: undefined,\n }\n)\n\nconst modelValue = defineModel<boolean>({ required: true })\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div>\n <!--\n Outside `AUserMetadataForm` on purpose. That form mirrors `BaseUserDto`, which has no\n `enabled`, and the cross-system metadata repair uses it and must not write this field.\n -->\n <ARow\n v-if=\"readonly\"\n :title=\"t('common.anzuUser.model.enabled')\"\n >\n <ABooleanValue\n :value=\"modelValue\"\n chip\n />\n </ARow>\n <VSwitch\n v-else\n v-model=\"modelValue\"\n :label=\"t('common.anzuUser.model.enabled')\"\n color=\"success\"\n density=\"compact\"\n hide-details\n data-cy=\"user-enabled\"\n />\n <div class=\"text-body-small text-medium-emphasis\">\n <slot name=\"note\">\n <template v-if=\"note\">{{ note }}</template>\n </slot>\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;EAqBA,IAAMsB,IAAatB,EAAoBwB,GAAA,YAAmB,GAEpD,EAAE,SAAMC,EAAQ;E,kBAIpBxB,EAAA,GAAAC,EA4BM,OAAA,MAAA,CAtBIsB,EAAA,YADRvB,EAAA,GAAAE,EAQOC,GAAA;;GANJ,OAAOC,EAAAyB,CAAA,CAAC,CAAA,+BAAA;;GAET,SAAAxB,QAGE,CAHFC,EAGEC,GAAA;IAFC,OAAOc,EAAA;IACR,MAAA;;;E,qBAGJrB,EAAA,GAAAE,EAQEM,GAAA;;GANS,YAAAa,EAAA;GAAA,uBAAA,AAAAY,EAAA,QAAA,MAAA,EAAU,QAAAC;GAClB,OAAO9B,EAAAyB,CAAA,CAAC,CAAA,+BAAA;GACT,OAAM;GACN,SAAQ;GACR,gBAAA;GACA,WAAQ;E,uCAEVpB,EAIM,OAJNQ,GAIM,CAHJP,EAEO2B,EAAA,QAAA,QAAA,CAAA,SAAA,CADWd,EAAA,QAAhBvB,EAAA,GAAAC,EAA2CU,GAAA,EAAA,KAAA,EAAA,GAAA,CAAlBC,EAAAC,EAAAU,EAAA,IAAI,GAAA,CAAA,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"AUserManageButton.js","names":["_sfc_main","AUserManageButton_vue_vue_type_script_setup_true_lang_default","AUserManageButton_default"],"sources":["../../../../src/domains/anzuUser/components/AUserManageButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { UserSystemManageTarget } from '@/domains/anzuUser/composables/userSystemDescriptor'\n\nconst props = withDefaults(\n defineProps<{\n target: UserSystemManageTarget\n /** The system's name as the app translates it. */\n systemLabel: string\n /** \"Edit\" instead of \"Manage in X\" -- used where the operator is already in that admin. */\n internalLabel?: string | undefined\n }>(),\n {\n internalLabel: undefined,\n }\n)\n\nconst { t } = useI18n()\n\nconst isExternal = computed(() => props.target.kind === 'external')\n\n/**\n * A missing url is a configured-but-absent template, and it says so rather than sitting there dead.\n * The prototype this replaces did `:disabled=\"!userEditUrl\"` and gave no reason -- while the\n * variable it depended on was in fact misconfigured in every environment.\n */\nconst missingUrl = computed(() => props.target.kind === 'external' && props.target.href === null)\n\nconst href = computed(() => (props.target.kind === 'external' ? (props.target.href ?? undefined) : undefined))\nconst to = computed(() => (props.target.kind === 'internal' ? props.target.to : undefined))\n\nconst label = computed(() =>\n isExternal.value\n ? t('common.userSystem.button.manageIn', { system: props.systemLabel })\n : (props.internalLabel ?? t('common.userSystem.button.edit'))\n)\n</script>\n\n<template>\n <VTooltip\n :disabled=\"!missingUrl\"\n location=\"top\"\n >\n <template #activator=\"{ props: tooltipProps }\">\n <!--\n An anchor, not a click handler. This is what leaves the page, so middle-click, open in a new\n tab and the screen reader's announcement all have to work -- which is also why the tab bar\n never navigates: `VTab` renders `role=\"tab\"` and could not carry this.\n -->\n <span v-bind=\"tooltipProps\">\n <VBtn\n :to=\"to\"\n :href=\"href\"\n :target=\"isExternal ? '_blank' : undefined\"\n :rel=\"isExternal ? 'noopener' : undefined\"\n :append-icon=\"isExternal ? 'mdi-open-in-new' : undefined\"\n :variant=\"isExternal ? 'outlined' : 'flat'\"\n :color=\"isExternal ? undefined : 'primary'\"\n :disabled=\"missingUrl\"\n size=\"small\"\n data-cy=\"user-system-manage\"\n >\n {{ label }}\n </VBtn>\n </span>\n </template>\n {{ t('common.userSystem.manageMissingUrl') }}\n </VTooltip>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AUserManageButton.js","names":["_sfc_main","AUserManageButton_vue_vue_type_script_setup_true_lang_default","AUserManageButton_default"],"sources":["../../../../src/domains/anzuUser/components/AUserManageButton.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { UserSystemManageTarget } from '@/domains/anzuUser/composables/userSystemDescriptor'\n\nconst props = withDefaults(\n defineProps<{\n target: UserSystemManageTarget\n systemLabel: string\n /** \"Edit\" instead of \"Manage in X\" -- used where the operator is already in that admin. */\n internalLabel?: string | undefined\n }>(),\n {\n internalLabel: undefined,\n }\n)\n\nconst { t } = useI18n()\n\nconst isExternal = computed(() => props.target.kind === 'external')\n\n/** A missing url means the template is configured but absent. Show the reason instead of a silently disabled button. */\nconst missingUrl = computed(() => props.target.kind === 'external' && props.target.href === null)\n\nconst href = computed(() => (props.target.kind === 'external' ? (props.target.href ?? undefined) : undefined))\nconst to = computed(() => (props.target.kind === 'internal' ? props.target.to : undefined))\n\nconst label = computed(() =>\n isExternal.value\n ? t('common.userSystem.button.manageIn', { system: props.systemLabel })\n : (props.internalLabel ?? t('common.userSystem.button.edit'))\n)\n</script>\n\n<template>\n <VTooltip\n :disabled=\"!missingUrl\"\n location=\"top\"\n >\n <template #activator=\"{ props: tooltipProps }\">\n <!--\n An anchor, not a click handler, so middle-click, open in new tab and screen reader announcements work.\n This is also why the tab bar never navigates: `VTab` renders `role=\"tab\"` and cannot carry a link.\n -->\n <span v-bind=\"tooltipProps\">\n <VBtn\n :to=\"to\"\n :href=\"href\"\n :target=\"isExternal ? '_blank' : undefined\"\n :rel=\"isExternal ? 'noopener' : undefined\"\n :append-icon=\"isExternal ? 'mdi-open-in-new' : undefined\"\n :variant=\"isExternal ? 'outlined' : 'flat'\"\n :color=\"isExternal ? undefined : 'primary'\"\n :disabled=\"missingUrl\"\n size=\"small\"\n data-cy=\"user-system-manage\"\n >\n {{ label }}\n </VBtn>\n </span>\n </template>\n {{ t('common.userSystem.manageMissingUrl') }}\n </VTooltip>\n</template>\n"],"mappings":""}
@@ -1,7 +1,6 @@
1
1
  import { UserSystemManageTarget } from '../composables/userSystemDescriptor';
2
2
  type __VLS_Props = {
3
3
  target: UserSystemManageTarget;
4
- /** The system's name as the app translates it. */
5
4
  systemLabel: string;
6
5
  /** "Edit" instead of "Manage in X" -- used where the operator is already in that admin. */
7
6
  internalLabel?: string | undefined;