@anzusystems/common-admin 2.0.0-rc.11 → 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 (457) 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
@@ -1 +1 @@
1
- {"version":3,"file":"AProgress.js","names":["_sfc_main","AProgress_vue_vue_type_script_setup_true_lang_default","_plugin_vue_export_helper_default","AProgress_default"],"sources":["../../../../src/domains/ui/components/AProgress.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nwithDefaults(\n defineProps<{\n size?: 'small' | 'x-small' | 'default'\n fullscreen?: boolean\n }>(),\n {\n size: 'x-small',\n fullscreen: false,\n }\n)\n</script>\n\n<template>\n <div\n v-if=\"fullscreen\"\n class=\"a-progress-fullscreen\"\n >\n <VProgressCircular\n :size=\"size\"\n indeterminate\n />\n </div>\n <div\n v-else\n class=\"w-100 d-flex align-center justify-center\"\n >\n <VProgressCircular\n :size=\"size\"\n indeterminate\n />\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.a-progress-fullscreen {\n position: fixed;\n inset: 0;\n z-index: 99999;\n display: flex;\n align-items: center;\n justify-content: center;\n pointer-events: all;\n\n .v-theme--light & {\n background: rgb(255 255 255 / 60%);\n }\n\n .v-theme--dark & {\n background: rgb(0 0 0 / 60%);\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"AProgress.js","names":["AProgress_vue_vue_type_script_setup_true_lang_default","_plugin_vue_export_helper_default","AProgress_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"ARow.js","names":["_sfc_main","ARow_vue_vue_type_script_setup_true_lang_default","ARow_default"],"sources":["../../../../src/domains/ui/components/ARow.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nwithDefaults(\n defineProps<{\n title?: string\n value?: string | number | undefined | null\n dataCy?: string | undefined\n titleClass?: string | undefined\n }>(),\n {\n title: '',\n value: '',\n dataCy: undefined,\n titleClass: 'font-weight-bold text-label-large',\n }\n)\n</script>\n\n<template>\n <VRow :data-cy=\"dataCy\">\n <VCol>\n <h4\n v-if=\"title.length\"\n :class=\"titleClass\"\n >\n {{ title }}\n </h4>\n <slot>\n <span class=\"text-high-emphasis\">{{ value }}</span>\n </slot>\n </VCol>\n </VRow>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"ARow.js","names":["ARow_vue_vue_type_script_setup_true_lang_default","ARow_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"ARow.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_component_VRow","_withCtx","_createVNode","_component_VCol","_createElementBlock","_normalizeClass","_toDisplayString","_createCommentVNode","_renderSlot","_createElementVNode","_hoisted_1","ARow_vue_vue_type_script_setup_true_lang_default","openBlock","createBlock","VRow","__props","withCtx","createVNode","VCol","createElementBlock","normalizeClass","toDisplayString","createCommentVNode","renderSlot","_ctx","createElementVNode"],"sources":["../../../../src/domains/ui/components/ARow.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nwithDefaults(\n defineProps<{\n title?: string\n value?: string | number | undefined | null\n dataCy?: string | undefined\n titleClass?: string | undefined\n }>(),\n {\n title: '',\n value: '',\n dataCy: undefined,\n titleClass: 'font-weight-bold text-label-large',\n }\n)\n</script>\n\n<template>\n <VRow :data-cy=\"dataCy\">\n <VCol>\n <h4\n v-if=\"title.length\"\n :class=\"titleClass\"\n >\n {{ title }}\n </h4>\n <slot>\n <span class=\"text-high-emphasis\">{{ value }}</span>\n </slot>\n </VCol>\n </VRow>\n</template>\n"],"mappings":";;;;;;;;;;;;E,kBAkBEA,EAAA,GAAAC,EAYOC,GAAA,EAZA,WAASe,EAAA,OAAM,GAAA;GACpB,SAAAd,QAUO,CAVPC,EAUOC,GAAA,MAAA;IATL,SAAAF,QAKK,CAJGc,EAAA,MAAM,UADdjB,EAAA,GAAAM,EAKK,MAAA;;KAHF,OAAKC,EAAEU,EAAA,UAAU;IAEf,GAAAT,EAAAS,EAAA,KAAK,GAAA,CAAA,K,WAEVP,EAEOgB,EAAA,QAAA,WAAA,CAAA,SAAA,CADLf,EAAmD,QAAnDC,GAAmDJ,EAAfS,EAAA,KAAK,GAAA,CAAA,C"}
1
+ {"version":3,"file":"ARow.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","_component_VRow","_withCtx","_createVNode","_component_VCol","_createElementBlock","_normalizeClass","_toDisplayString","_renderSlot","_createElementVNode","_hoisted_1","ARow_vue_vue_type_script_setup_true_lang_default","openBlock","createBlock","VRow","__props","withCtx","createVNode","VCol","createElementBlock","normalizeClass","toDisplayString","createCommentVNode","renderSlot","_ctx","createElementVNode"],"sources":["../../../../src/domains/ui/components/ARow.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nwithDefaults(\n defineProps<{\n title?: string\n value?: string | number | undefined | null\n dataCy?: string | undefined\n titleClass?: string | undefined\n }>(),\n {\n title: '',\n value: '',\n dataCy: undefined,\n titleClass: 'font-weight-bold text-label-large',\n }\n)\n</script>\n\n<template>\n <VRow :data-cy=\"dataCy\">\n <VCol>\n <h4\n v-if=\"title.length\"\n :class=\"titleClass\"\n >\n {{ title }}\n </h4>\n <slot>\n <span class=\"text-high-emphasis\">{{ value }}</span>\n </slot>\n </VCol>\n </VRow>\n</template>\n"],"mappings":";;;;;;;;;;;;E,kBAkBEA,EAAA,GAAAC,EAYOC,GAAA,EAZA,WAASc,EAAA,OAAM,GAAA;GACpB,SAAAb,QAUO,CAVPC,EAUOC,GAAA,MAAA;IATL,SAAAF,QAKK,CAJGa,EAAA,MAAM,UADdhB,EAAA,GAAAM,EAKK,MAAA;;KAHF,OAAKC,EAAES,EAAA,UAAU;IAEf,GAAAR,EAAAQ,EAAA,KAAK,GAAA,CAAA,K,WAEVP,EAEOgB,EAAA,QAAA,WAAA,CAAA,SAAA,CADLf,EAAmD,QAAnDC,GAAmDH,EAAfQ,EAAA,KAAK,GAAA,CAAA,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"ATimeTrackingFields.js","names":["_sfc_main","ATimeTrackingFields_vue_vue_type_script_setup_true_lang_default","ATimeTrackingFields_default"],"sources":["../../../../src/domains/ui/components/ATimeTrackingFields.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n// Deprecated: use `AUserAndTimeTrackingFields`. Without `users` it draws\n// the dates, but drops a row with none where this one keeps the title.\n// With an admin's user cache (`createUserAndTimeTrackingFields`) it also shows who. Kept for admins that still use it.\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { AnzuUserAndTimeTrackingAware } from '@/shared/types/AnzuUserAndTimeTrackingAware'\nimport { dateTimePretty } from '@/shared/utils/datetime'\nimport ARow from '@/domains/ui/components/ARow.vue'\n\nconst props = withDefaults(\n defineProps<{\n data: AnzuUserAndTimeTrackingAware | any\n hideCreatedAt?: boolean\n hideModifiedAt?: boolean\n }>(),\n {\n hideCreatedAt: false,\n hideModifiedAt: false,\n }\n)\n\nconst createdAt = computed(() => {\n return dateTimePretty(props.data.createdAt)\n})\nconst modifiedAt = computed(() => {\n return dateTimePretty(props.data.modifiedAt)\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <ARow :title=\"t('common.model.tracking.created')\">\n <div class=\"d-flex align-center\">\n <div\n v-if=\"!hideCreatedAt\"\n class=\"mr-2\"\n >\n {{ createdAt }}\n </div>\n </div>\n </ARow>\n <ARow :title=\"t('common.model.tracking.modified')\">\n <div class=\"d-flex align-center\">\n <div\n v-if=\"!hideModifiedAt\"\n class=\"mr-2\"\n >\n {{ modifiedAt }}\n </div>\n </div>\n </ARow>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"ATimeTrackingFields.js","names":["ATimeTrackingFields_vue_vue_type_script_setup_true_lang_default","ATimeTrackingFields_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"ATimeTrackingFields.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_Fragment","_createVNode","ARow","_unref","_withCtx","_createElementVNode","_toDisplayString","_createCommentVNode","ARow_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","ATimeTrackingFields_vue_vue_type_script_setup_true_lang_default","props","__props","createdAt","computed","dateTimePretty","modifiedAt","useI18n","openBlock","createElementBlock","Fragment","createVNode","unref","t","withCtx","createElementVNode","createCommentVNode","toDisplayString"],"sources":["../../../../src/domains/ui/components/ATimeTrackingFields.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n// Deprecated: use `AUserAndTimeTrackingFields`. Without `users` it draws\n// the dates, but drops a row with none where this one keeps the title.\n// With an admin's user cache (`createUserAndTimeTrackingFields`) it also shows who. Kept for admins that still use it.\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { AnzuUserAndTimeTrackingAware } from '@/shared/types/AnzuUserAndTimeTrackingAware'\nimport { dateTimePretty } from '@/shared/utils/datetime'\nimport ARow from '@/domains/ui/components/ARow.vue'\n\nconst props = withDefaults(\n defineProps<{\n data: AnzuUserAndTimeTrackingAware | any\n hideCreatedAt?: boolean\n hideModifiedAt?: boolean\n }>(),\n {\n hideCreatedAt: false,\n hideModifiedAt: false,\n }\n)\n\nconst createdAt = computed(() => {\n return dateTimePretty(props.data.createdAt)\n})\nconst modifiedAt = computed(() => {\n return dateTimePretty(props.data.modifiedAt)\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <ARow :title=\"t('common.model.tracking.created')\">\n <div class=\"d-flex align-center\">\n <div\n v-if=\"!hideCreatedAt\"\n class=\"mr-2\"\n >\n {{ createdAt }}\n </div>\n </div>\n </ARow>\n <ARow :title=\"t('common.model.tracking.modified')\">\n <div class=\"d-flex align-center\">\n <div\n v-if=\"!hideModifiedAt\"\n class=\"mr-2\"\n >\n {{ modifiedAt }}\n </div>\n </div>\n </ARow>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EAUA,IAAMgB,IAAQC,GAYRC,IAAYC,QACTC,EAAeJ,EAAM,KAAK,SAAS,CAC3C,GACKK,IAAaF,QACVC,EAAeJ,EAAM,KAAK,UAAU,CAC5C,GAEK,EAAE,SAAMM,EAAQ;E,mCAIpBnB,EASOC,GAAA,EATA,OAAOC,EAAAuB,CAAA,CAAC,CAAA,+BAAA,E;GACb,SAAAtB,QAOM,CAPNC,EAOM,OAPNI,GAOM,CALKM,EAAA,gB,aADTjB,EAAA,GAAAC,EAKM,OALNW,GAKMJ,EADDU,EAAA,KAAS,GAAA,CAAA,E;;E,kBAIlBf,EASOC,GAAA,EATA,OAAOC,EAAAuB,CAAA,CAAC,CAAA,gCAAA,E;GACb,SAAAtB,QAOM,CAPNC,EAOM,OAPNM,GAOM,CALKI,EAAA,iB,aADTjB,EAAA,GAAAC,EAKM,OALNa,GAKMN,EADDa,EAAA,KAAU,GAAA,CAAA,E"}
1
+ {"version":3,"file":"ATimeTrackingFields.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createVNode","ARow","_unref","_withCtx","_createElementVNode","_toDisplayString","ARow_default","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","ATimeTrackingFields_vue_vue_type_script_setup_true_lang_default","props","__props","createdAt","computed","dateTimePretty","modifiedAt","useI18n","openBlock","createElementBlock","Fragment","createVNode","unref","t","withCtx","createElementVNode","createCommentVNode","toDisplayString"],"sources":["../../../../src/domains/ui/components/ATimeTrackingFields.vue"],"sourcesContent":["<script lang=\"ts\" setup>\n// Deprecated: use `AUserAndTimeTrackingFields`. Without `users` it draws\n// the dates, but drops a row with none where this one keeps the title.\n// With an admin's user cache (`createUserAndTimeTrackingFields`) it also shows who. Kept for admins that still use it.\nimport { computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport type { AnzuUserAndTimeTrackingAware } from '@/shared/types/AnzuUserAndTimeTrackingAware'\nimport { dateTimePretty } from '@/shared/utils/datetime'\nimport ARow from '@/domains/ui/components/ARow.vue'\n\nconst props = withDefaults(\n defineProps<{\n data: AnzuUserAndTimeTrackingAware | any\n hideCreatedAt?: boolean\n hideModifiedAt?: boolean\n }>(),\n {\n hideCreatedAt: false,\n hideModifiedAt: false,\n }\n)\n\nconst createdAt = computed(() => {\n return dateTimePretty(props.data.createdAt)\n})\nconst modifiedAt = computed(() => {\n return dateTimePretty(props.data.modifiedAt)\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <ARow :title=\"t('common.model.tracking.created')\">\n <div class=\"d-flex align-center\">\n <div\n v-if=\"!hideCreatedAt\"\n class=\"mr-2\"\n >\n {{ createdAt }}\n </div>\n </div>\n </ARow>\n <ARow :title=\"t('common.model.tracking.modified')\">\n <div class=\"d-flex align-center\">\n <div\n v-if=\"!hideModifiedAt\"\n class=\"mr-2\"\n >\n {{ modifiedAt }}\n </div>\n </div>\n </ARow>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EAUA,IAAMc,IAAQC,GAYRC,IAAYC,QACTC,EAAeJ,EAAM,KAAK,SAAS,CAC3C,GACKK,IAAaF,QACVC,EAAeJ,EAAM,KAAK,UAAU,CAC5C,GAEK,EAAE,SAAMM,EAAQ;E,mCAIpBlB,EASOC,GAAA,EATA,OAAOC,EAAAsB,CAAA,CAAC,CAAA,+BAAA,E;GACb,SAAArB,QAOM,CAPNC,EAOM,OAPNG,GAOM,CALKM,EAAA,gB,aADTf,EAAA,GAAAC,EAKM,OALNS,GAKMH,EADDS,EAAA,KAAS,GAAA,CAAA,E;;E,kBAIlBd,EASOC,GAAA,EATA,OAAOC,EAAAsB,CAAA,CAAC,CAAA,gCAAA,E;GACb,SAAArB,QAOM,CAPNC,EAOM,OAPNK,GAOM,CALKI,EAAA,iB,aADTf,EAAA,GAAAC,EAKM,OALNW,GAKML,EADDY,EAAA,KAAU,GAAA,CAAA,E"}
@@ -1 +1 @@
1
- {"version":3,"file":"AUserAndTimeTrackingFields.js","names":["_sfc_main","AUserAndTimeTrackingFields_vue_vue_type_script_setup_true_lang_default","AUserAndTimeTrackingFields_default"],"sources":["../../../../src/domains/ui/components/AUserAndTimeTrackingFields.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, useSlots, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ARow from '@/domains/ui/components/ARow.vue'\nimport ADatetime from '@/domains/ui/datetime/components/ADatetime.vue'\nimport ACachedUserChip from '@/domains/cached/components/ACachedUserChip.vue'\nimport type { UserAndTimeTrackingData, UserAndTimeTrackingUsers } from '@/shared/types/UserAndTimeTracking'\nimport type { CachedItem } from '@/domains/cached/composables/defineCached'\nimport type { IntegerId } from '@/shared/types/common'\nimport { isNull, isUndefined } from '@/shared/utils/common'\n\n/**\n * Created and modified, when and by whom, for a detail or edit form.\n * Admins use it through their own component from `createUserAndTimeTrackingFields`, which\n * supplies the user cache and user detail route. Without `users` it draws only the dates.\n */\nconst props = withDefaults(\n defineProps<{\n data: UserAndTimeTrackingData\n users?: UserAndTimeTrackingUsers | undefined\n userRouteName?: string | undefined\n userExternalUrlTemplate?: string | undefined\n // `any`: an admin's label reads its own user (a nickname), which `AnzuUserMinimal` does not have.\n userTitleFn?: ((user: CachedItem<any>) => string) | undefined\n hideCreatedAt?: boolean\n hideModifiedAt?: boolean\n hideCreatedBy?: boolean\n hideModifiedBy?: boolean\n }>(),\n {\n users: undefined,\n userRouteName: undefined,\n userExternalUrlTemplate: undefined,\n userTitleFn: undefined,\n hideCreatedAt: false,\n hideModifiedAt: false,\n hideCreatedBy: false,\n hideModifiedBy: false,\n }\n)\n\ndefineSlots<{\n /** The user part of a row, for an admin that draws its own chip. */\n user?: (props: { id: IntegerId | null; field: 'createdBy' | 'modifiedBy' }) => unknown\n}>()\n\nconst { t } = useI18n()\nconst slots = useSlots()\n\nconst hasDate = (value: string | null | undefined) => !isUndefined(value) && !isNull(value) && value !== ''\n\n// `undefined` is a field the backend does not send (no user tracking),\n// so it is hidden. `null` is sent empty, and the chip shows it as empty.\nconst userShown = (hidden: boolean, id: IntegerId | null | undefined) =>\n !hidden && !isUndefined(id) && (!!props.users || !!slots.user)\n\nconst createdAtShown = computed(() => !props.hideCreatedAt && hasDate(props.data.createdAt))\nconst modifiedAtShown = computed(() => !props.hideModifiedAt && hasDate(props.data.modifiedAt))\nconst createdByShown = computed(() => userShown(props.hideCreatedBy, props.data.createdBy))\nconst modifiedByShown = computed(() => userShown(props.hideModifiedBy, props.data.modifiedBy))\n\n// The rows fetch their users themselves. Record loads do not fill the cache, and a save changes `modifiedBy`.\n// Reads `props.data` on every run because a store replaces the whole record after\n// a fetch or save. `defineCached` debounces, so chips on a page share one request.\nwatch(\n [\n () => props.data.createdBy,\n () => props.data.modifiedBy,\n () => props.hideCreatedBy,\n () => props.hideModifiedBy,\n () => props.users,\n ],\n ([createdBy, modifiedBy, hideCreatedBy, hideModifiedBy, users]) => {\n if (!users) return\n const ids = [hideCreatedBy ? null : createdBy, hideModifiedBy ? null : modifiedBy].filter(\n (id): id is IntegerId => !!id\n )\n if (ids.length === 0) return\n users.addToCachedUsers(ids)\n users.fetchCachedUsers()\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <ARow\n v-if=\"createdAtShown || createdByShown\"\n :title=\"t('common.model.tracking.created')\"\n >\n <div class=\"d-flex flex-wrap align-center gc-2 gr-1\">\n <ADatetime\n v-if=\"createdAtShown\"\n :date-time=\"data.createdAt ?? null\"\n />\n <slot\n v-if=\"createdByShown\"\n :id=\"data.createdBy || null\"\n name=\"user\"\n field=\"createdBy\"\n >\n <ACachedUserChip\n v-if=\"users\"\n :id=\"data.createdBy\"\n :get-cached-fn=\"users.getCachedUser\"\n :route-name=\"userRouteName\"\n :external-url-template=\"userExternalUrlTemplate\"\n :title-fn=\"userTitleFn\"\n />\n </slot>\n </div>\n </ARow>\n <ARow\n v-if=\"modifiedAtShown || modifiedByShown\"\n :title=\"t('common.model.tracking.modified')\"\n >\n <div class=\"d-flex flex-wrap align-center gc-2 gr-1\">\n <ADatetime\n v-if=\"modifiedAtShown\"\n :date-time=\"data.modifiedAt ?? null\"\n />\n <slot\n v-if=\"modifiedByShown\"\n :id=\"data.modifiedBy || null\"\n name=\"user\"\n field=\"modifiedBy\"\n >\n <ACachedUserChip\n v-if=\"users\"\n :id=\"data.modifiedBy\"\n :get-cached-fn=\"users.getCachedUser\"\n :route-name=\"userRouteName\"\n :external-url-template=\"userExternalUrlTemplate\"\n :title-fn=\"userTitleFn\"\n />\n </slot>\n </div>\n </ARow>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AUserAndTimeTrackingFields.js","names":["AUserAndTimeTrackingFields_vue_vue_type_script_setup_true_lang_default","AUserAndTimeTrackingFields_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AUserAndTimeTrackingFields.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_Fragment","_createBlock","ARow","_unref","_withCtx","_createElementVNode","ADatetime","_createCommentVNode","_renderSlot","ACachedUserChip","ARow_default","ADatetime_default","ACachedUserChip_default","_hoisted_1","_hoisted_2","AUserAndTimeTrackingFields_vue_vue_type_script_setup_true_lang_default","props","__props","useI18n","slots","useSlots","hasDate","isUndefined","value","isNull","userShown","hidden","id","createdAtShown","computed","modifiedAtShown","createdByShown","modifiedByShown","watch","createdBy","modifiedBy","hideCreatedBy","hideModifiedBy","users","ids","openBlock","createElementBlock","Fragment","createBlock","unref","t","withCtx","createElementVNode","createCommentVNode","renderSlot","_ctx"],"sources":["../../../../src/domains/ui/components/AUserAndTimeTrackingFields.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, useSlots, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ARow from '@/domains/ui/components/ARow.vue'\nimport ADatetime from '@/domains/ui/datetime/components/ADatetime.vue'\nimport ACachedUserChip from '@/domains/cached/components/ACachedUserChip.vue'\nimport type { UserAndTimeTrackingData, UserAndTimeTrackingUsers } from '@/shared/types/UserAndTimeTracking'\nimport type { CachedItem } from '@/domains/cached/composables/defineCached'\nimport type { IntegerId } from '@/shared/types/common'\nimport { isNull, isUndefined } from '@/shared/utils/common'\n\n/**\n * Created and modified, when and by whom, for a detail or edit form.\n * Admins use it through their own component from `createUserAndTimeTrackingFields`, which\n * supplies the user cache and user detail route. Without `users` it draws only the dates.\n */\nconst props = withDefaults(\n defineProps<{\n data: UserAndTimeTrackingData\n users?: UserAndTimeTrackingUsers | undefined\n userRouteName?: string | undefined\n userExternalUrlTemplate?: string | undefined\n // `any`: an admin's label reads its own user (a nickname), which `AnzuUserMinimal` does not have.\n userTitleFn?: ((user: CachedItem<any>) => string) | undefined\n hideCreatedAt?: boolean\n hideModifiedAt?: boolean\n hideCreatedBy?: boolean\n hideModifiedBy?: boolean\n }>(),\n {\n users: undefined,\n userRouteName: undefined,\n userExternalUrlTemplate: undefined,\n userTitleFn: undefined,\n hideCreatedAt: false,\n hideModifiedAt: false,\n hideCreatedBy: false,\n hideModifiedBy: false,\n }\n)\n\ndefineSlots<{\n /** The user part of a row, for an admin that draws its own chip. */\n user?: (props: { id: IntegerId | null; field: 'createdBy' | 'modifiedBy' }) => unknown\n}>()\n\nconst { t } = useI18n()\nconst slots = useSlots()\n\nconst hasDate = (value: string | null | undefined) => !isUndefined(value) && !isNull(value) && value !== ''\n\n// `undefined` is a field the backend does not send (no user tracking),\n// so it is hidden. `null` is sent empty, and the chip shows it as empty.\nconst userShown = (hidden: boolean, id: IntegerId | null | undefined) =>\n !hidden && !isUndefined(id) && (!!props.users || !!slots.user)\n\nconst createdAtShown = computed(() => !props.hideCreatedAt && hasDate(props.data.createdAt))\nconst modifiedAtShown = computed(() => !props.hideModifiedAt && hasDate(props.data.modifiedAt))\nconst createdByShown = computed(() => userShown(props.hideCreatedBy, props.data.createdBy))\nconst modifiedByShown = computed(() => userShown(props.hideModifiedBy, props.data.modifiedBy))\n\n// The rows fetch their users themselves. Record loads do not fill the cache, and a save changes `modifiedBy`.\n// Reads `props.data` on every run because a store replaces the whole record after\n// a fetch or save. `defineCached` debounces, so chips on a page share one request.\nwatch(\n [\n () => props.data.createdBy,\n () => props.data.modifiedBy,\n () => props.hideCreatedBy,\n () => props.hideModifiedBy,\n () => props.users,\n ],\n ([createdBy, modifiedBy, hideCreatedBy, hideModifiedBy, users]) => {\n if (!users) return\n const ids = [hideCreatedBy ? null : createdBy, hideModifiedBy ? null : modifiedBy].filter(\n (id): id is IntegerId => !!id\n )\n if (ids.length === 0) return\n users.addToCachedUsers(ids)\n users.fetchCachedUsers()\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <ARow\n v-if=\"createdAtShown || createdByShown\"\n :title=\"t('common.model.tracking.created')\"\n >\n <div class=\"d-flex flex-wrap align-center gc-2 gr-1\">\n <ADatetime\n v-if=\"createdAtShown\"\n :date-time=\"data.createdAt ?? null\"\n />\n <slot\n v-if=\"createdByShown\"\n :id=\"data.createdBy || null\"\n name=\"user\"\n field=\"createdBy\"\n >\n <ACachedUserChip\n v-if=\"users\"\n :id=\"data.createdBy\"\n :get-cached-fn=\"users.getCachedUser\"\n :route-name=\"userRouteName\"\n :external-url-template=\"userExternalUrlTemplate\"\n :title-fn=\"userTitleFn\"\n />\n </slot>\n </div>\n </ARow>\n <ARow\n v-if=\"modifiedAtShown || modifiedByShown\"\n :title=\"t('common.model.tracking.modified')\"\n >\n <div class=\"d-flex flex-wrap align-center gc-2 gr-1\">\n <ADatetime\n v-if=\"modifiedAtShown\"\n :date-time=\"data.modifiedAt ?? null\"\n />\n <slot\n v-if=\"modifiedByShown\"\n :id=\"data.modifiedBy || null\"\n name=\"user\"\n field=\"modifiedBy\"\n >\n <ACachedUserChip\n v-if=\"users\"\n :id=\"data.modifiedBy\"\n :get-cached-fn=\"users.getCachedUser\"\n :route-name=\"userRouteName\"\n :external-url-template=\"userExternalUrlTemplate\"\n :title-fn=\"userTitleFn\"\n />\n </slot>\n </div>\n </ARow>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBA,IAAMkB,IAAQC,GA8BR,EAAE,SAAMC,EAAQ,GAChBC,IAAQC,EAAS,GAEjBC,KAAW,MAAqC,CAACC,EAAYC,CAAK,KAAK,CAACC,EAAOD,CAAK,KAAKA,MAAU,IAInGE,KAAa,GAAiB,MAClC,CAACC,KAAU,CAACJ,EAAYK,CAAE,MAAM,CAAC,CAACX,EAAM,SAAS,CAAC,CAACG,EAAM,OAErDS,IAAiBC,QAAe,CAACb,EAAM,iBAAiBK,EAAQL,EAAM,KAAK,SAAS,CAAC,GACrFc,IAAkBD,QAAe,CAACb,EAAM,kBAAkBK,EAAQL,EAAM,KAAK,UAAU,CAAC,GACxFe,IAAiBF,QAAeJ,EAAUT,EAAM,eAAeA,EAAM,KAAK,SAAS,CAAC,GACpFgB,IAAkBH,QAAeJ,EAAUT,EAAM,gBAAgBA,EAAM,KAAK,UAAU,CAAC;E,OAK7FiB,EACE;SACQjB,EAAM,KAAK;SACXA,EAAM,KAAK;SACXA,EAAM;SACNA,EAAM;SACNA,EAAM;EACd,IACC,CAACkB,GAAWC,GAAYC,GAAeC,GAAgBC,OAAW;GACjE,IAAI,CAACA,GAAO;GACZ,IAAMC,IAAM,CAACH,IAAgB,OAAOF,GAAWG,IAAiB,OAAOF,CAAU,CAAC,CAAC,QAChF,MAAwB,CAAC,CAACR,CAC7B;GACA,AAAIY,EAAI,WAAW,MACnBD,EAAM,iBAAiBC,CAAG,GAC1BD,EAAM,iBAAiB;EACzB,GACA,EAAE,WAAW,GAAK,CACpB,I,2BAKUV,EAAA,SAAkBG,EAAA,SAD1BjC,EAAA,GAAAG,EAyBOC,GAAA;;GAvBJ,OAAOC,EAAA0C,CAAA,CAAC,CAAA,+BAAA;;GAET,SAAAzC,QAoBM,CApBNC,EAoBM,OApBNQ,GAoBM,CAlBIe,EAAA,SADR9B,EAAA,GAAAG,EAGEK,GAAA;;IADC,aAAWW,EAAA,KAAK,aAAS;G,yCAGpBc,EAAA,QADRvB,EAcO0C,EAAA,QAAA,QAAA;IAZJ,IAAIjC,EAAA,KAAK,aAAS;IAEnB,OAAM;GAJR,SAcO,CAPGA,EAAA,SADRnB,EAAA,GAAAG,EAOEQ,GAAA;;IALC,IAAIQ,EAAA,KAAK;IACT,iBAAeA,EAAA,MAAM;IACrB,cAAYA,EAAA;IACZ,yBAAuBA,EAAA;IACvB,YAAUA,EAAA;;;;;;;;;E,+BAMXa,EAAA,SAAmBE,EAAA,SAD3BlC,EAAA,GAAAG,EAyBOC,GAAA;;GAvBJ,OAAOC,EAAA0C,CAAA,CAAC,CAAA,gCAAA;;GAET,SAAAzC,QAoBM,CApBNC,EAoBM,OApBNS,GAoBM,CAlBIgB,EAAA,SADRhC,EAAA,GAAAG,EAGEK,GAAA;;IADC,aAAWW,EAAA,KAAK,cAAU;G,yCAGrBe,EAAA,QADRxB,EAcO0C,EAAA,QAAA,QAAA;IAZJ,IAAIjC,EAAA,KAAK,cAAU;IAEpB,OAAM;GAJR,SAcO,CAPGA,EAAA,SADRnB,EAAA,GAAAG,EAOEQ,GAAA;;IALC,IAAIQ,EAAA,KAAK;IACT,iBAAeA,EAAA,MAAM;IACrB,cAAYA,EAAA;IACZ,yBAAuBA,EAAA;IACvB,YAAUA,EAAA"}
1
+ {"version":3,"file":"AUserAndTimeTrackingFields.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createBlock","ARow","_unref","_withCtx","_createElementVNode","ADatetime","_renderSlot","ACachedUserChip","ARow_default","ADatetime_default","ACachedUserChip_default","_hoisted_1","_hoisted_2","AUserAndTimeTrackingFields_vue_vue_type_script_setup_true_lang_default","props","__props","useI18n","slots","useSlots","hasDate","isUndefined","value","isNull","userShown","hidden","id","createdAtShown","computed","modifiedAtShown","createdByShown","modifiedByShown","watch","createdBy","modifiedBy","hideCreatedBy","hideModifiedBy","users","ids","openBlock","createElementBlock","Fragment","createBlock","unref","t","withCtx","createElementVNode","createCommentVNode","renderSlot","_ctx"],"sources":["../../../../src/domains/ui/components/AUserAndTimeTrackingFields.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed, useSlots, watch } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport ARow from '@/domains/ui/components/ARow.vue'\nimport ADatetime from '@/domains/ui/datetime/components/ADatetime.vue'\nimport ACachedUserChip from '@/domains/cached/components/ACachedUserChip.vue'\nimport type { UserAndTimeTrackingData, UserAndTimeTrackingUsers } from '@/shared/types/UserAndTimeTracking'\nimport type { CachedItem } from '@/domains/cached/composables/defineCached'\nimport type { IntegerId } from '@/shared/types/common'\nimport { isNull, isUndefined } from '@/shared/utils/common'\n\n/**\n * Created and modified, when and by whom, for a detail or edit form.\n * Admins use it through their own component from `createUserAndTimeTrackingFields`, which\n * supplies the user cache and user detail route. Without `users` it draws only the dates.\n */\nconst props = withDefaults(\n defineProps<{\n data: UserAndTimeTrackingData\n users?: UserAndTimeTrackingUsers | undefined\n userRouteName?: string | undefined\n userExternalUrlTemplate?: string | undefined\n // `any`: an admin's label reads its own user (a nickname), which `AnzuUserMinimal` does not have.\n userTitleFn?: ((user: CachedItem<any>) => string) | undefined\n hideCreatedAt?: boolean\n hideModifiedAt?: boolean\n hideCreatedBy?: boolean\n hideModifiedBy?: boolean\n }>(),\n {\n users: undefined,\n userRouteName: undefined,\n userExternalUrlTemplate: undefined,\n userTitleFn: undefined,\n hideCreatedAt: false,\n hideModifiedAt: false,\n hideCreatedBy: false,\n hideModifiedBy: false,\n }\n)\n\ndefineSlots<{\n /** The user part of a row, for an admin that draws its own chip. */\n user?: (props: { id: IntegerId | null; field: 'createdBy' | 'modifiedBy' }) => unknown\n}>()\n\nconst { t } = useI18n()\nconst slots = useSlots()\n\nconst hasDate = (value: string | null | undefined) => !isUndefined(value) && !isNull(value) && value !== ''\n\n// `undefined` is a field the backend does not send (no user tracking),\n// so it is hidden. `null` is sent empty, and the chip shows it as empty.\nconst userShown = (hidden: boolean, id: IntegerId | null | undefined) =>\n !hidden && !isUndefined(id) && (!!props.users || !!slots.user)\n\nconst createdAtShown = computed(() => !props.hideCreatedAt && hasDate(props.data.createdAt))\nconst modifiedAtShown = computed(() => !props.hideModifiedAt && hasDate(props.data.modifiedAt))\nconst createdByShown = computed(() => userShown(props.hideCreatedBy, props.data.createdBy))\nconst modifiedByShown = computed(() => userShown(props.hideModifiedBy, props.data.modifiedBy))\n\n// The rows fetch their users themselves. Record loads do not fill the cache, and a save changes `modifiedBy`.\n// Reads `props.data` on every run because a store replaces the whole record after\n// a fetch or save. `defineCached` debounces, so chips on a page share one request.\nwatch(\n [\n () => props.data.createdBy,\n () => props.data.modifiedBy,\n () => props.hideCreatedBy,\n () => props.hideModifiedBy,\n () => props.users,\n ],\n ([createdBy, modifiedBy, hideCreatedBy, hideModifiedBy, users]) => {\n if (!users) return\n const ids = [hideCreatedBy ? null : createdBy, hideModifiedBy ? null : modifiedBy].filter(\n (id): id is IntegerId => !!id\n )\n if (ids.length === 0) return\n users.addToCachedUsers(ids)\n users.fetchCachedUsers()\n },\n { immediate: true }\n)\n</script>\n\n<template>\n <ARow\n v-if=\"createdAtShown || createdByShown\"\n :title=\"t('common.model.tracking.created')\"\n >\n <div class=\"d-flex flex-wrap align-center gc-2 gr-1\">\n <ADatetime\n v-if=\"createdAtShown\"\n :date-time=\"data.createdAt ?? null\"\n />\n <slot\n v-if=\"createdByShown\"\n :id=\"data.createdBy || null\"\n name=\"user\"\n field=\"createdBy\"\n >\n <ACachedUserChip\n v-if=\"users\"\n :id=\"data.createdBy\"\n :get-cached-fn=\"users.getCachedUser\"\n :route-name=\"userRouteName\"\n :external-url-template=\"userExternalUrlTemplate\"\n :title-fn=\"userTitleFn\"\n />\n </slot>\n </div>\n </ARow>\n <ARow\n v-if=\"modifiedAtShown || modifiedByShown\"\n :title=\"t('common.model.tracking.modified')\"\n >\n <div class=\"d-flex flex-wrap align-center gc-2 gr-1\">\n <ADatetime\n v-if=\"modifiedAtShown\"\n :date-time=\"data.modifiedAt ?? null\"\n />\n <slot\n v-if=\"modifiedByShown\"\n :id=\"data.modifiedBy || null\"\n name=\"user\"\n field=\"modifiedBy\"\n >\n <ACachedUserChip\n v-if=\"users\"\n :id=\"data.modifiedBy\"\n :get-cached-fn=\"users.getCachedUser\"\n :route-name=\"userRouteName\"\n :external-url-template=\"userExternalUrlTemplate\"\n :title-fn=\"userTitleFn\"\n />\n </slot>\n </div>\n </ARow>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgBA,IAAMe,IAAQC,GA8BR,EAAE,SAAMC,EAAQ,GAChBC,IAAQC,EAAS,GAEjBC,KAAW,MAAqC,CAACC,EAAYC,CAAK,KAAK,CAACC,EAAOD,CAAK,KAAKA,MAAU,IAInGE,KAAa,GAAiB,MAClC,CAACC,KAAU,CAACJ,EAAYK,CAAE,MAAM,CAAC,CAACX,EAAM,SAAS,CAAC,CAACG,EAAM,OAErDS,IAAiBC,QAAe,CAACb,EAAM,iBAAiBK,EAAQL,EAAM,KAAK,SAAS,CAAC,GACrFc,IAAkBD,QAAe,CAACb,EAAM,kBAAkBK,EAAQL,EAAM,KAAK,UAAU,CAAC,GACxFe,IAAiBF,QAAeJ,EAAUT,EAAM,eAAeA,EAAM,KAAK,SAAS,CAAC,GACpFgB,IAAkBH,QAAeJ,EAAUT,EAAM,gBAAgBA,EAAM,KAAK,UAAU,CAAC;E,OAK7FiB,EACE;SACQjB,EAAM,KAAK;SACXA,EAAM,KAAK;SACXA,EAAM;SACNA,EAAM;SACNA,EAAM;EACd,IACC,CAACkB,GAAWC,GAAYC,GAAeC,GAAgBC,OAAW;GACjE,IAAI,CAACA,GAAO;GACZ,IAAMC,IAAM,CAACH,IAAgB,OAAOF,GAAWG,IAAiB,OAAOF,CAAU,CAAC,CAAC,QAChF,MAAwB,CAAC,CAACR,CAC7B;GACA,AAAIY,EAAI,WAAW,MACnBD,EAAM,iBAAiBC,CAAG,GAC1BD,EAAM,iBAAiB;EACzB,GACA,EAAE,WAAW,GAAK,CACpB,I,2BAKUV,EAAA,SAAkBG,EAAA,SAD1B9B,EAAA,GAAAC,EAyBOC,GAAA;;GAvBJ,OAAOC,EAAAyC,CAAA,CAAC,CAAA,+BAAA;;GAET,SAAAxC,QAoBM,CApBNC,EAoBM,OApBNO,GAoBM,CAlBIe,EAAA,SADR3B,EAAA,GAAAC,EAGEK,GAAA;;IADC,aAAWU,EAAA,KAAK,aAAS;G,yCAGpBc,EAAA,QADRvB,EAcO0C,EAAA,QAAA,QAAA;IAZJ,IAAIjC,EAAA,KAAK,aAAS;IAEnB,OAAM;GAJR,SAcO,CAPGA,EAAA,SADRhB,EAAA,GAAAC,EAOEO,GAAA;;IALC,IAAIQ,EAAA,KAAK;IACT,iBAAeA,EAAA,MAAM;IACrB,cAAYA,EAAA;IACZ,yBAAuBA,EAAA;IACvB,YAAUA,EAAA;;;;;;;;;E,+BAMXa,EAAA,SAAmBE,EAAA,SAD3B/B,EAAA,GAAAC,EAyBOC,GAAA;;GAvBJ,OAAOC,EAAAyC,CAAA,CAAC,CAAA,gCAAA;;GAET,SAAAxC,QAoBM,CApBNC,EAoBM,OApBNQ,GAoBM,CAlBIgB,EAAA,SADR7B,EAAA,GAAAC,EAGEK,GAAA;;IADC,aAAWU,EAAA,KAAK,cAAU;G,yCAGrBe,EAAA,QADRxB,EAcO0C,EAAA,QAAA,QAAA;IAZJ,IAAIjC,EAAA,KAAK,cAAU;IAEpB,OAAM;GAJR,SAcO,CAPGA,EAAA,SADRhB,EAAA,GAAAC,EAOEO,GAAA;;IALC,IAAIQ,EAAA,KAAK;IACT,iBAAeA,EAAA,MAAM;IACrB,cAAYA,EAAA;IACZ,yBAAuBA,EAAA;IACvB,YAAUA,EAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"ADatetime.js","names":["_sfc_main","ADatetime_vue_vue_type_script_setup_true_lang_default","ADatetime_default"],"sources":["../../../../../src/domains/ui/datetime/components/ADatetime.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { computed } from 'vue'\nimport { dateTimePretty } from '@/shared/utils/datetime'\nimport type { DatetimeUTCNullable } from '@/shared/types/common'\n\nconst props = withDefaults(\n defineProps<{\n dateTime: DatetimeUTCNullable\n edgeDateValue?: string\n }>(),\n {\n edgeDateValue: 'n/a',\n }\n)\n\nconst pretty = computed(() => {\n return dateTimePretty(props.dateTime, props.edgeDateValue)\n})\n</script>\n\n<template>\n {{ pretty }}\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"ADatetime.js","names":["ADatetime_vue_vue_type_script_setup_true_lang_default","ADatetime_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"ADatetimePicker.js","names":["_sfc_main","ADatetimePicker_vue_vue_type_script_setup_true_lang_default","_plugin_vue_export_helper_default","ADatetimePicker_default"],"sources":["../../../../../src/domains/ui/datetime/components/ADatetimePicker.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { DatetimeUTC } from '@/shared/types/common'\nimport { computed, nextTick, ref, toRaw, useTemplateRef, watch } from 'vue'\nimport { isDefined, isNull, isUndefined } from '@/shared/utils/common'\nimport useVuelidate, { type ErrorObject } from '@vuelidate/core'\nimport { useValidate } from '@/shared/validators/vuelidate/useValidate'\nimport TimePicker from '@/domains/ui/datetime/components/TimePicker.vue'\nimport type { Dayjs } from 'dayjs'\nimport {\n applyCalendarDate,\n type DatetimePickerType,\n emptyBaseValue,\n formatDisplay,\n isSameValue,\n parseModel,\n parseTyped,\n placeholderFor,\n serialize,\n toCalendarDate,\n todayValue,\n} from '@/shared/utils/datetimePickerValue'\nimport { useI18n } from 'vue-i18n'\nimport type { VTextField } from 'vuetify/components/VTextField'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DatetimeUTC | null | undefined\n type?: DatetimePickerType\n label?: string\n hideLabel?: boolean\n clearable?: boolean\n disabled?: boolean\n hideDetails?: boolean\n required?: boolean\n hideSetToNow?: boolean\n placeholder?: string\n dataCy?: string\n defaultValue?: DatetimeUTC | null | undefined\n errorMessages?: string[]\n lastMinuteMoment?: boolean\n readonly?: boolean\n }>(),\n {\n type: 'datetime',\n label: '',\n hideLabel: false,\n clearable: false,\n disabled: false,\n hideDetails: false,\n required: false,\n hideSetToNow: false,\n placeholder: '',\n dataCy: '',\n defaultValue: null,\n errorMessages: undefined,\n lastMinuteMoment: false,\n // When unset, the text field follows a readonly `VForm` around it. The calendar and clearing follow only this prop.\n readonly: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'blur'): void\n (e: 'focus'): void\n (e: 'update:modelValue', data: DatetimeUTC | null | undefined): void\n (e: 'open'): void\n (e: 'close'): void\n (e: 'afterClear'): void\n}>()\n\nconst pickerOpened = ref(false)\nconst pickerKey = ref(0)\nconst timeKey = ref(0)\nconst timePickerInstance = useTemplateRef<InstanceType<typeof TimePicker>>('timePickerInstance')\nconst inputInstance = useTemplateRef<InstanceType<typeof VTextField>>('inputInstance')\nconst confirmRefButton = useTemplateRef<HTMLButtonElement>('confirmRefButton')\nconst textFieldValue = ref('')\n\nconst datePickerValue = ref<null | Date>(null)\nconst timePickerValue = ref<null | { hours: number; minutes: number }>(null)\nconst datetimeInternal = ref<null | Dayjs>(null)\n\nconst { t } = useI18n()\n\nconst placeholderComputed = computed(() => {\n return props.placeholder.length ? props.placeholder : placeholderFor(props.type)\n})\n\nconst { requiredIf } = useValidate()\nconst rules = computed(() => {\n return {\n textFieldValue: {\n required: requiredIf(props.required),\n },\n }\n})\nconst v$ = useVuelidate(rules, { textFieldValue })\n\nconst tryEmitNewValue = (newValue: DatetimeUTC | null | undefined) => {\n if (newValue === props.modelValue) return\n emit('update:modelValue', newValue)\n}\n\nconst updateDateAndTimePickerOnlyWhenChanged = (newValue: Dayjs | null) => {\n if (isNull(newValue)) return\n if (\n props.type !== 'date' &&\n (isNull(timePickerValue.value) ||\n newValue.hour() !== timePickerValue.value.hours ||\n newValue.minute() !== timePickerValue.value.minutes)\n ) {\n timePickerValue.value = { hours: newValue.hour(), minutes: newValue.minute() }\n }\n if (\n isNull(datePickerValue.value) ||\n newValue.year() !== datePickerValue.value.getFullYear() ||\n newValue.month() !== datePickerValue.value.getMonth() ||\n newValue.date() !== datePickerValue.value.getDate()\n ) {\n datePickerValue.value = toCalendarDate(newValue, props.type)\n }\n}\n\nwatch(\n () => props.modelValue,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n datetimeInternal.value = parseModel(newValue, props.type, props.lastMinuteMoment)\n },\n { immediate: true }\n)\n\nconst watchDatePicker = (newValue: null | Date, internal: Dayjs) => {\n if (isNull(newValue)) return internal\n return applyCalendarDate(internal, newValue, props.type)\n}\n\nconst watchTimePicker = (newValue: null | { hours: number; minutes: number }, internal: Dayjs) => {\n if (isNull(newValue) || props.type === 'date') return internal\n return internal.set('hour', newValue.hours).set('minute', newValue.minutes)\n}\n\nwatch([timePickerValue, datePickerValue], ([newTimePickerValue, newDatePickerValue]) => {\n let newDate: Dayjs | null = null\n\n if (!isNull(datetimeInternal.value)) {\n newDate = datetimeInternal.value\n } else {\n newDate =\n parseModel(props.modelValue, props.type, props.lastMinuteMoment) ??\n emptyBaseValue(props.type, props.lastMinuteMoment)\n }\n\n newDate = watchTimePicker(newTimePickerValue, newDate!)\n newDate = watchDatePicker(newDatePickerValue, newDate!)\n if (newDate.isSame(toRaw(datetimeInternal.value))) return\n datetimeInternal.value = newDate\n})\n\nwatch(\n datetimeInternal,\n (newValue) => {\n if (isNull(newValue)) {\n textFieldValue.value = ''\n tryEmitNewValue(null)\n return\n }\n const newUtcValue = serialize(newValue, props.type)\n textFieldValue.value = formatDisplay(newValue, props.type)\n updateDateAndTimePickerOnlyWhenChanged(newValue)\n tryEmitNewValue(newUtcValue)\n },\n { immediate: true }\n)\n\nwatch(pickerOpened, (newValue) => {\n if (newValue) {\n onTextFieldBlur()\n if (isNull(datetimeInternal.value) && (isNull(props.defaultValue) || isUndefined(props.defaultValue))) {\n datetimeInternal.value = todayValue(props.type, props.lastMinuteMoment)\n }\n emit('open')\n return\n }\n emit('close')\n})\n\nconst errorMessageComputed = computed(() => {\n if (isDefined(props.errorMessages)) return props.errorMessages\n if (v$.value.textFieldValue.$errors.length)\n return [v$.value.textFieldValue.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst onTextFieldBlur = () => {\n const filtered = textFieldValue.value.replace(/[^\\s\\d.:]/g, '').trim()\n if (filtered.length === 0 && !props.required) {\n datetimeInternal.value = parseModel(props.defaultValue, props.type, props.lastMinuteMoment)\n emit('blur')\n return\n }\n // Keeps the seconds from the original model.\n const seconds = parseModel(props.modelValue, props.type, props.lastMinuteMoment)?.second() ?? 0\n const reparsed = parseTyped(filtered, props.type, seconds)\n if (!isNull(reparsed)) {\n // A day click blurs this field before the picker emits, so re-assigning an unchanged datetime\n // would push the stale date back into it.\n if (isSameValue(reparsed, toRaw(datetimeInternal.value), props.type)) {\n textFieldValue.value = formatDisplay(reparsed, props.type)\n } else {\n datetimeInternal.value = reparsed\n }\n v$.value.textFieldValue.$touch()\n emit('blur')\n return\n }\n if (!isNull(datetimeInternal.value)) {\n textFieldValue.value = formatDisplay(datetimeInternal.value, props.type)\n }\n v$.value.textFieldValue.$touch()\n emit('blur')\n}\n\nconst onClear = () => {\n if (isNull(props.defaultValue) || isUndefined(props.defaultValue)) {\n datetimeInternal.value = null\n datePickerValue.value = null\n timePickerValue.value = null\n emit('afterClear')\n return\n }\n datetimeInternal.value = parseModel(props.defaultValue, props.type, props.lastMinuteMoment)\n emit('afterClear')\n}\n\nconst close = () => {\n pickerOpened.value = false\n inputInstance.value?.focus()\n inputInstance.value?.blur()\n emit('close')\n emit('blur')\n}\n\nconst onTextFieldFocus = () => {\n emit('focus')\n}\n\n// The calendar icon is a button. Enter and Space toggle the calendar like a click. Its menu takes only the arrow keys.\n// The keyup of that Enter stays on the icon. Otherwise the field's Enter handler would report leaving a second time.\nconst togglePicker = () => {\n pickerOpened.value = !pickerOpened.value\n}\n\nconst onTimePickerEnterKeyup = () => {\n pickerOpened.value = false\n}\n\nconst onFocusConfirm = () => {\n confirmRefButton.value?.focus()\n}\n\nconst onDatePickerUpdate = () => {\n if (props.type === 'date') {\n // The value travels through pre-flush watchers, so closing now would emit blur and release the\n // collab lock with the previous value still in the model.\n nextTick(close)\n return\n }\n timePickerInstance.value?.focusHour()\n}\n\nconst now = () => {\n datetimeInternal.value = todayValue(props.type, props.lastMinuteMoment)\n nextTick(() => {\n // Vuetify navigates the calendar to a new value on its own, but skips an unchanged day, so a\n // value that is already today would leave the user on whatever month they paged to.\n pickerKey.value++\n timeKey.value++\n })\n}\n</script>\n\n<template>\n <VTextField\n ref=\"inputInstance\"\n v-model=\"textFieldValue\"\n :error-messages=\"errorMessageComputed\"\n :persistent-placeholder=\"true\"\n :placeholder=\"placeholderComputed\"\n class=\"a-datetime-picker\"\n :hide-details=\"hideDetails ? true : 'auto'\"\n :data-cy=\"dataCy.length ? dataCy : undefined\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n autocomplete=\"off\"\n @blur=\"onTextFieldBlur\"\n @focus=\"onTextFieldFocus\"\n @keyup.enter=\"onTextFieldBlur\"\n >\n <template #append-inner>\n <VIcon\n v-if=\"clearable && !readonly && defaultValue !== modelValue\"\n class=\"a-datetime-picker__clearable-icon\"\n icon=\"mdi-close-circle\"\n :aria-label=\"t('common.button.clear')\"\n @click.stop=\"onClear\"\n />\n <VMenu\n v-if=\"!disabled && !readonly\"\n location=\"bottom end\"\n origin=\"top end\"\n :close-on-content-click=\"false\"\n :model-value=\"pickerOpened\"\n @update:model-value=\"(value: boolean) => (pickerOpened = value)\"\n >\n <template #activator=\"{ props: menuProps }\">\n <VIcon\n class=\"a-datetime-picker__calendar-icon\"\n icon=\"mdi-calendar\"\n size=\"small\"\n :aria-label=\"t('$vuetify.datePicker.title')\"\n v-bind=\"menuProps\"\n @keydown.enter.space.prevent=\"togglePicker\"\n @keyup.enter.stop\n />\n </template>\n\n <VCard v-if=\"pickerOpened\">\n <VBtn\n v-tooltip=\"t('common.button.close')\"\n :aria-label=\"t('common.button.close')\"\n icon\n variant=\"text\"\n :width=\"36\"\n :height=\"36\"\n class=\"position-absolute top-0 right-0\"\n @click.stop=\"close\"\n >\n <VIcon\n icon=\"mdi-close\"\n color=\"white\"\n />\n </VBtn>\n <VDatePicker\n :key=\"pickerKey\"\n v-model=\"datePickerValue\"\n class=\"a-datetime-picker-calendar\"\n color=\"primary\"\n show-adjacent-months\n v-bind=\"$attrs\"\n @update:model-value=\"onDatePickerUpdate\"\n />\n <TimePicker\n v-if=\"type !== 'date'\"\n ref=\"timePickerInstance\"\n :key=\"timeKey\"\n v-model=\"timePickerValue\"\n @enter-keyup=\"onTimePickerEnterKeyup\"\n @focus-confirm=\"onFocusConfirm\"\n />\n <div class=\"d-flex\">\n <button\n v-if=\"!hideSetToNow\"\n type=\"button\"\n class=\"a-datetime-picker__bottom-button\"\n tabindex=\"8\"\n @click=\"now\"\n >\n {{ type === 'date' ? t('common.time.today') : t('common.time.now') }}\n </button>\n <button\n ref=\"confirmRefButton\"\n type=\"button\"\n class=\"a-datetime-picker__bottom-button\"\n tabindex=\"7\"\n @click.stop=\"close\"\n >\n {{ t('common.button.confirm') }}\n </button>\n </div>\n </VCard>\n </VMenu>\n\n <div class=\"ml-1\">\n <slot name=\"append-inner\" />\n </div>\n </template>\n <template\n v-if=\"!hideLabel\"\n #label\n >\n {{ label\n }}<span\n v-if=\"required\"\n class=\"a-required-mark\"\n />\n </template>\n </VTextField>\n</template>\n\n<style lang=\"scss\" scoped>\n.a-datetime-picker {\n :deep(.v-field__append-inner .v-icon) {\n cursor: pointer;\n }\n\n &__calendar-icon {\n margin-top: 2px;\n opacity: 0.6 !important;\n }\n\n &__clearable-icon {\n opacity: 0 !important;\n }\n\n &:hover {\n .a-datetime-picker__clearable-icon {\n opacity: 0.6 !important;\n }\n }\n\n &__bottom-button {\n width: 100%;\n text-align: center;\n font-size: 0.86rem;\n font-family: Roboto, sans-serif;\n font-weight: bold;\n line-height: 1.8;\n padding: 6px 0;\n\n &:hover {\n background-color: rgb(0 0 0 / 5%);\n }\n }\n}\n\n.a-datetime-picker-calendar {\n :deep(.v-picker-title) {\n display: none;\n }\n\n :deep(.v-date-picker-header) {\n padding-top: 12px;\n }\n\n :deep(.v-date-picker-month) {\n padding-bottom: 2px;\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"ADatetimePicker.js","names":["ADatetimePicker_vue_vue_type_script_setup_true_lang_default","_plugin_vue_export_helper_default","ADatetimePicker_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"ADatetimePicker.vue_vue_type_script_setup_true_lang.js","names":["$attrs","_openBlock","_createBlock","_component_VTextField","_withKeys","_createSlots","_withCtx","_component_VIcon","_unref","_withModifiers","_createCommentVNode","_component_VMenu","_createVNode","_mergeProps","_component_VCard","_withDirectives","_component_VBtn","_directive_tooltip","_component_VDatePicker","TimePicker","_createElementVNode","_createElementBlock","_toDisplayString","_renderSlot","_createTextVNode","TimePicker_default","useVuelidate","_hoisted_1","_hoisted_2","_hoisted_3","ADatetimePicker_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emit","pickerOpened","ref","pickerKey","timeKey","timePickerInstance","useTemplateRef","inputInstance","confirmRefButton","textFieldValue","datePickerValue","timePickerValue","datetimeInternal","useI18n","placeholderComputed","computed","placeholderFor","useValidate","rules","requiredIf","v$","tryEmitNewValue","newValue","updateDateAndTimePickerOnlyWhenChanged","isNull","toCalendarDate","oldValue","parseModel","watchDatePicker","internal","applyCalendarDate","watchTimePicker","watch","newTimePickerValue","newDatePickerValue","newDate","emptyBaseValue","toRaw","newUtcValue","serialize","formatDisplay","onTextFieldBlur","isUndefined","todayValue","errorMessageComputed","isDefined","item","filtered","seconds","reparsed","parseTyped","isSameValue","onClear","close","onTextFieldFocus","togglePicker","onTimePickerEnterKeyup","onFocusConfirm","onDatePickerUpdate","nextTick","now","openBlock","createBlock","VTextField","_cache","$event","withKeys","createSlots","withCtx","VIcon","unref","t","withModifiers","createCommentVNode","VMenu","value","menuProps","createVNode","mergeProps","VCard","withDirectives","VBtn","Tooltip","VDatePicker","_ctx","createElementVNode","createElementBlock","toDisplayString","renderSlot","createTextVNode"],"sources":["../../../../../src/domains/ui/datetime/components/ADatetimePicker.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { DatetimeUTC } from '@/shared/types/common'\nimport { computed, nextTick, ref, toRaw, useTemplateRef, watch } from 'vue'\nimport { isDefined, isNull, isUndefined } from '@/shared/utils/common'\nimport useVuelidate, { type ErrorObject } from '@vuelidate/core'\nimport { useValidate } from '@/shared/validators/vuelidate/useValidate'\nimport TimePicker from '@/domains/ui/datetime/components/TimePicker.vue'\nimport type { Dayjs } from 'dayjs'\nimport {\n applyCalendarDate,\n type DatetimePickerType,\n emptyBaseValue,\n formatDisplay,\n isSameValue,\n parseModel,\n parseTyped,\n placeholderFor,\n serialize,\n toCalendarDate,\n todayValue,\n} from '@/shared/utils/datetimePickerValue'\nimport { useI18n } from 'vue-i18n'\nimport type { VTextField } from 'vuetify/components/VTextField'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DatetimeUTC | null | undefined\n type?: DatetimePickerType\n label?: string\n hideLabel?: boolean\n clearable?: boolean\n disabled?: boolean\n hideDetails?: boolean\n required?: boolean\n hideSetToNow?: boolean\n placeholder?: string\n dataCy?: string\n defaultValue?: DatetimeUTC | null | undefined\n errorMessages?: string[]\n lastMinuteMoment?: boolean\n readonly?: boolean\n }>(),\n {\n type: 'datetime',\n label: '',\n hideLabel: false,\n clearable: false,\n disabled: false,\n hideDetails: false,\n required: false,\n hideSetToNow: false,\n placeholder: '',\n dataCy: '',\n defaultValue: null,\n errorMessages: undefined,\n lastMinuteMoment: false,\n // When unset, the text field follows a readonly `VForm` around it. The calendar and clearing follow only this prop.\n readonly: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'blur'): void\n (e: 'focus'): void\n (e: 'update:modelValue', data: DatetimeUTC | null | undefined): void\n (e: 'open'): void\n (e: 'close'): void\n (e: 'afterClear'): void\n}>()\n\nconst pickerOpened = ref(false)\nconst pickerKey = ref(0)\nconst timeKey = ref(0)\nconst timePickerInstance = useTemplateRef<InstanceType<typeof TimePicker>>('timePickerInstance')\nconst inputInstance = useTemplateRef<InstanceType<typeof VTextField>>('inputInstance')\nconst confirmRefButton = useTemplateRef<HTMLButtonElement>('confirmRefButton')\nconst textFieldValue = ref('')\n\nconst datePickerValue = ref<null | Date>(null)\nconst timePickerValue = ref<null | { hours: number; minutes: number }>(null)\nconst datetimeInternal = ref<null | Dayjs>(null)\n\nconst { t } = useI18n()\n\nconst placeholderComputed = computed(() => {\n return props.placeholder.length ? props.placeholder : placeholderFor(props.type)\n})\n\nconst { requiredIf } = useValidate()\nconst rules = computed(() => {\n return {\n textFieldValue: {\n required: requiredIf(props.required),\n },\n }\n})\nconst v$ = useVuelidate(rules, { textFieldValue })\n\nconst tryEmitNewValue = (newValue: DatetimeUTC | null | undefined) => {\n if (newValue === props.modelValue) return\n emit('update:modelValue', newValue)\n}\n\nconst updateDateAndTimePickerOnlyWhenChanged = (newValue: Dayjs | null) => {\n if (isNull(newValue)) return\n if (\n props.type !== 'date' &&\n (isNull(timePickerValue.value) ||\n newValue.hour() !== timePickerValue.value.hours ||\n newValue.minute() !== timePickerValue.value.minutes)\n ) {\n timePickerValue.value = { hours: newValue.hour(), minutes: newValue.minute() }\n }\n if (\n isNull(datePickerValue.value) ||\n newValue.year() !== datePickerValue.value.getFullYear() ||\n newValue.month() !== datePickerValue.value.getMonth() ||\n newValue.date() !== datePickerValue.value.getDate()\n ) {\n datePickerValue.value = toCalendarDate(newValue, props.type)\n }\n}\n\nwatch(\n () => props.modelValue,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n datetimeInternal.value = parseModel(newValue, props.type, props.lastMinuteMoment)\n },\n { immediate: true }\n)\n\nconst watchDatePicker = (newValue: null | Date, internal: Dayjs) => {\n if (isNull(newValue)) return internal\n return applyCalendarDate(internal, newValue, props.type)\n}\n\nconst watchTimePicker = (newValue: null | { hours: number; minutes: number }, internal: Dayjs) => {\n if (isNull(newValue) || props.type === 'date') return internal\n return internal.set('hour', newValue.hours).set('minute', newValue.minutes)\n}\n\nwatch([timePickerValue, datePickerValue], ([newTimePickerValue, newDatePickerValue]) => {\n let newDate: Dayjs | null = null\n\n if (!isNull(datetimeInternal.value)) {\n newDate = datetimeInternal.value\n } else {\n newDate =\n parseModel(props.modelValue, props.type, props.lastMinuteMoment) ??\n emptyBaseValue(props.type, props.lastMinuteMoment)\n }\n\n newDate = watchTimePicker(newTimePickerValue, newDate!)\n newDate = watchDatePicker(newDatePickerValue, newDate!)\n if (newDate.isSame(toRaw(datetimeInternal.value))) return\n datetimeInternal.value = newDate\n})\n\nwatch(\n datetimeInternal,\n (newValue) => {\n if (isNull(newValue)) {\n textFieldValue.value = ''\n tryEmitNewValue(null)\n return\n }\n const newUtcValue = serialize(newValue, props.type)\n textFieldValue.value = formatDisplay(newValue, props.type)\n updateDateAndTimePickerOnlyWhenChanged(newValue)\n tryEmitNewValue(newUtcValue)\n },\n { immediate: true }\n)\n\nwatch(pickerOpened, (newValue) => {\n if (newValue) {\n onTextFieldBlur()\n if (isNull(datetimeInternal.value) && (isNull(props.defaultValue) || isUndefined(props.defaultValue))) {\n datetimeInternal.value = todayValue(props.type, props.lastMinuteMoment)\n }\n emit('open')\n return\n }\n emit('close')\n})\n\nconst errorMessageComputed = computed(() => {\n if (isDefined(props.errorMessages)) return props.errorMessages\n if (v$.value.textFieldValue.$errors.length)\n return [v$.value.textFieldValue.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst onTextFieldBlur = () => {\n const filtered = textFieldValue.value.replace(/[^\\s\\d.:]/g, '').trim()\n if (filtered.length === 0 && !props.required) {\n datetimeInternal.value = parseModel(props.defaultValue, props.type, props.lastMinuteMoment)\n emit('blur')\n return\n }\n // Keeps the seconds from the original model.\n const seconds = parseModel(props.modelValue, props.type, props.lastMinuteMoment)?.second() ?? 0\n const reparsed = parseTyped(filtered, props.type, seconds)\n if (!isNull(reparsed)) {\n // A day click blurs this field before the picker emits, so re-assigning an unchanged datetime\n // would push the stale date back into it.\n if (isSameValue(reparsed, toRaw(datetimeInternal.value), props.type)) {\n textFieldValue.value = formatDisplay(reparsed, props.type)\n } else {\n datetimeInternal.value = reparsed\n }\n v$.value.textFieldValue.$touch()\n emit('blur')\n return\n }\n if (!isNull(datetimeInternal.value)) {\n textFieldValue.value = formatDisplay(datetimeInternal.value, props.type)\n }\n v$.value.textFieldValue.$touch()\n emit('blur')\n}\n\nconst onClear = () => {\n if (isNull(props.defaultValue) || isUndefined(props.defaultValue)) {\n datetimeInternal.value = null\n datePickerValue.value = null\n timePickerValue.value = null\n emit('afterClear')\n return\n }\n datetimeInternal.value = parseModel(props.defaultValue, props.type, props.lastMinuteMoment)\n emit('afterClear')\n}\n\nconst close = () => {\n pickerOpened.value = false\n inputInstance.value?.focus()\n inputInstance.value?.blur()\n emit('close')\n emit('blur')\n}\n\nconst onTextFieldFocus = () => {\n emit('focus')\n}\n\n// The calendar icon is a button. Enter and Space toggle the calendar like a click. Its menu takes only the arrow keys.\n// The keyup of that Enter stays on the icon. Otherwise the field's Enter handler would report leaving a second time.\nconst togglePicker = () => {\n pickerOpened.value = !pickerOpened.value\n}\n\nconst onTimePickerEnterKeyup = () => {\n pickerOpened.value = false\n}\n\nconst onFocusConfirm = () => {\n confirmRefButton.value?.focus()\n}\n\nconst onDatePickerUpdate = () => {\n if (props.type === 'date') {\n // The value travels through pre-flush watchers, so closing now would emit blur and release the\n // collab lock with the previous value still in the model.\n nextTick(close)\n return\n }\n timePickerInstance.value?.focusHour()\n}\n\nconst now = () => {\n datetimeInternal.value = todayValue(props.type, props.lastMinuteMoment)\n nextTick(() => {\n // Vuetify navigates the calendar to a new value on its own, but skips an unchanged day, so a\n // value that is already today would leave the user on whatever month they paged to.\n pickerKey.value++\n timeKey.value++\n })\n}\n</script>\n\n<template>\n <VTextField\n ref=\"inputInstance\"\n v-model=\"textFieldValue\"\n :error-messages=\"errorMessageComputed\"\n :persistent-placeholder=\"true\"\n :placeholder=\"placeholderComputed\"\n class=\"a-datetime-picker\"\n :hide-details=\"hideDetails ? true : 'auto'\"\n :data-cy=\"dataCy.length ? dataCy : undefined\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n autocomplete=\"off\"\n @blur=\"onTextFieldBlur\"\n @focus=\"onTextFieldFocus\"\n @keyup.enter=\"onTextFieldBlur\"\n >\n <template #append-inner>\n <VIcon\n v-if=\"clearable && !readonly && defaultValue !== modelValue\"\n class=\"a-datetime-picker__clearable-icon\"\n icon=\"mdi-close-circle\"\n :aria-label=\"t('common.button.clear')\"\n @click.stop=\"onClear\"\n />\n <VMenu\n v-if=\"!disabled && !readonly\"\n location=\"bottom end\"\n origin=\"top end\"\n :close-on-content-click=\"false\"\n :model-value=\"pickerOpened\"\n @update:model-value=\"(value: boolean) => (pickerOpened = value)\"\n >\n <template #activator=\"{ props: menuProps }\">\n <VIcon\n class=\"a-datetime-picker__calendar-icon\"\n icon=\"mdi-calendar\"\n size=\"small\"\n :aria-label=\"t('$vuetify.datePicker.title')\"\n v-bind=\"menuProps\"\n @keydown.enter.space.prevent=\"togglePicker\"\n @keyup.enter.stop\n />\n </template>\n\n <VCard v-if=\"pickerOpened\">\n <VBtn\n v-tooltip=\"t('common.button.close')\"\n :aria-label=\"t('common.button.close')\"\n icon\n variant=\"text\"\n :width=\"36\"\n :height=\"36\"\n class=\"position-absolute top-0 right-0\"\n @click.stop=\"close\"\n >\n <VIcon\n icon=\"mdi-close\"\n color=\"white\"\n />\n </VBtn>\n <VDatePicker\n :key=\"pickerKey\"\n v-model=\"datePickerValue\"\n class=\"a-datetime-picker-calendar\"\n color=\"primary\"\n show-adjacent-months\n v-bind=\"$attrs\"\n @update:model-value=\"onDatePickerUpdate\"\n />\n <TimePicker\n v-if=\"type !== 'date'\"\n ref=\"timePickerInstance\"\n :key=\"timeKey\"\n v-model=\"timePickerValue\"\n @enter-keyup=\"onTimePickerEnterKeyup\"\n @focus-confirm=\"onFocusConfirm\"\n />\n <div class=\"d-flex\">\n <button\n v-if=\"!hideSetToNow\"\n type=\"button\"\n class=\"a-datetime-picker__bottom-button\"\n tabindex=\"8\"\n @click=\"now\"\n >\n {{ type === 'date' ? t('common.time.today') : t('common.time.now') }}\n </button>\n <button\n ref=\"confirmRefButton\"\n type=\"button\"\n class=\"a-datetime-picker__bottom-button\"\n tabindex=\"7\"\n @click.stop=\"close\"\n >\n {{ t('common.button.confirm') }}\n </button>\n </div>\n </VCard>\n </VMenu>\n\n <div class=\"ml-1\">\n <slot name=\"append-inner\" />\n </div>\n </template>\n <template\n v-if=\"!hideLabel\"\n #label\n >\n {{ label\n }}<span\n v-if=\"required\"\n class=\"a-required-mark\"\n />\n </template>\n </VTextField>\n</template>\n\n<style lang=\"scss\" scoped>\n.a-datetime-picker {\n :deep(.v-field__append-inner .v-icon) {\n cursor: pointer;\n }\n\n &__calendar-icon {\n margin-top: 2px;\n opacity: 0.6 !important;\n }\n\n &__clearable-icon {\n opacity: 0 !important;\n }\n\n &:hover {\n .a-datetime-picker__clearable-icon {\n opacity: 0.6 !important;\n }\n }\n\n &__bottom-button {\n width: 100%;\n text-align: center;\n font-size: 0.86rem;\n font-family: Roboto, sans-serif;\n font-weight: bold;\n line-height: 1.8;\n padding: 6px 0;\n\n &:hover {\n background-color: rgb(0 0 0 / 5%);\n }\n }\n}\n\n.a-datetime-picker-calendar {\n :deep(.v-picker-title) {\n display: none;\n }\n\n :deep(.v-date-picker-header) {\n padding-top: 12px;\n }\n\n :deep(.v-date-picker-month) {\n padding-bottom: 2px;\n }\n}\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"ADatetimePicker.vue_vue_type_script_setup_true_lang.js","names":["$attrs","_openBlock","_createBlock","_component_VTextField","_withKeys","_withCtx","_component_VIcon","_unref","_withModifiers","_component_VMenu","_createVNode","_mergeProps","_component_VCard","_withDirectives","_component_VBtn","_directive_tooltip","_component_VDatePicker","TimePicker","_createElementVNode","_createElementBlock","_toDisplayString","_renderSlot","_createTextVNode","TimePicker_default","useVuelidate","_hoisted_1","_hoisted_2","_hoisted_3","ADatetimePicker_vue_vue_type_script_setup_true_lang_default","__emit","props","__props","emit","pickerOpened","ref","pickerKey","timeKey","timePickerInstance","useTemplateRef","inputInstance","confirmRefButton","textFieldValue","datePickerValue","timePickerValue","datetimeInternal","useI18n","placeholderComputed","computed","placeholderFor","useValidate","rules","requiredIf","v$","tryEmitNewValue","newValue","updateDateAndTimePickerOnlyWhenChanged","isNull","toCalendarDate","oldValue","parseModel","watchDatePicker","internal","applyCalendarDate","watchTimePicker","watch","newTimePickerValue","newDatePickerValue","newDate","emptyBaseValue","toRaw","newUtcValue","serialize","formatDisplay","onTextFieldBlur","isUndefined","todayValue","errorMessageComputed","isDefined","item","filtered","seconds","reparsed","parseTyped","isSameValue","onClear","close","onTextFieldFocus","togglePicker","onTimePickerEnterKeyup","onFocusConfirm","onDatePickerUpdate","nextTick","now","openBlock","createBlock","VTextField","_cache","$event","withKeys","createSlots","withCtx","VIcon","unref","t","withModifiers","createCommentVNode","VMenu","value","menuProps","createVNode","mergeProps","VCard","withDirectives","VBtn","Tooltip","VDatePicker","_ctx","createElementVNode","createElementBlock","toDisplayString","renderSlot","createTextVNode"],"sources":["../../../../../src/domains/ui/datetime/components/ADatetimePicker.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport type { DatetimeUTC } from '@/shared/types/common'\nimport { computed, nextTick, ref, toRaw, useTemplateRef, watch } from 'vue'\nimport { isDefined, isNull, isUndefined } from '@/shared/utils/common'\nimport useVuelidate, { type ErrorObject } from '@vuelidate/core'\nimport { useValidate } from '@/shared/validators/vuelidate/useValidate'\nimport TimePicker from '@/domains/ui/datetime/components/TimePicker.vue'\nimport type { Dayjs } from 'dayjs'\nimport {\n applyCalendarDate,\n type DatetimePickerType,\n emptyBaseValue,\n formatDisplay,\n isSameValue,\n parseModel,\n parseTyped,\n placeholderFor,\n serialize,\n toCalendarDate,\n todayValue,\n} from '@/shared/utils/datetimePickerValue'\nimport { useI18n } from 'vue-i18n'\nimport type { VTextField } from 'vuetify/components/VTextField'\n\nconst props = withDefaults(\n defineProps<{\n modelValue: DatetimeUTC | null | undefined\n type?: DatetimePickerType\n label?: string\n hideLabel?: boolean\n clearable?: boolean\n disabled?: boolean\n hideDetails?: boolean\n required?: boolean\n hideSetToNow?: boolean\n placeholder?: string\n dataCy?: string\n defaultValue?: DatetimeUTC | null | undefined\n errorMessages?: string[]\n lastMinuteMoment?: boolean\n readonly?: boolean\n }>(),\n {\n type: 'datetime',\n label: '',\n hideLabel: false,\n clearable: false,\n disabled: false,\n hideDetails: false,\n required: false,\n hideSetToNow: false,\n placeholder: '',\n dataCy: '',\n defaultValue: null,\n errorMessages: undefined,\n lastMinuteMoment: false,\n // When unset, the text field follows a readonly `VForm` around it. The calendar and clearing follow only this prop.\n readonly: undefined,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'blur'): void\n (e: 'focus'): void\n (e: 'update:modelValue', data: DatetimeUTC | null | undefined): void\n (e: 'open'): void\n (e: 'close'): void\n (e: 'afterClear'): void\n}>()\n\nconst pickerOpened = ref(false)\nconst pickerKey = ref(0)\nconst timeKey = ref(0)\nconst timePickerInstance = useTemplateRef<InstanceType<typeof TimePicker>>('timePickerInstance')\nconst inputInstance = useTemplateRef<InstanceType<typeof VTextField>>('inputInstance')\nconst confirmRefButton = useTemplateRef<HTMLButtonElement>('confirmRefButton')\nconst textFieldValue = ref('')\n\nconst datePickerValue = ref<null | Date>(null)\nconst timePickerValue = ref<null | { hours: number; minutes: number }>(null)\nconst datetimeInternal = ref<null | Dayjs>(null)\n\nconst { t } = useI18n()\n\nconst placeholderComputed = computed(() => {\n return props.placeholder.length ? props.placeholder : placeholderFor(props.type)\n})\n\nconst { requiredIf } = useValidate()\nconst rules = computed(() => {\n return {\n textFieldValue: {\n required: requiredIf(props.required),\n },\n }\n})\nconst v$ = useVuelidate(rules, { textFieldValue })\n\nconst tryEmitNewValue = (newValue: DatetimeUTC | null | undefined) => {\n if (newValue === props.modelValue) return\n emit('update:modelValue', newValue)\n}\n\nconst updateDateAndTimePickerOnlyWhenChanged = (newValue: Dayjs | null) => {\n if (isNull(newValue)) return\n if (\n props.type !== 'date' &&\n (isNull(timePickerValue.value) ||\n newValue.hour() !== timePickerValue.value.hours ||\n newValue.minute() !== timePickerValue.value.minutes)\n ) {\n timePickerValue.value = { hours: newValue.hour(), minutes: newValue.minute() }\n }\n if (\n isNull(datePickerValue.value) ||\n newValue.year() !== datePickerValue.value.getFullYear() ||\n newValue.month() !== datePickerValue.value.getMonth() ||\n newValue.date() !== datePickerValue.value.getDate()\n ) {\n datePickerValue.value = toCalendarDate(newValue, props.type)\n }\n}\n\nwatch(\n () => props.modelValue,\n (newValue, oldValue) => {\n if (newValue === oldValue) return\n datetimeInternal.value = parseModel(newValue, props.type, props.lastMinuteMoment)\n },\n { immediate: true }\n)\n\nconst watchDatePicker = (newValue: null | Date, internal: Dayjs) => {\n if (isNull(newValue)) return internal\n return applyCalendarDate(internal, newValue, props.type)\n}\n\nconst watchTimePicker = (newValue: null | { hours: number; minutes: number }, internal: Dayjs) => {\n if (isNull(newValue) || props.type === 'date') return internal\n return internal.set('hour', newValue.hours).set('minute', newValue.minutes)\n}\n\nwatch([timePickerValue, datePickerValue], ([newTimePickerValue, newDatePickerValue]) => {\n let newDate: Dayjs | null = null\n\n if (!isNull(datetimeInternal.value)) {\n newDate = datetimeInternal.value\n } else {\n newDate =\n parseModel(props.modelValue, props.type, props.lastMinuteMoment) ??\n emptyBaseValue(props.type, props.lastMinuteMoment)\n }\n\n newDate = watchTimePicker(newTimePickerValue, newDate!)\n newDate = watchDatePicker(newDatePickerValue, newDate!)\n if (newDate.isSame(toRaw(datetimeInternal.value))) return\n datetimeInternal.value = newDate\n})\n\nwatch(\n datetimeInternal,\n (newValue) => {\n if (isNull(newValue)) {\n textFieldValue.value = ''\n tryEmitNewValue(null)\n return\n }\n const newUtcValue = serialize(newValue, props.type)\n textFieldValue.value = formatDisplay(newValue, props.type)\n updateDateAndTimePickerOnlyWhenChanged(newValue)\n tryEmitNewValue(newUtcValue)\n },\n { immediate: true }\n)\n\nwatch(pickerOpened, (newValue) => {\n if (newValue) {\n onTextFieldBlur()\n if (isNull(datetimeInternal.value) && (isNull(props.defaultValue) || isUndefined(props.defaultValue))) {\n datetimeInternal.value = todayValue(props.type, props.lastMinuteMoment)\n }\n emit('open')\n return\n }\n emit('close')\n})\n\nconst errorMessageComputed = computed(() => {\n if (isDefined(props.errorMessages)) return props.errorMessages\n if (v$.value.textFieldValue.$errors.length)\n return [v$.value.textFieldValue.$errors.map((item: ErrorObject) => item.$message).join(' ')]\n return []\n})\n\nconst onTextFieldBlur = () => {\n const filtered = textFieldValue.value.replace(/[^\\s\\d.:]/g, '').trim()\n if (filtered.length === 0 && !props.required) {\n datetimeInternal.value = parseModel(props.defaultValue, props.type, props.lastMinuteMoment)\n emit('blur')\n return\n }\n // Keeps the seconds from the original model.\n const seconds = parseModel(props.modelValue, props.type, props.lastMinuteMoment)?.second() ?? 0\n const reparsed = parseTyped(filtered, props.type, seconds)\n if (!isNull(reparsed)) {\n // A day click blurs this field before the picker emits, so re-assigning an unchanged datetime\n // would push the stale date back into it.\n if (isSameValue(reparsed, toRaw(datetimeInternal.value), props.type)) {\n textFieldValue.value = formatDisplay(reparsed, props.type)\n } else {\n datetimeInternal.value = reparsed\n }\n v$.value.textFieldValue.$touch()\n emit('blur')\n return\n }\n if (!isNull(datetimeInternal.value)) {\n textFieldValue.value = formatDisplay(datetimeInternal.value, props.type)\n }\n v$.value.textFieldValue.$touch()\n emit('blur')\n}\n\nconst onClear = () => {\n if (isNull(props.defaultValue) || isUndefined(props.defaultValue)) {\n datetimeInternal.value = null\n datePickerValue.value = null\n timePickerValue.value = null\n emit('afterClear')\n return\n }\n datetimeInternal.value = parseModel(props.defaultValue, props.type, props.lastMinuteMoment)\n emit('afterClear')\n}\n\nconst close = () => {\n pickerOpened.value = false\n inputInstance.value?.focus()\n inputInstance.value?.blur()\n emit('close')\n emit('blur')\n}\n\nconst onTextFieldFocus = () => {\n emit('focus')\n}\n\n// The calendar icon is a button. Enter and Space toggle the calendar like a click. Its menu takes only the arrow keys.\n// The keyup of that Enter stays on the icon. Otherwise the field's Enter handler would report leaving a second time.\nconst togglePicker = () => {\n pickerOpened.value = !pickerOpened.value\n}\n\nconst onTimePickerEnterKeyup = () => {\n pickerOpened.value = false\n}\n\nconst onFocusConfirm = () => {\n confirmRefButton.value?.focus()\n}\n\nconst onDatePickerUpdate = () => {\n if (props.type === 'date') {\n // The value travels through pre-flush watchers, so closing now would emit blur and release the\n // collab lock with the previous value still in the model.\n nextTick(close)\n return\n }\n timePickerInstance.value?.focusHour()\n}\n\nconst now = () => {\n datetimeInternal.value = todayValue(props.type, props.lastMinuteMoment)\n nextTick(() => {\n // Vuetify navigates the calendar to a new value on its own, but skips an unchanged day, so a\n // value that is already today would leave the user on whatever month they paged to.\n pickerKey.value++\n timeKey.value++\n })\n}\n</script>\n\n<template>\n <VTextField\n ref=\"inputInstance\"\n v-model=\"textFieldValue\"\n :error-messages=\"errorMessageComputed\"\n :persistent-placeholder=\"true\"\n :placeholder=\"placeholderComputed\"\n class=\"a-datetime-picker\"\n :hide-details=\"hideDetails ? true : 'auto'\"\n :data-cy=\"dataCy.length ? dataCy : undefined\"\n :disabled=\"disabled\"\n :readonly=\"readonly\"\n autocomplete=\"off\"\n @blur=\"onTextFieldBlur\"\n @focus=\"onTextFieldFocus\"\n @keyup.enter=\"onTextFieldBlur\"\n >\n <template #append-inner>\n <VIcon\n v-if=\"clearable && !readonly && defaultValue !== modelValue\"\n class=\"a-datetime-picker__clearable-icon\"\n icon=\"mdi-close-circle\"\n :aria-label=\"t('common.button.clear')\"\n @click.stop=\"onClear\"\n />\n <VMenu\n v-if=\"!disabled && !readonly\"\n location=\"bottom end\"\n origin=\"top end\"\n :close-on-content-click=\"false\"\n :model-value=\"pickerOpened\"\n @update:model-value=\"(value: boolean) => (pickerOpened = value)\"\n >\n <template #activator=\"{ props: menuProps }\">\n <VIcon\n class=\"a-datetime-picker__calendar-icon\"\n icon=\"mdi-calendar\"\n size=\"small\"\n :aria-label=\"t('$vuetify.datePicker.title')\"\n v-bind=\"menuProps\"\n @keydown.enter.space.prevent=\"togglePicker\"\n @keyup.enter.stop\n />\n </template>\n\n <VCard v-if=\"pickerOpened\">\n <VBtn\n v-tooltip=\"t('common.button.close')\"\n :aria-label=\"t('common.button.close')\"\n icon\n variant=\"text\"\n :width=\"36\"\n :height=\"36\"\n class=\"position-absolute top-0 right-0\"\n @click.stop=\"close\"\n >\n <VIcon\n icon=\"mdi-close\"\n color=\"white\"\n />\n </VBtn>\n <VDatePicker\n :key=\"pickerKey\"\n v-model=\"datePickerValue\"\n class=\"a-datetime-picker-calendar\"\n color=\"primary\"\n show-adjacent-months\n v-bind=\"$attrs\"\n @update:model-value=\"onDatePickerUpdate\"\n />\n <TimePicker\n v-if=\"type !== 'date'\"\n ref=\"timePickerInstance\"\n :key=\"timeKey\"\n v-model=\"timePickerValue\"\n @enter-keyup=\"onTimePickerEnterKeyup\"\n @focus-confirm=\"onFocusConfirm\"\n />\n <div class=\"d-flex\">\n <button\n v-if=\"!hideSetToNow\"\n type=\"button\"\n class=\"a-datetime-picker__bottom-button\"\n tabindex=\"8\"\n @click=\"now\"\n >\n {{ type === 'date' ? t('common.time.today') : t('common.time.now') }}\n </button>\n <button\n ref=\"confirmRefButton\"\n type=\"button\"\n class=\"a-datetime-picker__bottom-button\"\n tabindex=\"7\"\n @click.stop=\"close\"\n >\n {{ t('common.button.confirm') }}\n </button>\n </div>\n </VCard>\n </VMenu>\n\n <div class=\"ml-1\">\n <slot name=\"append-inner\" />\n </div>\n </template>\n <template\n v-if=\"!hideLabel\"\n #label\n >\n {{ label\n }}<span\n v-if=\"required\"\n class=\"a-required-mark\"\n />\n </template>\n </VTextField>\n</template>\n\n<style lang=\"scss\" scoped>\n.a-datetime-picker {\n :deep(.v-field__append-inner .v-icon) {\n cursor: pointer;\n }\n\n &__calendar-icon {\n margin-top: 2px;\n opacity: 0.6 !important;\n }\n\n &__clearable-icon {\n opacity: 0 !important;\n }\n\n &:hover {\n .a-datetime-picker__clearable-icon {\n opacity: 0.6 !important;\n }\n }\n\n &__bottom-button {\n width: 100%;\n text-align: center;\n font-size: 0.86rem;\n font-family: Roboto, sans-serif;\n font-weight: bold;\n line-height: 1.8;\n padding: 6px 0;\n\n &:hover {\n background-color: rgb(0 0 0 / 5%);\n }\n }\n}\n\n.a-datetime-picker-calendar {\n :deep(.v-picker-title) {\n display: none;\n }\n\n :deep(.v-date-picker-header) {\n padding-top: 12px;\n }\n\n :deep(.v-date-picker-month) {\n padding-bottom: 2px;\n }\n}\n</style>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TimePicker.js","names":["_sfc_main","TimePicker_vue_vue_type_script_setup_true_lang_default","_plugin_vue_export_helper_default","TimePicker_default"],"sources":["../../../../../src/domains/ui/datetime/components/TimePicker.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { nextTick, ref, useTemplateRef, watch, computed } from 'vue'\nimport { useI18n } from 'vue-i18n'\n\nconst emit = defineEmits<{\n (e: 'enterKeyup'): void\n (e: 'focusConfirm'): void\n}>()\n\nconst modelValue = defineModel<null | { hours: number; minutes: number }>('modelValue', {\n required: true,\n})\n\nconst hours = ref<string | undefined>(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n modelValue.value ? String(modelValue.value.hours).padStart(2, '0') : '12'\n)\nconst minutes = ref<string | undefined>(\n // eslint-disable-next-line vue/no-ref-object-reactivity-loss\n modelValue.value ? String(modelValue.value.minutes).padStart(2, '0') : '00'\n)\n\nconst hoursRefInput = useTemplateRef<HTMLInputElement>('hoursRefInput')\nconst minutesRefInput = useTemplateRef<HTMLInputElement>('minutesRefInput')\n\nconst hoursComputed = computed({\n get: () => hours.value,\n set: (value: string | number) => {\n let cleanValue = String(value).replace(/[^0-9]/g, '')\n\n if (cleanValue && parseInt(cleanValue) > 23) {\n hours.value = '23'\n nextTick(() => minutesRefInput.value?.focus())\n return\n }\n\n if (cleanValue.length > 2) {\n cleanValue = cleanValue.slice(0, 2)\n }\n\n hours.value = cleanValue\n\n if (cleanValue.length === 2) {\n nextTick(() => minutesRefInput.value?.focus())\n }\n },\n})\n\nconst minutesComputed = computed({\n get: () => minutes.value,\n set: (value: string | number) => {\n let cleanValue = String(value).replace(/[^0-9]/g, '')\n\n if (cleanValue && parseInt(cleanValue) > 59) {\n minutes.value = '59'\n emit('focusConfirm')\n return\n }\n\n if (cleanValue.length > 2) {\n cleanValue = cleanValue.slice(0, 2)\n }\n\n minutes.value = cleanValue\n\n if (cleanValue.length === 2) {\n emit('focusConfirm')\n }\n },\n})\n\nconst selectContent = async (event: FocusEvent) => {\n const target = event.target as HTMLInputElement | null\n await nextTick()\n target?.select()\n}\n\nconst onBlurHours = () => {\n const parsedHours = parseInt(hours.value || '0')\n hours.value = parsedHours >= 0 && parsedHours <= 23 ? String(parsedHours).padStart(2, '0') : '00'\n}\n\nconst onBlurMinutes = () => {\n const parsedMinutes = parseInt(minutes.value || '0')\n minutes.value = parsedMinutes >= 0 && parsedMinutes <= 59 ? String(parsedMinutes).padStart(2, '0') : '00'\n}\n\nconst onEnterHoursKeyup = () => {\n onBlurHours()\n emit('enterKeyup')\n}\n\nconst onEnterMinutesKeyup = () => {\n onBlurMinutes()\n emit('enterKeyup')\n}\n\nconst increaseHours = () => {\n const parsedHours = parseInt(hours.value || '0')\n const newHours = isNaN(parsedHours) ? 1 : (parsedHours + 1) % 24\n hours.value = String(newHours).padStart(2, '0')\n}\n\nconst decreaseHours = () => {\n const parsedHours = parseInt(hours.value || '0')\n const newHours = isNaN(parsedHours) ? 23 : (parsedHours - 1 + 24) % 24\n hours.value = String(newHours).padStart(2, '0')\n}\n\nconst increaseMinutes = () => {\n const parsedMinutes = parseInt(minutes.value || '0')\n const parsedHours = parseInt(hours.value || '0')\n\n if (isNaN(parsedMinutes)) {\n minutes.value = '01'\n return\n }\n\n if (parsedMinutes === 59) {\n minutes.value = '00'\n const newHours = isNaN(parsedHours) ? 1 : (parsedHours + 1) % 24\n hours.value = String(newHours).padStart(2, '0')\n } else {\n const newMinutes = parsedMinutes + 1\n minutes.value = String(newMinutes).padStart(2, '0')\n }\n}\n\nconst decreaseMinutes = () => {\n const parsedMinutes = parseInt(minutes.value || '0')\n const parsedHours = parseInt(hours.value || '0')\n\n if (isNaN(parsedMinutes)) {\n minutes.value = '59'\n return\n }\n\n if (parsedMinutes === 0) {\n minutes.value = '59'\n const newHours = isNaN(parsedHours) ? 23 : (parsedHours - 1 + 24) % 24\n hours.value = String(newHours).padStart(2, '0')\n } else {\n const newMinutes = parsedMinutes - 1\n minutes.value = String(newMinutes).padStart(2, '0')\n }\n}\n\nconst focusHour = () => {\n hoursRefInput.value?.focus()\n}\n\nwatch([hours, minutes], ([newHours, newMinutes], [oldHours, oldMinutes]) => {\n if (newHours === oldHours && newMinutes === oldMinutes) return\n const hoursInt = parseInt(newHours ?? (modelValue.value ? modelValue.value.hours.toString() : '12'))\n const minutesInt = parseInt(newMinutes ?? (modelValue.value ? modelValue.value.minutes.toString() : '0'))\n if (hoursInt >= 0 && hoursInt <= 23 && minutesInt >= 0 && minutesInt <= 59) {\n modelValue.value = { hours: hoursInt, minutes: minutesInt }\n }\n})\n\ndefineExpose({\n focusHour,\n})\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"a-datetime-picker-time\">\n <div class=\"a-datetime-picker-time__item a-datetime-picker-time__item\">\n <input\n ref=\"hoursRefInput\"\n v-model=\"hoursComputed\"\n class=\"a-datetime-picker-time__input a-datetime-picker-time__input--hours\"\n type=\"text\"\n :aria-label=\"t('$vuetify.timePicker.hour')\"\n tabindex=\"1\"\n min=\"0\"\n max=\"23\"\n @focus=\"selectContent\"\n @blur=\"onBlurHours\"\n @keyup.enter=\"onEnterHoursKeyup\"\n />\n <div class=\"a-datetime-picker-time__arrows\">\n <VBtn\n tabindex=\"-1\"\n variant=\"text\"\n class=\"a-datetime-picker-time__arrow-up\"\n :aria-label=\"t('common.button.increaseHours')\"\n @click=\"increaseHours\"\n >\n <VIcon icon=\"mdi-chevron-up\" />\n </VBtn>\n <VBtn\n tabindex=\"-1\"\n variant=\"text\"\n class=\"a-datetime-picker-time__arrow-down\"\n :aria-label=\"t('common.button.decreaseHours')\"\n @click=\"decreaseHours\"\n >\n <VIcon icon=\"mdi-chevron-down\" />\n </VBtn>\n </div>\n </div>\n <span class=\"a-datetime-picker-time__separator\">:</span>\n <div class=\"a-datetime-picker-time__item\">\n <input\n ref=\"minutesRefInput\"\n v-model=\"minutesComputed\"\n class=\"a-datetime-picker-time__input a-datetime-picker-time__input--minutes\"\n type=\"text\"\n :aria-label=\"t('$vuetify.timePicker.minute')\"\n tabindex=\"2\"\n min=\"0\"\n max=\"59\"\n @focus=\"selectContent\"\n @blur=\"onBlurMinutes\"\n @keyup.enter=\"onEnterMinutesKeyup\"\n />\n <div class=\"a-datetime-picker-time__arrows\">\n <VBtn\n tabindex=\"-1\"\n variant=\"text\"\n class=\"a-datetime-picker-time__arrow-up\"\n :aria-label=\"t('common.button.increaseMinutes')\"\n @click=\"increaseMinutes\"\n >\n <VIcon icon=\"mdi-chevron-up\" />\n </VBtn>\n <VBtn\n tabindex=\"-1\"\n variant=\"text\"\n class=\"a-datetime-picker-time__arrow-down\"\n :aria-label=\"t('common.button.decreaseMinutes')\"\n @click=\"decreaseMinutes\"\n >\n <VIcon icon=\"mdi-chevron-down\" />\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n$hover-bg-color: rgb(0 0 0 / 5%);\n\n.a-datetime-picker-time {\n display: flex;\n\n &__item {\n flex-grow: 1;\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 40px;\n\n &:hover {\n background-color: $hover-bg-color;\n }\n }\n\n &__separator {\n font-weight: bold;\n font-size: 1.2rem;\n text-align: center;\n font-family: Roboto, sans-serif;\n min-height: 40px;\n padding: 0 5px;\n display: flex;\n align-items: center;\n }\n\n &__arrows {\n display: flex;\n flex-direction: column;\n opacity: 0;\n\n .v-btn {\n padding: 0 !important;\n min-width: 28px !important;\n width: 28px !important;\n height: 28px !important;\n }\n\n .a-datetime-picker-time__item:hover &,\n .a-datetime-picker-time__input:focus + &,\n &:focus-within {\n opacity: 1;\n }\n }\n\n &__input {\n width: 100%;\n max-width: 128px;\n height: 100%;\n display: inline-block;\n background: transparent;\n /* stylelint-disable-next-line */\n -webkit-box-shadow: none;\n box-shadow: none;\n border: 0;\n border-radius: 0;\n text-align: center;\n margin: 0;\n padding: 0;\n line-height: inherit;\n font-size: 1rem;\n position: relative;\n /* stylelint-disable-next-line */\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n /* stylelint-disable-next-line */\n -webkit-appearance: textfield;\n /* stylelint-disable-next-line */\n -moz-appearance: textfield;\n appearance: textfield;\n outline: none;\n\n &--hours {\n font-weight: bold;\n }\n }\n\n &__input::-webkit-inner-spin-button,\n &__input::-webkit-outer-spin-button {\n /* stylelint-disable-next-line */\n -webkit-appearance: none;\n margin: 0;\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"TimePicker.js","names":["TimePicker_vue_vue_type_script_setup_true_lang_default","_plugin_vue_export_helper_default","TimePicker_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AFileDropzone.js","names":["_sfc_main","AFileDropzone_vue_vue_type_script_setup_true_lang_default","AFileDropzone_default"],"sources":["../../../../../src/domains/ui/file/components/AFileDropzone.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useDropZone } from '@vueuse/core'\nimport { ref } from 'vue'\nimport { useDropzoneGlobalDragState } from '@/domains/ui/file/composables/dropzone'\nimport { isNull } from '@/shared/utils/common'\nimport { useFormatAndSizeCheck } from '@/domains/ui/file/composables/formatAndSizeCheck'\nimport { useI18n } from 'vue-i18n'\n\n/**\n * For accept and maxSizes check docs {@see useFormatAndSizeCheck}\n */\nconst props = withDefaults(\n defineProps<{\n variant?: 'fill' | 'default' | 'fullscreen'\n accept?: string | undefined\n maxSizes?: Record<string, number> | undefined\n disabled?: boolean\n transparent?: boolean\n size?: 'small' | 'default' | 'large'\n hoverOnly?: boolean\n hideText?: boolean\n }>(),\n {\n variant: 'default',\n accept: undefined,\n maxSizes: undefined,\n disabled: false,\n transparent: false,\n size: 'default',\n hoverOnly: false,\n hideText: false,\n }\n)\nconst emit = defineEmits<{\n (e: 'drop', files: File[]): void\n (e: 'click'): void\n}>()\n\nconst dropZoneRef = ref<HTMLDivElement>()\n\nconst { checkFormatsAndSizes } = useFormatAndSizeCheck(\n () => props.accept,\n () => props.maxSizes\n)\n\nfunction onDrop(files: File[] | null) {\n if (props.disabled) return\n if (isNull(files) || files.length === 0) return\n emit('drop', checkFormatsAndSizes(files))\n}\n\nconst { isOverDropZone } = useDropZone(dropZoneRef, onDrop)\n\nconst { isDraggingFile } = useDropzoneGlobalDragState()\nconst { t } = useI18n()\n</script>\n\n<template>\n <div\n ref=\"dropZoneRef\"\n class=\"a-file-dropzone\"\n :class=\"{\n 'a-file-dropzone--bg': !transparent,\n 'a-file-dropzone--over': isOverDropZone && isDraggingFile,\n 'a-file-dropzone--possibility': isDraggingFile,\n 'a-file-dropzone--disabled': disabled,\n [`a-file-dropzone--${variant}`]: true,\n [`a-file-dropzone--${size}`]: true,\n [`a-file-dropzone--hover-only`]: hoverOnly,\n [`a-file-dropzone--hide-text`]: hideText,\n }\"\n @click.stop=\"emit('click')\"\n >\n <div\n v-if=\"disabled\"\n class=\"text\"\n />\n <div\n v-else-if=\"isDraggingFile\"\n class=\"text\"\n >\n {{ t('common.system.dropzone.dropHere') }}\n </div>\n <div\n v-else\n class=\"text\"\n >\n {{ t('common.system.dropzone.dropPossibility') }}\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n$class-name-root: 'a-file-dropzone';\n\n.#{$class-name-root} {\n outline-offset: -4px;\n position: relative;\n text-align: center;\n display: flex;\n align-items: center;\n justify-content: center;\n\n .text {\n padding: 6px;\n pointer-events: none;\n user-select: none;\n text-align: center;\n border-radius: 5px;\n }\n\n &--bg {\n width: 100%;\n }\n\n &--fullscreen {\n inset: 0;\n position: fixed;\n z-index: 9999;\n }\n\n &--small {\n min-height: 70px;\n\n .text {\n font-size: 0.75rem;\n line-height: 1.2;\n padding: 4px;\n }\n }\n\n &--default {\n min-height: 140px;\n }\n\n &--large {\n min-height: 210px;\n }\n\n &--fill {\n position: absolute !important;\n inset: 0;\n min-height: 40px;\n }\n\n &--hover-only {\n display: none;\n }\n\n &--hide-text .text,\n &--disabled .text {\n display: none;\n }\n\n &.#{$class-name-root}--hover-only.#{$class-name-root}--possibility {\n display: flex;\n }\n}\n\n.v-theme--light {\n .#{$class-name-root} {\n .text {\n background-color: rgb(212 212 212 / 50%);\n }\n\n &--bg {\n background-color: #d4d4d4;\n }\n\n &--possibility:not(&--disabled) {\n background-color: #e5edf1;\n outline: 2px dashed #bacfd4;\n }\n\n // Must come after `--possibility`, here and under the dark theme. A zone with\n // a file over it has both classes, and the later rule of equal weight wins.\n &--over:not(&--disabled) {\n background-color: #dcedc8;\n outline: 2px dashed #7cb342;\n }\n }\n}\n\n.v-theme--dark {\n .#{$class-name-root} {\n .text {\n background-color: rgb(57 57 57 / 50%);\n }\n\n &--bg {\n background-color: #393939;\n }\n\n &--possibility:not(&--disabled) {\n background-color: #212531;\n outline: 2px dashed #01579b;\n }\n\n &--over:not(&--disabled) {\n background-color: #283121;\n outline: 2px dashed #333e28;\n }\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"AFileDropzone.js","names":["AFileDropzone_vue_vue_type_script_setup_true_lang_default","AFileDropzone_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AFileInput.js","names":["_sfc_main","AFileInput_vue_vue_type_script_setup_true_lang_default","AFileInput_default"],"sources":["../../../../../src/domains/ui/file/components/AFileInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch, withModifiers } from 'vue'\nimport { isBoolean, isUndefined } from '@/shared/utils/common'\nimport AFileDropzone from '@/domains/ui/file/components/AFileDropzone.vue'\nimport type { InputFileChangeEvent } from '@/shared/types/ChangeEvent'\nimport { useFormatAndSizeCheck } from '@/domains/ui/file/composables/formatAndSizeCheck'\nimport { useAlerts } from '@/domains/system/composables/alerts'\n\n/**\n * For accept and maxSizes check docs {@see useFormatAndSizeCheck}\n */\nconst props = withDefaults(\n defineProps<{\n fileInputKey?: number | undefined\n accept?: string | undefined\n maxSizes?: Record<string, number> | undefined\n multiple?: boolean\n useDropzone?: boolean\n dropzoneVariant?: 'fill' | 'default' | 'fullscreen'\n onDropzoneClickCallback?: (() => void) | undefined | false // false for disable, undefined for browse files, otherwise custom callback is used\n hoverOnly?: boolean\n }>(),\n {\n fileInputKey: undefined,\n accept: undefined,\n maxSizes: undefined,\n multiple: false,\n useDropzone: false,\n dropzoneVariant: 'default',\n onDropzoneClickCallback: undefined,\n hoverOnly: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'change', event: InputFileChangeEvent): void\n (e: 'filesInput', files: File[]): void\n}>()\n\nconst BLOCK_DOUBLE_CLICK_MS = 200\n\nconst inputRef = ref<undefined | HTMLInputElement>(undefined)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst fileInputKeyLocal = ref(props.fileInputKey || 0)\nconst blockDoubleClick = ref(false)\n\nconst clickInput = () => {\n if (blockDoubleClick.value === true) {\n return\n }\n blockDoubleClick.value = true\n inputRef.value?.click()\n setTimeout(() => {\n blockDoubleClick.value = false\n }, BLOCK_DOUBLE_CLICK_MS)\n}\n\nconst { checkFormatsAndSizes } = useFormatAndSizeCheck(\n () => props.accept,\n () => props.maxSizes\n)\nconst { showWarningT } = useAlerts()\n\nconst validateData = (files: File[]) => {\n if (!props.multiple && files.length > 0) {\n const checked = checkFormatsAndSizes([files[0]!])\n emit('filesInput', checked)\n return\n }\n const checked = checkFormatsAndSizes(files)\n emit('filesInput', checked)\n}\n\nconst onDropzoneDrop = (files: File[]) => {\n if (props.multiple) {\n validateData(files)\n return\n }\n // Take the first file that passes the check. Taking the first dropped\n // file before the check lost a valid file when a refused one came first.\n const checked = checkFormatsAndSizes(files)\n if (checked.length > 1) showWarningT('common.system.upload.onlyOneFile')\n emit('filesInput', checked.slice(0, 1))\n}\n\nconst onInputFileChange = (payload: Event) => {\n const event = payload as InputFileChangeEvent\n emit('change', event)\n validateData(Array.from(event.target?.files ?? []))\n // Clear the input after handing over or refusing the file, so picking the same file again fires a change.\n // Not every host changes `fileInputKey` to reset it.\n if (event.target) event.target.value = ''\n}\n\nconst onFileDropzoneClick = () => {\n if (isBoolean(props.onDropzoneClickCallback)) {\n return\n }\n if (isUndefined(props.onDropzoneClickCallback)) {\n clickInput()\n return\n }\n props.onDropzoneClickCallback()\n}\n\nwatch(\n () => props.fileInputKey,\n (newValue, oldValue) => {\n if (newValue === oldValue || isUndefined(newValue)) {\n return\n }\n fileInputKeyLocal.value = newValue\n }\n)\n\ndefineExpose({\n activate: clickInput,\n})\n</script>\n\n<template>\n <AFileDropzone\n v-if=\"useDropzone\"\n :variant=\"dropzoneVariant\"\n :hover-only=\"hoverOnly\"\n @click=\"onFileDropzoneClick\"\n @drop=\"onDropzoneDrop\"\n />\n <slot\n v-else\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => clickInput(), ['stop']) }\"\n />\n <input\n ref=\"inputRef\"\n :key=\"fileInputKeyLocal\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n hidden\n tabindex=\"-1\"\n type=\"file\"\n @change=\"onInputFileChange\"\n />\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AFileInput.js","names":["AFileInput_vue_vue_type_script_setup_true_lang_default","AFileInput_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AFileInput.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_Fragment","_createBlock","AFileDropzone","_renderSlot","AFileDropzone_default","_hoisted_1","BLOCK_DOUBLE_CLICK_MS","AFileInput_vue_vue_type_script_setup_true_lang_default","__expose","__emit","props","__props","emit","inputRef","ref","fileInputKeyLocal","blockDoubleClick","clickInput","useFormatAndSizeCheck","useAlerts","validateData","files","checked","checkFormatsAndSizes","onDropzoneDrop","showWarningT","onInputFileChange","event","payload","onFileDropzoneClick","isBoolean","isUndefined","watch","newValue","oldValue","openBlock","createElementBlock","Fragment","createBlock","renderSlot","_ctx","withModifiers"],"sources":["../../../../../src/domains/ui/file/components/AFileInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch, withModifiers } from 'vue'\nimport { isBoolean, isUndefined } from '@/shared/utils/common'\nimport AFileDropzone from '@/domains/ui/file/components/AFileDropzone.vue'\nimport type { InputFileChangeEvent } from '@/shared/types/ChangeEvent'\nimport { useFormatAndSizeCheck } from '@/domains/ui/file/composables/formatAndSizeCheck'\nimport { useAlerts } from '@/domains/system/composables/alerts'\n\n/**\n * For accept and maxSizes check docs {@see useFormatAndSizeCheck}\n */\nconst props = withDefaults(\n defineProps<{\n fileInputKey?: number | undefined\n accept?: string | undefined\n maxSizes?: Record<string, number> | undefined\n multiple?: boolean\n useDropzone?: boolean\n dropzoneVariant?: 'fill' | 'default' | 'fullscreen'\n onDropzoneClickCallback?: (() => void) | undefined | false // false for disable, undefined for browse files, otherwise custom callback is used\n hoverOnly?: boolean\n }>(),\n {\n fileInputKey: undefined,\n accept: undefined,\n maxSizes: undefined,\n multiple: false,\n useDropzone: false,\n dropzoneVariant: 'default',\n onDropzoneClickCallback: undefined,\n hoverOnly: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'change', event: InputFileChangeEvent): void\n (e: 'filesInput', files: File[]): void\n}>()\n\nconst BLOCK_DOUBLE_CLICK_MS = 200\n\nconst inputRef = ref<undefined | HTMLInputElement>(undefined)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst fileInputKeyLocal = ref(props.fileInputKey || 0)\nconst blockDoubleClick = ref(false)\n\nconst clickInput = () => {\n if (blockDoubleClick.value === true) {\n return\n }\n blockDoubleClick.value = true\n inputRef.value?.click()\n setTimeout(() => {\n blockDoubleClick.value = false\n }, BLOCK_DOUBLE_CLICK_MS)\n}\n\nconst { checkFormatsAndSizes } = useFormatAndSizeCheck(\n () => props.accept,\n () => props.maxSizes\n)\nconst { showWarningT } = useAlerts()\n\nconst validateData = (files: File[]) => {\n if (!props.multiple && files.length > 0) {\n const checked = checkFormatsAndSizes([files[0]!])\n emit('filesInput', checked)\n return\n }\n const checked = checkFormatsAndSizes(files)\n emit('filesInput', checked)\n}\n\nconst onDropzoneDrop = (files: File[]) => {\n if (props.multiple) {\n validateData(files)\n return\n }\n // Take the first file that passes the check. Taking the first dropped\n // file before the check lost a valid file when a refused one came first.\n const checked = checkFormatsAndSizes(files)\n if (checked.length > 1) showWarningT('common.system.upload.onlyOneFile')\n emit('filesInput', checked.slice(0, 1))\n}\n\nconst onInputFileChange = (payload: Event) => {\n const event = payload as InputFileChangeEvent\n emit('change', event)\n validateData(Array.from(event.target?.files ?? []))\n // Clear the input after handing over or refusing the file, so picking the same file again fires a change.\n // Not every host changes `fileInputKey` to reset it.\n if (event.target) event.target.value = ''\n}\n\nconst onFileDropzoneClick = () => {\n if (isBoolean(props.onDropzoneClickCallback)) {\n return\n }\n if (isUndefined(props.onDropzoneClickCallback)) {\n clickInput()\n return\n }\n props.onDropzoneClickCallback()\n}\n\nwatch(\n () => props.fileInputKey,\n (newValue, oldValue) => {\n if (newValue === oldValue || isUndefined(newValue)) {\n return\n }\n fileInputKeyLocal.value = newValue\n }\n)\n\ndefineExpose({\n activate: clickInput,\n})\n</script>\n\n<template>\n <AFileDropzone\n v-if=\"useDropzone\"\n :variant=\"dropzoneVariant\"\n :hover-only=\"hoverOnly\"\n @click=\"onFileDropzoneClick\"\n @drop=\"onDropzoneDrop\"\n />\n <slot\n v-else\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => clickInput(), ['stop']) }\"\n />\n <input\n ref=\"inputRef\"\n :key=\"fileInputKeyLocal\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n hidden\n tabindex=\"-1\"\n type=\"file\"\n @change=\"onInputFileChange\"\n />\n</template>\n"],"mappings":";;;;;;A,gCAuCMQ,IAAwB,K;;;;;;;;;;;;;;;;;;;;;;;;;;EA5B9B,IAAMI,IAAQC,GAuBRC,IAAOH,GAOPI,IAAWC,EAAkC,KAAA,CAAS,GAEtDC,IAAoBD,EAAIJ,EAAM,gBAAgB,CAAC,GAC/CM,IAAmBF,EAAI,EAAK,GAE5BG,UAAmB;GACvB,AAAID,EAAiB,UAAU,OAG/B,EAAiB,QAAQ,IACzBH,EAAS,OAAO,MAAM,GACtB,iBAAiB;IACf,EAAiB,QAAQ;GAC3B,GAAGP,CAAqB;EAC1B,GAEM,EAAE,4BAAyBY,QACzBR,EAAM,cACNA,EAAM,QACd,GACM,EAAE,oBAAiBS,EAAU,GAE7BC,KAAgB,MAAkB;GACtC,IAAI,CAACV,EAAM,YAAYW,EAAM,SAAS,GAAG;IACvC,IAAMC,IAAUC,EAAqB,CAACF,EAAM,EAAG,CAAC;IAChD,EAAK,cAAcC,CAAO;IAC1B;GACF;GACA,IAAMA,IAAUC,EAAqBF,CAAK;GAC1C,EAAK,cAAcC,CAAO;EAC5B,GAEME,KAAkB,MAAkB;GACxC,IAAId,EAAM,UAAU;IAClB,EAAaW,CAAK;IAClB;GACF;GAGA,IAAMC,IAAUC,EAAqBF,CAAK;GAE1C,AADIC,EAAQ,SAAS,KAAGG,EAAa,kCAAkC,GACvEb,EAAK,cAAcU,EAAQ,MAAM,GAAG,CAAC,CAAC;EACxC,GAEMI,KAAqB,MAAmB;GAC5C,IAAMC,IAAQC;GAKd,AAJAhB,EAAK,UAAUe,CAAK,GACpBP,EAAa,MAAM,KAAKO,EAAM,QAAQ,SAAS,CAAC,CAAC,CAAC,GAG9CA,EAAM,WAAQ,EAAM,OAAO,QAAQ;EACzC,GAEME,UAA4B;GAChC,AAAIC,EAAUpB,EAAM,uBAAuB,MAGvCqB,EAAYrB,EAAM,uBAAuB,IAC3CO,EAAW,IAGbP,EAAM,wBAAwB;EAChC;E,OAEAsB,QACQtB,EAAM,eACX,GAAU,MAAa;GACtB,AAAIuB,MAAaC,KAAYH,EAAYE,CAAQ,MAGjD,EAAkB,QAAQA;EAC5B,CACF,GAEAzB,EAAa,EACX,UAAUS,EACZ,CAAC,I,2BAKSN,EAAA,eADRb,EAAA,GAAAG,EAMEC,GAAA;;GAJC,SAASS,EAAA;GACT,cAAYA,EAAA;GACZ,SAAOkB;GACP,QAAML;E,0CAETrB,EAIEqC,EAAA,QAAA,aAAA,EADC,OAAK,EAAA,SAAaC,QAAoBxB,EAAU,GAAA,CAAA,MAAA,CAAA,EAAA,E,wBAEnDnB,EAAA,GAAAC,EASE,SAAA;GARI,SAAA;GAAJ,KAAIc;GACH,KAAKE,EAAA;GACL,QAAQJ,EAAA;GACR,UAAUA,EAAA;GACX,QAAA;GACA,UAAS;GACT,MAAK;GACJ,UAAQe"}
1
+ {"version":3,"file":"AFileInput.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createBlock","AFileDropzone","_renderSlot","AFileDropzone_default","_hoisted_1","BLOCK_DOUBLE_CLICK_MS","AFileInput_vue_vue_type_script_setup_true_lang_default","__expose","__emit","props","__props","emit","inputRef","ref","fileInputKeyLocal","blockDoubleClick","clickInput","useFormatAndSizeCheck","useAlerts","validateData","files","checked","checkFormatsAndSizes","onDropzoneDrop","showWarningT","onInputFileChange","event","payload","onFileDropzoneClick","isBoolean","isUndefined","watch","newValue","oldValue","openBlock","createElementBlock","Fragment","createBlock","renderSlot","_ctx","withModifiers"],"sources":["../../../../../src/domains/ui/file/components/AFileInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ref, watch, withModifiers } from 'vue'\nimport { isBoolean, isUndefined } from '@/shared/utils/common'\nimport AFileDropzone from '@/domains/ui/file/components/AFileDropzone.vue'\nimport type { InputFileChangeEvent } from '@/shared/types/ChangeEvent'\nimport { useFormatAndSizeCheck } from '@/domains/ui/file/composables/formatAndSizeCheck'\nimport { useAlerts } from '@/domains/system/composables/alerts'\n\n/**\n * For accept and maxSizes check docs {@see useFormatAndSizeCheck}\n */\nconst props = withDefaults(\n defineProps<{\n fileInputKey?: number | undefined\n accept?: string | undefined\n maxSizes?: Record<string, number> | undefined\n multiple?: boolean\n useDropzone?: boolean\n dropzoneVariant?: 'fill' | 'default' | 'fullscreen'\n onDropzoneClickCallback?: (() => void) | undefined | false // false for disable, undefined for browse files, otherwise custom callback is used\n hoverOnly?: boolean\n }>(),\n {\n fileInputKey: undefined,\n accept: undefined,\n maxSizes: undefined,\n multiple: false,\n useDropzone: false,\n dropzoneVariant: 'default',\n onDropzoneClickCallback: undefined,\n hoverOnly: false,\n }\n)\n\nconst emit = defineEmits<{\n (e: 'change', event: InputFileChangeEvent): void\n (e: 'filesInput', files: File[]): void\n}>()\n\nconst BLOCK_DOUBLE_CLICK_MS = 200\n\nconst inputRef = ref<undefined | HTMLInputElement>(undefined)\n// eslint-disable-next-line vue/no-setup-props-reactivity-loss\nconst fileInputKeyLocal = ref(props.fileInputKey || 0)\nconst blockDoubleClick = ref(false)\n\nconst clickInput = () => {\n if (blockDoubleClick.value === true) {\n return\n }\n blockDoubleClick.value = true\n inputRef.value?.click()\n setTimeout(() => {\n blockDoubleClick.value = false\n }, BLOCK_DOUBLE_CLICK_MS)\n}\n\nconst { checkFormatsAndSizes } = useFormatAndSizeCheck(\n () => props.accept,\n () => props.maxSizes\n)\nconst { showWarningT } = useAlerts()\n\nconst validateData = (files: File[]) => {\n if (!props.multiple && files.length > 0) {\n const checked = checkFormatsAndSizes([files[0]!])\n emit('filesInput', checked)\n return\n }\n const checked = checkFormatsAndSizes(files)\n emit('filesInput', checked)\n}\n\nconst onDropzoneDrop = (files: File[]) => {\n if (props.multiple) {\n validateData(files)\n return\n }\n // Take the first file that passes the check. Taking the first dropped\n // file before the check lost a valid file when a refused one came first.\n const checked = checkFormatsAndSizes(files)\n if (checked.length > 1) showWarningT('common.system.upload.onlyOneFile')\n emit('filesInput', checked.slice(0, 1))\n}\n\nconst onInputFileChange = (payload: Event) => {\n const event = payload as InputFileChangeEvent\n emit('change', event)\n validateData(Array.from(event.target?.files ?? []))\n // Clear the input after handing over or refusing the file, so picking the same file again fires a change.\n // Not every host changes `fileInputKey` to reset it.\n if (event.target) event.target.value = ''\n}\n\nconst onFileDropzoneClick = () => {\n if (isBoolean(props.onDropzoneClickCallback)) {\n return\n }\n if (isUndefined(props.onDropzoneClickCallback)) {\n clickInput()\n return\n }\n props.onDropzoneClickCallback()\n}\n\nwatch(\n () => props.fileInputKey,\n (newValue, oldValue) => {\n if (newValue === oldValue || isUndefined(newValue)) {\n return\n }\n fileInputKeyLocal.value = newValue\n }\n)\n\ndefineExpose({\n activate: clickInput,\n})\n</script>\n\n<template>\n <AFileDropzone\n v-if=\"useDropzone\"\n :variant=\"dropzoneVariant\"\n :hover-only=\"hoverOnly\"\n @click=\"onFileDropzoneClick\"\n @drop=\"onDropzoneDrop\"\n />\n <slot\n v-else\n name=\"activator\"\n :props=\"{ onClick: withModifiers(() => clickInput(), ['stop']) }\"\n />\n <input\n ref=\"inputRef\"\n :key=\"fileInputKeyLocal\"\n :accept=\"accept\"\n :multiple=\"multiple\"\n hidden\n tabindex=\"-1\"\n type=\"file\"\n @change=\"onInputFileChange\"\n />\n</template>\n"],"mappings":";;;;;;A,gCAuCMO,IAAwB,K;;;;;;;;;;;;;;;;;;;;;;;;;;EA5B9B,IAAMI,IAAQC,GAuBRC,IAAOH,GAOPI,IAAWC,EAAkC,KAAA,CAAS,GAEtDC,IAAoBD,EAAIJ,EAAM,gBAAgB,CAAC,GAC/CM,IAAmBF,EAAI,EAAK,GAE5BG,UAAmB;GACvB,AAAID,EAAiB,UAAU,OAG/B,EAAiB,QAAQ,IACzBH,EAAS,OAAO,MAAM,GACtB,iBAAiB;IACf,EAAiB,QAAQ;GAC3B,GAAGP,CAAqB;EAC1B,GAEM,EAAE,4BAAyBY,QACzBR,EAAM,cACNA,EAAM,QACd,GACM,EAAE,oBAAiBS,EAAU,GAE7BC,KAAgB,MAAkB;GACtC,IAAI,CAACV,EAAM,YAAYW,EAAM,SAAS,GAAG;IACvC,IAAMC,IAAUC,EAAqB,CAACF,EAAM,EAAG,CAAC;IAChD,EAAK,cAAcC,CAAO;IAC1B;GACF;GACA,IAAMA,IAAUC,EAAqBF,CAAK;GAC1C,EAAK,cAAcC,CAAO;EAC5B,GAEME,KAAkB,MAAkB;GACxC,IAAId,EAAM,UAAU;IAClB,EAAaW,CAAK;IAClB;GACF;GAGA,IAAMC,IAAUC,EAAqBF,CAAK;GAE1C,AADIC,EAAQ,SAAS,KAAGG,EAAa,kCAAkC,GACvEb,EAAK,cAAcU,EAAQ,MAAM,GAAG,CAAC,CAAC;EACxC,GAEMI,KAAqB,MAAmB;GAC5C,IAAMC,IAAQC;GAKd,AAJAhB,EAAK,UAAUe,CAAK,GACpBP,EAAa,MAAM,KAAKO,EAAM,QAAQ,SAAS,CAAC,CAAC,CAAC,GAG9CA,EAAM,WAAQ,EAAM,OAAO,QAAQ;EACzC,GAEME,UAA4B;GAChC,AAAIC,EAAUpB,EAAM,uBAAuB,MAGvCqB,EAAYrB,EAAM,uBAAuB,IAC3CO,EAAW,IAGbP,EAAM,wBAAwB;EAChC;E,OAEAsB,QACQtB,EAAM,eACX,GAAU,MAAa;GACtB,AAAIuB,MAAaC,KAAYH,EAAYE,CAAQ,MAGjD,EAAkB,QAAQA;EAC5B,CACF,GAEAzB,EAAa,EACX,UAAUS,EACZ,CAAC,I,2BAKSN,EAAA,eADRZ,EAAA,GAAAE,EAMEC,GAAA;;GAJC,SAASS,EAAA;GACT,cAAYA,EAAA;GACZ,SAAOkB;GACP,QAAML;E,0CAETrB,EAIEqC,EAAA,QAAA,aAAA,EADC,OAAK,EAAA,SAAaC,QAAoBxB,EAAU,GAAA,CAAA,MAAA,CAAA,EAAA,E,wBAEnDlB,EAAA,GAAAC,EASE,SAAA;GARI,SAAA;GAAJ,KAAIa;GACH,KAAKE,EAAA;GACL,QAAQJ,EAAA;GACR,UAAUA,EAAA;GACX,QAAA;GACA,UAAS;GACT,MAAK;GACJ,UAAQe"}
@@ -1 +1 @@
1
- {"version":3,"file":"AFileInputDialog.js","names":["_sfc_main","AFileInputDialog_vue_vue_type_script_setup_true_lang_default","AFileInputDialog_default"],"sources":["../../../../../src/domains/ui/file/components/AFileInputDialog.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport AFileInput from '@/domains/ui/file/components/AFileInput.vue'\nimport type { VBtn } from 'vuetify/components'\nimport type { InputFileChangeEvent } from '@/shared/types/ChangeEvent'\nimport { nextTick, ref } from 'vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\n\n/**\n * For accept and maxSizes check docs {@see useFormatAndSizeCheck}\n */\nwithDefaults(\n defineProps<{\n fileInputKey?: number | undefined\n accept?: string | undefined\n maxSizes?: Record<string, number> | undefined\n multiple?: boolean\n toolbarT?: string\n }>(),\n {\n fileInputKey: undefined,\n accept: undefined,\n maxSizes: undefined,\n multiple: false,\n toolbarT: 'common.button.upload',\n }\n)\n\nconst emit = defineEmits<{\n (e: 'change', event: InputFileChangeEvent): void\n (e: 'filesInput', files: File[]): void\n}>()\n\nconst modelValue = defineModel<boolean>({ default: false, required: false })\n\nconst onClose = () => {\n modelValue.value = false\n}\n\nconst { t } = useI18n()\n\nconst fileInputComponent = ref<InstanceType<typeof AFileInput> | null>(null)\n\nconst onFilesInput = (files: File[]) => {\n emit('filesInput', files)\n modelValue.value = false\n}\n\n// Opens the file picker like a click on the input. The input lives in the dialog, so the dialog opens first.\n// The picker must still open within the same click, which the browser requires.\nconst activate = async () => {\n modelValue.value = true\n await nextTick()\n fileInputComponent.value?.activate()\n}\n\ndefineExpose({\n activate,\n})\n</script>\n\n<template>\n <VDialog\n :model-value=\"modelValue\"\n persistent\n :max-width=\"500\"\n @update:model-value=\"modelValue = $event\"\n >\n <template #activator=\"{ props: dialogProps }\">\n <slot\n name=\"activator\"\n :props=\"dialogProps\"\n >\n <VBtn\n v-bind=\"dialogProps\"\n :text=\"t('common.button.open')\"\n />\n </slot>\n </template>\n <VCard\n v-if=\"modelValue\"\n data-cy=\"create-panel\"\n >\n <ADialogToolbar @cancel=\"onClose\">\n <slot name=\"title\">\n {{ t(toolbarT) }}\n </slot>\n </ADialogToolbar>\n <VCardText>\n <ARow>\n <AFileInput\n ref=\"fileInputComponent\"\n :file-input-key=\"fileInputKey\"\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n :multiple=\"multiple\"\n use-dropzone\n @files-input=\"onFilesInput\"\n @change=\"emit('change', $event)\"\n />\n </ARow>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-close\"\n @click.stop=\"onClose\"\n >\n {{ t('common.button.close') }}\n </ABtnTertiary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AFileInputDialog.js","names":["AFileInputDialog_vue_vue_type_script_setup_true_lang_default","AFileInputDialog_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AFileInputDialog.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_resolveComponent","_openBlock","_createBlock","_component_VDialog","_withCtx","_renderSlot","_createVNode","_component_VBtn","_mergeProps","_unref","_component_VCard","ADialogToolbar","_createTextVNode","_toDisplayString","_component_VCardText","ARow","AFileInput","_component_VCardActions","_component_VSpacer","_withModifiers","_createCommentVNode","ADialogToolbar_default","AFileInput_default","ARow_default","AFileInputDialog_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","__expose","__emit","emit","modelValue","useModel","__props","onClose","useI18n","fileInputComponent","ref","onFilesInput","files","nextTick","_component_ABtnTertiary","resolveComponent","openBlock","createBlock","VDialog","_cache","$event","withCtx","dialogProps","renderSlot","_ctx","createVNode","VBtn","mergeProps","unref","t","VCard","createTextVNode","toDisplayString","VCardText","VCardActions","VSpacer","withModifiers","createCommentVNode"],"sources":["../../../../../src/domains/ui/file/components/AFileInputDialog.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport AFileInput from '@/domains/ui/file/components/AFileInput.vue'\nimport type { VBtn } from 'vuetify/components'\nimport type { InputFileChangeEvent } from '@/shared/types/ChangeEvent'\nimport { nextTick, ref } from 'vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\n\n/**\n * For accept and maxSizes check docs {@see useFormatAndSizeCheck}\n */\nwithDefaults(\n defineProps<{\n fileInputKey?: number | undefined\n accept?: string | undefined\n maxSizes?: Record<string, number> | undefined\n multiple?: boolean\n toolbarT?: string\n }>(),\n {\n fileInputKey: undefined,\n accept: undefined,\n maxSizes: undefined,\n multiple: false,\n toolbarT: 'common.button.upload',\n }\n)\n\nconst emit = defineEmits<{\n (e: 'change', event: InputFileChangeEvent): void\n (e: 'filesInput', files: File[]): void\n}>()\n\nconst modelValue = defineModel<boolean>({ default: false, required: false })\n\nconst onClose = () => {\n modelValue.value = false\n}\n\nconst { t } = useI18n()\n\nconst fileInputComponent = ref<InstanceType<typeof AFileInput> | null>(null)\n\nconst onFilesInput = (files: File[]) => {\n emit('filesInput', files)\n modelValue.value = false\n}\n\n// Opens the file picker like a click on the input. The input lives in the dialog, so the dialog opens first.\n// The picker must still open within the same click, which the browser requires.\nconst activate = async () => {\n modelValue.value = true\n await nextTick()\n fileInputComponent.value?.activate()\n}\n\ndefineExpose({\n activate,\n})\n</script>\n\n<template>\n <VDialog\n :model-value=\"modelValue\"\n persistent\n :max-width=\"500\"\n @update:model-value=\"modelValue = $event\"\n >\n <template #activator=\"{ props: dialogProps }\">\n <slot\n name=\"activator\"\n :props=\"dialogProps\"\n >\n <VBtn\n v-bind=\"dialogProps\"\n :text=\"t('common.button.open')\"\n />\n </slot>\n </template>\n <VCard\n v-if=\"modelValue\"\n data-cy=\"create-panel\"\n >\n <ADialogToolbar @cancel=\"onClose\">\n <slot name=\"title\">\n {{ t(toolbarT) }}\n </slot>\n </ADialogToolbar>\n <VCardText>\n <ARow>\n <AFileInput\n ref=\"fileInputComponent\"\n :file-input-key=\"fileInputKey\"\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n :multiple=\"multiple\"\n use-dropzone\n @files-input=\"onFilesInput\"\n @change=\"emit('change', $event)\"\n />\n </ARow>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-close\"\n @click.stop=\"onClose\"\n >\n {{ t('common.button.close') }}\n </ABtnTertiary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6BA,IAAM8B,IAAOD,GAKPE,IAAa/B,EAAoBiC,GAAA,YAAoC,GAErEC,UAAgB;GACpB,EAAW,QAAQ;EACrB,GAEM,EAAE,SAAMC,EAAQ,GAEhBC,IAAqBC,EAA4C,IAAI,GAErEC,KAAgB,MAAkB;GAEtC,AADAR,EAAK,cAAcS,CAAK,GACxB,EAAW,QAAQ;EACrB;E,OAUAX,EAAa,EACX,sBAP2B;GAG3B,AAFA,EAAW,QAAQ,IACnB,MAAMY,EAAS,GACfJ,EAAmB,OAAO,SAAS;EACrC,EAIA,CAAC,I;;GAIC,OAAAlC,EAAA,GAAAC,EAkDUC,GAAA;IAjDP,eAAa2B,EAAA;IACd,YAAA;IACC,aAAW;IACX,uBAAkB,AAAAe,EAAA,QAAA,MAAE,EAAA,QAAaC;;IAEvB,WAAS1C,GASX,EAAA,OATsB4C,QAAW,CACxC3C,EAQO6C,EAAA,QAAA,aAAA,EANJ,OAAOF,EAAW,SAMd,CAJL1C,EAGEC,GAHFC,EACUwC,GAAW,EAClB,MAAMvC,EAAA8C,CAAA,CAAC,CAAA,oBAAA,E;IAId,SAAAnD,QAgCQ,CA/BA0B,EAAA,SADR7B,EAAA,GAAAC,EAgCQQ,GAAA;;KA9BN,WAAQ;;KAER,SAAAN,QAIiB;MAJjBE,EAIiBK,GAAA,EAJA,UAAQsB,EAAO,GAAA;OAC9B,SAAA7B,QAEO,CAFPC,EAEO6C,EAAA,QAAA,SAAA,CAAA,SAAA,CADFtC,EAAAC,EAAAJ,EAAA8C,CAAA,CAAC,CAACvB,EAAA,QAAQ,CAAA,GAAA,CAAA,C;;;MAGjB1B,EAaYQ,GAAA,MAAA;OAZV,SAAAV,QAWO,CAXPE,EAWOS,GAAA,MAAA;QAVL,SAAAX,QASE,CATFE,EASEU,GAAA;SARI,SAAA;SAAJ,KAAImB;SACH,kBAAgBH,EAAA;SAChB,QAAQA,EAAA;SACR,aAAWA,EAAA;SACX,UAAUA,EAAA;SACX,gBAAA;SACc;SACb,UAAM,AAAAa,EAAA,QAAA,MAAEhB,EAAI,UAAWiB,CAAM;;;;;;;;;;;MAIpCxC,EAQeW,GAAA,MAAA;OAPb,SAAAb,QAAW,CAAXE,EAAWY,CAAA,GACXZ,EAKekC,GAAA;QAJb,WAAQ;QACP,SAAKrB,EAAOc,GAAO,CAAA,MAAA,CAAA;;QAEpB,SAAA7B,QAA8B,CAA3BQ,EAAAC,EAAAJ,EAAA8C,CAAA,CAAC,CAAA,qBAAA,CAAA,GAAA,CAAA,C"}
1
+ {"version":3,"file":"AFileInputDialog.vue_vue_type_script_setup_true_lang.js","names":["_useModel","_openBlock","_createBlock","_component_VDialog","_withCtx","_renderSlot","_createVNode","_component_VBtn","_mergeProps","_unref","_component_VCard","ADialogToolbar","_createTextVNode","_toDisplayString","_component_VCardText","ARow","AFileInput","_component_VCardActions","_component_VSpacer","_withModifiers","ADialogToolbar_default","AFileInput_default","ARow_default","AFileInputDialog_vue_vue_type_script_setup_true_lang_default","\"modelValue\"","\"modelModifiers\"","__expose","__emit","emit","modelValue","useModel","__props","onClose","useI18n","fileInputComponent","ref","onFilesInput","files","nextTick","_component_ABtnTertiary","resolveComponent","openBlock","createBlock","VDialog","_cache","$event","withCtx","dialogProps","renderSlot","_ctx","createVNode","VBtn","mergeProps","unref","t","VCard","createTextVNode","toDisplayString","VCardText","VCardActions","VSpacer","withModifiers","createCommentVNode"],"sources":["../../../../../src/domains/ui/file/components/AFileInputDialog.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport ADialogToolbar from '@/domains/ui/components/ADialogToolbar.vue'\nimport { useI18n } from 'vue-i18n'\nimport AFileInput from '@/domains/ui/file/components/AFileInput.vue'\nimport type { VBtn } from 'vuetify/components'\nimport type { InputFileChangeEvent } from '@/shared/types/ChangeEvent'\nimport { nextTick, ref } from 'vue'\nimport ARow from '@/domains/ui/components/ARow.vue'\n\n/**\n * For accept and maxSizes check docs {@see useFormatAndSizeCheck}\n */\nwithDefaults(\n defineProps<{\n fileInputKey?: number | undefined\n accept?: string | undefined\n maxSizes?: Record<string, number> | undefined\n multiple?: boolean\n toolbarT?: string\n }>(),\n {\n fileInputKey: undefined,\n accept: undefined,\n maxSizes: undefined,\n multiple: false,\n toolbarT: 'common.button.upload',\n }\n)\n\nconst emit = defineEmits<{\n (e: 'change', event: InputFileChangeEvent): void\n (e: 'filesInput', files: File[]): void\n}>()\n\nconst modelValue = defineModel<boolean>({ default: false, required: false })\n\nconst onClose = () => {\n modelValue.value = false\n}\n\nconst { t } = useI18n()\n\nconst fileInputComponent = ref<InstanceType<typeof AFileInput> | null>(null)\n\nconst onFilesInput = (files: File[]) => {\n emit('filesInput', files)\n modelValue.value = false\n}\n\n// Opens the file picker like a click on the input. The input lives in the dialog, so the dialog opens first.\n// The picker must still open within the same click, which the browser requires.\nconst activate = async () => {\n modelValue.value = true\n await nextTick()\n fileInputComponent.value?.activate()\n}\n\ndefineExpose({\n activate,\n})\n</script>\n\n<template>\n <VDialog\n :model-value=\"modelValue\"\n persistent\n :max-width=\"500\"\n @update:model-value=\"modelValue = $event\"\n >\n <template #activator=\"{ props: dialogProps }\">\n <slot\n name=\"activator\"\n :props=\"dialogProps\"\n >\n <VBtn\n v-bind=\"dialogProps\"\n :text=\"t('common.button.open')\"\n />\n </slot>\n </template>\n <VCard\n v-if=\"modelValue\"\n data-cy=\"create-panel\"\n >\n <ADialogToolbar @cancel=\"onClose\">\n <slot name=\"title\">\n {{ t(toolbarT) }}\n </slot>\n </ADialogToolbar>\n <VCardText>\n <ARow>\n <AFileInput\n ref=\"fileInputComponent\"\n :file-input-key=\"fileInputKey\"\n :accept=\"accept\"\n :max-sizes=\"maxSizes\"\n :multiple=\"multiple\"\n use-dropzone\n @files-input=\"onFilesInput\"\n @change=\"emit('change', $event)\"\n />\n </ARow>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <ABtnTertiary\n data-cy=\"button-close\"\n @click.stop=\"onClose\"\n >\n {{ t('common.button.close') }}\n </ABtnTertiary>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6BA,IAAM4B,IAAOD,GAKPE,IAAa7B,EAAoB+B,GAAA,YAAoC,GAErEC,UAAgB;GACpB,EAAW,QAAQ;EACrB,GAEM,EAAE,SAAMC,EAAQ,GAEhBC,IAAqBC,EAA4C,IAAI,GAErEC,KAAgB,MAAkB;GAEtC,AADAR,EAAK,cAAcS,CAAK,GACxB,EAAW,QAAQ;EACrB;E,OAUAX,EAAa,EACX,sBAP2B;GAG3B,AAFA,EAAW,QAAQ,IACnB,MAAMY,EAAS,GACfJ,EAAmB,OAAO,SAAS;EACrC,EAIA,CAAC,I;;GAIC,OAAAjC,EAAA,GAAAC,EAkDUC,GAAA;IAjDP,eAAa0B,EAAA;IACd,YAAA;IACC,aAAW;IACX,uBAAkB,AAAAe,EAAA,QAAA,MAAE,EAAA,QAAaC;;IAEvB,WAASzC,GASX,EAAA,OATsB2C,QAAW,CACxC1C,EAQO4C,EAAA,QAAA,aAAA,EANJ,OAAOF,EAAW,SAMd,CAJLzC,EAGEC,GAHFC,EACUuC,GAAW,EAClB,MAAMtC,EAAA6C,CAAA,CAAC,CAAA,oBAAA,E;IAId,SAAAlD,QAgCQ,CA/BAyB,EAAA,SADR5B,EAAA,GAAAC,EAgCQQ,GAAA;;KA9BN,WAAQ;;KAER,SAAAN,QAIiB;MAJjBE,EAIiBK,GAAA,EAJA,UAAQqB,EAAO,GAAA;OAC9B,SAAA5B,QAEO,CAFPC,EAEO4C,EAAA,QAAA,SAAA,CAAA,SAAA,CADFrC,EAAAC,EAAAJ,EAAA6C,CAAA,CAAC,CAACvB,EAAA,QAAQ,CAAA,GAAA,CAAA,C;;;MAGjBzB,EAaYQ,GAAA,MAAA;OAZV,SAAAV,QAWO,CAXPE,EAWOS,GAAA,MAAA;QAVL,SAAAX,QASE,CATFE,EASEU,GAAA;SARI,SAAA;SAAJ,KAAIkB;SACH,kBAAgBH,EAAA;SAChB,QAAQA,EAAA;SACR,aAAWA,EAAA;SACX,UAAUA,EAAA;SACX,gBAAA;SACc;SACb,UAAM,AAAAa,EAAA,QAAA,MAAEhB,EAAI,UAAWiB,CAAM;;;;;;;;;;;MAIpCvC,EAQeW,GAAA,MAAA;OAPb,SAAAb,QAAW,CAAXE,EAAWY,CAAA,GACXZ,EAKeiC,GAAA;QAJb,WAAQ;QACP,SAAKpB,EAAOa,GAAO,CAAA,MAAA,CAAA;;QAEpB,SAAA5B,QAA8B,CAA3BQ,EAAAC,EAAAJ,EAAA6C,CAAA,CAAC,CAAA,qBAAA,CAAA,GAAA,CAAA,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"AGenericView.js","names":["_sfc_main","AGenericView_vue_vue_type_script_setup_true_lang_default","AGenericView_default"],"sources":["../../../../../src/domains/ui/view/components/AGenericView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nwithDefaults(\n defineProps<{\n title?: string\n text?: string\n buttonText?: string\n icon?: string\n iconSize?: string\n returnRouteName?: string\n }>(),\n {\n title: undefined,\n text: undefined,\n buttonText: undefined,\n icon: undefined,\n iconSize: undefined,\n returnRouteName: undefined,\n }\n)\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex flex-column align-center\">\n <slot name=\"default\">\n <h1\n v-if=\"icon || title\"\n class=\"d-flex justify-center align-center text-primary\"\n >\n <VIcon\n v-if=\"icon\"\n :size=\"iconSize\"\n :icon=\"icon\"\n />\n <span v-if=\"title\">{{ title }}</span>\n </h1>\n\n <p\n v-if=\"text\"\n class=\"pa-4\"\n >\n {{ text }}\n </p>\n\n <slot name=\"actions\">\n <ABtnPrimary\n v-if=\"buttonText && returnRouteName\"\n :to=\"{ name: returnRouteName }\"\n size=\"large\"\n >\n {{ buttonText }}\n </ABtnPrimary>\n </slot>\n </slot>\n </div>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AGenericView.js","names":["AGenericView_vue_vue_type_script_setup_true_lang_default","AGenericView_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AGenericView.vue_vue_type_script_setup_true_lang.js","names":["_resolveComponent","_openBlock","_createElementBlock","_createElementVNode","_renderSlot","_createBlock","_component_VIcon","_createCommentVNode","_toDisplayString","_withCtx","_createTextVNode","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","AGenericView_vue_vue_type_script_setup_true_lang_default","_component_ABtnPrimary","resolveComponent","openBlock","createElementBlock","createElementVNode","renderSlot","_ctx","__props","createBlock","VIcon","createCommentVNode","toDisplayString","withCtx","createTextVNode"],"sources":["../../../../../src/domains/ui/view/components/AGenericView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nwithDefaults(\n defineProps<{\n title?: string\n text?: string\n buttonText?: string\n icon?: string\n iconSize?: string\n returnRouteName?: string\n }>(),\n {\n title: undefined,\n text: undefined,\n buttonText: undefined,\n icon: undefined,\n iconSize: undefined,\n returnRouteName: undefined,\n }\n)\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex flex-column align-center\">\n <slot name=\"default\">\n <h1\n v-if=\"icon || title\"\n class=\"d-flex justify-center align-center text-primary\"\n >\n <VIcon\n v-if=\"icon\"\n :size=\"iconSize\"\n :icon=\"icon\"\n />\n <span v-if=\"title\">{{ title }}</span>\n </h1>\n\n <p\n v-if=\"text\"\n class=\"pa-4\"\n >\n {{ text }}\n </p>\n\n <slot name=\"actions\">\n <ABtnPrimary\n v-if=\"buttonText && returnRouteName\"\n :to=\"{ name: returnRouteName }\"\n size=\"large\"\n >\n {{ buttonText }}\n </ABtnPrimary>\n </slot>\n </slot>\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;GAsBE,OAAAC,EAAA,GAAAC,EAiCM,OAjCNS,GAiCM,CAhCJR,EA+BM,OA/BNS,GA+BM,CA9BJR,EA6BOmB,EAAA,QAAA,WAAA,CAAA,SAAA;IA3BGC,EAAA,QAAQA,EAAA,SADhBvB,EAAA,GAAAC,EAUK,MAVLW,GAUK,CALKW,EAAA,QADRvB,EAAA,GAAAI,EAIEC,GAAA;;KAFC,MAAMkB,EAAA;KACN,MAAMA,EAAA;I,4CAEGA,EAAA,SAAZvB,EAAA,GAAAC,EAAqC,QAAAY,GAAAN,EAAfgB,EAAA,KAAK,GAAA,CAAA,K;IAIrBA,EAAA,QADRvB,EAAA,GAAAC,EAKI,KALJa,GAKIP,EADCgB,EAAA,IAAI,GAAA,CAAA,K;IAGTpB,EAQOmB,EAAA,QAAA,WAAA,CAAA,SAAA,CANGC,EAAA,cAAcA,EAAA,mBADtBvB,EAAA,GAAAI,EAMcY,GAAA;;KAJX,IAAE,EAAA,MAAUO,EAAA,gBAAe;KAC5B,MAAK;;KAEL,SAAAf,QAAgB,CAAbC,EAAAF,EAAAgB,EAAA,UAAU,GAAA,CAAA,C"}
1
+ {"version":3,"file":"AGenericView.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createElementVNode","_renderSlot","_createBlock","_component_VIcon","_toDisplayString","_withCtx","_createTextVNode","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","AGenericView_vue_vue_type_script_setup_true_lang_default","_component_ABtnPrimary","resolveComponent","openBlock","createElementBlock","createElementVNode","renderSlot","_ctx","__props","createBlock","VIcon","createCommentVNode","toDisplayString","withCtx","createTextVNode"],"sources":["../../../../../src/domains/ui/view/components/AGenericView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nwithDefaults(\n defineProps<{\n title?: string\n text?: string\n buttonText?: string\n icon?: string\n iconSize?: string\n returnRouteName?: string\n }>(),\n {\n title: undefined,\n text: undefined,\n buttonText: undefined,\n icon: undefined,\n iconSize: undefined,\n returnRouteName: undefined,\n }\n)\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex flex-column align-center\">\n <slot name=\"default\">\n <h1\n v-if=\"icon || title\"\n class=\"d-flex justify-center align-center text-primary\"\n >\n <VIcon\n v-if=\"icon\"\n :size=\"iconSize\"\n :icon=\"icon\"\n />\n <span v-if=\"title\">{{ title }}</span>\n </h1>\n\n <p\n v-if=\"text\"\n class=\"pa-4\"\n >\n {{ text }}\n </p>\n\n <slot name=\"actions\">\n <ABtnPrimary\n v-if=\"buttonText && returnRouteName\"\n :to=\"{ name: returnRouteName }\"\n size=\"large\"\n >\n {{ buttonText }}\n </ABtnPrimary>\n </slot>\n </slot>\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;GAsBE,OAAAA,EAAA,GAAAC,EAiCM,OAjCNQ,GAiCM,CAhCJP,EA+BM,OA/BNQ,GA+BM,CA9BJP,EA6BOkB,EAAA,QAAA,WAAA,CAAA,SAAA;IA3BGC,EAAA,QAAQA,EAAA,SADhBtB,EAAA,GAAAC,EAUK,MAVLU,GAUK,CALKW,EAAA,QADRtB,EAAA,GAAAI,EAIEC,GAAA;;KAFC,MAAMiB,EAAA;KACN,MAAMA,EAAA;I,4CAEGA,EAAA,SAAZtB,EAAA,GAAAC,EAAqC,QAAAW,GAAAN,EAAfgB,EAAA,KAAK,GAAA,CAAA,K;IAIrBA,EAAA,QADRtB,EAAA,GAAAC,EAKI,KALJY,GAKIP,EADCgB,EAAA,IAAI,GAAA,CAAA,K;IAGTnB,EAQOkB,EAAA,QAAA,WAAA,CAAA,SAAA,CANGC,EAAA,cAAcA,EAAA,mBADtBtB,EAAA,GAAAI,EAMcW,GAAA;;KAJX,IAAE,EAAA,MAAUO,EAAA,gBAAe;KAC5B,MAAK;;KAEL,SAAAf,QAAgB,CAAbC,EAAAF,EAAAgB,EAAA,UAAU,GAAA,CAAA,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"ALoginView.js","names":["_sfc_main","ALoginView_vue_vue_type_script_setup_true_lang_default","_plugin_vue_export_helper_default","ALoginView_default"],"sources":["../../../../../src/domains/ui/view/components/ALoginView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n title?: string | undefined\n logoUrl?: string | undefined\n loginUrl?: undefined | (() => string)\n dataCy?: string\n }>(),\n {\n title: undefined,\n logoUrl: undefined,\n loginUrl: undefined,\n dataCy: 'button-login',\n }\n)\n\nconst { t } = useI18n()\n\n// The sign-in page replaces the admin's `/login` in browser history.\n// Otherwise Back after sign-in shows the sign-in page to a signed-in user.\n// Modified clicks (Ctrl, Cmd, Shift, Alt, middle button) proceed as a normal link.\n// Without an address the button is not a link and a press does nothing.\nconst onLoginClick = (event: MouseEvent) => {\n const link = event.currentTarget\n if (!(link instanceof HTMLAnchorElement) || !link.href) return\n if (event.button !== 0 || event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) return\n event.preventDefault()\n window.location.replace(link.href)\n}\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex justify-center align-center flex-column\">\n <slot name=\"title\">\n <img\n :src=\"logoUrl\"\n class=\"logo pb-2\"\n alt=\"\"\n />\n <h1\n v-if=\"title\"\n class=\"text-headline-large my-3\"\n >\n {{ title }}\n </h1>\n </slot>\n <h4 class=\"mb-3 text-body-large\">\n <span>{{ t('common.system.login.text') }}</span>\n </h4>\n <div class=\"py-5\">\n <VBtn\n v-if=\"loginUrl\"\n :data-cy=\"dataCy\"\n :href=\"loginUrl()\"\n color=\"primary\"\n size=\"large\"\n @click=\"onLoginClick\"\n >\n {{ t('common.system.login.text') }}\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.logo {\n display: block;\n max-width: 120px;\n height: auto;\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"ALoginView.js","names":["ALoginView_vue_vue_type_script_setup_true_lang_default","_plugin_vue_export_helper_default","ALoginView_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"ALoginView.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createElementVNode","_renderSlot","_toDisplayString","_createCommentVNode","_unref","_createBlock","_component_VBtn","_withCtx","_createTextVNode","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","ALoginView_vue_vue_type_script_setup_true_lang_default","useI18n","onLoginClick","link","event","openBlock","createElementBlock","createElementVNode","renderSlot","_ctx","__props","toDisplayString","createCommentVNode","unref","t","createBlock","VBtn","withCtx","createTextVNode"],"sources":["../../../../../src/domains/ui/view/components/ALoginView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n title?: string | undefined\n logoUrl?: string | undefined\n loginUrl?: undefined | (() => string)\n dataCy?: string\n }>(),\n {\n title: undefined,\n logoUrl: undefined,\n loginUrl: undefined,\n dataCy: 'button-login',\n }\n)\n\nconst { t } = useI18n()\n\n// The sign-in page replaces the admin's `/login` in browser history.\n// Otherwise Back after sign-in shows the sign-in page to a signed-in user.\n// Modified clicks (Ctrl, Cmd, Shift, Alt, middle button) proceed as a normal link.\n// Without an address the button is not a link and a press does nothing.\nconst onLoginClick = (event: MouseEvent) => {\n const link = event.currentTarget\n if (!(link instanceof HTMLAnchorElement) || !link.href) return\n if (event.button !== 0 || event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) return\n event.preventDefault()\n window.location.replace(link.href)\n}\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex justify-center align-center flex-column\">\n <slot name=\"title\">\n <img\n :src=\"logoUrl\"\n class=\"logo pb-2\"\n alt=\"\"\n />\n <h1\n v-if=\"title\"\n class=\"text-headline-large my-3\"\n >\n {{ title }}\n </h1>\n </slot>\n <h4 class=\"mb-3 text-body-large\">\n <span>{{ t('common.system.login.text') }}</span>\n </h4>\n <div class=\"py-5\">\n <VBtn\n v-if=\"loginUrl\"\n :data-cy=\"dataCy\"\n :href=\"loginUrl()\"\n color=\"primary\"\n size=\"large\"\n @click=\"onLoginClick\"\n >\n {{ t('common.system.login.text') }}\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.logo {\n display: block;\n max-width: 120px;\n height: auto;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAkBA,IAAM,EAAE,SAAMkB,EAAQ,GAMhBC,KAAgB,MAAsB;GAC1C,IAAMC,IAAOC,EAAM;GACnB,AAAMD,aAAgB,qBAAuBA,EAAK,SAC9CC,EAAM,WAAW,KAAKA,EAAM,WAAWA,EAAM,WAAWA,EAAM,YAAYA,EAAM,WACpFA,EAAM,eAAe,GACrB,OAAO,SAAS,QAAQD,EAAK,IAAI;EACnC;E,kBAIEpB,EAAA,GAAAC,EA+BM,OA/BNU,GA+BM,CA9BJT,EA6BM,OA7BNU,GA6BM;GA5BJT,EAYOuB,EAAA,QAAA,SAAA,CAAA,SAAA,CAXLxB,EAIE,OAAA;IAHC,KAAKyB,EAAA;IACN,OAAM;IACN,KAAI;G,gBAGEA,EAAA,SADR3B,EAAA,GAAAC,EAKK,MALLa,GAKKV,EADAuB,EAAA,KAAK,GAAA,CAAA,K;GAGZzB,EAEK,MAFLa,GAEK,CADHb,EAAgD,QAAA,MAAAE,EAAvCE,EAAAyB,CAAA,CAAC,CAAA,0BAAA,CAAA,GAAA,CAAA,C;GAEZ7B,EAWM,OAXNc,GAWM,CATIW,EAAA,YADR3B,EAAA,GAAAO,EASOC,GAAA;;IAPJ,WAASmB,EAAA;IACT,MAAMA,EAAA,SAAQ;IACf,OAAM;IACN,MAAK;IACJ,SAAOR;;IAER,SAAAV,QAAmC,CAAhCC,EAAAN,EAAAE,EAAAyB,CAAA,CAAC,CAAA,0BAAA,CAAA,GAAA,CAAA,C"}
1
+ {"version":3,"file":"ALoginView.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createElementVNode","_renderSlot","_toDisplayString","_unref","_createBlock","_component_VBtn","_withCtx","_createTextVNode","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_hoisted_6","ALoginView_vue_vue_type_script_setup_true_lang_default","useI18n","onLoginClick","link","event","openBlock","createElementBlock","createElementVNode","renderSlot","_ctx","__props","toDisplayString","createCommentVNode","unref","t","createBlock","VBtn","withCtx","createTextVNode"],"sources":["../../../../../src/domains/ui/view/components/ALoginView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\nwithDefaults(\n defineProps<{\n title?: string | undefined\n logoUrl?: string | undefined\n loginUrl?: undefined | (() => string)\n dataCy?: string\n }>(),\n {\n title: undefined,\n logoUrl: undefined,\n loginUrl: undefined,\n dataCy: 'button-login',\n }\n)\n\nconst { t } = useI18n()\n\n// The sign-in page replaces the admin's `/login` in browser history.\n// Otherwise Back after sign-in shows the sign-in page to a signed-in user.\n// Modified clicks (Ctrl, Cmd, Shift, Alt, middle button) proceed as a normal link.\n// Without an address the button is not a link and a press does nothing.\nconst onLoginClick = (event: MouseEvent) => {\n const link = event.currentTarget\n if (!(link instanceof HTMLAnchorElement) || !link.href) return\n if (event.button !== 0 || event.ctrlKey || event.metaKey || event.shiftKey || event.altKey) return\n event.preventDefault()\n window.location.replace(link.href)\n}\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex justify-center align-center flex-column\">\n <slot name=\"title\">\n <img\n :src=\"logoUrl\"\n class=\"logo pb-2\"\n alt=\"\"\n />\n <h1\n v-if=\"title\"\n class=\"text-headline-large my-3\"\n >\n {{ title }}\n </h1>\n </slot>\n <h4 class=\"mb-3 text-body-large\">\n <span>{{ t('common.system.login.text') }}</span>\n </h4>\n <div class=\"py-5\">\n <VBtn\n v-if=\"loginUrl\"\n :data-cy=\"dataCy\"\n :href=\"loginUrl()\"\n color=\"primary\"\n size=\"large\"\n @click=\"onLoginClick\"\n >\n {{ t('common.system.login.text') }}\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.logo {\n display: block;\n max-width: 120px;\n height: auto;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;EAkBA,IAAM,EAAE,SAAMiB,EAAQ,GAMhBC,KAAgB,MAAsB;GAC1C,IAAMC,IAAOC,EAAM;GACnB,AAAMD,aAAgB,qBAAuBA,EAAK,SAC9CC,EAAM,WAAW,KAAKA,EAAM,WAAWA,EAAM,WAAWA,EAAM,YAAYA,EAAM,WACpFA,EAAM,eAAe,GACrB,OAAO,SAAS,QAAQD,EAAK,IAAI;EACnC;E,kBAIEnB,EAAA,GAAAC,EA+BM,OA/BNS,GA+BM,CA9BJR,EA6BM,OA7BNS,GA6BM;GA5BJR,EAYOsB,EAAA,QAAA,SAAA,CAAA,SAAA,CAXLvB,EAIE,OAAA;IAHC,KAAKwB,EAAA;IACN,OAAM;IACN,KAAI;G,gBAGEA,EAAA,SADR1B,EAAA,GAAAC,EAKK,MALLY,GAKKT,EADAsB,EAAA,KAAK,GAAA,CAAA,K;GAGZxB,EAEK,MAFLY,GAEK,CADHZ,EAAgD,QAAA,MAAAE,EAAvCC,EAAAyB,CAAA,CAAC,CAAA,0BAAA,CAAA,GAAA,CAAA,C;GAEZ5B,EAWM,OAXNa,GAWM,CATIW,EAAA,YADR1B,EAAA,GAAAM,EASOC,GAAA;;IAPJ,WAASmB,EAAA;IACT,MAAMA,EAAA,SAAQ;IACf,OAAM;IACN,MAAK;IACJ,SAAOR;;IAER,SAAAV,QAAmC,CAAhCC,EAAAL,EAAAC,EAAAyB,CAAA,CAAC,CAAA,0BAAA,CAAA,GAAA,CAAA,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"ALogoutView.js","names":["_sfc_main","ALogoutView_vue_vue_type_script_setup_true_lang_default","ALogoutView_default"],"sources":["../../../../../src/domains/ui/view/components/ALogoutView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { onMounted } from 'vue'\n\nconst props = withDefaults(\n defineProps<{\n logoutUrl?: undefined | (() => string)\n }>(),\n {\n logoutUrl: undefined,\n }\n)\n\n// The sign-out address replaces the admin's `/logout` in browser history. Otherwise\n// Back after the next sign-in reaches `/logout` and signs the user out at once.\nonMounted(() => {\n if (!props.logoutUrl) return\n window.location.replace(props.logoutUrl())\n})\n</script>\n\n<template>\n <div />\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"ALogoutView.js","names":["ALogoutView_vue_vue_type_script_setup_true_lang_default","ALogoutView_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"ANotFoundView.js","names":["_sfc_main","ANotFoundView_vue_vue_type_script_setup_true_lang_default","ANotFoundView_default"],"sources":["../../../../../src/domains/ui/view/components/ANotFoundView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\nimport { useRouter } from 'vue-router'\nimport { useDatatablePageStore } from '@/domains/system/store/datatablePageStore'\n\nconst props = withDefaults(\n defineProps<{\n returnRouteName: string\n }>(),\n {}\n)\n\nconst { t } = useI18n()\nconst router = useRouter()\nconst { preservePageForLanding } = useDatatablePageStore()\n\n// Steps back so the browser's Back does not return to this page.\n// Falls back to the home route when there is no previous entry, for example a\n// tab opened on the bad address. There `router.back()` would leave the app.\nconst goBack = () => {\n if (typeof router.options.history.state.back === 'string') {\n preservePageForLanding(router)\n router.back()\n return\n }\n const to = { name: props.returnRouteName }\n preservePageForLanding(router, { to, navigation: router.replace(to) })\n}\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex flex-column align-center\">\n <h1 class=\"d-flex justify-center align-center text-primary\">\n <VIcon\n size=\"x-large\"\n icon=\"mdi-emoticon-cry\"\n />\n <span>{{ t('common.system.notFound.title') }}</span>\n </h1>\n\n <p class=\"pa-4\">\n {{ t('common.system.notFound.text') }}\n </p>\n\n <div class=\"d-flex flex-wrap justify-center ga-2\">\n <VBtn\n color=\"primary\"\n size=\"large\"\n variant=\"outlined\"\n data-cy=\"not-found-back\"\n @click=\"goBack\"\n >\n {{ t('common.system.notFound.previousButton') }}\n </VBtn>\n <VBtn\n :to=\"{ name: returnRouteName }\"\n color=\"primary\"\n size=\"large\"\n >\n {{ t('common.system.notFound.backButton') }}\n </VBtn>\n </div>\n </div>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"ANotFoundView.js","names":["ANotFoundView_vue_vue_type_script_setup_true_lang_default","ANotFoundView_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AUnauthorizedView.js","names":["_sfc_main","AUnauthorizedView_vue_vue_type_script_setup_true_lang_default","AUnauthorizedView_default"],"sources":["../../../../../src/domains/ui/view/components/AUnauthorizedView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\n/**\n * `returnUrl` navigates the document instead of the router, for apps whose sticky module state\n * would survive an in-app navigation and send the user straight back here.\n */\nwithDefaults(\n defineProps<{\n returnRouteName?: string\n returnUrl?: string\n }>(),\n {\n returnRouteName: undefined,\n returnUrl: undefined,\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex flex-column align-center\">\n <h1 class=\"d-flex justify-center align-center text-primary\">\n <VIcon\n size=\"x-large\"\n icon=\"mdi-emoticon-cry\"\n />\n <span>{{ t('common.system.unauthorized.title') }}</span>\n </h1>\n\n <p class=\"pa-4\">\n {{ t('common.system.unauthorized.text') }}\n </p>\n\n <VBtn\n v-if=\"returnUrl || returnRouteName\"\n v-bind=\"returnUrl ? { href: returnUrl } : { to: { name: returnRouteName } }\"\n color=\"primary\"\n size=\"large\"\n >\n {{ t('common.system.unauthorized.backButton') }}\n </VBtn>\n </div>\n </div>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"AUnauthorizedView.js","names":["AUnauthorizedView_vue_vue_type_script_setup_true_lang_default","AUnauthorizedView_default"],"sources":[],"mappings":""}
@@ -1 +1 @@
1
- {"version":3,"file":"AUnauthorizedView.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createElementVNode","_createVNode","_component_VIcon","_toDisplayString","_unref","_createBlock","_component_VBtn","_mergeProps","_withCtx","_createTextVNode","_createCommentVNode","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","AUnauthorizedView_vue_vue_type_script_setup_true_lang_default","useI18n","openBlock","createElementBlock","createElementVNode","createVNode","VIcon","toDisplayString","unref","t","__props","createBlock","VBtn","mergeProps","withCtx","createTextVNode","createCommentVNode"],"sources":["../../../../../src/domains/ui/view/components/AUnauthorizedView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\n/**\n * `returnUrl` navigates the document instead of the router, for apps whose sticky module state\n * would survive an in-app navigation and send the user straight back here.\n */\nwithDefaults(\n defineProps<{\n returnRouteName?: string\n returnUrl?: string\n }>(),\n {\n returnRouteName: undefined,\n returnUrl: undefined,\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex flex-column align-center\">\n <h1 class=\"d-flex justify-center align-center text-primary\">\n <VIcon\n size=\"x-large\"\n icon=\"mdi-emoticon-cry\"\n />\n <span>{{ t('common.system.unauthorized.title') }}</span>\n </h1>\n\n <p class=\"pa-4\">\n {{ t('common.system.unauthorized.text') }}\n </p>\n\n <VBtn\n v-if=\"returnUrl || returnRouteName\"\n v-bind=\"returnUrl ? { href: returnUrl } : { to: { name: returnRouteName } }\"\n color=\"primary\"\n size=\"large\"\n >\n {{ t('common.system.unauthorized.backButton') }}\n </VBtn>\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;EAkBA,IAAM,EAAE,SAAMkB,EAAQ;E,kBAIpBlB,EAAA,GAAAC,EAuBM,OAvBNY,GAuBM,CAtBJX,EAqBM,OArBNY,GAqBM;GApBJZ,EAMK,MANLa,GAMK,CALHZ,EAGEC,GAAA;IAFA,MAAK;IACL,MAAK;G,IAEPF,EAAwD,QAAA,MAAAG,EAA/CC,EAAAoB,CAAA,CAAC,CAAA,kCAAA,CAAA,GAAA,CAAA,C;GAGZxB,EAEI,KAFJc,GAEIX,EADCC,EAAAoB,CAAA,CAAC,CAAA,iCAAA,CAAA,GAAA,CAAA;GAIEC,EAAA,aAAaA,EAAA,mBADrB3B,EAAA,GAAAO,EAOOC,GAPPC,EAOO,EAAA,KAAA,EAAA,GALGkB,EAAA,YAAS,EAAA,MAAWA,EAAA,UAAS,IAAA,EAAA,IAAA,EAAA,MAAmBA,EAAA,gBAAe,EAAA,GAAA;IACvE,OAAM;IACN,MAAK;;IAEL,SAAAjB,QAAgD,CAA7CC,EAAAN,EAAAC,EAAAoB,CAAA,CAAC,CAAA,uCAAA,CAAA,GAAA,CAAA,C"}
1
+ {"version":3,"file":"AUnauthorizedView.vue_vue_type_script_setup_true_lang.js","names":["_openBlock","_createElementBlock","_createElementVNode","_createVNode","_component_VIcon","_toDisplayString","_unref","_createBlock","_component_VBtn","_mergeProps","_withCtx","_createTextVNode","_hoisted_1","_hoisted_2","_hoisted_3","_hoisted_4","AUnauthorizedView_vue_vue_type_script_setup_true_lang_default","useI18n","openBlock","createElementBlock","createElementVNode","createVNode","VIcon","toDisplayString","unref","t","__props","createBlock","VBtn","mergeProps","withCtx","createTextVNode","createCommentVNode"],"sources":["../../../../../src/domains/ui/view/components/AUnauthorizedView.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { useI18n } from 'vue-i18n'\n\n/**\n * `returnUrl` navigates the document instead of the router, for apps whose sticky module state\n * would survive an in-app navigation and send the user straight back here.\n */\nwithDefaults(\n defineProps<{\n returnRouteName?: string\n returnUrl?: string\n }>(),\n {\n returnRouteName: undefined,\n returnUrl: undefined,\n }\n)\n\nconst { t } = useI18n()\n</script>\n\n<template>\n <div class=\"d-flex justify-center align-center fill-height\">\n <div class=\"d-flex flex-column align-center\">\n <h1 class=\"d-flex justify-center align-center text-primary\">\n <VIcon\n size=\"x-large\"\n icon=\"mdi-emoticon-cry\"\n />\n <span>{{ t('common.system.unauthorized.title') }}</span>\n </h1>\n\n <p class=\"pa-4\">\n {{ t('common.system.unauthorized.text') }}\n </p>\n\n <VBtn\n v-if=\"returnUrl || returnRouteName\"\n v-bind=\"returnUrl ? { href: returnUrl } : { to: { name: returnRouteName } }\"\n color=\"primary\"\n size=\"large\"\n >\n {{ t('common.system.unauthorized.backButton') }}\n </VBtn>\n </div>\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;EAkBA,IAAM,EAAE,SAAMiB,EAAQ;E,kBAIpBjB,EAAA,GAAAC,EAuBM,OAvBNW,GAuBM,CAtBJV,EAqBM,OArBNW,GAqBM;GApBJX,EAMK,MANLY,GAMK,CALHX,EAGEC,GAAA;IAFA,MAAK;IACL,MAAK;G,IAEPF,EAAwD,QAAA,MAAAG,EAA/CC,EAAAmB,CAAA,CAAC,CAAA,kCAAA,CAAA,GAAA,CAAA,C;GAGZvB,EAEI,KAFJa,GAEIV,EADCC,EAAAmB,CAAA,CAAC,CAAA,iCAAA,CAAA,GAAA,CAAA;GAIEC,EAAA,aAAaA,EAAA,mBADrB1B,EAAA,GAAAO,EAOOC,GAPPC,EAOO,EAAA,KAAA,EAAA,GALGiB,EAAA,YAAS,EAAA,MAAWA,EAAA,UAAS,IAAA,EAAA,IAAA,EAAA,MAAmBA,EAAA,gBAAe,EAAA,GAAA;IACvE,OAAM;IACN,MAAK;;IAEL,SAAAhB,QAAgD,CAA7CC,EAAAN,EAAAC,EAAAmB,CAAA,CAAC,CAAA,uCAAA,CAAA,GAAA,CAAA,C"}
@@ -1 +1 @@
1
- {"version":3,"file":"AUnsavedConfirmDialog.js","names":["_sfc_main","AUnsavedConfirmDialog_vue_vue_type_script_setup_true_lang_default","_plugin_vue_export_helper_default","AUnsavedConfirmDialog_default"],"sources":["../../../../src/domains/unsavedGuard/components/AUnsavedConfirmDialog.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { useI18n } from 'vue-i18n'\n\nexport interface Props {\n title?: string\n body?: string\n stayLabel?: string\n discardLabel?: string\n /**\n * Names of the dirty sections (from the guard's `dirtyLabels`). When\n * non-empty the dialog lists them instead of the generic body message.\n */\n dirtyLabels?: string[]\n}\n\nwithDefaults(defineProps<Props>(), {\n title: undefined,\n body: undefined,\n stayLabel: undefined,\n discardLabel: undefined,\n dirtyLabels: () => [],\n})\n\nconst emit = defineEmits<{\n resolve: [discard: boolean]\n}>()\n\nconst open = defineModel<boolean>({ required: true })\n\nconst { t } = useI18n()\n\nconst onStay = () => {\n emit('resolve', false)\n}\n\nconst onDiscard = () => {\n emit('resolve', true)\n}\n</script>\n\n<template>\n <VDialog\n v-model=\"open\"\n max-width=\"480\"\n persistent\n @keydown.esc=\"onStay\"\n >\n <VCard>\n <VCardTitle>\n {{ title ?? t('common.sortable.unsavedChanges.title') }}\n </VCardTitle>\n <VCardText>\n <template v-if=\"body\">\n {{ body }}\n </template>\n <template v-else-if=\"dirtyLabels.length\">\n {{ t('common.sortable.unsavedChanges.sectionsIntro') }}\n <ul class=\"a-unsaved-sections\">\n <li\n v-for=\"(label, i) in dirtyLabels\"\n :key=\"i\"\n >\n {{ label }}\n </li>\n </ul>\n {{ t('common.sortable.unsavedChanges.leaveQuestion') }}\n </template>\n <template v-else>\n {{ t('common.sortable.unsavedChanges.body') }}\n </template>\n </VCardText>\n <VCardActions>\n <VSpacer />\n <VBtn\n variant=\"text\"\n @click=\"onStay\"\n >\n {{ stayLabel ?? t('common.sortable.unsavedChanges.stay') }}\n </VBtn>\n <VBtn\n color=\"warning\"\n variant=\"flat\"\n @click=\"onDiscard\"\n >\n {{ discardLabel ?? t('common.sortable.unsavedChanges.discard') }}\n </VBtn>\n </VCardActions>\n </VCard>\n </VDialog>\n</template>\n\n<style scoped lang=\"scss\">\n.a-unsaved-sections {\n margin: 8px 0;\n padding-left: 20px;\n\n li {\n font-weight: 500;\n }\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"AUnsavedConfirmDialog.js","names":["AUnsavedConfirmDialog_vue_vue_type_script_setup_true_lang_default","_plugin_vue_export_helper_default","AUnsavedConfirmDialog_default"],"sources":[],"mappings":""}