@nextcloud/vue 9.8.1 → 9.8.2

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 (162) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/assets/{NcAppNavigationSettings-HQEDobBQ.css → NcAppNavigationSettings-B4ZZe32B.css} +6 -6
  3. package/dist/assets/{NcAppSettingsDialog-HsZoLuDy.css → NcAppSettingsDialog-BPOsEn6K.css} +3 -3
  4. package/dist/assets/{NcAppSettingsShortcutsSection-BonG0SgH.css → NcAppSettingsShortcutsSection-ABRbmy1I.css} +1 -1
  5. package/dist/assets/{NcAppSidebar-dHtSShIl.css → NcAppSidebar-TcyGhk0L.css} +21 -21
  6. package/dist/assets/{NcAssistantButton-BmD9GrOw.css → NcAssistantButton-CeNrbdrG.css} +9 -9
  7. package/dist/assets/{NcAssistantContent-7THxd33X.css → NcAssistantContent-DI-vub5j.css} +3 -3
  8. package/dist/assets/{NcAssistantIcon-CsBmzIxJ.css → NcAssistantIcon-DyenP95c.css} +4 -4
  9. package/dist/assets/{NcBlurHash-tWUPu9Oh.css → NcBlurHash-CloqLmG2.css} +2 -2
  10. package/dist/assets/{NcFilePicker-CimiKIH1.css → NcFilePicker-CGYCxNdK.css} +1 -1
  11. package/dist/assets/{NcFormBox-CRdHJkrd.css → NcFormBox-D_5h4Op_.css} +11 -11
  12. package/dist/assets/{NcFormBoxButton-BWfU7d2r.css → NcFormBoxButton-DZ9GqF8V.css} +2 -2
  13. package/dist/assets/{NcFormBoxItem-Bjbi17-B.css → NcFormBoxItem-syU6X_5H.css} +14 -14
  14. package/dist/assets/{NcFormBoxSwitch-Cn-MBAzZ.css → NcFormBoxSwitch-D-GBFFaK.css} +2 -2
  15. package/dist/assets/{NcFormGroup-qFucmL8a.css → NcFormGroup-C9rXaPCl.css} +7 -7
  16. package/dist/assets/{NcHotkey-CvuY7fQJ.css → NcHotkey-0gFtnVYv.css} +8 -8
  17. package/dist/assets/{NcHotkeyList-BfrEkKmK.css → NcHotkeyList-DqyUQBw6.css} +2 -2
  18. package/dist/assets/{NcIconToggleSwitch-V-AKJgPA.css → NcIconToggleSwitch-BrjPjGQL.css} +4 -4
  19. package/dist/assets/{NcKbd-BeQpGp0b.css → NcKbd-B2M-oGN9.css} +3 -3
  20. package/dist/assets/{NcPopover-P1fheee2.css → NcPopover-C7YEE_vn.css} +14 -14
  21. package/dist/assets/{NcRadioGroup-BoFb0R8S.css → NcRadioGroup-CqQ5ahHP.css} +2 -2
  22. package/dist/assets/{NcRadioGroupButton-DUF_3DDU.css → NcRadioGroupButton-B1d2yRTk.css} +13 -13
  23. package/dist/assets/{NcRichContenteditable-DNABzVif.css → NcRichContenteditable-BggdwT5n.css} +17 -17
  24. package/dist/assets/{autolink-C_iad4O_.css → autolink-DH5K5u8D.css} +3 -3
  25. package/dist/chunks/{NcActions-CUmcZ3C3.mjs → NcActions-DY4GGONi.mjs} +2 -2
  26. package/dist/chunks/{NcActions-CUmcZ3C3.mjs.map → NcActions-DY4GGONi.mjs.map} +1 -1
  27. package/dist/chunks/{NcAppNavigationCaption-E9iJtiQt.mjs → NcAppNavigationCaption-BptTnvQU.mjs} +2 -2
  28. package/dist/chunks/{NcAppNavigationCaption-E9iJtiQt.mjs.map → NcAppNavigationCaption-BptTnvQU.mjs.map} +1 -1
  29. package/dist/chunks/{NcAppNavigationItem-BFAIHyTL.mjs → NcAppNavigationItem-B0-60shw.mjs} +2 -2
  30. package/dist/chunks/{NcAppNavigationItem-BFAIHyTL.mjs.map → NcAppNavigationItem-B0-60shw.mjs.map} +1 -1
  31. package/dist/chunks/{NcAppNavigationSettings-fbuQmy-q.mjs → NcAppNavigationSettings-1BzAhIDg.mjs} +8 -8
  32. package/dist/chunks/{NcAppNavigationSettings-fbuQmy-q.mjs.map → NcAppNavigationSettings-1BzAhIDg.mjs.map} +1 -1
  33. package/dist/chunks/{NcAppSettingsDialog-DByPnndK.mjs → NcAppSettingsDialog-BgZCuMK0.mjs} +6 -6
  34. package/dist/chunks/{NcAppSettingsDialog-DByPnndK.mjs.map → NcAppSettingsDialog-BgZCuMK0.mjs.map} +1 -1
  35. package/dist/chunks/{NcAppSettingsShortcutsSection-DgqVuZGx.mjs → NcAppSettingsShortcutsSection-og6gyYxr.mjs} +3 -3
  36. package/dist/chunks/{NcAppSettingsShortcutsSection-DgqVuZGx.mjs.map → NcAppSettingsShortcutsSection-og6gyYxr.mjs.map} +1 -1
  37. package/dist/chunks/{NcAppSidebar-Ch7Vp7q5.mjs → NcAppSidebar-DX26aRNB.mjs} +10 -10
  38. package/dist/chunks/{NcAppSidebar-Ch7Vp7q5.mjs.map → NcAppSidebar-DX26aRNB.mjs.map} +1 -1
  39. package/dist/chunks/{NcAssistantButton-CTrCv4CO.mjs → NcAssistantButton-BMuKy6Mh.mjs} +10 -10
  40. package/dist/chunks/{NcAssistantButton-CTrCv4CO.mjs.map → NcAssistantButton-BMuKy6Mh.mjs.map} +1 -1
  41. package/dist/chunks/{NcAssistantContent-CeuwcdMY.mjs → NcAssistantContent-D24YPWRc.mjs} +5 -5
  42. package/dist/chunks/{NcAssistantContent-CeuwcdMY.mjs.map → NcAssistantContent-D24YPWRc.mjs.map} +1 -1
  43. package/dist/chunks/{NcAssistantIcon-Dpp9_LUg.mjs → NcAssistantIcon-DW-HrfQg.mjs} +6 -6
  44. package/dist/chunks/{NcAssistantIcon-Dpp9_LUg.mjs.map → NcAssistantIcon-DW-HrfQg.mjs.map} +1 -1
  45. package/dist/chunks/{NcAvatar-M3-CbKbq.mjs → NcAvatar-DX-Nk9Es.mjs} +3 -3
  46. package/dist/chunks/{NcAvatar-M3-CbKbq.mjs.map → NcAvatar-DX-Nk9Es.mjs.map} +1 -1
  47. package/dist/chunks/{NcBlurHash-yPfSKY7W.mjs → NcBlurHash-BGaeAt4-.mjs} +4 -4
  48. package/dist/chunks/{NcBlurHash-yPfSKY7W.mjs.map → NcBlurHash-BGaeAt4-.mjs.map} +1 -1
  49. package/dist/chunks/{NcBreadcrumb-BeDMWE_b.mjs → NcBreadcrumb-DHvm77Vw.mjs} +2 -2
  50. package/dist/chunks/{NcBreadcrumb-BeDMWE_b.mjs.map → NcBreadcrumb-DHvm77Vw.mjs.map} +1 -1
  51. package/dist/chunks/{NcBreadcrumbs-CuQDDvin.mjs → NcBreadcrumbs-B_uysWv6.mjs} +3 -3
  52. package/dist/chunks/{NcBreadcrumbs-CuQDDvin.mjs.map → NcBreadcrumbs-B_uysWv6.mjs.map} +1 -1
  53. package/dist/chunks/{NcCheckboxRadioSwitch-D8Dfv4iw.mjs → NcCheckboxRadioSwitch-BVTMQSAg.mjs} +2 -2
  54. package/dist/chunks/{NcCheckboxRadioSwitch-D8Dfv4iw.mjs.map → NcCheckboxRadioSwitch-BVTMQSAg.mjs.map} +1 -1
  55. package/dist/chunks/{NcChip-nVHnbjaY.mjs → NcChip-BCtDxh7v.mjs} +2 -2
  56. package/dist/chunks/{NcChip-nVHnbjaY.mjs.map → NcChip-BCtDxh7v.mjs.map} +1 -1
  57. package/dist/chunks/{NcCollectionList-CO-iHqi6.mjs → NcCollectionList-DNfWulkK.mjs} +4 -4
  58. package/dist/chunks/{NcCollectionList-CO-iHqi6.mjs.map → NcCollectionList-DNfWulkK.mjs.map} +1 -1
  59. package/dist/chunks/{NcColorPicker-D6NbBOX3.mjs → NcColorPicker-CGE4Kei4.mjs} +2 -2
  60. package/dist/chunks/{NcColorPicker-D6NbBOX3.mjs.map → NcColorPicker-CGE4Kei4.mjs.map} +1 -1
  61. package/dist/chunks/{NcDashboardWidget-ftOfMTzx.mjs → NcDashboardWidget-DKZ8Mgt0.mjs} +3 -3
  62. package/dist/chunks/{NcDashboardWidget-ftOfMTzx.mjs.map → NcDashboardWidget-DKZ8Mgt0.mjs.map} +1 -1
  63. package/dist/chunks/{NcDashboardWidgetItem-BwwFiNOL.mjs → NcDashboardWidgetItem-DxA6-V0R.mjs} +3 -3
  64. package/dist/chunks/{NcDashboardWidgetItem-BwwFiNOL.mjs.map → NcDashboardWidgetItem-DxA6-V0R.mjs.map} +1 -1
  65. package/dist/chunks/{NcDialog-kwzJ3A4X.mjs → NcDialog-D1u-qo74.mjs} +2 -2
  66. package/dist/chunks/{NcDialog-kwzJ3A4X.mjs.map → NcDialog-D1u-qo74.mjs.map} +1 -1
  67. package/dist/chunks/{NcEmojiPicker-Bpw-68QP.mjs → NcEmojiPicker-R2GSAiCW.mjs} +3 -3
  68. package/dist/chunks/{NcEmojiPicker-Bpw-68QP.mjs.map → NcEmojiPicker-R2GSAiCW.mjs.map} +1 -1
  69. package/dist/chunks/{NcFilePicker-nPCwHMqj.mjs → NcFilePicker-C7Xs8E2Q.mjs} +4 -4
  70. package/dist/chunks/{NcFilePicker-nPCwHMqj.mjs.map → NcFilePicker-C7Xs8E2Q.mjs.map} +1 -1
  71. package/dist/chunks/{NcFormBox-ClWfuBWz.mjs → NcFormBox-3Ql2JSK8.mjs} +7 -7
  72. package/dist/chunks/{NcFormBox-ClWfuBWz.mjs.map → NcFormBox-3Ql2JSK8.mjs.map} +1 -1
  73. package/dist/chunks/{NcFormBoxButton-i4i3Lt_Q.mjs → NcFormBoxButton-DIKZK9kp.mjs} +5 -5
  74. package/dist/chunks/{NcFormBoxButton-i4i3Lt_Q.mjs.map → NcFormBoxButton-DIKZK9kp.mjs.map} +1 -1
  75. package/dist/chunks/{NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang-NfKiRrIn.mjs → NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang-BVCoU7LB.mjs} +2 -2
  76. package/dist/chunks/{NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang-NfKiRrIn.mjs.map → NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang-BVCoU7LB.mjs.map} +1 -1
  77. package/dist/chunks/{NcFormBoxItem-BTB68AEB.mjs → NcFormBoxItem-CV8UrJib.mjs} +10 -10
  78. package/dist/chunks/{NcFormBoxItem-BTB68AEB.mjs.map → NcFormBoxItem-CV8UrJib.mjs.map} +1 -1
  79. package/dist/chunks/{NcFormBoxSwitch-DlNcJ1q7.mjs → NcFormBoxSwitch-C0hMaYEj.mjs} +6 -6
  80. package/dist/chunks/{NcFormBoxSwitch-DlNcJ1q7.mjs.map → NcFormBoxSwitch-C0hMaYEj.mjs.map} +1 -1
  81. package/dist/chunks/{NcFormGroup-DvLGFMdb.mjs → NcFormGroup-W-Wgps0q.mjs} +9 -9
  82. package/dist/chunks/{NcFormGroup-DvLGFMdb.mjs.map → NcFormGroup-W-Wgps0q.mjs.map} +1 -1
  83. package/dist/chunks/{NcHotkey-C-TYyC8X.mjs → NcHotkey-9HBkzRAt.mjs} +7 -7
  84. package/dist/chunks/{NcHotkey-C-TYyC8X.mjs.map → NcHotkey-9HBkzRAt.mjs.map} +1 -1
  85. package/dist/chunks/{NcHotkeyList-CmMgGhMr.mjs → NcHotkeyList-BWerT8qH.mjs} +4 -4
  86. package/dist/chunks/{NcHotkeyList-CmMgGhMr.mjs.map → NcHotkeyList-BWerT8qH.mjs.map} +1 -1
  87. package/dist/chunks/{NcIconToggleSwitch-CbfRwb67.mjs → NcIconToggleSwitch-CWzIC2ar.mjs} +4 -4
  88. package/dist/chunks/{NcIconToggleSwitch-CbfRwb67.mjs.map → NcIconToggleSwitch-CWzIC2ar.mjs.map} +1 -1
  89. package/dist/chunks/{NcKbd-Iyp0KDp4.mjs → NcKbd-DCsSL73F.mjs} +4 -4
  90. package/dist/chunks/{NcKbd-Iyp0KDp4.mjs.map → NcKbd-DCsSL73F.mjs.map} +1 -1
  91. package/dist/chunks/{NcListItem-Y5a098Cw.mjs → NcListItem-DItks2Sq.mjs} +2 -2
  92. package/dist/chunks/{NcListItem-Y5a098Cw.mjs.map → NcListItem-DItks2Sq.mjs.map} +1 -1
  93. package/dist/chunks/{NcListItemIcon-D_f5AGrh.mjs → NcListItemIcon-BKbbR_Vf.mjs} +2 -2
  94. package/dist/chunks/{NcListItemIcon-D_f5AGrh.mjs.map → NcListItemIcon-BKbbR_Vf.mjs.map} +1 -1
  95. package/dist/chunks/{NcModal-DUWLRm_F.mjs → NcModal-B-YLND3e.mjs} +2 -2
  96. package/dist/chunks/{NcModal-DUWLRm_F.mjs.map → NcModal-B-YLND3e.mjs.map} +1 -1
  97. package/dist/chunks/{NcPopover-CtdLAkEU.mjs → NcPopover-CObDh89q.mjs} +4 -4
  98. package/dist/chunks/{NcPopover-CtdLAkEU.mjs.map → NcPopover-CObDh89q.mjs.map} +1 -1
  99. package/dist/chunks/{NcRadioGroup-BzW4XHoK.mjs → NcRadioGroup-DYwRkXaY.mjs} +6 -6
  100. package/dist/chunks/{NcRadioGroup-BzW4XHoK.mjs.map → NcRadioGroup-DYwRkXaY.mjs.map} +1 -1
  101. package/dist/chunks/{NcRadioGroupButton-CXKQMID9.mjs → NcRadioGroupButton-WKdAdfUy.mjs} +8 -8
  102. package/dist/chunks/{NcRadioGroupButton-CXKQMID9.mjs.map → NcRadioGroupButton-WKdAdfUy.mjs.map} +1 -1
  103. package/dist/chunks/{NcRelatedResourcesPanel-C0j0Fs4r.mjs → NcRelatedResourcesPanel-Bk9l-BN3.mjs} +2 -2
  104. package/dist/chunks/{NcRelatedResourcesPanel-C0j0Fs4r.mjs.map → NcRelatedResourcesPanel-Bk9l-BN3.mjs.map} +1 -1
  105. package/dist/chunks/{NcRichContenteditable-DO3_WniI.mjs → NcRichContenteditable-BwGkxhDF.mjs} +16 -16
  106. package/dist/chunks/{NcRichContenteditable-DO3_WniI.mjs.map → NcRichContenteditable-BwGkxhDF.mjs.map} +1 -1
  107. package/dist/chunks/{NcRichText-BOBQq7Od.mjs → NcRichText-Dkk6iX8F.mjs} +4 -4
  108. package/dist/chunks/{NcRichText-BOBQq7Od.mjs.map → NcRichText-Dkk6iX8F.mjs.map} +1 -1
  109. package/dist/chunks/{NcSelectUsers-CI8twLn9.mjs → NcSelectUsers-0AajBWY6.mjs} +2 -2
  110. package/dist/chunks/{NcSelectUsers-CI8twLn9.mjs.map → NcSelectUsers-0AajBWY6.mjs.map} +1 -1
  111. package/dist/chunks/{NcUserBubble-CDQa0hGy.mjs → NcUserBubble-BXBgGflZ.mjs} +3 -3
  112. package/dist/chunks/{NcUserBubble-CDQa0hGy.mjs.map → NcUserBubble-BXBgGflZ.mjs.map} +1 -1
  113. package/dist/chunks/{autolink-BT8u-IL-.mjs → autolink-B2azbG18.mjs} +5 -5
  114. package/dist/chunks/{autolink-BT8u-IL-.mjs.map → autolink-B2azbG18.mjs.map} +1 -1
  115. package/dist/chunks/{referencePickerModal-B4bsiMOy.mjs → referencePickerModal-CD1BjLPe.mjs} +4 -4
  116. package/dist/chunks/{referencePickerModal-B4bsiMOy.mjs.map → referencePickerModal-CD1BjLPe.mjs.map} +1 -1
  117. package/dist/components/NcActions/index.mjs +1 -1
  118. package/dist/components/NcAppNavigationCaption/index.mjs +1 -1
  119. package/dist/components/NcAppNavigationItem/index.mjs +1 -1
  120. package/dist/components/NcAppNavigationSettings/index.mjs +1 -1
  121. package/dist/components/NcAppSettingsDialog/index.mjs +1 -1
  122. package/dist/components/NcAppSettingsSectionShortcuts/index.mjs +1 -1
  123. package/dist/components/NcAppSettingsShortcutsSection/index.mjs +1 -1
  124. package/dist/components/NcAppSidebar/index.mjs +1 -1
  125. package/dist/components/NcAssistantButton/index.mjs +1 -1
  126. package/dist/components/NcAssistantContent/index.mjs +1 -1
  127. package/dist/components/NcAssistantIcon/index.mjs +1 -1
  128. package/dist/components/NcAvatar/index.mjs +1 -1
  129. package/dist/components/NcBlurHash/index.mjs +1 -1
  130. package/dist/components/NcBreadcrumb/index.mjs +1 -1
  131. package/dist/components/NcBreadcrumbs/index.mjs +1 -1
  132. package/dist/components/NcCheckboxRadioSwitch/index.mjs +1 -1
  133. package/dist/components/NcChip/index.mjs +1 -1
  134. package/dist/components/NcCollectionList/index.mjs +1 -1
  135. package/dist/components/NcColorPicker/index.mjs +1 -1
  136. package/dist/components/NcDashboardWidget/index.mjs +1 -1
  137. package/dist/components/NcDashboardWidgetItem/index.mjs +1 -1
  138. package/dist/components/NcDialog/index.mjs +1 -1
  139. package/dist/components/NcEmojiPicker/index.mjs +1 -1
  140. package/dist/components/NcFilePicker/index.mjs +1 -1
  141. package/dist/components/NcFormBox/index.mjs +1 -1
  142. package/dist/components/NcFormBoxButton/index.mjs +1 -1
  143. package/dist/components/NcFormBoxCopyButton/index.mjs +1 -1
  144. package/dist/components/NcFormBoxSwitch/index.mjs +1 -1
  145. package/dist/components/NcFormGroup/index.mjs +1 -1
  146. package/dist/components/NcHotkey/index.mjs +1 -1
  147. package/dist/components/NcHotkeyList/index.mjs +1 -1
  148. package/dist/components/NcKbd/index.mjs +1 -1
  149. package/dist/components/NcListItem/index.mjs +1 -1
  150. package/dist/components/NcListItemIcon/index.mjs +1 -1
  151. package/dist/components/NcModal/index.mjs +1 -1
  152. package/dist/components/NcPopover/index.mjs +1 -1
  153. package/dist/components/NcRadioGroup/index.mjs +1 -1
  154. package/dist/components/NcRadioGroupButton/index.mjs +1 -1
  155. package/dist/components/NcRelatedResourcesPanel/index.mjs +1 -1
  156. package/dist/components/NcRichContenteditable/index.mjs +1 -1
  157. package/dist/components/NcRichText/index.mjs +3 -3
  158. package/dist/components/NcSelectUsers/index.mjs +1 -1
  159. package/dist/components/NcUserBubble/index.mjs +1 -1
  160. package/dist/functions/reference/index.mjs +1 -1
  161. package/dist/index.mjs +43 -43
  162. package/package.json +12 -12
@@ -1,6 +1,6 @@
1
1
  import '../assets/NcSelectUsers-YF5729PJ.css';
2
2
  import { defineComponent, useModel, ref, watch, openBlock, createBlock, unref, mergeProps, withCtx, createVNode, mergeModels } from "vue";
3
- import { N as NcListItemIcon } from "./NcListItemIcon-D_f5AGrh.mjs";
3
+ import { N as NcListItemIcon } from "./NcListItemIcon-BKbbR_Vf.mjs";
4
4
  import { N as NcSelect } from "./NcSelect-BOFzoCwK.mjs";
5
5
  import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.mjs";
6
6
  const _sfc_main = /* @__PURE__ */ defineComponent({
@@ -73,4 +73,4 @@ const NcSelectUsers = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "dat
73
73
  export {
74
74
  NcSelectUsers as N
75
75
  };
76
- //# sourceMappingURL=NcSelectUsers-CI8twLn9.mjs.map
76
+ //# sourceMappingURL=NcSelectUsers-0AajBWY6.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"NcSelectUsers-CI8twLn9.mjs","sources":["../../src/components/NcSelectUsers/NcSelectUsers.vue"],"sourcesContent":["<!--\n\t- SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n\t- SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\n### Nextcloud user picker\n\n#### Examples\n\n```vue\n<template>\n\t<div class=\"grid\">\n\t\t<div v-for=\"{ props } in selectArray\"\n\t\t\tclass=\"container\">\n\t\t\t<NcSelectUsers v-bind=\"props\"\n\t\t\t\tv-model=\"props.value\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport svgAccountGroup from '@mdi/svg/svg/account-group.svg?raw'\nimport svgEmail from '@mdi/svg/svg/email.svg?raw'\n\nconst selectArray = [\n\t{\n\t\tprops: {\n\t\t\tinputLabel: 'User select',\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tid: '0-john',\n\t\t\t\t\tdisplayName: 'John',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'john@example.org',\n\t\t\t\t\t// Example of how to show the user status within the option\n\t\t\t\t\tuser: '0-john',\n\t\t\t\t\tpreloadedUserStatus: {\n\t\t\t\t\t\tstatus: 'online',\n\t\t\t\t\t\tmessage: 'I am online',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0-emma',\n\t\t\t\t\tdisplayName: 'Emma',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'emma@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0-olivia',\n\t\t\t\t\tdisplayName: 'Olivia',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'olivia@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0-noah',\n\t\t\t\t\tdisplayName: 'Noah',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'noah@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0-oliver',\n\t\t\t\t\tdisplayName: 'Oliver',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'oliver@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '1-admin',\n\t\t\t\t\tdisplayName: 'Admin',\n\t\t\t\t\tisNoUser: true,\n\t\t\t\t\ticonSvg: svgAccountGroup,\n\t\t\t\t\ticonName: 'Group icon',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '2-org@example.org',\n\t\t\t\t\tdisplayName: 'Organization',\n\t\t\t\t\tisNoUser: true,\n\t\t\t\t\tsubname: 'org@example.org',\n\t\t\t\t\ticonSvg: svgEmail,\n\t\t\t\t\ticonName: 'Email icon',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t},\n\n\t{\n\t\tprops: {\n\t\t\tinputLabel: 'Multiple user select (stay open on select)',\n\t\t\tkeepOpen: true,\n\t\t\tmultiple: true,\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tid: '0-john',\n\t\t\t\t\tdisplayName: 'John',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'john@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0-emma',\n\t\t\t\t\tdisplayName: 'Emma',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'emma@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0-olivia',\n\t\t\t\t\tdisplayName: 'Olivia',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'olivia@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0-noah',\n\t\t\t\t\tdisplayName: 'Noah',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'noah@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0-oliver',\n\t\t\t\t\tdisplayName: 'Oliver',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'oliver@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '1-admin',\n\t\t\t\t\tdisplayName: 'Admin',\n\t\t\t\t\tisNoUser: true,\n\t\t\t\t\ticonSvg: svgAccountGroup,\n\t\t\t\t\ticonName: 'Group icon',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '2-org@example.org',\n\t\t\t\t\tdisplayName: 'Organization',\n\t\t\t\t\tisNoUser: true,\n\t\t\t\t\tsubname: 'org@example.org',\n\t\t\t\t\ticonSvg: svgEmail,\n\t\t\t\t\ticonName: 'Email icon',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t},\n]\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tselectArray,\n\t\t}\n\t},\n}\n</script>\n\n<style>\n.grid {\n\tdisplay: grid;\n\tgrid-template-columns: repeat(1, 500px);\n\tgap: 10px;\n}\n\n.container {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 2px 0;\n}\n</style>\n```\n</docs>\n\n<script setup lang=\"ts\">\nimport { ref, watch } from 'vue'\nimport NcListItemIcon from '../NcListItemIcon/index.js'\nimport NcSelect from '../NcSelect/index.js'\n\nexport interface NcSelectUsersModel {\n\tid: string\n\n\t/**\n\t * Main display name\n\t */\n\tdisplayName: string\n\n\t/**\n\t * The user id.\n\t * Will be used to fetch the user status if not disabled.\n\t */\n\tuser?: string\n\n\t/**\n\t * The secondary displayname (e.g. the email address).\n\t */\n\tsubname?: string\n\n\t/**\n\t * Optional icon to use as the avatar.\n\t * Setting this will disable the automatic avatar loading.\n\t */\n\ticonSvg?: string\n\n\t/**\n\t * Accessible name for the icon.\n\t */\n\ticonName?: string\n\n\t/**\n\t * If this is a guest user.\n\t * Needed as guest users have a different API endpoint for avatar loading.\n\t */\n\tisGuest?: boolean\n\n\t/**\n\t * Set if this is not a regular user.\n\t * This will disable user status and avatar loading.\n\t */\n\tisNoUser?: boolean\n}\n\n/**\n * Currently selected value.\n * The `v-model` directive may be used for two-way data binding.\n *\n * If the `multiple` property is set then an array of users is emitted,\n * otherwise a single user data object will be emitted.\n */\nconst modelValue = defineModel<NcSelectUsersModel | NcSelectUsersModel[]>('modelValue')\n\ndefineProps<{\n\t/**\n\t * `aria-label` for the clear input button.\n\t *\n\t * @default 'Clear selected'\n\t */\n\tariaLabelClearSelected?: string\n\n\t/**\n\t * `aria-label` for the listbox element.\n\t *\n\t * @default 'Options'\n\t */\n\tariaLabelListbox?: string\n\n\t/**\n\t * Allows to customize the `aria-label` for the deselect-option button.\n\t *\n\t * @default (label) => `Deselect ${label}`\n\t */\n\tariaLabelDeselectOption?: (label: string) => string\n\n\t/**\n\t * Disable the component.\n\t */\n\tdisabled?: boolean\n\n\t/**\n\t * Input element id.\n\t *\n\t * @default random generated id\n\t */\n\tinputId?: string\n\n\t/**\n\t * Visible label for the input element\n\t *\n\t * @default 'Select account'\n\t */\n\tinputLabel?: string\n\n\t/**\n\t * Pass true if you are using an external label.\n\t * In this case make sure you set the `for` attribute of your `<label>` to the `inputId` of this component.\n\t */\n\tlabelOutside?: boolean\n\n\t/**\n\t * Keep the dropdown open after selecting an entry.\n\t */\n\tkeepOpen?: boolean\n\n\t/**\n\t * Show a loading icon.\n\t */\n\tloading?: boolean\n\n\t/**\n\t * Allow selection of multiple options\n\t */\n\tmultiple?: boolean\n\n\t/**\n\t * Disable automatic wrapping when selected options overflow the width.\n\t */\n\tnoWrap?: boolean\n\n\t/**\n\t * Array of users or similar object (e.g. groups or guest users).\n\t */\n\toptions: NcSelectUsersModel[]\n\n\t/**\n\t * Placeholder text.\n\t *\n\t * @default ''\n\t */\n\tplaceholder?: string\n\n\t/**\n\t * Enable if a value is required for native form validation.\n\t */\n\trequired?: boolean\n}>()\n\nconst emit = defineEmits<{\n\t/**\n\t * Emitted when the user enters some query.\n\t * This can be used to asynchronously fetch more options.\n\t */\n\tsearch: [string]\n}>()\n\nconst search = ref('')\nwatch(search, () => emit('search', search.value))\n\n// Avatar size so the component has the same size as Nc*Field\nconst clickableArea = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue('--default-clickable-area'))\nconst gridBaseLine = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue('--default-grid-baseline'))\nconst avatarSize = clickableArea - 2 * gridBaseLine\n\n/**\n * Filter function to search users.\n *\n * @param option - The option to check\n * @param option.subname - The second line to check (often the email address)\n * @param label - The label of the option\n * @param search - The current search string\n */\nfunction filterBy(option: { subname?: string }, label: string, search: string) {\n\t// Match the email notation like \"Jane <j.doe@example.com>\" with the email address as matching group\n\tconst EMAIL_NOTATION = /[^<]*<([^>]+)/\n\n\tconst match = search.match(EMAIL_NOTATION)\n\tconst subname = option.subname?.toLocaleLowerCase() ?? ''\n\treturn (match && subname.indexOf(match[1]!.toLocaleLowerCase()) > -1)\n\t\t|| (`${label} ${option.subname}`\n\t\t\t.toLocaleLowerCase()\n\t\t\t.indexOf(search.toLocaleLowerCase()) > -1)\n}\n</script>\n\n<template>\n\t<NcSelect\n\t\tv-model=\"modelValue\"\n\t\tclass=\"nc-select-users\"\n\t\tv-bind=\"$props\"\n\t\t:filterBy\n\t\tlabel=\"displayName\"\n\t\t@search=\"search = $event\">\n\t\t<template #option=\"option\">\n\t\t\t<NcListItemIcon\n\t\t\t\tv-bind=\"option\"\n\t\t\t\t:avatarSize=\"32\"\n\t\t\t\t:name=\"option.displayName\"\n\t\t\t\t:search />\n\t\t</template>\n\t\t<template #selected-option=\"selectedOption\">\n\t\t\t<NcListItemIcon\n\t\t\t\tv-bind=\"selectedOption\"\n\t\t\t\t:avatarSize\n\t\t\t\t:name=\"selectedOption.displayName\"\n\t\t\t\tnoMargin\n\t\t\t\t:search />\n\t\t</template>\n\t</NcSelect>\n</template>\n\n<style scoped lang=\"css\">\n.nc-select-users :deep(.vs__selected) {\n\tpadding-inline: 0 5px !important;\n}\n</style>\n"],"names":["_useModel","search","_openBlock","_createBlock","_unref","_mergeProps","$props","_withCtx","_createVNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA6NA,UAAM,aAAaA,SAAsD,SAAC,YAAY;AAuFtF,UAAM,OAAO;AAQb,UAAM,SAAS,IAAI,EAAE;AACrB,UAAM,QAAQ,MAAM,KAAK,UAAU,OAAO,KAAK,CAAC;AAGhD,UAAM,gBAAgB,OAAO,SAAS,OAAO,iBAAiB,SAAS,IAAI,EAAE,iBAAiB,0BAA0B,CAAC;AACzH,UAAM,eAAe,OAAO,SAAS,OAAO,iBAAiB,SAAS,IAAI,EAAE,iBAAiB,yBAAyB,CAAC;AACvH,UAAM,aAAa,gBAAgB,IAAI;AAUvC,aAAS,SAAS,QAA8B,OAAeC,SAAgB;AAE9E,YAAM,iBAAiB;AAEvB,YAAM,QAAQA,QAAO,MAAM,cAAc;AACzC,YAAM,UAAU,OAAO,SAAS,kBAAA,KAAuB;AACvD,aAAQ,SAAS,QAAQ,QAAQ,MAAM,CAAC,EAAG,kBAAA,CAAmB,IAAI,MAC7D,GAAG,KAAK,IAAI,OAAO,OAAO,GAC5B,oBACA,QAAQA,QAAO,kBAAA,CAAmB,IAAI;AAAA,IAC1C;;AAIC,aAAAC,aAAAC,YAsBWC,iBAtBXC,WAsBW;AAAA,oBArBD,WAAA;AAAA,qEAAA,WAAU,QAAA;AAAA,QACnB,OAAM;AAAA,MAAA,GACEC,KAAAA,QAAM;AAAA,QACb;AAAA,QACD,OAAM;AAAA,QACL,UAAM,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,OAAA,QAAS;AAAA,MAAA;QACP,QAAMC,QAChB,CAIW,WALa;AAAA,UACxBC,YAIWJ,MAAA,cAAA,GAJXC,WAIW,QAHI;AAAA,YACb,YAAY;AAAA,YACZ,MAAM,OAAO;AAAA,YACb,QAAA,OAAA;AAAA,UAAA;;QAEQ,mBAAeE,QACzB,CAKW,mBAN8B;AAAA,UACzCC,YAKWJ,MAAA,cAAA,GALXC,WAKW,gBAJY;AAAA,YACrB;AAAA,YACA,MAAM,eAAe;AAAA,YACtB,UAAA;AAAA,YACC,QAAA,OAAA;AAAA,UAAA;;;;;;;;"}
1
+ {"version":3,"file":"NcSelectUsers-0AajBWY6.mjs","sources":["../../src/components/NcSelectUsers/NcSelectUsers.vue"],"sourcesContent":["<!--\n\t- SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n\t- SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\n### Nextcloud user picker\n\n#### Examples\n\n```vue\n<template>\n\t<div class=\"grid\">\n\t\t<div v-for=\"{ props } in selectArray\"\n\t\t\tclass=\"container\">\n\t\t\t<NcSelectUsers v-bind=\"props\"\n\t\t\t\tv-model=\"props.value\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport svgAccountGroup from '@mdi/svg/svg/account-group.svg?raw'\nimport svgEmail from '@mdi/svg/svg/email.svg?raw'\n\nconst selectArray = [\n\t{\n\t\tprops: {\n\t\t\tinputLabel: 'User select',\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tid: '0-john',\n\t\t\t\t\tdisplayName: 'John',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'john@example.org',\n\t\t\t\t\t// Example of how to show the user status within the option\n\t\t\t\t\tuser: '0-john',\n\t\t\t\t\tpreloadedUserStatus: {\n\t\t\t\t\t\tstatus: 'online',\n\t\t\t\t\t\tmessage: 'I am online',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0-emma',\n\t\t\t\t\tdisplayName: 'Emma',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'emma@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0-olivia',\n\t\t\t\t\tdisplayName: 'Olivia',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'olivia@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0-noah',\n\t\t\t\t\tdisplayName: 'Noah',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'noah@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0-oliver',\n\t\t\t\t\tdisplayName: 'Oliver',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'oliver@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '1-admin',\n\t\t\t\t\tdisplayName: 'Admin',\n\t\t\t\t\tisNoUser: true,\n\t\t\t\t\ticonSvg: svgAccountGroup,\n\t\t\t\t\ticonName: 'Group icon',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '2-org@example.org',\n\t\t\t\t\tdisplayName: 'Organization',\n\t\t\t\t\tisNoUser: true,\n\t\t\t\t\tsubname: 'org@example.org',\n\t\t\t\t\ticonSvg: svgEmail,\n\t\t\t\t\ticonName: 'Email icon',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t},\n\n\t{\n\t\tprops: {\n\t\t\tinputLabel: 'Multiple user select (stay open on select)',\n\t\t\tkeepOpen: true,\n\t\t\tmultiple: true,\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tid: '0-john',\n\t\t\t\t\tdisplayName: 'John',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'john@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0-emma',\n\t\t\t\t\tdisplayName: 'Emma',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'emma@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0-olivia',\n\t\t\t\t\tdisplayName: 'Olivia',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'olivia@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0-noah',\n\t\t\t\t\tdisplayName: 'Noah',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'noah@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '0-oliver',\n\t\t\t\t\tdisplayName: 'Oliver',\n\t\t\t\t\tisNoUser: false,\n\t\t\t\t\tsubname: 'oliver@example.org',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '1-admin',\n\t\t\t\t\tdisplayName: 'Admin',\n\t\t\t\t\tisNoUser: true,\n\t\t\t\t\ticonSvg: svgAccountGroup,\n\t\t\t\t\ticonName: 'Group icon',\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: '2-org@example.org',\n\t\t\t\t\tdisplayName: 'Organization',\n\t\t\t\t\tisNoUser: true,\n\t\t\t\t\tsubname: 'org@example.org',\n\t\t\t\t\ticonSvg: svgEmail,\n\t\t\t\t\ticonName: 'Email icon',\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t},\n]\n\nexport default {\n\tdata() {\n\t\treturn {\n\t\t\tselectArray,\n\t\t}\n\t},\n}\n</script>\n\n<style>\n.grid {\n\tdisplay: grid;\n\tgrid-template-columns: repeat(1, 500px);\n\tgap: 10px;\n}\n\n.container {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 2px 0;\n}\n</style>\n```\n</docs>\n\n<script setup lang=\"ts\">\nimport { ref, watch } from 'vue'\nimport NcListItemIcon from '../NcListItemIcon/index.js'\nimport NcSelect from '../NcSelect/index.js'\n\nexport interface NcSelectUsersModel {\n\tid: string\n\n\t/**\n\t * Main display name\n\t */\n\tdisplayName: string\n\n\t/**\n\t * The user id.\n\t * Will be used to fetch the user status if not disabled.\n\t */\n\tuser?: string\n\n\t/**\n\t * The secondary displayname (e.g. the email address).\n\t */\n\tsubname?: string\n\n\t/**\n\t * Optional icon to use as the avatar.\n\t * Setting this will disable the automatic avatar loading.\n\t */\n\ticonSvg?: string\n\n\t/**\n\t * Accessible name for the icon.\n\t */\n\ticonName?: string\n\n\t/**\n\t * If this is a guest user.\n\t * Needed as guest users have a different API endpoint for avatar loading.\n\t */\n\tisGuest?: boolean\n\n\t/**\n\t * Set if this is not a regular user.\n\t * This will disable user status and avatar loading.\n\t */\n\tisNoUser?: boolean\n}\n\n/**\n * Currently selected value.\n * The `v-model` directive may be used for two-way data binding.\n *\n * If the `multiple` property is set then an array of users is emitted,\n * otherwise a single user data object will be emitted.\n */\nconst modelValue = defineModel<NcSelectUsersModel | NcSelectUsersModel[]>('modelValue')\n\ndefineProps<{\n\t/**\n\t * `aria-label` for the clear input button.\n\t *\n\t * @default 'Clear selected'\n\t */\n\tariaLabelClearSelected?: string\n\n\t/**\n\t * `aria-label` for the listbox element.\n\t *\n\t * @default 'Options'\n\t */\n\tariaLabelListbox?: string\n\n\t/**\n\t * Allows to customize the `aria-label` for the deselect-option button.\n\t *\n\t * @default (label) => `Deselect ${label}`\n\t */\n\tariaLabelDeselectOption?: (label: string) => string\n\n\t/**\n\t * Disable the component.\n\t */\n\tdisabled?: boolean\n\n\t/**\n\t * Input element id.\n\t *\n\t * @default random generated id\n\t */\n\tinputId?: string\n\n\t/**\n\t * Visible label for the input element\n\t *\n\t * @default 'Select account'\n\t */\n\tinputLabel?: string\n\n\t/**\n\t * Pass true if you are using an external label.\n\t * In this case make sure you set the `for` attribute of your `<label>` to the `inputId` of this component.\n\t */\n\tlabelOutside?: boolean\n\n\t/**\n\t * Keep the dropdown open after selecting an entry.\n\t */\n\tkeepOpen?: boolean\n\n\t/**\n\t * Show a loading icon.\n\t */\n\tloading?: boolean\n\n\t/**\n\t * Allow selection of multiple options\n\t */\n\tmultiple?: boolean\n\n\t/**\n\t * Disable automatic wrapping when selected options overflow the width.\n\t */\n\tnoWrap?: boolean\n\n\t/**\n\t * Array of users or similar object (e.g. groups or guest users).\n\t */\n\toptions: NcSelectUsersModel[]\n\n\t/**\n\t * Placeholder text.\n\t *\n\t * @default ''\n\t */\n\tplaceholder?: string\n\n\t/**\n\t * Enable if a value is required for native form validation.\n\t */\n\trequired?: boolean\n}>()\n\nconst emit = defineEmits<{\n\t/**\n\t * Emitted when the user enters some query.\n\t * This can be used to asynchronously fetch more options.\n\t */\n\tsearch: [string]\n}>()\n\nconst search = ref('')\nwatch(search, () => emit('search', search.value))\n\n// Avatar size so the component has the same size as Nc*Field\nconst clickableArea = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue('--default-clickable-area'))\nconst gridBaseLine = Number.parseInt(window.getComputedStyle(document.body).getPropertyValue('--default-grid-baseline'))\nconst avatarSize = clickableArea - 2 * gridBaseLine\n\n/**\n * Filter function to search users.\n *\n * @param option - The option to check\n * @param option.subname - The second line to check (often the email address)\n * @param label - The label of the option\n * @param search - The current search string\n */\nfunction filterBy(option: { subname?: string }, label: string, search: string) {\n\t// Match the email notation like \"Jane <j.doe@example.com>\" with the email address as matching group\n\tconst EMAIL_NOTATION = /[^<]*<([^>]+)/\n\n\tconst match = search.match(EMAIL_NOTATION)\n\tconst subname = option.subname?.toLocaleLowerCase() ?? ''\n\treturn (match && subname.indexOf(match[1]!.toLocaleLowerCase()) > -1)\n\t\t|| (`${label} ${option.subname}`\n\t\t\t.toLocaleLowerCase()\n\t\t\t.indexOf(search.toLocaleLowerCase()) > -1)\n}\n</script>\n\n<template>\n\t<NcSelect\n\t\tv-model=\"modelValue\"\n\t\tclass=\"nc-select-users\"\n\t\tv-bind=\"$props\"\n\t\t:filterBy\n\t\tlabel=\"displayName\"\n\t\t@search=\"search = $event\">\n\t\t<template #option=\"option\">\n\t\t\t<NcListItemIcon\n\t\t\t\tv-bind=\"option\"\n\t\t\t\t:avatarSize=\"32\"\n\t\t\t\t:name=\"option.displayName\"\n\t\t\t\t:search />\n\t\t</template>\n\t\t<template #selected-option=\"selectedOption\">\n\t\t\t<NcListItemIcon\n\t\t\t\tv-bind=\"selectedOption\"\n\t\t\t\t:avatarSize\n\t\t\t\t:name=\"selectedOption.displayName\"\n\t\t\t\tnoMargin\n\t\t\t\t:search />\n\t\t</template>\n\t</NcSelect>\n</template>\n\n<style scoped lang=\"css\">\n.nc-select-users :deep(.vs__selected) {\n\tpadding-inline: 0 5px !important;\n}\n</style>\n"],"names":["_useModel","search","_openBlock","_createBlock","_unref","_mergeProps","$props","_withCtx","_createVNode"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA6NA,UAAM,aAAaA,SAAsD,SAAC,YAAY;AAuFtF,UAAM,OAAO;AAQb,UAAM,SAAS,IAAI,EAAE;AACrB,UAAM,QAAQ,MAAM,KAAK,UAAU,OAAO,KAAK,CAAC;AAGhD,UAAM,gBAAgB,OAAO,SAAS,OAAO,iBAAiB,SAAS,IAAI,EAAE,iBAAiB,0BAA0B,CAAC;AACzH,UAAM,eAAe,OAAO,SAAS,OAAO,iBAAiB,SAAS,IAAI,EAAE,iBAAiB,yBAAyB,CAAC;AACvH,UAAM,aAAa,gBAAgB,IAAI;AAUvC,aAAS,SAAS,QAA8B,OAAeC,SAAgB;AAE9E,YAAM,iBAAiB;AAEvB,YAAM,QAAQA,QAAO,MAAM,cAAc;AACzC,YAAM,UAAU,OAAO,SAAS,kBAAA,KAAuB;AACvD,aAAQ,SAAS,QAAQ,QAAQ,MAAM,CAAC,EAAG,kBAAA,CAAmB,IAAI,MAC7D,GAAG,KAAK,IAAI,OAAO,OAAO,GAC5B,oBACA,QAAQA,QAAO,kBAAA,CAAmB,IAAI;AAAA,IAC1C;;AAIC,aAAAC,aAAAC,YAsBWC,iBAtBXC,WAsBW;AAAA,oBArBD,WAAA;AAAA,qEAAA,WAAU,QAAA;AAAA,QACnB,OAAM;AAAA,MAAA,GACEC,KAAAA,QAAM;AAAA,QACb;AAAA,QACD,OAAM;AAAA,QACL,UAAM,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,OAAA,QAAS;AAAA,MAAA;QACP,QAAMC,QAChB,CAIW,WALa;AAAA,UACxBC,YAIWJ,MAAA,cAAA,GAJXC,WAIW,QAHI;AAAA,YACb,YAAY;AAAA,YACZ,MAAM,OAAO;AAAA,YACb,QAAA,OAAA;AAAA,UAAA;;QAEQ,mBAAeE,QACzB,CAKW,mBAN8B;AAAA,UACzCC,YAKWJ,MAAA,cAAA,GALXC,WAKW,gBAJY;AAAA,YACrB;AAAA,YACA,MAAM,eAAe;AAAA,YACtB,UAAA;AAAA,YACC,QAAA,OAAA;AAAA,UAAA;;;;;;;;"}
@@ -1,8 +1,8 @@
1
1
  import '../assets/NcUserBubble-DFUmBxeb.css';
2
2
  import { openBlock, createElementBlock, renderSlot, defineComponent, useModel, computed, warn, watch, createBlock, resolveDynamicComponent, withCtx, mergeProps, createVNode, normalizeStyle, createElementVNode, toDisplayString, createCommentVNode, mergeModels } from "vue";
3
3
  import { RouterLink } from "vue-router";
4
- import { N as NcAvatar } from "./NcAvatar-M3-CbKbq.mjs";
5
- import { N as NcPopover } from "./NcPopover-CtdLAkEU.mjs";
4
+ import { N as NcAvatar } from "./NcAvatar-DX-Nk9Es.mjs";
5
+ import { N as NcPopover } from "./NcPopover-CObDh89q.mjs";
6
6
  import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.mjs";
7
7
  const _sfc_main$1 = {};
8
8
  function _sfc_render(_ctx, _cache) {
@@ -133,4 +133,4 @@ const NcUserBubble = /* @__PURE__ */ _export_sfc(_sfc_main, [["__scopeId", "data
133
133
  export {
134
134
  NcUserBubble as N
135
135
  };
136
- //# sourceMappingURL=NcUserBubble-CDQa0hGy.mjs.map
136
+ //# sourceMappingURL=NcUserBubble-BXBgGflZ.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"NcUserBubble-CDQa0hGy.mjs","sources":["../../src/components/NcUserBubble/NcUserBubbleDiv.vue","../../src/components/NcUserBubble/NcUserBubble.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div>\n\t\t<slot name=\"trigger\" />\n\t</div>\n</template>\n","<!--\n - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\n\n### General description\n\nThis component displays a user together with a small avatar in a grey bubble.\nIt's possible to use an actual user's avatar, just an image/icon as a url or an icon-class,\nto link the bubble to e.g. a users profile\nand to show a popover on hover with e.g. the full user name handle / email address or something else.\n\nThis component has the following slot:\n* a default slot which is for the content of the popover (this is passed to the popover component directly).\n\n### Examples\n\n```vue\n<p>\n\tSome text before <NcUserBubble user=\"admin\" display-name=\"Admin Example\" url=\"/test\">@admin@foreign-host.com</NcUserBubble> and after the bubble.\n\t<NcUserBubble avatar-image=\"icon-group\" display-name=\"test group xyz\" :primary=\"true\">Hey there!</NcUserBubble>\n</p>\n```\n\n### Example with name slot\n\n```vue\n<template>\n<NcUserBubble\n\t:size=\"34\"\n\tdisplay-name=\"Administrator\"\n\tuser=\"admin\">\n\t<template #name>\n\t\t<NcButton aria-label=\"Remove user\"\n\t\t\tvariant=\"tertiary-no-background\"\n\t\t\t@click=\"alert\">\n\t\t\t<template #icon>\n\t\t\t\t<NcIconSvgWrapper :path=\"mdiClose\" />\n\t\t\t</template>\n\t\t</NcButton>\n\t</template>\n</NcUserBubble>\n</template>\n<script>\nimport { mdiClose } from '@mdi/js'\n\nexport default {\n\tsetup() {\n\t\treturn {\n\t\t\tmdiClose,\n\t\t}\n\t},\n\tmethods: {\n\t\talert() {\n\t\t\talert('Removed')\n\t\t},\n\t},\n}\n</script>\n```\n\n</docs>\n\n<script setup lang=\"ts\">\nimport type { Slot } from 'vue'\nimport type { RouteLocation } from 'vue-router'\n\nimport { computed, warn, watch } from 'vue'\nimport { RouterLink } from 'vue-router'\nimport NcAvatar from '../NcAvatar/NcAvatar.vue'\nimport NcPopover from '../NcPopover/NcPopover.vue'\nimport NcUserBubbleDiv from './NcUserBubbleDiv.vue'\n\n/**\n * Default popover state. Requires the UserBubble\n * to have some content to render inside the popover\n */\nconst isOpen = defineModel<boolean>('open')\n\nconst props = withDefaults(defineProps<{\n\t/**\n\t * Override generated avatar, can be an url or an icon class\n\t */\n\tavatarImage?: string\n\n\t/**\n\t * Provide the user id if this is a user\n\t */\n\tuser?: string\n\n\t/**\n\t * Displayed label\n\t */\n\tdisplayName?: string\n\n\t/**\n\t * Whether or not to display the user-status\n\t */\n\tshowUserStatus?: boolean\n\n\t/**\n\t * Define the whole bubble as a link\n\t */\n\turl?: string\n\n\t/**\n\t * Use bubble as a router-link for in-app navigation\n\t */\n\tto?: RouteLocation\n\n\t/**\n\t * Use the primary colour\n\t */\n\tprimary?: boolean\n\n\t/**\n\t * This is the height of the component\n\t */\n\tsize?: number\n\n\t/**\n\t * This is the margin of the avatar (size - margin = avatar size)\n\t */\n\tmargin?: number\n}>(), {\n\tavatarImage: undefined,\n\tdisplayName: undefined,\n\tuser: undefined,\n\turl: undefined,\n\tto: undefined,\n\tmargin: 2,\n\tsize: 20,\n})\n\nconst emit = defineEmits<{\n\t/**\n\t * The mouse click event\n\t */\n\tclick: [event: MouseEvent]\n}>()\n\ndefineSlots<{\n\t/**\n\t * Main Popover content on userbubble hover/focus\n\t */\n\tdefault?: Slot\n\n\t/**\n\t * Optional slot just after the name\n\t */\n\tname?: Slot\n}>()\n\n/**\n * Is the provided avatar url valid or not\n */\nconst isAvatarUrl = computed(() => {\n\tif (!props.avatarImage) {\n\t\treturn false\n\t}\n\n\ttry {\n\t\tconst url = new URL(props.avatarImage)\n\t\treturn !!url\n\t} catch {\n\t\treturn false\n\t}\n})\n\n/**\n * Do we have a custom avatar or not\n */\nconst isCustomAvatar = computed(() => !!props.avatarImage)\n\nconst avatarStyle = computed(() => ({\n\tmarginInlineStart: `${props.margin}px`,\n}))\n\n/**\n * Is the URL prop set\n */\nconst hasUrl = computed(() => {\n\tif (!props.url || props.url.trim() === '') {\n\t\treturn false\n\t}\n\ttry {\n\t\tconst url = new URL(props.url, props.url?.startsWith?.('/') ? window.location.href : undefined)\n\t\treturn !!url\n\t} catch {\n\t\twarn('[NcUserBubble] Invalid URL passed', { url: props.url })\n\t\treturn false\n\t}\n})\n\n/**\n * href attribute to pass to content container\n */\nconst href = computed(() => hasUrl.value ? props.url : undefined)\n\nconst contentComponent = computed(() => {\n\tif (hasUrl.value) {\n\t\treturn 'a'\n\t} else if (props.to) {\n\t\treturn RouterLink\n\t} else {\n\t\treturn 'div'\n\t}\n})\n\nconst contentStyle = computed(() => ({\n\theight: `${props.size}px`,\n\tlineHeight: `${props.size}px`,\n\tborderRadius: `${props.size / 2}px`,\n}))\n\nwatch([() => props.displayName, () => props.user], () => {\n\tif (!props.displayName && !props.user) {\n\t\twarn('[NcUserBubble] At least `displayName` or `user` property should be set.')\n\t}\n})\n</script>\n\n<template>\n\t<component\n\t\t:is=\"!!$slots.default ? NcPopover : NcUserBubbleDiv\"\n\t\tv-model:shown=\"isOpen\"\n\t\tclass=\"user-bubble__wrapper\"\n\t\ttrigger=\"hover focus\">\n\t\t<!-- Main userbubble structure -->\n\t\t<template #trigger=\"{ attrs }\">\n\t\t\t<component\n\t\t\t\t:is=\"contentComponent\"\n\t\t\t\tclass=\"user-bubble__content\"\n\t\t\t\t:class=\"{ 'user-bubble__content--primary': primary }\"\n\t\t\t\t:style=\"contentStyle\"\n\t\t\t\t:to\n\t\t\t\t:href\n\t\t\t\tv-bind=\"attrs\"\n\t\t\t\t@click=\"emit('click', $event)\">\n\t\t\t\t<!-- NcAvatar -->\n\t\t\t\t<NcAvatar\n\t\t\t\t\t:url=\"isCustomAvatar && isAvatarUrl ? avatarImage : undefined\"\n\t\t\t\t\t:iconClass=\"isCustomAvatar && !isAvatarUrl ? avatarImage : undefined\"\n\t\t\t\t\t:user=\"user\"\n\t\t\t\t\t:displayName=\"displayName\"\n\t\t\t\t\t:size=\"size - (margin * 2)\"\n\t\t\t\t\t:style=\"avatarStyle\"\n\t\t\t\t\tdisableTooltip\n\t\t\t\t\tdisableMenu\n\t\t\t\t\t:hideStatus=\"!showUserStatus\"\n\t\t\t\t\tclass=\"user-bubble__avatar\" />\n\n\t\t\t\t<!-- Name -->\n\t\t\t\t<span class=\"user-bubble__name\">\n\t\t\t\t\t{{ displayName || user }}\n\t\t\t\t</span>\n\n\t\t\t\t<span v-if=\"!!$slots.name\" class=\"user-bubble__secondary\">\n\t\t\t\t\t<slot name=\"name\" />\n\t\t\t\t</span>\n\t\t\t</component>\n\t\t</template>\n\n\t\t<slot />\n\t</component>\n</template>\n\n<style lang=\"scss\" scoped>\n.user-bubble {\n\t&__wrapper {\n\t\t// align inline with text\n\t\tdisplay: inline-block;\n\t\tvertical-align: middle;\n\t\t// shrink and allow grow to fit\n\t\tmin-width: 0;\n\t\tmax-width: 100%;\n\t}\n\n\t&__content {\n\t\tdisplay: inline-flex;\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-background-dark);\n\n\t\t&--primary {\n\t\t\tcolor: var(--color-primary-element-text);\n\t\t\tbackground-color: var(--color-primary-element);\n\t\t}\n\n\t\t> :last-child {\n\t\t\t// border radius end padding\n\t\t\tpadding-inline-end: 8px;\n\t\t}\n\t}\n\n\t&__avatar {\n\t\talign-self: center;\n\t}\n\n\t&__name {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t&__name,\n\t&__secondary {\n\t\t// proper spacing between avatar, name & slot\n\t\tpadding-block: 0;\n\t\tpadding-inline: 4px 0;\n\t}\n}\n</style>\n"],"names":["_createElementBlock","_renderSlot","_useModel","_openBlock","_createBlock","_resolveDynamicComponent","$slots","_withCtx","_mergeProps","_createVNode","_createElementVNode","_toDisplayString"],"mappings":"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"}
1
+ {"version":3,"file":"NcUserBubble-BXBgGflZ.mjs","sources":["../../src/components/NcUserBubble/NcUserBubbleDiv.vue","../../src/components/NcUserBubble/NcUserBubble.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div>\n\t\t<slot name=\"trigger\" />\n\t</div>\n</template>\n","<!--\n - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\n\n### General description\n\nThis component displays a user together with a small avatar in a grey bubble.\nIt's possible to use an actual user's avatar, just an image/icon as a url or an icon-class,\nto link the bubble to e.g. a users profile\nand to show a popover on hover with e.g. the full user name handle / email address or something else.\n\nThis component has the following slot:\n* a default slot which is for the content of the popover (this is passed to the popover component directly).\n\n### Examples\n\n```vue\n<p>\n\tSome text before <NcUserBubble user=\"admin\" display-name=\"Admin Example\" url=\"/test\">@admin@foreign-host.com</NcUserBubble> and after the bubble.\n\t<NcUserBubble avatar-image=\"icon-group\" display-name=\"test group xyz\" :primary=\"true\">Hey there!</NcUserBubble>\n</p>\n```\n\n### Example with name slot\n\n```vue\n<template>\n<NcUserBubble\n\t:size=\"34\"\n\tdisplay-name=\"Administrator\"\n\tuser=\"admin\">\n\t<template #name>\n\t\t<NcButton aria-label=\"Remove user\"\n\t\t\tvariant=\"tertiary-no-background\"\n\t\t\t@click=\"alert\">\n\t\t\t<template #icon>\n\t\t\t\t<NcIconSvgWrapper :path=\"mdiClose\" />\n\t\t\t</template>\n\t\t</NcButton>\n\t</template>\n</NcUserBubble>\n</template>\n<script>\nimport { mdiClose } from '@mdi/js'\n\nexport default {\n\tsetup() {\n\t\treturn {\n\t\t\tmdiClose,\n\t\t}\n\t},\n\tmethods: {\n\t\talert() {\n\t\t\talert('Removed')\n\t\t},\n\t},\n}\n</script>\n```\n\n</docs>\n\n<script setup lang=\"ts\">\nimport type { Slot } from 'vue'\nimport type { RouteLocation } from 'vue-router'\n\nimport { computed, warn, watch } from 'vue'\nimport { RouterLink } from 'vue-router'\nimport NcAvatar from '../NcAvatar/NcAvatar.vue'\nimport NcPopover from '../NcPopover/NcPopover.vue'\nimport NcUserBubbleDiv from './NcUserBubbleDiv.vue'\n\n/**\n * Default popover state. Requires the UserBubble\n * to have some content to render inside the popover\n */\nconst isOpen = defineModel<boolean>('open')\n\nconst props = withDefaults(defineProps<{\n\t/**\n\t * Override generated avatar, can be an url or an icon class\n\t */\n\tavatarImage?: string\n\n\t/**\n\t * Provide the user id if this is a user\n\t */\n\tuser?: string\n\n\t/**\n\t * Displayed label\n\t */\n\tdisplayName?: string\n\n\t/**\n\t * Whether or not to display the user-status\n\t */\n\tshowUserStatus?: boolean\n\n\t/**\n\t * Define the whole bubble as a link\n\t */\n\turl?: string\n\n\t/**\n\t * Use bubble as a router-link for in-app navigation\n\t */\n\tto?: RouteLocation\n\n\t/**\n\t * Use the primary colour\n\t */\n\tprimary?: boolean\n\n\t/**\n\t * This is the height of the component\n\t */\n\tsize?: number\n\n\t/**\n\t * This is the margin of the avatar (size - margin = avatar size)\n\t */\n\tmargin?: number\n}>(), {\n\tavatarImage: undefined,\n\tdisplayName: undefined,\n\tuser: undefined,\n\turl: undefined,\n\tto: undefined,\n\tmargin: 2,\n\tsize: 20,\n})\n\nconst emit = defineEmits<{\n\t/**\n\t * The mouse click event\n\t */\n\tclick: [event: MouseEvent]\n}>()\n\ndefineSlots<{\n\t/**\n\t * Main Popover content on userbubble hover/focus\n\t */\n\tdefault?: Slot\n\n\t/**\n\t * Optional slot just after the name\n\t */\n\tname?: Slot\n}>()\n\n/**\n * Is the provided avatar url valid or not\n */\nconst isAvatarUrl = computed(() => {\n\tif (!props.avatarImage) {\n\t\treturn false\n\t}\n\n\ttry {\n\t\tconst url = new URL(props.avatarImage)\n\t\treturn !!url\n\t} catch {\n\t\treturn false\n\t}\n})\n\n/**\n * Do we have a custom avatar or not\n */\nconst isCustomAvatar = computed(() => !!props.avatarImage)\n\nconst avatarStyle = computed(() => ({\n\tmarginInlineStart: `${props.margin}px`,\n}))\n\n/**\n * Is the URL prop set\n */\nconst hasUrl = computed(() => {\n\tif (!props.url || props.url.trim() === '') {\n\t\treturn false\n\t}\n\ttry {\n\t\tconst url = new URL(props.url, props.url?.startsWith?.('/') ? window.location.href : undefined)\n\t\treturn !!url\n\t} catch {\n\t\twarn('[NcUserBubble] Invalid URL passed', { url: props.url })\n\t\treturn false\n\t}\n})\n\n/**\n * href attribute to pass to content container\n */\nconst href = computed(() => hasUrl.value ? props.url : undefined)\n\nconst contentComponent = computed(() => {\n\tif (hasUrl.value) {\n\t\treturn 'a'\n\t} else if (props.to) {\n\t\treturn RouterLink\n\t} else {\n\t\treturn 'div'\n\t}\n})\n\nconst contentStyle = computed(() => ({\n\theight: `${props.size}px`,\n\tlineHeight: `${props.size}px`,\n\tborderRadius: `${props.size / 2}px`,\n}))\n\nwatch([() => props.displayName, () => props.user], () => {\n\tif (!props.displayName && !props.user) {\n\t\twarn('[NcUserBubble] At least `displayName` or `user` property should be set.')\n\t}\n})\n</script>\n\n<template>\n\t<component\n\t\t:is=\"!!$slots.default ? NcPopover : NcUserBubbleDiv\"\n\t\tv-model:shown=\"isOpen\"\n\t\tclass=\"user-bubble__wrapper\"\n\t\ttrigger=\"hover focus\">\n\t\t<!-- Main userbubble structure -->\n\t\t<template #trigger=\"{ attrs }\">\n\t\t\t<component\n\t\t\t\t:is=\"contentComponent\"\n\t\t\t\tclass=\"user-bubble__content\"\n\t\t\t\t:class=\"{ 'user-bubble__content--primary': primary }\"\n\t\t\t\t:style=\"contentStyle\"\n\t\t\t\t:to\n\t\t\t\t:href\n\t\t\t\tv-bind=\"attrs\"\n\t\t\t\t@click=\"emit('click', $event)\">\n\t\t\t\t<!-- NcAvatar -->\n\t\t\t\t<NcAvatar\n\t\t\t\t\t:url=\"isCustomAvatar && isAvatarUrl ? avatarImage : undefined\"\n\t\t\t\t\t:iconClass=\"isCustomAvatar && !isAvatarUrl ? avatarImage : undefined\"\n\t\t\t\t\t:user=\"user\"\n\t\t\t\t\t:displayName=\"displayName\"\n\t\t\t\t\t:size=\"size - (margin * 2)\"\n\t\t\t\t\t:style=\"avatarStyle\"\n\t\t\t\t\tdisableTooltip\n\t\t\t\t\tdisableMenu\n\t\t\t\t\t:hideStatus=\"!showUserStatus\"\n\t\t\t\t\tclass=\"user-bubble__avatar\" />\n\n\t\t\t\t<!-- Name -->\n\t\t\t\t<span class=\"user-bubble__name\">\n\t\t\t\t\t{{ displayName || user }}\n\t\t\t\t</span>\n\n\t\t\t\t<span v-if=\"!!$slots.name\" class=\"user-bubble__secondary\">\n\t\t\t\t\t<slot name=\"name\" />\n\t\t\t\t</span>\n\t\t\t</component>\n\t\t</template>\n\n\t\t<slot />\n\t</component>\n</template>\n\n<style lang=\"scss\" scoped>\n.user-bubble {\n\t&__wrapper {\n\t\t// align inline with text\n\t\tdisplay: inline-block;\n\t\tvertical-align: middle;\n\t\t// shrink and allow grow to fit\n\t\tmin-width: 0;\n\t\tmax-width: 100%;\n\t}\n\n\t&__content {\n\t\tdisplay: inline-flex;\n\t\tmax-width: 100%;\n\t\tbackground-color: var(--color-background-dark);\n\n\t\t&--primary {\n\t\t\tcolor: var(--color-primary-element-text);\n\t\t\tbackground-color: var(--color-primary-element);\n\t\t}\n\n\t\t> :last-child {\n\t\t\t// border radius end padding\n\t\t\tpadding-inline-end: 8px;\n\t\t}\n\t}\n\n\t&__avatar {\n\t\talign-self: center;\n\t}\n\n\t&__name {\n\t\toverflow: hidden;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t}\n\n\t&__name,\n\t&__secondary {\n\t\t// proper spacing between avatar, name & slot\n\t\tpadding-block: 0;\n\t\tpadding-inline: 4px 0;\n\t}\n}\n</style>\n"],"names":["_createElementBlock","_renderSlot","_useModel","_openBlock","_createBlock","_resolveDynamicComponent","$slots","_withCtx","_mergeProps","_createVNode","_createElementVNode","_toDisplayString"],"mappings":";;;;;;;sBAMCA,mBAEM,OAAA,MAAA;AAAA,IADLC,WAAuB,KAAA,QAAA,SAAA;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;ACwEzB,UAAM,SAASC,SAAoB,SAAC,MAAM;AAE1C,UAAM,QAAQ;AAuDd,UAAM,OAAO;AAsBb,UAAM,cAAc,SAAS,MAAM;AAClC,UAAI,CAAC,MAAM,aAAa;AACvB,eAAO;AAAA,MACR;AAEA,UAAI;AACH,cAAM,MAAM,IAAI,IAAI,MAAM,WAAW;AACrC,eAAO,CAAC,CAAC;AAAA,MACV,QAAQ;AACP,eAAO;AAAA,MACR;AAAA,IACD,CAAC;AAKD,UAAM,iBAAiB,SAAS,MAAM,CAAC,CAAC,MAAM,WAAW;AAEzD,UAAM,cAAc,SAAS,OAAO;AAAA,MACnC,mBAAmB,GAAG,MAAM,MAAM;AAAA,IAAA,EACjC;AAKF,UAAM,SAAS,SAAS,MAAM;AAC7B,UAAI,CAAC,MAAM,OAAO,MAAM,IAAI,KAAA,MAAW,IAAI;AAC1C,eAAO;AAAA,MACR;AACA,UAAI;AACH,cAAM,MAAM,IAAI,IAAI,MAAM,KAAK,MAAM,KAAK,aAAa,GAAG,IAAI,OAAO,SAAS,OAAO,MAAS;AAC9F,eAAO,CAAC,CAAC;AAAA,MACV,QAAQ;AACP,aAAK,qCAAqC,EAAE,KAAK,MAAM,KAAK;AAC5D,eAAO;AAAA,MACR;AAAA,IACD,CAAC;AAKD,UAAM,OAAO,SAAS,MAAM,OAAO,QAAQ,MAAM,MAAM,MAAS;AAEhE,UAAM,mBAAmB,SAAS,MAAM;AACvC,UAAI,OAAO,OAAO;AACjB,eAAO;AAAA,MACR,WAAW,MAAM,IAAI;AACpB,eAAO;AAAA,MACR,OAAO;AACN,eAAO;AAAA,MACR;AAAA,IACD,CAAC;AAED,UAAM,eAAe,SAAS,OAAO;AAAA,MACpC,QAAQ,GAAG,MAAM,IAAI;AAAA,MACrB,YAAY,GAAG,MAAM,IAAI;AAAA,MACzB,cAAc,GAAG,MAAM,OAAO,CAAC;AAAA,IAAA,EAC9B;AAEF,UAAM,CAAC,MAAM,MAAM,aAAa,MAAM,MAAM,IAAI,GAAG,MAAM;AACxD,UAAI,CAAC,MAAM,eAAe,CAAC,MAAM,MAAM;AACtC,aAAK,yEAAyE;AAAA,MAC/E;AAAA,IACD,CAAC;;AAIA,aAAAC,UAAA,GAAAC,YAyCYC,0BAxCJC,KAAAA,OAAO,UAAU,YAAY,eAAe,GAAA;AAAA,QAC3C,OAAO,OAAA;AAAA,gEAAA,OAAM,QAAA;AAAA,QACrB,OAAM;AAAA,QACN,SAAQ;AAAA,MAAA;QAEG,SAAOC,QACjB,CA8BY,EA/BS,YAAK;AAAA,wBAC1BH,YA8BYC,wBA7BN,iBAAA,KAAgB,GADtBG,WA8BY;AAAA,YA5BX,OAAK,CAAC,wBAAsB,EAAA,iCACe,QAAA,SAAO;AAAA,YACjD,OAAO,aAAA;AAAA,YACP,IAAA,QAAA;AAAA,YACA,MAAA,KAAA;AAAA,UAAA,GACO,OAAK;AAAA,YACZ,SAAK,OAAA,CAAA,MAAA,OAAA,CAAA,IAAA,CAAA,WAAE,KAAI,SAAU,MAAM;AAAA,UAAA;6BAE5B,MAU+B;AAAA,cAV/BC,YAU+B,UAAA;AAAA,gBAT7B,KAAK,eAAA,SAAkB,oBAAc,QAAA,cAAc;AAAA,gBACnD,WAAW,eAAA,SAAc,CAAK,oBAAc,QAAA,cAAc;AAAA,gBAC1D,MAAM,QAAA;AAAA,gBACN,aAAa,QAAA;AAAA,gBACb,MAAM,QAAA,OAAQ,QAAA,SAAM;AAAA,gBACpB,sBAAO,YAAA,KAAW;AAAA,gBACnB,gBAAA;AAAA,gBACA,aAAA;AAAA,gBACC,aAAa,QAAA;AAAA,gBACd,OAAM;AAAA,cAAA;cAGPC,mBAEO,QAFP,YAEOC,gBADH,QAAA,eAAe,QAAA,IAAI,GAAA,CAAA;AAAA,cAGTL,CAAAA,CAAAA,KAAAA,OAAO,QAArBH,UAAA,GAAAH,mBAEO,QAFP,YAEO;AAAA,gBADNC,WAAoB,KAAA,QAAA,QAAA,CAAA,GAAA,QAAA,IAAA;AAAA,cAAA;;;;;yBAKvB,MAAQ;AAAA,UAARA,WAAQ,KAAA,QAAA,WAAA,CAAA,GAAA,QAAA,IAAA;AAAA,QAAA;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import '../assets/autolink-C_iad4O_.css';
1
+ import '../assets/autolink-DH5K5u8D.css';
2
2
  import { getBaseUrl, getRootUrl } from "@nextcloud/router";
3
3
  import { u } from "unist-builder";
4
4
  import { visitParents, SKIP } from "unist-util-visit-parents";
@@ -29,10 +29,10 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
29
29
  };
30
30
  }
31
31
  });
32
- const externalLink = "_externalLink_ASIsx";
33
- const externalLink_decorated = "_externalLink_decorated_97QHT";
32
+ const externalLink = "_externalLink_SRhry";
33
+ const externalLink_decorated = "_externalLink_decorated_wKyfn";
34
34
  const style0 = {
35
- "material-design-icon": "_material-design-icon_M3MSE",
35
+ "material-design-icon": "_material-design-icon_MpHB-",
36
36
  externalLink,
37
37
  externalLink_decorated
38
38
  };
@@ -137,4 +137,4 @@ export {
137
137
  parseUrl as p,
138
138
  remarkAutolink as r
139
139
  };
140
- //# sourceMappingURL=autolink-BT8u-IL-.mjs.map
140
+ //# sourceMappingURL=autolink-B2azbG18.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"autolink-BT8u-IL-.mjs","sources":["../../src/components/NcRichText/NcRichTextExternalLink.vue","../../src/components/NcRichText/helpers.ts","../../src/components/NcRichText/autolink.ts"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nconst { href, decorateExternal = false } = defineProps<{\n\t/** Link attribute to render */\n\thref: string\n\t/** Whether to add the appended arrow decoration */\n\tdecorateExternal?: boolean\n}>()\n</script>\n\n<template>\n\t<a\n\t\t:href=\"href\"\n\t\trel=\"noopener noreferrer\"\n\t\ttarget=\"_blank\"\n\t\t:class=\"[$style.externalLink, {\n\t\t\t[$style.externalLink_decorated]: decorateExternal,\n\t\t}]\">\n\t\t<slot name=\"default\">\n\t\t\t{{ href }}\n\t\t</slot>\n\t</a>\n</template>\n\n<style module lang=\"scss\">\n.externalLink {\n\ttext-decoration: underline;\n}\n\n.externalLink_decorated::after {\n\tcontent: ' ↗';\n}\n</style>\n\n<docs>\nAn internal component\n</docs>\n","/*!\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Literal } from 'unist'\n\n/**\n * Unist literal node with string value like code blocks or text nodes\n */\nexport interface TextNode extends Literal {\n\tvalue: string\n}\n\n/**\n * Regex pattern to match links to be resolved by the link-reference provider\n */\nexport const URL_PATTERN = /(\\s|^)(https?:\\/\\/)([-A-Z0-9+_.]+(?::[0-9]+)?(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\\s|$)/ig\n\n/**\n * Regex pattern to identify strings as links and then making them clickable\n */\nexport const URL_PATTERN_AUTOLINK = /(\\s|\\(|^)((https?:\\/\\/)([-A-Z0-9+_.]+[-A-Z0-9]+(?::[0-9]+)?(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*))(?=\\s|\\)|$)/ig\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Node, Parent } from 'unist'\nimport type { Router } from 'vue-router'\n\nimport { getBaseUrl, getRootUrl } from '@nextcloud/router'\nimport { u } from 'unist-builder'\nimport { SKIP, visitParents } from 'unist-util-visit-parents'\nimport NcRichTextExternalLink from './NcRichTextExternalLink.vue'\nimport { logger } from '../../utils/logger.ts'\nimport { URL_PATTERN_AUTOLINK } from './helpers.js'\n\n/**\n *\n * @param root0\n * @param root0.autolink\n * @param root0.useMarkdown\n * @param root0.useExtendedMarkdown\n */\nexport function remarkAutolink({ autolink, useMarkdown, useExtendedMarkdown }) {\n\treturn function(tree) {\n\t\t// remark-gfm has its own autolink parser which can not be disabled\n\t\t// and thus a local one is not needed\n\t\tif (useExtendedMarkdown || !useMarkdown || !autolink) {\n\t\t\treturn\n\t\t}\n\n\t\tvisitParents(tree, (node) => node.type === 'text', (node, ancestors: Parent[]) => {\n\t\t\t// Do not autolink text already inside a link node\n\t\t\tif (ancestors.some((ancestor) => ancestor.type === 'link' || ancestor.type === 'linkReference')) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst parent = ancestors.at(-1)\n\t\t\tconst index = parent!.children.indexOf(node) ?? 0\n\n\t\t\tconst parsed = parseUrl(node.value)\n\t\t\tconst parsedNodes: Node[] = (typeof parsed === 'string')\n\t\t\t\t? [u('text', parsed)]\n\t\t\t\t: parsed.map((n) => {\n\t\t\t\t\t\tif (typeof n === 'string') {\n\t\t\t\t\t\t\treturn u('text', n)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn u('link', {\n\t\t\t\t\t\t\turl: n.props.href,\n\t\t\t\t\t\t}, [u('text', n.props.href)])\n\t\t\t\t\t})\n\t\t\t\t\t\t.filter((x) => x)\n\t\t\t\t\t\t.flat()\n\n\t\t\tparent!.children.splice(index, 1, ...parsedNodes)\n\t\t\treturn [SKIP, index + parsedNodes.length]\n\t\t})\n\t}\n}\n\n/**\n *\n * @param text\n */\nexport function parseUrl(text: string) {\n\tlet match = URL_PATTERN_AUTOLINK.exec(text)\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst list: (string | Record<string, any>)[] = []\n\tlet start = 0\n\twhile (match !== null) {\n\t\tlet href = match[2]!\n\t\tlet textAfter\n\t\tlet textBefore = text.substring(start, match.index + match[1]!.length)\n\t\tif (href[0] === ' ') {\n\t\t\ttextBefore += href[0]\n\t\t\thref = href.substring(1).trim()\n\t\t}\n\t\tconst lastChar = href[(href.length - 1)]\n\t\tif (lastChar === '.' || lastChar === ',' || lastChar === ';' || (match[0][0] === '(' && lastChar === ')')) {\n\t\t\thref = href.substring(0, href.length - 1)\n\t\t\ttextAfter = lastChar\n\t\t}\n\t\tlist.push(textBefore)\n\t\tlist.push({ component: NcRichTextExternalLink, props: { href: href.trim(), decorateExternal: true } })\n\t\tif (textAfter) {\n\t\t\tlist.push(textAfter)\n\t\t}\n\t\tstart = match.index + match[0].length\n\t\tmatch = URL_PATTERN_AUTOLINK.exec(text)\n\t}\n\tlist.push(text.substring(start))\n\tconst joinedText = list.map((item) => typeof item === 'string' ? item : item.props.href).join('')\n\tif (text === joinedText) {\n\t\treturn list\n\t}\n\tlogger.error('[NcRichText] Failed to reassemble the chunked text: ' + text)\n\treturn text\n}\n\n/**\n * Try to get path for router link from an absolute or relative URL.\n *\n * @param router - VueRouter instance of the router link\n * @param url - absolute URL to parse\n * @return a path that can be used in the router link or null if this URL doesn't match this router config\n * @example http://cloud.ltd/nextcloud/index.php/apps/files/favorites?fileid=2#fragment => /files/favorites?fileid=2#fragment\n */\nexport function getRoute(router: Router | null, url: string): string | null {\n\t/**\n\t * http://cloud.ltd /nextcloud /index.php /apps/files /favorites?fileid=2#fragment\n\t * |_____origin____|___________router-base____________| |\n\t * |__________base____________| |______________relative-url______________|\n\t * | |___root___|_optional_|__app-base__|_________router-path_______|\n\t */\n\n\tconst removePrefix = (str, prefix) => str.startsWith(prefix) ? str.slice(prefix.length) : str\n\tconst removePrefixes = (str, ...prefixes) => prefixes.reduce((acc, prefix) => removePrefix(acc, prefix), str)\n\n\t// Router is not defined in the app => not an app route\n\tif (!router) {\n\t\treturn null\n\t}\n\n\tconst isAbsoluteURL = /^https?:\\/\\//.test(url)\n\n\t// URL is a \"mailto:\", \"tel:\" or any custom app protocol link\n\tconst isNonHttpLink = /^[a-z][a-z0-9+.-]*:.+/.test(url)\n\tif (!isAbsoluteURL && isNonHttpLink) {\n\t\treturn null\n\t}\n\n\t// URL is not a link to this Nextcloud server instance => not an app route\n\tif (isAbsoluteURL && !url.startsWith(getBaseUrl())) {\n\t\treturn null\n\t}\n\n\tif (!isAbsoluteURL && !url.startsWith('/')) {\n\t\t// Relative URL without a leading slash are not allowed\n\t\t// VueRouter handles such urls according to the URL RFC,\n\t\t// for example, being on /call/abc page, link \"def\" is resolved as \"/call/def\" relative to \"/call/\".\n\t\t// We don't want to support such links,\n\t\t// so relative URL MUST start with a slash.\n\t\treturn null\n\t}\n\n\t// URL relative to the instance root\n\tconst relativeUrl = isAbsoluteURL ? removePrefixes(url, getBaseUrl(), '/index.php') : url\n\n\t// Router base relative to the instance root (app-base above)\n\tconst relativeRouterBase = removePrefixes(router.options.history.base, getRootUrl(), '/index.php')\n\n\t// Root route may have an empty '' path, fallback to '/'\n\tconst potentialRouterPath = removePrefixes(relativeUrl, relativeRouterBase) || '/'\n\n\t// Check if there is actually matching route in the router for this path\n\tconst route = router.resolve(potentialRouterPath)\n\n\tif (!route.matched.length) {\n\t\treturn null\n\t}\n\n\treturn route.fullPath\n}\n"],"names":["_createElementBlock","_normalizeClass","$style","_renderSlot"],"mappings":"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"}
1
+ {"version":3,"file":"autolink-B2azbG18.mjs","sources":["../../src/components/NcRichText/NcRichTextExternalLink.vue","../../src/components/NcRichText/helpers.ts","../../src/components/NcRichText/autolink.ts"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nconst { href, decorateExternal = false } = defineProps<{\n\t/** Link attribute to render */\n\thref: string\n\t/** Whether to add the appended arrow decoration */\n\tdecorateExternal?: boolean\n}>()\n</script>\n\n<template>\n\t<a\n\t\t:href=\"href\"\n\t\trel=\"noopener noreferrer\"\n\t\ttarget=\"_blank\"\n\t\t:class=\"[$style.externalLink, {\n\t\t\t[$style.externalLink_decorated]: decorateExternal,\n\t\t}]\">\n\t\t<slot name=\"default\">\n\t\t\t{{ href }}\n\t\t</slot>\n\t</a>\n</template>\n\n<style module lang=\"scss\">\n.externalLink {\n\ttext-decoration: underline;\n}\n\n.externalLink_decorated::after {\n\tcontent: ' ↗';\n}\n</style>\n\n<docs>\nAn internal component\n</docs>\n","/*!\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Literal } from 'unist'\n\n/**\n * Unist literal node with string value like code blocks or text nodes\n */\nexport interface TextNode extends Literal {\n\tvalue: string\n}\n\n/**\n * Regex pattern to match links to be resolved by the link-reference provider\n */\nexport const URL_PATTERN = /(\\s|^)(https?:\\/\\/)([-A-Z0-9+_.]+(?::[0-9]+)?(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\\s|$)/ig\n\n/**\n * Regex pattern to identify strings as links and then making them clickable\n */\nexport const URL_PATTERN_AUTOLINK = /(\\s|\\(|^)((https?:\\/\\/)([-A-Z0-9+_.]+[-A-Z0-9]+(?::[0-9]+)?(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*))(?=\\s|\\)|$)/ig\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Node, Parent } from 'unist'\nimport type { Router } from 'vue-router'\n\nimport { getBaseUrl, getRootUrl } from '@nextcloud/router'\nimport { u } from 'unist-builder'\nimport { SKIP, visitParents } from 'unist-util-visit-parents'\nimport NcRichTextExternalLink from './NcRichTextExternalLink.vue'\nimport { logger } from '../../utils/logger.ts'\nimport { URL_PATTERN_AUTOLINK } from './helpers.js'\n\n/**\n *\n * @param root0\n * @param root0.autolink\n * @param root0.useMarkdown\n * @param root0.useExtendedMarkdown\n */\nexport function remarkAutolink({ autolink, useMarkdown, useExtendedMarkdown }) {\n\treturn function(tree) {\n\t\t// remark-gfm has its own autolink parser which can not be disabled\n\t\t// and thus a local one is not needed\n\t\tif (useExtendedMarkdown || !useMarkdown || !autolink) {\n\t\t\treturn\n\t\t}\n\n\t\tvisitParents(tree, (node) => node.type === 'text', (node, ancestors: Parent[]) => {\n\t\t\t// Do not autolink text already inside a link node\n\t\t\tif (ancestors.some((ancestor) => ancestor.type === 'link' || ancestor.type === 'linkReference')) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst parent = ancestors.at(-1)\n\t\t\tconst index = parent!.children.indexOf(node) ?? 0\n\n\t\t\tconst parsed = parseUrl(node.value)\n\t\t\tconst parsedNodes: Node[] = (typeof parsed === 'string')\n\t\t\t\t? [u('text', parsed)]\n\t\t\t\t: parsed.map((n) => {\n\t\t\t\t\t\tif (typeof n === 'string') {\n\t\t\t\t\t\t\treturn u('text', n)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn u('link', {\n\t\t\t\t\t\t\turl: n.props.href,\n\t\t\t\t\t\t}, [u('text', n.props.href)])\n\t\t\t\t\t})\n\t\t\t\t\t\t.filter((x) => x)\n\t\t\t\t\t\t.flat()\n\n\t\t\tparent!.children.splice(index, 1, ...parsedNodes)\n\t\t\treturn [SKIP, index + parsedNodes.length]\n\t\t})\n\t}\n}\n\n/**\n *\n * @param text\n */\nexport function parseUrl(text: string) {\n\tlet match = URL_PATTERN_AUTOLINK.exec(text)\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst list: (string | Record<string, any>)[] = []\n\tlet start = 0\n\twhile (match !== null) {\n\t\tlet href = match[2]!\n\t\tlet textAfter\n\t\tlet textBefore = text.substring(start, match.index + match[1]!.length)\n\t\tif (href[0] === ' ') {\n\t\t\ttextBefore += href[0]\n\t\t\thref = href.substring(1).trim()\n\t\t}\n\t\tconst lastChar = href[(href.length - 1)]\n\t\tif (lastChar === '.' || lastChar === ',' || lastChar === ';' || (match[0][0] === '(' && lastChar === ')')) {\n\t\t\thref = href.substring(0, href.length - 1)\n\t\t\ttextAfter = lastChar\n\t\t}\n\t\tlist.push(textBefore)\n\t\tlist.push({ component: NcRichTextExternalLink, props: { href: href.trim(), decorateExternal: true } })\n\t\tif (textAfter) {\n\t\t\tlist.push(textAfter)\n\t\t}\n\t\tstart = match.index + match[0].length\n\t\tmatch = URL_PATTERN_AUTOLINK.exec(text)\n\t}\n\tlist.push(text.substring(start))\n\tconst joinedText = list.map((item) => typeof item === 'string' ? item : item.props.href).join('')\n\tif (text === joinedText) {\n\t\treturn list\n\t}\n\tlogger.error('[NcRichText] Failed to reassemble the chunked text: ' + text)\n\treturn text\n}\n\n/**\n * Try to get path for router link from an absolute or relative URL.\n *\n * @param router - VueRouter instance of the router link\n * @param url - absolute URL to parse\n * @return a path that can be used in the router link or null if this URL doesn't match this router config\n * @example http://cloud.ltd/nextcloud/index.php/apps/files/favorites?fileid=2#fragment => /files/favorites?fileid=2#fragment\n */\nexport function getRoute(router: Router | null, url: string): string | null {\n\t/**\n\t * http://cloud.ltd /nextcloud /index.php /apps/files /favorites?fileid=2#fragment\n\t * |_____origin____|___________router-base____________| |\n\t * |__________base____________| |______________relative-url______________|\n\t * | |___root___|_optional_|__app-base__|_________router-path_______|\n\t */\n\n\tconst removePrefix = (str, prefix) => str.startsWith(prefix) ? str.slice(prefix.length) : str\n\tconst removePrefixes = (str, ...prefixes) => prefixes.reduce((acc, prefix) => removePrefix(acc, prefix), str)\n\n\t// Router is not defined in the app => not an app route\n\tif (!router) {\n\t\treturn null\n\t}\n\n\tconst isAbsoluteURL = /^https?:\\/\\//.test(url)\n\n\t// URL is a \"mailto:\", \"tel:\" or any custom app protocol link\n\tconst isNonHttpLink = /^[a-z][a-z0-9+.-]*:.+/.test(url)\n\tif (!isAbsoluteURL && isNonHttpLink) {\n\t\treturn null\n\t}\n\n\t// URL is not a link to this Nextcloud server instance => not an app route\n\tif (isAbsoluteURL && !url.startsWith(getBaseUrl())) {\n\t\treturn null\n\t}\n\n\tif (!isAbsoluteURL && !url.startsWith('/')) {\n\t\t// Relative URL without a leading slash are not allowed\n\t\t// VueRouter handles such urls according to the URL RFC,\n\t\t// for example, being on /call/abc page, link \"def\" is resolved as \"/call/def\" relative to \"/call/\".\n\t\t// We don't want to support such links,\n\t\t// so relative URL MUST start with a slash.\n\t\treturn null\n\t}\n\n\t// URL relative to the instance root\n\tconst relativeUrl = isAbsoluteURL ? removePrefixes(url, getBaseUrl(), '/index.php') : url\n\n\t// Router base relative to the instance root (app-base above)\n\tconst relativeRouterBase = removePrefixes(router.options.history.base, getRootUrl(), '/index.php')\n\n\t// Root route may have an empty '' path, fallback to '/'\n\tconst potentialRouterPath = removePrefixes(relativeUrl, relativeRouterBase) || '/'\n\n\t// Check if there is actually matching route in the router for this path\n\tconst route = router.resolve(potentialRouterPath)\n\n\tif (!route.matched.length) {\n\t\treturn null\n\t}\n\n\treturn route.fullPath\n}\n"],"names":["_createElementBlock","_normalizeClass","$style","_renderSlot"],"mappings":"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"}
@@ -16,11 +16,11 @@ import debounce from "debounce";
16
16
  import { useElementSize, useIntersectionObserver } from "@vueuse/core";
17
17
  import { routerKey, RouterLink } from "vue-router";
18
18
  import { N as NcButton } from "./NcButton-QbPBynlU.mjs";
19
- import { g as getRoute } from "./autolink-BT8u-IL-.mjs";
19
+ import { g as getRoute } from "./autolink-B2azbG18.mjs";
20
20
  import { N as NcLoadingIcon } from "./NcLoadingIcon-BOVpFVQz.mjs";
21
21
  import { _ as _sfc_main$b } from "./NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r.mjs";
22
- import { I as IconDotsHorizontal } from "./NcActions-CUmcZ3C3.mjs";
23
- import { N as NcModal } from "./NcModal-DUWLRm_F.mjs";
22
+ import { I as IconDotsHorizontal } from "./NcActions-DY4GGONi.mjs";
23
+ import { N as NcModal } from "./NcModal-B-YLND3e.mjs";
24
24
  const _sfc_main$9 = {
25
25
  name: "ArrowLeftIcon",
26
26
  emits: ["click"],
@@ -1368,4 +1368,4 @@ export {
1368
1368
  NcSearch as h,
1369
1369
  searchProvider as s
1370
1370
  };
1371
- //# sourceMappingURL=referencePickerModal-B4bsiMOy.mjs.map
1371
+ //# sourceMappingURL=referencePickerModal-CD1BjLPe.mjs.map