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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (465) hide show
  1. package/dist/domains/anzuUser/components/AAnzuUserDatatable.js.map +1 -1
  2. package/dist/domains/anzuUser/components/AAnzuUserDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  3. package/dist/domains/anzuUser/components/AAnzuUserFilter.js.map +1 -1
  4. package/dist/domains/anzuUser/components/AAnzuUserFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  5. package/dist/domains/anzuUser/components/AAnzuUserForm.js.map +1 -1
  6. package/dist/domains/anzuUser/components/AAnzuUserForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  7. package/dist/domains/anzuUser/components/AAnzuUserRoleAutocomplete.js.map +1 -1
  8. package/dist/domains/anzuUser/components/AUserBulkActionDialog.js.map +1 -1
  9. package/dist/domains/anzuUser/components/AUserBulkActionDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  10. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.js.map +1 -1
  11. package/dist/domains/anzuUser/components/AUserCopyPermissionsDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  12. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.js.map +1 -1
  13. package/dist/domains/anzuUser/components/AUserCreateInSystemButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  14. package/dist/domains/anzuUser/components/AUserEnabledSwitch.js.map +1 -1
  15. package/dist/domains/anzuUser/components/AUserEnabledSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  16. package/dist/domains/anzuUser/components/AUserManageButton.js.map +1 -1
  17. package/dist/domains/anzuUser/components/AUserMetadataForm.js.map +1 -1
  18. package/dist/domains/anzuUser/components/AUserMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  19. package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.js.map +1 -1
  20. package/dist/domains/anzuUser/components/AUserMetadataRepairDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  21. package/dist/domains/anzuUser/components/AUserOtherSystemsTable.js.map +1 -1
  22. package/dist/domains/anzuUser/components/AUserSystemOverview.js.map +1 -1
  23. package/dist/domains/anzuUser/components/AUserSystemOverview.vue_vue_type_script_setup_true_lang.js.map +1 -1
  24. package/dist/domains/anzuUser/components/AUserSystemPanel.js.map +1 -1
  25. package/dist/domains/anzuUser/components/AUserSystemPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  26. package/dist/domains/anzuUser/components/AUserSystemStatusChip.js.map +1 -1
  27. package/dist/domains/anzuUser/components/AUserTabsShell.js.map +1 -1
  28. package/dist/domains/anzuUser/components/AUserTabsShell.vue_vue_type_script_setup_true_lang.js.map +1 -1
  29. package/dist/domains/auth/components/Acl.js.map +1 -1
  30. package/dist/domains/auth/components/Acl.vue_vue_type_script_setup_true_lang.js.map +1 -1
  31. package/dist/domains/cached/components/ACachedChip.js.map +1 -1
  32. package/dist/domains/cached/components/ACachedChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  33. package/dist/domains/cached/components/ACachedUserChip.js.map +1 -1
  34. package/dist/domains/cached/components/ACachedUserChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  35. package/dist/domains/collab/components/ACollabCountdown.js.map +1 -1
  36. package/dist/domains/collab/components/ACollabCountdown.vue_vue_type_script_setup_true_lang.js.map +1 -1
  37. package/dist/domains/collab/components/ACollabLockedByUser.js.map +1 -1
  38. package/dist/domains/collab/components/ACollabManagement.js.map +1 -1
  39. package/dist/domains/collab/components/ACollabManagement.vue_vue_type_script_setup_true_lang.js.map +1 -1
  40. package/dist/domains/customDataForm/components/ACustomDataForm.js.map +1 -1
  41. package/dist/domains/customDataForm/components/ACustomDataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  42. package/dist/domains/customDataForm/components/ACustomDataFormElement.js.map +1 -1
  43. package/dist/domains/customDataForm/components/ACustomDataFormElement.vue_vue_type_script_setup_true_lang.js.map +1 -1
  44. package/dist/domains/customDataForm/components/ACustomDataFormHiddenPart.js.map +1 -1
  45. package/dist/domains/dam/assetDetail/components/AColorBox.js.map +1 -1
  46. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.js.map +1 -1
  47. package/dist/domains/dam/assetDetail/components/AssetCustomMetadataForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  48. package/dist/domains/dam/assetDetail/components/AssetDetailDialog.js.map +1 -1
  49. package/dist/domains/dam/assetDetail/components/AssetDetailDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  50. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.js.map +1 -1
  51. package/dist/domains/dam/assetDetail/components/AssetDetailDialogFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
  52. package/dist/domains/dam/assetDetail/components/AssetDetailDialogLoader.js.map +1 -1
  53. package/dist/domains/dam/assetDetail/components/AssetDetailDialogSidebar.js.map +1 -1
  54. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsTeleportTarget.js.map +1 -1
  55. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsWrapper.js.map +1 -1
  56. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarActionsWrapper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  57. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.js.map +1 -1
  58. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarFrame.vue_vue_type_script_setup_true_lang.js.map +1 -1
  59. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.js.map +1 -1
  60. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  61. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.js.map +1 -1
  62. package/dist/domains/dam/assetDetail/components/AssetDetailSidebarROI.vue_vue_type_script_setup_true_lang.js.map +1 -1
  63. package/dist/domains/dam/assetDetail/components/AssetFileFailReasonChip.js.map +1 -1
  64. package/dist/domains/dam/assetDetail/components/AssetFileFailReasonChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  65. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.js.map +1 -1
  66. package/dist/domains/dam/assetDetail/components/AssetFileInfoPanel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  67. package/dist/domains/dam/assetDetail/components/AssetFileRotate.js.map +1 -1
  68. package/dist/domains/dam/assetDetail/components/AssetFileRotate.vue_vue_type_script_setup_true_lang.js.map +1 -1
  69. package/dist/domains/dam/assetDetail/components/AssetImage.js.map +1 -1
  70. package/dist/domains/dam/assetDetail/components/AssetImage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  71. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.js.map +1 -1
  72. package/dist/domains/dam/assetDetail/components/AssetImageMetaIcons.vue_vue_type_script_setup_true_lang.js.map +1 -1
  73. package/dist/domains/dam/assetDetail/components/AssetInfobox.js.map +1 -1
  74. package/dist/domains/dam/assetDetail/components/AssetInfobox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  75. package/dist/domains/dam/assetDetail/components/AssetMetadata.js.map +1 -1
  76. package/dist/domains/dam/assetDetail/components/AssetMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  77. package/dist/domains/dam/assetDetail/components/AssetMetadataImageAttributes.js.map +1 -1
  78. package/dist/domains/dam/assetDetail/components/AssetMetadataImageAttributes.vue_vue_type_script_setup_true_lang.js.map +1 -1
  79. package/dist/domains/dam/assetSelect/components/AAssetListInner.js.map +1 -1
  80. package/dist/domains/dam/assetSelect/components/AAssetListInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  81. package/dist/domains/dam/assetSelect/components/AAssetSelect.js.map +1 -1
  82. package/dist/domains/dam/assetSelect/components/AAssetSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  83. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.js.map +1 -1
  84. package/dist/domains/dam/assetSelect/components/AAssetSelectMedia.vue_vue_type_script_setup_true_lang.js.map +1 -1
  85. package/dist/domains/dam/assetSelect/components/AssetDistributionServiceNameFilter.js.map +1 -1
  86. package/dist/domains/dam/assetSelect/components/AssetImagePreview.js.map +1 -1
  87. package/dist/domains/dam/assetSelect/components/AssetImagePreview.vue_vue_type_script_setup_true_lang.js.map +1 -1
  88. package/dist/domains/dam/assetSelect/components/AssetSelectFilter.js.map +1 -1
  89. package/dist/domains/dam/assetSelect/components/AssetSelectFilter.vue_vue_type_script_setup_true_lang.js.map +1 -1
  90. package/dist/domains/dam/assetSelect/components/AssetSelectFilterForm.js.map +1 -1
  91. package/dist/domains/dam/assetSelect/components/AssetSelectFilterForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  92. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.js.map +1 -1
  93. package/dist/domains/dam/assetSelect/components/AssetSelectListBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  94. package/dist/domains/dam/assetSelect/components/AssetSelectListTable.js.map +1 -1
  95. package/dist/domains/dam/assetSelect/components/AssetSelectListTable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  96. package/dist/domains/dam/assetSelect/components/AssetSelectListTiles.js.map +1 -1
  97. package/dist/domains/dam/assetSelect/components/AssetSelectListTiles.vue_vue_type_script_setup_true_lang.js.map +1 -1
  98. package/dist/domains/dam/assetSelect/components/AssetSelectTableRowItem.js.map +1 -1
  99. package/dist/domains/dam/assetSelect/components/AssetSelectTilesItem.js.map +1 -1
  100. package/dist/domains/dam/assetSelect/components/AssetSelectTilesItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  101. package/dist/domains/dam/assetSelect/components/FilterPodcastRemoteAutocomplete.js.map +1 -1
  102. package/dist/domains/dam/author/components/AuthorCreateButton.js.map +1 -1
  103. package/dist/domains/dam/author/components/AuthorCreateButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  104. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.js.map +1 -1
  105. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  106. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.js.map +1 -1
  107. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteCachedAuthorChipConflicts.vue_vue_type_script_setup_true_lang.js.map +1 -1
  108. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.js.map +1 -1
  109. package/dist/domains/dam/author/components/AuthorRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
  110. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.js.map +1 -1
  111. package/dist/domains/dam/author/components/DamAuthorFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  112. package/dist/domains/dam/components/DamAdminAssetLink.js.map +1 -1
  113. package/dist/domains/dam/cropper/components/ACropper.js.map +1 -1
  114. package/dist/domains/dam/cropper/components/ACropper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  115. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.js.map +1 -1
  116. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  117. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelectLazy.js.map +1 -1
  118. package/dist/domains/dam/cropper/components/DamAssetImageRoiSelectLazy.vue_vue_type_script_setup_true_lang.js.map +1 -1
  119. package/dist/domains/dam/imageWidget/components/AImageMediaWidget.js.map +1 -1
  120. package/dist/domains/dam/imageWidget/components/AImageMediaWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
  121. package/dist/domains/dam/imageWidget/components/AImagePublicInput.js.map +1 -1
  122. package/dist/domains/dam/imageWidget/components/AImagePublicInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  123. package/dist/domains/dam/imageWidget/components/AImageWidget.js.map +1 -1
  124. package/dist/domains/dam/imageWidget/components/AImageWidget.vue_vue_type_script_setup_true_lang.js.map +1 -1
  125. package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.js.map +1 -1
  126. package/dist/domains/dam/imageWidget/components/AImageWidgetMultiple.vue_vue_type_script_setup_true_lang.js.map +1 -1
  127. package/dist/domains/dam/imageWidget/components/AImageWidgetMultipleSimple.js.map +1 -1
  128. package/dist/domains/dam/imageWidget/components/AImageWidgetSimple.js.map +1 -1
  129. package/dist/domains/dam/imageWidget/components/AImageWidgetSimple.vue_vue_type_script_setup_true_lang.js.map +1 -1
  130. package/dist/domains/dam/imageWidget/components/AMediaWidgetSimple.js.map +1 -1
  131. package/dist/domains/dam/imageWidget/components/AMediaWidgetSimple.vue_vue_type_script_setup_true_lang.js.map +1 -1
  132. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.js.map +1 -1
  133. package/dist/domains/dam/imageWidget/components/ImageDetailDialogMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  134. package/dist/domains/dam/imageWidget/components/ImageMassOperations.js.map +1 -1
  135. package/dist/domains/dam/imageWidget/components/ImageMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
  136. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.js.map +1 -1
  137. package/dist/domains/dam/imageWidget/components/ImageMediaWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  138. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.js.map +1 -1
  139. package/dist/domains/dam/imageWidget/components/ImageWidgetInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  140. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.js.map +1 -1
  141. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleInner.vue_vue_type_script_setup_true_lang.js.map +1 -1
  142. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.js.map +1 -1
  143. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleItem.vue_vue_type_script_setup_true_lang.js.map +1 -1
  144. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.js.map +1 -1
  145. package/dist/domains/dam/imageWidget/components/ImageWidgetMultipleLimitDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  146. package/dist/domains/dam/imageWidget/components/MediaWidgetSimpleDialog.js.map +1 -1
  147. package/dist/domains/dam/imageWidget/components/MediaWidgetSimpleDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  148. package/dist/domains/dam/keyword/components/DamKeywordFilterRemoteAutocomplete.js.map +1 -1
  149. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.js.map +1 -1
  150. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteCachedKeywordChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  151. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.js.map +1 -1
  152. package/dist/domains/dam/keyword/components/KeywordRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
  153. package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.js.map +1 -1
  154. package/dist/domains/dam/uploadQueue/components/AssetCustomMetadataFormMassOperations.vue_vue_type_script_setup_true_lang.js.map +1 -1
  155. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.js.map +1 -1
  156. package/dist/domains/dam/uploadQueue/components/AssetQueueSelectedSidebar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  157. package/dist/domains/dam/uploadQueue/components/UploadQueueButtonStop.js.map +1 -1
  158. package/dist/domains/dam/uploadQueue/components/UploadQueueButtonStop.vue_vue_type_script_setup_true_lang.js.map +1 -1
  159. package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.js.map +1 -1
  160. package/dist/domains/dam/uploadQueue/components/UploadQueueDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  161. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.js.map +1 -1
  162. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingle.vue_vue_type_script_setup_true_lang.js.map +1 -1
  163. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebar.js.map +1 -1
  164. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.js.map +1 -1
  165. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadata.vue_vue_type_script_setup_true_lang.js.map +1 -1
  166. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.js.map +1 -1
  167. package/dist/domains/dam/uploadQueue/components/UploadQueueDialogSingleSidebarMetadataContent.vue_vue_type_script_setup_true_lang.js.map +1 -1
  168. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.js.map +1 -1
  169. package/dist/domains/dam/uploadQueue/components/UploadQueueEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  170. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.js.map +1 -1
  171. package/dist/domains/dam/uploadQueue/components/UploadQueueItemEditable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  172. package/dist/domains/dam/uploadQueue/components/UploadQueueItemErrorOverlay.js.map +1 -1
  173. package/dist/domains/dam/user/components/DamAssetLicenceGroupRemoteAutocomplete.js.map +1 -1
  174. package/dist/domains/dam/user/components/DamAssetLicenceRemoteAutocomplete.js.map +1 -1
  175. package/dist/domains/dam/user/components/DamDistributionServiceSelect.js.map +1 -1
  176. package/dist/domains/dam/user/components/DamExtSystemRemoteAutocomplete.js.map +1 -1
  177. package/dist/domains/dam/user/components/DamExternalProviderAssetSelect.js.map +1 -1
  178. package/dist/domains/dam/user/components/DamUserFilterRemoteAutocomplete.js.map +1 -1
  179. package/dist/domains/dam/user/components/DamUserRemoteAutocomplete.js.map +1 -1
  180. package/dist/domains/filters/bookmarks/components/AFilterBookmarkButton.js.map +1 -1
  181. package/dist/domains/filters/bookmarks/components/AFilterBookmarkButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  182. package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.js.map +1 -1
  183. package/dist/domains/filters/bookmarks/components/FilterBookmarkDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  184. package/dist/domains/filters/bookmarks/components/FilterBookmarks.js.map +1 -1
  185. package/dist/domains/filters/bookmarks/components/FilterBookmarks.vue_vue_type_script_setup_true_lang.js.map +1 -1
  186. package/dist/domains/filters/components/AFilterAdvancedButton.js.map +1 -1
  187. package/dist/domains/filters/components/AFilterBooleanSelect.js.map +1 -1
  188. package/dist/domains/filters/components/AFilterDatetimePicker.js.map +1 -1
  189. package/dist/domains/filters/components/AFilterEmpty.js.map +1 -1
  190. package/dist/domains/filters/components/AFilterInteger.js.map +1 -1
  191. package/dist/domains/filters/components/AFilterResetButton.js.map +1 -1
  192. package/dist/domains/filters/components/AFilterString.js.map +1 -1
  193. package/dist/domains/filters/components/AFilterString.vue.d.ts +3 -0
  194. package/dist/domains/filters/components/AFilterString.vue_vue_type_script_setup_true_lang.js +8 -2
  195. package/dist/domains/filters/components/AFilterString.vue_vue_type_script_setup_true_lang.js.map +1 -1
  196. package/dist/domains/filters/components/AFilterSubmitButton.js.map +1 -1
  197. package/dist/domains/filters/components/AFilterTimeInterval.js.map +1 -1
  198. package/dist/domains/filters/components/AFilterTimeInterval.vue_vue_type_script_setup_true_lang.js.map +1 -1
  199. package/dist/domains/filters/components/AFilterValueObjectOptionsSelect.js.map +1 -1
  200. package/dist/domains/filters/components/AFilterWrapper.js.map +1 -1
  201. package/dist/domains/filters/components/AFilterWrapper.vue_vue_type_script_setup_true_lang.js.map +1 -1
  202. package/dist/domains/filters/components/AFilterWrapperSidebar.js.map +1 -1
  203. package/dist/domains/filters/components/FilterDetailItem.js.map +1 -1
  204. package/dist/domains/filters/components/FiltersSelected.js.map +1 -1
  205. package/dist/domains/filters/datatable/components/ADatatableConfigButton.js.map +1 -1
  206. package/dist/domains/filters/datatable/components/ADatatableOrdering.js.map +1 -1
  207. package/dist/domains/filters/datatable/components/ADatatablePagination.js.map +1 -1
  208. package/dist/domains/filters/datatable/components/ADatatablePagination.vue_vue_type_script_setup_true_lang.js.map +1 -1
  209. package/dist/domains/form/components/AFormDatetimePicker.js.map +1 -1
  210. package/dist/domains/form/components/AFormDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  211. package/dist/domains/form/components/AFormFlagDatetimePicker.js.map +1 -1
  212. package/dist/domains/form/components/AFormFlagDatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  213. package/dist/domains/form/components/AFormRemoteCheckbox.js.map +1 -1
  214. package/dist/domains/form/components/AFormRemoteCheckbox.vue_vue_type_script_setup_true_lang.js.map +1 -1
  215. package/dist/domains/form/components/AFormRemoteSwitch.js.map +1 -1
  216. package/dist/domains/form/components/AFormRemoteSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  217. package/dist/domains/form/components/AFormSwitch.js.map +1 -1
  218. package/dist/domains/form/components/AFormSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  219. package/dist/domains/form/components/AFormTextField.js.map +1 -1
  220. package/dist/domains/form/components/AFormTextField.vue_vue_type_script_setup_true_lang.js.map +1 -1
  221. package/dist/domains/form/components/AFormTextarea.js.map +1 -1
  222. package/dist/domains/form/components/AFormTextarea.vue_vue_type_script_setup_true_lang.js.map +1 -1
  223. package/dist/domains/form/components/AFormValueObjectOptionsSelect.js.map +1 -1
  224. package/dist/domains/form/components/AFormValueObjectOptionsSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  225. package/dist/domains/form/components/ASystemEntityScope.js.map +1 -1
  226. package/dist/domains/job/components/AJobBaseCreateForm.js.map +1 -1
  227. package/dist/domains/job/components/AJobBaseCreateForm.vue_vue_type_script_setup_true_lang.js.map +1 -1
  228. package/dist/domains/job/components/AJobDetailCommon.js.map +1 -1
  229. package/dist/domains/job/components/AJobPriorityChip.js.map +1 -1
  230. package/dist/domains/job/components/AJobStatusChip.js.map +1 -1
  231. package/dist/domains/listEditor/components/AListEditor.js.map +1 -1
  232. package/dist/domains/listEditor/components/AListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  233. package/dist/domains/listEditor/components/ANestedSortableListEditor.js.map +1 -1
  234. package/dist/domains/listEditor/components/ANestedSortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  235. package/dist/domains/listEditor/components/ASortableListEditor.js.map +1 -1
  236. package/dist/domains/listEditor/components/ASortableListEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  237. package/dist/domains/listEditor/components/internal/LeChangeParentDialog.js.map +1 -1
  238. package/dist/domains/listEditor/components/internal/LeChangeParentDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  239. package/dist/domains/listEditor/components/internal/LeDeleteDialog.js.map +1 -1
  240. package/dist/domains/listEditor/components/internal/LeDeleteDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  241. package/dist/domains/listEditor/components/internal/LeDragHandle.js.map +1 -1
  242. package/dist/domains/listEditor/components/internal/LeEmptyState.js.map +1 -1
  243. package/dist/domains/listEditor/components/internal/LeEmptyState.vue_vue_type_script_setup_true_lang.js.map +1 -1
  244. package/dist/domains/listEditor/components/internal/LeMoveToPositionDialog.js.map +1 -1
  245. package/dist/domains/listEditor/components/internal/LeMoveToPositionDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  246. package/dist/domains/listEditor/components/internal/LeNestedRow.js.map +1 -1
  247. package/dist/domains/listEditor/components/internal/LeNestedRow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  248. package/dist/domains/listEditor/components/internal/LeStatus.js.map +1 -1
  249. package/dist/domains/listEditor/components/internal/LeStatus.vue_vue_type_script_setup_true_lang.js.map +1 -1
  250. package/dist/domains/listEditor/components/internal/LeUnsavedLabel.js.map +1 -1
  251. package/dist/domains/listEditor/components/internal/LeUnsavedLabel.vue_vue_type_script_setup_true_lang.js.map +1 -1
  252. package/dist/domains/log/components/ALogDatatable.js.map +1 -1
  253. package/dist/domains/log/components/ALogDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  254. package/dist/domains/log/components/ALogDetail.js.map +1 -1
  255. package/dist/domains/log/components/ALogDetailView.js.map +1 -1
  256. package/dist/domains/log/components/ALogDetailView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  257. package/dist/domains/log/components/ALogFilter.js.map +1 -1
  258. package/dist/domains/log/components/ALogLevelChip.js.map +1 -1
  259. package/dist/domains/log/components/ALogLevelChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  260. package/dist/domains/log/components/ALogListView.js.map +1 -1
  261. package/dist/domains/permission/components/APermissionEditor.js.map +1 -1
  262. package/dist/domains/permission/components/APermissionEditor.vue_vue_type_script_setup_true_lang.js.map +1 -1
  263. package/dist/domains/permission/components/APermissionGrantEditor.js.map +1 -1
  264. package/dist/domains/permission/components/APermissionValueChip.js.map +1 -1
  265. package/dist/domains/permission/components/APermissionValueChip.vue_vue_type_script_setup_true_lang.js.map +1 -1
  266. package/dist/domains/permission/group/components/APermissionGroupDatatable.js.map +1 -1
  267. package/dist/domains/permission/group/components/APermissionGroupDatatable.vue_vue_type_script_setup_true_lang.js.map +1 -1
  268. package/dist/domains/permission/group/components/APermissionGroupDetail.js.map +1 -1
  269. package/dist/domains/permission/group/components/APermissionGroupFilter.js.map +1 -1
  270. package/dist/domains/permission/group/components/APermissionGroupManage.js.map +1 -1
  271. package/dist/domains/permission/group/components/APermissionGroupManage.vue_vue_type_script_setup_true_lang.js.map +1 -1
  272. package/dist/domains/permission/group/components/APermissionGroupRemoteAutocomplete.js.map +1 -1
  273. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.js.map +1 -1
  274. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  275. package/dist/domains/remoteAutocomplete/components/AFilterRemoteAutocompleteWithMinimal.js.map +1 -1
  276. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.js.map +1 -1
  277. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.vue_vue_type_script_setup_true_lang.js.map +1 -1
  278. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocompleteWithCached.js.map +1 -1
  279. package/dist/domains/remoteAutocomplete/components/AFormRemoteAutocompleteWithCached.vue_vue_type_script_setup_true_lang.js.map +1 -1
  280. package/dist/domains/subjectSelect/components/AFilterWrapperSubjectSelect.js.map +1 -1
  281. package/dist/domains/subjectSelect/components/AFilterWrapperSubjectSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  282. package/dist/domains/subjectSelect/components/ASubjectSelect.js.map +1 -1
  283. package/dist/domains/subjectSelect/components/ASubjectSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  284. package/dist/domains/system/appShell/components/AActionbar.js.map +1 -1
  285. package/dist/domains/system/appShell/components/AActionbar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  286. package/dist/domains/system/appShell/components/AActionbarTarget.js.map +1 -1
  287. package/dist/domains/system/appShell/components/ALayoutLoader.js.map +1 -1
  288. package/dist/domains/system/appShell/components/ALayoutSwitch.js.map +1 -1
  289. package/dist/domains/system/appShell/components/ALayoutSwitch.vue_vue_type_script_setup_true_lang.js.map +1 -1
  290. package/dist/domains/system/components/AAdminSwitcher.js.map +1 -1
  291. package/dist/domains/system/components/AAdminSwitcher.vue_vue_type_script_setup_true_lang.js.map +1 -1
  292. package/dist/domains/system/components/AAlerts.js.map +1 -1
  293. package/dist/domains/system/components/ALanguageSelect.js.map +1 -1
  294. package/dist/domains/system/components/AThemeSelect.js.map +1 -1
  295. package/dist/domains/system/components/AThemeSelect.vue_vue_type_script_setup_true_lang.js.map +1 -1
  296. package/dist/domains/system/flags/components/FlagCountry.js.map +1 -1
  297. package/dist/domains/system/flags/components/FlagEn.js.map +1 -1
  298. package/dist/domains/system/flags/components/FlagSk.js.map +1 -1
  299. package/dist/domains/system/systemBar/components/ASystemBar.js.map +1 -1
  300. package/dist/domains/system/systemBar/components/ASystemBar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  301. package/dist/domains/system/systemBar/components/ASystemBarNewVersion.js.map +1 -1
  302. package/dist/domains/system/systemBar/components/ASystemBarNewVersion.vue_vue_type_script_setup_true_lang.js.map +1 -1
  303. package/dist/domains/ui/buttons/action/components/AActionCloseButtonHistory.js.map +1 -1
  304. package/dist/domains/ui/buttons/action/components/AActionCreateButton.js.map +1 -1
  305. package/dist/domains/ui/buttons/action/components/AActionCreateButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  306. package/dist/domains/ui/buttons/action/components/AActionDeleteButton.js.map +1 -1
  307. package/dist/domains/ui/buttons/action/components/AActionDeleteButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  308. package/dist/domains/ui/buttons/action/components/AActionEditButton.js.map +1 -1
  309. package/dist/domains/ui/buttons/action/components/AActionEditButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  310. package/dist/domains/ui/buttons/action/components/AActionSaveAndCloseButton.js.map +1 -1
  311. package/dist/domains/ui/buttons/action/components/AActionSaveAndCloseButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  312. package/dist/domains/ui/buttons/action/components/AActionSaveButton.js.map +1 -1
  313. package/dist/domains/ui/buttons/action/components/AActionSaveButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  314. package/dist/domains/ui/buttons/components/ABtnSplit.js.map +1 -1
  315. package/dist/domains/ui/buttons/components/ABtnSplit.vue_vue_type_script_setup_true_lang.js.map +1 -1
  316. package/dist/domains/ui/buttons/table/components/ATableCopyIdButton.js.map +1 -1
  317. package/dist/domains/ui/buttons/table/components/ATableCopyIdButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  318. package/dist/domains/ui/buttons/table/components/ATableDetailButton.js.map +1 -1
  319. package/dist/domains/ui/buttons/table/components/ATableDetailButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  320. package/dist/domains/ui/buttons/table/components/ATableEditButton.js.map +1 -1
  321. package/dist/domains/ui/buttons/table/components/ATableEditButton.vue_vue_type_script_setup_true_lang.js.map +1 -1
  322. package/dist/domains/ui/components/AAnzuUserAvatar.js.map +1 -1
  323. package/dist/domains/ui/components/AAnzuUserAvatar.vue_vue_type_script_setup_true_lang.js.map +1 -1
  324. package/dist/domains/ui/components/AAvatarColorPicker.js.map +1 -1
  325. package/dist/domains/ui/components/AAvatarColorPicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  326. package/dist/domains/ui/components/ABooleanSelect.js.map +1 -1
  327. package/dist/domains/ui/components/ABooleanValue.js.map +1 -1
  328. package/dist/domains/ui/components/ACard.js.map +1 -1
  329. package/dist/domains/ui/components/ACardLoader.js.map +1 -1
  330. package/dist/domains/ui/components/AChipNoLink.js.map +1 -1
  331. package/dist/domains/ui/components/ACopyText.js.map +1 -1
  332. package/dist/domains/ui/components/ACopyText.vue_vue_type_script_setup_true_lang.js.map +1 -1
  333. package/dist/domains/ui/components/ACreateDialog.js.map +1 -1
  334. package/dist/domains/ui/components/ACreateDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  335. package/dist/domains/ui/components/ACurrentUserDropdown.js.map +1 -1
  336. package/dist/domains/ui/components/ACurrentUserDropdown.vue_vue_type_script_setup_true_lang.js.map +1 -1
  337. package/dist/domains/ui/components/ADialogToolbar.js.map +1 -1
  338. package/dist/domains/ui/components/AIconGroup.js.map +1 -1
  339. package/dist/domains/ui/components/AProgress.js.map +1 -1
  340. package/dist/domains/ui/components/ARow.js.map +1 -1
  341. package/dist/domains/ui/components/ARow.vue_vue_type_script_setup_true_lang.js.map +1 -1
  342. package/dist/domains/ui/components/ATimeTrackingFields.js.map +1 -1
  343. package/dist/domains/ui/components/ATimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
  344. package/dist/domains/ui/components/AUserAndTimeTrackingFields.js.map +1 -1
  345. package/dist/domains/ui/components/AUserAndTimeTrackingFields.vue_vue_type_script_setup_true_lang.js.map +1 -1
  346. package/dist/domains/ui/datetime/components/ADatetime.js.map +1 -1
  347. package/dist/domains/ui/datetime/components/ADatetimePicker.js.map +1 -1
  348. package/dist/domains/ui/datetime/components/ADatetimePicker.vue_vue_type_script_setup_true_lang.js.map +1 -1
  349. package/dist/domains/ui/datetime/components/TimePicker.js.map +1 -1
  350. package/dist/domains/ui/file/components/AFileDropzone.js.map +1 -1
  351. package/dist/domains/ui/file/components/AFileInput.js.map +1 -1
  352. package/dist/domains/ui/file/components/AFileInput.vue_vue_type_script_setup_true_lang.js.map +1 -1
  353. package/dist/domains/ui/file/components/AFileInputDialog.js.map +1 -1
  354. package/dist/domains/ui/file/components/AFileInputDialog.vue_vue_type_script_setup_true_lang.js.map +1 -1
  355. package/dist/domains/ui/view/components/AGenericView.js.map +1 -1
  356. package/dist/domains/ui/view/components/AGenericView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  357. package/dist/domains/ui/view/components/ALoginView.js.map +1 -1
  358. package/dist/domains/ui/view/components/ALoginView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  359. package/dist/domains/ui/view/components/ALogoutView.js.map +1 -1
  360. package/dist/domains/ui/view/components/ANotFoundView.js.map +1 -1
  361. package/dist/domains/ui/view/components/AUnauthorizedView.js.map +1 -1
  362. package/dist/domains/ui/view/components/AUnauthorizedView.vue_vue_type_script_setup_true_lang.js.map +1 -1
  363. package/dist/domains/unsavedGuard/components/AUnsavedConfirmDialog.js.map +1 -1
  364. package/dist/locales/cs/common/alert.js.map +1 -1
  365. package/dist/locales/cs/common/anzuUser.js.map +1 -1
  366. package/dist/locales/cs/common/assetSelect.js.map +1 -1
  367. package/dist/locales/cs/common/button.js.map +1 -1
  368. package/dist/locales/cs/common/collab.js.map +1 -1
  369. package/dist/locales/cs/common/confirmDialog.js.map +1 -1
  370. package/dist/locales/cs/common/customForm.js.map +1 -1
  371. package/dist/locales/cs/common/customFormElement.js.map +1 -1
  372. package/dist/locales/cs/common/damImage.js.map +1 -1
  373. package/dist/locales/cs/common/dayOfWeek.js.map +1 -1
  374. package/dist/locales/cs/common/filter.js.map +1 -1
  375. package/dist/locales/cs/common/job.js.map +1 -1
  376. package/dist/locales/cs/common/linkDto.js.map +1 -1
  377. package/dist/locales/cs/common/listItemDto.js.map +1 -1
  378. package/dist/locales/cs/common/log.js.map +1 -1
  379. package/dist/locales/cs/common/model.js.map +1 -1
  380. package/dist/locales/cs/common/permission.js.map +1 -1
  381. package/dist/locales/cs/common/permissionEditor.js.map +1 -1
  382. package/dist/locales/cs/common/permissionGroup.js.map +1 -1
  383. package/dist/locales/cs/common/routeSettings.js.map +1 -1
  384. package/dist/locales/cs/common/sortable.js.map +1 -1
  385. package/dist/locales/cs/common/subjectSelect.js.map +1 -1
  386. package/dist/locales/cs/common/system.js.map +1 -1
  387. package/dist/locales/cs/common/time.js.map +1 -1
  388. package/dist/locales/cs/common/userSystem.js.map +1 -1
  389. package/dist/locales/cs/error/apiDependencyExists.js.map +1 -1
  390. package/dist/locales/cs/error/apiForbiddenOperation.js.map +1 -1
  391. package/dist/locales/cs/error/apiTimedOut.js.map +1 -1
  392. package/dist/locales/cs/error/apiValidation.js.map +1 -1
  393. package/dist/locales/cs/error/jsValidation.js.map +1 -1
  394. package/dist/locales/cs/vuetify.js.map +1 -1
  395. package/dist/locales/en/common/alert.js.map +1 -1
  396. package/dist/locales/en/common/anzuUser.js.map +1 -1
  397. package/dist/locales/en/common/assetSelect.js.map +1 -1
  398. package/dist/locales/en/common/button.js.map +1 -1
  399. package/dist/locales/en/common/collab.js.map +1 -1
  400. package/dist/locales/en/common/confirmDialog.js.map +1 -1
  401. package/dist/locales/en/common/customForm.js.map +1 -1
  402. package/dist/locales/en/common/customFormElement.js.map +1 -1
  403. package/dist/locales/en/common/damImage.js.map +1 -1
  404. package/dist/locales/en/common/dayOfWeek.js.map +1 -1
  405. package/dist/locales/en/common/filter.js.map +1 -1
  406. package/dist/locales/en/common/job.js.map +1 -1
  407. package/dist/locales/en/common/linkDto.js.map +1 -1
  408. package/dist/locales/en/common/listItemDto.js.map +1 -1
  409. package/dist/locales/en/common/log.js.map +1 -1
  410. package/dist/locales/en/common/model.js.map +1 -1
  411. package/dist/locales/en/common/permission.js.map +1 -1
  412. package/dist/locales/en/common/permissionEditor.js.map +1 -1
  413. package/dist/locales/en/common/permissionGroup.js.map +1 -1
  414. package/dist/locales/en/common/routeSettings.js.map +1 -1
  415. package/dist/locales/en/common/sortable.js.map +1 -1
  416. package/dist/locales/en/common/subjectSelect.js.map +1 -1
  417. package/dist/locales/en/common/system.js.map +1 -1
  418. package/dist/locales/en/common/time.js.map +1 -1
  419. package/dist/locales/en/common/userSystem.js.map +1 -1
  420. package/dist/locales/en/error/apiDependencyExists.js.map +1 -1
  421. package/dist/locales/en/error/apiForbiddenOperation.js.map +1 -1
  422. package/dist/locales/en/error/apiTimedOut.js.map +1 -1
  423. package/dist/locales/en/error/apiValidation.js.map +1 -1
  424. package/dist/locales/en/error/jsValidation.js.map +1 -1
  425. package/dist/locales/en/vuetify.js.map +1 -1
  426. package/dist/locales/sk/common/alert.js.map +1 -1
  427. package/dist/locales/sk/common/anzuUser.js.map +1 -1
  428. package/dist/locales/sk/common/assetSelect.js.map +1 -1
  429. package/dist/locales/sk/common/button.js.map +1 -1
  430. package/dist/locales/sk/common/collab.js.map +1 -1
  431. package/dist/locales/sk/common/confirmDialog.js.map +1 -1
  432. package/dist/locales/sk/common/customForm.js.map +1 -1
  433. package/dist/locales/sk/common/customFormElement.js.map +1 -1
  434. package/dist/locales/sk/common/damImage.js.map +1 -1
  435. package/dist/locales/sk/common/dayOfWeek.js.map +1 -1
  436. package/dist/locales/sk/common/filter.js.map +1 -1
  437. package/dist/locales/sk/common/job.js.map +1 -1
  438. package/dist/locales/sk/common/linkDto.js.map +1 -1
  439. package/dist/locales/sk/common/listItemDto.js.map +1 -1
  440. package/dist/locales/sk/common/log.js.map +1 -1
  441. package/dist/locales/sk/common/model.js.map +1 -1
  442. package/dist/locales/sk/common/permission.js.map +1 -1
  443. package/dist/locales/sk/common/permissionEditor.js.map +1 -1
  444. package/dist/locales/sk/common/permissionGroup.js.map +1 -1
  445. package/dist/locales/sk/common/routeSettings.js.map +1 -1
  446. package/dist/locales/sk/common/sortable.js.map +1 -1
  447. package/dist/locales/sk/common/subjectSelect.js.map +1 -1
  448. package/dist/locales/sk/common/system.js.map +1 -1
  449. package/dist/locales/sk/common/time.js.map +1 -1
  450. package/dist/locales/sk/common/userSystem.js.map +1 -1
  451. package/dist/locales/sk/error/apiDependencyExists.js.map +1 -1
  452. package/dist/locales/sk/error/apiForbiddenOperation.js.map +1 -1
  453. package/dist/locales/sk/error/apiTimedOut.js.map +1 -1
  454. package/dist/locales/sk/error/apiValidation.js.map +1 -1
  455. package/dist/locales/sk/error/jsValidation.js.map +1 -1
  456. package/dist/locales/sk/vuetify.js.map +1 -1
  457. package/package.json +15 -15
  458. package/src/e2e/env.d.mts +46 -0
  459. package/src/e2e/env.mjs +78 -0
  460. package/src/e2e/index.d.mts +3 -0
  461. package/src/e2e/index.mjs +2 -0
  462. package/src/e2e/routeWalk.mjs +2 -1
  463. package/src/e2e/routeWalkConfig.d.mts +16 -0
  464. package/src/e2e/routeWalkConfig.mjs +52 -0
  465. package/src/e2e/types.d.mts +5 -0
@@ -1 +1 @@
1
- {"version":3,"file":"ALogDatatable.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_component_VSpacer","ADatatableConfigButton","_unref","_isRef","_component_VDataTableServer","_withCtx","ADatetime","_toDisplayString","_createTextVNode","ACopyText","_createBlock","_createCommentVNode","_component_VBtn","ADatatablePagination","ACopyText_default","ADatatableConfigButton_default","ADatetime_default","ADatatablePagination_default","_hoisted_1","_hoisted_2","_hoisted_3","ALogDatatable_vue_vue_type_script_setup_true_lang_default","\"loading\"","\"loadingModifiers\"","__expose","__emit","props","__props","emit","loading","useModel","filterConfig","inject","FilterConfigKey","filterData","FilterDataKey","isUndefined","useI18n","useLogListActions","useFilterHelpers","usePagination","DatatablePaginationKey","pagination","createDatatableColumnsConfig","LogType","datatableHiddenColumns","getList","useDebounceFn","fetchList","onRowClick","item","onMounted","isDevelopment","watch","onBeforeUnmount","cancel","resetFilter","submitFilter","openBlock","createElementBlock","createElementVNode","createVNode","VSpacer","unref","columnsHidden","_cache","isRef","$event","columnsAll","VDataTableServer","columnsVisible","listItems","withCtx","toDisplayString","createTextVNode","isNull","createCommentVNode","createBlock","VBtn","t"],"sources":["../../../../src/domains/log/components/ALogDatatable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { inject, onMounted, onBeforeUnmount, provide, watch } from 'vue'\nimport type { RouteLocationRaw } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { useDebounceFn } from '@vueuse/core'\nimport ACopyText from '@/domains/ui/components/ACopyText.vue'\nimport ADatatableConfigButton from '@/domains/filters/datatable/components/ADatatableConfigButton.vue'\nimport ADatetime from '@/domains/ui/datetime/components/ADatetime.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport ADatatablePagination from '@/domains/filters/datatable/components/ADatatablePagination.vue'\nimport { createDatatableColumnsConfig } from '@/domains/filters/datatable/composables/createDatatableColumnsConfig'\nimport { DatatablePaginationKey, FilterConfigKey, FilterDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport { useFilterHelpers } from '@/domains/filters/composables/filterFactory'\nimport { usePagination } from '@/domains/api/composables/pagination'\nimport { SORT_BY_ID } from '@/domains/filters/datatable/utils/datatableColumns'\nimport { useLogListActions } from '@/domains/log/composables/logActions'\nimport { LOG_ENTITY } from '@/domains/log/api/logApi'\nimport { LogType, type LogPaths, type LogTypeType } from '@/domains/log/composables/logType'\nimport type { Log } from '@/domains/log/types/Log'\nimport { isNull, isUndefined } from '@/shared/utils/common'\nimport { isDevelopment } from '@/shared/utils/development'\n\ntype DatatableItem = Log\n\nconst props = defineProps<{\n client: AxiosClientFn\n system: string\n type: LogTypeType\n logPaths: LogPaths\n /** Same mapper the view uses. Needed here so the actions cell stays a real link. */\n detailRoute: (log: Log) => RouteLocationRaw\n}>()\n\nconst emit = defineEmits<{\n (e: 'rowClick', log: Log): void\n}>()\n\n// The spinner belongs to the card above this table, so the flag is owned there.\nconst loading = defineModel<boolean>('loading', { default: false })\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nif (isUndefined(filterConfig) || isUndefined(filterData)) {\n throw new Error('[ALogDatatable] Incorrect provide/inject config.')\n}\n\n// Read once on purpose. These are fixed for this instance's lifetime.\n// The page remounts the view via `:key` on system or type change,\n// because `useApiFetchList` closes over its client and url.\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { t } = useI18n()\nconst { fetchList, listItems, datatableHiddenColumns, cancel } = useLogListActions({\n client: props.client,\n system: props.system,\n logPaths: props.logPaths,\n type: props.type,\n loading,\n})\n\n// No url hash and no local storage. The `logFilter` registry keeps the filter per view in memory.\n// Nothing about a log listing is worth persisting across a reload.\nconst { resetFilter, submitFilter, loadStoredFilters } = useFilterHelpers(filterData, filterConfig, {\n storeFiltersLocalStorage: false,\n populateUrlParams: false,\n})\n\nconst { pagination } = usePagination(SORT_BY_ID)\nprovide(DatatablePaginationKey, pagination)\n\n// Keyed by type, not by system. The column sets differ between app and audit.\n// A column hidden in audit must not disappear from the app table.\nconst { columnsVisible, columnsAll, columnsHidden } = createDatatableColumnsConfig(\n [\n { key: 'id' },\n { key: 'datetime' },\n { key: 'levelName' },\n { key: 'message' },\n { key: 'context.appVersion' },\n { key: 'context.contextId' },\n ...(props.type === LogType.Audit\n ? [{ key: 'context.resourceName' }, { key: 'context.resourceIds' }]\n : [{ key: 'context.httpStatus' }]),\n { key: 'context.userId' },\n { key: 'context.ip' },\n ],\n datatableHiddenColumns,\n 'common',\n LOG_ENTITY,\n { storeColumnsLocalStorage: `table_common_log_${props.type}` }\n)\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\nconst getList = useDebounceFn(async () => {\n await fetchList(pagination, filterData, filterConfig)\n})\n\nconst onRowClick = (_event: unknown, { item }: { item: DatatableItem }) => {\n if (item.id) emit('rowClick', item)\n}\n\nonMounted(() => {\n // Both persistences are off, so it reads nothing back.\n // It still restores the page a user was on after closing a detail,\n // which `AActionCloseButtonHistory` flags for the next list.\n loadStoredFilters(pagination, getList)\n})\n\n// The code above reads props once, which is only correct while the page remounts this view via `:key`.\n// Otherwise the table would silently keep querying the old endpoint with the old columns.\nif (isDevelopment()) {\n watch(\n () => [props.system, props.type],\n () => {\n console.error(\n '[ALogDatatable] `system` or `type` changed in place. This view must be remounted -- ' +\n 'give it :key=\"`${system}/${type}`\". The endpoint and columns are bound at mount.'\n )\n }\n )\n}\n\nonBeforeUnmount(() => {\n // Both calls, in this order. `cancel()` only invalidates requests already in flight.\n // A pending debounce would fire after unmount, bump the generation past\n // that invalidation and start a request the token treats as current.\n getList.cancel()\n cancel()\n})\n\ndefineExpose({\n refresh: getList,\n resetFilter: () => resetFilter(pagination, getList),\n submitFilter: () => submitFilter(pagination, getList),\n})\n</script>\n\n<template>\n <div>\n <div class=\"d-flex align-center\">\n <VSpacer />\n <ADatatableConfigButton\n v-model:columns-hidden=\"columnsHidden\"\n :columns-all=\"columnsAll\"\n />\n </div>\n <VDataTableServer\n class=\"a-datatable\"\n :headers=\"columnsVisible\"\n :items=\"listItems\"\n :items-length=\"listItems.length\"\n item-value=\"id\"\n @click:row=\"onRowClick\"\n >\n <template #item.datetime=\"{ item }: { item: DatatableItem }\">\n <ADatetime :date-time=\"item.datetime\" />\n </template>\n <template #item.message=\"{ item }: { item: DatatableItem }\">\n <div class=\"a-line-clamp-2\">\n {{ item.message }}\n </div>\n </template>\n <template #item.context.resourceIds=\"{ item }: { item: DatatableItem }\">\n {{ item.context.resourceIds.join(', ') }}\n </template>\n <template #item.context.contextId=\"{ item }: { item: DatatableItem }\">\n <ACopyText :value=\"item.context.contextId\" />\n </template>\n <template #item.context.userId=\"{ item }: { item: DatatableItem }\">\n <ACopyText\n v-if=\"!isNull(item.context.userId)\"\n :value=\"item.context.userId\"\n />\n </template>\n <template #item.actions=\"{ item }: { item: DatatableItem }\">\n <div class=\"d-flex justify-end\">\n <!--\n `:to`, not a click handler. An anchor makes middle-click and open-in-new-tab work.\n The smoke spec also scrapes it to find a row id.\n -->\n <VBtn\n :to=\"detailRoute(item)\"\n class=\"ml-1\"\n icon=\"mdi-information-outline\"\n :aria-label=\"t('common.button.detail')\"\n size=\"x-small\"\n variant=\"text\"\n />\n </div>\n </template>\n <template #bottom>\n <ADatatablePagination @change=\"getList\" />\n </template>\n </VDataTableServer>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"ALogDatatable.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createElementBlock","_createElementVNode","_createVNode","_component_VSpacer","ADatatableConfigButton","_unref","_isRef","_component_VDataTableServer","_withCtx","ADatetime","_toDisplayString","_createTextVNode","ACopyText","_createBlock","_component_VBtn","ADatatablePagination","ACopyText_default","ADatatableConfigButton_default","ADatetime_default","ADatatablePagination_default","_hoisted_1","_hoisted_2","_hoisted_3","ALogDatatable_vue_vue_type_script_setup_true_lang_default","\"loading\"","\"loadingModifiers\"","__expose","__emit","props","__props","emit","loading","useModel","filterConfig","inject","FilterConfigKey","filterData","FilterDataKey","isUndefined","useI18n","useLogListActions","useFilterHelpers","usePagination","DatatablePaginationKey","pagination","createDatatableColumnsConfig","LogType","datatableHiddenColumns","getList","useDebounceFn","fetchList","onRowClick","item","onMounted","isDevelopment","watch","onBeforeUnmount","cancel","resetFilter","submitFilter","openBlock","createElementBlock","createElementVNode","createVNode","VSpacer","unref","columnsHidden","_cache","isRef","$event","columnsAll","VDataTableServer","columnsVisible","listItems","withCtx","toDisplayString","createTextVNode","isNull","createCommentVNode","createBlock","VBtn","t"],"sources":["../../../../src/domains/log/components/ALogDatatable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { inject, onMounted, onBeforeUnmount, provide, watch } from 'vue'\nimport type { RouteLocationRaw } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { useDebounceFn } from '@vueuse/core'\nimport ACopyText from '@/domains/ui/components/ACopyText.vue'\nimport ADatatableConfigButton from '@/domains/filters/datatable/components/ADatatableConfigButton.vue'\nimport ADatetime from '@/domains/ui/datetime/components/ADatetime.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport ADatatablePagination from '@/domains/filters/datatable/components/ADatatablePagination.vue'\nimport { createDatatableColumnsConfig } from '@/domains/filters/datatable/composables/createDatatableColumnsConfig'\nimport { DatatablePaginationKey, FilterConfigKey, FilterDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport { useFilterHelpers } from '@/domains/filters/composables/filterFactory'\nimport { usePagination } from '@/domains/api/composables/pagination'\nimport { SORT_BY_ID } from '@/domains/filters/datatable/utils/datatableColumns'\nimport { useLogListActions } from '@/domains/log/composables/logActions'\nimport { LOG_ENTITY } from '@/domains/log/api/logApi'\nimport { LogType, type LogPaths, type LogTypeType } from '@/domains/log/composables/logType'\nimport type { Log } from '@/domains/log/types/Log'\nimport { isNull, isUndefined } from '@/shared/utils/common'\nimport { isDevelopment } from '@/shared/utils/development'\n\ntype DatatableItem = Log\n\nconst props = defineProps<{\n client: AxiosClientFn\n system: string\n type: LogTypeType\n logPaths: LogPaths\n /** Same mapper the view uses. Needed here so the actions cell stays a real link. */\n detailRoute: (log: Log) => RouteLocationRaw\n}>()\n\nconst emit = defineEmits<{\n (e: 'rowClick', log: Log): void\n}>()\n\n// The spinner belongs to the card above this table, so the flag is owned there.\nconst loading = defineModel<boolean>('loading', { default: false })\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nif (isUndefined(filterConfig) || isUndefined(filterData)) {\n throw new Error('[ALogDatatable] Incorrect provide/inject config.')\n}\n\n// Read once on purpose. These are fixed for this instance's lifetime.\n// The page remounts the view via `:key` on system or type change,\n// because `useApiFetchList` closes over its client and url.\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { t } = useI18n()\nconst { fetchList, listItems, datatableHiddenColumns, cancel } = useLogListActions({\n client: props.client,\n system: props.system,\n logPaths: props.logPaths,\n type: props.type,\n loading,\n})\n\n// No url hash and no local storage. The `logFilter` registry keeps the filter per view in memory.\n// Nothing about a log listing is worth persisting across a reload.\nconst { resetFilter, submitFilter, loadStoredFilters } = useFilterHelpers(filterData, filterConfig, {\n storeFiltersLocalStorage: false,\n populateUrlParams: false,\n})\n\nconst { pagination } = usePagination(SORT_BY_ID)\nprovide(DatatablePaginationKey, pagination)\n\n// Keyed by type, not by system. The column sets differ between app and audit.\n// A column hidden in audit must not disappear from the app table.\nconst { columnsVisible, columnsAll, columnsHidden } = createDatatableColumnsConfig(\n [\n { key: 'id' },\n { key: 'datetime' },\n { key: 'levelName' },\n { key: 'message' },\n { key: 'context.appVersion' },\n { key: 'context.contextId' },\n ...(props.type === LogType.Audit\n ? [{ key: 'context.resourceName' }, { key: 'context.resourceIds' }]\n : [{ key: 'context.httpStatus' }]),\n { key: 'context.userId' },\n { key: 'context.ip' },\n ],\n datatableHiddenColumns,\n 'common',\n LOG_ENTITY,\n { storeColumnsLocalStorage: `table_common_log_${props.type}` }\n)\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\nconst getList = useDebounceFn(async () => {\n await fetchList(pagination, filterData, filterConfig)\n})\n\nconst onRowClick = (_event: unknown, { item }: { item: DatatableItem }) => {\n if (item.id) emit('rowClick', item)\n}\n\nonMounted(() => {\n // Both persistences are off, so it reads nothing back.\n // It still restores the page a user was on after closing a detail,\n // which `AActionCloseButtonHistory` flags for the next list.\n loadStoredFilters(pagination, getList)\n})\n\n// The code above reads props once, which is only correct while the page remounts this view via `:key`.\n// Otherwise the table would silently keep querying the old endpoint with the old columns.\nif (isDevelopment()) {\n watch(\n () => [props.system, props.type],\n () => {\n console.error(\n '[ALogDatatable] `system` or `type` changed in place. This view must be remounted -- ' +\n 'give it :key=\"`${system}/${type}`\". The endpoint and columns are bound at mount.'\n )\n }\n )\n}\n\nonBeforeUnmount(() => {\n // Both calls, in this order. `cancel()` only invalidates requests already in flight.\n // A pending debounce would fire after unmount, bump the generation past\n // that invalidation and start a request the token treats as current.\n getList.cancel()\n cancel()\n})\n\ndefineExpose({\n refresh: getList,\n resetFilter: () => resetFilter(pagination, getList),\n submitFilter: () => submitFilter(pagination, getList),\n})\n</script>\n\n<template>\n <div>\n <div class=\"d-flex align-center\">\n <VSpacer />\n <ADatatableConfigButton\n v-model:columns-hidden=\"columnsHidden\"\n :columns-all=\"columnsAll\"\n />\n </div>\n <VDataTableServer\n class=\"a-datatable\"\n :headers=\"columnsVisible\"\n :items=\"listItems\"\n :items-length=\"listItems.length\"\n item-value=\"id\"\n @click:row=\"onRowClick\"\n >\n <template #item.datetime=\"{ item }: { item: DatatableItem }\">\n <ADatetime :date-time=\"item.datetime\" />\n </template>\n <template #item.message=\"{ item }: { item: DatatableItem }\">\n <div class=\"a-line-clamp-2\">\n {{ item.message }}\n </div>\n </template>\n <template #item.context.resourceIds=\"{ item }: { item: DatatableItem }\">\n {{ item.context.resourceIds.join(', ') }}\n </template>\n <template #item.context.contextId=\"{ item }: { item: DatatableItem }\">\n <ACopyText :value=\"item.context.contextId\" />\n </template>\n <template #item.context.userId=\"{ item }: { item: DatatableItem }\">\n <ACopyText\n v-if=\"!isNull(item.context.userId)\"\n :value=\"item.context.userId\"\n />\n </template>\n <template #item.actions=\"{ item }: { item: DatatableItem }\">\n <div class=\"d-flex justify-end\">\n <!--\n `:to`, not a click handler. An anchor makes middle-click and open-in-new-tab work.\n The smoke spec also scrapes it to find a row id.\n -->\n <VBtn\n :to=\"detailRoute(item)\"\n class=\"ml-1\"\n icon=\"mdi-information-outline\"\n :aria-label=\"t('common.button.detail')\"\n size=\"x-small\"\n variant=\"text\"\n />\n </div>\n </template>\n <template #bottom>\n <ADatatablePagination @change=\"getList\" />\n </template>\n </VDataTableServer>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ALogDetail.js","names":["_sfc_main","ALogDetail_vue_vue_type_script_setup_true_lang_default","_plugin_vue_export_helper_default","ALogDetail_default"],"sources":["../../../../src/domains/log/components/ALogDetail.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport ALogLevelChip from '@/domains/log/components/ALogLevelChip.vue'\nimport type { Log } from '@/domains/log/types/Log'\nimport { dateTimeFriendly } from '@/shared/utils/datetime'\nimport { formatJson } from '@/shared/utils/json'\n\ndefineProps<{\n log: Log\n}>()\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VRow>\n <VCol>\n <VRow>\n <VCol cols=\"3\">\n <h4 class=\"text-label-large\">\n {{ t('common.log.model.id') }}\n </h4>\n {{ log.id }}\n </VCol>\n <VCol cols=\"3\">\n <h4 class=\"text-label-large\">\n {{ t('common.log.model.levelName') }}\n </h4>\n <ALogLevelChip :level=\"log.levelName\" />\n </VCol>\n <VCol cols=\"2\">\n <h4 class=\"text-label-large\">\n {{ t('common.log.model.context.userId') }}\n </h4>\n {{ log.context.userId }}\n </VCol>\n <VCol cols=\"2\">\n <h4 class=\"text-label-large\">\n {{ t('common.log.model.context.appVersion') }}\n </h4>\n {{ log.context.appVersion }}\n </VCol>\n <VCol cols=\"2\">\n <h4 class=\"text-label-large\">\n {{ t('common.log.model.context.requestOriginAppVersion') }}\n </h4>\n {{ log.context.requestOriginAppVersion }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"4\">\n <h4 class=\"text-label-large\">\n {{ t('common.log.model.context.contextId') }}\n </h4>\n {{ log.context.contextId }}\n </VCol>\n <VCol cols=\"4\">\n <h4 class=\"text-label-large\">\n {{ t('common.log.model.context.ip') }}\n </h4>\n {{ log.context.ip }}\n </VCol>\n <VCol cols=\"4\">\n <h4 class=\"text-label-large\">\n {{ t('common.log.model.datetime') }}\n </h4>\n {{ dateTimeFriendly(log.datetime) }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"12\">\n <h4 class=\"text-label-large\">\n {{ t('common.log.model.message') }}\n </h4>\n <pre>{{ log.message }}</pre>\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"6\">\n <h4 class=\"text-label-large\">\n {{ t('common.log.model.context.path') }}\n </h4>\n {{ log.context.method }} {{ log.context.path }}\n </VCol>\n <VCol cols=\"6\">\n <h4 class=\"text-label-large\">\n {{ t('common.log.model.context.httpStatus') }}\n </h4>\n {{ log.context.httpStatus }}\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"12\">\n <h4 class=\"text-label-large\">\n {{ t('common.log.model.context.content') }}\n </h4>\n <pre>{{ formatJson(log.context.content ?? '') }}</pre>\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"12\">\n <h4 class=\"text-label-large\">\n {{ t('common.log.model.context.response') }}\n </h4>\n <pre>{{ formatJson(log.context.response) }}</pre>\n </VCol>\n </VRow>\n </VCol>\n </VRow>\n</template>\n\n<style lang=\"scss\" scoped>\npre {\n overflow: auto;\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"ALogDetail.js","names":["ALogDetail_vue_vue_type_script_setup_true_lang_default","_plugin_vue_export_helper_default","ALogDetail_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"ALogDetailView.js","names":["_sfc_main","ALogDetailView_vue_vue_type_script_setup_true_lang_default","ALogDetailView_default"],"sources":["../../../../src/domains/log/components/ALogDetailView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { onBeforeUnmount, onMounted } from 'vue'\nimport type { RouteRecordName } from 'vue-router'\nimport ACard from '@/domains/ui/components/ACard.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport ALogDetail from '@/domains/log/components/ALogDetail.vue'\nimport { useLogDetailActions } from '@/domains/log/composables/logActions'\nimport { useRecordPage } from '@/domains/system/composables/recordPage'\nimport type { LogPaths, LogTypeType } from '@/domains/log/composables/logType'\nimport { isNull } from '@/shared/utils/common'\n\nconst props = defineProps<{\n client: AxiosClientFn\n system: string\n /** From the route. A log id means nothing without the store it came from. */\n type: LogTypeType\n id: string\n logPaths: LogPaths\n /** Where a log that cannot be loaded leaves to when history is empty. The page's Close fallback. */\n fallbackRouteName?: RouteRecordName\n fallbackRouteParams?: Record<string, any>\n}>()\n\n// Read once: the page keys this view on `${system}/${type}/${id}`, so a change remounts it.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { log, detailLoading, fetchData, cancel } = useLogDetailActions({\n client: props.client,\n system: props.system,\n logPaths: props.logPaths,\n type: props.type,\n})\n\n// No `loading`: the view has no buttons to hide.\n// With it, a page without a fallback would keep the card loading forever in a fresh tab.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { leave } = useRecordPage({\n fallbackRouteName: props.fallbackRouteName,\n fallbackRouteParams: props.fallbackRouteParams,\n})\n\nonMounted(async () => {\n if ((await fetchData(props.id)) === false) await leave()\n})\n\nonBeforeUnmount(() => {\n cancel()\n})\n</script>\n\n<template>\n <ACard :loading=\"detailLoading\">\n <VCardText>\n <ALogDetail\n v-if=\"!isNull(log)\"\n :log=\"log\"\n />\n </VCardText>\n </ACard>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"ALogDetailView.js","names":["ALogDetailView_vue_vue_type_script_setup_true_lang_default","ALogDetailView_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"ALogDetailView.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","ACard","_unref","_withCtx","_createVNode","_component_VCardText","ALogDetail","_createCommentVNode","ACard_default","ALogDetail_default","ALogDetailView_vue_vue_type_script_setup_true_lang_default","props","__props","useLogDetailActions","useRecordPage","onMounted","fetchData","leave","onBeforeUnmount","openBlock","createBlock","unref","detailLoading","withCtx","createVNode","VCardText","isNull","log","createCommentVNode"],"sources":["../../../../src/domains/log/components/ALogDetailView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { onBeforeUnmount, onMounted } from 'vue'\nimport type { RouteRecordName } from 'vue-router'\nimport ACard from '@/domains/ui/components/ACard.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport ALogDetail from '@/domains/log/components/ALogDetail.vue'\nimport { useLogDetailActions } from '@/domains/log/composables/logActions'\nimport { useRecordPage } from '@/domains/system/composables/recordPage'\nimport type { LogPaths, LogTypeType } from '@/domains/log/composables/logType'\nimport { isNull } from '@/shared/utils/common'\n\nconst props = defineProps<{\n client: AxiosClientFn\n system: string\n /** From the route. A log id means nothing without the store it came from. */\n type: LogTypeType\n id: string\n logPaths: LogPaths\n /** Where a log that cannot be loaded leaves to when history is empty. The page's Close fallback. */\n fallbackRouteName?: RouteRecordName\n fallbackRouteParams?: Record<string, any>\n}>()\n\n// Read once: the page keys this view on `${system}/${type}/${id}`, so a change remounts it.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { log, detailLoading, fetchData, cancel } = useLogDetailActions({\n client: props.client,\n system: props.system,\n logPaths: props.logPaths,\n type: props.type,\n})\n\n// No `loading`: the view has no buttons to hide.\n// With it, a page without a fallback would keep the card loading forever in a fresh tab.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { leave } = useRecordPage({\n fallbackRouteName: props.fallbackRouteName,\n fallbackRouteParams: props.fallbackRouteParams,\n})\n\nonMounted(async () => {\n if ((await fetchData(props.id)) === false) await leave()\n})\n\nonBeforeUnmount(() => {\n cancel()\n})\n</script>\n\n<template>\n <ACard :loading=\"detailLoading\">\n <VCardText>\n <ALogDetail\n v-if=\"!isNull(log)\"\n :log=\"log\"\n />\n </VCardText>\n </ACard>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;EAWA,IAAMY,IAAQC,GAcR,EAAE,QAAK,kBAAe,cAAW,cAAWC,EAAoB;GACpE,QAAQF,EAAM;GACd,QAAQA,EAAM;GACd,UAAUA,EAAM;GAChB,MAAMA,EAAM;EACd,CAAC,GAKK,EAAE,aAAUG,EAAc;GAC9B,mBAAmBH,EAAM;GACzB,qBAAqBA,EAAM;EAC7B,CAAC;E,OAEDI,EAAU,YAAY;GACpB,AAAK,MAAMC,EAAUL,EAAM,EAAE,MAAO,MAAO,MAAMM,EAAM;EACzD,CAAC,GAEDC,QAAsB;GACpB,EAAO;EACT,CAAC,I,UAICnB,EAAA,GAAAC,EAOQC,GAAA,EAPA,SAASC,EAAAoB,CAAA,EAAa,GAAA;GAC5B,SAAAnB,QAKY,CALZC,EAKYC,GAAA,MAAA;IAJV,SAAAF,QAGE,CAFOD,EAAAwB,CAAA,CAAM,CAACxB,EAAAyB,CAAA,CAAG,I,aADnB5B,EAAA,GAAAC,EAGEM,GAAA;;KADC,KAAKJ,EAAAyB,CAAA"}
1
+ {"version":3,"file":"ALogDetailView.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","ACard","_unref","_withCtx","_createVNode","_component_VCardText","ALogDetail","ACard_default","ALogDetail_default","ALogDetailView_vue_vue_type_script_setup_true_lang_default","props","__props","useLogDetailActions","useRecordPage","onMounted","fetchData","leave","onBeforeUnmount","openBlock","createBlock","unref","detailLoading","withCtx","createVNode","VCardText","isNull","log","createCommentVNode"],"sources":["../../../../src/domains/log/components/ALogDetailView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { onBeforeUnmount, onMounted } from 'vue'\nimport type { RouteRecordName } from 'vue-router'\nimport ACard from '@/domains/ui/components/ACard.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport ALogDetail from '@/domains/log/components/ALogDetail.vue'\nimport { useLogDetailActions } from '@/domains/log/composables/logActions'\nimport { useRecordPage } from '@/domains/system/composables/recordPage'\nimport type { LogPaths, LogTypeType } from '@/domains/log/composables/logType'\nimport { isNull } from '@/shared/utils/common'\n\nconst props = defineProps<{\n client: AxiosClientFn\n system: string\n /** From the route. A log id means nothing without the store it came from. */\n type: LogTypeType\n id: string\n logPaths: LogPaths\n /** Where a log that cannot be loaded leaves to when history is empty. The page's Close fallback. */\n fallbackRouteName?: RouteRecordName\n fallbackRouteParams?: Record<string, any>\n}>()\n\n// Read once: the page keys this view on `${system}/${type}/${id}`, so a change remounts it.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { log, detailLoading, fetchData, cancel } = useLogDetailActions({\n client: props.client,\n system: props.system,\n logPaths: props.logPaths,\n type: props.type,\n})\n\n// No `loading`: the view has no buttons to hide.\n// With it, a page without a fallback would keep the card loading forever in a fresh tab.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst { leave } = useRecordPage({\n fallbackRouteName: props.fallbackRouteName,\n fallbackRouteParams: props.fallbackRouteParams,\n})\n\nonMounted(async () => {\n if ((await fetchData(props.id)) === false) await leave()\n})\n\nonBeforeUnmount(() => {\n cancel()\n})\n</script>\n\n<template>\n <ACard :loading=\"detailLoading\">\n <VCardText>\n <ALogDetail\n v-if=\"!isNull(log)\"\n :log=\"log\"\n />\n </VCardText>\n </ACard>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;EAWA,IAAMW,IAAQC,GAcR,EAAE,QAAK,kBAAe,cAAW,cAAWC,EAAoB;GACpE,QAAQF,EAAM;GACd,QAAQA,EAAM;GACd,UAAUA,EAAM;GAChB,MAAMA,EAAM;EACd,CAAC,GAKK,EAAE,aAAUG,EAAc;GAC9B,mBAAmBH,EAAM;GACzB,qBAAqBA,EAAM;EAC7B,CAAC;E,OAEDI,EAAU,YAAY;GACpB,AAAK,MAAMC,EAAUL,EAAM,EAAE,MAAO,MAAO,MAAMM,EAAM;EACzD,CAAC,GAEDC,QAAsB;GACpB,EAAO;EACT,CAAC,I,UAIClB,EAAA,GAAAC,EAOQC,GAAA,EAPA,SAASC,EAAAmB,CAAA,EAAa,GAAA;GAC5B,SAAAlB,QAKY,CALZC,EAKYC,GAAA,MAAA;IAJV,SAAAF,QAGE,CAFOD,EAAAuB,CAAA,CAAM,CAACvB,EAAAwB,CAAA,CAAG,I,aADnB3B,EAAA,GAAAC,EAGEM,GAAA;;KADC,KAAKJ,EAAAwB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ALogFilter.js","names":["_sfc_main","ALogFilter_vue_vue_type_script_setup_true_lang_default","ALogFilter_default"],"sources":["../../../../src/domains/log/components/ALogFilter.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport AFilterString from '@/domains/filters/components/AFilterString.vue'\nimport AFilterTimeInterval from '@/domains/filters/components/AFilterTimeInterval.vue'\nimport AFilterValueObjectOptionsSelect from '@/domains/filters/components/AFilterValueObjectOptionsSelect.vue'\nimport AFilterWrapper from '@/domains/filters/components/AFilterWrapper.vue'\nimport type { TimeIntervalToolsValue } from '@/domains/filters/composables/filterTimeIntervalTools'\nimport { type LogTypeType, useLogType } from '@/domains/log/composables/logType'\nimport { useLogLevel } from '@/domains/log/valueObject/LogLevel'\n\ndefineProps<{\n type: LogTypeType\n allowedTimeIntervals?: TimeIntervalToolsValue[] | undefined\n}>()\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'reset'): void\n (e: 'changeType', type: LogTypeType): void\n}>()\n\nconst { t } = useI18n()\nconst { logLevelOptions } = useLogLevel()\nconst { logTypeOptions } = useLogType()\n</script>\n\n<template>\n <AFilterWrapper\n enable-top\n @submit=\"emit('submit')\"\n @reset=\"emit('reset')\"\n >\n <template #top>\n <VRow class=\"align-start\">\n <VCol\n class=\"pb-0\"\n cols=\"12\"\n sm=\"4\"\n >\n <!--\n A plain select, not `AFilterValueObjectOptionsSelect`. That one throws\n unless the name is a live filter field, and the type is not one.\n The type picks the endpoint and lives in the route, so it survives a filter reset.\n -->\n <VSelect\n :model-value=\"type\"\n :items=\"logTypeOptions\"\n :label=\"t('common.log.filter.type')\"\n item-title=\"title\"\n item-value=\"value\"\n density=\"compact\"\n variant=\"outlined\"\n hide-details\n data-cy=\"filter-log-type\"\n @update:model-value=\"emit('changeType', $event)\"\n />\n </VCol>\n </VRow>\n <VDivider class=\"mb-4 mt-4\" />\n </template>\n <template #search>\n <AFilterString\n name=\"contextId\"\n class=\"mr-2\"\n />\n <AFilterString\n name=\"message\"\n class=\"mr-2\"\n />\n <AFilterTimeInterval\n name-from=\"datetimeFrom\"\n name-until=\"datetimeTo\"\n :allowed=\"allowedTimeIntervals\"\n />\n </template>\n <template #item.levelName>\n <AFilterValueObjectOptionsSelect\n name=\"levelName\"\n :items=\"logLevelOptions\"\n />\n </template>\n </AFilterWrapper>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"ALogFilter.js","names":["ALogFilter_vue_vue_type_script_setup_true_lang_default","ALogFilter_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"ALogLevelChip.js","names":["_sfc_main","ALogLevelChip_vue_vue_type_script_setup_true_lang_default","ALogLevelChip_default"],"sources":["../../../../src/domains/log/components/ALogLevelChip.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport AChipNoLink from '@/domains/ui/components/AChipNoLink.vue'\nimport { type LogLevelType, useLogLevel } from '@/domains/log/valueObject/LogLevel'\n\nconst props = withDefaults(\n defineProps<{\n level: LogLevelType\n }>(),\n {}\n)\n\nconst { getLogLevelOption } = useLogLevel()\nconst levelOption = computed(() => {\n return getLogLevelOption(props.level)\n})\n</script>\n\n<template>\n <AChipNoLink\n v-if=\"levelOption\"\n :color=\"levelOption.color\"\n >\n {{ levelOption.title }}\n </AChipNoLink>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"ALogLevelChip.js","names":["ALogLevelChip_vue_vue_type_script_setup_true_lang_default","ALogLevelChip_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"ALogLevelChip.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","AChipNoLink","_withCtx","_createTextVNode","_toDisplayString","_createCommentVNode","AChipNoLink_default","ALogLevelChip_vue_vue_type_script_setup_true_lang_default","props","__props","useLogLevel","levelOption","computed","getLogLevelOption","openBlock","createBlock","withCtx","createTextVNode","toDisplayString","createCommentVNode"],"sources":["../../../../src/domains/log/components/ALogLevelChip.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport AChipNoLink from '@/domains/ui/components/AChipNoLink.vue'\nimport { type LogLevelType, useLogLevel } from '@/domains/log/valueObject/LogLevel'\n\nconst props = withDefaults(\n defineProps<{\n level: LogLevelType\n }>(),\n {}\n)\n\nconst { getLogLevelOption } = useLogLevel()\nconst levelOption = computed(() => {\n return getLogLevelOption(props.level)\n})\n</script>\n\n<template>\n <AChipNoLink\n v-if=\"levelOption\"\n :color=\"levelOption.color\"\n >\n {{ levelOption.title }}\n </AChipNoLink>\n</template>\n"],"mappings":";;;;;;;;EAKA,IAAMS,IAAQC,GAOR,EAAE,yBAAsBC,EAAY,GACpCC,IAAcC,QACXC,EAAkBL,EAAM,KAAK,CACrC;E,iBAKSG,EAAA,SADRZ,EAAA,GAAAC,EAKcC,GAAA;;GAHX,OAAOU,EAAA,MAAY;;GAEpB,SAAAT,QAAuB,CAApBC,EAAAC,EAAAO,EAAA,MAAY,KAAK,GAAA,CAAA,C"}
1
+ {"version":3,"file":"ALogLevelChip.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","AChipNoLink","_withCtx","_createTextVNode","_toDisplayString","AChipNoLink_default","ALogLevelChip_vue_vue_type_script_setup_true_lang_default","props","__props","useLogLevel","levelOption","computed","getLogLevelOption","openBlock","createBlock","withCtx","createTextVNode","toDisplayString","createCommentVNode"],"sources":["../../../../src/domains/log/components/ALogLevelChip.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport AChipNoLink from '@/domains/ui/components/AChipNoLink.vue'\nimport { type LogLevelType, useLogLevel } from '@/domains/log/valueObject/LogLevel'\n\nconst props = withDefaults(\n defineProps<{\n level: LogLevelType\n }>(),\n {}\n)\n\nconst { getLogLevelOption } = useLogLevel()\nconst levelOption = computed(() => {\n return getLogLevelOption(props.level)\n})\n</script>\n\n<template>\n <AChipNoLink\n v-if=\"levelOption\"\n :color=\"levelOption.color\"\n >\n {{ levelOption.title }}\n </AChipNoLink>\n</template>\n"],"mappings":";;;;;;;;EAKA,IAAMQ,IAAQC,GAOR,EAAE,yBAAsBC,EAAY,GACpCC,IAAcC,QACXC,EAAkBL,EAAM,KAAK,CACrC;E,iBAKSG,EAAA,SADRX,EAAA,GAAAC,EAKcC,GAAA;;GAHX,OAAOS,EAAA,MAAY;;GAEpB,SAAAR,QAAuB,CAApBC,EAAAC,EAAAM,EAAA,MAAY,KAAK,GAAA,CAAA,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"ALogListView.js","names":["_sfc_main","ALogListView_vue_vue_type_script_setup_true_lang_default","ALogListView_default"],"sources":["../../../../src/domains/log/components/ALogListView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { provide, ref, useTemplateRef } from 'vue'\nimport type { RouteLocationRaw } from 'vue-router'\nimport { useRouter } from 'vue-router'\nimport ACard from '@/domains/ui/components/ACard.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { FilterConfigKey, FilterDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport type { TimeIntervalToolsValue } from '@/domains/filters/composables/filterTimeIntervalTools'\nimport ALogDatatable from '@/domains/log/components/ALogDatatable.vue'\nimport ALogFilter from '@/domains/log/components/ALogFilter.vue'\nimport { applyLogTypeVisibility, type LogTimeWindow, useLogFilter } from '@/domains/log/filter/logFilter'\nimport type { LogPaths, LogTypeType } from '@/domains/log/composables/logType'\nimport type { Log } from '@/domains/log/types/Log'\n\nconst props = defineProps<{\n /** Which backend to ask. */\n client: AxiosClientFn\n /** Identity for api naming and error reporting. `coreDam`, not `dam`, where they differ. */\n system: string\n /** From the route, never component state: it picks the endpoint and has to survive a filter reset. */\n type: LogTypeType\n /** Whole paths per type. Comes from the route-side descriptor, which the guard reads too. */\n logPaths: LogPaths\n /** Where a row goes. The library cannot know an app's typed route names, so the app maps it. */\n detailRoute: (log: Log) => RouteLocationRaw\n /** Where the app/audit dropdown goes. Same reason. */\n typeRoute: (type: LogTypeType) => RouteLocationRaw\n /** Mandatory time bound, as admin-dam has today. Omitted means no bound at all. */\n defaultTimeWindow?: LogTimeWindow | undefined\n /** `allowed` for the interval filter. Omitted means the library's full preset list. */\n allowedTimeIntervals?: TimeIntervalToolsValue[] | undefined\n}>()\n\nconst router = useRouter()\n\n// Read once: keyed remount, as in the datatable below.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst filter = useLogFilter(props.system, props.defaultTimeWindow)\n// Every mount, not only on a type change: the registry returns the config the last visit left,\n// so the flags still describe that visit's type. See `applyLogTypeVisibility`.\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\napplyLogTypeVisibility(filter, props.type)\n\nprovide(FilterConfigKey, filter.filterConfig)\nprovide(FilterDataKey, filter.filterData)\n\nconst datatable = useTemplateRef<InstanceType<typeof ALogDatatable>>('datatable')\nconst listLoading = ref(false)\n\nconst onRowClick = (log: Log) => {\n router.push(props.detailRoute(log))\n}\n\nconst onChangeType = (type: LogTypeType) => {\n if (type === props.type) return\n router.replace(props.typeRoute(type))\n}\n</script>\n\n<template>\n <ACard :loading=\"listLoading\">\n <VCardText>\n <ALogFilter\n :type=\"type\"\n :allowed-time-intervals=\"allowedTimeIntervals\"\n @submit=\"datatable?.submitFilter()\"\n @reset=\"datatable?.resetFilter()\"\n @change-type=\"onChangeType\"\n />\n <ALogDatatable\n ref=\"datatable\"\n v-model:loading=\"listLoading\"\n :client=\"client\"\n :system=\"system\"\n :type=\"type\"\n :log-paths=\"logPaths\"\n :detail-route=\"detailRoute\"\n @row-click=\"onRowClick\"\n />\n </VCardText>\n </ACard>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"ALogListView.js","names":["ALogListView_vue_vue_type_script_setup_true_lang_default","ALogListView_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"APermissionEditor.js","names":["_sfc_main","APermissionEditor_vue_vue_type_script_setup_true_lang_default","APermissionEditor_default"],"sources":["../../../../src/domains/permission/components/APermissionEditor.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport { ROLE_SUPER_ADMIN } from '@/domains/auth/composables/defineAuth'\nimport APermissionGrantEditor from '@/domains/permission/components/APermissionGrantEditor.vue'\nimport APermissionValueChip from '@/domains/permission/components/APermissionValueChip.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { usePermissionConfigActions } from '@/domains/permission/config/composables/permissionConfigActions'\nimport { Grant, type GrantType } from '@/domains/auth/valueObject/Grant'\nimport { GrantOrigin, GrantOriginDefault } from '@/domains/permission/valueObject/GrantOrigin'\nimport type { Permissions } from '@/domains/auth/types/Permission'\nimport { cloneDeep, isUndefined } from '@/shared/utils/common'\nimport { objectDeletePropertyByPath, objectGetValueByPath, objectSetValueByPath } from '@/shared/utils/object'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n /** Which backend's permission vocabulary to draw. Never a global, see `permissionConfigActions`. */\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n /**\n * Grants the subject already has from roles and groups.\n * Undefined means the model is a group, not a user. The origin\n * column then attributes every explicit grant to the group itself.\n */\n resolvedPermissions?: Permissions | undefined\n roles?: string[]\n /** One component for detail and edit (decision 27). Readonly drops the grant column. */\n readonly?: boolean\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n resolvedPermissions: undefined,\n roles: () => [],\n readonly: false,\n }\n)\n\nconst modelValue = defineModel<Permissions>({ required: true })\n\nconst { t } = useI18n()\nconst { showWarning } = useAlerts()\n\n// A clone, because every mutation writes a whole object back through `modelValue`.\n// Editing in place would not trigger the parent's unsaved-changes watchers.\nconst permissions = computed(() => cloneDeep(modelValue.value))\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { permissionConfig, loadingPermissionConfig, isPermissionConfigInitialized, translatePermission } =\n 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 changeGrant = (subject: string, action: string, grant?: GrantType) => {\n const permissionName = subject + '_' + action\n if (isUndefined(grant) && Object.hasOwn(permissions.value, permissionName)) {\n objectDeletePropertyByPath(permissions.value, permissionName)\n modelValue.value = permissions.value\n return\n }\n objectSetValueByPath(permissions.value, permissionName, grant)\n modelValue.value = permissions.value\n}\n\nconst getSelectedGrant = (subject: string, action: string) => {\n return objectGetValueByPath(permissions.value, subject + '_' + action)\n}\n\nconst getAvailableGrants = (subject: string, action: string): GrantType[] => {\n const grants = objectGetValueByPath(permissionConfig.value.config, subject + '.' + action + '.grants')\n if (isUndefined(grants)) {\n return permissionConfig.value.defaultGrants\n }\n return grants\n}\n\nconst RESTRICTIVE_GRANTS: GrantType[] = [Grant.Deny, Grant.AllowOwner]\n\nconst isExplicitRestrictiveGrant = (subject: string, action: string) => {\n const permissionName = subject + '_' + action\n if (!Object.hasOwn(permissions.value, permissionName)) return false\n return RESTRICTIVE_GRANTS.includes(getSelectedGrant(subject, action))\n}\n\n/**\n * Allows every action in the subject, except actions explicitly set to deny or owner-only.\n * Those are left alone and their count is reported, so the button never widens a deliberate restriction.\n */\nconst allowAllActions = (subject: string) => {\n let keptRestrictiveGrantCount = 0\n for (const action of Object.keys(permissionConfig.value.config[subject]!)) {\n if (!getAvailableGrants(subject, action).includes(Grant.Allow)) continue\n if (isExplicitRestrictiveGrant(subject, action)) {\n keptRestrictiveGrantCount++\n continue\n }\n objectSetValueByPath(permissions.value, subject + '_' + action, Grant.Allow)\n }\n modelValue.value = permissions.value\n if (keptRestrictiveGrantCount > 0) {\n showWarning(\n t('common.permissionEditor.restrictiveGrantKept', { count: keptRestrictiveGrantCount }, keptRestrictiveGrantCount)\n )\n }\n}\n\nconst hasSuperAdminRole = computed(() => props.roles.includes(ROLE_SUPER_ADMIN))\n\nconst getResolvedGrant = (subject: string, action: string) => {\n if (hasSuperAdminRole.value) return Grant.Allow\n const permissionName = subject + '_' + action\n if (props.resolvedPermissions && Object.hasOwn(props.resolvedPermissions, permissionName)) {\n return objectGetValueByPath(props.resolvedPermissions, permissionName)\n }\n if (Object.hasOwn(permissions.value, permissionName)) {\n return objectGetValueByPath(permissions.value, permissionName)\n }\n return Grant.Deny\n}\n\nconst getGrantOrigin = (subject: string, action: string) => {\n if (hasSuperAdminRole.value) return GrantOrigin.Role\n const permissionName = subject + '_' + action\n if (isUndefined(props.resolvedPermissions)) {\n if (Object.hasOwn(permissions.value, permissionName)) return GrantOrigin.Group\n return GrantOriginDefault\n }\n if (Object.hasOwn(permissions.value, permissionName)) return GrantOrigin.User\n if (Object.hasOwn(props.resolvedPermissions, permissionName)) return GrantOrigin.Group\n return GrantOriginDefault\n}\n</script>\n\n<template>\n <VCard :loading=\"loadingPermissionConfig\">\n <VCardText>\n <VTable v-if=\"isPermissionConfigInitialized\">\n <thead>\n <tr>\n <th>{{ t('common.anzuUser.table.grants') }}</th>\n <th v-if=\"!readonly\">\n {{ t('common.anzuUser.table.permissions') }}\n </th>\n <th>{{ t('common.anzuUser.table.resolvedPermissions') }}</th>\n </tr>\n </thead>\n <tbody>\n <template\n v-for=\"permissionSubject in Object.keys(permissionConfig.config)\"\n :key=\"permissionSubject\"\n >\n <tr>\n <td\n :colspan=\"readonly ? 2 : 3\"\n class=\"text-headline-small font-weight-bold\"\n >\n {{ translatePermission('subjects', permissionSubject) }}\n <VBtn\n v-if=\"!readonly\"\n size=\"x-small\"\n variant=\"text\"\n class=\"ml-2\"\n :data-cy=\"`permission-allow-all-${permissionSubject}`\"\n @click=\"allowAllActions(permissionSubject)\"\n >\n {{ t('common.permissionEditor.allowAll') }}\n </VBtn>\n </td>\n </tr>\n <tr\n v-for=\"permissionAction in Object.keys(permissionConfig.config[permissionSubject]!)\"\n :key=\"permissionAction\"\n >\n <td>\n {{ translatePermission('actions', permissionAction) }}\n <div class=\"text-body-small text-disabled\">{{ permissionSubject }}_{{ permissionAction }}</div>\n </td>\n <td v-if=\"!readonly\">\n <APermissionGrantEditor\n :available-grants=\"getAvailableGrants(permissionSubject, permissionAction)\"\n :selected-grant=\"getSelectedGrant(permissionSubject, permissionAction)\"\n @change=\"changeGrant(permissionSubject, permissionAction, $event)\"\n />\n </td>\n <td>\n <APermissionValueChip\n :grant=\"getResolvedGrant(permissionSubject, permissionAction)\"\n :grant-origin=\"getGrantOrigin(permissionSubject, permissionAction)\"\n />\n </td>\n </tr>\n </template>\n </tbody>\n </VTable>\n </VCardText>\n </VCard>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"APermissionEditor.js","names":["APermissionEditor_vue_vue_type_script_setup_true_lang_default","APermissionEditor_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"APermissionEditor.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createBlock","_component_VCard","_unref","_withCtx","_createVNode","_component_VCardText","_component_VTable","_createElementVNode","_toDisplayString","_createElementBlock","_createCommentVNode","_Fragment","_renderList","_createTextVNode","_component_VBtn","APermissionGrantEditor","APermissionValueChip","APermissionGrantEditor_default","APermissionValueChip_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","APermissionEditor_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","props","__props","modelValue","useModel","useI18n","useAlerts","permissions","computed","cloneDeep","usePermissionConfigActions","changeGrant","permissionName","subject","action","isUndefined","grant","objectDeletePropertyByPath","objectSetValueByPath","getSelectedGrant","objectGetValueByPath","getAvailableGrants","grants","permissionConfig","RESTRICTIVE_GRANTS","Grant","isExplicitRestrictiveGrant","allowAllActions","keptRestrictiveGrantCount","showWarning","t","hasSuperAdminRole","ROLE_SUPER_ADMIN","getResolvedGrant","getGrantOrigin","GrantOrigin","GrantOriginDefault","openBlock","createBlock","VCard","unref","loadingPermissionConfig","withCtx","createVNode","VCardText","isPermissionConfigInitialized","VTable","createElementVNode","toDisplayString","createCommentVNode","createElementBlock","Fragment","renderList","permissionSubject","createTextVNode","translatePermission","VBtn","permissionAction","$event"],"sources":["../../../../src/domains/permission/components/APermissionEditor.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport { ROLE_SUPER_ADMIN } from '@/domains/auth/composables/defineAuth'\nimport APermissionGrantEditor from '@/domains/permission/components/APermissionGrantEditor.vue'\nimport APermissionValueChip from '@/domains/permission/components/APermissionValueChip.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { usePermissionConfigActions } from '@/domains/permission/config/composables/permissionConfigActions'\nimport { Grant, type GrantType } from '@/domains/auth/valueObject/Grant'\nimport { GrantOrigin, GrantOriginDefault } from '@/domains/permission/valueObject/GrantOrigin'\nimport type { Permissions } from '@/domains/auth/types/Permission'\nimport { cloneDeep, isUndefined } from '@/shared/utils/common'\nimport { objectDeletePropertyByPath, objectGetValueByPath, objectSetValueByPath } from '@/shared/utils/object'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n /** Which backend's permission vocabulary to draw. Never a global, see `permissionConfigActions`. */\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n /**\n * Grants the subject already has from roles and groups.\n * Undefined means the model is a group, not a user. The origin\n * column then attributes every explicit grant to the group itself.\n */\n resolvedPermissions?: Permissions | undefined\n roles?: string[]\n /** One component for detail and edit (decision 27). Readonly drops the grant column. */\n readonly?: boolean\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n resolvedPermissions: undefined,\n roles: () => [],\n readonly: false,\n }\n)\n\nconst modelValue = defineModel<Permissions>({ required: true })\n\nconst { t } = useI18n()\nconst { showWarning } = useAlerts()\n\n// A clone, because every mutation writes a whole object back through `modelValue`.\n// Editing in place would not trigger the parent's unsaved-changes watchers.\nconst permissions = computed(() => cloneDeep(modelValue.value))\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { permissionConfig, loadingPermissionConfig, isPermissionConfigInitialized, translatePermission } =\n 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 changeGrant = (subject: string, action: string, grant?: GrantType) => {\n const permissionName = subject + '_' + action\n if (isUndefined(grant) && Object.hasOwn(permissions.value, permissionName)) {\n objectDeletePropertyByPath(permissions.value, permissionName)\n modelValue.value = permissions.value\n return\n }\n objectSetValueByPath(permissions.value, permissionName, grant)\n modelValue.value = permissions.value\n}\n\nconst getSelectedGrant = (subject: string, action: string) => {\n return objectGetValueByPath(permissions.value, subject + '_' + action)\n}\n\nconst getAvailableGrants = (subject: string, action: string): GrantType[] => {\n const grants = objectGetValueByPath(permissionConfig.value.config, subject + '.' + action + '.grants')\n if (isUndefined(grants)) {\n return permissionConfig.value.defaultGrants\n }\n return grants\n}\n\nconst RESTRICTIVE_GRANTS: GrantType[] = [Grant.Deny, Grant.AllowOwner]\n\nconst isExplicitRestrictiveGrant = (subject: string, action: string) => {\n const permissionName = subject + '_' + action\n if (!Object.hasOwn(permissions.value, permissionName)) return false\n return RESTRICTIVE_GRANTS.includes(getSelectedGrant(subject, action))\n}\n\n/**\n * Allows every action in the subject, except actions explicitly set to deny or owner-only.\n * Those are left alone and their count is reported, so the button never widens a deliberate restriction.\n */\nconst allowAllActions = (subject: string) => {\n let keptRestrictiveGrantCount = 0\n for (const action of Object.keys(permissionConfig.value.config[subject]!)) {\n if (!getAvailableGrants(subject, action).includes(Grant.Allow)) continue\n if (isExplicitRestrictiveGrant(subject, action)) {\n keptRestrictiveGrantCount++\n continue\n }\n objectSetValueByPath(permissions.value, subject + '_' + action, Grant.Allow)\n }\n modelValue.value = permissions.value\n if (keptRestrictiveGrantCount > 0) {\n showWarning(\n t('common.permissionEditor.restrictiveGrantKept', { count: keptRestrictiveGrantCount }, keptRestrictiveGrantCount)\n )\n }\n}\n\nconst hasSuperAdminRole = computed(() => props.roles.includes(ROLE_SUPER_ADMIN))\n\nconst getResolvedGrant = (subject: string, action: string) => {\n if (hasSuperAdminRole.value) return Grant.Allow\n const permissionName = subject + '_' + action\n if (props.resolvedPermissions && Object.hasOwn(props.resolvedPermissions, permissionName)) {\n return objectGetValueByPath(props.resolvedPermissions, permissionName)\n }\n if (Object.hasOwn(permissions.value, permissionName)) {\n return objectGetValueByPath(permissions.value, permissionName)\n }\n return Grant.Deny\n}\n\nconst getGrantOrigin = (subject: string, action: string) => {\n if (hasSuperAdminRole.value) return GrantOrigin.Role\n const permissionName = subject + '_' + action\n if (isUndefined(props.resolvedPermissions)) {\n if (Object.hasOwn(permissions.value, permissionName)) return GrantOrigin.Group\n return GrantOriginDefault\n }\n if (Object.hasOwn(permissions.value, permissionName)) return GrantOrigin.User\n if (Object.hasOwn(props.resolvedPermissions, permissionName)) return GrantOrigin.Group\n return GrantOriginDefault\n}\n</script>\n\n<template>\n <VCard :loading=\"loadingPermissionConfig\">\n <VCardText>\n <VTable v-if=\"isPermissionConfigInitialized\">\n <thead>\n <tr>\n <th>{{ t('common.anzuUser.table.grants') }}</th>\n <th v-if=\"!readonly\">\n {{ t('common.anzuUser.table.permissions') }}\n </th>\n <th>{{ t('common.anzuUser.table.resolvedPermissions') }}</th>\n </tr>\n </thead>\n <tbody>\n <template\n v-for=\"permissionSubject in Object.keys(permissionConfig.config)\"\n :key=\"permissionSubject\"\n >\n <tr>\n <td\n :colspan=\"readonly ? 2 : 3\"\n class=\"text-headline-small font-weight-bold\"\n >\n {{ translatePermission('subjects', permissionSubject) }}\n <VBtn\n v-if=\"!readonly\"\n size=\"x-small\"\n variant=\"text\"\n class=\"ml-2\"\n :data-cy=\"`permission-allow-all-${permissionSubject}`\"\n @click=\"allowAllActions(permissionSubject)\"\n >\n {{ t('common.permissionEditor.allowAll') }}\n </VBtn>\n </td>\n </tr>\n <tr\n v-for=\"permissionAction in Object.keys(permissionConfig.config[permissionSubject]!)\"\n :key=\"permissionAction\"\n >\n <td>\n {{ translatePermission('actions', permissionAction) }}\n <div class=\"text-body-small text-disabled\">{{ permissionSubject }}_{{ permissionAction }}</div>\n </td>\n <td v-if=\"!readonly\">\n <APermissionGrantEditor\n :available-grants=\"getAvailableGrants(permissionSubject, permissionAction)\"\n :selected-grant=\"getSelectedGrant(permissionSubject, permissionAction)\"\n @change=\"changeGrant(permissionSubject, permissionAction, $event)\"\n />\n </td>\n <td>\n <APermissionValueChip\n :grant=\"getResolvedGrant(permissionSubject, permissionAction)\"\n :grant-origin=\"getGrantOrigin(permissionSubject, permissionAction)\"\n />\n </td>\n </tr>\n </template>\n </tbody>\n </VTable>\n </VCardText>\n </VCard>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"APermissionEditor.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createBlock","_component_VCard","_unref","_withCtx","_createVNode","_component_VCardText","_component_VTable","_createElementVNode","_toDisplayString","_createElementBlock","_Fragment","_renderList","_createTextVNode","_component_VBtn","APermissionGrantEditor","APermissionValueChip","APermissionGrantEditor_default","APermissionValueChip_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","APermissionEditor_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","props","__props","modelValue","useModel","useI18n","useAlerts","permissions","computed","cloneDeep","usePermissionConfigActions","changeGrant","permissionName","subject","action","isUndefined","grant","objectDeletePropertyByPath","objectSetValueByPath","getSelectedGrant","objectGetValueByPath","getAvailableGrants","grants","permissionConfig","RESTRICTIVE_GRANTS","Grant","isExplicitRestrictiveGrant","allowAllActions","keptRestrictiveGrantCount","showWarning","t","hasSuperAdminRole","ROLE_SUPER_ADMIN","getResolvedGrant","getGrantOrigin","GrantOrigin","GrantOriginDefault","openBlock","createBlock","VCard","unref","loadingPermissionConfig","withCtx","createVNode","VCardText","isPermissionConfigInitialized","VTable","createElementVNode","toDisplayString","createCommentVNode","createElementBlock","Fragment","renderList","permissionSubject","createTextVNode","translatePermission","VBtn","permissionAction","$event"],"sources":["../../../../src/domains/permission/components/APermissionEditor.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { useAlerts } from '@/domains/system/composables/alerts'\nimport { ROLE_SUPER_ADMIN } from '@/domains/auth/composables/defineAuth'\nimport APermissionGrantEditor from '@/domains/permission/components/APermissionGrantEditor.vue'\nimport APermissionValueChip from '@/domains/permission/components/APermissionValueChip.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport { usePermissionConfigActions } from '@/domains/permission/config/composables/permissionConfigActions'\nimport { Grant, type GrantType } from '@/domains/auth/valueObject/Grant'\nimport { GrantOrigin, GrantOriginDefault } from '@/domains/permission/valueObject/GrantOrigin'\nimport type { Permissions } from '@/domains/auth/types/Permission'\nimport { cloneDeep, isUndefined } from '@/shared/utils/common'\nimport { objectDeletePropertyByPath, objectGetValueByPath, objectSetValueByPath } from '@/shared/utils/object'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n /** Which backend's permission vocabulary to draw. Never a global, see `permissionConfigActions`. */\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n /**\n * Grants the subject already has from roles and groups.\n * Undefined means the model is a group, not a user. The origin\n * column then attributes every explicit grant to the group itself.\n */\n resolvedPermissions?: Permissions | undefined\n roles?: string[]\n /** One component for detail and edit (decision 27). Readonly drops the grant column. */\n readonly?: boolean\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n resolvedPermissions: undefined,\n roles: () => [],\n readonly: false,\n }\n)\n\nconst modelValue = defineModel<Permissions>({ required: true })\n\nconst { t } = useI18n()\nconst { showWarning } = useAlerts()\n\n// A clone, because every mutation writes a whole object back through `modelValue`.\n// Editing in place would not trigger the parent's unsaved-changes watchers.\nconst permissions = computed(() => cloneDeep(modelValue.value))\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { permissionConfig, loadingPermissionConfig, isPermissionConfigInitialized, translatePermission } =\n 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 changeGrant = (subject: string, action: string, grant?: GrantType) => {\n const permissionName = subject + '_' + action\n if (isUndefined(grant) && Object.hasOwn(permissions.value, permissionName)) {\n objectDeletePropertyByPath(permissions.value, permissionName)\n modelValue.value = permissions.value\n return\n }\n objectSetValueByPath(permissions.value, permissionName, grant)\n modelValue.value = permissions.value\n}\n\nconst getSelectedGrant = (subject: string, action: string) => {\n return objectGetValueByPath(permissions.value, subject + '_' + action)\n}\n\nconst getAvailableGrants = (subject: string, action: string): GrantType[] => {\n const grants = objectGetValueByPath(permissionConfig.value.config, subject + '.' + action + '.grants')\n if (isUndefined(grants)) {\n return permissionConfig.value.defaultGrants\n }\n return grants\n}\n\nconst RESTRICTIVE_GRANTS: GrantType[] = [Grant.Deny, Grant.AllowOwner]\n\nconst isExplicitRestrictiveGrant = (subject: string, action: string) => {\n const permissionName = subject + '_' + action\n if (!Object.hasOwn(permissions.value, permissionName)) return false\n return RESTRICTIVE_GRANTS.includes(getSelectedGrant(subject, action))\n}\n\n/**\n * Allows every action in the subject, except actions explicitly set to deny or owner-only.\n * Those are left alone and their count is reported, so the button never widens a deliberate restriction.\n */\nconst allowAllActions = (subject: string) => {\n let keptRestrictiveGrantCount = 0\n for (const action of Object.keys(permissionConfig.value.config[subject]!)) {\n if (!getAvailableGrants(subject, action).includes(Grant.Allow)) continue\n if (isExplicitRestrictiveGrant(subject, action)) {\n keptRestrictiveGrantCount++\n continue\n }\n objectSetValueByPath(permissions.value, subject + '_' + action, Grant.Allow)\n }\n modelValue.value = permissions.value\n if (keptRestrictiveGrantCount > 0) {\n showWarning(\n t('common.permissionEditor.restrictiveGrantKept', { count: keptRestrictiveGrantCount }, keptRestrictiveGrantCount)\n )\n }\n}\n\nconst hasSuperAdminRole = computed(() => props.roles.includes(ROLE_SUPER_ADMIN))\n\nconst getResolvedGrant = (subject: string, action: string) => {\n if (hasSuperAdminRole.value) return Grant.Allow\n const permissionName = subject + '_' + action\n if (props.resolvedPermissions && Object.hasOwn(props.resolvedPermissions, permissionName)) {\n return objectGetValueByPath(props.resolvedPermissions, permissionName)\n }\n if (Object.hasOwn(permissions.value, permissionName)) {\n return objectGetValueByPath(permissions.value, permissionName)\n }\n return Grant.Deny\n}\n\nconst getGrantOrigin = (subject: string, action: string) => {\n if (hasSuperAdminRole.value) return GrantOrigin.Role\n const permissionName = subject + '_' + action\n if (isUndefined(props.resolvedPermissions)) {\n if (Object.hasOwn(permissions.value, permissionName)) return GrantOrigin.Group\n return GrantOriginDefault\n }\n if (Object.hasOwn(permissions.value, permissionName)) return GrantOrigin.User\n if (Object.hasOwn(props.resolvedPermissions, permissionName)) return GrantOrigin.Group\n return GrantOriginDefault\n}\n</script>\n\n<template>\n <VCard :loading=\"loadingPermissionConfig\">\n <VCardText>\n <VTable v-if=\"isPermissionConfigInitialized\">\n <thead>\n <tr>\n <th>{{ t('common.anzuUser.table.grants') }}</th>\n <th v-if=\"!readonly\">\n {{ t('common.anzuUser.table.permissions') }}\n </th>\n <th>{{ t('common.anzuUser.table.resolvedPermissions') }}</th>\n </tr>\n </thead>\n <tbody>\n <template\n v-for=\"permissionSubject in Object.keys(permissionConfig.config)\"\n :key=\"permissionSubject\"\n >\n <tr>\n <td\n :colspan=\"readonly ? 2 : 3\"\n class=\"text-headline-small font-weight-bold\"\n >\n {{ translatePermission('subjects', permissionSubject) }}\n <VBtn\n v-if=\"!readonly\"\n size=\"x-small\"\n variant=\"text\"\n class=\"ml-2\"\n :data-cy=\"`permission-allow-all-${permissionSubject}`\"\n @click=\"allowAllActions(permissionSubject)\"\n >\n {{ t('common.permissionEditor.allowAll') }}\n </VBtn>\n </td>\n </tr>\n <tr\n v-for=\"permissionAction in Object.keys(permissionConfig.config[permissionSubject]!)\"\n :key=\"permissionAction\"\n >\n <td>\n {{ translatePermission('actions', permissionAction) }}\n <div class=\"text-body-small text-disabled\">{{ permissionSubject }}_{{ permissionAction }}</div>\n </td>\n <td v-if=\"!readonly\">\n <APermissionGrantEditor\n :available-grants=\"getAvailableGrants(permissionSubject, permissionAction)\"\n :selected-grant=\"getSelectedGrant(permissionSubject, permissionAction)\"\n @change=\"changeGrant(permissionSubject, permissionAction, $event)\"\n />\n </td>\n <td>\n <APermissionValueChip\n :grant=\"getResolvedGrant(permissionSubject, permissionAction)\"\n :grant-origin=\"getGrantOrigin(permissionSubject, permissionAction)\"\n />\n </td>\n </tr>\n </template>\n </tbody>\n </VTable>\n </VCardText>\n </VCard>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"APermissionGrantEditor.js","names":["_sfc_main","APermissionGrantEditor_vue_vue_type_script_setup_true_lang_default","APermissionGrantEditor_default"],"sources":["../../../../src/domains/permission/components/APermissionGrantEditor.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { type GrantType, useGrant } from '@/domains/auth/valueObject/Grant'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n availableGrants: GrantType[]\n selectedGrant: GrantType | undefined\n}>()\nconst emit = defineEmits<{\n (e: 'change', data?: GrantType): void\n}>()\nconst selectedGrant = computed({\n get() {\n return props.selectedGrant\n },\n set(newGrant) {\n emit('change', newGrant)\n },\n})\nconst { getGrantOption } = useGrant()\n</script>\n\n<template>\n <VBtnToggle\n v-model=\"selectedGrant\"\n divided\n density=\"compact\"\n variant=\"outlined\"\n class=\"text-disabled\"\n >\n <VBtn\n v-for=\"availableGrant in availableGrants\"\n :key=\"availableGrant\"\n :value=\"availableGrant\"\n :color=\"getGrantOption(availableGrant)?.color\"\n >\n {{ getGrantOption(availableGrant)?.title }}\n </VBtn>\n </VBtnToggle>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"APermissionGrantEditor.js","names":["APermissionGrantEditor_vue_vue_type_script_setup_true_lang_default","APermissionGrantEditor_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"APermissionValueChip.js","names":["_sfc_main","APermissionValueChip_vue_vue_type_script_setup_true_lang_default","APermissionValueChip_default"],"sources":["../../../../src/domains/permission/components/APermissionValueChip.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { type GrantType, useGrant } from '@/domains/auth/valueObject/Grant'\nimport { GrantOriginDefault, type GrantOriginType, useGrantOrigin } from '@/domains/permission/valueObject/GrantOrigin'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n grant: GrantType\n grantOrigin: GrantOriginType\n}>()\n\nconst { getGrantOption } = useGrant()\nconst grantOption = computed(() => getGrantOption(props.grant))\n\nconst { getGrantOriginOption } = useGrantOrigin()\nconst grantOriginOption = computed(() => getGrantOriginOption(props.grantOrigin))\n</script>\n\n<template>\n <VChip\n v-if=\"grantOption\"\n :color=\"grantOption.color\"\n close-label=\"common.button.remove\"\n label\n size=\"small\"\n >\n {{ grantOption.title }}\n <span\n v-if=\"grantOrigin !== GrantOriginDefault\"\n class=\"ml-1\"\n >({{ grantOriginOption?.title }})</span\n >\n </VChip>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"APermissionValueChip.js","names":["APermissionValueChip_vue_vue_type_script_setup_true_lang_default","APermissionValueChip_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"APermissionValueChip.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_component_VChip","_withCtx","_createTextVNode","_toDisplayString","_unref","_createElementBlock","_createCommentVNode","_hoisted_1","APermissionValueChip_vue_vue_type_script_setup_true_lang_default","props","__props","useGrant","grantOption","computed","getGrantOption","useGrantOrigin","grantOriginOption","getGrantOriginOption","openBlock","createBlock","VChip","withCtx","createTextVNode","toDisplayString","unref","GrantOriginDefault","createCommentVNode","createElementBlock"],"sources":["../../../../src/domains/permission/components/APermissionValueChip.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { type GrantType, useGrant } from '@/domains/auth/valueObject/Grant'\nimport { GrantOriginDefault, type GrantOriginType, useGrantOrigin } from '@/domains/permission/valueObject/GrantOrigin'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n grant: GrantType\n grantOrigin: GrantOriginType\n}>()\n\nconst { getGrantOption } = useGrant()\nconst grantOption = computed(() => getGrantOption(props.grant))\n\nconst { getGrantOriginOption } = useGrantOrigin()\nconst grantOriginOption = computed(() => getGrantOriginOption(props.grantOrigin))\n</script>\n\n<template>\n <VChip\n v-if=\"grantOption\"\n :color=\"grantOption.color\"\n close-label=\"common.button.remove\"\n label\n size=\"small\"\n >\n {{ grantOption.title }}\n <span\n v-if=\"grantOrigin !== GrantOriginDefault\"\n class=\"ml-1\"\n >({{ grantOriginOption?.title }})</span\n >\n </VChip>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;EAKA,IAAMW,IAAQC,GAKR,EAAE,sBAAmBC,EAAS,GAC9BC,IAAcC,QAAeC,EAAeL,EAAM,KAAK,CAAC,GAExD,EAAE,4BAAyBM,EAAe,GAC1CC,IAAoBH,QAAeI,EAAqBR,EAAM,WAAW,CAAC;E,iBAKtEG,EAAA,SADRd,EAAA,GAAAC,EAaQC,GAAA;;GAXL,OAAOY,EAAA,MAAY;GACpB,eAAY;GACZ,OAAA;GACA,MAAK;;GAEL,SAAAX,QAAuB,CAApBC,EAAAC,EAAAS,EAAA,MAAY,KAAK,IAAG,KACvB,CAAA,GACQF,EAAA,gBAAgBN,EAAAqB,CAAA,I,aADxB3B,EAAA,GAAAO,EAIC,QAJDE,GAGG,MAACJ,EAAGa,EAAA,OAAmB,KAAK,IAAG,KAAC,CAAA,E"}
1
+ {"version":3,"file":"APermissionValueChip.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_component_VChip","_withCtx","_createTextVNode","_toDisplayString","_unref","_createElementBlock","_hoisted_1","APermissionValueChip_vue_vue_type_script_setup_true_lang_default","props","__props","useGrant","grantOption","computed","getGrantOption","useGrantOrigin","grantOriginOption","getGrantOriginOption","openBlock","createBlock","VChip","withCtx","createTextVNode","toDisplayString","unref","GrantOriginDefault","createCommentVNode","createElementBlock"],"sources":["../../../../src/domains/permission/components/APermissionValueChip.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { type GrantType, useGrant } from '@/domains/auth/valueObject/Grant'\nimport { GrantOriginDefault, type GrantOriginType, useGrantOrigin } from '@/domains/permission/valueObject/GrantOrigin'\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n grant: GrantType\n grantOrigin: GrantOriginType\n}>()\n\nconst { getGrantOption } = useGrant()\nconst grantOption = computed(() => getGrantOption(props.grant))\n\nconst { getGrantOriginOption } = useGrantOrigin()\nconst grantOriginOption = computed(() => getGrantOriginOption(props.grantOrigin))\n</script>\n\n<template>\n <VChip\n v-if=\"grantOption\"\n :color=\"grantOption.color\"\n close-label=\"common.button.remove\"\n label\n size=\"small\"\n >\n {{ grantOption.title }}\n <span\n v-if=\"grantOrigin !== GrantOriginDefault\"\n class=\"ml-1\"\n >({{ grantOriginOption?.title }})</span\n >\n </VChip>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;EAKA,IAAMU,IAAQC,GAKR,EAAE,sBAAmBC,EAAS,GAC9BC,IAAcC,QAAeC,EAAeL,EAAM,KAAK,CAAC,GAExD,EAAE,4BAAyBM,EAAe,GAC1CC,IAAoBH,QAAeI,EAAqBR,EAAM,WAAW,CAAC;E,iBAKtEG,EAAA,SADRb,EAAA,GAAAC,EAaQC,GAAA;;GAXL,OAAOW,EAAA,MAAY;GACpB,eAAY;GACZ,OAAA;GACA,MAAK;;GAEL,SAAAV,QAAuB,CAApBC,EAAAC,EAAAQ,EAAA,MAAY,KAAK,IAAG,KACvB,CAAA,GACQF,EAAA,gBAAgBL,EAAAoB,CAAA,I,aADxB1B,EAAA,GAAAO,EAIC,QAJDC,GAGG,MAACH,EAAGY,EAAA,OAAmB,KAAK,IAAG,KAAC,CAAA,E"}
@@ -1 +1 @@
1
- {"version":3,"file":"APermissionGroupDatatable.js","names":["_sfc_main","APermissionGroupDatatable_vue_vue_type_script_setup_true_lang_default","APermissionGroupDatatable_default"],"sources":["../../../../../src/domains/permission/group/components/APermissionGroupDatatable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { onBeforeUnmount, onMounted, provide } from 'vue'\nimport type { RouteLocationRaw } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { useDebounceFn } from '@vueuse/core'\nimport ADatatableConfigButton from '@/domains/filters/datatable/components/ADatatableConfigButton.vue'\nimport ADatetime from '@/domains/ui/datetime/components/ADatetime.vue'\nimport ATableCopyIdButton from '@/domains/ui/buttons/table/components/ATableCopyIdButton.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport ADatatableOrdering from '@/domains/filters/datatable/components/ADatatableOrdering.vue'\nimport ADatatablePagination from '@/domains/filters/datatable/components/ADatatablePagination.vue'\nimport { createDatatableColumnsConfig } from '@/domains/filters/datatable/composables/createDatatableColumnsConfig'\nimport { useFilterHelpers } from '@/domains/filters/composables/filterFactory'\nimport { DatatablePaginationKey, FilterConfigKey, FilterDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport { usePagination } from '@/domains/api/composables/pagination'\nimport APermissionGroupFilter from '@/domains/permission/group/components/APermissionGroupFilter.vue'\nimport { usePermissionGroupActions } from '@/domains/permission/group/composables/permissionGroupActions'\nimport { PERMISSION_GROUP_ENTITY } from '@/domains/permission/group/api/permissionGroupApi'\nimport {\n permissionGroupFilterStorageKey,\n usePermissionGroupListFilter,\n} from '@/domains/permission/group/filter/permissionGroupFilter'\nimport { SORT_BY_ID } from '@/domains/filters/datatable/utils/datatableColumns'\nimport type { PermissionGroup } from '@/domains/permission/group/types/PermissionGroup'\n\ntype DatatableItem = PermissionGroup\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n /** Backend identity: keys the filter store and the cache, and reaches every api call. */\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n /** Where a row and the detail button go. The library cannot know an app's typed route names. */\n detailRoute: (permissionGroup: PermissionGroup) => RouteLocationRaw\n editRoute: (permissionGroup: PermissionGroup) => RouteLocationRaw\n /** Already-evaluated ACL, a boolean rather than an `AclValue`. */\n canUpdate?: boolean\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n canUpdate: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'rowClick', permissionGroup: PermissionGroup): void\n}>()\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { t } = useI18n()\nconst { filterConfig, filterData } = usePermissionGroupListFilter(props.system)\nprovide(FilterConfigKey, filterConfig)\nprovide(FilterDataKey, filterData)\n\nconst {\n fetchPermissionGroupList,\n cancelPermissionGroupList,\n permissionGroupList,\n loadingPermissionGroupList,\n datatableHiddenColumns,\n} = usePermissionGroupActions({\n client: props.client,\n system: props.system,\n entity: props.entity,\n endPoint: props.endPoint,\n})\n\nconst { resetFilter, submitFilter, loadStoredFilters } = useFilterHelpers(filterData, filterConfig, {\n storeFiltersLocalStorage: permissionGroupFilterStorageKey(props.system),\n})\n\nconst { pagination } = usePagination(SORT_BY_ID)\nprovide(DatatablePaginationKey, pagination)\n\nconst { columnsVisible, columnsAll, columnsHidden } = createDatatableColumnsConfig(\n [\n { key: 'id' },\n { key: 'title' },\n { key: 'description' },\n { key: 'permissions' },\n { key: 'createdAt' },\n { key: 'modifiedAt' },\n ],\n datatableHiddenColumns,\n 'common',\n PERMISSION_GROUP_ENTITY,\n { storeColumnsLocalStorage: `table_common_permissionGroup_${props.system}` }\n)\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\nconst getList = useDebounceFn(async () => {\n await fetchPermissionGroupList(pagination, filterData, filterConfig)\n})\n\n// Named here, not inline in the template: the template would pass the unwrapped value of the `pagination` ref.\nconst submitFilterAction = () => submitFilter(pagination, getList)\nconst resetFilterAction = () => resetFilter(pagination, getList)\n\nconst onRowClick = (_event: unknown, { item }: { item: DatatableItem }) => {\n if (item.id) emit('rowClick', item)\n}\n\nonMounted(() => {\n loadStoredFilters(pagination, getList)\n})\n\nonBeforeUnmount(() => {\n // Order matters: a pending debounce would otherwise fire after the abort and start a request\n // nothing is left to receive.\n getList.cancel()\n cancelPermissionGroupList()\n})\n\ndefineExpose({\n refresh: getList,\n resetFilter: resetFilterAction,\n submitFilter: submitFilterAction,\n})\n</script>\n\n<template>\n <div>\n <APermissionGroupFilter\n @submit=\"submitFilterAction\"\n @reset=\"resetFilterAction\"\n />\n <div>\n <div class=\"d-flex align-center\">\n <VSpacer />\n <ADatatableOrdering\n variant=\"id\"\n @sort-by-change=\"submitFilterAction\"\n />\n <ADatatableConfigButton\n v-model:columns-hidden=\"columnsHidden\"\n :columns-all=\"columnsAll\"\n />\n </div>\n <VDataTableServer\n class=\"a-datatable\"\n :headers=\"columnsVisible\"\n :items=\"permissionGroupList\"\n :items-length=\"permissionGroupList.length\"\n :loading=\"loadingPermissionGroupList\"\n item-value=\"id\"\n @click:row=\"onRowClick\"\n >\n <template #item.permissions=\"{ item }: { item: DatatableItem }\">\n <VChip>{{ Object.keys(item.permissions).length }}</VChip>\n </template>\n <template #item.createdAt=\"{ item }: { item: DatatableItem }\">\n <ADatetime :date-time=\"item.createdAt\" />\n <!--\n The user chip is per app: its cache, its route, its own `_system`.\n An app without one leaves the slot empty, and then no line break is rendered.\n -->\n <template v-if=\"$slots.createdBy\">\n <br />\n <slot\n :id=\"item.createdBy\"\n name=\"createdBy\"\n />\n </template>\n </template>\n <template #item.modifiedAt=\"{ item }: { item: DatatableItem }\">\n <ADatetime :date-time=\"item.modifiedAt\" />\n <template v-if=\"$slots.modifiedBy\">\n <br />\n <slot\n :id=\"item.modifiedBy\"\n name=\"modifiedBy\"\n />\n </template>\n </template>\n <template #item.actions=\"{ item }: { item: DatatableItem }\">\n <div class=\"d-flex justify-end\">\n <ATableCopyIdButton :id=\"item.id\" />\n <!-- `:to` rather than a click handler, so middle-click and open-in-new-tab work. -->\n <VBtn\n :to=\"detailRoute(item)\"\n class=\"ml-1\"\n icon=\"mdi-information-outline\"\n :aria-label=\"t('common.button.detail')\"\n size=\"x-small\"\n variant=\"text\"\n />\n <VBtn\n v-if=\"canUpdate\"\n :to=\"editRoute(item)\"\n class=\"ml-1\"\n icon=\"mdi-pencil\"\n :aria-label=\"t('common.button.edit')\"\n size=\"x-small\"\n variant=\"text\"\n />\n </div>\n </template>\n <template #bottom>\n <ADatatablePagination @change=\"getList\" />\n </template>\n </VDataTableServer>\n </div>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"APermissionGroupDatatable.js","names":["APermissionGroupDatatable_vue_vue_type_script_setup_true_lang_default","APermissionGroupDatatable_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"APermissionGroupDatatable.vue_vue_type_script_setup_true_lang.js","names":["$slots","_openBlock","_createElementBlock","_createVNode","APermissionGroupFilter","_createElementVNode","_component_VSpacer","ADatatableOrdering","ADatatableConfigButton","_unref","_isRef","_component_VDataTableServer","_withCtx","_component_VChip","_createTextVNode","_toDisplayString","ADatetime","_Fragment","_renderSlot","_createCommentVNode","ATableCopyIdButton","_component_VBtn","_createBlock","ADatatablePagination","ADatatableConfigButton_default","ADatetime_default","ATableCopyIdButton_default","ADatatableOrdering_default","ADatatablePagination_default","APermissionGroupFilter_default","_hoisted_1","_hoisted_2","APermissionGroupDatatable_vue_vue_type_script_setup_true_lang_default","__expose","__emit","props","__props","emit","useI18n","usePermissionGroupListFilter","provide","FilterConfigKey","filterConfig","FilterDataKey","filterData","usePermissionGroupActions","useFilterHelpers","permissionGroupFilterStorageKey","usePagination","DatatablePaginationKey","pagination","createDatatableColumnsConfig","datatableHiddenColumns","PERMISSION_GROUP_ENTITY","getList","useDebounceFn","fetchPermissionGroupList","submitFilterAction","submitFilter","resetFilterAction","resetFilter","onRowClick","item","onMounted","onBeforeUnmount","cancelPermissionGroupList","openBlock","createElementBlock","createVNode","createElementVNode","VSpacer","unref","columnsHidden","_cache","isRef","$event","columnsAll","VDataTableServer","columnsVisible","permissionGroupList","loadingPermissionGroupList","withCtx","VChip","createTextVNode","toDisplayString","_ctx","Fragment","renderSlot","createCommentVNode","VBtn","t","createBlock"],"sources":["../../../../../src/domains/permission/group/components/APermissionGroupDatatable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { onBeforeUnmount, onMounted, provide } from 'vue'\nimport type { RouteLocationRaw } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { useDebounceFn } from '@vueuse/core'\nimport ADatatableConfigButton from '@/domains/filters/datatable/components/ADatatableConfigButton.vue'\nimport ADatetime from '@/domains/ui/datetime/components/ADatetime.vue'\nimport ATableCopyIdButton from '@/domains/ui/buttons/table/components/ATableCopyIdButton.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport ADatatableOrdering from '@/domains/filters/datatable/components/ADatatableOrdering.vue'\nimport ADatatablePagination from '@/domains/filters/datatable/components/ADatatablePagination.vue'\nimport { createDatatableColumnsConfig } from '@/domains/filters/datatable/composables/createDatatableColumnsConfig'\nimport { useFilterHelpers } from '@/domains/filters/composables/filterFactory'\nimport { DatatablePaginationKey, FilterConfigKey, FilterDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport { usePagination } from '@/domains/api/composables/pagination'\nimport APermissionGroupFilter from '@/domains/permission/group/components/APermissionGroupFilter.vue'\nimport { usePermissionGroupActions } from '@/domains/permission/group/composables/permissionGroupActions'\nimport { PERMISSION_GROUP_ENTITY } from '@/domains/permission/group/api/permissionGroupApi'\nimport {\n permissionGroupFilterStorageKey,\n usePermissionGroupListFilter,\n} from '@/domains/permission/group/filter/permissionGroupFilter'\nimport { SORT_BY_ID } from '@/domains/filters/datatable/utils/datatableColumns'\nimport type { PermissionGroup } from '@/domains/permission/group/types/PermissionGroup'\n\ntype DatatableItem = PermissionGroup\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n /** Backend identity: keys the filter store and the cache, and reaches every api call. */\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n /** Where a row and the detail button go. The library cannot know an app's typed route names. */\n detailRoute: (permissionGroup: PermissionGroup) => RouteLocationRaw\n editRoute: (permissionGroup: PermissionGroup) => RouteLocationRaw\n /** Already-evaluated ACL, a boolean rather than an `AclValue`. */\n canUpdate?: boolean\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n canUpdate: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'rowClick', permissionGroup: PermissionGroup): void\n}>()\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { t } = useI18n()\nconst { filterConfig, filterData } = usePermissionGroupListFilter(props.system)\nprovide(FilterConfigKey, filterConfig)\nprovide(FilterDataKey, filterData)\n\nconst {\n fetchPermissionGroupList,\n cancelPermissionGroupList,\n permissionGroupList,\n loadingPermissionGroupList,\n datatableHiddenColumns,\n} = usePermissionGroupActions({\n client: props.client,\n system: props.system,\n entity: props.entity,\n endPoint: props.endPoint,\n})\n\nconst { resetFilter, submitFilter, loadStoredFilters } = useFilterHelpers(filterData, filterConfig, {\n storeFiltersLocalStorage: permissionGroupFilterStorageKey(props.system),\n})\n\nconst { pagination } = usePagination(SORT_BY_ID)\nprovide(DatatablePaginationKey, pagination)\n\nconst { columnsVisible, columnsAll, columnsHidden } = createDatatableColumnsConfig(\n [\n { key: 'id' },\n { key: 'title' },\n { key: 'description' },\n { key: 'permissions' },\n { key: 'createdAt' },\n { key: 'modifiedAt' },\n ],\n datatableHiddenColumns,\n 'common',\n PERMISSION_GROUP_ENTITY,\n { storeColumnsLocalStorage: `table_common_permissionGroup_${props.system}` }\n)\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\nconst getList = useDebounceFn(async () => {\n await fetchPermissionGroupList(pagination, filterData, filterConfig)\n})\n\n// Named here, not inline in the template: the template would pass the unwrapped value of the `pagination` ref.\nconst submitFilterAction = () => submitFilter(pagination, getList)\nconst resetFilterAction = () => resetFilter(pagination, getList)\n\nconst onRowClick = (_event: unknown, { item }: { item: DatatableItem }) => {\n if (item.id) emit('rowClick', item)\n}\n\nonMounted(() => {\n loadStoredFilters(pagination, getList)\n})\n\nonBeforeUnmount(() => {\n // Order matters: a pending debounce would otherwise fire after the abort and start a request\n // nothing is left to receive.\n getList.cancel()\n cancelPermissionGroupList()\n})\n\ndefineExpose({\n refresh: getList,\n resetFilter: resetFilterAction,\n submitFilter: submitFilterAction,\n})\n</script>\n\n<template>\n <div>\n <APermissionGroupFilter\n @submit=\"submitFilterAction\"\n @reset=\"resetFilterAction\"\n />\n <div>\n <div class=\"d-flex align-center\">\n <VSpacer />\n <ADatatableOrdering\n variant=\"id\"\n @sort-by-change=\"submitFilterAction\"\n />\n <ADatatableConfigButton\n v-model:columns-hidden=\"columnsHidden\"\n :columns-all=\"columnsAll\"\n />\n </div>\n <VDataTableServer\n class=\"a-datatable\"\n :headers=\"columnsVisible\"\n :items=\"permissionGroupList\"\n :items-length=\"permissionGroupList.length\"\n :loading=\"loadingPermissionGroupList\"\n item-value=\"id\"\n @click:row=\"onRowClick\"\n >\n <template #item.permissions=\"{ item }: { item: DatatableItem }\">\n <VChip>{{ Object.keys(item.permissions).length }}</VChip>\n </template>\n <template #item.createdAt=\"{ item }: { item: DatatableItem }\">\n <ADatetime :date-time=\"item.createdAt\" />\n <!--\n The user chip is per app: its cache, its route, its own `_system`.\n An app without one leaves the slot empty, and then no line break is rendered.\n -->\n <template v-if=\"$slots.createdBy\">\n <br />\n <slot\n :id=\"item.createdBy\"\n name=\"createdBy\"\n />\n </template>\n </template>\n <template #item.modifiedAt=\"{ item }: { item: DatatableItem }\">\n <ADatetime :date-time=\"item.modifiedAt\" />\n <template v-if=\"$slots.modifiedBy\">\n <br />\n <slot\n :id=\"item.modifiedBy\"\n name=\"modifiedBy\"\n />\n </template>\n </template>\n <template #item.actions=\"{ item }: { item: DatatableItem }\">\n <div class=\"d-flex justify-end\">\n <ATableCopyIdButton :id=\"item.id\" />\n <!-- `:to` rather than a click handler, so middle-click and open-in-new-tab work. -->\n <VBtn\n :to=\"detailRoute(item)\"\n class=\"ml-1\"\n icon=\"mdi-information-outline\"\n :aria-label=\"t('common.button.detail')\"\n size=\"x-small\"\n variant=\"text\"\n />\n <VBtn\n v-if=\"canUpdate\"\n :to=\"editRoute(item)\"\n class=\"ml-1\"\n icon=\"mdi-pencil\"\n :aria-label=\"t('common.button.edit')\"\n size=\"x-small\"\n variant=\"text\"\n />\n </div>\n </template>\n <template #bottom>\n <ADatatablePagination @change=\"getList\" />\n </template>\n </VDataTableServer>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"APermissionGroupDatatable.vue_vue_type_script_setup_true_lang.js","names":["$slots","_openBlock","_createElementBlock","_createVNode","APermissionGroupFilter","_createElementVNode","_component_VSpacer","ADatatableOrdering","ADatatableConfigButton","_unref","_isRef","_component_VDataTableServer","_withCtx","_component_VChip","_createTextVNode","_toDisplayString","ADatetime","_Fragment","_renderSlot","ATableCopyIdButton","_component_VBtn","_createBlock","ADatatablePagination","ADatatableConfigButton_default","ADatetime_default","ATableCopyIdButton_default","ADatatableOrdering_default","ADatatablePagination_default","APermissionGroupFilter_default","_hoisted_1","_hoisted_2","APermissionGroupDatatable_vue_vue_type_script_setup_true_lang_default","__expose","__emit","props","__props","emit","useI18n","usePermissionGroupListFilter","provide","FilterConfigKey","filterConfig","FilterDataKey","filterData","usePermissionGroupActions","useFilterHelpers","permissionGroupFilterStorageKey","usePagination","DatatablePaginationKey","pagination","createDatatableColumnsConfig","datatableHiddenColumns","PERMISSION_GROUP_ENTITY","getList","useDebounceFn","fetchPermissionGroupList","submitFilterAction","submitFilter","resetFilterAction","resetFilter","onRowClick","item","onMounted","onBeforeUnmount","cancelPermissionGroupList","openBlock","createElementBlock","createVNode","createElementVNode","VSpacer","unref","columnsHidden","_cache","isRef","$event","columnsAll","VDataTableServer","columnsVisible","permissionGroupList","loadingPermissionGroupList","withCtx","VChip","createTextVNode","toDisplayString","_ctx","Fragment","renderSlot","createCommentVNode","VBtn","t","createBlock"],"sources":["../../../../../src/domains/permission/group/components/APermissionGroupDatatable.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { onBeforeUnmount, onMounted, provide } from 'vue'\nimport type { RouteLocationRaw } from 'vue-router'\nimport { useI18n } from 'vue-i18n'\nimport { useDebounceFn } from '@vueuse/core'\nimport ADatatableConfigButton from '@/domains/filters/datatable/components/ADatatableConfigButton.vue'\nimport ADatetime from '@/domains/ui/datetime/components/ADatetime.vue'\nimport ATableCopyIdButton from '@/domains/ui/buttons/table/components/ATableCopyIdButton.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport ADatatableOrdering from '@/domains/filters/datatable/components/ADatatableOrdering.vue'\nimport ADatatablePagination from '@/domains/filters/datatable/components/ADatatablePagination.vue'\nimport { createDatatableColumnsConfig } from '@/domains/filters/datatable/composables/createDatatableColumnsConfig'\nimport { useFilterHelpers } from '@/domains/filters/composables/filterFactory'\nimport { DatatablePaginationKey, FilterConfigKey, FilterDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport { usePagination } from '@/domains/api/composables/pagination'\nimport APermissionGroupFilter from '@/domains/permission/group/components/APermissionGroupFilter.vue'\nimport { usePermissionGroupActions } from '@/domains/permission/group/composables/permissionGroupActions'\nimport { PERMISSION_GROUP_ENTITY } from '@/domains/permission/group/api/permissionGroupApi'\nimport {\n permissionGroupFilterStorageKey,\n usePermissionGroupListFilter,\n} from '@/domains/permission/group/filter/permissionGroupFilter'\nimport { SORT_BY_ID } from '@/domains/filters/datatable/utils/datatableColumns'\nimport type { PermissionGroup } from '@/domains/permission/group/types/PermissionGroup'\n\ntype DatatableItem = PermissionGroup\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n /** Backend identity: keys the filter store and the cache, and reaches every api call. */\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n /** Where a row and the detail button go. The library cannot know an app's typed route names. */\n detailRoute: (permissionGroup: PermissionGroup) => RouteLocationRaw\n editRoute: (permissionGroup: PermissionGroup) => RouteLocationRaw\n /** Already-evaluated ACL, a boolean rather than an `AclValue`. */\n canUpdate?: boolean\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n canUpdate: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'rowClick', permissionGroup: PermissionGroup): void\n}>()\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { t } = useI18n()\nconst { filterConfig, filterData } = usePermissionGroupListFilter(props.system)\nprovide(FilterConfigKey, filterConfig)\nprovide(FilterDataKey, filterData)\n\nconst {\n fetchPermissionGroupList,\n cancelPermissionGroupList,\n permissionGroupList,\n loadingPermissionGroupList,\n datatableHiddenColumns,\n} = usePermissionGroupActions({\n client: props.client,\n system: props.system,\n entity: props.entity,\n endPoint: props.endPoint,\n})\n\nconst { resetFilter, submitFilter, loadStoredFilters } = useFilterHelpers(filterData, filterConfig, {\n storeFiltersLocalStorage: permissionGroupFilterStorageKey(props.system),\n})\n\nconst { pagination } = usePagination(SORT_BY_ID)\nprovide(DatatablePaginationKey, pagination)\n\nconst { columnsVisible, columnsAll, columnsHidden } = createDatatableColumnsConfig(\n [\n { key: 'id' },\n { key: 'title' },\n { key: 'description' },\n { key: 'permissions' },\n { key: 'createdAt' },\n { key: 'modifiedAt' },\n ],\n datatableHiddenColumns,\n 'common',\n PERMISSION_GROUP_ENTITY,\n { storeColumnsLocalStorage: `table_common_permissionGroup_${props.system}` }\n)\n/* eslint-enable vue/no-setup-props-reactivity-loss */\n\nconst getList = useDebounceFn(async () => {\n await fetchPermissionGroupList(pagination, filterData, filterConfig)\n})\n\n// Named here, not inline in the template: the template would pass the unwrapped value of the `pagination` ref.\nconst submitFilterAction = () => submitFilter(pagination, getList)\nconst resetFilterAction = () => resetFilter(pagination, getList)\n\nconst onRowClick = (_event: unknown, { item }: { item: DatatableItem }) => {\n if (item.id) emit('rowClick', item)\n}\n\nonMounted(() => {\n loadStoredFilters(pagination, getList)\n})\n\nonBeforeUnmount(() => {\n // Order matters: a pending debounce would otherwise fire after the abort and start a request\n // nothing is left to receive.\n getList.cancel()\n cancelPermissionGroupList()\n})\n\ndefineExpose({\n refresh: getList,\n resetFilter: resetFilterAction,\n submitFilter: submitFilterAction,\n})\n</script>\n\n<template>\n <div>\n <APermissionGroupFilter\n @submit=\"submitFilterAction\"\n @reset=\"resetFilterAction\"\n />\n <div>\n <div class=\"d-flex align-center\">\n <VSpacer />\n <ADatatableOrdering\n variant=\"id\"\n @sort-by-change=\"submitFilterAction\"\n />\n <ADatatableConfigButton\n v-model:columns-hidden=\"columnsHidden\"\n :columns-all=\"columnsAll\"\n />\n </div>\n <VDataTableServer\n class=\"a-datatable\"\n :headers=\"columnsVisible\"\n :items=\"permissionGroupList\"\n :items-length=\"permissionGroupList.length\"\n :loading=\"loadingPermissionGroupList\"\n item-value=\"id\"\n @click:row=\"onRowClick\"\n >\n <template #item.permissions=\"{ item }: { item: DatatableItem }\">\n <VChip>{{ Object.keys(item.permissions).length }}</VChip>\n </template>\n <template #item.createdAt=\"{ item }: { item: DatatableItem }\">\n <ADatetime :date-time=\"item.createdAt\" />\n <!--\n The user chip is per app: its cache, its route, its own `_system`.\n An app without one leaves the slot empty, and then no line break is rendered.\n -->\n <template v-if=\"$slots.createdBy\">\n <br />\n <slot\n :id=\"item.createdBy\"\n name=\"createdBy\"\n />\n </template>\n </template>\n <template #item.modifiedAt=\"{ item }: { item: DatatableItem }\">\n <ADatetime :date-time=\"item.modifiedAt\" />\n <template v-if=\"$slots.modifiedBy\">\n <br />\n <slot\n :id=\"item.modifiedBy\"\n name=\"modifiedBy\"\n />\n </template>\n </template>\n <template #item.actions=\"{ item }: { item: DatatableItem }\">\n <div class=\"d-flex justify-end\">\n <ATableCopyIdButton :id=\"item.id\" />\n <!-- `:to` rather than a click handler, so middle-click and open-in-new-tab work. -->\n <VBtn\n :to=\"detailRoute(item)\"\n class=\"ml-1\"\n icon=\"mdi-information-outline\"\n :aria-label=\"t('common.button.detail')\"\n size=\"x-small\"\n variant=\"text\"\n />\n <VBtn\n v-if=\"canUpdate\"\n :to=\"editRoute(item)\"\n class=\"ml-1\"\n icon=\"mdi-pencil\"\n :aria-label=\"t('common.button.edit')\"\n size=\"x-small\"\n variant=\"text\"\n />\n </div>\n </template>\n <template #bottom>\n <ADatatablePagination @change=\"getList\" />\n </template>\n </VDataTableServer>\n </div>\n </div>\n</template>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"APermissionGroupDetail.js","names":["_sfc_main","APermissionGroupDetail_vue_vue_type_script_setup_true_lang_default","APermissionGroupDetail_default"],"sources":["../../../../../src/domains/permission/group/components/APermissionGroupDetail.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { storeToRefs } from 'pinia'\nimport { useI18n } from 'vue-i18n'\nimport ACopyText from '@/domains/ui/components/ACopyText.vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport APermissionEditor from '@/domains/permission/components/APermissionEditor.vue'\nimport { usePermissionGroupOneStore } from '@/domains/permission/group/store/permissionGroupStore'\n\ndefineProps<{\n client: AxiosClientFn\n system: string\n /**\n * Where the grants editor reads the permission config. Defaults to `GET /adm/v1/permissions/config`.\n * Deliberately not named `endPoint`: a page once passed the permission-group endpoint as `endPoint`.\n * The editor then fetched the group list as config and crashed, and\n * the per-system config store left user pages broken until reload.\n */\n permissionConfigEndPoint?: string | undefined\n}>()\n\nconst { permissionGroup, loadingPermissionGroup } = storeToRefs(usePermissionGroupOneStore())\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <VRow>\n <VCol\n cols=\"12\"\n sm=\"8\"\n >\n <VRow>\n <VCol cols=\"12\">\n <VCard :loading=\"loadingPermissionGroup\">\n <VCardText>\n <ARow\n :title=\"t('common.permissionGroup.model.title')\"\n :value=\"permissionGroup.title\"\n />\n <ARow\n :title=\"t('common.permissionGroup.model.description')\"\n :value=\"permissionGroup.description\"\n />\n </VCardText>\n </VCard>\n </VCol>\n </VRow>\n <VRow>\n <VCol cols=\"12\">\n <!--\n A group has no resolved permissions of its own. `resolvedPermissions`\n stays undefined so the origin column reads every grant as the group's own.\n -->\n <APermissionEditor\n v-model=\"permissionGroup.permissions\"\n :client=\"client\"\n :system=\"system\"\n :end-point=\"permissionConfigEndPoint\"\n readonly\n />\n </VCol>\n </VRow>\n </VCol>\n <VCol\n cols=\"12\"\n sm=\"4\"\n >\n <ARow :title=\"t('common.permissionGroup.model.id')\">\n <ACopyText :value=\"permissionGroup.id\" />\n </ARow>\n <!-- Created/modified by whom: each app resolves users against its own cache and routes. -->\n <slot\n name=\"tracking\"\n :permission-group=\"permissionGroup\"\n />\n </VCol>\n </VRow>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"APermissionGroupDetail.js","names":["APermissionGroupDetail_vue_vue_type_script_setup_true_lang_default","APermissionGroupDetail_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"APermissionGroupFilter.js","names":["_sfc_main","APermissionGroupFilter_vue_vue_type_script_setup_true_lang_default","APermissionGroupFilter_default"],"sources":["../../../../../src/domains/permission/group/components/APermissionGroupFilter.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { inject } from 'vue'\nimport AFilterString from '@/domains/filters/components/AFilterString.vue'\nimport AFilterWrapper from '@/domains/filters/components/AFilterWrapper.vue'\nimport { FilterConfigKey, FilterDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport { isUndefined } from '@/shared/utils/common'\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'reset'): void\n}>()\n\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nif (isUndefined(filterConfig) || isUndefined(filterData)) {\n throw new Error('[APermissionGroupFilter] Incorrect provide/inject config.')\n}\n</script>\n\n<template>\n <AFilterWrapper\n @submit=\"emit('submit')\"\n @reset=\"emit('reset')\"\n >\n <template #search>\n <AFilterString name=\"title\" />\n </template>\n </AFilterWrapper>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"APermissionGroupFilter.js","names":["APermissionGroupFilter_vue_vue_type_script_setup_true_lang_default","APermissionGroupFilter_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"APermissionGroupManage.js","names":["_sfc_main","APermissionGroupManage_vue_vue_type_script_setup_true_lang_default","APermissionGroupManage_default"],"sources":["../../../../../src/domains/permission/group/components/APermissionGroupManage.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { storeToRefs } from 'pinia'\nimport AFormTextField from '@/domains/form/components/AFormTextField.vue'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport APermissionEditor from '@/domains/permission/components/APermissionEditor.vue'\nimport { usePermissionGroupValidation } from '@/domains/permission/group/composables/permissionGroupValidations'\nimport { PERMISSION_GROUP_ENTITY } from '@/domains/permission/group/api/permissionGroupApi'\nimport { usePermissionGroupOneStore } from '@/domains/permission/group/store/permissionGroupStore'\n\ndefineProps<{\n client: AxiosClientFn\n /** Backend identity for the permission config fetch, not the i18n namespace below. */\n system: string\n /**\n * Where the grants editor reads the permission config. Defaults to `GET /adm/v1/permissions/config`.\n * Deliberately not named `endPoint`: a page once passed the permission-group endpoint as `endPoint`.\n * The editor then fetched the group list as config and crashed, and\n * the per-system config store left user pages broken until reload.\n */\n permissionConfigEndPoint?: string | undefined\n}>()\n\nconst { permissionGroup } = storeToRefs(usePermissionGroupOneStore())\nconst { v$ } = usePermissionGroupValidation(permissionGroup)\n</script>\n\n<template>\n <!--\n `common` / `permissionGroup` is the library's translation\n namespace for the field labels, the same for every backend.\n The backend identity is passed in `system` above.\n -->\n <ASystemEntityScope\n system=\"common\"\n :subject=\"PERMISSION_GROUP_ENTITY\"\n >\n <VRow>\n <VCol cols=\"12\">\n <VCard>\n <VCardText>\n <AFormTextField\n v-model=\"permissionGroup.title\"\n :v=\"v$.permissionGroup.title\"\n data-cy=\"permissionGroup-title\"\n />\n <AFormTextField\n v-model=\"permissionGroup.description\"\n :v=\"v$.permissionGroup.description\"\n data-cy=\"permissionGroup-description\"\n />\n </VCardText>\n </VCard>\n </VCol>\n <VCol cols=\"12\">\n <APermissionEditor\n v-model=\"permissionGroup.permissions\"\n :client=\"client\"\n :system=\"system\"\n :end-point=\"permissionConfigEndPoint\"\n />\n </VCol>\n <VCol\n v-if=\"$slots.tracking\"\n cols=\"12\"\n >\n <!-- Created/modified by whom: each app resolves users against its own cache and routes. -->\n <slot\n name=\"tracking\"\n :permission-group=\"permissionGroup\"\n />\n </VCol>\n </VRow>\n </ASystemEntityScope>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"APermissionGroupManage.js","names":["APermissionGroupManage_vue_vue_type_script_setup_true_lang_default","APermissionGroupManage_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"APermissionGroupManage.vue_vue_type_script_setup_true_lang.js","names":["$slots","_openBlock","_createBlock","ASystemEntityScope","_unref","_withCtx","_createVNode","_component_VRow","_component_VCol","_component_VCard","_component_VCardText","AFormTextField","APermissionEditor","_renderSlot","_createCommentVNode","AFormTextField_default","ASystemEntityScope_default","APermissionEditor_default","APermissionGroupManage_vue_vue_type_script_setup_true_lang_default","storeToRefs","usePermissionGroupOneStore","usePermissionGroupValidation","permissionGroup","openBlock","createBlock","unref","PERMISSION_GROUP_ENTITY","withCtx","createVNode","VRow","VCol","VCard","VCardText","_cache","$event","v$","__props","_ctx","renderSlot","createCommentVNode"],"sources":["../../../../../src/domains/permission/group/components/APermissionGroupManage.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { storeToRefs } from 'pinia'\nimport AFormTextField from '@/domains/form/components/AFormTextField.vue'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport APermissionEditor from '@/domains/permission/components/APermissionEditor.vue'\nimport { usePermissionGroupValidation } from '@/domains/permission/group/composables/permissionGroupValidations'\nimport { PERMISSION_GROUP_ENTITY } from '@/domains/permission/group/api/permissionGroupApi'\nimport { usePermissionGroupOneStore } from '@/domains/permission/group/store/permissionGroupStore'\n\ndefineProps<{\n client: AxiosClientFn\n /** Backend identity for the permission config fetch, not the i18n namespace below. */\n system: string\n /**\n * Where the grants editor reads the permission config. Defaults to `GET /adm/v1/permissions/config`.\n * Deliberately not named `endPoint`: a page once passed the permission-group endpoint as `endPoint`.\n * The editor then fetched the group list as config and crashed, and\n * the per-system config store left user pages broken until reload.\n */\n permissionConfigEndPoint?: string | undefined\n}>()\n\nconst { permissionGroup } = storeToRefs(usePermissionGroupOneStore())\nconst { v$ } = usePermissionGroupValidation(permissionGroup)\n</script>\n\n<template>\n <!--\n `common` / `permissionGroup` is the library's translation\n namespace for the field labels, the same for every backend.\n The backend identity is passed in `system` above.\n -->\n <ASystemEntityScope\n system=\"common\"\n :subject=\"PERMISSION_GROUP_ENTITY\"\n >\n <VRow>\n <VCol cols=\"12\">\n <VCard>\n <VCardText>\n <AFormTextField\n v-model=\"permissionGroup.title\"\n :v=\"v$.permissionGroup.title\"\n data-cy=\"permissionGroup-title\"\n />\n <AFormTextField\n v-model=\"permissionGroup.description\"\n :v=\"v$.permissionGroup.description\"\n data-cy=\"permissionGroup-description\"\n />\n </VCardText>\n </VCard>\n </VCol>\n <VCol cols=\"12\">\n <APermissionEditor\n v-model=\"permissionGroup.permissions\"\n :client=\"client\"\n :system=\"system\"\n :end-point=\"permissionConfigEndPoint\"\n />\n </VCol>\n <VCol\n v-if=\"$slots.tracking\"\n cols=\"12\"\n >\n <!-- Created/modified by whom: each app resolves users against its own cache and routes. -->\n <slot\n name=\"tracking\"\n :permission-group=\"permissionGroup\"\n />\n </VCol>\n </VRow>\n </ASystemEntityScope>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAuBA,IAAM,EAAE,uBAAoBmB,EAAYC,EAA2B,CAAC,GAC9D,EAAE,UAAOC,EAA6BC,CAAe;E,kBASzDrB,EAAA,GAAAC,EAwCqBC,GAAA;GAvCnB,QAAO;GACN,SAASC,EAAAsB,CAAA;;GAEV,SAAArB,QAmCO,CAnCPC,EAmCOC,GAAA,MAAA;IAlCL,SAAAF,QAeO;KAfPC,EAeOE,GAAA,EAfD,MAAK,KAAI,GAAA;MACb,SAAAH,QAaQ,CAbRC,EAaQG,GAAA,MAAA;OAZN,SAAAJ,QAWY,CAXZC,EAWYI,GAAA,MAAA;QAVV,SAAAL,QAIE,CAJFC,EAIEK,GAAA;SAHS,YAAAP,EAAAkB,CAAA,CAAe,CAAC;SAAhB,uBAAA,AAAAW,EAAA,QAAA,MAAA,EAAAX,CAAA,CAAe,CAAC,QAAKY;SAC7B,GAAG9B,EAAA+B,CAAA,CAAE,CAAC,gBAAgB;SACvB,WAAQ;Q,kCAEV7B,EAIEK,GAAA;SAHS,YAAAP,EAAAkB,CAAA,CAAe,CAAC;SAAhB,uBAAA,AAAAW,EAAA,QAAA,MAAA,EAAAX,CAAA,CAAe,CAAC,cAAWY;SACnC,GAAG9B,EAAA+B,CAAA,CAAE,CAAC,gBAAgB;SACvB,WAAQ;;;;;;;;KAKhB7B,EAOOE,GAAA,EAPD,MAAK,KAAI,GAAA;MACb,SAAAH,QAKE,CALFC,EAKEM,GAAA;OAJS,YAAAR,EAAAkB,CAAA,CAAe,CAAC;OAAhB,uBAAA,AAAAW,EAAA,QAAA,MAAA,EAAAX,CAAA,CAAe,CAAC,cAAWY;OACnC,QAAQE,EAAA;OACR,QAAQA,EAAA;OACR,aAAWA,EAAA;;;;;;;;;KAIRpC,EAAAA,OAAO,YADfC,EAAA,GAAAC,EASOM,GAAA;;MAPL,MAAK;;MAGL,SAAAH,QAGE,CAHFQ,EAGEwB,EAAA,QAAA,YAAA,EADC,iBAAkBjC,EAAAkB,CAAA,EAAe,CAAA,C"}
1
+ {"version":3,"file":"APermissionGroupManage.vue_vue_type_script_setup_true_lang.js","names":["$slots","_openBlock","_createBlock","ASystemEntityScope","_unref","_withCtx","_createVNode","_component_VRow","_component_VCol","_component_VCard","_component_VCardText","AFormTextField","APermissionEditor","_renderSlot","AFormTextField_default","ASystemEntityScope_default","APermissionEditor_default","APermissionGroupManage_vue_vue_type_script_setup_true_lang_default","storeToRefs","usePermissionGroupOneStore","usePermissionGroupValidation","permissionGroup","openBlock","createBlock","unref","PERMISSION_GROUP_ENTITY","withCtx","createVNode","VRow","VCol","VCard","VCardText","_cache","$event","v$","__props","_ctx","renderSlot","createCommentVNode"],"sources":["../../../../../src/domains/permission/group/components/APermissionGroupManage.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { storeToRefs } from 'pinia'\nimport AFormTextField from '@/domains/form/components/AFormTextField.vue'\nimport ASystemEntityScope from '@/domains/form/components/ASystemEntityScope.vue'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport APermissionEditor from '@/domains/permission/components/APermissionEditor.vue'\nimport { usePermissionGroupValidation } from '@/domains/permission/group/composables/permissionGroupValidations'\nimport { PERMISSION_GROUP_ENTITY } from '@/domains/permission/group/api/permissionGroupApi'\nimport { usePermissionGroupOneStore } from '@/domains/permission/group/store/permissionGroupStore'\n\ndefineProps<{\n client: AxiosClientFn\n /** Backend identity for the permission config fetch, not the i18n namespace below. */\n system: string\n /**\n * Where the grants editor reads the permission config. Defaults to `GET /adm/v1/permissions/config`.\n * Deliberately not named `endPoint`: a page once passed the permission-group endpoint as `endPoint`.\n * The editor then fetched the group list as config and crashed, and\n * the per-system config store left user pages broken until reload.\n */\n permissionConfigEndPoint?: string | undefined\n}>()\n\nconst { permissionGroup } = storeToRefs(usePermissionGroupOneStore())\nconst { v$ } = usePermissionGroupValidation(permissionGroup)\n</script>\n\n<template>\n <!--\n `common` / `permissionGroup` is the library's translation\n namespace for the field labels, the same for every backend.\n The backend identity is passed in `system` above.\n -->\n <ASystemEntityScope\n system=\"common\"\n :subject=\"PERMISSION_GROUP_ENTITY\"\n >\n <VRow>\n <VCol cols=\"12\">\n <VCard>\n <VCardText>\n <AFormTextField\n v-model=\"permissionGroup.title\"\n :v=\"v$.permissionGroup.title\"\n data-cy=\"permissionGroup-title\"\n />\n <AFormTextField\n v-model=\"permissionGroup.description\"\n :v=\"v$.permissionGroup.description\"\n data-cy=\"permissionGroup-description\"\n />\n </VCardText>\n </VCard>\n </VCol>\n <VCol cols=\"12\">\n <APermissionEditor\n v-model=\"permissionGroup.permissions\"\n :client=\"client\"\n :system=\"system\"\n :end-point=\"permissionConfigEndPoint\"\n />\n </VCol>\n <VCol\n v-if=\"$slots.tracking\"\n cols=\"12\"\n >\n <!-- Created/modified by whom: each app resolves users against its own cache and routes. -->\n <slot\n name=\"tracking\"\n :permission-group=\"permissionGroup\"\n />\n </VCol>\n </VRow>\n </ASystemEntityScope>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAuBA,IAAM,EAAE,uBAAoBkB,EAAYC,EAA2B,CAAC,GAC9D,EAAE,UAAOC,EAA6BC,CAAe;E,kBASzDpB,EAAA,GAAAC,EAwCqBC,GAAA;GAvCnB,QAAO;GACN,SAASC,EAAAqB,CAAA;;GAEV,SAAApB,QAmCO,CAnCPC,EAmCOC,GAAA,MAAA;IAlCL,SAAAF,QAeO;KAfPC,EAeOE,GAAA,EAfD,MAAK,KAAI,GAAA;MACb,SAAAH,QAaQ,CAbRC,EAaQG,GAAA,MAAA;OAZN,SAAAJ,QAWY,CAXZC,EAWYI,GAAA,MAAA;QAVV,SAAAL,QAIE,CAJFC,EAIEK,GAAA;SAHS,YAAAP,EAAAiB,CAAA,CAAe,CAAC;SAAhB,uBAAA,AAAAW,EAAA,QAAA,MAAA,EAAAX,CAAA,CAAe,CAAC,QAAKY;SAC7B,GAAG7B,EAAA8B,CAAA,CAAE,CAAC,gBAAgB;SACvB,WAAQ;Q,kCAEV5B,EAIEK,GAAA;SAHS,YAAAP,EAAAiB,CAAA,CAAe,CAAC;SAAhB,uBAAA,AAAAW,EAAA,QAAA,MAAA,EAAAX,CAAA,CAAe,CAAC,cAAWY;SACnC,GAAG7B,EAAA8B,CAAA,CAAE,CAAC,gBAAgB;SACvB,WAAQ;;;;;;;;KAKhB5B,EAOOE,GAAA,EAPD,MAAK,KAAI,GAAA;MACb,SAAAH,QAKE,CALFC,EAKEM,GAAA;OAJS,YAAAR,EAAAiB,CAAA,CAAe,CAAC;OAAhB,uBAAA,AAAAW,EAAA,QAAA,MAAA,EAAAX,CAAA,CAAe,CAAC,cAAWY;OACnC,QAAQE,EAAA;OACR,QAAQA,EAAA;OACR,aAAWA,EAAA;;;;;;;;;KAIRnC,EAAAA,OAAO,YADfC,EAAA,GAAAC,EASOM,GAAA;;MAPL,MAAK;;MAGL,SAAAH,QAGE,CAHFQ,EAGEuB,EAAA,QAAA,YAAA,EADC,iBAAkBhC,EAAAiB,CAAA,EAAe,CAAA,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"APermissionGroupRemoteAutocomplete.js","names":["_sfc_main","APermissionGroupRemoteAutocomplete_vue_vue_type_script_setup_true_lang_default","APermissionGroupRemoteAutocomplete_default"],"sources":["../../../../../src/domains/permission/group/components/APermissionGroupRemoteAutocomplete.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { provide } from 'vue'\nimport { SortOrder } from '@/domains/api/types/SortOrder'\nimport type { AxiosClientFn } from '@/domains/api/utils/client'\nimport AFormRemoteAutocomplete from '@/domains/remoteAutocomplete/components/AFormRemoteAutocomplete.vue'\nimport { FilterInnerConfigKey, FilterInnerDataKey } from '@/domains/filters/utils/filterInjectionKeys'\nimport { usePermissionGroupActions } from '@/domains/permission/group/composables/permissionGroupActions'\nimport { usePermissionGroupInnerFilter } from '@/domains/permission/group/filter/permissionGroupFilter'\nimport type { IntegerId } from '@/shared/types/common'\n\nconst props = withDefaults(\n defineProps<{\n client: AxiosClientFn\n system: string\n entity?: string | undefined\n endPoint?: string | undefined\n label?: string | undefined\n required?: boolean | undefined\n multiple?: boolean\n clearable?: boolean\n readonly?: boolean\n dataCy?: string\n }>(),\n {\n entity: undefined,\n endPoint: undefined,\n label: undefined,\n required: undefined,\n multiple: false,\n clearable: false,\n readonly: false,\n dataCy: 'permissionGroup-select',\n }\n)\n\nconst modelValue = defineModel<IntegerId | IntegerId[] | null>({ required: true })\n\n/* eslint-disable vue/no-setup-props-reactivity-loss */\nconst { fetchPermissionGroupOptions, fetchPermissionGroupOptionsByIds } = usePermissionGroupActions({\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\n// Per instance, never registered: two autocompletes on one page must not type into each other.\nconst { filterData, filterConfig } = usePermissionGroupInnerFilter()\nprovide(FilterInnerConfigKey, filterConfig)\nprovide(FilterInnerDataKey, filterData)\n</script>\n\n<template>\n <AFormRemoteAutocomplete\n v-model=\"modelValue\"\n :required=\"required\"\n :label=\"label\"\n :readonly=\"readonly\"\n :fetch-items=\"fetchPermissionGroupOptions\"\n :fetch-items-by-ids=\"fetchPermissionGroupOptionsByIds\"\n :multiple=\"multiple\"\n :clearable=\"clearable && !readonly\"\n filter-by-field=\"title\"\n :filter-sort-by=\"{ key: 'createdAt', order: SortOrder.Desc }\"\n prefetch=\"mounted\"\n disable-auto-single-select\n :data-cy=\"dataCy\"\n chips\n closable-chips\n hide-details\n />\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"APermissionGroupRemoteAutocomplete.js","names":["APermissionGroupRemoteAutocomplete_vue_vue_type_script_setup_true_lang_default","APermissionGroupRemoteAutocomplete_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AFilterRemoteAutocomplete.js","names":["_sfc_main","AFilterRemoteAutocomplete_vue_vue_type_script_setup_true_lang_default","AFilterRemoteAutocomplete_default"],"sources":["../../../../src/domains/remoteAutocomplete/components/AFilterRemoteAutocomplete.vue"],"sourcesContent":["<script lang=\"ts\" setup generic=\"T extends string | number\">\nimport { watchDebounced } from '@vueuse/core'\nimport { computed, getCurrentInstance, inject, type Ref, ref, watch } from 'vue'\nimport type { ValueObjectOption } from '@/shared/types/ValueObject'\nimport { isArray, isBoolean, isEmpty, isNull, isUndefined } from '@/shared/utils/common'\nimport { useI18n } from 'vue-i18n'\nimport { type FilterConfig, type FilterData, useFilterClearHelpers } from '@/domains/filters/composables/filterFactory'\nimport {\n FilterConfigKey,\n FilterDataKey,\n FilterInnerConfigKey,\n FilterInnerDataKey,\n FilterSelectedKey,\n FilterSubmitResetCounterKey,\n} from '@/domains/filters/utils/filterInjectionKeys'\nimport type { DatatableSortBy } from '@/domains/filters/datatable/utils/datatableColumns'\nimport { type Pagination, usePagination } from '@/domains/api/composables/pagination'\nimport { useAlerts } from '@/domains/system/composables/alerts'\n\ntype ModelValueType = T | T[] | null | undefined\n\nconst props = withDefaults(\n defineProps<{\n name: string\n fetchItems: (\n pagination: Ref<Pagination>,\n filterData: FilterData,\n filterConfig: FilterConfig\n ) => Promise<ValueObjectOption<T>[]>\n fetchItemsByIds: (ids: T[]) => Promise<ValueObjectOption<T>[]>\n filterByField: string\n filterSortBy?: DatatableSortBy\n prefetch?: 'hover' | 'focus' | 'mounted' | false\n minSearchChars?: number\n minSearchText?: string | undefined\n placeholder?: string | undefined\n }>(),\n {\n filterSortBy: null,\n prefetch: false,\n minSearchChars: 2,\n minSearchText: undefined,\n placeholder: undefined,\n }\n)\nconst emit = defineEmits<{\n (e: 'change'): void\n}>()\n\nconst submitResetCounter = inject(FilterSubmitResetCounterKey)\nconst filterSelected = inject(FilterSelectedKey)\nconst filterConfig = inject(FilterConfigKey)\nconst filterData = inject(FilterDataKey)\nconst filterInnerConfig = inject(FilterInnerConfigKey)\nconst filterInnerData = inject(FilterInnerDataKey)\n\nconst componentName = getCurrentInstance()?.type.__name\n\nif (\n isUndefined(submitResetCounter) ||\n isUndefined(filterSelected) ||\n isUndefined(filterData) ||\n isUndefined(filterConfig) ||\n // eslint-disable-next-line vue/no-setup-props-reactivity-loss\n isUndefined(filterConfig.fields[props.name]) ||\n isUndefined(filterInnerConfig) ||\n isUndefined(filterInnerData)\n) {\n throw new Error(`[${componentName}] Incorrect provide/inject config.`)\n}\n\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst filterByFieldProp = props.filterByField\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst filterSortByProp = props.filterSortBy\n\nif (isUndefined(filterInnerConfig.fields[filterByFieldProp]) || isUndefined(filterInnerData[filterByFieldProp])) {\n throw new Error(\n `[${componentName}] Incorrect filter inner config. ` +\n `FilterByField is '${filterByFieldProp}' and available options are ${Object.keys(filterInnerData).join(', ')}.`\n )\n}\n\nconst filterConfigCurrent = computed(() => filterConfig.fields[props.name]!)\n\nconst SEARCH_DEBOUNCE_MS = 300\n\nconst selected = ref<any>([])\nconst search = ref('')\nconst isFocused = ref(false)\nconst modelValueAutocomplete = ref<ValueObjectOption<T> | ValueObjectOption<T>[] | null>(null)\nconst apiRequestCounter = ref(0)\n\nconst { t } = useI18n()\n\nconst onBlur = () => {\n isFocused.value = false\n}\n\nconst label = computed(() => {\n return filterConfigCurrent.value.titleT ? t(filterConfigCurrent.value.titleT) : undefined\n})\n\nconst { pagination } = usePagination(isNull(filterSortByProp) ? null : filterSortByProp.key, filterSortByProp?.order)\n\nconst fetchedItems = ref<ValueObjectOption<T>[]>([])\nconst selectedItemsCache = ref<ValueObjectOption<T>[]>([])\nconst isFirstLoad = ref(true)\nconst prefetchCompleted = ref(false)\n\nconst allItems = computed<ValueObjectOption<T>[]>(() => {\n const itemsMap = new Map<T, ValueObjectOption<T>>()\n const addToMap = (items: ValueObjectOption<T>[]) => {\n items.forEach((item) => {\n itemsMap.set(item.value, {\n value: item.value,\n title: item.title,\n subtitle: item.subtitle,\n } as ValueObjectOption<T>)\n })\n }\n\n addToMap(selectedItemsCache.value as ValueObjectOption<T>[])\n addToMap(fetchedItems.value as ValueObjectOption<T>[])\n\n return Array.from(itemsMap.values())\n})\n\n// Counts running requests (by ids, search, prefetch). The spinner stays on until the last one ends.\n// A single flag let a read by ids hide the spinner of a search still running, and the reverse.\nconst requestsRunning = ref(0)\nconst loading = computed(() => requestsRunning.value > 0)\n\nlet byIdsCounter = 0\nconst resetToEmptyState = (value: ModelValueType) => {\n byIdsCounter++\n selectedItemsCache.value = []\n selected.value = isArray(value) ? [] : null\n modelValueAutocomplete.value = isArray(value) ? [] : null\n updateFilterSelected(selected.value)\n}\n\nconst updateSelected = (value: T[] | T) => {\n const findItem = (id: T): ValueObjectOption<T> =>\n allItems.value.find((obj) => obj.value === id) ?? ({ title: `${id}`, value: id } as ValueObjectOption<T>)\n return isArray(value) ? value.map(findItem) : findItem(value)\n}\n\nconst loadListItems = async (ids: T[] | T) => {\n const requestId = ++byIdsCounter\n requestsRunning.value++\n\n try {\n const idsArray = isArray(ids) ? ids : [ids]\n try {\n const res = await props.fetchItemsByIds(idsArray)\n if (requestId !== byIdsCounter) return selectedItemsCache.value\n selectedItemsCache.value = res\n const selectedNewValue = updateSelected(ids)\n selected.value = selectedNewValue\n modelValueAutocomplete.value = selectedNewValue\n updateFilterSelected(selected.value)\n } catch (e) {\n showErrorsDefault(e)\n }\n return selectedItemsCache.value\n } finally {\n requestsRunning.value--\n }\n}\n\nconst { showErrorsDefault } = useAlerts()\n\nconst apiSearch = async (query: string, requestCounter: number) => {\n requestsRunning.value++\n filterInnerData[filterByFieldProp] = query\n try {\n const res = await props.fetchItems(pagination, filterInnerData, filterInnerConfig)\n if (requestCounter === apiRequestCounter.value) fetchedItems.value = res\n } catch (error) {\n showErrorsDefault(error)\n } finally {\n requestsRunning.value--\n }\n}\n\nconst tryAutoFetch = async (mode: 'focus' | 'hover' | 'mounted') => {\n if (props.prefetch === false || props.prefetch !== mode) return\n if (loading.value) return\n if (prefetchCompleted.value) return\n\n requestsRunning.value++\n try {\n const res = await props.fetchItems(pagination, filterInnerData, filterInnerConfig)\n if (apiRequestCounter.value === 0) {\n fetchedItems.value = res\n }\n prefetchCompleted.value = true\n } catch (e) {\n showErrorsDefault(e)\n } finally {\n requestsRunning.value--\n }\n}\n\nconst onFocus = async () => {\n isFocused.value = true\n await tryAutoFetch('focus')\n}\n\nconst onMouseEnter = async () => {\n await tryAutoFetch('hover')\n}\n\nconst singleItemSelectedTitle = computed(() => {\n if (!filterConfigCurrent.value.multiple && selectedItemsCache.value[0]) {\n return selectedItemsCache.value[0].title\n }\n return undefined\n})\n\n// Clearing the field first emits a `null` search. Reading its length threw when the field had no focus.\nconst onSearchUpdate = (query: string | null) => {\n const text = query ?? ''\n if (!filterConfigCurrent.value.multiple && !isFocused.value && text.length === 0) return // vuetify fix\n if (singleItemSelectedTitle.value === text) return\n search.value = text\n}\n\nconst { clearOne } = useFilterClearHelpers()\n\n/** The value of the filter its watcher (below) saw last. */\nlet watchedValue: unknown\n\nconst clearField = () => {\n clearOne(props.name, filterData, filterConfig)\n filterSelected.value.delete(props.name)\n}\n\n// Clearing empties the filter in one step, so the filter watcher\n// fetches once for an empty search and keeps only the newest answer.\n// A single-value filter cleared onto its own default does not\n// change, so its watcher does nothing. Its item is restored here.\n// A clear that ends on a default value fetches the empty search here\n// through the counter, because the watcher only fetches for an empty value.\nconst onClickClear = () => {\n clearField()\n const value = filterData[props.name]\n if (isEmpty(value)) return\n if (value === watchedValue) loadListItems(value as T[] | T)\n apiRequestCounter.value++\n apiSearch('', apiRequestCounter.value)\n}\n\nwatchDebounced(\n search,\n (newValue: string | null, oldValue: string | null) => {\n const query = newValue ?? ''\n if (query === (oldValue ?? '')) return\n if (query.length > 0 && query.length < props.minSearchChars) return\n if (query.length === 0 && props.prefetch === false) {\n fetchedItems.value = []\n return\n }\n apiRequestCounter.value++\n apiSearch(query, apiRequestCounter.value)\n },\n { debounce: SEARCH_DEBOUNCE_MS }\n)\n\nconst checkFirstLoad = async () => {\n await tryAutoFetch('mounted')\n}\n\nconst placeholderComputed = computed(() => {\n if (!isUndefined(props.placeholder)) return props.placeholder\n if (filterConfigCurrent.value.variant === 'startsWith') return t('common.model.filterPlaceholder.startsWith')\n if (filterConfigCurrent.value.variant === 'eq') return t('common.model.filterPlaceholder.eq')\n if (filterConfigCurrent.value.variant === 'search') return t('common.model.filterPlaceholder.contains')\n return ''\n})\n\nconst noDataText = computed(() => {\n if (loading.value) {\n return '$vuetify.loading'\n }\n if (fetchedItems.value.length === 0 && search.value.length < props.minSearchChars) {\n return isUndefined(props.minSearchText)\n ? t('common.filter.filterMinChars', { min: props.minSearchChars })\n : props.minSearchText\n }\n return undefined\n})\n\nconst onSelectedUpdate = (newValue: any) => {\n filterConfig.touched = true\n let final: null | string | number | string[] | number[] = null\n if (isArray(newValue)) {\n final = newValue.map((item: any) => item.value) as string[] | number[]\n } else if (!isNull(newValue)) {\n final = newValue.value\n }\n filterData[props.name] = final\n emit('change')\n}\n\n// Closing a chip (`closable-chips`) removes its value from the filter, like unticking it in the list.\n// A single-value filter is cleared like the field's clear, since the chip slot draws its value as a chip too.\nconst onChipCloseClick = (closedItem: ValueObjectOption<T>) => {\n if (!isArray(selected.value)) {\n selected.value = null\n onSelectedUpdate(null)\n onClickClear()\n return\n }\n selected.value = (selected.value as ValueObjectOption<T>[]).filter((item) => item.value !== closedItem.value)\n onSelectedUpdate(selected.value)\n}\n\nconst updateFilterSelected = (\n newValue: ValueObjectOption<string | number> | ValueObjectOption<string | number>[] | null\n) => {\n filterSelected.value.delete(props.name)\n if ((isArray(newValue) && newValue.length === 0) || isNull(newValue)) {\n filterSelected.value.delete(props.name)\n return\n }\n if (isArray(newValue)) {\n filterSelected.value.set(\n props.name,\n newValue.map((item) => ({ title: item.title, value: item.value }))\n )\n return\n }\n filterSelected.value.set(props.name, [{ title: newValue.title, value: newValue.value }])\n}\n\nwatch(\n () => filterData[props.name],\n async (newValueFilterData, oldValueFilterData) => {\n watchedValue = newValueFilterData\n if (newValueFilterData === oldValueFilterData || isBoolean(newValueFilterData)) return\n const newValue = newValueFilterData as ModelValueType\n if (isFirstLoad.value) {\n isFirstLoad.value = false\n await checkFirstLoad()\n }\n if (isEmpty(newValue)) {\n resetToEmptyState(newValue)\n if (!isUndefined(oldValueFilterData)) {\n apiRequestCounter.value++\n await apiSearch('', apiRequestCounter.value)\n }\n return\n }\n await loadListItems(newValue as T[] | T)\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <VAutocomplete\n v-model=\"selected\"\n :items=\"allItems\"\n no-filter\n :placeholder=\"placeholderComputed\"\n :multiple=\"filterConfigCurrent.multiple\"\n :clearable=\"!filterConfigCurrent.mandatory\"\n :label=\"label\"\n :chips=\"filterConfigCurrent.multiple\"\n :loading=\"loading\"\n hide-details\n return-object\n autocomplete=\"off\"\n :no-data-text=\"noDataText\"\n @update:search=\"onSearchUpdate\"\n @update:model-value=\"onSelectedUpdate\"\n @blur=\"onBlur\"\n @focus=\"onFocus\"\n @mouseenter=\"onMouseEnter\"\n @click:clear=\"onClickClear\"\n >\n <template\n v-if=\"loading\"\n #no-data\n >\n <VListItem :title=\"t('$vuetify.loading')\" />\n </template>\n <template #item=\"{ props: itemProps, internalItem }\">\n <VListItem\n v-bind=\"itemProps\"\n :title=\"internalItem.raw.title\"\n :subtitle=\"internalItem.raw.subtitle\"\n />\n </template>\n <template #chip=\"{ props: chipProps, internalItem }\">\n <VChip\n :closable=\"chipProps.closable as boolean\"\n close-label=\"common.button.remove\"\n size=\"small\"\n :text=\"`${internalItem.title} (${internalItem.raw.subtitle})`\"\n :disabled=\"internalItem.props.disabled\"\n @click:close=\"onChipCloseClick(internalItem.raw)\"\n >\n {{ internalItem.raw.title }}\n <span\n v-if=\"internalItem.raw.subtitle\"\n class=\"font-italic pl-1\"\n >\n ({{ internalItem.raw.subtitle }})\n </span>\n </VChip>\n </template>\n </VAutocomplete>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AFilterRemoteAutocomplete.js","names":["AFilterRemoteAutocomplete_vue_vue_type_script_setup_true_lang_default","AFilterRemoteAutocomplete_default"],"sources":[],"mappings":""}