@nextcloud/vue 9.0.0-rc.0 → 9.0.0-rc.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 (317) hide show
  1. package/CHANGELOG.md +57 -11
  2. package/dist/assets/{NcActionButton-DfdRrSEu.css → NcActionButton-B2G7zsju.css} +25 -17
  3. package/dist/assets/{NcActionInput-BNWL2Q-3.css → NcActionInput-SoC93uat.css} +62 -62
  4. package/dist/assets/{NcActionLink-C9_ycPLF.css → NcActionLink-VngQl-C2.css} +21 -13
  5. package/dist/assets/{NcActionRouter-CVsc7Ezc.css → NcActionRouter-CBVOuCQ3.css} +9 -1
  6. package/dist/assets/{NcActionText-C7y7Pe6P.css → NcActionText-CWAPsJmz.css} +9 -1
  7. package/dist/assets/{NcActionTextEditable-OBnWSj_T.css → NcActionTextEditable-BbOijUsB.css} +60 -60
  8. package/dist/assets/{NcActions-D7gPHaUE.css → NcActions-DxcpMfrs.css} +11 -11
  9. package/dist/assets/{NcAppContent-CvTesBem.css → NcAppContent-Di-SbMxO.css} +23 -23
  10. package/dist/assets/{NcAppNavigationItem-DRU-cLRN.css → NcAppNavigationItem-Cq6ZYdmT.css} +30 -30
  11. package/dist/assets/{NcAppSettingsDialog-DZfD_UEa.css → NcAppSettingsDialog-DMWosHw9.css} +10 -10
  12. package/dist/assets/{NcAppSidebar-GFQ62pY2.css → NcAppSidebar-exl90fRm.css} +85 -76
  13. package/dist/assets/{NcAvatar-UxFZ39EC.css → NcAvatar-B3wk2Xxl.css} +24 -24
  14. package/dist/assets/{NcChip-CKtzzrlA.css → NcChip-VsVAGaG6.css} +9 -9
  15. package/dist/assets/{NcContent-aXaYSfjS.css → NcContent-cRwic6r5.css} +9 -9
  16. package/dist/assets/{NcCounterBubble-DWgyYB0d.css → NcCounterBubble-DpKQwKTI.css} +7 -7
  17. package/dist/assets/{NcDashboardWidget-xV4o6Cen.css → NcDashboardWidget-BEYk4O95.css} +12 -12
  18. package/dist/assets/{NcDateTimePickerNative-CdHLvH4A.css → NcDateTimePickerNative-CeuS8Oeg.css} +13 -13
  19. package/dist/assets/{NcEmptyContent-D1O466rM.css → NcEmptyContent-q-geAf0w.css} +12 -9
  20. package/dist/assets/{NcGuestContent-C9lbC3vg.css → NcGuestContent-BZ26iXQi.css} +2 -2
  21. package/dist/assets/{NcIconSvgWrapper-BzRHs8iB.css → NcIconSvgWrapper-cYxhjYue.css} +12 -9
  22. package/dist/assets/{NcListItem-Byw-ayOI.css → NcListItem-9eCenovm.css} +44 -44
  23. package/dist/assets/{NcListItemIcon-Bnr-Z-SO.css → NcListItemIcon-DjEDwxRp.css} +13 -13
  24. package/dist/assets/{NcMentionBubble-CB5c5ue2.css → NcMentionBubble-DLOTFwpl.css} +9 -9
  25. package/dist/assets/{index-CjPwAJ46.css → NcModal-DaHROv08.css} +61 -61
  26. package/dist/assets/{NcRichContenteditable-CkyUKlIz.css → NcRichContenteditable-KsmFPJmm.css} +21 -21
  27. package/dist/assets/{NcRichText-BbVi69cc.css → NcRichText-GnQKcHYO.css} +84 -84
  28. package/dist/assets/NcSelectUsers-2-PyuY9Z.css +4 -0
  29. package/dist/assets/{NcUserStatusIcon-Du-BEPk_.css → NcUserStatusIcon-CtJLt6AU.css} +3 -3
  30. package/dist/assets/{referencePickerModal-CkGgDb19.css → referencePickerModal-DAD-jv3F.css} +23 -23
  31. package/dist/chunks/{ArrowRight-DQT24Cb-.mjs → ArrowRight-DRKHUZMH.mjs} +3 -3
  32. package/dist/chunks/{ArrowRight-DQT24Cb-.mjs.map → ArrowRight-DRKHUZMH.mjs.map} +1 -1
  33. package/dist/chunks/{NcActionButton-BZEDhdCm.mjs → NcActionButton-CnX0dQzz.mjs} +44 -95
  34. package/dist/chunks/NcActionButton-CnX0dQzz.mjs.map +1 -0
  35. package/dist/chunks/{NcActionButtonGroup-Dqt8Gekb.mjs → NcActionButtonGroup-3Da8b3EI.mjs} +2 -2
  36. package/dist/chunks/{NcActionButtonGroup-Dqt8Gekb.mjs.map → NcActionButtonGroup-3Da8b3EI.mjs.map} +1 -1
  37. package/dist/chunks/{NcActionInput-C_rmP0eZ.mjs → NcActionInput-DeFy255L.mjs} +11 -18
  38. package/dist/chunks/NcActionInput-DeFy255L.mjs.map +1 -0
  39. package/dist/chunks/{NcActionLink-BTIApspK.mjs → NcActionLink-BEo7zmXX.mjs} +4 -13
  40. package/dist/chunks/{NcActionLink-BTIApspK.mjs.map → NcActionLink-BEo7zmXX.mjs.map} +1 -1
  41. package/dist/chunks/{NcActionRouter-DATNpU_e.mjs → NcActionRouter-ERoQjJKv.mjs} +3 -3
  42. package/dist/chunks/{NcActionRouter-DATNpU_e.mjs.map → NcActionRouter-ERoQjJKv.mjs.map} +1 -1
  43. package/dist/chunks/{NcActionText-3mJjsJz_.mjs → NcActionText-DJWBefhJ.mjs} +3 -3
  44. package/dist/chunks/{NcActionText-3mJjsJz_.mjs.map → NcActionText-DJWBefhJ.mjs.map} +1 -1
  45. package/dist/chunks/{NcActionTextEditable-Dv1_bMFY.mjs → NcActionTextEditable-B7nemAOJ.mjs} +14 -20
  46. package/dist/chunks/NcActionTextEditable-B7nemAOJ.mjs.map +1 -0
  47. package/dist/chunks/{NcActions-DpYAcY6a.mjs → NcActions-DS88I6qk.mjs} +22 -20
  48. package/dist/chunks/NcActions-DS88I6qk.mjs.map +1 -0
  49. package/dist/chunks/{NcAppContent-BMiA5ySy.mjs → NcAppContent-DRhM7Gyz.mjs} +38 -66
  50. package/dist/chunks/NcAppContent-DRhM7Gyz.mjs.map +1 -0
  51. package/dist/chunks/NcAppContentDetails.vue_vue_type_script_setup_true_lang-Dnf4r_Ng.mjs +16 -0
  52. package/dist/chunks/NcAppContentDetails.vue_vue_type_script_setup_true_lang-Dnf4r_Ng.mjs.map +1 -0
  53. package/dist/chunks/{NcAppNavigation-DuLUJbsJ.mjs → NcAppNavigation-BVXVi9JQ.mjs} +2 -2
  54. package/dist/chunks/{NcAppNavigation-DuLUJbsJ.mjs.map → NcAppNavigation-BVXVi9JQ.mjs.map} +1 -1
  55. package/dist/chunks/{NcAppNavigationCaption-DTVdWgpf.mjs → NcAppNavigationCaption-DkiIEk6r.mjs} +2 -2
  56. package/dist/chunks/{NcAppNavigationCaption-DTVdWgpf.mjs.map → NcAppNavigationCaption-DkiIEk6r.mjs.map} +1 -1
  57. package/dist/chunks/{NcAppNavigationItem-5KG5Pl2c.mjs → NcAppNavigationItem-s3GC1n4o.mjs} +68 -68
  58. package/dist/chunks/{NcAppNavigationItem-5KG5Pl2c.mjs.map → NcAppNavigationItem-s3GC1n4o.mjs.map} +1 -1
  59. package/dist/chunks/{NcAppNavigationNewItem-CRCOC0hV.mjs → NcAppNavigationNewItem-D1GWsi8R.mjs} +2 -2
  60. package/dist/chunks/{NcAppNavigationNewItem-CRCOC0hV.mjs.map → NcAppNavigationNewItem-D1GWsi8R.mjs.map} +1 -1
  61. package/dist/chunks/{NcAppNavigationSearch-AT_S98B0.mjs → NcAppNavigationSearch-Cy0s4XWp.mjs} +2 -2
  62. package/dist/chunks/{NcAppNavigationSearch-AT_S98B0.mjs.map → NcAppNavigationSearch-Cy0s4XWp.mjs.map} +1 -1
  63. package/dist/chunks/{NcAppNavigationSettings-DFsvNlME.mjs → NcAppNavigationSettings-GeCb9tlR.mjs} +2 -2
  64. package/dist/chunks/{NcAppNavigationSettings-DFsvNlME.mjs.map → NcAppNavigationSettings-GeCb9tlR.mjs.map} +1 -1
  65. package/dist/chunks/{NcAppNavigationToggle-CqZs9ls-.mjs → NcAppNavigationToggle-CFw3W3_o.mjs} +2 -2
  66. package/dist/chunks/{NcAppNavigationToggle-CqZs9ls-.mjs.map → NcAppNavigationToggle-CFw3W3_o.mjs.map} +1 -1
  67. package/dist/chunks/{NcAppSettingsDialog-CTUoQezW.mjs → NcAppSettingsDialog-CBLZvdnK.mjs} +7 -7
  68. package/dist/chunks/{NcAppSettingsDialog-CTUoQezW.mjs.map → NcAppSettingsDialog-CBLZvdnK.mjs.map} +1 -1
  69. package/dist/chunks/{NcAppSidebar-B7shIqzm.mjs → NcAppSidebar-BomlW59S.mjs} +287 -274
  70. package/dist/chunks/NcAppSidebar-BomlW59S.mjs.map +1 -0
  71. package/dist/chunks/NcAppSidebarHeader.vue_vue_type_script_setup_true_lang-0j0aFDeK.mjs +30 -0
  72. package/dist/chunks/NcAppSidebarHeader.vue_vue_type_script_setup_true_lang-0j0aFDeK.mjs.map +1 -0
  73. package/dist/chunks/{NcAvatar-CvPCBukb.mjs → NcAvatar-CSk-1oFe.mjs} +13 -13
  74. package/dist/chunks/{NcAvatar-CvPCBukb.mjs.map → NcAvatar-CSk-1oFe.mjs.map} +1 -1
  75. package/dist/chunks/{NcBreadcrumb-C3qGDt3z.mjs → NcBreadcrumb-Bvsnecwa.mjs} +46 -4
  76. package/dist/chunks/NcBreadcrumb-Bvsnecwa.mjs.map +1 -0
  77. package/dist/chunks/{NcBreadcrumbs-DtBCo9yI.mjs → NcBreadcrumbs-DWU2ZRkM.mjs} +6 -6
  78. package/dist/chunks/{NcBreadcrumbs-DtBCo9yI.mjs.map → NcBreadcrumbs-DWU2ZRkM.mjs.map} +1 -1
  79. package/dist/chunks/{NcCheckboxRadioSwitch-DrNlVZw8.mjs → NcCheckboxRadioSwitch-Ca1ouh22.mjs} +2 -2
  80. package/dist/chunks/{NcCheckboxRadioSwitch-DrNlVZw8.mjs.map → NcCheckboxRadioSwitch-Ca1ouh22.mjs.map} +1 -1
  81. package/dist/chunks/{NcChip-Cq8DrWKb.mjs → NcChip-Cl6RfDoK.mjs} +14 -15
  82. package/dist/chunks/NcChip-Cl6RfDoK.mjs.map +1 -0
  83. package/dist/chunks/{NcCollectionList-CFuwV9sI.mjs → NcCollectionList-CxzQkCFq.mjs} +6 -6
  84. package/dist/chunks/{NcCollectionList-CFuwV9sI.mjs.map → NcCollectionList-CxzQkCFq.mjs.map} +1 -1
  85. package/dist/chunks/{NcColorPicker-Clo5oIYN.mjs → NcColorPicker-BjsBCkEt.mjs} +4 -4
  86. package/dist/chunks/{NcColorPicker-Clo5oIYN.mjs.map → NcColorPicker-BjsBCkEt.mjs.map} +1 -1
  87. package/dist/chunks/{NcContent-CUuf0HwJ.mjs → NcContent-DtM8j8ub.mjs} +5 -5
  88. package/dist/chunks/{NcContent-CUuf0HwJ.mjs.map → NcContent-DtM8j8ub.mjs.map} +1 -1
  89. package/dist/chunks/NcCounterBubble-PBdqn9Nf.mjs +52 -0
  90. package/dist/chunks/NcCounterBubble-PBdqn9Nf.mjs.map +1 -0
  91. package/dist/chunks/{NcDashboardWidget-CXw7Hxc8.mjs → NcDashboardWidget-uBobynyZ.mjs} +7 -7
  92. package/dist/chunks/{NcDashboardWidget-CXw7Hxc8.mjs.map → NcDashboardWidget-uBobynyZ.mjs.map} +1 -1
  93. package/dist/chunks/{NcDashboardWidgetItem-C6GoJEri.mjs → NcDashboardWidgetItem-DnI9uLf1.mjs} +4 -4
  94. package/dist/chunks/{NcDashboardWidgetItem-C6GoJEri.mjs.map → NcDashboardWidgetItem-DnI9uLf1.mjs.map} +1 -1
  95. package/dist/chunks/{NcDateTime.vue_vue_type_script_setup_true_lang-BYXau4sd.mjs → NcDateTime.vue_vue_type_script_setup_true_lang-BD-rj6Dr.mjs} +2 -2
  96. package/dist/chunks/{NcDateTime.vue_vue_type_script_setup_true_lang-BYXau4sd.mjs.map → NcDateTime.vue_vue_type_script_setup_true_lang-BD-rj6Dr.mjs.map} +1 -1
  97. package/dist/chunks/{NcDateTimePicker-CDFvxL3U.mjs → NcDateTimePicker-DYNOGc6A.mjs} +5 -5
  98. package/dist/chunks/{NcDateTimePicker-CDFvxL3U.mjs.map → NcDateTimePicker-DYNOGc6A.mjs.map} +1 -1
  99. package/dist/chunks/{NcDateTimePickerNative-BRuMK89z.mjs → NcDateTimePickerNative-D0pjWawX.mjs} +5 -6
  100. package/dist/chunks/NcDateTimePickerNative-D0pjWawX.mjs.map +1 -0
  101. package/dist/chunks/{NcDialog-BX0IET9Y.mjs → NcDialog-BQNR_-Ju.mjs} +3 -3
  102. package/dist/chunks/{NcDialog-BX0IET9Y.mjs.map → NcDialog-BQNR_-Ju.mjs.map} +1 -1
  103. package/dist/chunks/{NcDialogButton.vue_vue_type_script_setup_true_lang-DbzPc_gW.mjs → NcDialogButton.vue_vue_type_script_setup_true_lang-DAZ2Budh.mjs} +3 -3
  104. package/dist/chunks/{NcDialogButton.vue_vue_type_script_setup_true_lang-DbzPc_gW.mjs.map → NcDialogButton.vue_vue_type_script_setup_true_lang-DAZ2Budh.mjs.map} +1 -1
  105. package/dist/chunks/{NcEmojiPicker-C30Ofq8B.mjs → NcEmojiPicker-lhuMMbDy.mjs} +6 -6
  106. package/dist/chunks/{NcEmojiPicker-C30Ofq8B.mjs.map → NcEmojiPicker-lhuMMbDy.mjs.map} +1 -1
  107. package/dist/chunks/NcEmptyContent-BdOezubv.mjs +56 -0
  108. package/dist/chunks/NcEmptyContent-BdOezubv.mjs.map +1 -0
  109. package/dist/chunks/NcGuestContent-B_S2nyJ4.mjs +25 -0
  110. package/dist/chunks/NcGuestContent-B_S2nyJ4.mjs.map +1 -0
  111. package/dist/chunks/{NcHeaderMenu-CEH_-KT_.mjs → NcHeaderMenu-o9FmNBI5.mjs} +2 -2
  112. package/dist/chunks/{NcHeaderMenu-CEH_-KT_.mjs.map → NcHeaderMenu-o9FmNBI5.mjs.map} +1 -1
  113. package/dist/chunks/NcIconSvgWrapper-BOiCKv0b.mjs +68 -0
  114. package/dist/chunks/NcIconSvgWrapper-BOiCKv0b.mjs.map +1 -0
  115. package/dist/chunks/{NcInputConfirmCancel-DeWD9uc6.mjs → NcInputConfirmCancel-C1K1gyQA.mjs} +4 -4
  116. package/dist/chunks/{NcInputConfirmCancel-DeWD9uc6.mjs.map → NcInputConfirmCancel-C1K1gyQA.mjs.map} +1 -1
  117. package/dist/chunks/{NcListItem-CVX52kG-.mjs → NcListItem-C2LlJgjL.mjs} +6 -6
  118. package/dist/chunks/{NcListItem-CVX52kG-.mjs.map → NcListItem-C2LlJgjL.mjs.map} +1 -1
  119. package/dist/chunks/{NcListItemIcon-Cc6vXRrY.mjs → NcListItemIcon-5ms0eK3w.mjs} +6 -6
  120. package/dist/chunks/{NcListItemIcon-Cc6vXRrY.mjs.map → NcListItemIcon-5ms0eK3w.mjs.map} +1 -1
  121. package/dist/chunks/{NcMentionBubble.vue_vue_type_style_index_0_scoped_5b8f093f_lang-DZbkIMTW.mjs → NcMentionBubble.vue_vue_type_style_index_0_scoped_c29760cd_lang-CZdrlInz.mjs} +2 -2
  122. package/dist/chunks/{NcMentionBubble.vue_vue_type_style_index_0_scoped_5b8f093f_lang-DZbkIMTW.mjs.map → NcMentionBubble.vue_vue_type_style_index_0_scoped_c29760cd_lang-CZdrlInz.mjs.map} +1 -1
  123. package/dist/chunks/NcModal-BisVxXe_.mjs +780 -0
  124. package/dist/chunks/NcModal-BisVxXe_.mjs.map +1 -0
  125. package/dist/chunks/{NcPasswordField-CYPRKGml.mjs → NcPasswordField-hZiEd3tC.mjs} +2 -2
  126. package/dist/chunks/{NcPasswordField-CYPRKGml.mjs.map → NcPasswordField-hZiEd3tC.mjs.map} +1 -1
  127. package/dist/chunks/{NcPopover-EPnt2iHh.mjs → NcPopover-MsWUAvsI.mjs} +13 -6
  128. package/dist/chunks/NcPopover-MsWUAvsI.mjs.map +1 -0
  129. package/dist/chunks/{NcRelatedResourcesPanel-Bcy58V31.mjs → NcRelatedResourcesPanel-CShyi9lg.mjs} +3 -3
  130. package/dist/chunks/{NcRelatedResourcesPanel-Bcy58V31.mjs.map → NcRelatedResourcesPanel-CShyi9lg.mjs.map} +1 -1
  131. package/dist/chunks/{NcRichContenteditable-BR08SbpA.mjs → NcRichContenteditable-DgH9H1qf.mjs} +22 -42
  132. package/dist/chunks/NcRichContenteditable-DgH9H1qf.mjs.map +1 -0
  133. package/dist/chunks/{NcRichText-jZif8PdV.mjs → NcRichText-BkKK1moX.mjs} +8 -6
  134. package/dist/chunks/{NcRichText-jZif8PdV.mjs.map → NcRichText-BkKK1moX.mjs.map} +1 -1
  135. package/dist/chunks/{NcSelect-BkTH-Yqm.mjs → NcSelect-BSa2kSPW.mjs} +2 -4
  136. package/dist/chunks/NcSelect-BSa2kSPW.mjs.map +1 -0
  137. package/dist/chunks/{NcSelectTags-BY8LM7qV.mjs → NcSelectTags-BW0QroJV.mjs} +3 -3
  138. package/dist/chunks/{NcSelectTags-BY8LM7qV.mjs.map → NcSelectTags-BW0QroJV.mjs.map} +1 -1
  139. package/dist/chunks/NcSelectUsers-Bhx9k-0v.mjs +76 -0
  140. package/dist/chunks/NcSelectUsers-Bhx9k-0v.mjs.map +1 -0
  141. package/dist/chunks/{NcSettingsInputText-B129n9sr.mjs → NcSettingsInputText-CrOqaL-x.mjs} +2 -2
  142. package/dist/chunks/{NcSettingsInputText-B129n9sr.mjs.map → NcSettingsInputText-CrOqaL-x.mjs.map} +1 -1
  143. package/dist/chunks/{NcSettingsSection-CjWtq7TT.mjs → NcSettingsSection-D6ShpfeY.mjs} +2 -2
  144. package/dist/chunks/{NcSettingsSection-CjWtq7TT.mjs.map → NcSettingsSection-D6ShpfeY.mjs.map} +1 -1
  145. package/dist/chunks/{NcSettingsSelectGroup-B8uq0KIw.mjs → NcSettingsSelectGroup-DpNxkoZ2.mjs} +3 -3
  146. package/dist/chunks/{NcSettingsSelectGroup-B8uq0KIw.mjs.map → NcSettingsSelectGroup-DpNxkoZ2.mjs.map} +1 -1
  147. package/dist/chunks/{NcTextField-KGXtf7Y6.mjs → NcTextField-DJ1KtSKd.mjs} +4 -4
  148. package/dist/chunks/{NcTextField-KGXtf7Y6.mjs.map → NcTextField-DJ1KtSKd.mjs.map} +1 -1
  149. package/dist/chunks/{NcTimezonePicker.vue_vue_type_script_setup_true_lang-DxoB-jLa.mjs → NcTimezonePicker.vue_vue_type_script_setup_true_lang-T3gPr-FV.mjs} +3 -3
  150. package/dist/chunks/{NcTimezonePicker.vue_vue_type_script_setup_true_lang-DxoB-jLa.mjs.map → NcTimezonePicker.vue_vue_type_script_setup_true_lang-T3gPr-FV.mjs.map} +1 -1
  151. package/dist/chunks/{NcUserBubble-qqRewR9C.mjs → NcUserBubble-Csot0WLv.mjs} +3 -3
  152. package/dist/chunks/{NcUserBubble-qqRewR9C.mjs.map → NcUserBubble-Csot0WLv.mjs.map} +1 -1
  153. package/dist/chunks/{NcUserStatusIcon-DpZVD4HJ.mjs → NcUserStatusIcon-CtOZd90o.mjs} +54 -103
  154. package/dist/chunks/NcUserStatusIcon-CtOZd90o.mjs.map +1 -0
  155. package/dist/chunks/NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs +23 -0
  156. package/dist/chunks/NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs.map +1 -0
  157. package/dist/chunks/{_l10n-BNGeEX3W.mjs → _l10n-Bg-fZ9R0.mjs} +34 -38
  158. package/dist/chunks/_l10n-Bg-fZ9R0.mjs.map +1 -0
  159. package/dist/chunks/{actionText-BiV1_BZX.mjs → actionText-DdSwf9le.mjs} +7 -10
  160. package/dist/chunks/actionText-DdSwf9le.mjs.map +1 -0
  161. package/dist/chunks/{colors-CSUSQx1k.mjs → colors-BPGhD2C5.mjs} +2 -2
  162. package/dist/chunks/{colors-CSUSQx1k.mjs.map → colors-BPGhD2C5.mjs.map} +1 -1
  163. package/dist/chunks/{mdi-zYpVOORa.mjs → mdi-CR-3gwdl.mjs} +12 -8
  164. package/dist/chunks/{mdi-zYpVOORa.mjs.map → mdi-CR-3gwdl.mjs.map} +1 -1
  165. package/dist/chunks/{referencePickerModal-DzM7CkKN.mjs → referencePickerModal-Dw1szWUR.mjs} +10 -10
  166. package/dist/chunks/{referencePickerModal-DzM7CkKN.mjs.map → referencePickerModal-Dw1szWUR.mjs.map} +1 -1
  167. package/dist/chunks/{useFormatDateTime-BPGWjR3-.mjs → useFormatDateTime-L411ysPm.mjs} +2 -2
  168. package/dist/chunks/{useFormatDateTime-BPGWjR3-.mjs.map → useFormatDateTime-L411ysPm.mjs.map} +1 -1
  169. package/dist/chunks/{usernameToColor-Bl9NGU_9.mjs → usernameToColor-CuTR6O_B.mjs} +2 -2
  170. package/dist/chunks/{usernameToColor-Bl9NGU_9.mjs.map → usernameToColor-CuTR6O_B.mjs.map} +1 -1
  171. package/dist/components/NcActionButton/NcActionButton.vue.d.ts +38 -27
  172. package/dist/components/NcActionButton/index.mjs +1 -1
  173. package/dist/components/NcActionButtonGroup/index.mjs +1 -1
  174. package/dist/components/NcActionCheckbox/NcActionCheckbox.vue.d.ts +1 -1
  175. package/dist/components/NcActionInput/index.mjs +1 -1
  176. package/dist/components/NcActionLink/index.mjs +1 -1
  177. package/dist/components/NcActionRadio/NcActionRadio.vue.d.ts +1 -1
  178. package/dist/components/NcActionRouter/NcActionRouter.vue.d.ts +1 -4
  179. package/dist/components/NcActionRouter/index.mjs +1 -1
  180. package/dist/components/NcActionText/NcActionText.vue.d.ts +1 -4
  181. package/dist/components/NcActionText/index.mjs +1 -1
  182. package/dist/components/NcActionTextEditable/NcActionTextEditable.vue.d.ts +24 -9
  183. package/dist/components/NcActionTextEditable/index.mjs +1 -1
  184. package/dist/components/NcActions/index.mjs +1 -1
  185. package/dist/components/NcAppContent/NcAppContent.vue.d.ts +225 -0
  186. package/dist/components/NcAppContent/NcAppDetailsToggle.vue.d.ts +2 -0
  187. package/dist/components/NcAppContent/index.mjs +1 -1
  188. package/dist/components/NcAppContentDetails/NcAppContentDetails.vue.d.ts +27 -1
  189. package/dist/components/NcAppContentDetails/index.d.ts +4 -0
  190. package/dist/components/NcAppContentDetails/index.mjs +2 -2
  191. package/dist/components/NcAppNavigation/index.mjs +1 -1
  192. package/dist/components/NcAppNavigationCaption/index.mjs +1 -1
  193. package/dist/components/NcAppNavigationItem/index.mjs +1 -1
  194. package/dist/components/NcAppNavigationNewItem/index.mjs +1 -1
  195. package/dist/components/NcAppNavigationSearch/index.mjs +1 -1
  196. package/dist/components/NcAppNavigationSettings/index.mjs +1 -1
  197. package/dist/components/NcAppNavigationToggle/index.mjs +1 -1
  198. package/dist/components/NcAppSettingsDialog/index.mjs +1 -1
  199. package/dist/components/NcAppSidebar/NcAppSidebarTabs.vue.d.ts +7 -3
  200. package/dist/components/NcAppSidebar/index.mjs +1 -1
  201. package/dist/components/NcAppSidebarHeader/NcAppSidebarHeader.vue.d.ts +18 -0
  202. package/dist/components/NcAppSidebarHeader/index.d.ts +5 -0
  203. package/dist/components/NcAppSidebarHeader/index.mjs +5 -0
  204. package/dist/components/NcAppSidebarHeader/index.mjs.map +1 -0
  205. package/dist/components/NcAvatar/index.mjs +1 -1
  206. package/dist/components/NcBreadcrumb/index.mjs +1 -1
  207. package/dist/components/NcBreadcrumbs/index.mjs +1 -1
  208. package/dist/components/NcCheckboxRadioSwitch/index.mjs +1 -1
  209. package/dist/components/NcChip/NcChip.vue.d.ts +38 -6
  210. package/dist/components/NcChip/index.mjs +1 -1
  211. package/dist/components/NcCollectionList/index.mjs +1 -1
  212. package/dist/components/NcColorPicker/index.mjs +1 -1
  213. package/dist/components/NcContent/index.mjs +1 -1
  214. package/dist/components/NcCounterBubble/NcCounterBubble.vue.d.ts +10 -60
  215. package/dist/components/NcCounterBubble/index.d.ts +4 -0
  216. package/dist/components/NcCounterBubble/index.mjs +1 -1
  217. package/dist/components/NcDashboardWidget/index.mjs +1 -1
  218. package/dist/components/NcDashboardWidgetItem/index.mjs +1 -1
  219. package/dist/components/NcDateTime/index.mjs +1 -1
  220. package/dist/components/NcDateTimePicker/index.mjs +1 -1
  221. package/dist/components/NcDateTimePickerNative/NcDateTimePickerNative.vue.d.ts +178 -1
  222. package/dist/components/NcDateTimePickerNative/index.mjs +1 -1
  223. package/dist/components/NcDialog/NcDialog.vue.d.ts +4 -4
  224. package/dist/components/NcDialog/index.mjs +1 -1
  225. package/dist/components/NcDialogButton/NcDialogButton.vue.d.ts +1 -1
  226. package/dist/components/NcDialogButton/index.mjs +1 -1
  227. package/dist/components/NcEmojiPicker/index.mjs +1 -1
  228. package/dist/components/NcEmptyContent/NcEmptyContent.vue.d.ts +58 -28
  229. package/dist/components/NcEmptyContent/index.d.ts +4 -0
  230. package/dist/components/NcEmptyContent/index.mjs +1 -1
  231. package/dist/components/NcGuestContent/NcGuestContent.vue.d.ts +19 -1
  232. package/dist/components/NcGuestContent/index.d.ts +4 -0
  233. package/dist/components/NcGuestContent/index.mjs +1 -1
  234. package/dist/components/NcHeaderMenu/index.mjs +1 -1
  235. package/dist/components/NcIconSvgWrapper/NcIconSvgWrapper.vue.d.ts +12 -87
  236. package/dist/components/NcIconSvgWrapper/index.d.ts +4 -0
  237. package/dist/components/NcIconSvgWrapper/index.mjs +1 -1
  238. package/dist/components/NcListItem/index.mjs +1 -1
  239. package/dist/components/NcListItemIcon/index.mjs +1 -1
  240. package/dist/components/NcModal/index.d.ts +1 -2
  241. package/dist/components/NcModal/index.mjs +2 -779
  242. package/dist/components/NcModal/index.mjs.map +1 -1
  243. package/dist/components/NcPasswordField/index.mjs +1 -1
  244. package/dist/components/NcPopover/index.mjs +1 -1
  245. package/dist/components/NcRelatedResourcesPanel/index.mjs +1 -1
  246. package/dist/components/NcRichContenteditable/NcAutoCompleteResult.vue.d.ts +18 -19
  247. package/dist/components/NcRichContenteditable/NcMentionBubble.vue.d.ts +0 -18
  248. package/dist/components/NcRichContenteditable/NcRichContenteditable.vue.d.ts +3 -3
  249. package/dist/components/NcRichContenteditable/index.mjs +1 -1
  250. package/dist/components/NcRichText/NcReferencePicker/NcProviderList.vue.d.ts +41 -20
  251. package/dist/components/NcRichText/NcReferencePicker/NcSearch.vue.d.ts +41 -20
  252. package/dist/components/NcRichText/index.mjs +3 -3
  253. package/dist/components/NcSelect/index.mjs +1 -1
  254. package/dist/components/NcSelectTags/index.mjs +1 -1
  255. package/dist/components/NcSelectUsers/NcSelectUsers.vue.d.ts +3 -3
  256. package/dist/components/NcSelectUsers/index.mjs +2 -70
  257. package/dist/components/NcSelectUsers/index.mjs.map +1 -1
  258. package/dist/components/NcSettingsInputText/NcSettingsInputText.vue.d.ts +3 -3
  259. package/dist/components/NcSettingsInputText/index.mjs +1 -1
  260. package/dist/components/NcSettingsSection/index.mjs +1 -1
  261. package/dist/components/NcSettingsSelectGroup/NcSettingsSelectGroup.vue.d.ts +2 -2
  262. package/dist/components/NcSettingsSelectGroup/index.mjs +1 -1
  263. package/dist/components/NcTextArea/NcTextArea.vue.d.ts +1 -1
  264. package/dist/components/NcTextField/index.mjs +1 -1
  265. package/dist/components/NcTimezonePicker/index.mjs +1 -1
  266. package/dist/components/NcUserBubble/index.mjs +1 -1
  267. package/dist/components/NcUserStatusIcon/NcUserStatusIcon.vue.d.ts +21 -1
  268. package/dist/components/NcUserStatusIcon/index.d.ts +4 -0
  269. package/dist/components/NcUserStatusIcon/index.mjs +1 -1
  270. package/dist/components/NcVNodes/NcVNodes.vue.d.ts +8 -3
  271. package/dist/components/NcVNodes/index.d.ts +4 -0
  272. package/dist/components/NcVNodes/index.mjs +2 -21
  273. package/dist/components/NcVNodes/index.mjs.map +1 -1
  274. package/dist/components/index.d.ts +11 -9
  275. package/dist/directives/Focus/index.d.ts +2 -3
  276. package/dist/directives/Focus/index.mjs +1 -2
  277. package/dist/directives/Focus/index.mjs.map +1 -1
  278. package/dist/directives/index.d.ts +1 -1
  279. package/dist/functions/dialog/index.d.ts +8 -1
  280. package/dist/functions/dialog/index.mjs.map +1 -1
  281. package/dist/functions/reference/index.mjs +1 -1
  282. package/dist/functions/usernameToColor/index.mjs +1 -1
  283. package/dist/index.mjs +140 -136
  284. package/dist/index.mjs.map +1 -1
  285. package/dist/mixins/actionText.d.ts +1 -6
  286. package/package.json +5 -6
  287. package/dist/assets/index-D9L0rgJk.css +0 -4
  288. package/dist/chunks/ChevronRight-LvtA5_hq.mjs +0 -49
  289. package/dist/chunks/ChevronRight-LvtA5_hq.mjs.map +0 -1
  290. package/dist/chunks/NcActionButton-BZEDhdCm.mjs.map +0 -1
  291. package/dist/chunks/NcActionInput-C_rmP0eZ.mjs.map +0 -1
  292. package/dist/chunks/NcActionTextEditable-Dv1_bMFY.mjs.map +0 -1
  293. package/dist/chunks/NcActions-DpYAcY6a.mjs.map +0 -1
  294. package/dist/chunks/NcAppContent-BMiA5ySy.mjs.map +0 -1
  295. package/dist/chunks/NcAppContentDetails-DsEEBJ0U.mjs +0 -16
  296. package/dist/chunks/NcAppContentDetails-DsEEBJ0U.mjs.map +0 -1
  297. package/dist/chunks/NcAppSidebar-B7shIqzm.mjs.map +0 -1
  298. package/dist/chunks/NcBreadcrumb-C3qGDt3z.mjs.map +0 -1
  299. package/dist/chunks/NcChip-Cq8DrWKb.mjs.map +0 -1
  300. package/dist/chunks/NcCounterBubble-6B_JNUUS.mjs +0 -78
  301. package/dist/chunks/NcCounterBubble-6B_JNUUS.mjs.map +0 -1
  302. package/dist/chunks/NcDateTimePickerNative-BRuMK89z.mjs.map +0 -1
  303. package/dist/chunks/NcEmptyContent-BQnIrQQn.mjs +0 -68
  304. package/dist/chunks/NcEmptyContent-BQnIrQQn.mjs.map +0 -1
  305. package/dist/chunks/NcGuestContent-iQpV7mLC.mjs +0 -23
  306. package/dist/chunks/NcGuestContent-iQpV7mLC.mjs.map +0 -1
  307. package/dist/chunks/NcIconSvgWrapper-Bc3ogp8T.mjs +0 -120
  308. package/dist/chunks/NcIconSvgWrapper-Bc3ogp8T.mjs.map +0 -1
  309. package/dist/chunks/NcPopover-EPnt2iHh.mjs.map +0 -1
  310. package/dist/chunks/NcRichContenteditable-BR08SbpA.mjs.map +0 -1
  311. package/dist/chunks/NcSelect-BkTH-Yqm.mjs.map +0 -1
  312. package/dist/chunks/NcUserStatusIcon-DpZVD4HJ.mjs.map +0 -1
  313. package/dist/chunks/ScopeComponent-BIpNSmeE.mjs +0 -15
  314. package/dist/chunks/ScopeComponent-BIpNSmeE.mjs.map +0 -1
  315. package/dist/chunks/_l10n-BNGeEX3W.mjs.map +0 -1
  316. package/dist/chunks/actionText-BiV1_BZX.mjs.map +0 -1
  317. package/dist/utils/ScopeComponent.d.ts +0 -6
@@ -1,22 +1,22 @@
1
- import '../assets/referencePickerModal-CkGgDb19.css';
1
+ import '../assets/referencePickerModal-DAD-jv3F.css';
2
2
  import { c as renderCustomPickerElement, e as destroyCustomPickerElement, d as isCustomPickerElementRegistered, f as destroyWidget, a as renderWidget, i as isWidgetRegistered, h as hasInteractiveView, g as hasFullWidth, j as getCustomPickerElementSize } from "./index-BF8joS9W.mjs";
3
3
  import { createElementBlock, openBlock, mergeProps, createElementVNode, createCommentVNode, toDisplayString, resolveComponent, createVNode, withCtx, ref, nextTick, normalizeClass, createBlock, resolveDynamicComponent, normalizeStyle, createTextVNode, withKeys, withModifiers, createApp } from "vue";
4
4
  import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.mjs";
5
- import { r as register, N as t7, a as t, O as t41, P as t37, Q as t22, R as t23, q as t39, S as t30, A as t18, T as t11 } from "./_l10n-BNGeEX3W.mjs";
5
+ import { r as register, L as t7, a as t, M as t41, N as t37, O as t22, P as t23, q as t39, Q as t30, y as t18, R as t11 } from "./_l10n-Bg-fZ9R0.mjs";
6
6
  import axios from "@nextcloud/axios";
7
7
  import { loadState } from "@nextcloud/initial-state";
8
8
  import { imagePath, generateOcsUrl } from "@nextcloud/router";
9
- import { N as NcEmptyContent } from "./NcEmptyContent-BQnIrQQn.mjs";
9
+ import { N as NcEmptyContent } from "./NcEmptyContent-BdOezubv.mjs";
10
10
  import { _ as _sfc_main$9 } from "./NcHighlight-Cu4UfEEO.mjs";
11
- import { N as NcSelect } from "./NcSelect-BkTH-Yqm.mjs";
11
+ import { N as NcSelect } from "./NcSelect-BSa2kSPW.mjs";
12
12
  import { useElementSize, useIntersectionObserver } from "@vueuse/core";
13
13
  import { RouterLink } from "vue-router";
14
14
  import { g as getRoute } from "./autolink-CKPk5rzg.mjs";
15
15
  import { N as NcButton } from "./NcButton-Byg8-ta1.mjs";
16
16
  import { N as NcLoadingIcon } from "./NcLoadingIcon-CsMn1bFR.mjs";
17
- import { N as NcTextField } from "./NcTextField-KGXtf7Y6.mjs";
17
+ import { N as NcTextField } from "./NcTextField-DJ1KtSKd.mjs";
18
18
  import { D as DotsHorizontal } from "./DotsHorizontal-AMVAlTNH.mjs";
19
- import NcModal from "../components/NcModal/index.mjs";
19
+ import { N as NcModal } from "./NcModal-BisVxXe_.mjs";
20
20
  import { emit } from "@nextcloud/event-bus";
21
21
  import { A as ArrowLeft } from "./ArrowLeft-CanHG70H.mjs";
22
22
  import { I as IconClose } from "./Close-D6ngJ4t9.mjs";
@@ -325,7 +325,7 @@ function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) {
325
325
  })
326
326
  ]);
327
327
  }
328
- const NcProviderList = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$6], ["__scopeId", "data-v-f61ca5dc"]]);
328
+ const NcProviderList = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["render", _sfc_render$6], ["__scopeId", "data-v-aed6d462"]]);
329
329
  register(t22);
330
330
  const IDLE_TIMEOUT = 3 * 60 * 1e3;
331
331
  const _sfc_main$5 = {
@@ -660,7 +660,7 @@ function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) {
660
660
  }))
661
661
  ]);
662
662
  }
663
- const NcRawLinkInput = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$4], ["__scopeId", "data-v-b84f647b"]]);
663
+ const NcRawLinkInput = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["render", _sfc_render$4], ["__scopeId", "data-v-0393ee75"]]);
664
664
  const _sfc_main$3 = {
665
665
  name: "NcSearchResult",
666
666
  components: {
@@ -1011,7 +1011,7 @@ function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) {
1011
1011
  })) : createCommentVNode("", true)
1012
1012
  ], 2);
1013
1013
  }
1014
- const NcSearch = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2], ["__scopeId", "data-v-77fd76e7"]]);
1014
+ const NcSearch = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["render", _sfc_render$2], ["__scopeId", "data-v-c1841318"]]);
1015
1015
  const MODES = {
1016
1016
  providerList: 1,
1017
1017
  standardLinkInput: 2,
@@ -1359,4 +1359,4 @@ export {
1359
1359
  NcSearch as h,
1360
1360
  sortProviders as s
1361
1361
  };
1362
- //# sourceMappingURL=referencePickerModal-DzM7CkKN.mjs.map
1362
+ //# sourceMappingURL=referencePickerModal-Dw1szWUR.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"referencePickerModal-DzM7CkKN.mjs","sources":["../../src/components/NcRichText/NcReferencePicker/NcCustomPickerElement.vue","../../src/functions/reference/providerHelper.js","../../src/components/NcRichText/NcReferencePicker/utils.js","../../node_modules/vue-material-design-icons/LinkVariant.vue","../../src/components/NcRichText/NcReferencePicker/NcProviderList.vue","../../src/components/NcRichText/NcReferenceWidget.vue","../../src/components/NcRichText/NcReferencePicker/NcRawLinkInput.vue","../../src/components/NcRichText/NcReferencePicker/NcSearchResult.vue","../../src/components/NcRichText/NcReferencePicker/NcSearch.vue","../../src/components/NcRichText/NcReferencePicker/NcReferencePicker.vue","../../src/components/NcRichText/NcReferencePicker/NcReferencePickerModal.vue","../../src/functions/reference/referencePickerModal.js"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div ref=\"domElement\" />\n</template>\n\n<script>\nimport { renderCustomPickerElement, isCustomPickerElementRegistered, destroyCustomPickerElement } from './../../../functions/reference/customPickerElements.js'\n\nexport default {\n\tname: 'NcCustomPickerElement',\n\tprops: {\n\t\t/**\n\t\t * The reference provider\n\t\t */\n\t\tprovider: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\temits: [\n\t\t'cancel',\n\t\t'submit',\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tisRegistered: isCustomPickerElementRegistered(this.provider.id),\n\t\t\trenderResult: null,\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.isRegistered) {\n\t\t\tthis.renderElement()\n\t\t}\n\t},\n\tbeforeUnmount() {\n\t\tif (this.isRegistered) {\n\t\t\tdestroyCustomPickerElement(this.provider.id, this.$el, this.renderResult)\n\t\t}\n\t},\n\tmethods: {\n\t\trenderElement() {\n\t\t\tif (this.$refs.domElement) {\n\t\t\t\tthis.$refs.domElement.innerHTML = ''\n\t\t\t}\n\n\t\t\tconst renderFunctionResult = renderCustomPickerElement(this.$refs.domElement, { providerId: this.provider.id, accessible: false })\n\t\t\t// this works whether renderCustomPickerElement returns a promise or a value\n\t\t\tPromise.resolve(renderFunctionResult).then(result => {\n\t\t\t\tthis.renderResult = result\n\t\t\t\tif (this.renderResult.object?._isVue && this.renderResult.object?.$on) {\n\t\t\t\t\tthis.renderResult.object.$on('submit', this.onSubmit)\n\t\t\t\t\tthis.renderResult.object.$on('cancel', this.onCancel)\n\t\t\t\t}\n\t\t\t\tthis.renderResult.element.addEventListener('submit', (e) => {\n\t\t\t\t\tthis.onSubmit(e.detail)\n\t\t\t\t})\n\t\t\t\tthis.renderResult.element.addEventListener('cancel', this.onCancel)\n\t\t\t})\n\t\t},\n\t\tonSubmit(value) {\n\t\t\tthis.$emit('submit', value)\n\t\t},\n\t\tonCancel() {\n\t\t\tthis.$emit('cancel')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// nothing yet\n</style>\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { isCustomPickerElementRegistered } from './customPickerElements.js'\n\nimport { t } from '../../l10n.js'\n\nimport axios from '@nextcloud/axios'\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateOcsUrl, imagePath } from '@nextcloud/router'\n\nexport const anyLinkProviderId = 'any-link'\n\nconst anyLinkProvider = {\n\tid: anyLinkProviderId,\n\ttitle: t('Any link'),\n\ticon_url: imagePath('core', 'filetypes/link.svg'),\n}\n\n// only get the provider list once, even if functions of this file are imported multiple times by different apps/components\nif (!window._vue_richtext_reference_providers) {\n\twindow._vue_richtext_reference_providers = loadState('core', 'reference-provider-list', [])\n}\n\n// single timestamps object used by every entity in the page\nif (!window._vue_richtext_reference_provider_timestamps) {\n\twindow._vue_richtext_reference_provider_timestamps = loadState('core', 'reference-provider-timestamps', {})\n}\n\n/**\n * @param {string} providerId The provider ID\n * @return {object} The provider object\n */\nexport function getProvider(providerId) {\n\tif (providerId === anyLinkProviderId) {\n\t\treturn anyLinkProvider\n\t}\n\treturn getProviders().find(p => p.id === providerId)\n}\n\n/**\n * @return {Array} Raw provider list as it was provided by the server\n */\nexport function getProviders() {\n\treturn window._vue_richtext_reference_providers.filter(p => {\n\t\t// avoid providers with no associated search provider and no custom component registered\n\t\tconst keep = (!!p.search_providers_ids && p.search_providers_ids.length > 0) || isCustomPickerElementRegistered(p.id)\n\t\tif (!keep) {\n\t\t\tconsole.debug('[smart picker]', p.id, 'reference provider is discoverable but does not have any related search provider or custom picker component registered')\n\t\t}\n\t\treturn keep\n\t})\n}\n\n/**\n * Helper function to sort a list of providers according to 2 factors:\n * - their \"last used timestamp\"\n * - their \"order\" property (coming from the provider declaration in the server implementation)\n *\n * @param {Array} providerList list of provider objects\n * @return {Array} the sorted provider list\n */\nexport function sortProviders(providerList) {\n\tconst timestamps = window._vue_richtext_reference_provider_timestamps\n\n\treturn providerList.sort((a, b) => {\n\t\treturn a.order === b.order\n\t\t\t? 0\n\t\t\t: a.order > b.order\n\t\t\t\t? 1\n\t\t\t\t: -1\n\t}).sort((a, b) => {\n\t\tconst ta = timestamps[a.id]\n\t\tconst tb = timestamps[b.id]\n\t\treturn ta === tb\n\t\t\t? 0\n\t\t\t: tb === undefined\n\t\t\t\t? -1\n\t\t\t\t: ta === undefined\n\t\t\t\t\t? 1\n\t\t\t\t\t: ta > tb\n\t\t\t\t\t\t? -1\n\t\t\t\t\t\t: 1\n\t})\n}\n\n/**\n * Helper function to search a provider from a search query\n * Result is a sorted list of providers\n *\n * @param {string} query The search query\n * @param {number} limit (optional) max number of results\n * @return {Array} the sorted/filtered provider list\n */\nexport function searchProvider(query, limit = null) {\n\tconst providers = getProviders()\n\tconst escapedQuery = query.replace(/[/\\-\\\\^$*+?.()|[\\]{}]/g, '\\\\$&')\n\tconst regexp = new RegExp(escapedQuery, 'i')\n\tconst sortedProviders = sortProviders(providers)\n\tconst filteredSortedProviders = sortedProviders.filter(p => {\n\t\treturn p.title.match(regexp)\n\t})\n\tconst searchResult = limit\n\t\t? filteredSortedProviders.slice(0, limit)\n\t\t: filteredSortedProviders\n\t// append the 'any link' provider in the full list or when there is no result\n\tif (query === '' || searchResult.length === 0) {\n\t\tsearchResult.push(anyLinkProvider)\n\t}\n\treturn searchResult\n}\n\n/**\n * Update the \"last used timestamp\" on the server side and then locally in the frontend\n *\n * @param {number} providerId The id of the search provider\n */\nexport function touchProvider(providerId) {\n\tconst timestamp = Math.floor(Date.now() / 1000)\n\tconst params = {\n\t\ttimestamp,\n\t}\n\tconst url = generateOcsUrl('references/provider/{providerId}', { providerId })\n\taxios.put(url, params)\n\t\t.then((response) => {\n\t\t\twindow._vue_richtext_reference_provider_timestamps[providerId] = timestamp\n\t\t})\n}\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nlet mytimer = 0\n/**\n *\n * @param {Function} callback The callback to call after the delay\n * @param {number} ms The delay in milli-seconds\n */\nexport function delay(callback, ms) {\n\treturn function() {\n\t\tconst context = this\n\t\tconst args = arguments\n\t\tclearTimeout(mytimer)\n\t\tmytimer = setTimeout(function() {\n\t\t\tcallback.apply(context, args)\n\t\t}, ms || 0)\n\t}\n}\n/**\n *\n * @param {string} str The url\n */\nexport function isUrl(str) {\n\ttry {\n\t\treturn Boolean(new URL(str))\n\t} catch (error) {\n\t\treturn false\n\t}\n}\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon link-variant-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M10.59,13.41C11,13.8 11,14.44 10.59,14.83C10.2,15.22 9.56,15.22 9.17,14.83C7.22,12.88 7.22,9.71 9.17,7.76V7.76L12.71,4.22C14.66,2.27 17.83,2.27 19.78,4.22C21.73,6.17 21.73,9.34 19.78,11.29L18.29,12.78C18.3,11.96 18.17,11.14 17.89,10.36L18.36,9.88C19.54,8.71 19.54,6.81 18.36,5.64C17.19,4.46 15.29,4.46 14.12,5.64L10.59,9.17C9.41,10.34 9.41,12.24 10.59,13.41M13.41,9.17C13.8,8.78 14.44,8.78 14.83,9.17C16.78,11.12 16.78,14.29 14.83,16.24V16.24L11.29,19.78C9.34,21.73 6.17,21.73 4.22,19.78C2.27,17.83 2.27,14.66 4.22,12.71L5.71,11.22C5.7,12.04 5.83,12.86 6.11,13.65L5.64,14.12C4.46,15.29 4.46,17.19 5.64,18.36C6.81,19.54 8.71,19.54 9.88,18.36L13.41,14.83C14.59,13.66 14.59,11.76 13.41,10.59C13,10.2 13,9.56 13.41,9.17Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"LinkVariantIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"provider-list\">\n\t\t<NcSelect ref=\"provider-select\"\n\t\t\tv-model=\"selectedProvider\"\n\t\t\tclass=\"provider-list--select\"\n\t\t\tinput-id=\"provider-select-input\"\n\t\t\tlabel=\"title\"\n\t\t\t:placeholder=\"multiselectPlaceholder\"\n\t\t\t:options=\"options\"\n\t\t\t:append-to-body=\"false\"\n\t\t\t:clear-search-on-select=\"true\"\n\t\t\t:clear-search-on-blur=\"() => false\"\n\t\t\t:filterable=\"false\"\n\t\t\t@search=\"onSearch\"\n\t\t\t@update:model-value=\"onProviderSelected\">\n\t\t\t<template #option=\"option\">\n\t\t\t\t<div v-if=\"option.isLink\" class=\"provider\">\n\t\t\t\t\t<LinkVariantIcon class=\"link-icon\" :size=\"20\" />\n\t\t\t\t\t<span>{{ option.title }}</span>\n\t\t\t\t</div>\n\t\t\t\t<div v-else class=\"provider\">\n\t\t\t\t\t<img class=\"provider-icon\"\n\t\t\t\t\t\t:src=\"option.icon_url\"\n\t\t\t\t\t\t:alt=\"providerIconAlt\">\n\t\t\t\t\t<NcHighlight class=\"option-text\"\n\t\t\t\t\t\t:search=\"query\"\n\t\t\t\t\t\t:text=\"option.title\" />\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</NcSelect>\n\t\t<NcEmptyContent class=\"provider-list--empty-content\">\n\t\t\t<template #icon>\n\t\t\t\t<LinkVariantIcon />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\t</div>\n</template>\n\n<script>\nimport { searchProvider } from './../../../functions/reference/providerHelper.js'\nimport { isUrl } from './utils.js'\nimport NcEmptyContent from '../../NcEmptyContent/index.js'\nimport NcHighlight from '../../NcHighlight/index.js'\nimport NcSelect from '../../NcSelect/index.js'\nimport { t } from '../../../l10n.js'\n\nimport LinkVariantIcon from 'vue-material-design-icons/LinkVariant.vue'\n\nexport default {\n\tname: 'NcProviderList',\n\tcomponents: {\n\t\tNcSelect,\n\t\tNcHighlight,\n\t\tNcEmptyContent,\n\t\tLinkVariantIcon,\n\t},\n\temits: [\n\t\t'select-provider',\n\t\t'submit',\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tselectedProvider: null,\n\t\t\tquery: '',\n\t\t\tmultiselectPlaceholder: t('Select provider'),\n\t\t\tproviderIconAlt: t('Provider icon'),\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\tconst result = []\n\t\t\tif (this.query !== '' && isUrl(this.query)) {\n\t\t\t\tresult.push({\n\t\t\t\t\tid: this.query,\n\t\t\t\t\ttitle: this.query,\n\t\t\t\t\tisLink: true,\n\t\t\t\t})\n\t\t\t}\n\t\t\tresult.push(...searchProvider(this.query))\n\t\t\treturn result\n\t\t},\n\t},\n\tmethods: {\n\t\tfocus() {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.$refs['provider-select']?.$el?.querySelector('#provider-select-input')?.focus()\n\t\t\t}, 300)\n\t\t},\n\t\tonProviderSelected(p) {\n\t\t\tif (p !== null) {\n\t\t\t\tif (p.isLink) {\n\t\t\t\t\tthis.$emit('submit', p.title)\n\t\t\t\t} else {\n\t\t\t\t\tthis.$emit('select-provider', p)\n\t\t\t\t}\n\t\t\t\tthis.selectedProvider = null\n\t\t\t}\n\t\t},\n\t\tonSearch(query) {\n\t\t\tthis.query = query\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.provider-list {\n\twidth: 100%;\n\tmin-height: 400px;\n\tpadding: 0 16px 16px 16px;\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t&--select {\n\t\twidth: 100%;\n\n\t\t.provider {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\theight: 28px;\n\t\t\toverflow: hidden;\n\n\t\t\t.link-icon {\n\t\t\t\tmargin-inline-end: 8px;\n\t\t\t}\n\n\t\t\t.provider-icon {\n\t\t\t\twidth: 20px;\n\t\t\t\theight: 20px;\n\t\t\t\tobject-fit: contain;\n\t\t\t\tmargin-inline-end: 8px;\n\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t}\n\n\t\t\t.option-text {\n\t\t\t\toverflow: hidden;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t}\n\n\t\t}\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div ref=\"widgetRoot\" :class=\"{'toggle-interactive': hasInteractiveView && !isInteractive }\">\n\t\t<div v-if=\"reference && hasCustomWidget\"\n\t\t\tref=\"customWidget\"\n\t\t\tclass=\"widget-custom\"\n\t\t\t:class=\"{ 'full-width': hasFullWidth }\" />\n\n\t\t<component :is=\"referenceWidgetLinkComponent\"\n\t\t\tv-else-if=\"!noAccess && reference && reference.openGraphObject && !hasCustomWidget\"\n\t\t\tv-bind=\"referenceWidgetLinkProps\"\n\t\t\trel=\"noopener noreferrer\"\n\t\t\tclass=\"widget-default\">\n\t\t\t<img v-if=\"reference.openGraphObject.thumb\" class=\"widget-default--image\" :src=\"reference.openGraphObject.thumb\">\n\t\t\t<div class=\"widget-default--details\">\n\t\t\t\t<p class=\"widget-default--name\">\n\t\t\t\t\t{{ reference.openGraphObject.name }}\n\t\t\t\t</p>\n\t\t\t\t<p class=\"widget-default--description\" :style=\"descriptionStyle\">\n\t\t\t\t\t{{ reference.openGraphObject.description }}\n\t\t\t\t</p>\n\t\t\t\t<p class=\"widget-default--link\">\n\t\t\t\t\t{{ compactLink }}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</component>\n\t\t<NcButton v-if=\"interactiveOptIn && hasInteractiveView && !isInteractive\" class=\"toggle-interactive--button\" @click=\"enableInteractive\">\n\t\t\t{{ t('Enable interactive view') }}\n\t\t</NcButton>\n\t</div>\n</template>\n<script>\nimport { useElementSize, useIntersectionObserver } from '@vueuse/core'\nimport { nextTick, ref } from 'vue'\nimport { RouterLink } from 'vue-router'\n\nimport { t } from '../../l10n.js'\nimport { getRoute } from './autolink.ts'\nimport { renderWidget, isWidgetRegistered, destroyWidget, hasInteractiveView, hasFullWidth } from './../../functions/reference/widgets.ts'\n\nimport NcButton from '../../components/NcButton/NcButton.vue'\n\nconst IDLE_TIMEOUT = 3 * 60 * 1000 // 3 minutes outside of viewport before widget is removed from the DOM\n\nexport default {\n\tname: 'NcReferenceWidget',\n\tcomponents: {\n\t\tNcButton,\n\t},\n\tprops: {\n\t\treference: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tinteractive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tinteractiveOptIn: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst isVisible = ref(false)\n\t\t// This is the widget root node\n\t\tconst widgetRoot = ref()\n\t\tconst { width } = useElementSize(widgetRoot)\n\n\t\tuseIntersectionObserver(widgetRoot, ([entry]) => {\n\t\t\tnextTick(() => {\n\t\t\t\tisVisible.value = entry.isIntersecting\n\t\t\t})\n\t\t})\n\n\t\treturn {\n\t\t\twidth,\n\t\t\tisVisible,\n\t\t\twidgetRoot,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tshowInteractive: false,\n\t\t\trendered: false,\n\t\t\tidleTimeout: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisInteractive() {\n\t\t\treturn (!this.interactiveOptIn && this.interactive) || this.showInteractive\n\t\t},\n\t\thasFullWidth() {\n\t\t\treturn hasFullWidth(this.reference.richObjectType)\n\t\t},\n\t\thasCustomWidget() {\n\t\t\treturn isWidgetRegistered(this.reference.richObjectType)\n\t\t},\n\t\thasInteractiveView() {\n\t\t\treturn isWidgetRegistered(this.reference.richObjectType) && hasInteractiveView(this.reference.richObjectType)\n\t\t},\n\t\tnoAccess() {\n\t\t\treturn this.reference && !this.reference.accessible\n\t\t},\n\t\tdescriptionStyle() {\n\t\t\tif (this.numberOfLines === 0) {\n\t\t\t\treturn {\n\t\t\t\t\tdisplay: 'none',\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst lineClamp = this.numberOfLines\n\t\t\treturn {\n\t\t\t\tlineClamp,\n\t\t\t\twebkitLineClamp: lineClamp,\n\t\t\t}\n\t\t},\n\t\tnumberOfLines() {\n\t\t\t// no description for width < 450, one line until 550 and so on\n\t\t\tconst lineCountOffsets = [450, 550, 650, Infinity]\n\t\t\treturn lineCountOffsets.findIndex(max => this.width < max)\n\t\t},\n\t\tcompactLink() {\n\t\t\tconst link = this.reference.openGraphObject.link\n\t\t\tif (!link) {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\tif (link.startsWith('https://')) {\n\t\t\t\treturn link.substring(8)\n\t\t\t}\n\t\t\tif (link.startsWith('http://')) {\n\t\t\t\treturn link.substring(7)\n\t\t\t}\n\t\t\treturn link\n\t\t},\n\t\troute() {\n\t\t\treturn getRoute(this.$router, this.reference.openGraphObject.link)\n\t\t},\n\t\treferenceWidgetLinkComponent() {\n\t\t\treturn this.route ? RouterLink : 'a'\n\t\t},\n\t\treferenceWidgetLinkProps() {\n\t\t\treturn this.route\n\t\t\t\t? { to: this.route }\n\t\t\t\t: { href: this.reference.openGraphObject.link, target: '_blank' }\n\t\t},\n\t},\n\twatch: {\n\t\tisVisible: {\n\t\t\thandler(val) {\n\t\t\t\tif (!val) {\n\t\t\t\t\tthis.idleTimeout = setTimeout(() => {\n\t\t\t\t\t\t// If the widget is still outside of viewport after timeout, destroy it\n\t\t\t\t\t\tif (!this.isVisible) {\n\t\t\t\t\t\t\tthis.destroyWidget()\n\t\t\t\t\t\t}\n\t\t\t\t\t}, IDLE_TIMEOUT)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif (this.idleTimeout) {\n\t\t\t\t\tclearTimeout(this.idleTimeout)\n\t\t\t\t\tthis.idleTimeout = null\n\t\t\t\t}\n\n\t\t\t\tif (!this.rendered) {\n\t\t\t\t\tthis.renderWidget()\n\t\t\t\t}\n\t\t\t},\n\t\t\timmediate: true,\n\t\t},\n\t},\n\tbeforeUnmount() {\n\t\tthis.destroyWidget()\n\t},\n\tmethods: {\n\t\tt,\n\n\t\tenableInteractive() {\n\t\t\tthis.showInteractive = true\n\t\t\tthis.renderWidget()\n\t\t},\n\t\trenderWidget() {\n\t\t\tif (!this.$refs.customWidget) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this?.reference?.richObjectType === 'open-graph') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.$refs.customWidget.innerHTML = ''\n\n\t\t\t// create a separate element so we can rerender on the ref again\n\t\t\tconst widget = document.createElement('div')\n\t\t\twidget.style = 'width: 100%;'\n\t\t\tthis.$refs.customWidget.appendChild(widget)\n\t\t\tthis.$nextTick(() => {\n\t\t\t\t// Waiting for the ref to become available\n\t\t\t\trenderWidget(widget, {\n\t\t\t\t\t...this.reference,\n\t\t\t\t\tinteractive: this.isInteractive,\n\t\t\t\t})\n\t\t\t\tthis.rendered = true\n\t\t\t})\n\t\t},\n\t\tdestroyWidget() {\n\t\t\tif (this.rendered) {\n\t\t\t\tdestroyWidget(this.reference.richObjectType, this.$el)\n\t\t\t\tthis.rendered = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n\n@mixin widget {\n\twidth: 100%;\n\tmargin: auto;\n\tmargin-bottom: calc(var(--default-grid-baseline, 4px) * 3);\n\tmargin-top: calc(var(--default-grid-baseline, 4px) * 3);\n\toverflow: hidden;\n\tborder: 2px solid var(--color-border);\n\tborder-radius: var(--border-radius-container);\n\tbackground-color: transparent;\n\tdisplay: flex;\n}\n\n.widget-custom {\n\t@include widget;\n\n\t&.full-width {\n\t\twidth: var(--widget-full-width, 100%) !important;\n\t\tinset-inline-start: calc( (var(--widget-full-width, 100%) - 100%) / 2 * -1);\n\t\tposition: relative;\n\t}\n}\n\n.widget-access {\n\t@include widget;\n\tpadding: calc(var(--default-grid-baseline, 4px) * 3);\n}\n\n.widget-default {\n\t@include widget;\n\n\t&--compact {\n\t\tflex-direction: column;\n\n\t\t.widget-default--image {\n\t\t\twidth: 100%;\n\t\t\theight: 150px;\n\t\t}\n\n\t\t.widget-default--details {\n\t\t\twidth: 100%;\n\t\t\tpadding-top: calc(var(--default-grid-baseline, 4px) * 2);\n\t\t\tpadding-bottom: calc(var(--default-grid-baseline, 4px) * 2);\n\t\t}\n\n\t\t.widget-default--description {\n\t\t\tdisplay: none;\n\t\t}\n\n\t}\n\n\t&--image {\n\t\twidth: 40%;\n\t\tbackground-position: center;\n\t\tbackground-size: cover;\n\t\tbackground-repeat: no-repeat;\n\t}\n\n\t&--name {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-weight: bold;\n\t}\n\n\t&--details {\n\t\tpadding: calc(var(--default-grid-baseline, 4px) * 3);\n\t\twidth: 60%;\n\n\t\tp {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\n\t&--description {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tdisplay: -webkit-box;\n\t\t-webkit-line-clamp: 3;\n\t\tline-clamp: 3; /* stylelint-disable-line property-no-unknown */\n\t\t-webkit-box-orient: vertical;\n\t}\n\n\t&--link {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n}\n\n.toggle-interactive {\n\tposition: relative;\n\t.toggle-interactive--button {\n\t\tposition: absolute;\n\t\tbottom: var(--default-grid-baseline);\n\t\tinset-inline-end: var(--default-grid-baseline);\n\t\tz-index: 10000;\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"raw-link\">\n\t\t<div class=\"input-wrapper\">\n\t\t\t<NcTextField ref=\"url-input\"\n\t\t\t\tv-model=\"inputValue\"\n\t\t\t\t:show-trailing-button=\"inputValue !== ''\"\n\t\t\t\t:label=\"inputPlaceholder\"\n\t\t\t\t@trailing-button-click=\"onClear\"\n\t\t\t\t@update:model-value=\"onInput\"\n\t\t\t\t@keyup.enter=\"onSubmit\">\n\t\t\t\t<NcLoadingIcon v-if=\"loading\" :size=\"16\" />\n\t\t\t\t<LinkVariantIcon v-else :size=\"16\" />\n\t\t\t</NcTextField>\n\t\t</div>\n\t\t<NcReferenceWidget v-if=\"reference !== null\"\n\t\t\tclass=\"reference-widget\"\n\t\t\t:reference=\"reference\" />\n\t\t<NcEmptyContent v-else\n\t\t\tclass=\"raw-link--empty-content\">\n\t\t\t<template #icon>\n\t\t\t\t<img v-if=\"provider.icon_url\"\n\t\t\t\t\tclass=\"provider-icon\"\n\t\t\t\t\t:src=\"provider.icon_url\">\n\t\t\t\t<LinkVariantIcon v-else />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\t</div>\n</template>\n\n<script>\nimport NcReferenceWidget from '../NcReferenceWidget.vue'\nimport { isUrl, delay } from './utils.js'\nimport NcEmptyContent from '../../NcEmptyContent/index.js'\nimport NcLoadingIcon from '../../NcLoadingIcon/index.js'\nimport NcTextField from '../../NcTextField/index.js'\nimport { t } from '../../../l10n.js'\n\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nimport LinkVariantIcon from 'vue-material-design-icons/LinkVariant.vue'\n\nexport default {\n\tname: 'NcRawLinkInput',\n\tcomponents: {\n\t\tLinkVariantIcon,\n\t\tNcEmptyContent,\n\t\tNcLoadingIcon,\n\t\tNcReferenceWidget,\n\t\tNcTextField,\n\t},\n\tprops: {\n\t\t/**\n\t\t * The reference provider\n\t\t */\n\t\tprovider: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\temits: [\n\t\t'submit',\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tinputValue: '',\n\t\t\tloading: false,\n\t\t\treference: null,\n\t\t\tabortController: null,\n\t\t\tinputPlaceholder: t('Enter link'),\n\t\t}\n\t},\n\tcomputed: {\n\t\tisLinkValid() {\n\t\t\treturn isUrl(this.inputValue)\n\t\t},\n\t},\n\tmethods: {\n\t\tfocus() {\n\t\t\tthis.$refs['url-input'].$el.getElementsByTagName('input')[0]?.focus()\n\t\t},\n\t\tonSubmit(e) {\n\t\t\tconst value = e.target.value\n\t\t\tif (this.isLinkValid) {\n\t\t\t\tthis.$emit('submit', value)\n\t\t\t}\n\t\t},\n\t\tonClear() {\n\t\t\tthis.inputValue = ''\n\t\t\tthis.reference = null\n\t\t},\n\t\tonInput() {\n\t\t\tthis.reference = null\n\t\t\tif (this.abortController) {\n\t\t\t\tthis.abortController.abort()\n\t\t\t}\n\t\t\tif (this.isLinkValid) {\n\t\t\t\tdelay(() => {\n\t\t\t\t\tthis.updateReference()\n\t\t\t\t}, 500)()\n\t\t\t}\n\t\t},\n\t\tupdateReference() {\n\t\t\tthis.loading = true\n\t\t\tthis.abortController = new AbortController()\n\t\t\taxios.get(generateOcsUrl('references/resolve', 2) + '?reference=' + encodeURIComponent(this.inputValue), {\n\t\t\t\tsignal: this.abortController.signal,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tthis.reference = response.data.ocs.data.references[this.inputValue]\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error)\n\t\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading = false\n\t\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.raw-link {\n\twidth: 100%;\n\tmin-height: 350px;\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow-y: auto;\n\tpadding: 0 16px 16px 16px;\n\n\t.input-wrapper {\n\t\twidth: 100%;\n\t}\n\n\t.reference-widget {\n\t\tdisplay: flex;\n\t}\n\n\t&--empty-content .provider-icon {\n\t\twidth: 150px;\n\t\theight: 150px;\n\t\tobject-fit: contain;\n\t\tfilter: var(--background-invert-if-dark);\n\t}\n\n\t&--input {\n\t\twidth: 99%;\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"result\">\n\t\t<div v-if=\"entry.icon\"\n\t\t\t:class=\"{ [entry.icon]: true, rounded: entry.rounded }\"\n\t\t\tclass=\"result--icon-class\" />\n\t\t<img v-else\n\t\t\tclass=\"result--image\"\n\t\t\t:class=\"{ rounded: entry.rounded }\"\n\t\t\t:src=\"entry.thumbnailUrl\">\n\t\t<div class=\"result--content\">\n\t\t\t<span class=\"result--content--name\">\n\t\t\t\t<NcHighlight :search=\"query\" :text=\"entry.title\" />\n\t\t\t</span>\n\t\t\t<span class=\"result--content--subline\">\n\t\t\t\t<NcHighlight :search=\"query\" :text=\"entry.subline\" />\n\t\t\t</span>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport NcHighlight from '../../NcHighlight/index.js'\n\nexport default {\n\tname: 'NcSearchResult',\n\tcomponents: {\n\t\tNcHighlight,\n\t},\n\tprops: {\n\t\t/**\n\t\t * Unified search result entry\n\t\t */\n\t\tentry: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\t/**\n\t\t * The query that led to getting this result\n\t\t * Used to highlight the entry text\n\t\t */\n\t\tquery: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.result {\n\tdisplay: flex;\n\talign-items: center;\n\theight: var(--default-clickable-area);\n\toverflow: hidden;\n\n\t&--icon-class,\n\t&--image {\n\t\twidth: 40px;\n\t\tmin-width: 40px;\n\t\theight: 40px;\n\t\tobject-fit: contain;\n\n\t\t&.rounded {\n\t\t\tborder-radius: 50%;\n\t\t}\n\t}\n\n\t&--content {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tpadding-inline-start: 10px;\n\t\toverflow: hidden;\n\n\t\t&--name,\n\t\t&--subline {\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\twhite-space: nowrap;\n\t\t}\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"smart-picker-search\" :class=\"{ 'with-empty-content': showEmptyContent }\">\n\t\t<NcSelect ref=\"search-select\"\n\t\t\tv-model=\"selectedResult\"\n\t\t\tclass=\"smart-picker-search--select\"\n\t\t\tinput-id=\"search-select-input\"\n\t\t\tlabel=\"name\"\n\t\t\t:placeholder=\"mySearchPlaceholder\"\n\t\t\t:options=\"options\"\n\t\t\t:append-to-body=\"false\"\n\t\t\t:close-on-select=\"false\"\n\t\t\t:clear-search-on-select=\"false\"\n\t\t\t:clear-search-on-blur=\"() => false\"\n\t\t\t:reset-focus-on-options-change=\"false\"\n\t\t\t:filterable=\"false\"\n\t\t\t:autoscroll=\"true\"\n\t\t\t:reset-on-options-change=\"false\"\n\t\t\t:loading=\"searching\"\n\t\t\t@search=\"onSearchInput\"\n\t\t\t@update:model-value=\"onSelectResultSelected\">\n\t\t\t<template #option=\"option\">\n\t\t\t\t<div v-if=\"option.isRawLink\" class=\"custom-option\">\n\t\t\t\t\t<LinkVariantIcon class=\"option-simple-icon\" :size=\"20\" />\n\t\t\t\t\t<span class=\"option-text\">\n\t\t\t\t\t\t{{ t('Raw link {options}', { options: option.resourceUrl }) }}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<NcSearchResult v-else-if=\"option.resourceUrl\"\n\t\t\t\t\tclass=\"search-result\"\n\t\t\t\t\t:entry=\"option\"\n\t\t\t\t\t:query=\"searchQuery\" />\n\t\t\t\t<span v-else-if=\"option.isCustomGroupTitle\" class=\"custom-option group-name\">\n\t\t\t\t\t<img v-if=\"provider.icon_url\"\n\t\t\t\t\t\tclass=\"provider-icon group-name-icon\"\n\t\t\t\t\t\t:src=\"provider.icon_url\">\n\t\t\t\t\t<span class=\"option-text\">\n\t\t\t\t\t\t<strong>{{ option.name }}</strong>\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t\t<span v-else-if=\"option.isMore\" :class=\"{ 'custom-option': true }\">\n\t\t\t\t\t<span v-if=\"option.isLoading\" class=\"option-simple-icon icon-loading-small\" />\n\t\t\t\t\t<DotsHorizontalIcon v-else class=\"option-simple-icon\" :size=\"20\" />\n\t\t\t\t\t<span class=\"option-text\">\n\t\t\t\t\t\t{{ t('Load more \"{options}\"', { options: option.name }) }}\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t</template>\n\t\t\t<template #no-options>\n\t\t\t\t{{ noOptionsText }}\n\t\t\t</template>\n\t\t</NcSelect>\n\t\t<NcEmptyContent v-if=\"showEmptyContent\"\n\t\t\tclass=\"smart-picker-search--empty-content\">\n\t\t\t<template #icon>\n\t\t\t\t<img v-if=\"provider.icon_url\"\n\t\t\t\t\tclass=\"provider-icon\"\n\t\t\t\t\t:alt=\"providerIconAlt\"\n\t\t\t\t\t:src=\"provider.icon_url\">\n\t\t\t\t<LinkVariantIcon v-else />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\t</div>\n</template>\n\n<script>\nimport NcSearchResult from './NcSearchResult.vue'\nimport { isUrl, delay } from './utils.js'\nimport NcEmptyContent from '../../NcEmptyContent/index.js'\nimport NcSelect from '../../NcSelect/index.js'\n\nimport { t } from '../../../l10n.js'\n\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nimport DotsHorizontalIcon from 'vue-material-design-icons/DotsHorizontal.vue'\nimport LinkVariantIcon from 'vue-material-design-icons/LinkVariant.vue'\n\nconst LIMIT = 5\n\nexport default {\n\tname: 'NcSearch',\n\tcomponents: {\n\t\tLinkVariantIcon,\n\t\tDotsHorizontalIcon,\n\t\tNcEmptyContent,\n\t\tNcSelect,\n\t\tNcSearchResult,\n\t},\n\tprops: {\n\t\t/**\n\t\t * The selected reference provider\n\t\t */\n\t\tprovider: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tshowEmptyContent: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tsearchPlaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\temits: [\n\t\t'submit',\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tsearchQuery: '',\n\t\t\tselectedResult: null,\n\t\t\tresultsBySearchProvider: {},\n\t\t\tsearching: false,\n\t\t\tsearchingMoreOf: null,\n\t\t\tabortController: null,\n\t\t\tnoOptionsText: t('Start typing to search'),\n\t\t\tproviderIconAlt: t('Provider icon'),\n\t\t}\n\t},\n\tcomputed: {\n\t\tmySearchPlaceholder() {\n\t\t\treturn this.searchPlaceholder || t('Search')\n\t\t},\n\t\tsearchProviderIds() {\n\t\t\treturn this.provider.search_providers_ids\n\t\t},\n\t\toptions() {\n\t\t\tif (this.searchQuery === '') {\n\t\t\t\treturn []\n\t\t\t}\n\n\t\t\tconst options = []\n\t\t\tif (isUrl(this.searchQuery)) {\n\t\t\t\toptions.push(this.rawLinkEntry)\n\t\t\t}\n\t\t\toptions.push(...this.formattedSearchResults)\n\t\t\treturn options\n\t\t},\n\t\trawLinkEntry() {\n\t\t\treturn {\n\t\t\t\tid: 'rawLinkEntry',\n\t\t\t\tresourceUrl: this.searchQuery,\n\t\t\t\tisRawLink: true,\n\t\t\t}\n\t\t},\n\t\tformattedSearchResults() {\n\t\t\tconst results = []\n\t\t\tthis.searchProviderIds.forEach(pid => {\n\t\t\t\tif (this.resultsBySearchProvider[pid].entries.length > 0) {\n\t\t\t\t\t// don't show group name entry if there is only one search provider and one result\n\t\t\t\t\tif (this.searchProviderIds.length > 1 || this.resultsBySearchProvider[pid].entries.length > 1) {\n\t\t\t\t\t\tresults.push({\n\t\t\t\t\t\t\tid: 'groupTitle-' + pid,\n\t\t\t\t\t\t\tname: this.resultsBySearchProvider[pid].name,\n\t\t\t\t\t\t\tisCustomGroupTitle: true,\n\t\t\t\t\t\t\tproviderId: pid,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tconst providerEntriesWithId = this.resultsBySearchProvider[pid].entries.map((entry, index) => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid: 'provider-' + pid + '-entry-' + index,\n\t\t\t\t\t\t\t...entry,\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\tresults.push(...providerEntriesWithId)\n\t\t\t\t\tif (this.resultsBySearchProvider[pid].isPaginated) {\n\t\t\t\t\t\tresults.push({\n\t\t\t\t\t\t\tid: 'moreOf-' + pid,\n\t\t\t\t\t\t\tname: this.resultsBySearchProvider[pid].name,\n\t\t\t\t\t\t\tisMore: true,\n\t\t\t\t\t\t\tproviderId: pid,\n\t\t\t\t\t\t\tisLoading: this.searchingMoreOf === pid,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn results\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.resetResults()\n\t},\n\tbeforeUnmount() {\n\t\tthis.cancelSearchRequests()\n\t},\n\tmethods: {\n\t\tt,\n\t\tresetResults() {\n\t\t\tconst resultsBySearchProvider = {}\n\t\t\tthis.searchProviderIds.forEach(pid => {\n\t\t\t\tresultsBySearchProvider[pid] = {\n\t\t\t\t\tentries: [],\n\t\t\t\t}\n\t\t\t})\n\t\t\tthis.resultsBySearchProvider = resultsBySearchProvider\n\t\t},\n\t\tfocus() {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.$refs['search-select']?.$el?.querySelector('#search-select-input')?.focus()\n\t\t\t}, 300)\n\t\t},\n\t\tcancelSearchRequests() {\n\t\t\tif (this.abortController) {\n\t\t\t\tthis.abortController.abort()\n\t\t\t}\n\t\t},\n\t\tonSearchInput(query) {\n\t\t\tthis.searchQuery = query\n\t\t\tdelay(() => {\n\t\t\t\tthis.updateSearch()\n\t\t\t}, 500)()\n\t\t},\n\t\tonSelectResultSelected(item) {\n\t\t\tif (item !== null) {\n\t\t\t\tif (item.resourceUrl) {\n\t\t\t\t\tthis.cancelSearchRequests()\n\t\t\t\t\tthis.$emit('submit', item.resourceUrl)\n\t\t\t\t} else if (item.isMore) {\n\t\t\t\t\tthis.searchMoreOf(item.providerId).then(() => {\n\t\t\t\t\t\t// allow clicking twice on the same \"more\" item\n\t\t\t\t\t\tthis.selectedResult = null\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsearchMoreOf(searchProviderId) {\n\t\t\tthis.searchingMoreOf = searchProviderId\n\t\t\tthis.cancelSearchRequests()\n\t\t\treturn this.searchProviders(searchProviderId)\n\t\t},\n\t\tupdateSearch() {\n\t\t\tthis.cancelSearchRequests()\n\t\t\tthis.resetResults()\n\t\t\tif (this.searchQuery === '') {\n\t\t\t\tthis.searching = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\treturn this.searchProviders()\n\t\t},\n\t\tsearchProviders(searchProviderId = null) {\n\t\t\tthis.abortController = new AbortController()\n\t\t\tthis.searching = true\n\n\t\t\tconst searchPromises = searchProviderId === null\n\t\t\t\t? [...this.searchProviderIds].map(pid => {\n\t\t\t\t\treturn this.searchOneProvider(pid)\n\t\t\t\t})\n\t\t\t\t: [this.searchOneProvider(searchProviderId, this.resultsBySearchProvider[searchProviderId]?.cursor ?? null)]\n\t\t\t// fake one to have a request error\n\t\t\t// searchPromises.push(this.searchOneProvider('nopid'))\n\n\t\t\treturn Promise.allSettled(searchPromises)\n\t\t\t\t.then((promises) => {\n\t\t\t\t\tconst isOneCanceled = !!promises.find(p => {\n\t\t\t\t\t\treturn p.status === 'rejected' && (p.reason.name === 'CanceledError' || p.reason.code === 'ERR_CANCELED')\n\t\t\t\t\t})\n\t\t\t\t\t// nothing was canceled: not searching\n\t\t\t\t\tif (!isOneCanceled) {\n\t\t\t\t\t\tthis.searching = false\n\t\t\t\t\t\tthis.searchingMoreOf = null\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\t\tsearchOneProvider(providerId, cursor = null) {\n\t\t\tconst url = cursor === null\n\t\t\t\t? generateOcsUrl('search/providers/{providerId}/search?term={term}&limit={limit}', { providerId, term: this.searchQuery, limit: LIMIT })\n\t\t\t\t: generateOcsUrl('search/providers/{providerId}/search?term={term}&limit={limit}&cursor={cursor}', { providerId, term: this.searchQuery, limit: LIMIT, cursor })\n\t\t\treturn axios.get(url, {\n\t\t\t\tsignal: this.abortController.signal,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst data = response.data.ocs.data\n\t\t\t\t\tthis.resultsBySearchProvider[providerId].name = data.name\n\t\t\t\t\tthis.resultsBySearchProvider[providerId].cursor = data.cursor\n\t\t\t\t\tthis.resultsBySearchProvider[providerId].isPaginated = data.isPaginated\n\t\t\t\t\tthis.resultsBySearchProvider[providerId].entries.push(...data.entries)\n\t\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.smart-picker-search {\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding: 0 16px 16px 16px;\n\t&.with-empty-content {\n\t\tmin-height: 400px;\n\t}\n\n\t.provider-icon {\n\t\twidth: 150px;\n\t\theight: 150px;\n\t\tobject-fit: contain;\n\t\tfilter: var(--background-invert-if-dark);\n\t}\n\n\t&--select {\n\t\twidth: 100%;\n\n\t\t.search-result {\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t.group-name-icon,\n\t\t.option-simple-icon {\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t\tmargin: 0 20px 0 10px;\n\t\t}\n\n\t\t.custom-option {\n\t\t\theight: var(--default-clickable-area);\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\toverflow: hidden;\n\t\t}\n\n\t\t.option-text {\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\twhite-space: nowrap;\n\t\t}\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"reference-picker\"\n\t\t:style=\"pickerWrapperStyle\"\n\t\ttabindex=\"-1\"\n\t\t@keydown.stop.prevent.esc=\"onEscapePressed\">\n\t\t<NcProviderList v-if=\"mode === MODES.providerList\"\n\t\t\tref=\"provider-list\"\n\t\t\t@select-provider=\"onProviderSelected\"\n\t\t\t@submit=\"submitLink\"\n\t\t\t@cancel=\"cancelProviderSelection\" />\n\t\t<NcRawLinkInput v-else-if=\"mode === MODES.standardLinkInput\"\n\t\t\tref=\"url-input\"\n\t\t\t:provider=\"selectedProvider\"\n\t\t\t@submit=\"submitLink\"\n\t\t\t@cancel=\"cancelRawLinkInput\" />\n\t\t<NcSearch v-else-if=\"mode === MODES.searchInput\"\n\t\t\tref=\"url-input\"\n\t\t\t:provider=\"selectedProvider\"\n\t\t\t@cancel=\"cancelSearch\"\n\t\t\t@submit=\"submitLink\" />\n\t\t<div v-else-if=\"mode === MODES.customElement\"\n\t\t\tclass=\"custom-element-wrapper\">\n\t\t\t<NcCustomPickerElement :provider=\"selectedProvider\"\n\t\t\t\tclass=\"custom-element\"\n\t\t\t\t@submit=\"submitLink\"\n\t\t\t\t@cancel=\"cancelCustomElement\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport NcCustomPickerElement from './NcCustomPickerElement.vue'\nimport NcProviderList from './NcProviderList.vue'\nimport NcRawLinkInput from './NcRawLinkInput.vue'\nimport NcSearch from './NcSearch.vue'\nimport { isCustomPickerElementRegistered } from './../../../functions/reference/customPickerElements.js'\nimport { touchProvider } from './../../../functions/reference/providerHelper.js'\n\nconst MODES = {\n\tproviderList: 1,\n\tstandardLinkInput: 2,\n\tsearchInput: 3,\n\tcustomElement: 4,\n}\nexport default {\n\tname: 'NcReferencePicker',\n\tcomponents: {\n\t\tNcCustomPickerElement,\n\t\tNcProviderList,\n\t\tNcRawLinkInput,\n\t\tNcSearch,\n\t},\n\tprops: {\n\t\t/**\n\t\t * Provider to select on creation\n\t\t * Default: null. Show the provider list\n\t\t */\n\t\tinitialProvider: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => null,\n\t\t},\n\t\t/**\n\t\t * Optional width in pixels\n\t\t * Default: 100%\n\t\t */\n\t\twidth: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t\t/**\n\t\t * Focus on the provider list select input on creation\n\t\t * Default: true\n\t\t */\n\t\tfocusOnCreate: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\temits: [\n\t\t'cancel',\n\t\t'cancel-raw-link',\n\t\t'cancel-search',\n\t\t'provider-selected',\n\t\t'submit',\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tMODES,\n\t\t\tselectedProvider: this.initialProvider,\n\t\t}\n\t},\n\tcomputed: {\n\t\tmode() {\n\t\t\treturn this.selectedProvider === null\n\t\t\t\t? MODES.providerList\n\t\t\t\t: isCustomPickerElementRegistered(this.selectedProvider.id)\n\t\t\t\t\t? MODES.customElement\n\t\t\t\t\t: this.selectedProvider.search_providers_ids\n\t\t\t\t\t\t? MODES.searchInput\n\t\t\t\t\t\t: MODES.standardLinkInput\n\t\t},\n\t\tpickerWrapperStyle() {\n\t\t\treturn {\n\t\t\t\twidth: this.width ? this.width + 'px' : undefined,\n\t\t\t}\n\t\t},\n\t},\n\tmounted() {\n\t\tif (this.focusOnCreate) {\n\t\t\tif (this.initialProvider) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.$refs['url-input']?.focus()\n\t\t\t\t}, 300)\n\t\t\t} else {\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.$refs['provider-list']?.focus()\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t},\n\tmethods: {\n\t\tonEscapePressed() {\n\t\t\tif (this.selectedProvider !== null) {\n\t\t\t\tthis.deselectProvider()\n\t\t\t} else {\n\t\t\t\tthis.cancelProviderSelection()\n\t\t\t}\n\t\t},\n\t\tonProviderSelected(provider) {\n\t\t\tthis.selectedProvider = provider\n\t\t\tthis.$emit('provider-selected', provider)\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs['url-input']?.focus()\n\t\t\t})\n\t\t},\n\t\tcancelCustomElement() {\n\t\t\tthis.deselectProvider()\n\t\t},\n\t\tcancelSearch() {\n\t\t\tthis.$emit('cancel-search', this.selectedProvider?.title)\n\t\t\tthis.deselectProvider()\n\t\t},\n\t\tcancelRawLinkInput() {\n\t\t\tthis.$emit('cancel-raw-link', this.selectedProvider?.title)\n\t\t\tthis.deselectProvider()\n\t\t},\n\t\tcancelProviderSelection() {\n\t\t\tthis.$emit('cancel')\n\t\t},\n\t\tsubmitLink(link) {\n\t\t\tif (this.selectedProvider !== null) {\n\t\t\t\ttouchProvider(this.selectedProvider.id)\n\t\t\t}\n\t\t\tthis.$emit('submit', link)\n\t\t\tthis.deselectProvider()\n\t\t},\n\t\tdeselectProvider() {\n\t\t\tthis.selectedProvider = null\n\t\t\tthis.$emit('provider-selected', null)\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.$refs['provider-list']?.focus()\n\t\t\t}, 300)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.reference-picker {\n\tdisplay: flex;\n\toverflow-y: auto;\n\twidth: 100%;\n\n\t.custom-element-wrapper {\n\t\tdisplay: flex;\n\t\toverflow-y: auto;\n\t\twidth: 100%;\n\t\t.custom-element {\n\t\t\tdisplay: flex;\n\t\t\toverflow-y: auto;\n\t\t\twidth: 100%;\n\t\t}\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<NcModal v-if=\"show\"\n\t\t:size=\"modalSize\"\n\t\tclass=\"reference-picker-modal\"\n\t\t@close=\"onCancel\">\n\t\t<div ref=\"modal_content\"\n\t\t\tclass=\"reference-picker-modal--content\">\n\t\t\t<NcButton v-if=\"showBackButton\"\n\t\t\t\t:aria-label=\"backButtonTitle\"\n\t\t\t\t:title=\"backButtonTitle\"\n\t\t\t\tclass=\"back-button\"\n\t\t\t\t@click=\"onBackClicked\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<ArrowLeftIcon />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton class=\"close-button\"\n\t\t\t\t:aria-label=\"closeButtonLabel\"\n\t\t\t\t:title=\"closeButtonTitle\"\n\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t@click=\"onCancel\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<CloseIcon />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<h2 v-if=\"showModalName\">\n\t\t\t\t{{ modalName }}\n\t\t\t</h2>\n\t\t\t<NcReferencePicker ref=\"referencePicker\"\n\t\t\t\t:initial-provider=\"initialProvider\"\n\t\t\t\t:focus-on-create=\"focusOnCreate\"\n\t\t\t\t@provider-selected=\"onProviderSelect\"\n\t\t\t\t@submit=\"onSubmit\"\n\t\t\t\t@cancel=\"onCancel\" />\n\t\t</div>\n\t</NcModal>\n</template>\n\n<script>\nimport NcReferencePicker from './NcReferencePicker.vue'\nimport { getCustomPickerElementSize, isCustomPickerElementRegistered } from './../../../functions/reference/customPickerElements.js'\nimport NcButton from '../../NcButton/index.ts'\nimport NcModal from '../../NcModal/index.js'\nimport { t } from '../../../l10n.js'\n\nimport { emit } from '@nextcloud/event-bus'\n\nimport ArrowLeftIcon from 'vue-material-design-icons/ArrowLeft.vue'\nimport CloseIcon from 'vue-material-design-icons/Close.vue'\n\nexport default {\n\tname: 'NcReferencePickerModal',\n\tcomponents: {\n\t\tNcReferencePicker,\n\t\tNcModal,\n\t\tNcButton,\n\t\tArrowLeftIcon,\n\t\tCloseIcon,\n\t},\n\tprops: {\n\t\t/**\n\t\t * Provider to select on creation\n\t\t * Show the provider list if no initial one is provided\n\t\t */\n\t\tinitialProvider: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => null,\n\t\t},\n\t\t/**\n\t\t * Focus on the input item on create\n\t\t */\n\t\tfocusOnCreate: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\t/**\n\t\t * If true, add the modal content to the Viewer trap elements via the event-bus\n\t\t */\n\t\tisInsideViewer: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\temits: [\n\t\t'cancel',\n\t\t'submit',\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tshow: true,\n\t\t\tselectedProvider: this.initialProvider,\n\t\t\tbackButtonTitle: t('Back to provider selection'),\n\t\t\tcloseButtonTitle: t('Close'),\n\t\t\tcloseButtonLabel: t('Close Smart Picker'),\n\t\t}\n\t},\n\tcomputed: {\n\t\tisProviderSelected() {\n\t\t\treturn this.selectedProvider !== null\n\t\t},\n\t\tshowBackButton() {\n\t\t\treturn this.initialProvider === null && this.isProviderSelected\n\t\t},\n\t\tmodalSize() {\n\t\t\treturn this.isProviderSelected && isCustomPickerElementRegistered(this.selectedProvider.id)\n\t\t\t\t? (getCustomPickerElementSize(this.selectedProvider.id) ?? 'large')\n\t\t\t\t: 'normal'\n\t\t},\n\t\tshowModalName() {\n\t\t\treturn !this.isProviderSelected || !isCustomPickerElementRegistered(this.selectedProvider.id)\n\t\t},\n\t\tmodalName() {\n\t\t\treturn this.isProviderSelected\n\t\t\t\t? this.selectedProvider.title\n\t\t\t\t: t('Smart Picker')\n\t\t},\n\t},\n\tmounted() {\n\t\tif (this.isInsideViewer) {\n\t\t\tconst elem = this.$refs.modal_content\n\t\t\temit('viewer:trapElements:changed', elem)\n\t\t}\n\t},\n\tmethods: {\n\t\tonCancel() {\n\t\t\tthis.show = false\n\t\t\tthis.$emit('cancel')\n\t\t},\n\t\tonSubmit(value) {\n\t\t\tthis.show = false\n\t\t\tthis.$emit('submit', value)\n\t\t},\n\t\tonProviderSelect(provider) {\n\t\t\tthis.selectedProvider = provider\n\t\t\t// provider was deselected and we started with an inital one: just close the modal\n\t\t\tif (provider === null && this.initialProvider !== null) {\n\t\t\t\tthis.onCancel()\n\t\t\t}\n\t\t},\n\t\tonBackClicked() {\n\t\t\tthis.$refs.referencePicker.deselectProvider()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\n// this is to avoid scroll on the container and leave it to the result block\n.reference-picker-modal .modal-container {\n\tdisplay: flex !important;\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.reference-picker-modal--content {\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tjustify-content: center;\n\toverflow-y: auto;\n\n\t.close-button,\n\t.back-button {\n\t\tposition: absolute;\n\t\ttop: 4px;\n\t}\n\t.back-button {\n\t\tinset-inline-start: 4px;\n\t}\n\t.close-button {\n\t\tinset-inline-end: 4px;\n\t}\n\n\t> h2 {\n\t\tdisplay: flex;\n\t\tmargin: 12px 0 20px 0;\n\t\t.icon {\n\t\t\tmargin-inline-end: 8px;\n\t\t}\n\t}\n}\n</style>\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport NcReferencePickerModal from './../../components/NcRichText/NcReferencePicker/NcReferencePickerModal.vue'\nimport { getProvider } from './providerHelper.js'\n\nimport { createApp } from 'vue'\n\n/**\n * Creates a reference picker modal and return a promise which provides the result\n *\n * @param {string} providerId Optional ID of initial selected provider\n * @param {boolean} isInsideViewer Should be true if this function is called while the Viewer is displayed\n * @return {Promise<unknown>}\n */\nexport async function getLinkWithPicker(providerId = null, isInsideViewer = undefined) {\n\treturn await new Promise((resolve, reject) => {\n\t\tconst modalId = 'referencePickerModal'\n\t\tconst modalElement = document.createElement('div')\n\t\tmodalElement.id = modalId\n\t\tdocument.body.append(modalElement)\n\n\t\tconst initialProvider = providerId === null\n\t\t\t? null\n\t\t\t: (getProvider(providerId) ?? null)\n\n\t\tconst view = createApp(NcReferencePickerModal, {\n\t\t\tinitialProvider,\n\t\t\tisInsideViewer,\n\t\t\tonCancel() {\n\t\t\t\tview.unmount()\n\t\t\t\treject(new Error('User cancellation'))\n\t\t\t},\n\t\t\tonSubmit(link) {\n\t\t\t\tview.unmount()\n\t\t\t\tresolve(link)\n\t\t\t},\n\t\t})\n\t\tview.mount(modalElement)\n\t})\n}\n"],"names":["_sfc_main","_hoisted_1","_openBlock","_createElementBlock","_hoisted_2","_hoisted_3","_mergeProps","_createElementVNode","_hoisted_4","_createCommentVNode","NcHighlight","_createVNode","_withCtx","_toDisplayString","_normalizeClass","_createBlock","_resolveDynamicComponent","_normalizeStyle","_createTextVNode","_withKeys","_hoisted_5","DotsHorizontalIcon","_withModifiers","ArrowLeftIcon","CloseIcon"],"mappings":"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","x_google_ignoreList":[3]}
1
+ {"version":3,"file":"referencePickerModal-Dw1szWUR.mjs","sources":["../../src/components/NcRichText/NcReferencePicker/NcCustomPickerElement.vue","../../src/functions/reference/providerHelper.js","../../src/components/NcRichText/NcReferencePicker/utils.js","../../node_modules/vue-material-design-icons/LinkVariant.vue","../../src/components/NcRichText/NcReferencePicker/NcProviderList.vue","../../src/components/NcRichText/NcReferenceWidget.vue","../../src/components/NcRichText/NcReferencePicker/NcRawLinkInput.vue","../../src/components/NcRichText/NcReferencePicker/NcSearchResult.vue","../../src/components/NcRichText/NcReferencePicker/NcSearch.vue","../../src/components/NcRichText/NcReferencePicker/NcReferencePicker.vue","../../src/components/NcRichText/NcReferencePicker/NcReferencePickerModal.vue","../../src/functions/reference/referencePickerModal.js"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div ref=\"domElement\" />\n</template>\n\n<script>\nimport { renderCustomPickerElement, isCustomPickerElementRegistered, destroyCustomPickerElement } from './../../../functions/reference/customPickerElements.js'\n\nexport default {\n\tname: 'NcCustomPickerElement',\n\tprops: {\n\t\t/**\n\t\t * The reference provider\n\t\t */\n\t\tprovider: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\temits: [\n\t\t'cancel',\n\t\t'submit',\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tisRegistered: isCustomPickerElementRegistered(this.provider.id),\n\t\t\trenderResult: null,\n\t\t}\n\t},\n\tmounted() {\n\t\tif (this.isRegistered) {\n\t\t\tthis.renderElement()\n\t\t}\n\t},\n\tbeforeUnmount() {\n\t\tif (this.isRegistered) {\n\t\t\tdestroyCustomPickerElement(this.provider.id, this.$el, this.renderResult)\n\t\t}\n\t},\n\tmethods: {\n\t\trenderElement() {\n\t\t\tif (this.$refs.domElement) {\n\t\t\t\tthis.$refs.domElement.innerHTML = ''\n\t\t\t}\n\n\t\t\tconst renderFunctionResult = renderCustomPickerElement(this.$refs.domElement, { providerId: this.provider.id, accessible: false })\n\t\t\t// this works whether renderCustomPickerElement returns a promise or a value\n\t\t\tPromise.resolve(renderFunctionResult).then(result => {\n\t\t\t\tthis.renderResult = result\n\t\t\t\tif (this.renderResult.object?._isVue && this.renderResult.object?.$on) {\n\t\t\t\t\tthis.renderResult.object.$on('submit', this.onSubmit)\n\t\t\t\t\tthis.renderResult.object.$on('cancel', this.onCancel)\n\t\t\t\t}\n\t\t\t\tthis.renderResult.element.addEventListener('submit', (e) => {\n\t\t\t\t\tthis.onSubmit(e.detail)\n\t\t\t\t})\n\t\t\t\tthis.renderResult.element.addEventListener('cancel', this.onCancel)\n\t\t\t})\n\t\t},\n\t\tonSubmit(value) {\n\t\t\tthis.$emit('submit', value)\n\t\t},\n\t\tonCancel() {\n\t\t\tthis.$emit('cancel')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// nothing yet\n</style>\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { isCustomPickerElementRegistered } from './customPickerElements.js'\n\nimport { t } from '../../l10n.js'\n\nimport axios from '@nextcloud/axios'\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateOcsUrl, imagePath } from '@nextcloud/router'\n\nexport const anyLinkProviderId = 'any-link'\n\nconst anyLinkProvider = {\n\tid: anyLinkProviderId,\n\ttitle: t('Any link'),\n\ticon_url: imagePath('core', 'filetypes/link.svg'),\n}\n\n// only get the provider list once, even if functions of this file are imported multiple times by different apps/components\nif (!window._vue_richtext_reference_providers) {\n\twindow._vue_richtext_reference_providers = loadState('core', 'reference-provider-list', [])\n}\n\n// single timestamps object used by every entity in the page\nif (!window._vue_richtext_reference_provider_timestamps) {\n\twindow._vue_richtext_reference_provider_timestamps = loadState('core', 'reference-provider-timestamps', {})\n}\n\n/**\n * @param {string} providerId The provider ID\n * @return {object} The provider object\n */\nexport function getProvider(providerId) {\n\tif (providerId === anyLinkProviderId) {\n\t\treturn anyLinkProvider\n\t}\n\treturn getProviders().find(p => p.id === providerId)\n}\n\n/**\n * @return {Array} Raw provider list as it was provided by the server\n */\nexport function getProviders() {\n\treturn window._vue_richtext_reference_providers.filter(p => {\n\t\t// avoid providers with no associated search provider and no custom component registered\n\t\tconst keep = (!!p.search_providers_ids && p.search_providers_ids.length > 0) || isCustomPickerElementRegistered(p.id)\n\t\tif (!keep) {\n\t\t\tconsole.debug('[smart picker]', p.id, 'reference provider is discoverable but does not have any related search provider or custom picker component registered')\n\t\t}\n\t\treturn keep\n\t})\n}\n\n/**\n * Helper function to sort a list of providers according to 2 factors:\n * - their \"last used timestamp\"\n * - their \"order\" property (coming from the provider declaration in the server implementation)\n *\n * @param {Array} providerList list of provider objects\n * @return {Array} the sorted provider list\n */\nexport function sortProviders(providerList) {\n\tconst timestamps = window._vue_richtext_reference_provider_timestamps\n\n\treturn providerList.sort((a, b) => {\n\t\treturn a.order === b.order\n\t\t\t? 0\n\t\t\t: a.order > b.order\n\t\t\t\t? 1\n\t\t\t\t: -1\n\t}).sort((a, b) => {\n\t\tconst ta = timestamps[a.id]\n\t\tconst tb = timestamps[b.id]\n\t\treturn ta === tb\n\t\t\t? 0\n\t\t\t: tb === undefined\n\t\t\t\t? -1\n\t\t\t\t: ta === undefined\n\t\t\t\t\t? 1\n\t\t\t\t\t: ta > tb\n\t\t\t\t\t\t? -1\n\t\t\t\t\t\t: 1\n\t})\n}\n\n/**\n * Helper function to search a provider from a search query\n * Result is a sorted list of providers\n *\n * @param {string} query The search query\n * @param {number} limit (optional) max number of results\n * @return {Array} the sorted/filtered provider list\n */\nexport function searchProvider(query, limit = null) {\n\tconst providers = getProviders()\n\tconst escapedQuery = query.replace(/[/\\-\\\\^$*+?.()|[\\]{}]/g, '\\\\$&')\n\tconst regexp = new RegExp(escapedQuery, 'i')\n\tconst sortedProviders = sortProviders(providers)\n\tconst filteredSortedProviders = sortedProviders.filter(p => {\n\t\treturn p.title.match(regexp)\n\t})\n\tconst searchResult = limit\n\t\t? filteredSortedProviders.slice(0, limit)\n\t\t: filteredSortedProviders\n\t// append the 'any link' provider in the full list or when there is no result\n\tif (query === '' || searchResult.length === 0) {\n\t\tsearchResult.push(anyLinkProvider)\n\t}\n\treturn searchResult\n}\n\n/**\n * Update the \"last used timestamp\" on the server side and then locally in the frontend\n *\n * @param {number} providerId The id of the search provider\n */\nexport function touchProvider(providerId) {\n\tconst timestamp = Math.floor(Date.now() / 1000)\n\tconst params = {\n\t\ttimestamp,\n\t}\n\tconst url = generateOcsUrl('references/provider/{providerId}', { providerId })\n\taxios.put(url, params)\n\t\t.then((response) => {\n\t\t\twindow._vue_richtext_reference_provider_timestamps[providerId] = timestamp\n\t\t})\n}\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nlet mytimer = 0\n/**\n *\n * @param {Function} callback The callback to call after the delay\n * @param {number} ms The delay in milli-seconds\n */\nexport function delay(callback, ms) {\n\treturn function() {\n\t\tconst context = this\n\t\tconst args = arguments\n\t\tclearTimeout(mytimer)\n\t\tmytimer = setTimeout(function() {\n\t\t\tcallback.apply(context, args)\n\t\t}, ms || 0)\n\t}\n}\n/**\n *\n * @param {string} str The url\n */\nexport function isUrl(str) {\n\ttry {\n\t\treturn Boolean(new URL(str))\n\t} catch (error) {\n\t\treturn false\n\t}\n}\n","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon link-variant-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M10.59,13.41C11,13.8 11,14.44 10.59,14.83C10.2,15.22 9.56,15.22 9.17,14.83C7.22,12.88 7.22,9.71 9.17,7.76V7.76L12.71,4.22C14.66,2.27 17.83,2.27 19.78,4.22C21.73,6.17 21.73,9.34 19.78,11.29L18.29,12.78C18.3,11.96 18.17,11.14 17.89,10.36L18.36,9.88C19.54,8.71 19.54,6.81 18.36,5.64C17.19,4.46 15.29,4.46 14.12,5.64L10.59,9.17C9.41,10.34 9.41,12.24 10.59,13.41M13.41,9.17C13.8,8.78 14.44,8.78 14.83,9.17C16.78,11.12 16.78,14.29 14.83,16.24V16.24L11.29,19.78C9.34,21.73 6.17,21.73 4.22,19.78C2.27,17.83 2.27,14.66 4.22,12.71L5.71,11.22C5.7,12.04 5.83,12.86 6.11,13.65L5.64,14.12C4.46,15.29 4.46,17.19 5.64,18.36C6.81,19.54 8.71,19.54 9.88,18.36L13.41,14.83C14.59,13.66 14.59,11.76 13.41,10.59C13,10.2 13,9.56 13.41,9.17Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"LinkVariantIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"provider-list\">\n\t\t<NcSelect ref=\"provider-select\"\n\t\t\tv-model=\"selectedProvider\"\n\t\t\tclass=\"provider-list--select\"\n\t\t\tinput-id=\"provider-select-input\"\n\t\t\tlabel=\"title\"\n\t\t\t:placeholder=\"multiselectPlaceholder\"\n\t\t\t:options=\"options\"\n\t\t\t:append-to-body=\"false\"\n\t\t\t:clear-search-on-select=\"true\"\n\t\t\t:clear-search-on-blur=\"() => false\"\n\t\t\t:filterable=\"false\"\n\t\t\t@search=\"onSearch\"\n\t\t\t@update:model-value=\"onProviderSelected\">\n\t\t\t<template #option=\"option\">\n\t\t\t\t<div v-if=\"option.isLink\" class=\"provider\">\n\t\t\t\t\t<LinkVariantIcon class=\"link-icon\" :size=\"20\" />\n\t\t\t\t\t<span>{{ option.title }}</span>\n\t\t\t\t</div>\n\t\t\t\t<div v-else class=\"provider\">\n\t\t\t\t\t<img class=\"provider-icon\"\n\t\t\t\t\t\t:src=\"option.icon_url\"\n\t\t\t\t\t\t:alt=\"providerIconAlt\">\n\t\t\t\t\t<NcHighlight class=\"option-text\"\n\t\t\t\t\t\t:search=\"query\"\n\t\t\t\t\t\t:text=\"option.title\" />\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</NcSelect>\n\t\t<NcEmptyContent class=\"provider-list--empty-content\">\n\t\t\t<template #icon>\n\t\t\t\t<LinkVariantIcon />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\t</div>\n</template>\n\n<script>\nimport { searchProvider } from './../../../functions/reference/providerHelper.js'\nimport { isUrl } from './utils.js'\nimport NcEmptyContent from '../../NcEmptyContent/index.ts'\nimport NcHighlight from '../../NcHighlight/index.js'\nimport NcSelect from '../../NcSelect/index.js'\nimport { t } from '../../../l10n.js'\n\nimport LinkVariantIcon from 'vue-material-design-icons/LinkVariant.vue'\n\nexport default {\n\tname: 'NcProviderList',\n\tcomponents: {\n\t\tNcSelect,\n\t\tNcHighlight,\n\t\tNcEmptyContent,\n\t\tLinkVariantIcon,\n\t},\n\temits: [\n\t\t'select-provider',\n\t\t'submit',\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tselectedProvider: null,\n\t\t\tquery: '',\n\t\t\tmultiselectPlaceholder: t('Select provider'),\n\t\t\tproviderIconAlt: t('Provider icon'),\n\t\t}\n\t},\n\tcomputed: {\n\t\toptions() {\n\t\t\tconst result = []\n\t\t\tif (this.query !== '' && isUrl(this.query)) {\n\t\t\t\tresult.push({\n\t\t\t\t\tid: this.query,\n\t\t\t\t\ttitle: this.query,\n\t\t\t\t\tisLink: true,\n\t\t\t\t})\n\t\t\t}\n\t\t\tresult.push(...searchProvider(this.query))\n\t\t\treturn result\n\t\t},\n\t},\n\tmethods: {\n\t\tfocus() {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.$refs['provider-select']?.$el?.querySelector('#provider-select-input')?.focus()\n\t\t\t}, 300)\n\t\t},\n\t\tonProviderSelected(p) {\n\t\t\tif (p !== null) {\n\t\t\t\tif (p.isLink) {\n\t\t\t\t\tthis.$emit('submit', p.title)\n\t\t\t\t} else {\n\t\t\t\t\tthis.$emit('select-provider', p)\n\t\t\t\t}\n\t\t\t\tthis.selectedProvider = null\n\t\t\t}\n\t\t},\n\t\tonSearch(query) {\n\t\t\tthis.query = query\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.provider-list {\n\twidth: 100%;\n\tmin-height: 400px;\n\tpadding: 0 16px 16px 16px;\n\tdisplay: flex;\n\tflex-direction: column;\n\n\t&--select {\n\t\twidth: 100%;\n\n\t\t.provider {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\theight: 28px;\n\t\t\toverflow: hidden;\n\n\t\t\t.link-icon {\n\t\t\t\tmargin-inline-end: 8px;\n\t\t\t}\n\n\t\t\t.provider-icon {\n\t\t\t\twidth: 20px;\n\t\t\t\theight: 20px;\n\t\t\t\tobject-fit: contain;\n\t\t\t\tmargin-inline-end: 8px;\n\t\t\t\tfilter: var(--background-invert-if-dark);\n\t\t\t}\n\n\t\t\t.option-text {\n\t\t\t\toverflow: hidden;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t}\n\n\t\t}\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div ref=\"widgetRoot\" :class=\"{'toggle-interactive': hasInteractiveView && !isInteractive }\">\n\t\t<div v-if=\"reference && hasCustomWidget\"\n\t\t\tref=\"customWidget\"\n\t\t\tclass=\"widget-custom\"\n\t\t\t:class=\"{ 'full-width': hasFullWidth }\" />\n\n\t\t<component :is=\"referenceWidgetLinkComponent\"\n\t\t\tv-else-if=\"!noAccess && reference && reference.openGraphObject && !hasCustomWidget\"\n\t\t\tv-bind=\"referenceWidgetLinkProps\"\n\t\t\trel=\"noopener noreferrer\"\n\t\t\tclass=\"widget-default\">\n\t\t\t<img v-if=\"reference.openGraphObject.thumb\" class=\"widget-default--image\" :src=\"reference.openGraphObject.thumb\">\n\t\t\t<div class=\"widget-default--details\">\n\t\t\t\t<p class=\"widget-default--name\">\n\t\t\t\t\t{{ reference.openGraphObject.name }}\n\t\t\t\t</p>\n\t\t\t\t<p class=\"widget-default--description\" :style=\"descriptionStyle\">\n\t\t\t\t\t{{ reference.openGraphObject.description }}\n\t\t\t\t</p>\n\t\t\t\t<p class=\"widget-default--link\">\n\t\t\t\t\t{{ compactLink }}\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</component>\n\t\t<NcButton v-if=\"interactiveOptIn && hasInteractiveView && !isInteractive\" class=\"toggle-interactive--button\" @click=\"enableInteractive\">\n\t\t\t{{ t('Enable interactive view') }}\n\t\t</NcButton>\n\t</div>\n</template>\n<script>\nimport { useElementSize, useIntersectionObserver } from '@vueuse/core'\nimport { nextTick, ref } from 'vue'\nimport { RouterLink } from 'vue-router'\n\nimport { t } from '../../l10n.js'\nimport { getRoute } from './autolink.ts'\nimport { renderWidget, isWidgetRegistered, destroyWidget, hasInteractiveView, hasFullWidth } from './../../functions/reference/widgets.ts'\n\nimport NcButton from '../../components/NcButton/NcButton.vue'\n\nconst IDLE_TIMEOUT = 3 * 60 * 1000 // 3 minutes outside of viewport before widget is removed from the DOM\n\nexport default {\n\tname: 'NcReferenceWidget',\n\tcomponents: {\n\t\tNcButton,\n\t},\n\tprops: {\n\t\treference: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tinteractive: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tinteractiveOptIn: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst isVisible = ref(false)\n\t\t// This is the widget root node\n\t\tconst widgetRoot = ref()\n\t\tconst { width } = useElementSize(widgetRoot)\n\n\t\tuseIntersectionObserver(widgetRoot, ([entry]) => {\n\t\t\tnextTick(() => {\n\t\t\t\tisVisible.value = entry.isIntersecting\n\t\t\t})\n\t\t})\n\n\t\treturn {\n\t\t\twidth,\n\t\t\tisVisible,\n\t\t\twidgetRoot,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tshowInteractive: false,\n\t\t\trendered: false,\n\t\t\tidleTimeout: null,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tisInteractive() {\n\t\t\treturn (!this.interactiveOptIn && this.interactive) || this.showInteractive\n\t\t},\n\t\thasFullWidth() {\n\t\t\treturn hasFullWidth(this.reference.richObjectType)\n\t\t},\n\t\thasCustomWidget() {\n\t\t\treturn isWidgetRegistered(this.reference.richObjectType)\n\t\t},\n\t\thasInteractiveView() {\n\t\t\treturn isWidgetRegistered(this.reference.richObjectType) && hasInteractiveView(this.reference.richObjectType)\n\t\t},\n\t\tnoAccess() {\n\t\t\treturn this.reference && !this.reference.accessible\n\t\t},\n\t\tdescriptionStyle() {\n\t\t\tif (this.numberOfLines === 0) {\n\t\t\t\treturn {\n\t\t\t\t\tdisplay: 'none',\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst lineClamp = this.numberOfLines\n\t\t\treturn {\n\t\t\t\tlineClamp,\n\t\t\t\twebkitLineClamp: lineClamp,\n\t\t\t}\n\t\t},\n\t\tnumberOfLines() {\n\t\t\t// no description for width < 450, one line until 550 and so on\n\t\t\tconst lineCountOffsets = [450, 550, 650, Infinity]\n\t\t\treturn lineCountOffsets.findIndex(max => this.width < max)\n\t\t},\n\t\tcompactLink() {\n\t\t\tconst link = this.reference.openGraphObject.link\n\t\t\tif (!link) {\n\t\t\t\treturn ''\n\t\t\t}\n\n\t\t\tif (link.startsWith('https://')) {\n\t\t\t\treturn link.substring(8)\n\t\t\t}\n\t\t\tif (link.startsWith('http://')) {\n\t\t\t\treturn link.substring(7)\n\t\t\t}\n\t\t\treturn link\n\t\t},\n\t\troute() {\n\t\t\treturn getRoute(this.$router, this.reference.openGraphObject.link)\n\t\t},\n\t\treferenceWidgetLinkComponent() {\n\t\t\treturn this.route ? RouterLink : 'a'\n\t\t},\n\t\treferenceWidgetLinkProps() {\n\t\t\treturn this.route\n\t\t\t\t? { to: this.route }\n\t\t\t\t: { href: this.reference.openGraphObject.link, target: '_blank' }\n\t\t},\n\t},\n\twatch: {\n\t\tisVisible: {\n\t\t\thandler(val) {\n\t\t\t\tif (!val) {\n\t\t\t\t\tthis.idleTimeout = setTimeout(() => {\n\t\t\t\t\t\t// If the widget is still outside of viewport after timeout, destroy it\n\t\t\t\t\t\tif (!this.isVisible) {\n\t\t\t\t\t\t\tthis.destroyWidget()\n\t\t\t\t\t\t}\n\t\t\t\t\t}, IDLE_TIMEOUT)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif (this.idleTimeout) {\n\t\t\t\t\tclearTimeout(this.idleTimeout)\n\t\t\t\t\tthis.idleTimeout = null\n\t\t\t\t}\n\n\t\t\t\tif (!this.rendered) {\n\t\t\t\t\tthis.renderWidget()\n\t\t\t\t}\n\t\t\t},\n\t\t\timmediate: true,\n\t\t},\n\t},\n\tbeforeUnmount() {\n\t\tthis.destroyWidget()\n\t},\n\tmethods: {\n\t\tt,\n\n\t\tenableInteractive() {\n\t\t\tthis.showInteractive = true\n\t\t\tthis.renderWidget()\n\t\t},\n\t\trenderWidget() {\n\t\t\tif (!this.$refs.customWidget) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this?.reference?.richObjectType === 'open-graph') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.$refs.customWidget.innerHTML = ''\n\n\t\t\t// create a separate element so we can rerender on the ref again\n\t\t\tconst widget = document.createElement('div')\n\t\t\twidget.style = 'width: 100%;'\n\t\t\tthis.$refs.customWidget.appendChild(widget)\n\t\t\tthis.$nextTick(() => {\n\t\t\t\t// Waiting for the ref to become available\n\t\t\t\trenderWidget(widget, {\n\t\t\t\t\t...this.reference,\n\t\t\t\t\tinteractive: this.isInteractive,\n\t\t\t\t})\n\t\t\t\tthis.rendered = true\n\t\t\t})\n\t\t},\n\t\tdestroyWidget() {\n\t\t\tif (this.rendered) {\n\t\t\t\tdestroyWidget(this.reference.richObjectType, this.$el)\n\t\t\t\tthis.rendered = false\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n<style lang=\"scss\" scoped>\n\n@mixin widget {\n\twidth: 100%;\n\tmargin: auto;\n\tmargin-bottom: calc(var(--default-grid-baseline, 4px) * 3);\n\tmargin-top: calc(var(--default-grid-baseline, 4px) * 3);\n\toverflow: hidden;\n\tborder: 2px solid var(--color-border);\n\tborder-radius: var(--border-radius-container);\n\tbackground-color: transparent;\n\tdisplay: flex;\n}\n\n.widget-custom {\n\t@include widget;\n\n\t&.full-width {\n\t\twidth: var(--widget-full-width, 100%) !important;\n\t\tinset-inline-start: calc( (var(--widget-full-width, 100%) - 100%) / 2 * -1);\n\t\tposition: relative;\n\t}\n}\n\n.widget-access {\n\t@include widget;\n\tpadding: calc(var(--default-grid-baseline, 4px) * 3);\n}\n\n.widget-default {\n\t@include widget;\n\n\t&--compact {\n\t\tflex-direction: column;\n\n\t\t.widget-default--image {\n\t\t\twidth: 100%;\n\t\t\theight: 150px;\n\t\t}\n\n\t\t.widget-default--details {\n\t\t\twidth: 100%;\n\t\t\tpadding-top: calc(var(--default-grid-baseline, 4px) * 2);\n\t\t\tpadding-bottom: calc(var(--default-grid-baseline, 4px) * 2);\n\t\t}\n\n\t\t.widget-default--description {\n\t\t\tdisplay: none;\n\t\t}\n\n\t}\n\n\t&--image {\n\t\twidth: 40%;\n\t\tbackground-position: center;\n\t\tbackground-size: cover;\n\t\tbackground-repeat: no-repeat;\n\t}\n\n\t&--name {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t\tfont-weight: bold;\n\t}\n\n\t&--details {\n\t\tpadding: calc(var(--default-grid-baseline, 4px) * 3);\n\t\twidth: 60%;\n\n\t\tp {\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t}\n\t}\n\n\t&--description {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\tdisplay: -webkit-box;\n\t\t-webkit-line-clamp: 3;\n\t\tline-clamp: 3; /* stylelint-disable-line property-no-unknown */\n\t\t-webkit-box-orient: vertical;\n\t}\n\n\t&--link {\n\t\tcolor: var(--color-text-maxcontrast);\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n\t}\n}\n\n.toggle-interactive {\n\tposition: relative;\n\t.toggle-interactive--button {\n\t\tposition: absolute;\n\t\tbottom: var(--default-grid-baseline);\n\t\tinset-inline-end: var(--default-grid-baseline);\n\t\tz-index: 10000;\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"raw-link\">\n\t\t<div class=\"input-wrapper\">\n\t\t\t<NcTextField ref=\"url-input\"\n\t\t\t\tv-model=\"inputValue\"\n\t\t\t\t:show-trailing-button=\"inputValue !== ''\"\n\t\t\t\t:label=\"inputPlaceholder\"\n\t\t\t\t@trailing-button-click=\"onClear\"\n\t\t\t\t@update:model-value=\"onInput\"\n\t\t\t\t@keyup.enter=\"onSubmit\">\n\t\t\t\t<NcLoadingIcon v-if=\"loading\" :size=\"16\" />\n\t\t\t\t<LinkVariantIcon v-else :size=\"16\" />\n\t\t\t</NcTextField>\n\t\t</div>\n\t\t<NcReferenceWidget v-if=\"reference !== null\"\n\t\t\tclass=\"reference-widget\"\n\t\t\t:reference=\"reference\" />\n\t\t<NcEmptyContent v-else\n\t\t\tclass=\"raw-link--empty-content\">\n\t\t\t<template #icon>\n\t\t\t\t<img v-if=\"provider.icon_url\"\n\t\t\t\t\tclass=\"provider-icon\"\n\t\t\t\t\t:src=\"provider.icon_url\">\n\t\t\t\t<LinkVariantIcon v-else />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\t</div>\n</template>\n\n<script>\nimport NcReferenceWidget from '../NcReferenceWidget.vue'\nimport { isUrl, delay } from './utils.js'\nimport NcEmptyContent from '../../NcEmptyContent/index.ts'\nimport NcLoadingIcon from '../../NcLoadingIcon/index.js'\nimport NcTextField from '../../NcTextField/index.js'\nimport { t } from '../../../l10n.js'\n\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nimport LinkVariantIcon from 'vue-material-design-icons/LinkVariant.vue'\n\nexport default {\n\tname: 'NcRawLinkInput',\n\tcomponents: {\n\t\tLinkVariantIcon,\n\t\tNcEmptyContent,\n\t\tNcLoadingIcon,\n\t\tNcReferenceWidget,\n\t\tNcTextField,\n\t},\n\tprops: {\n\t\t/**\n\t\t * The reference provider\n\t\t */\n\t\tprovider: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\temits: [\n\t\t'submit',\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tinputValue: '',\n\t\t\tloading: false,\n\t\t\treference: null,\n\t\t\tabortController: null,\n\t\t\tinputPlaceholder: t('Enter link'),\n\t\t}\n\t},\n\tcomputed: {\n\t\tisLinkValid() {\n\t\t\treturn isUrl(this.inputValue)\n\t\t},\n\t},\n\tmethods: {\n\t\tfocus() {\n\t\t\tthis.$refs['url-input'].$el.getElementsByTagName('input')[0]?.focus()\n\t\t},\n\t\tonSubmit(e) {\n\t\t\tconst value = e.target.value\n\t\t\tif (this.isLinkValid) {\n\t\t\t\tthis.$emit('submit', value)\n\t\t\t}\n\t\t},\n\t\tonClear() {\n\t\t\tthis.inputValue = ''\n\t\t\tthis.reference = null\n\t\t},\n\t\tonInput() {\n\t\t\tthis.reference = null\n\t\t\tif (this.abortController) {\n\t\t\t\tthis.abortController.abort()\n\t\t\t}\n\t\t\tif (this.isLinkValid) {\n\t\t\t\tdelay(() => {\n\t\t\t\t\tthis.updateReference()\n\t\t\t\t}, 500)()\n\t\t\t}\n\t\t},\n\t\tupdateReference() {\n\t\t\tthis.loading = true\n\t\t\tthis.abortController = new AbortController()\n\t\t\taxios.get(generateOcsUrl('references/resolve', 2) + '?reference=' + encodeURIComponent(this.inputValue), {\n\t\t\t\tsignal: this.abortController.signal,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tthis.reference = response.data.ocs.data.references[this.inputValue]\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error)\n\t\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading = false\n\t\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.raw-link {\n\twidth: 100%;\n\tmin-height: 350px;\n\tdisplay: flex;\n\tflex-direction: column;\n\toverflow-y: auto;\n\tpadding: 0 16px 16px 16px;\n\n\t.input-wrapper {\n\t\twidth: 100%;\n\t}\n\n\t.reference-widget {\n\t\tdisplay: flex;\n\t}\n\n\t&--empty-content .provider-icon {\n\t\twidth: 150px;\n\t\theight: 150px;\n\t\tobject-fit: contain;\n\t\tfilter: var(--background-invert-if-dark);\n\t}\n\n\t&--input {\n\t\twidth: 99%;\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"result\">\n\t\t<div v-if=\"entry.icon\"\n\t\t\t:class=\"{ [entry.icon]: true, rounded: entry.rounded }\"\n\t\t\tclass=\"result--icon-class\" />\n\t\t<img v-else\n\t\t\tclass=\"result--image\"\n\t\t\t:class=\"{ rounded: entry.rounded }\"\n\t\t\t:src=\"entry.thumbnailUrl\">\n\t\t<div class=\"result--content\">\n\t\t\t<span class=\"result--content--name\">\n\t\t\t\t<NcHighlight :search=\"query\" :text=\"entry.title\" />\n\t\t\t</span>\n\t\t\t<span class=\"result--content--subline\">\n\t\t\t\t<NcHighlight :search=\"query\" :text=\"entry.subline\" />\n\t\t\t</span>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport NcHighlight from '../../NcHighlight/index.js'\n\nexport default {\n\tname: 'NcSearchResult',\n\tcomponents: {\n\t\tNcHighlight,\n\t},\n\tprops: {\n\t\t/**\n\t\t * Unified search result entry\n\t\t */\n\t\tentry: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\t/**\n\t\t * The query that led to getting this result\n\t\t * Used to highlight the entry text\n\t\t */\n\t\tquery: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.result {\n\tdisplay: flex;\n\talign-items: center;\n\theight: var(--default-clickable-area);\n\toverflow: hidden;\n\n\t&--icon-class,\n\t&--image {\n\t\twidth: 40px;\n\t\tmin-width: 40px;\n\t\theight: 40px;\n\t\tobject-fit: contain;\n\n\t\t&.rounded {\n\t\t\tborder-radius: 50%;\n\t\t}\n\t}\n\n\t&--content {\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tpadding-inline-start: 10px;\n\t\toverflow: hidden;\n\n\t\t&--name,\n\t\t&--subline {\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\twhite-space: nowrap;\n\t\t}\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"smart-picker-search\" :class=\"{ 'with-empty-content': showEmptyContent }\">\n\t\t<NcSelect ref=\"search-select\"\n\t\t\tv-model=\"selectedResult\"\n\t\t\tclass=\"smart-picker-search--select\"\n\t\t\tinput-id=\"search-select-input\"\n\t\t\tlabel=\"name\"\n\t\t\t:placeholder=\"mySearchPlaceholder\"\n\t\t\t:options=\"options\"\n\t\t\t:append-to-body=\"false\"\n\t\t\t:close-on-select=\"false\"\n\t\t\t:clear-search-on-select=\"false\"\n\t\t\t:clear-search-on-blur=\"() => false\"\n\t\t\t:reset-focus-on-options-change=\"false\"\n\t\t\t:filterable=\"false\"\n\t\t\t:autoscroll=\"true\"\n\t\t\t:reset-on-options-change=\"false\"\n\t\t\t:loading=\"searching\"\n\t\t\t@search=\"onSearchInput\"\n\t\t\t@update:model-value=\"onSelectResultSelected\">\n\t\t\t<template #option=\"option\">\n\t\t\t\t<div v-if=\"option.isRawLink\" class=\"custom-option\">\n\t\t\t\t\t<LinkVariantIcon class=\"option-simple-icon\" :size=\"20\" />\n\t\t\t\t\t<span class=\"option-text\">\n\t\t\t\t\t\t{{ t('Raw link {options}', { options: option.resourceUrl }) }}\n\t\t\t\t\t</span>\n\t\t\t\t</div>\n\t\t\t\t<NcSearchResult v-else-if=\"option.resourceUrl\"\n\t\t\t\t\tclass=\"search-result\"\n\t\t\t\t\t:entry=\"option\"\n\t\t\t\t\t:query=\"searchQuery\" />\n\t\t\t\t<span v-else-if=\"option.isCustomGroupTitle\" class=\"custom-option group-name\">\n\t\t\t\t\t<img v-if=\"provider.icon_url\"\n\t\t\t\t\t\tclass=\"provider-icon group-name-icon\"\n\t\t\t\t\t\t:src=\"provider.icon_url\">\n\t\t\t\t\t<span class=\"option-text\">\n\t\t\t\t\t\t<strong>{{ option.name }}</strong>\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t\t<span v-else-if=\"option.isMore\" :class=\"{ 'custom-option': true }\">\n\t\t\t\t\t<span v-if=\"option.isLoading\" class=\"option-simple-icon icon-loading-small\" />\n\t\t\t\t\t<DotsHorizontalIcon v-else class=\"option-simple-icon\" :size=\"20\" />\n\t\t\t\t\t<span class=\"option-text\">\n\t\t\t\t\t\t{{ t('Load more \"{options}\"', { options: option.name }) }}\n\t\t\t\t\t</span>\n\t\t\t\t</span>\n\t\t\t</template>\n\t\t\t<template #no-options>\n\t\t\t\t{{ noOptionsText }}\n\t\t\t</template>\n\t\t</NcSelect>\n\t\t<NcEmptyContent v-if=\"showEmptyContent\"\n\t\t\tclass=\"smart-picker-search--empty-content\">\n\t\t\t<template #icon>\n\t\t\t\t<img v-if=\"provider.icon_url\"\n\t\t\t\t\tclass=\"provider-icon\"\n\t\t\t\t\t:alt=\"providerIconAlt\"\n\t\t\t\t\t:src=\"provider.icon_url\">\n\t\t\t\t<LinkVariantIcon v-else />\n\t\t\t</template>\n\t\t</NcEmptyContent>\n\t</div>\n</template>\n\n<script>\nimport NcSearchResult from './NcSearchResult.vue'\nimport { isUrl, delay } from './utils.js'\nimport NcEmptyContent from '../../NcEmptyContent/index.ts'\nimport NcSelect from '../../NcSelect/index.js'\n\nimport { t } from '../../../l10n.js'\n\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nimport DotsHorizontalIcon from 'vue-material-design-icons/DotsHorizontal.vue'\nimport LinkVariantIcon from 'vue-material-design-icons/LinkVariant.vue'\n\nconst LIMIT = 5\n\nexport default {\n\tname: 'NcSearch',\n\tcomponents: {\n\t\tLinkVariantIcon,\n\t\tDotsHorizontalIcon,\n\t\tNcEmptyContent,\n\t\tNcSelect,\n\t\tNcSearchResult,\n\t},\n\tprops: {\n\t\t/**\n\t\t * The selected reference provider\n\t\t */\n\t\tprovider: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tshowEmptyContent: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\tsearchPlaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\temits: [\n\t\t'submit',\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tsearchQuery: '',\n\t\t\tselectedResult: null,\n\t\t\tresultsBySearchProvider: {},\n\t\t\tsearching: false,\n\t\t\tsearchingMoreOf: null,\n\t\t\tabortController: null,\n\t\t\tnoOptionsText: t('Start typing to search'),\n\t\t\tproviderIconAlt: t('Provider icon'),\n\t\t}\n\t},\n\tcomputed: {\n\t\tmySearchPlaceholder() {\n\t\t\treturn this.searchPlaceholder || t('Search')\n\t\t},\n\t\tsearchProviderIds() {\n\t\t\treturn this.provider.search_providers_ids\n\t\t},\n\t\toptions() {\n\t\t\tif (this.searchQuery === '') {\n\t\t\t\treturn []\n\t\t\t}\n\n\t\t\tconst options = []\n\t\t\tif (isUrl(this.searchQuery)) {\n\t\t\t\toptions.push(this.rawLinkEntry)\n\t\t\t}\n\t\t\toptions.push(...this.formattedSearchResults)\n\t\t\treturn options\n\t\t},\n\t\trawLinkEntry() {\n\t\t\treturn {\n\t\t\t\tid: 'rawLinkEntry',\n\t\t\t\tresourceUrl: this.searchQuery,\n\t\t\t\tisRawLink: true,\n\t\t\t}\n\t\t},\n\t\tformattedSearchResults() {\n\t\t\tconst results = []\n\t\t\tthis.searchProviderIds.forEach(pid => {\n\t\t\t\tif (this.resultsBySearchProvider[pid].entries.length > 0) {\n\t\t\t\t\t// don't show group name entry if there is only one search provider and one result\n\t\t\t\t\tif (this.searchProviderIds.length > 1 || this.resultsBySearchProvider[pid].entries.length > 1) {\n\t\t\t\t\t\tresults.push({\n\t\t\t\t\t\t\tid: 'groupTitle-' + pid,\n\t\t\t\t\t\t\tname: this.resultsBySearchProvider[pid].name,\n\t\t\t\t\t\t\tisCustomGroupTitle: true,\n\t\t\t\t\t\t\tproviderId: pid,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\tconst providerEntriesWithId = this.resultsBySearchProvider[pid].entries.map((entry, index) => {\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid: 'provider-' + pid + '-entry-' + index,\n\t\t\t\t\t\t\t...entry,\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\tresults.push(...providerEntriesWithId)\n\t\t\t\t\tif (this.resultsBySearchProvider[pid].isPaginated) {\n\t\t\t\t\t\tresults.push({\n\t\t\t\t\t\t\tid: 'moreOf-' + pid,\n\t\t\t\t\t\t\tname: this.resultsBySearchProvider[pid].name,\n\t\t\t\t\t\t\tisMore: true,\n\t\t\t\t\t\t\tproviderId: pid,\n\t\t\t\t\t\t\tisLoading: this.searchingMoreOf === pid,\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\treturn results\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.resetResults()\n\t},\n\tbeforeUnmount() {\n\t\tthis.cancelSearchRequests()\n\t},\n\tmethods: {\n\t\tt,\n\t\tresetResults() {\n\t\t\tconst resultsBySearchProvider = {}\n\t\t\tthis.searchProviderIds.forEach(pid => {\n\t\t\t\tresultsBySearchProvider[pid] = {\n\t\t\t\t\tentries: [],\n\t\t\t\t}\n\t\t\t})\n\t\t\tthis.resultsBySearchProvider = resultsBySearchProvider\n\t\t},\n\t\tfocus() {\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.$refs['search-select']?.$el?.querySelector('#search-select-input')?.focus()\n\t\t\t}, 300)\n\t\t},\n\t\tcancelSearchRequests() {\n\t\t\tif (this.abortController) {\n\t\t\t\tthis.abortController.abort()\n\t\t\t}\n\t\t},\n\t\tonSearchInput(query) {\n\t\t\tthis.searchQuery = query\n\t\t\tdelay(() => {\n\t\t\t\tthis.updateSearch()\n\t\t\t}, 500)()\n\t\t},\n\t\tonSelectResultSelected(item) {\n\t\t\tif (item !== null) {\n\t\t\t\tif (item.resourceUrl) {\n\t\t\t\t\tthis.cancelSearchRequests()\n\t\t\t\t\tthis.$emit('submit', item.resourceUrl)\n\t\t\t\t} else if (item.isMore) {\n\t\t\t\t\tthis.searchMoreOf(item.providerId).then(() => {\n\t\t\t\t\t\t// allow clicking twice on the same \"more\" item\n\t\t\t\t\t\tthis.selectedResult = null\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsearchMoreOf(searchProviderId) {\n\t\t\tthis.searchingMoreOf = searchProviderId\n\t\t\tthis.cancelSearchRequests()\n\t\t\treturn this.searchProviders(searchProviderId)\n\t\t},\n\t\tupdateSearch() {\n\t\t\tthis.cancelSearchRequests()\n\t\t\tthis.resetResults()\n\t\t\tif (this.searchQuery === '') {\n\t\t\t\tthis.searching = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\treturn this.searchProviders()\n\t\t},\n\t\tsearchProviders(searchProviderId = null) {\n\t\t\tthis.abortController = new AbortController()\n\t\t\tthis.searching = true\n\n\t\t\tconst searchPromises = searchProviderId === null\n\t\t\t\t? [...this.searchProviderIds].map(pid => {\n\t\t\t\t\treturn this.searchOneProvider(pid)\n\t\t\t\t})\n\t\t\t\t: [this.searchOneProvider(searchProviderId, this.resultsBySearchProvider[searchProviderId]?.cursor ?? null)]\n\t\t\t// fake one to have a request error\n\t\t\t// searchPromises.push(this.searchOneProvider('nopid'))\n\n\t\t\treturn Promise.allSettled(searchPromises)\n\t\t\t\t.then((promises) => {\n\t\t\t\t\tconst isOneCanceled = !!promises.find(p => {\n\t\t\t\t\t\treturn p.status === 'rejected' && (p.reason.name === 'CanceledError' || p.reason.code === 'ERR_CANCELED')\n\t\t\t\t\t})\n\t\t\t\t\t// nothing was canceled: not searching\n\t\t\t\t\tif (!isOneCanceled) {\n\t\t\t\t\t\tthis.searching = false\n\t\t\t\t\t\tthis.searchingMoreOf = null\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\t\tsearchOneProvider(providerId, cursor = null) {\n\t\t\tconst url = cursor === null\n\t\t\t\t? generateOcsUrl('search/providers/{providerId}/search?term={term}&limit={limit}', { providerId, term: this.searchQuery, limit: LIMIT })\n\t\t\t\t: generateOcsUrl('search/providers/{providerId}/search?term={term}&limit={limit}&cursor={cursor}', { providerId, term: this.searchQuery, limit: LIMIT, cursor })\n\t\t\treturn axios.get(url, {\n\t\t\t\tsignal: this.abortController.signal,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst data = response.data.ocs.data\n\t\t\t\t\tthis.resultsBySearchProvider[providerId].name = data.name\n\t\t\t\t\tthis.resultsBySearchProvider[providerId].cursor = data.cursor\n\t\t\t\t\tthis.resultsBySearchProvider[providerId].isPaginated = data.isPaginated\n\t\t\t\t\tthis.resultsBySearchProvider[providerId].entries.push(...data.entries)\n\t\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.smart-picker-search {\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\tpadding: 0 16px 16px 16px;\n\t&.with-empty-content {\n\t\tmin-height: 400px;\n\t}\n\n\t.provider-icon {\n\t\twidth: 150px;\n\t\theight: 150px;\n\t\tobject-fit: contain;\n\t\tfilter: var(--background-invert-if-dark);\n\t}\n\n\t&--select {\n\t\twidth: 100%;\n\n\t\t.search-result {\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t.group-name-icon,\n\t\t.option-simple-icon {\n\t\t\twidth: 20px;\n\t\t\theight: 20px;\n\t\t\tmargin: 0 20px 0 10px;\n\t\t}\n\n\t\t.custom-option {\n\t\t\theight: var(--default-clickable-area);\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\toverflow: hidden;\n\t\t}\n\n\t\t.option-text {\n\t\t\toverflow: hidden;\n\t\t\ttext-overflow: ellipsis;\n\t\t\twhite-space: nowrap;\n\t\t}\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<div class=\"reference-picker\"\n\t\t:style=\"pickerWrapperStyle\"\n\t\ttabindex=\"-1\"\n\t\t@keydown.stop.prevent.esc=\"onEscapePressed\">\n\t\t<NcProviderList v-if=\"mode === MODES.providerList\"\n\t\t\tref=\"provider-list\"\n\t\t\t@select-provider=\"onProviderSelected\"\n\t\t\t@submit=\"submitLink\"\n\t\t\t@cancel=\"cancelProviderSelection\" />\n\t\t<NcRawLinkInput v-else-if=\"mode === MODES.standardLinkInput\"\n\t\t\tref=\"url-input\"\n\t\t\t:provider=\"selectedProvider\"\n\t\t\t@submit=\"submitLink\"\n\t\t\t@cancel=\"cancelRawLinkInput\" />\n\t\t<NcSearch v-else-if=\"mode === MODES.searchInput\"\n\t\t\tref=\"url-input\"\n\t\t\t:provider=\"selectedProvider\"\n\t\t\t@cancel=\"cancelSearch\"\n\t\t\t@submit=\"submitLink\" />\n\t\t<div v-else-if=\"mode === MODES.customElement\"\n\t\t\tclass=\"custom-element-wrapper\">\n\t\t\t<NcCustomPickerElement :provider=\"selectedProvider\"\n\t\t\t\tclass=\"custom-element\"\n\t\t\t\t@submit=\"submitLink\"\n\t\t\t\t@cancel=\"cancelCustomElement\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport NcCustomPickerElement from './NcCustomPickerElement.vue'\nimport NcProviderList from './NcProviderList.vue'\nimport NcRawLinkInput from './NcRawLinkInput.vue'\nimport NcSearch from './NcSearch.vue'\nimport { isCustomPickerElementRegistered } from './../../../functions/reference/customPickerElements.js'\nimport { touchProvider } from './../../../functions/reference/providerHelper.js'\n\nconst MODES = {\n\tproviderList: 1,\n\tstandardLinkInput: 2,\n\tsearchInput: 3,\n\tcustomElement: 4,\n}\nexport default {\n\tname: 'NcReferencePicker',\n\tcomponents: {\n\t\tNcCustomPickerElement,\n\t\tNcProviderList,\n\t\tNcRawLinkInput,\n\t\tNcSearch,\n\t},\n\tprops: {\n\t\t/**\n\t\t * Provider to select on creation\n\t\t * Default: null. Show the provider list\n\t\t */\n\t\tinitialProvider: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => null,\n\t\t},\n\t\t/**\n\t\t * Optional width in pixels\n\t\t * Default: 100%\n\t\t */\n\t\twidth: {\n\t\t\ttype: Number,\n\t\t\tdefault: null,\n\t\t},\n\t\t/**\n\t\t * Focus on the provider list select input on creation\n\t\t * Default: true\n\t\t */\n\t\tfocusOnCreate: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\temits: [\n\t\t'cancel',\n\t\t'cancel-raw-link',\n\t\t'cancel-search',\n\t\t'provider-selected',\n\t\t'submit',\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tMODES,\n\t\t\tselectedProvider: this.initialProvider,\n\t\t}\n\t},\n\tcomputed: {\n\t\tmode() {\n\t\t\treturn this.selectedProvider === null\n\t\t\t\t? MODES.providerList\n\t\t\t\t: isCustomPickerElementRegistered(this.selectedProvider.id)\n\t\t\t\t\t? MODES.customElement\n\t\t\t\t\t: this.selectedProvider.search_providers_ids\n\t\t\t\t\t\t? MODES.searchInput\n\t\t\t\t\t\t: MODES.standardLinkInput\n\t\t},\n\t\tpickerWrapperStyle() {\n\t\t\treturn {\n\t\t\t\twidth: this.width ? this.width + 'px' : undefined,\n\t\t\t}\n\t\t},\n\t},\n\tmounted() {\n\t\tif (this.focusOnCreate) {\n\t\t\tif (this.initialProvider) {\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tthis.$refs['url-input']?.focus()\n\t\t\t\t}, 300)\n\t\t\t} else {\n\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\tthis.$refs['provider-list']?.focus()\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t},\n\tmethods: {\n\t\tonEscapePressed() {\n\t\t\tif (this.selectedProvider !== null) {\n\t\t\t\tthis.deselectProvider()\n\t\t\t} else {\n\t\t\t\tthis.cancelProviderSelection()\n\t\t\t}\n\t\t},\n\t\tonProviderSelected(provider) {\n\t\t\tthis.selectedProvider = provider\n\t\t\tthis.$emit('provider-selected', provider)\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs['url-input']?.focus()\n\t\t\t})\n\t\t},\n\t\tcancelCustomElement() {\n\t\t\tthis.deselectProvider()\n\t\t},\n\t\tcancelSearch() {\n\t\t\tthis.$emit('cancel-search', this.selectedProvider?.title)\n\t\t\tthis.deselectProvider()\n\t\t},\n\t\tcancelRawLinkInput() {\n\t\t\tthis.$emit('cancel-raw-link', this.selectedProvider?.title)\n\t\t\tthis.deselectProvider()\n\t\t},\n\t\tcancelProviderSelection() {\n\t\t\tthis.$emit('cancel')\n\t\t},\n\t\tsubmitLink(link) {\n\t\t\tif (this.selectedProvider !== null) {\n\t\t\t\ttouchProvider(this.selectedProvider.id)\n\t\t\t}\n\t\t\tthis.$emit('submit', link)\n\t\t\tthis.deselectProvider()\n\t\t},\n\t\tdeselectProvider() {\n\t\t\tthis.selectedProvider = null\n\t\t\tthis.$emit('provider-selected', null)\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.$refs['provider-list']?.focus()\n\t\t\t}, 300)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.reference-picker {\n\tdisplay: flex;\n\toverflow-y: auto;\n\twidth: 100%;\n\n\t.custom-element-wrapper {\n\t\tdisplay: flex;\n\t\toverflow-y: auto;\n\t\twidth: 100%;\n\t\t.custom-element {\n\t\t\tdisplay: flex;\n\t\t\toverflow-y: auto;\n\t\t\twidth: 100%;\n\t\t}\n\t}\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<NcModal v-if=\"show\"\n\t\t:size=\"modalSize\"\n\t\tclass=\"reference-picker-modal\"\n\t\t@close=\"onCancel\">\n\t\t<div ref=\"modal_content\"\n\t\t\tclass=\"reference-picker-modal--content\">\n\t\t\t<NcButton v-if=\"showBackButton\"\n\t\t\t\t:aria-label=\"backButtonTitle\"\n\t\t\t\t:title=\"backButtonTitle\"\n\t\t\t\tclass=\"back-button\"\n\t\t\t\t@click=\"onBackClicked\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<ArrowLeftIcon />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<NcButton class=\"close-button\"\n\t\t\t\t:aria-label=\"closeButtonLabel\"\n\t\t\t\t:title=\"closeButtonTitle\"\n\t\t\t\tvariant=\"tertiary\"\n\t\t\t\t@click=\"onCancel\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<CloseIcon />\n\t\t\t\t</template>\n\t\t\t</NcButton>\n\t\t\t<h2 v-if=\"showModalName\">\n\t\t\t\t{{ modalName }}\n\t\t\t</h2>\n\t\t\t<NcReferencePicker ref=\"referencePicker\"\n\t\t\t\t:initial-provider=\"initialProvider\"\n\t\t\t\t:focus-on-create=\"focusOnCreate\"\n\t\t\t\t@provider-selected=\"onProviderSelect\"\n\t\t\t\t@submit=\"onSubmit\"\n\t\t\t\t@cancel=\"onCancel\" />\n\t\t</div>\n\t</NcModal>\n</template>\n\n<script>\nimport NcReferencePicker from './NcReferencePicker.vue'\nimport { getCustomPickerElementSize, isCustomPickerElementRegistered } from './../../../functions/reference/customPickerElements.js'\nimport NcButton from '../../NcButton/index.ts'\nimport NcModal from '../../NcModal/index.js'\nimport { t } from '../../../l10n.js'\n\nimport { emit } from '@nextcloud/event-bus'\n\nimport ArrowLeftIcon from 'vue-material-design-icons/ArrowLeft.vue'\nimport CloseIcon from 'vue-material-design-icons/Close.vue'\n\nexport default {\n\tname: 'NcReferencePickerModal',\n\tcomponents: {\n\t\tNcReferencePicker,\n\t\tNcModal,\n\t\tNcButton,\n\t\tArrowLeftIcon,\n\t\tCloseIcon,\n\t},\n\tprops: {\n\t\t/**\n\t\t * Provider to select on creation\n\t\t * Show the provider list if no initial one is provided\n\t\t */\n\t\tinitialProvider: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => null,\n\t\t},\n\t\t/**\n\t\t * Focus on the input item on create\n\t\t */\n\t\tfocusOnCreate: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t\t/**\n\t\t * If true, add the modal content to the Viewer trap elements via the event-bus\n\t\t */\n\t\tisInsideViewer: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\temits: [\n\t\t'cancel',\n\t\t'submit',\n\t],\n\tdata() {\n\t\treturn {\n\t\t\tshow: true,\n\t\t\tselectedProvider: this.initialProvider,\n\t\t\tbackButtonTitle: t('Back to provider selection'),\n\t\t\tcloseButtonTitle: t('Close'),\n\t\t\tcloseButtonLabel: t('Close Smart Picker'),\n\t\t}\n\t},\n\tcomputed: {\n\t\tisProviderSelected() {\n\t\t\treturn this.selectedProvider !== null\n\t\t},\n\t\tshowBackButton() {\n\t\t\treturn this.initialProvider === null && this.isProviderSelected\n\t\t},\n\t\tmodalSize() {\n\t\t\treturn this.isProviderSelected && isCustomPickerElementRegistered(this.selectedProvider.id)\n\t\t\t\t? (getCustomPickerElementSize(this.selectedProvider.id) ?? 'large')\n\t\t\t\t: 'normal'\n\t\t},\n\t\tshowModalName() {\n\t\t\treturn !this.isProviderSelected || !isCustomPickerElementRegistered(this.selectedProvider.id)\n\t\t},\n\t\tmodalName() {\n\t\t\treturn this.isProviderSelected\n\t\t\t\t? this.selectedProvider.title\n\t\t\t\t: t('Smart Picker')\n\t\t},\n\t},\n\tmounted() {\n\t\tif (this.isInsideViewer) {\n\t\t\tconst elem = this.$refs.modal_content\n\t\t\temit('viewer:trapElements:changed', elem)\n\t\t}\n\t},\n\tmethods: {\n\t\tonCancel() {\n\t\t\tthis.show = false\n\t\t\tthis.$emit('cancel')\n\t\t},\n\t\tonSubmit(value) {\n\t\t\tthis.show = false\n\t\t\tthis.$emit('submit', value)\n\t\t},\n\t\tonProviderSelect(provider) {\n\t\t\tthis.selectedProvider = provider\n\t\t\t// provider was deselected and we started with an inital one: just close the modal\n\t\t\tif (provider === null && this.initialProvider !== null) {\n\t\t\t\tthis.onCancel()\n\t\t\t}\n\t\t},\n\t\tonBackClicked() {\n\t\t\tthis.$refs.referencePicker.deselectProvider()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\n// this is to avoid scroll on the container and leave it to the result block\n.reference-picker-modal .modal-container {\n\tdisplay: flex !important;\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.reference-picker-modal--content {\n\twidth: 100%;\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-items: center;\n\tjustify-content: center;\n\toverflow-y: auto;\n\n\t.close-button,\n\t.back-button {\n\t\tposition: absolute;\n\t\ttop: 4px;\n\t}\n\t.back-button {\n\t\tinset-inline-start: 4px;\n\t}\n\t.close-button {\n\t\tinset-inline-end: 4px;\n\t}\n\n\t> h2 {\n\t\tdisplay: flex;\n\t\tmargin: 12px 0 20px 0;\n\t\t.icon {\n\t\t\tmargin-inline-end: 8px;\n\t\t}\n\t}\n}\n</style>\n","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport NcReferencePickerModal from './../../components/NcRichText/NcReferencePicker/NcReferencePickerModal.vue'\nimport { getProvider } from './providerHelper.js'\n\nimport { createApp } from 'vue'\n\n/**\n * Creates a reference picker modal and return a promise which provides the result\n *\n * @param {string} providerId Optional ID of initial selected provider\n * @param {boolean} isInsideViewer Should be true if this function is called while the Viewer is displayed\n * @return {Promise<unknown>}\n */\nexport async function getLinkWithPicker(providerId = null, isInsideViewer = undefined) {\n\treturn await new Promise((resolve, reject) => {\n\t\tconst modalId = 'referencePickerModal'\n\t\tconst modalElement = document.createElement('div')\n\t\tmodalElement.id = modalId\n\t\tdocument.body.append(modalElement)\n\n\t\tconst initialProvider = providerId === null\n\t\t\t? null\n\t\t\t: (getProvider(providerId) ?? null)\n\n\t\tconst view = createApp(NcReferencePickerModal, {\n\t\t\tinitialProvider,\n\t\t\tisInsideViewer,\n\t\t\tonCancel() {\n\t\t\t\tview.unmount()\n\t\t\t\treject(new Error('User cancellation'))\n\t\t\t},\n\t\t\tonSubmit(link) {\n\t\t\t\tview.unmount()\n\t\t\t\tresolve(link)\n\t\t\t},\n\t\t})\n\t\tview.mount(modalElement)\n\t})\n}\n"],"names":["_sfc_main","_hoisted_1","_openBlock","_createElementBlock","_hoisted_2","_hoisted_3","_mergeProps","_createElementVNode","_hoisted_4","_createCommentVNode","NcHighlight","_createVNode","_withCtx","_toDisplayString","_normalizeClass","_createBlock","_resolveDynamicComponent","_normalizeStyle","_createTextVNode","_withKeys","_hoisted_5","DotsHorizontalIcon","_withModifiers","ArrowLeftIcon","CloseIcon"],"mappings":"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","x_google_ignoreList":[3]}
@@ -1,6 +1,6 @@
1
1
  import { getCanonicalLocale, getLanguage } from "@nextcloud/l10n";
2
2
  import { ref, toValue, computed, watchEffect, onUnmounted } from "vue";
3
- import { r as register, b as t2, a as t } from "./_l10n-BNGeEX3W.mjs";
3
+ import { r as register, b as t2, a as t } from "./_l10n-Bg-fZ9R0.mjs";
4
4
  register(t2);
5
5
  const FEW_SECONDS_AGO = {
6
6
  long: t("a few seconds ago"),
@@ -84,4 +84,4 @@ function useFormatDateTime(timestamp = Date.now(), opts = {}) {
84
84
  export {
85
85
  useFormatDateTime as u
86
86
  };
87
- //# sourceMappingURL=useFormatDateTime-BPGWjR3-.mjs.map
87
+ //# sourceMappingURL=useFormatDateTime-L411ysPm.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFormatDateTime-BPGWjR3-.mjs","sources":["../../src/composables/useFormatDateTime.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { MaybeRef } from 'vue'\nimport { getCanonicalLocale, getLanguage } from '@nextcloud/l10n'\nimport { computed, onUnmounted, ref, toValue, watchEffect } from 'vue'\nimport { t } from '../l10n.js'\n\nconst FEW_SECONDS_AGO = {\n\tlong: t('a few seconds ago'),\n\tshort: t('seconds ago'), // FOR TRANSLATORS: Shorter version of 'a few seconds ago'\n\tnarrow: t('sec. ago'), // FOR TRANSLATORS: If possible in your language an even shorter version of 'a few seconds ago'\n}\n\ninterface FormatDateOptions {\n\t/**\n\t * The format used for displaying, or if relative time is used the format used for the title\n\t */\n\tformat?: Intl.DateTimeFormatOptions\n\t/**\n\t * Ignore seconds when displaying the relative time and just show `a few seconds ago`\n\t */\n\tignoreSeconds?: boolean\n\t/**\n\t * Wether to display the timestamp as time from now\n\t */\n\trelativeTime?: false | 'long' | 'short' | 'narrow'\n}\n\n/**\n * Composable for formatting time stamps using current users locale and language\n *\n * @param {import('vue').MaybeRef<Date | number>} timestamp Current timestamp\n * @param {object} opts Optional options\n * @param {Intl.DateTimeFormatOptions} opts.format The format used for displaying, or if relative time is used the format used for the title (optional)\n * @param {boolean} opts.ignoreSeconds Ignore seconds when displaying the relative time and just show `a few seconds ago`\n * @param {false | 'long' | 'short' | 'narrow'} opts.relativeTime Wether to display the timestamp as time from now (optional)\n */\nexport function useFormatDateTime(\n\ttimestamp: MaybeRef<Date|number> = Date.now(),\n\topts: MaybeRef<FormatDateOptions> = {},\n) {\n\t// Current time as Date.now is not reactive\n\tconst currentTime = ref(Date.now())\n\t// The interval ID for the window\n\tlet intervalId: number|undefined\n\n\tconst options = ref({\n\t\tformat: {\n\t\t\ttimeStyle: 'medium',\n\t\t\tdateStyle: 'short',\n\t\t} as Intl.DateTimeFormatOptions,\n\t\trelativeTime: 'long' as const,\n\t\tignoreSeconds: false,\n\t\t...toValue(opts),\n\t})\n\tconst wrappedOptions = computed<Required<FormatDateOptions>>(() => ({ ...toValue(opts), ...options.value }))\n\n\t/** ECMA Date object of the timestamp */\n\tconst date = computed(() => new Date(toValue(timestamp)))\n\n\tconst formattedFullTime = computed<string>(() => {\n\t\tconst formatter = new Intl.DateTimeFormat(getCanonicalLocale(), wrappedOptions.value.format)\n\t\treturn formatter.format(date.value)\n\t})\n\n\t/** Time string formatted for main text */\n\tconst formattedTime = computed<string>(() => {\n\t\tif (wrappedOptions.value.relativeTime !== false) {\n\t\t\tconst formatter = new Intl.RelativeTimeFormat(getLanguage(), { numeric: 'auto', style: wrappedOptions.value.relativeTime })\n\n\t\t\tconst diff = date.value.getTime() - currentTime.value\n\t\t\tconst seconds = diff / 1000\n\t\t\tif (Math.abs(seconds) <= 90) {\n\t\t\t\tif (wrappedOptions.value.ignoreSeconds) {\n\t\t\t\t\treturn FEW_SECONDS_AGO[wrappedOptions.value.relativeTime]\n\t\t\t\t} else {\n\t\t\t\t\treturn formatter.format(Math.round(seconds), 'second')\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst minutes = seconds / 60\n\t\t\tif (Math.abs(minutes) <= 90) {\n\t\t\t\treturn formatter.format(Math.round(minutes), 'minute')\n\t\t\t}\n\t\t\tconst hours = minutes / 60\n\t\t\tif (Math.abs(hours) <= 24) {\n\t\t\t\treturn formatter.format(Math.round(hours), 'hour')\n\t\t\t}\n\t\t\tconst days = hours / 24\n\t\t\tif (Math.abs(days) <= 6) {\n\t\t\t\treturn formatter.format(Math.round(days), 'day')\n\t\t\t}\n\t\t\tconst weeks = days / 7\n\t\t\tif (Math.abs(weeks) <= 4) {\n\t\t\t\treturn formatter.format(Math.round(weeks), 'week')\n\t\t\t}\n\t\t\tconst months = days / 30\n\t\t\tif (Math.abs(months) <= 12) {\n\t\t\t\treturn formatter.format(Math.round(months), 'month')\n\t\t\t}\n\t\t\treturn formatter.format(Math.round(days / 365), 'year')\n\t\t}\n\t\treturn formattedFullTime.value\n\t})\n\n\t// Set or clear interval if relative time is dis/enabled\n\twatchEffect(() => {\n\t\twindow.clearInterval(intervalId)\n\t\tintervalId = undefined\n\t\tif (wrappedOptions.value.relativeTime) {\n\t\t\tintervalId = window.setInterval(() => { currentTime.value = Date.now() }, 1000)\n\t\t}\n\t})\n\n\t// ensure interval is cleared\n\tonUnmounted(() => {\n\t\twindow.clearInterval(intervalId)\n\t})\n\n\treturn {\n\t\tformattedTime,\n\t\tformattedFullTime,\n\t\toptions,\n\t}\n}\n"],"names":[],"mappings":";;;;AAUA,MAAM,kBAAkB;AAAA,EACvB,MAAM,EAAE,mBAAmB;AAAA,EAC3B,OAAO,EAAE,aAAa;AAAA;AAAA,EACtB,QAAQ,EAAE,UAAU;AAAA;AACrB;AA0BO,SAAS,kBACf,YAAmC,KAAK,OACxC,OAAoC,CAAA,GACnC;AAED,QAAM,cAAc,IAAI,KAAK,IAAA,CAAK;AAE9B,MAAA;AAEJ,QAAM,UAAU,IAAI;AAAA,IACnB,QAAQ;AAAA,MACP,WAAW;AAAA,MACX,WAAW;AAAA,IACZ;AAAA,IACA,cAAc;AAAA,IACd,eAAe;AAAA,IACf,GAAG,QAAQ,IAAI;AAAA,EAAA,CACf;AACK,QAAA,iBAAiB,SAAsC,OAAO,EAAE,GAAG,QAAQ,IAAI,GAAG,GAAG,QAAQ,MAAA,EAAQ;AAGrG,QAAA,OAAO,SAAS,MAAM,IAAI,KAAK,QAAQ,SAAS,CAAC,CAAC;AAElD,QAAA,oBAAoB,SAAiB,MAAM;AAC1C,UAAA,YAAY,IAAI,KAAK,eAAe,sBAAsB,eAAe,MAAM,MAAM;AACpF,WAAA,UAAU,OAAO,KAAK,KAAK;AAAA,EAAA,CAClC;AAGK,QAAA,gBAAgB,SAAiB,MAAM;AACxC,QAAA,eAAe,MAAM,iBAAiB,OAAO;AAChD,YAAM,YAAY,IAAI,KAAK,mBAAmB,YAAY,GAAG,EAAE,SAAS,QAAQ,OAAO,eAAe,MAAM,cAAc;AAE1H,YAAM,OAAO,KAAK,MAAM,YAAY,YAAY;AAChD,YAAM,UAAU,OAAO;AACvB,UAAI,KAAK,IAAI,OAAO,KAAK,IAAI;AACxB,YAAA,eAAe,MAAM,eAAe;AAChC,iBAAA,gBAAgB,eAAe,MAAM,YAAY;AAAA,QAAA,OAClD;AACN,iBAAO,UAAU,OAAO,KAAK,MAAM,OAAO,GAAG,QAAQ;AAAA,QAAA;AAAA,MACtD;AAED,YAAM,UAAU,UAAU;AAC1B,UAAI,KAAK,IAAI,OAAO,KAAK,IAAI;AAC5B,eAAO,UAAU,OAAO,KAAK,MAAM,OAAO,GAAG,QAAQ;AAAA,MAAA;AAEtD,YAAM,QAAQ,UAAU;AACxB,UAAI,KAAK,IAAI,KAAK,KAAK,IAAI;AAC1B,eAAO,UAAU,OAAO,KAAK,MAAM,KAAK,GAAG,MAAM;AAAA,MAAA;AAElD,YAAM,OAAO,QAAQ;AACrB,UAAI,KAAK,IAAI,IAAI,KAAK,GAAG;AACxB,eAAO,UAAU,OAAO,KAAK,MAAM,IAAI,GAAG,KAAK;AAAA,MAAA;AAEhD,YAAM,QAAQ,OAAO;AACrB,UAAI,KAAK,IAAI,KAAK,KAAK,GAAG;AACzB,eAAO,UAAU,OAAO,KAAK,MAAM,KAAK,GAAG,MAAM;AAAA,MAAA;AAElD,YAAM,SAAS,OAAO;AACtB,UAAI,KAAK,IAAI,MAAM,KAAK,IAAI;AAC3B,eAAO,UAAU,OAAO,KAAK,MAAM,MAAM,GAAG,OAAO;AAAA,MAAA;AAEpD,aAAO,UAAU,OAAO,KAAK,MAAM,OAAO,GAAG,GAAG,MAAM;AAAA,IAAA;AAEvD,WAAO,kBAAkB;AAAA,EAAA,CACzB;AAGD,cAAY,MAAM;AACjB,WAAO,cAAc,UAAU;AAClB,iBAAA;AACT,QAAA,eAAe,MAAM,cAAc;AACzB,mBAAA,OAAO,YAAY,MAAM;AAAc,oBAAA,QAAQ,KAAK,IAAI;AAAA,SAAK,GAAI;AAAA,IAAA;AAAA,EAC/E,CACA;AAGD,cAAY,MAAM;AACjB,WAAO,cAAc,UAAU;AAAA,EAAA,CAC/B;AAEM,SAAA;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;"}
1
+ {"version":3,"file":"useFormatDateTime-L411ysPm.mjs","sources":["../../src/composables/useFormatDateTime.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { MaybeRef } from 'vue'\nimport { getCanonicalLocale, getLanguage } from '@nextcloud/l10n'\nimport { computed, onUnmounted, ref, toValue, watchEffect } from 'vue'\nimport { t } from '../l10n.js'\n\nconst FEW_SECONDS_AGO = {\n\tlong: t('a few seconds ago'),\n\tshort: t('seconds ago'), // FOR TRANSLATORS: Shorter version of 'a few seconds ago'\n\tnarrow: t('sec. ago'), // FOR TRANSLATORS: If possible in your language an even shorter version of 'a few seconds ago'\n}\n\ninterface FormatDateOptions {\n\t/**\n\t * The format used for displaying, or if relative time is used the format used for the title\n\t */\n\tformat?: Intl.DateTimeFormatOptions\n\t/**\n\t * Ignore seconds when displaying the relative time and just show `a few seconds ago`\n\t */\n\tignoreSeconds?: boolean\n\t/**\n\t * Wether to display the timestamp as time from now\n\t */\n\trelativeTime?: false | 'long' | 'short' | 'narrow'\n}\n\n/**\n * Composable for formatting time stamps using current users locale and language\n *\n * @param {import('vue').MaybeRef<Date | number>} timestamp Current timestamp\n * @param {object} opts Optional options\n * @param {Intl.DateTimeFormatOptions} opts.format The format used for displaying, or if relative time is used the format used for the title (optional)\n * @param {boolean} opts.ignoreSeconds Ignore seconds when displaying the relative time and just show `a few seconds ago`\n * @param {false | 'long' | 'short' | 'narrow'} opts.relativeTime Wether to display the timestamp as time from now (optional)\n */\nexport function useFormatDateTime(\n\ttimestamp: MaybeRef<Date|number> = Date.now(),\n\topts: MaybeRef<FormatDateOptions> = {},\n) {\n\t// Current time as Date.now is not reactive\n\tconst currentTime = ref(Date.now())\n\t// The interval ID for the window\n\tlet intervalId: number|undefined\n\n\tconst options = ref({\n\t\tformat: {\n\t\t\ttimeStyle: 'medium',\n\t\t\tdateStyle: 'short',\n\t\t} as Intl.DateTimeFormatOptions,\n\t\trelativeTime: 'long' as const,\n\t\tignoreSeconds: false,\n\t\t...toValue(opts),\n\t})\n\tconst wrappedOptions = computed<Required<FormatDateOptions>>(() => ({ ...toValue(opts), ...options.value }))\n\n\t/** ECMA Date object of the timestamp */\n\tconst date = computed(() => new Date(toValue(timestamp)))\n\n\tconst formattedFullTime = computed<string>(() => {\n\t\tconst formatter = new Intl.DateTimeFormat(getCanonicalLocale(), wrappedOptions.value.format)\n\t\treturn formatter.format(date.value)\n\t})\n\n\t/** Time string formatted for main text */\n\tconst formattedTime = computed<string>(() => {\n\t\tif (wrappedOptions.value.relativeTime !== false) {\n\t\t\tconst formatter = new Intl.RelativeTimeFormat(getLanguage(), { numeric: 'auto', style: wrappedOptions.value.relativeTime })\n\n\t\t\tconst diff = date.value.getTime() - currentTime.value\n\t\t\tconst seconds = diff / 1000\n\t\t\tif (Math.abs(seconds) <= 90) {\n\t\t\t\tif (wrappedOptions.value.ignoreSeconds) {\n\t\t\t\t\treturn FEW_SECONDS_AGO[wrappedOptions.value.relativeTime]\n\t\t\t\t} else {\n\t\t\t\t\treturn formatter.format(Math.round(seconds), 'second')\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst minutes = seconds / 60\n\t\t\tif (Math.abs(minutes) <= 90) {\n\t\t\t\treturn formatter.format(Math.round(minutes), 'minute')\n\t\t\t}\n\t\t\tconst hours = minutes / 60\n\t\t\tif (Math.abs(hours) <= 24) {\n\t\t\t\treturn formatter.format(Math.round(hours), 'hour')\n\t\t\t}\n\t\t\tconst days = hours / 24\n\t\t\tif (Math.abs(days) <= 6) {\n\t\t\t\treturn formatter.format(Math.round(days), 'day')\n\t\t\t}\n\t\t\tconst weeks = days / 7\n\t\t\tif (Math.abs(weeks) <= 4) {\n\t\t\t\treturn formatter.format(Math.round(weeks), 'week')\n\t\t\t}\n\t\t\tconst months = days / 30\n\t\t\tif (Math.abs(months) <= 12) {\n\t\t\t\treturn formatter.format(Math.round(months), 'month')\n\t\t\t}\n\t\t\treturn formatter.format(Math.round(days / 365), 'year')\n\t\t}\n\t\treturn formattedFullTime.value\n\t})\n\n\t// Set or clear interval if relative time is dis/enabled\n\twatchEffect(() => {\n\t\twindow.clearInterval(intervalId)\n\t\tintervalId = undefined\n\t\tif (wrappedOptions.value.relativeTime) {\n\t\t\tintervalId = window.setInterval(() => { currentTime.value = Date.now() }, 1000)\n\t\t}\n\t})\n\n\t// ensure interval is cleared\n\tonUnmounted(() => {\n\t\twindow.clearInterval(intervalId)\n\t})\n\n\treturn {\n\t\tformattedTime,\n\t\tformattedFullTime,\n\t\toptions,\n\t}\n}\n"],"names":[],"mappings":";;;;AAUA,MAAM,kBAAkB;AAAA,EACvB,MAAM,EAAE,mBAAmB;AAAA,EAC3B,OAAO,EAAE,aAAa;AAAA;AAAA,EACtB,QAAQ,EAAE,UAAU;AAAA;AACrB;AA0BO,SAAS,kBACf,YAAmC,KAAK,OACxC,OAAoC,CAAA,GACnC;AAED,QAAM,cAAc,IAAI,KAAK,IAAA,CAAK;AAE9B,MAAA;AAEJ,QAAM,UAAU,IAAI;AAAA,IACnB,QAAQ;AAAA,MACP,WAAW;AAAA,MACX,WAAW;AAAA,IACZ;AAAA,IACA,cAAc;AAAA,IACd,eAAe;AAAA,IACf,GAAG,QAAQ,IAAI;AAAA,EAAA,CACf;AACK,QAAA,iBAAiB,SAAsC,OAAO,EAAE,GAAG,QAAQ,IAAI,GAAG,GAAG,QAAQ,MAAA,EAAQ;AAGrG,QAAA,OAAO,SAAS,MAAM,IAAI,KAAK,QAAQ,SAAS,CAAC,CAAC;AAElD,QAAA,oBAAoB,SAAiB,MAAM;AAC1C,UAAA,YAAY,IAAI,KAAK,eAAe,sBAAsB,eAAe,MAAM,MAAM;AACpF,WAAA,UAAU,OAAO,KAAK,KAAK;AAAA,EAAA,CAClC;AAGK,QAAA,gBAAgB,SAAiB,MAAM;AACxC,QAAA,eAAe,MAAM,iBAAiB,OAAO;AAChD,YAAM,YAAY,IAAI,KAAK,mBAAmB,YAAY,GAAG,EAAE,SAAS,QAAQ,OAAO,eAAe,MAAM,cAAc;AAE1H,YAAM,OAAO,KAAK,MAAM,YAAY,YAAY;AAChD,YAAM,UAAU,OAAO;AACvB,UAAI,KAAK,IAAI,OAAO,KAAK,IAAI;AACxB,YAAA,eAAe,MAAM,eAAe;AAChC,iBAAA,gBAAgB,eAAe,MAAM,YAAY;AAAA,QAAA,OAClD;AACN,iBAAO,UAAU,OAAO,KAAK,MAAM,OAAO,GAAG,QAAQ;AAAA,QAAA;AAAA,MACtD;AAED,YAAM,UAAU,UAAU;AAC1B,UAAI,KAAK,IAAI,OAAO,KAAK,IAAI;AAC5B,eAAO,UAAU,OAAO,KAAK,MAAM,OAAO,GAAG,QAAQ;AAAA,MAAA;AAEtD,YAAM,QAAQ,UAAU;AACxB,UAAI,KAAK,IAAI,KAAK,KAAK,IAAI;AAC1B,eAAO,UAAU,OAAO,KAAK,MAAM,KAAK,GAAG,MAAM;AAAA,MAAA;AAElD,YAAM,OAAO,QAAQ;AACrB,UAAI,KAAK,IAAI,IAAI,KAAK,GAAG;AACxB,eAAO,UAAU,OAAO,KAAK,MAAM,IAAI,GAAG,KAAK;AAAA,MAAA;AAEhD,YAAM,QAAQ,OAAO;AACrB,UAAI,KAAK,IAAI,KAAK,KAAK,GAAG;AACzB,eAAO,UAAU,OAAO,KAAK,MAAM,KAAK,GAAG,MAAM;AAAA,MAAA;AAElD,YAAM,SAAS,OAAO;AACtB,UAAI,KAAK,IAAI,MAAM,KAAK,IAAI;AAC3B,eAAO,UAAU,OAAO,KAAK,MAAM,MAAM,GAAG,OAAO;AAAA,MAAA;AAEpD,aAAO,UAAU,OAAO,KAAK,MAAM,OAAO,GAAG,GAAG,MAAM;AAAA,IAAA;AAEvD,WAAO,kBAAkB;AAAA,EAAA,CACzB;AAGD,cAAY,MAAM;AACjB,WAAO,cAAc,UAAU;AAClB,iBAAA;AACT,QAAA,eAAe,MAAM,cAAc;AACzB,mBAAA,OAAO,YAAY,MAAM;AAAc,oBAAA,QAAQ,KAAK,IAAI;AAAA,SAAK,GAAI;AAAA,IAAA;AAAA,EAC/E,CACA;AAGD,cAAY,MAAM;AACjB,WAAO,cAAc,UAAU;AAAA,EAAA,CAC/B;AAEM,SAAA;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,EACD;AACD;"}
@@ -1,4 +1,4 @@
1
- import { g as generatePalette } from "./colors-CSUSQx1k.mjs";
1
+ import { g as generatePalette } from "./colors-BPGhD2C5.mjs";
2
2
  function hashCode(str) {
3
3
  let hash = 0;
4
4
  if (str.length === 0) {
@@ -19,4 +19,4 @@ function usernameToColor(username) {
19
19
  export {
20
20
  usernameToColor as u
21
21
  };
22
- //# sourceMappingURL=usernameToColor-Bl9NGU_9.mjs.map
22
+ //# sourceMappingURL=usernameToColor-CuTR6O_B.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"usernameToColor-Bl9NGU_9.mjs","sources":["../../src/functions/usernameToColor/usernameToColor.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Color } from '../../utils/colors.ts'\nimport { generatePalette } from '../../utils/colors.ts'\n\n/**\n * Create a simple hash from a string\n * @param str - The string to hash\n */\nfunction hashCode(str: string): number {\n\tlet hash = 0\n\n\tif (str.length === 0) {\n\t\treturn hash\n\t}\n\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst chr = str.charCodeAt(i)\n\t\thash = ((hash << 5) - hash) + chr\n\t}\n\n\treturn Math.abs(hash)\n}\n\n/**\n * Generate a color from a username\n *\n * @param username - Display name or user id to generate from\n * @return The RGB color\n */\nexport function usernameToColor(username: string): Color {\n\tconst steps = 6\n\tconst finalPalette = generatePalette(steps)\n\tconst hash = hashCode(username.toLocaleLowerCase())\n\n\treturn finalPalette[hash % finalPalette.length]\n}\n"],"names":[],"mappings":";AAYA,SAAS,SAAS,KAAqB;AACtC,MAAI,OAAO;AAEP,MAAA,IAAI,WAAW,GAAG;AACd,WAAA;AAAA,EAAA;AAGR,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AAC9B,UAAA,MAAM,IAAI,WAAW,CAAC;AACnB,YAAA,QAAQ,KAAK,OAAQ;AAAA,EAAA;AAGxB,SAAA,KAAK,IAAI,IAAI;AACrB;AAQO,SAAS,gBAAgB,UAAyB;AACxD,QAAM,QAAQ;AACR,QAAA,eAAe,gBAAgB,KAAK;AAC1C,QAAM,OAAO,SAAS,SAAS,kBAAA,CAAmB;AAE3C,SAAA,aAAa,OAAO,aAAa,MAAM;AAC/C;"}
1
+ {"version":3,"file":"usernameToColor-CuTR6O_B.mjs","sources":["../../src/functions/usernameToColor/usernameToColor.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2018 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Color } from '../../utils/colors.ts'\nimport { generatePalette } from '../../utils/colors.ts'\n\n/**\n * Create a simple hash from a string\n * @param str - The string to hash\n */\nfunction hashCode(str: string): number {\n\tlet hash = 0\n\n\tif (str.length === 0) {\n\t\treturn hash\n\t}\n\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst chr = str.charCodeAt(i)\n\t\thash = ((hash << 5) - hash) + chr\n\t}\n\n\treturn Math.abs(hash)\n}\n\n/**\n * Generate a color from a username\n *\n * @param username - Display name or user id to generate from\n * @return The RGB color\n */\nexport function usernameToColor(username: string): Color {\n\tconst steps = 6\n\tconst finalPalette = generatePalette(steps)\n\tconst hash = hashCode(username.toLocaleLowerCase())\n\n\treturn finalPalette[hash % finalPalette.length]\n}\n"],"names":[],"mappings":";AAYA,SAAS,SAAS,KAAqB;AACtC,MAAI,OAAO;AAEP,MAAA,IAAI,WAAW,GAAG;AACd,WAAA;AAAA,EAAA;AAGR,WAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AAC9B,UAAA,MAAM,IAAI,WAAW,CAAC;AACnB,YAAA,QAAQ,KAAK,OAAQ;AAAA,EAAA;AAGxB,SAAA,KAAK,IAAI,IAAI;AACrB;AAQO,SAAS,gBAAgB,UAAyB;AACxD,QAAM,QAAQ;AACR,QAAA,eAAe,gBAAgB,KAAK;AAC1C,QAAM,OAAO,SAAS,SAAS,kBAAA,CAAmB;AAE3C,SAAA,aAAa,OAAO,aAAa,MAAM;AAC/C;"}