@nextcloud/vue 9.0.0-alpha.8 → 9.0.0-rc.0

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 (335) hide show
  1. package/CHANGELOG.md +88 -12
  2. package/dist/assets/{NcActionButton-d8aZCq9u.css → NcActionButton-DfdRrSEu.css} +16 -16
  3. package/dist/assets/{NcActionCheckbox-tMIOGziy.css → NcActionCheckbox--lTDnNsx.css} +12 -12
  4. package/dist/assets/{NcActionInput-C-rQsTEA.css → NcActionInput-BNWL2Q-3.css} +62 -62
  5. package/dist/assets/{NcActionLink-jSPFFKV8.css → NcActionLink-C9_ycPLF.css} +12 -12
  6. package/dist/assets/{NcActionRadio-xdrmoEIq.css → NcActionRadio-DnAjyubC.css} +12 -12
  7. package/dist/assets/{NcActionRouter-qNNqBZab.css → NcActionRouter-CVsc7Ezc.css} +15 -15
  8. package/dist/assets/{NcActionText-0XNfku_2.css → NcActionText-C7y7Pe6P.css} +17 -17
  9. package/dist/assets/{NcActionTextEditable-ZlNtR_B_.css → NcActionTextEditable-OBnWSj_T.css} +60 -60
  10. package/dist/assets/{NcAppContent-CLu_1q4O.css → NcAppContent-CvTesBem.css} +23 -23
  11. package/dist/assets/{NcAppNavigationItem-aVy0uQwf.css → NcAppNavigationItem-DRU-cLRN.css} +30 -30
  12. package/dist/assets/{NcAppNavigationNewItem-rCrG0Uuo.css → NcAppNavigationNewItem-CsqJ6c8v.css} +32 -32
  13. package/dist/assets/{NcAvatar-DUKfNDGL.css → NcAvatar-UxFZ39EC.css} +24 -24
  14. package/dist/assets/{NcButton-wmjlEdLP.css → NcButton-DbE0wInI.css} +68 -64
  15. package/dist/assets/{NcCheckboxRadioSwitch-uwXbP_jb.css → NcCheckboxRadioSwitch-sqQXUuVB.css} +45 -44
  16. package/dist/assets/NcDateTimePicker-pmbCzZnb.css +83 -0
  17. package/dist/assets/{NcDialog-Dkeikssh.css → NcDialog-bP7Jt0ZE.css} +15 -15
  18. package/dist/assets/{NcHeaderButton-BPIasMkw.css → NcHeaderButton-Ct8k0yDh.css} +7 -7
  19. package/dist/assets/{NcHeaderMenu-ZmtqwEYA.css → NcHeaderMenu-zo6kw_jn.css} +11 -11
  20. package/dist/assets/{NcIconSvgWrapper-DQFhmjCC.css → NcIconSvgWrapper-BzRHs8iB.css} +11 -8
  21. package/dist/assets/{NcMentionBubble-BL05HUeF.css → NcMentionBubble-CB5c5ue2.css} +10 -9
  22. package/dist/assets/{NcPopover-ChETNAVH.css → NcPopover-zFjgXDlM.css} +13 -0
  23. package/dist/assets/{NcRichContenteditable-Bxi-Ki0j.css → NcRichContenteditable-CkyUKlIz.css} +31 -28
  24. package/dist/assets/{NcRichText-Dvt8jvWN.css → NcRichText-BbVi69cc.css} +87 -89
  25. package/dist/assets/{NcSelect-B6DUjUdl.css → NcSelect-BCBpQnFL.css} +0 -3
  26. package/dist/assets/{index-Du_FXiPy.css → index-CjPwAJ46.css} +68 -69
  27. package/dist/assets/index-D9L0rgJk.css +4 -0
  28. package/dist/chunks/{NcActionButton-BdQ_qmvW.mjs → NcActionButton-BZEDhdCm.mjs} +48 -6
  29. package/dist/chunks/NcActionButton-BZEDhdCm.mjs.map +1 -0
  30. package/dist/chunks/{NcActionButtonGroup-TitZerDl.mjs → NcActionButtonGroup-Dqt8Gekb.mjs} +2 -2
  31. package/dist/chunks/{NcActionButtonGroup-TitZerDl.mjs.map → NcActionButtonGroup-Dqt8Gekb.mjs.map} +1 -1
  32. package/dist/chunks/{NcActionCheckbox-CUYbo1rw.mjs → NcActionCheckbox-DLPDTACR.mjs} +3 -3
  33. package/dist/chunks/{NcActionCheckbox-CUYbo1rw.mjs.map → NcActionCheckbox-DLPDTACR.mjs.map} +1 -1
  34. package/dist/chunks/{NcActionInput-TI648L3V.mjs → NcActionInput-C_rmP0eZ.mjs} +10 -10
  35. package/dist/chunks/{NcActionInput-TI648L3V.mjs.map → NcActionInput-C_rmP0eZ.mjs.map} +1 -1
  36. package/dist/chunks/{NcActionLink-cQlsviu9.mjs → NcActionLink-BTIApspK.mjs} +3 -3
  37. package/dist/chunks/{NcActionLink-cQlsviu9.mjs.map → NcActionLink-BTIApspK.mjs.map} +1 -1
  38. package/dist/chunks/{NcActionRadio-tORL1qPt.mjs → NcActionRadio-CPoWB58D.mjs} +3 -3
  39. package/dist/chunks/{NcActionRadio-tORL1qPt.mjs.map → NcActionRadio-CPoWB58D.mjs.map} +1 -1
  40. package/dist/chunks/{NcActionRouter-Bw1tpEZt.mjs → NcActionRouter-DATNpU_e.mjs} +3 -3
  41. package/dist/chunks/{NcActionRouter-Bw1tpEZt.mjs.map → NcActionRouter-DATNpU_e.mjs.map} +1 -1
  42. package/dist/chunks/{NcActionText-VLCHOiIy.mjs → NcActionText-3mJjsJz_.mjs} +3 -3
  43. package/dist/chunks/{NcActionText-VLCHOiIy.mjs.map → NcActionText-3mJjsJz_.mjs.map} +1 -1
  44. package/dist/chunks/{NcActionTextEditable-nTbwgRy2.mjs → NcActionTextEditable-Dv1_bMFY.mjs} +3 -3
  45. package/dist/chunks/NcActionTextEditable-Dv1_bMFY.mjs.map +1 -0
  46. package/dist/chunks/{NcActions-CgKHXNbF.mjs → NcActions-DpYAcY6a.mjs} +19 -6
  47. package/dist/chunks/NcActions-DpYAcY6a.mjs.map +1 -0
  48. package/dist/chunks/{NcAppContent-C4gBVRQs.mjs → NcAppContent-BMiA5ySy.mjs} +19 -21
  49. package/dist/chunks/NcAppContent-BMiA5ySy.mjs.map +1 -0
  50. package/dist/chunks/{NcAppNavigation-DbRpHbi9.mjs → NcAppNavigation-DuLUJbsJ.mjs} +2 -2
  51. package/dist/chunks/{NcAppNavigation-DbRpHbi9.mjs.map → NcAppNavigation-DuLUJbsJ.mjs.map} +1 -1
  52. package/dist/chunks/{NcAppNavigationCaption-R_UZ7iKw.mjs → NcAppNavigationCaption-DTVdWgpf.mjs} +2 -2
  53. package/dist/chunks/{NcAppNavigationCaption-R_UZ7iKw.mjs.map → NcAppNavigationCaption-DTVdWgpf.mjs.map} +1 -1
  54. package/dist/chunks/{NcAppNavigationItem-CxYtFEhV.mjs → NcAppNavigationItem-5KG5Pl2c.mjs} +9 -9
  55. package/dist/chunks/{NcAppNavigationItem-CxYtFEhV.mjs.map → NcAppNavigationItem-5KG5Pl2c.mjs.map} +1 -1
  56. package/dist/chunks/{NcAppNavigationNew-sMVo_IoL.mjs → NcAppNavigationNew-BUQgcKdv.mjs} +2 -2
  57. package/dist/chunks/{NcAppNavigationNew-sMVo_IoL.mjs.map → NcAppNavigationNew-BUQgcKdv.mjs.map} +1 -1
  58. package/dist/chunks/{NcAppNavigationNewItem-CJZcL6GH.mjs → NcAppNavigationNewItem-CRCOC0hV.mjs} +4 -4
  59. package/dist/chunks/{NcAppNavigationNewItem-CJZcL6GH.mjs.map → NcAppNavigationNewItem-CRCOC0hV.mjs.map} +1 -1
  60. package/dist/chunks/{NcAppNavigationSearch-Dbhh-Vtw.mjs → NcAppNavigationSearch-AT_S98B0.mjs} +3 -3
  61. package/dist/chunks/{NcAppNavigationSearch-Dbhh-Vtw.mjs.map → NcAppNavigationSearch-AT_S98B0.mjs.map} +1 -1
  62. package/dist/chunks/{NcAppNavigationSettings-Bfo3EWk_.mjs → NcAppNavigationSettings-DFsvNlME.mjs} +3 -3
  63. package/dist/chunks/{NcAppNavigationSettings-Bfo3EWk_.mjs.map → NcAppNavigationSettings-DFsvNlME.mjs.map} +1 -1
  64. package/dist/chunks/{NcAppNavigationToggle-Ys-PjFo3.mjs → NcAppNavigationToggle-CqZs9ls-.mjs} +3 -3
  65. package/dist/chunks/{NcAppNavigationToggle-Ys-PjFo3.mjs.map → NcAppNavigationToggle-CqZs9ls-.mjs.map} +1 -1
  66. package/dist/chunks/{NcAppSettingsDialog-Cc-OdY9a.mjs → NcAppSettingsDialog-CTUoQezW.mjs} +4 -4
  67. package/dist/chunks/{NcAppSettingsDialog-Cc-OdY9a.mjs.map → NcAppSettingsDialog-CTUoQezW.mjs.map} +1 -1
  68. package/dist/chunks/{NcAppSidebar-Dgwj8O_Z.mjs → NcAppSidebar-B7shIqzm.mjs} +5 -5
  69. package/dist/chunks/{NcAppSidebar-Dgwj8O_Z.mjs.map → NcAppSidebar-B7shIqzm.mjs.map} +1 -1
  70. package/dist/chunks/{NcAvatar-CA8y4d-c.mjs → NcAvatar-CvPCBukb.mjs} +36 -14
  71. package/dist/chunks/NcAvatar-CvPCBukb.mjs.map +1 -0
  72. package/dist/chunks/{NcBreadcrumb-DSjIxTeU.mjs → NcBreadcrumb-C3qGDt3z.mjs} +3 -3
  73. package/dist/chunks/{NcBreadcrumb-DSjIxTeU.mjs.map → NcBreadcrumb-C3qGDt3z.mjs.map} +1 -1
  74. package/dist/chunks/{NcBreadcrumbs-jPvP6Cmo.mjs → NcBreadcrumbs-DtBCo9yI.mjs} +6 -7
  75. package/dist/chunks/{NcBreadcrumbs-jPvP6Cmo.mjs.map → NcBreadcrumbs-DtBCo9yI.mjs.map} +1 -1
  76. package/dist/chunks/NcButton-Byg8-ta1.mjs +102 -0
  77. package/dist/chunks/NcButton-Byg8-ta1.mjs.map +1 -0
  78. package/dist/chunks/{NcCheckboxRadioSwitch-CWU_M_ui.mjs → NcCheckboxRadioSwitch-DrNlVZw8.mjs} +29 -27
  79. package/dist/chunks/NcCheckboxRadioSwitch-DrNlVZw8.mjs.map +1 -0
  80. package/dist/chunks/{NcChip-C3U2HYR9.mjs → NcChip-Cq8DrWKb.mjs} +5 -5
  81. package/dist/chunks/{NcChip-C3U2HYR9.mjs.map → NcChip-Cq8DrWKb.mjs.map} +1 -1
  82. package/dist/chunks/{NcCollectionList-BtHsipae.mjs → NcCollectionList-CFuwV9sI.mjs} +6 -6
  83. package/dist/chunks/{NcCollectionList-BtHsipae.mjs.map → NcCollectionList-CFuwV9sI.mjs.map} +1 -1
  84. package/dist/chunks/{NcColorPicker-BI-Is4nj.mjs → NcColorPicker-Clo5oIYN.mjs} +5 -5
  85. package/dist/chunks/{NcColorPicker-BI-Is4nj.mjs.map → NcColorPicker-Clo5oIYN.mjs.map} +1 -1
  86. package/dist/chunks/{NcContent-BcF6f3N-.mjs → NcContent-CUuf0HwJ.mjs} +4 -4
  87. package/dist/chunks/{NcContent-BcF6f3N-.mjs.map → NcContent-CUuf0HwJ.mjs.map} +1 -1
  88. package/dist/chunks/{NcDashboardWidget-1rVqTzgV.mjs → NcDashboardWidget-CXw7Hxc8.mjs} +4 -4
  89. package/dist/chunks/{NcDashboardWidget-1rVqTzgV.mjs.map → NcDashboardWidget-CXw7Hxc8.mjs.map} +1 -1
  90. package/dist/chunks/{NcDashboardWidgetItem-7RXY5EKJ.mjs → NcDashboardWidgetItem-C6GoJEri.mjs} +4 -4
  91. package/dist/chunks/{NcDashboardWidgetItem-7RXY5EKJ.mjs.map → NcDashboardWidgetItem-C6GoJEri.mjs.map} +1 -1
  92. package/dist/chunks/{NcDateTime.vue_vue_type_script_setup_true_lang-DtP-oauZ.mjs → NcDateTime.vue_vue_type_script_setup_true_lang-BYXau4sd.mjs} +2 -2
  93. package/dist/chunks/{NcDateTime.vue_vue_type_script_setup_true_lang-DtP-oauZ.mjs.map → NcDateTime.vue_vue_type_script_setup_true_lang-BYXau4sd.mjs.map} +1 -1
  94. package/dist/chunks/{NcDateTimePicker-BzfuHym4.mjs → NcDateTimePicker-CDFvxL3U.mjs} +79 -37
  95. package/dist/chunks/NcDateTimePicker-CDFvxL3U.mjs.map +1 -0
  96. package/dist/chunks/{NcDateTimePickerNative-Dake1IML.mjs → NcDateTimePickerNative-BRuMK89z.mjs} +2 -2
  97. package/dist/chunks/{NcDateTimePickerNative-Dake1IML.mjs.map → NcDateTimePickerNative-BRuMK89z.mjs.map} +1 -1
  98. package/dist/chunks/{NcDialog-_pc2BPHU.mjs → NcDialog-BX0IET9Y.mjs} +7 -7
  99. package/dist/chunks/NcDialog-BX0IET9Y.mjs.map +1 -0
  100. package/dist/chunks/NcDialogButton.vue_vue_type_script_setup_true_lang-DbzPc_gW.mjs +69 -0
  101. package/dist/chunks/NcDialogButton.vue_vue_type_script_setup_true_lang-DbzPc_gW.mjs.map +1 -0
  102. package/dist/chunks/{NcEmojiPicker-CWbez_of.mjs → NcEmojiPicker-C30Ofq8B.mjs} +7 -7
  103. package/dist/chunks/{NcEmojiPicker-CWbez_of.mjs.map → NcEmojiPicker-C30Ofq8B.mjs.map} +1 -1
  104. package/dist/chunks/{NcHeaderButton-BsstEWtv.mjs → NcHeaderButton-BXfTpkIm.mjs} +4 -4
  105. package/dist/chunks/{NcHeaderButton-BsstEWtv.mjs.map → NcHeaderButton-BXfTpkIm.mjs.map} +1 -1
  106. package/dist/chunks/{NcHeaderMenu-ZzoCwPvX.mjs → NcHeaderMenu-CEH_-KT_.mjs} +5 -5
  107. package/dist/chunks/{NcHeaderMenu-ZzoCwPvX.mjs.map → NcHeaderMenu-CEH_-KT_.mjs.map} +1 -1
  108. package/dist/chunks/{NcIconSvgWrapper-BYTrkA66.mjs → NcIconSvgWrapper-Bc3ogp8T.mjs} +34 -21
  109. package/dist/chunks/NcIconSvgWrapper-Bc3ogp8T.mjs.map +1 -0
  110. package/dist/chunks/{NcInputConfirmCancel-CX56m05a.mjs → NcInputConfirmCancel-DeWD9uc6.mjs} +3 -3
  111. package/dist/chunks/{NcInputConfirmCancel-CX56m05a.mjs.map → NcInputConfirmCancel-DeWD9uc6.mjs.map} +1 -1
  112. package/dist/chunks/{NcInputField-DdZlDVwQ.mjs → NcInputField-BBS1E7r-.mjs} +2 -2
  113. package/dist/chunks/{NcInputField-DdZlDVwQ.mjs.map → NcInputField-BBS1E7r-.mjs.map} +1 -1
  114. package/dist/chunks/{NcListItem-DF8Yv05m.mjs → NcListItem-CVX52kG-.mjs} +2 -2
  115. package/dist/chunks/{NcListItem-DF8Yv05m.mjs.map → NcListItem-CVX52kG-.mjs.map} +1 -1
  116. package/dist/chunks/{NcListItemIcon-nzw_x2Q5.mjs → NcListItemIcon-Cc6vXRrY.mjs} +4 -4
  117. package/dist/chunks/{NcListItemIcon-nzw_x2Q5.mjs.map → NcListItemIcon-Cc6vXRrY.mjs.map} +1 -1
  118. package/dist/chunks/{NcMentionBubble.vue_vue_type_style_index_0_scoped_6c8d0da9_lang-DYJMHclV.mjs → NcMentionBubble.vue_vue_type_style_index_0_scoped_5b8f093f_lang-DZbkIMTW.mjs} +2 -2
  119. package/dist/chunks/{NcMentionBubble.vue_vue_type_style_index_0_scoped_6c8d0da9_lang-DYJMHclV.mjs.map → NcMentionBubble.vue_vue_type_style_index_0_scoped_5b8f093f_lang-DZbkIMTW.mjs.map} +1 -1
  120. package/dist/chunks/{NcPasswordField-BnnlEhT1.mjs → NcPasswordField-CYPRKGml.mjs} +3 -3
  121. package/dist/chunks/{NcPasswordField-BnnlEhT1.mjs.map → NcPasswordField-CYPRKGml.mjs.map} +1 -1
  122. package/dist/chunks/{NcPopover-C3ZoyUjc.mjs → NcPopover-EPnt2iHh.mjs} +152 -26
  123. package/dist/chunks/NcPopover-EPnt2iHh.mjs.map +1 -0
  124. package/dist/chunks/{NcRelatedResourcesPanel-D2YLEouH.mjs → NcRelatedResourcesPanel-Bcy58V31.mjs} +4 -4
  125. package/dist/chunks/{NcRelatedResourcesPanel-D2YLEouH.mjs.map → NcRelatedResourcesPanel-Bcy58V31.mjs.map} +1 -1
  126. package/dist/chunks/{NcRichContenteditable-B16VJW0Y.mjs → NcRichContenteditable-BR08SbpA.mjs} +209 -44
  127. package/dist/chunks/NcRichContenteditable-BR08SbpA.mjs.map +1 -0
  128. package/dist/chunks/{NcRichText-4jIBSmap.mjs → NcRichText-jZif8PdV.mjs} +8 -8
  129. package/dist/chunks/{NcRichText-4jIBSmap.mjs.map → NcRichText-jZif8PdV.mjs.map} +1 -1
  130. package/dist/chunks/NcSavingIndicatorIcon.vue_vue_type_script_setup_true_lang-DlRBo3QU.mjs +58 -0
  131. package/dist/chunks/NcSavingIndicatorIcon.vue_vue_type_script_setup_true_lang-DlRBo3QU.mjs.map +1 -0
  132. package/dist/chunks/{NcSelect-CAx_ixPU.mjs → NcSelect-BkTH-Yqm.mjs} +25 -68
  133. package/dist/chunks/NcSelect-BkTH-Yqm.mjs.map +1 -0
  134. package/dist/chunks/{NcSelectTags-UXzC7lDz.mjs → NcSelectTags-BY8LM7qV.mjs} +3 -3
  135. package/dist/chunks/{NcSelectTags-UXzC7lDz.mjs.map → NcSelectTags-BY8LM7qV.mjs.map} +1 -1
  136. package/dist/chunks/{NcSettingsInputText-BEHu3xAI.mjs → NcSettingsInputText-B129n9sr.mjs} +3 -3
  137. package/dist/chunks/{NcSettingsInputText-BEHu3xAI.mjs.map → NcSettingsInputText-B129n9sr.mjs.map} +1 -1
  138. package/dist/chunks/{NcSettingsSection-X7f0W7vZ.mjs → NcSettingsSection-CjWtq7TT.mjs} +2 -2
  139. package/dist/chunks/{NcSettingsSection-X7f0W7vZ.mjs.map → NcSettingsSection-CjWtq7TT.mjs.map} +1 -1
  140. package/dist/chunks/{NcSettingsSelectGroup-DfrKchOy.mjs → NcSettingsSelectGroup-B8uq0KIw.mjs} +4 -4
  141. package/dist/chunks/{NcSettingsSelectGroup-DfrKchOy.mjs.map → NcSettingsSelectGroup-B8uq0KIw.mjs.map} +1 -1
  142. package/dist/chunks/{NcTextField-BTzKCPza.mjs → NcTextField-KGXtf7Y6.mjs} +4 -4
  143. package/dist/chunks/{NcTextField-BTzKCPza.mjs.map → NcTextField-KGXtf7Y6.mjs.map} +1 -1
  144. package/dist/chunks/NcTimezonePicker.vue_vue_type_script_setup_true_lang-DxoB-jLa.mjs +98 -0
  145. package/dist/chunks/NcTimezonePicker.vue_vue_type_script_setup_true_lang-DxoB-jLa.mjs.map +1 -0
  146. package/dist/chunks/{NcUserBubble-Dgzog0Ps.mjs → NcUserBubble-qqRewR9C.mjs} +3 -3
  147. package/dist/chunks/{NcUserBubble-Dgzog0Ps.mjs.map → NcUserBubble-qqRewR9C.mjs.map} +1 -1
  148. package/dist/chunks/{NcUserStatusIcon-DvYiEs2L.mjs → NcUserStatusIcon-DpZVD4HJ.mjs} +3 -3
  149. package/dist/chunks/{NcUserStatusIcon-DvYiEs2L.mjs.map → NcUserStatusIcon-DpZVD4HJ.mjs.map} +1 -1
  150. package/dist/chunks/{ScopeComponent-BWZEma4R.mjs → ScopeComponent-BIpNSmeE.mjs} +2 -2
  151. package/dist/chunks/{ScopeComponent-BWZEma4R.mjs.map → ScopeComponent-BIpNSmeE.mjs.map} +1 -1
  152. package/dist/chunks/{_l10n-7kR7gXFc.mjs → _l10n-BNGeEX3W.mjs} +58 -62
  153. package/dist/chunks/_l10n-BNGeEX3W.mjs.map +1 -0
  154. package/dist/chunks/{colors-BJbWzaQ-.mjs → colors-CSUSQx1k.mjs} +2 -2
  155. package/dist/chunks/{colors-BJbWzaQ-.mjs.map → colors-CSUSQx1k.mjs.map} +1 -1
  156. package/dist/chunks/{referencePickerModal-BpNnwC_g.mjs → referencePickerModal-DzM7CkKN.mjs} +6 -6
  157. package/dist/chunks/{referencePickerModal-BpNnwC_g.mjs.map → referencePickerModal-DzM7CkKN.mjs.map} +1 -1
  158. package/dist/chunks/{useFormatDateTime-B5sWtJdj.mjs → useFormatDateTime-BPGWjR3-.mjs} +2 -2
  159. package/dist/chunks/{useFormatDateTime-B5sWtJdj.mjs.map → useFormatDateTime-BPGWjR3-.mjs.map} +1 -1
  160. package/dist/chunks/{usernameToColor-CzXWY0j4.mjs → usernameToColor-Bl9NGU_9.mjs} +2 -2
  161. package/dist/chunks/{usernameToColor-CzXWY0j4.mjs.map → usernameToColor-Bl9NGU_9.mjs.map} +1 -1
  162. package/dist/components/NcActionButton/NcActionButton.vue.d.ts +3 -3
  163. package/dist/components/NcActionButton/index.mjs +1 -1
  164. package/dist/components/NcActionButtonGroup/index.mjs +1 -1
  165. package/dist/components/NcActionCheckbox/NcActionCheckbox.vue.d.ts +2 -2
  166. package/dist/components/NcActionCheckbox/index.mjs +1 -1
  167. package/dist/components/NcActionInput/index.mjs +1 -1
  168. package/dist/components/NcActionLink/index.mjs +1 -1
  169. package/dist/components/NcActionRadio/NcActionRadio.vue.d.ts +2 -2
  170. package/dist/components/NcActionRadio/index.mjs +1 -1
  171. package/dist/components/NcActionRouter/NcActionRouter.vue.d.ts +2 -2
  172. package/dist/components/NcActionRouter/index.mjs +1 -1
  173. package/dist/components/NcActionText/index.mjs +1 -1
  174. package/dist/components/NcActionTextEditable/NcActionTextEditable.vue.d.ts +2 -2
  175. package/dist/components/NcActionTextEditable/index.mjs +1 -1
  176. package/dist/components/NcActions/index.mjs +1 -1
  177. package/dist/components/NcAppContent/index.mjs +1 -1
  178. package/dist/components/NcAppNavigation/index.mjs +1 -1
  179. package/dist/components/NcAppNavigationCaption/index.mjs +1 -1
  180. package/dist/components/NcAppNavigationItem/index.mjs +1 -1
  181. package/dist/components/NcAppNavigationNew/index.mjs +1 -1
  182. package/dist/components/NcAppNavigationNewItem/index.mjs +1 -1
  183. package/dist/components/NcAppNavigationSearch/index.mjs +1 -1
  184. package/dist/components/NcAppNavigationSettings/NcAppNavigationSettings.vue.d.ts +3 -10
  185. package/dist/components/NcAppNavigationSettings/index.mjs +1 -1
  186. package/dist/components/NcAppNavigationToggle/index.mjs +1 -1
  187. package/dist/components/NcAppSettingsDialog/index.mjs +1 -1
  188. package/dist/components/NcAppSidebar/index.mjs +1 -1
  189. package/dist/components/NcAppSidebarTab/NcAppSidebarTab.vue.d.ts +1 -1
  190. package/dist/components/NcAvatar/index.mjs +1 -1
  191. package/dist/components/NcBlurHash/NcBlurHash.vue.d.ts +6 -13
  192. package/dist/components/NcBreadcrumb/index.mjs +1 -1
  193. package/dist/components/NcBreadcrumbs/index.mjs +1 -1
  194. package/dist/components/NcButton/NcButton.vue.d.ts +102 -238
  195. package/dist/components/NcButton/index.d.ts +2 -2
  196. package/dist/components/NcButton/index.mjs +1 -4
  197. package/dist/components/NcCheckboxRadioSwitch/index.mjs +1 -1
  198. package/dist/components/NcChip/NcChip.vue.d.ts +3 -32
  199. package/dist/components/NcChip/index.mjs +1 -1
  200. package/dist/components/NcCollectionList/index.mjs +1 -1
  201. package/dist/components/NcColorPicker/index.mjs +1 -1
  202. package/dist/components/NcContent/index.mjs +1 -1
  203. package/dist/components/NcCounterBubble/NcCounterBubble.vue.d.ts +1 -1
  204. package/dist/components/NcDashboardWidget/index.mjs +1 -1
  205. package/dist/components/NcDashboardWidgetItem/index.mjs +1 -1
  206. package/dist/components/NcDateTime/NcDateTime.vue.d.ts +2 -31
  207. package/dist/components/NcDateTime/index.mjs +1 -1
  208. package/dist/components/NcDateTimePicker/NcDateTimePicker.vue.d.ts +49 -60
  209. package/dist/components/NcDateTimePicker/index.mjs +1 -1
  210. package/dist/components/NcDateTimePickerNative/index.mjs +1 -1
  211. package/dist/components/NcDialog/NcDialog.vue.d.ts +58 -132
  212. package/dist/components/NcDialog/index.mjs +1 -1
  213. package/dist/components/NcDialogButton/NcDialogButton.vue.d.ts +34 -110
  214. package/dist/components/NcDialogButton/index.mjs +1 -1
  215. package/dist/components/NcEmojiPicker/index.mjs +1 -1
  216. package/dist/components/NcHeaderButton/NcHeaderButton.vue.d.ts +4 -13
  217. package/dist/components/NcHeaderButton/index.mjs +1 -1
  218. package/dist/components/NcHeaderMenu/index.mjs +1 -1
  219. package/dist/components/NcIconSvgWrapper/NcIconSvgWrapper.vue.d.ts +20 -11
  220. package/dist/components/NcIconSvgWrapper/index.mjs +1 -1
  221. package/dist/components/NcInputField/index.mjs +1 -1
  222. package/dist/components/NcListItem/index.mjs +1 -1
  223. package/dist/components/NcListItemIcon/index.mjs +1 -1
  224. package/dist/components/NcLoadingIcon/NcLoadingIcon.vue.d.ts +1 -1
  225. package/dist/components/NcModal/index.mjs +52 -48
  226. package/dist/components/NcModal/index.mjs.map +1 -1
  227. package/dist/components/NcPasswordField/index.mjs +1 -1
  228. package/dist/components/NcPopover/index.mjs +1 -1
  229. package/dist/components/NcRelatedResourcesPanel/index.mjs +1 -1
  230. package/dist/components/NcRichContenteditable/NcAutoCompleteResult.vue.d.ts +2 -2
  231. package/dist/components/NcRichContenteditable/NcMentionBubble.vue.d.ts +2 -2
  232. package/dist/components/NcRichContenteditable/NcRichContenteditable.vue.d.ts +347 -0
  233. package/dist/components/NcRichContenteditable/index.mjs +3 -4
  234. package/dist/components/NcRichContenteditable/index.mjs.map +1 -1
  235. package/dist/components/NcRichText/NcReferencePicker/NcProviderList.vue.d.ts +194 -0
  236. package/dist/components/NcRichText/NcReferencePicker/NcSearch.vue.d.ts +268 -0
  237. package/dist/components/NcRichText/index.mjs +3 -3
  238. package/dist/components/NcSavingIndicatorIcon/NcSavingIndicatorIcon.vue.d.ts +13 -56
  239. package/dist/components/NcSavingIndicatorIcon/index.d.ts +4 -0
  240. package/dist/components/NcSavingIndicatorIcon/index.mjs +2 -2
  241. package/dist/components/NcSelect/NcSelect.vue.d.ts +121 -0
  242. package/dist/components/NcSelect/index.mjs +1 -1
  243. package/dist/components/NcSelectTags/NcSelectTags.vue.d.ts +205 -0
  244. package/dist/components/NcSelectTags/index.mjs +1 -1
  245. package/dist/components/NcSelectUsers/NcSelectUsers.vue.d.ts +117 -0
  246. package/dist/components/NcSelectUsers/index.d.ts +5 -0
  247. package/dist/components/NcSelectUsers/index.mjs +73 -0
  248. package/dist/components/NcSelectUsers/index.mjs.map +1 -0
  249. package/dist/components/NcSettingsInputText/NcSettingsInputText.vue.d.ts +3 -3
  250. package/dist/components/NcSettingsInputText/index.mjs +1 -1
  251. package/dist/components/NcSettingsSection/index.mjs +1 -1
  252. package/dist/components/NcSettingsSelectGroup/NcSettingsSelectGroup.vue.d.ts +265 -0
  253. package/dist/components/NcSettingsSelectGroup/index.mjs +1 -1
  254. package/dist/components/NcTextArea/NcTextArea.vue.d.ts +6 -6
  255. package/dist/components/NcTextField/index.mjs +1 -1
  256. package/dist/components/NcTimezonePicker/NcTimezonePicker.vue.d.ts +23 -0
  257. package/dist/components/NcTimezonePicker/index.d.ts +5 -0
  258. package/dist/components/NcTimezonePicker/index.mjs +2 -2
  259. package/dist/components/NcTimezonePicker/timezoneDataProviderService.d.ts +5 -1
  260. package/dist/components/NcUserBubble/index.mjs +1 -1
  261. package/dist/components/NcUserStatusIcon/index.mjs +1 -1
  262. package/dist/components/index.d.ts +2 -2
  263. package/dist/directives/index.d.ts +0 -1
  264. package/dist/functions/contactsMenu/index.d.ts +40 -0
  265. package/dist/functions/contactsMenu/index.mjs +22 -0
  266. package/dist/functions/contactsMenu/index.mjs.map +1 -0
  267. package/dist/functions/dialog/index.d.ts +22 -13
  268. package/dist/functions/dialog/index.mjs +27 -18
  269. package/dist/functions/dialog/index.mjs.map +1 -1
  270. package/dist/functions/index.d.ts +1 -0
  271. package/dist/functions/reference/index.mjs +1 -1
  272. package/dist/functions/usernameToColor/index.mjs +1 -1
  273. package/dist/index.d.ts +0 -1
  274. package/dist/index.mjs +86 -89
  275. package/dist/index.mjs.map +1 -1
  276. package/package.json +20 -12
  277. package/dist/assets/NcDateTimePicker-AIJmp5dC.css +0 -81
  278. package/dist/assets/index-DQ4Plm4r.css +0 -89
  279. package/dist/chunks/ChevronLeft-FfC-tiIS.mjs +0 -49
  280. package/dist/chunks/ChevronLeft-FfC-tiIS.mjs.map +0 -1
  281. package/dist/chunks/NcActionButton-BdQ_qmvW.mjs.map +0 -1
  282. package/dist/chunks/NcActionTextEditable-nTbwgRy2.mjs.map +0 -1
  283. package/dist/chunks/NcActions-CgKHXNbF.mjs.map +0 -1
  284. package/dist/chunks/NcAppContent-C4gBVRQs.mjs.map +0 -1
  285. package/dist/chunks/NcAvatar-CA8y4d-c.mjs.map +0 -1
  286. package/dist/chunks/NcButton-BHLqKKYP.mjs +0 -308
  287. package/dist/chunks/NcButton-BHLqKKYP.mjs.map +0 -1
  288. package/dist/chunks/NcCheckboxRadioSwitch-CWU_M_ui.mjs.map +0 -1
  289. package/dist/chunks/NcDateTimePicker-BzfuHym4.mjs.map +0 -1
  290. package/dist/chunks/NcDialog-_pc2BPHU.mjs.map +0 -1
  291. package/dist/chunks/NcDialogButton.vue_vue_type_script_setup_true_lang-BKrJ_xd8.mjs +0 -119
  292. package/dist/chunks/NcDialogButton.vue_vue_type_script_setup_true_lang-BKrJ_xd8.mjs.map +0 -1
  293. package/dist/chunks/NcIconSvgWrapper-BYTrkA66.mjs.map +0 -1
  294. package/dist/chunks/NcPopover-C3ZoyUjc.mjs.map +0 -1
  295. package/dist/chunks/NcRichContenteditable-B16VJW0Y.mjs.map +0 -1
  296. package/dist/chunks/NcSavingIndicatorIcon-icWy8J5x.mjs +0 -80
  297. package/dist/chunks/NcSavingIndicatorIcon-icWy8J5x.mjs.map +0 -1
  298. package/dist/chunks/NcSelect-CAx_ixPU.mjs.map +0 -1
  299. package/dist/chunks/NcTimezonePicker-CMoUk4sZ.mjs +0 -188
  300. package/dist/chunks/NcTimezonePicker-CMoUk4sZ.mjs.map +0 -1
  301. package/dist/chunks/_l10n-7kR7gXFc.mjs.map +0 -1
  302. package/dist/chunks/index--u6iHwFv.mjs +0 -184
  303. package/dist/chunks/index--u6iHwFv.mjs.map +0 -1
  304. package/dist/components/NcActions/NcActions.vue.d.ts +0 -544
  305. package/dist/components/NcAppNavigation/NcAppNavigation.vue.d.ts +0 -215
  306. package/dist/components/NcAppNavigationCaption/NcAppNavigationCaption.vue.d.ts +0 -379
  307. package/dist/components/NcAppNavigationItem/NcAppNavigationIconCollapsible.vue.d.ts +0 -161
  308. package/dist/components/NcAppNavigationItem/NcAppNavigationItem.vue.d.ts +0 -1310
  309. package/dist/components/NcAppNavigationItem/NcInputConfirmCancel.vue.d.ts +0 -195
  310. package/dist/components/NcAppNavigationNew/NcAppNavigationNew.vue.d.ts +0 -195
  311. package/dist/components/NcAppNavigationNewItem/NcAppNavigationNewItem.vue.d.ts +0 -316
  312. package/dist/components/NcAppNavigationSearch/NcAppNavigationSearch.vue.d.ts +0 -389
  313. package/dist/components/NcAppNavigationToggle/NcAppNavigationToggle.vue.d.ts +0 -173
  314. package/dist/components/NcBreadcrumb/NcBreadcrumb.vue.d.ts +0 -717
  315. package/dist/components/NcBreadcrumbs/NcBreadcrumbs.vue.d.ts +0 -1330
  316. package/dist/components/NcButton/types.d.ts +0 -30
  317. package/dist/components/NcContent/NcContent.vue.d.ts +0 -227
  318. package/dist/components/NcEmojiPicker/NcEmojiPicker.vue.d.ts +0 -642
  319. package/dist/components/NcHeaderMenu/NcHeaderMenu.vue.d.ts +0 -245
  320. package/dist/components/NcInputField/NcInputField.vue.d.ts +0 -419
  321. package/dist/components/NcListItem/NcListItem.vue.d.ts +0 -714
  322. package/dist/components/NcRelatedResourcesPanel/NcRelatedResourcesPanel.vue.d.ts +0 -553
  323. package/dist/components/NcRelatedResourcesPanel/NcResource.vue.d.ts +0 -173
  324. package/dist/components/NcRelatedResourcesPanel/NcTeamResources.vue.d.ts +0 -241
  325. package/dist/components/NcRichText/NcReferenceList.vue.d.ts +0 -292
  326. package/dist/components/NcRichText/NcReferencePicker/NcRawLinkInput.vue.d.ts +0 -606
  327. package/dist/components/NcRichText/NcReferenceWidget.vue.d.ts +0 -211
  328. package/dist/components/NcRichText/NcRichText.vue.d.ts +0 -409
  329. package/dist/components/NcTextField/NcTextField.vue.d.ts +0 -314
  330. package/dist/components/NcTimezonePicker/timezone.d.ts +0 -14
  331. package/dist/directives/Tooltip/index.d.ts +0 -3
  332. package/dist/directives/Tooltip/index.mjs +0 -12
  333. package/dist/directives/Tooltip/index.mjs.map +0 -1
  334. package/dist/mixins/richEditor/index.mjs +0 -10
  335. package/dist/mixins/richEditor/index.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_l10n-BNGeEX3W.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- import { r as register, t as t3, a as t } from "./_l10n-7kR7gXFc.mjs";
1
+ import { r as register, t as t3, a as t } from "./_l10n-BNGeEX3W.mjs";
2
2
  register(t3);
3
3
  class Color {
4
4
  /**
@@ -136,4 +136,4 @@ export {
136
136
  defaultPalette as d,
137
137
  generatePalette as g
138
138
  };
139
- //# sourceMappingURL=colors-BJbWzaQ-.mjs.map
139
+ //# sourceMappingURL=colors-CSUSQx1k.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"colors-BJbWzaQ-.mjs","sources":["../../src/utils/colors.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { t } from '../l10n.js'\n\nexport class Color {\n\n\t/**\n\t * @param r - The red value\n\t * @param g - The green value\n\t * @param b - The blue value\n\t * @param name - The name of the color\n\t */\n\tconstructor(\n\t\tpublic readonly r: number,\n\t\tpublic readonly g: number,\n\t\tpublic readonly b: number,\n\t\tpublic readonly name?: string,\n\t) {\n\t\tthis.r = Math.min(r, 255)\n\t\tthis.g = Math.min(g, 255)\n\t\tthis.b = Math.min(b, 255)\n\t\tthis.name = name\n\t}\n\n\t/**\n\t * The hexadecimal color string.\n\t */\n\tget color(): string {\n\t\tconst toHex = (int: number) => `00${int.toString(16)}`.slice(-2)\n\t\treturn `#${toHex(this.r)}${toHex(this.g)}${toHex(this.b)}`\n\t}\n\n}\n\n/**\n * Calculate the increment needed to blend color1 into color2 within specified number of steps.\n *\n * @param steps - The number of steps\n * @param color1 - The color to start with\n * @param color2 - The color to end at\n * @return The increment needed per color channel\n */\nfunction calculateStepIncrement(steps: number, color1: Color, color2: Color): { r: number, g: number, b: number } {\n\treturn {\n\t\tr: (color2.r - color1.r) / steps,\n\t\tg: (color2.g - color1.g) / steps,\n\t\tb: (color2.b - color1.b) / steps,\n\t}\n}\n\n/**\n * Create a color palette from two colors\n *\n * @param steps - The number of steps the palette should have\n * @param color1 - The first color to mix\n * @param color2 - The second color to mix\n * @return The created palette array (mixed `color1` and `color2` with `steps` steps)\n */\nfunction mixPalette(steps: number, color1: Color, color2: Color): Color[] {\n\tconst palette: Color[] = []\n\tpalette.push(color1)\n\tconst increment = calculateStepIncrement(steps, color1, color2)\n\tfor (let i = 1; i < steps; i++) {\n\t\tconst r = Math.floor(color1.r + increment.r * i)\n\t\tconst g = Math.floor(color1.g + increment.g * i)\n\t\tconst b = Math.floor(color1.b + increment.b * i)\n\t\tpalette.push(new Color(r, g, b))\n\t}\n\treturn palette\n}\n\n/**\n * Like GenColor(4) but with labels\n */\nexport const defaultPalette = [\n\tnew Color(182, 70, 157, t('Purple')),\n\tnew Color(\n\t\t191, 103, 139,\n\t\tt('Rosy brown'), // TRANSLATORS: A color name for RGB(191, 103, 139)\n\t),\n\tnew Color(\n\t\t201, 136, 121,\n\t\tt('Feldspar'), // TRANSLATORS: A color name for RGB(201, 136, 121)\n\t),\n\tnew Color(\n\t\t211, 169, 103,\n\t\tt('Whiskey'), // TRANSLATORS: A color name for RGB(211, 169, 103)\n\t),\n\tnew Color(\n\t\t221, 203, 85,\n\t\tt('Gold'),\n\t),\n\tnew Color(\n\t\t165, 184, 114,\n\t\tt('Olivine'), // TRANSLATORS: A color name for RGB(165, 184, 114)\n\t),\n\tnew Color(\n\t\t110, 166, 143,\n\t\tt('Acapulco'), // TRANSLATORS: A color name for RGB(110, 166, 143)\n\t),\n\tnew Color(\n\t\t55, 148, 172,\n\t\tt('Boston Blue'), // TRANSLATORS: A color name for RGB(55, 148, 172)\n\t),\n\tnew Color(\n\t\t0, 130, 201,\n\t\tt('Nextcloud blue'),\n\t),\n\tnew Color(\n\t\t45, 115, 190,\n\t\tt('Mariner'), // TRANSLATORS: A color name for RGB(45, 115, 190)\n\t),\n\tnew Color(\n\t\t91, 100, 179,\n\t\tt('Blue Violet'), // TRANSLATORS: A color name for RGB(91, 100, 179)\n\t),\n\tnew Color(\n\t\t136, 85, 168,\n\t\tt('Deluge'), // TRANSLATORS: A color name for RGB(136, 85, 168)\n\t),\n]\n\n/**\n * Generate colors from the official nextcloud color\n * You can provide how many colors you want (multiplied by 3).\n *\n * For example if steps is set to 6, then 3 colors * 6 will result in 18 generated colors.\n *\n * @param steps - Number of steps to go from a color to another\n */\nexport function generatePalette(steps: number): Color[] {\n\tif (steps <= 0) {\n\t\tsteps = 6\n\t}\n\n\tif (steps === 4) {\n\t\treturn [...defaultPalette]\n\t}\n\n\tconst red = new Color(182, 70, 157, t('Purple'))\n\tconst yellow = new Color(221, 203, 85, t('Gold'))\n\tconst blue = new Color(0, 130, 201, t('Nextcloud blue'))\n\n\tconst palette1 = mixPalette(steps, red, yellow)\n\tconst palette2 = mixPalette(steps, yellow, blue)\n\tconst palette3 = mixPalette(steps, blue, red)\n\n\treturn palette1.concat(palette2).concat(palette3)\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"colors-CSUSQx1k.mjs","sources":["../../src/utils/colors.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { t } from '../l10n.js'\n\nexport class Color {\n\n\t/**\n\t * @param r - The red value\n\t * @param g - The green value\n\t * @param b - The blue value\n\t * @param name - The name of the color\n\t */\n\tconstructor(\n\t\tpublic readonly r: number,\n\t\tpublic readonly g: number,\n\t\tpublic readonly b: number,\n\t\tpublic readonly name?: string,\n\t) {\n\t\tthis.r = Math.min(r, 255)\n\t\tthis.g = Math.min(g, 255)\n\t\tthis.b = Math.min(b, 255)\n\t\tthis.name = name\n\t}\n\n\t/**\n\t * The hexadecimal color string.\n\t */\n\tget color(): string {\n\t\tconst toHex = (int: number) => `00${int.toString(16)}`.slice(-2)\n\t\treturn `#${toHex(this.r)}${toHex(this.g)}${toHex(this.b)}`\n\t}\n\n}\n\n/**\n * Calculate the increment needed to blend color1 into color2 within specified number of steps.\n *\n * @param steps - The number of steps\n * @param color1 - The color to start with\n * @param color2 - The color to end at\n * @return The increment needed per color channel\n */\nfunction calculateStepIncrement(steps: number, color1: Color, color2: Color): { r: number, g: number, b: number } {\n\treturn {\n\t\tr: (color2.r - color1.r) / steps,\n\t\tg: (color2.g - color1.g) / steps,\n\t\tb: (color2.b - color1.b) / steps,\n\t}\n}\n\n/**\n * Create a color palette from two colors\n *\n * @param steps - The number of steps the palette should have\n * @param color1 - The first color to mix\n * @param color2 - The second color to mix\n * @return The created palette array (mixed `color1` and `color2` with `steps` steps)\n */\nfunction mixPalette(steps: number, color1: Color, color2: Color): Color[] {\n\tconst palette: Color[] = []\n\tpalette.push(color1)\n\tconst increment = calculateStepIncrement(steps, color1, color2)\n\tfor (let i = 1; i < steps; i++) {\n\t\tconst r = Math.floor(color1.r + increment.r * i)\n\t\tconst g = Math.floor(color1.g + increment.g * i)\n\t\tconst b = Math.floor(color1.b + increment.b * i)\n\t\tpalette.push(new Color(r, g, b))\n\t}\n\treturn palette\n}\n\n/**\n * Like GenColor(4) but with labels\n */\nexport const defaultPalette = [\n\tnew Color(182, 70, 157, t('Purple')),\n\tnew Color(\n\t\t191, 103, 139,\n\t\tt('Rosy brown'), // TRANSLATORS: A color name for RGB(191, 103, 139)\n\t),\n\tnew Color(\n\t\t201, 136, 121,\n\t\tt('Feldspar'), // TRANSLATORS: A color name for RGB(201, 136, 121)\n\t),\n\tnew Color(\n\t\t211, 169, 103,\n\t\tt('Whiskey'), // TRANSLATORS: A color name for RGB(211, 169, 103)\n\t),\n\tnew Color(\n\t\t221, 203, 85,\n\t\tt('Gold'),\n\t),\n\tnew Color(\n\t\t165, 184, 114,\n\t\tt('Olivine'), // TRANSLATORS: A color name for RGB(165, 184, 114)\n\t),\n\tnew Color(\n\t\t110, 166, 143,\n\t\tt('Acapulco'), // TRANSLATORS: A color name for RGB(110, 166, 143)\n\t),\n\tnew Color(\n\t\t55, 148, 172,\n\t\tt('Boston Blue'), // TRANSLATORS: A color name for RGB(55, 148, 172)\n\t),\n\tnew Color(\n\t\t0, 130, 201,\n\t\tt('Nextcloud blue'),\n\t),\n\tnew Color(\n\t\t45, 115, 190,\n\t\tt('Mariner'), // TRANSLATORS: A color name for RGB(45, 115, 190)\n\t),\n\tnew Color(\n\t\t91, 100, 179,\n\t\tt('Blue Violet'), // TRANSLATORS: A color name for RGB(91, 100, 179)\n\t),\n\tnew Color(\n\t\t136, 85, 168,\n\t\tt('Deluge'), // TRANSLATORS: A color name for RGB(136, 85, 168)\n\t),\n]\n\n/**\n * Generate colors from the official nextcloud color\n * You can provide how many colors you want (multiplied by 3).\n *\n * For example if steps is set to 6, then 3 colors * 6 will result in 18 generated colors.\n *\n * @param steps - Number of steps to go from a color to another\n */\nexport function generatePalette(steps: number): Color[] {\n\tif (steps <= 0) {\n\t\tsteps = 6\n\t}\n\n\tif (steps === 4) {\n\t\treturn [...defaultPalette]\n\t}\n\n\tconst red = new Color(182, 70, 157, t('Purple'))\n\tconst yellow = new Color(221, 203, 85, t('Gold'))\n\tconst blue = new Color(0, 130, 201, t('Nextcloud blue'))\n\n\tconst palette1 = mixPalette(steps, red, yellow)\n\tconst palette2 = mixPalette(steps, yellow, blue)\n\tconst palette3 = mixPalette(steps, blue, red)\n\n\treturn palette1.concat(palette2).concat(palette3)\n}\n"],"names":[],"mappings":"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"}
@@ -2,19 +2,19 @@ import '../assets/referencePickerModal-CkGgDb19.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, P as t7, a as t, Q as t42, R as t37, S as t22, T as t23, u as t39, U as t30, D as t18, V as t11 } from "./_l10n-7kR7gXFc.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";
6
6
  import axios from "@nextcloud/axios";
7
7
  import { loadState } from "@nextcloud/initial-state";
8
8
  import { imagePath, generateOcsUrl } from "@nextcloud/router";
9
9
  import { N as NcEmptyContent } from "./NcEmptyContent-BQnIrQQn.mjs";
10
10
  import { _ as _sfc_main$9 } from "./NcHighlight-Cu4UfEEO.mjs";
11
- import { N as NcSelect } from "./NcSelect-CAx_ixPU.mjs";
11
+ import { N as NcSelect } from "./NcSelect-BkTH-Yqm.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
- import { N as NcButton } from "./NcButton-BHLqKKYP.mjs";
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-BTzKCPza.mjs";
17
+ import { N as NcTextField } from "./NcTextField-KGXtf7Y6.mjs";
18
18
  import { D as DotsHorizontal } from "./DotsHorizontal-AMVAlTNH.mjs";
19
19
  import NcModal from "../components/NcModal/index.mjs";
20
20
  import { emit } from "@nextcloud/event-bus";
@@ -162,7 +162,7 @@ function isUrl(str) {
162
162
  return false;
163
163
  }
164
164
  }
165
- register(t37, t42);
165
+ register(t37, t41);
166
166
  const _sfc_main$7 = {
167
167
  name: "LinkVariantIcon",
168
168
  emits: ["click"],
@@ -1359,4 +1359,4 @@ export {
1359
1359
  NcSearch as h,
1360
1360
  sortProviders as s
1361
1361
  };
1362
- //# sourceMappingURL=referencePickerModal-BpNnwC_g.mjs.map
1362
+ //# sourceMappingURL=referencePickerModal-DzM7CkKN.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"referencePickerModal-BpNnwC_g.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-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,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-7kR7gXFc.mjs";
3
+ import { r as register, b as t2, a as t } from "./_l10n-BNGeEX3W.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-B5sWtJdj.mjs.map
87
+ //# sourceMappingURL=useFormatDateTime-BPGWjR3-.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFormatDateTime-B5sWtJdj.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-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,4 +1,4 @@
1
- import { g as generatePalette } from "./colors-BJbWzaQ-.mjs";
1
+ import { g as generatePalette } from "./colors-CSUSQx1k.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-CzXWY0j4.mjs.map
22
+ //# sourceMappingURL=usernameToColor-Bl9NGU_9.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"usernameToColor-CzXWY0j4.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-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;"}
@@ -45,7 +45,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
45
45
  * For `type='radio'` `null` is equal to `false`
46
46
  */
47
47
  modelValue: {
48
- type: (StringConstructor | BooleanConstructor)[];
48
+ type: (BooleanConstructor | StringConstructor)[];
49
49
  default: null;
50
50
  };
51
51
  /**
@@ -185,7 +185,7 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
185
185
  * For `type='radio'` `null` is equal to `false`
186
186
  */
187
187
  modelValue: {
188
- type: (StringConstructor | BooleanConstructor)[];
188
+ type: (BooleanConstructor | StringConstructor)[];
189
189
  default: null;
190
190
  };
191
191
  /**
@@ -202,8 +202,8 @@ declare const _default: import('vue').DefineComponent<import('vue').ExtractPropT
202
202
  type: string;
203
203
  value: string;
204
204
  disabled: boolean;
205
- ariaHidden: boolean;
206
205
  modelValue: string | boolean;
206
+ ariaHidden: boolean;
207
207
  isMenu: boolean;
208
208
  }, {}, {
209
209
  CheckIcon: any;
@@ -1,4 +1,4 @@
1
- import { N } from "../../chunks/NcActionButton-BdQ_qmvW.mjs";
1
+ import { N } from "../../chunks/NcActionButton-BZEDhdCm.mjs";
2
2
  export {
3
3
  N as default
4
4
  };
@@ -1,4 +1,4 @@
1
- import { N } from "../../chunks/NcActionButtonGroup-TitZerDl.mjs";
1
+ import { N } from "../../chunks/NcActionButtonGroup-Dqt8Gekb.mjs";
2
2
  export {
3
3
  N as default
4
4
  };