@nextcloud/vue 8.29.2 → 8.30.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.
- package/CHANGELOG.md +9 -0
- package/dist/Components/NcActionButton.cjs +1 -1
- package/dist/Components/NcActionButton.mjs +1 -1
- package/dist/Components/NcActionInput.cjs +1 -1
- package/dist/Components/NcActionInput.mjs +1 -1
- package/dist/Components/NcActionTextEditable.cjs +1 -1
- package/dist/Components/NcActionTextEditable.mjs +1 -1
- package/dist/Components/NcActions.cjs +1 -1
- package/dist/Components/NcActions.mjs +1 -1
- package/dist/Components/NcAppNavigationCaption.cjs +1 -1
- package/dist/Components/NcAppNavigationCaption.mjs +1 -1
- package/dist/Components/NcAppNavigationItem.cjs +1 -1
- package/dist/Components/NcAppNavigationItem.mjs +1 -1
- package/dist/Components/NcAppNavigationSettings.cjs +1 -1
- package/dist/Components/NcAppNavigationSettings.mjs +1 -1
- package/dist/Components/NcAppSidebar.cjs +1 -1
- package/dist/Components/NcAppSidebar.mjs +1 -1
- package/dist/Components/NcAssistantButton.cjs +4 -0
- package/dist/Components/NcAssistantButton.cjs.map +1 -0
- package/dist/Components/NcAssistantButton.mjs +5 -0
- package/dist/Components/NcAssistantButton.mjs.map +1 -0
- package/dist/Components/NcAssistantContent.cjs +50 -0
- package/dist/Components/NcAssistantContent.cjs.map +1 -0
- package/dist/Components/NcAssistantContent.mjs +51 -0
- package/dist/Components/NcAssistantContent.mjs.map +1 -0
- package/dist/Components/NcAssistantIcon.cjs +4 -0
- package/dist/Components/NcAssistantIcon.cjs.map +1 -0
- package/dist/Components/NcAssistantIcon.mjs +5 -0
- package/dist/Components/NcAssistantIcon.mjs.map +1 -0
- package/dist/Components/NcAvatar.cjs +1 -1
- package/dist/Components/NcAvatar.mjs +1 -1
- package/dist/Components/NcBreadcrumb.cjs +1 -1
- package/dist/Components/NcBreadcrumb.mjs +1 -1
- package/dist/Components/NcBreadcrumbs.cjs +1 -1
- package/dist/Components/NcBreadcrumbs.mjs +1 -1
- package/dist/Components/NcCheckboxRadioSwitch.cjs +1 -1
- package/dist/Components/NcCheckboxRadioSwitch.mjs +1 -1
- package/dist/Components/NcChip.cjs +3 -3
- package/dist/Components/NcChip.mjs +3 -3
- package/dist/Components/NcCollectionList.cjs +1 -1
- package/dist/Components/NcCollectionList.mjs +1 -1
- package/dist/Components/NcColorPicker.cjs +1 -1
- package/dist/Components/NcColorPicker.mjs +1 -1
- package/dist/Components/NcDashboardWidget.cjs +1 -1
- package/dist/Components/NcDashboardWidget.mjs +1 -1
- package/dist/Components/NcDashboardWidgetItem.cjs +1 -1
- package/dist/Components/NcDashboardWidgetItem.mjs +1 -1
- package/dist/Components/NcDateTimePicker.cjs +4 -4
- package/dist/Components/NcDateTimePicker.mjs +4 -4
- package/dist/Components/NcDateTimePickerNative.cjs +1 -1
- package/dist/Components/NcDateTimePickerNative.mjs +1 -1
- package/dist/Components/NcEmojiPicker.cjs +1 -1
- package/dist/Components/NcEmojiPicker.mjs +1 -1
- package/dist/Components/NcListItem.cjs +1 -1
- package/dist/Components/NcListItem.mjs +1 -1
- package/dist/Components/NcListItemIcon.cjs +1 -1
- package/dist/Components/NcListItemIcon.mjs +1 -1
- package/dist/Components/NcModal.cjs +3 -3
- package/dist/Components/NcModal.mjs +3 -3
- package/dist/Components/NcPopover.cjs +1 -1
- package/dist/Components/NcPopover.mjs +1 -1
- package/dist/Components/NcRichContenteditable.cjs +1 -1
- package/dist/Components/NcRichContenteditable.mjs +1 -1
- package/dist/Components/NcRichText.cjs +10 -10
- package/dist/Components/NcRichText.mjs +10 -10
- package/dist/Components/NcSelect.cjs +1 -1
- package/dist/Components/NcSelect.mjs +1 -1
- package/dist/Components/NcSelectTags.cjs +1 -1
- package/dist/Components/NcSelectTags.mjs +1 -1
- package/dist/Components/NcSelectUsers.cjs +1 -1
- package/dist/Components/NcSelectUsers.mjs +1 -1
- package/dist/Components/NcSettingsSelectGroup.cjs +1 -1
- package/dist/Components/NcSettingsSelectGroup.mjs +1 -1
- package/dist/Components/NcTextField.cjs +1 -1
- package/dist/Components/NcTextField.mjs +1 -1
- package/dist/Components/NcTimezonePicker.cjs +1 -1
- package/dist/Components/NcTimezonePicker.mjs +1 -1
- package/dist/Components/NcUserBubble.cjs +1 -1
- package/dist/Components/NcUserBubble.mjs +1 -1
- package/dist/Functions/reference.cjs +10 -10
- package/dist/Functions/reference.mjs +7 -7
- package/dist/Functions/registerReference.cjs +11 -11
- package/dist/Functions/registerReference.mjs +5 -5
- package/dist/assets/{NcActions-CXnDIMae.css → NcActions-Bjgv1Dku.css} +11 -11
- package/dist/assets/NcAssistantButton-owGSr0s0.css +54 -0
- package/dist/assets/NcAssistantContent-Ban7n3Bg.css +31 -0
- package/dist/assets/NcAssistantIcon-BFNU0uqH.css +35 -0
- package/dist/assets/{NcCheckboxRadioSwitch-DqEP1SPR.css → NcCheckboxRadioSwitch-CC2zuvLL.css} +53 -43
- package/dist/assets/{NcDateTimePicker-FNnAz7ls.css → NcDateTimePicker-Ce57VAyL.css} +7 -7
- package/dist/assets/{referencePickerModal-BgSz7IyB.css → referencePickerModal-DrvqNTIf.css} +21 -21
- package/dist/chunks/{NcActionButton-D_9FsTpM.cjs → NcActionButton-BhSk7AAp.cjs} +2 -2
- package/dist/chunks/{NcActionButton-D_9FsTpM.cjs.map → NcActionButton-BhSk7AAp.cjs.map} +1 -1
- package/dist/chunks/{NcActionButton-rjMoymt-.mjs → NcActionButton-DC3oAI2L.mjs} +2 -2
- package/dist/chunks/{NcActionButton-rjMoymt-.mjs.map → NcActionButton-DC3oAI2L.mjs.map} +1 -1
- package/dist/chunks/{NcActionInput-CQ_WEPqQ.mjs → NcActionInput-B5ysJl2S.mjs} +2 -2
- package/dist/chunks/{NcActionInput-CQ_WEPqQ.mjs.map → NcActionInput-B5ysJl2S.mjs.map} +1 -1
- package/dist/chunks/{NcActionInput-CA9bOHxb.cjs → NcActionInput-DdaafMi8.cjs} +2 -2
- package/dist/chunks/{NcActionInput-CA9bOHxb.cjs.map → NcActionInput-DdaafMi8.cjs.map} +1 -1
- package/dist/chunks/{NcActionTextEditable-B4g2kszt.cjs → NcActionTextEditable-CTXGUIPM.cjs} +2 -2
- package/dist/chunks/{NcActionTextEditable-B4g2kszt.cjs.map → NcActionTextEditable-CTXGUIPM.cjs.map} +1 -1
- package/dist/chunks/{NcActionTextEditable-xWQGdOVl.mjs → NcActionTextEditable-CpxJ_LEa.mjs} +2 -2
- package/dist/chunks/{NcActionTextEditable-xWQGdOVl.mjs.map → NcActionTextEditable-CpxJ_LEa.mjs.map} +1 -1
- package/dist/chunks/{NcActions-B76VN_Gz.cjs → NcActions-DRCkAU8h.cjs} +5 -5
- package/dist/chunks/{NcActions-B76VN_Gz.cjs.map → NcActions-DRCkAU8h.cjs.map} +1 -1
- package/dist/chunks/{NcActions-BKZA1xVL.mjs → NcActions-DdARGGZ_.mjs} +5 -5
- package/dist/chunks/{NcActions-BKZA1xVL.mjs.map → NcActions-DdARGGZ_.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationCaption-CjOJyYIY.cjs → NcAppNavigationCaption-BpmzZDPj.cjs} +2 -2
- package/dist/chunks/{NcAppNavigationCaption-CjOJyYIY.cjs.map → NcAppNavigationCaption-BpmzZDPj.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationCaption-hDsiQMLr.mjs → NcAppNavigationCaption-O4l8dFkh.mjs} +2 -2
- package/dist/chunks/{NcAppNavigationCaption-hDsiQMLr.mjs.map → NcAppNavigationCaption-O4l8dFkh.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationItem-NIMhmJHh.mjs → NcAppNavigationItem-BFF0p136.mjs} +3 -3
- package/dist/chunks/{NcAppNavigationItem-NIMhmJHh.mjs.map → NcAppNavigationItem-BFF0p136.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationItem-Cu3S2chM.cjs → NcAppNavigationItem-D1CEGuhm.cjs} +3 -3
- package/dist/chunks/{NcAppNavigationItem-Cu3S2chM.cjs.map → NcAppNavigationItem-D1CEGuhm.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationSettings-C8YaW_Kj.cjs → NcAppNavigationSettings-DV5ZnR2s.cjs} +2 -2
- package/dist/chunks/{NcAppNavigationSettings-C8YaW_Kj.cjs.map → NcAppNavigationSettings-DV5ZnR2s.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationSettings-BV34ogWP.mjs → NcAppNavigationSettings-Do0e5oWy.mjs} +2 -2
- package/dist/chunks/{NcAppNavigationSettings-BV34ogWP.mjs.map → NcAppNavigationSettings-Do0e5oWy.mjs.map} +1 -1
- package/dist/chunks/{NcAppSidebar-BJgPYOcZ.mjs → NcAppSidebar-AR-D7HSj.mjs} +3 -3
- package/dist/chunks/{NcAppSidebar-BJgPYOcZ.mjs.map → NcAppSidebar-AR-D7HSj.mjs.map} +1 -1
- package/dist/chunks/{NcAppSidebar-Dbvy4M4h.cjs → NcAppSidebar-Cvyq-kN5.cjs} +3 -3
- package/dist/chunks/{NcAppSidebar-Dbvy4M4h.cjs.map → NcAppSidebar-Cvyq-kN5.cjs.map} +1 -1
- package/dist/chunks/NcAssistantButton-Ck1NUjhl.mjs +97 -0
- package/dist/chunks/NcAssistantButton-Ck1NUjhl.mjs.map +1 -0
- package/dist/chunks/NcAssistantButton-gD3MKoYS.cjs +96 -0
- package/dist/chunks/NcAssistantButton-gD3MKoYS.cjs.map +1 -0
- package/dist/chunks/NcAssistantIcon-D_xelcY2.cjs +68 -0
- package/dist/chunks/NcAssistantIcon-D_xelcY2.cjs.map +1 -0
- package/dist/chunks/NcAssistantIcon-tjSguP9N.mjs +69 -0
- package/dist/chunks/NcAssistantIcon-tjSguP9N.mjs.map +1 -0
- package/dist/chunks/{NcAvatar-CgF-MFtU.mjs → NcAvatar-BEIBwiA6.mjs} +3 -3
- package/dist/chunks/{NcAvatar-CgF-MFtU.mjs.map → NcAvatar-BEIBwiA6.mjs.map} +1 -1
- package/dist/chunks/{NcAvatar-DThzrxm-.cjs → NcAvatar-DS1H-VrZ.cjs} +3 -3
- package/dist/chunks/{NcAvatar-DThzrxm-.cjs.map → NcAvatar-DS1H-VrZ.cjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumb-DJpYjXCe.mjs → NcBreadcrumb-BYYXWaif.mjs} +2 -2
- package/dist/chunks/{NcBreadcrumb-DJpYjXCe.mjs.map → NcBreadcrumb-BYYXWaif.mjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumb-86ycrDeH.cjs → NcBreadcrumb-HtgcEJgs.cjs} +2 -2
- package/dist/chunks/{NcBreadcrumb-86ycrDeH.cjs.map → NcBreadcrumb-HtgcEJgs.cjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumbs-CBMTGNxS.cjs → NcBreadcrumbs-CQcnjGJO.cjs} +4 -4
- package/dist/chunks/{NcBreadcrumbs-CBMTGNxS.cjs.map → NcBreadcrumbs-CQcnjGJO.cjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumbs-B722pBOd.mjs → NcBreadcrumbs-cj5ip2-X.mjs} +4 -4
- package/dist/chunks/{NcBreadcrumbs-B722pBOd.mjs.map → NcBreadcrumbs-cj5ip2-X.mjs.map} +1 -1
- package/dist/chunks/{NcCheckboxRadioSwitch-kdoDmLpF.cjs → NcCheckboxRadioSwitch-B-lXOnEF.cjs} +37 -8
- package/dist/chunks/NcCheckboxRadioSwitch-B-lXOnEF.cjs.map +1 -0
- package/dist/chunks/{NcCheckboxRadioSwitch-ip_mRd2T.mjs → NcCheckboxRadioSwitch-DqdNvkCt.mjs} +37 -8
- package/dist/chunks/NcCheckboxRadioSwitch-DqdNvkCt.mjs.map +1 -0
- package/dist/chunks/{NcCollectionList-Khg3X3Zq.mjs → NcCollectionList-CLv50tJ3.mjs} +5 -5
- package/dist/chunks/{NcCollectionList-Khg3X3Zq.mjs.map → NcCollectionList-CLv50tJ3.mjs.map} +1 -1
- package/dist/chunks/{NcCollectionList-C-FWulfV.cjs → NcCollectionList-DXNSOjPG.cjs} +5 -5
- package/dist/chunks/{NcCollectionList-C-FWulfV.cjs.map → NcCollectionList-DXNSOjPG.cjs.map} +1 -1
- package/dist/chunks/{NcColorPicker-MXMbRaLk.mjs → NcColorPicker-52xaYx9k.mjs} +3 -3
- package/dist/chunks/{NcColorPicker-MXMbRaLk.mjs.map → NcColorPicker-52xaYx9k.mjs.map} +1 -1
- package/dist/chunks/{NcColorPicker-C3lzQVxY.cjs → NcColorPicker-CbiIpVlT.cjs} +3 -3
- package/dist/chunks/{NcColorPicker-C3lzQVxY.cjs.map → NcColorPicker-CbiIpVlT.cjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidget-D0cFVt4i.mjs → NcDashboardWidget-809lybR1.mjs} +3 -3
- package/dist/chunks/{NcDashboardWidget-D0cFVt4i.mjs.map → NcDashboardWidget-809lybR1.mjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidget-DD_fZTj6.cjs → NcDashboardWidget-DhJAJn-_.cjs} +3 -3
- package/dist/chunks/{NcDashboardWidget-DD_fZTj6.cjs.map → NcDashboardWidget-DhJAJn-_.cjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidgetItem-D33MR-DH.mjs → NcDashboardWidgetItem-6JbU9gp1.mjs} +4 -4
- package/dist/chunks/{NcDashboardWidgetItem-D33MR-DH.mjs.map → NcDashboardWidgetItem-6JbU9gp1.mjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidgetItem-BiH7ivQn.cjs → NcDashboardWidgetItem-CgO8qJUQ.cjs} +4 -4
- package/dist/chunks/{NcDashboardWidgetItem-BiH7ivQn.cjs.map → NcDashboardWidgetItem-CgO8qJUQ.cjs.map} +1 -1
- package/dist/chunks/{NcEmojiPicker-C2-Q-RoT.cjs → NcEmojiPicker-CdH7bAGd.cjs} +4 -4
- package/dist/chunks/{NcEmojiPicker-C2-Q-RoT.cjs.map → NcEmojiPicker-CdH7bAGd.cjs.map} +1 -1
- package/dist/chunks/{NcEmojiPicker-DJHvkF--.mjs → NcEmojiPicker-CyZg0bCF.mjs} +4 -4
- package/dist/chunks/{NcEmojiPicker-DJHvkF--.mjs.map → NcEmojiPicker-CyZg0bCF.mjs.map} +1 -1
- package/dist/chunks/{NcListItem-DV4HPJWQ.cjs → NcListItem-Bx9qm5xC.cjs} +2 -2
- package/dist/chunks/{NcListItem-DV4HPJWQ.cjs.map → NcListItem-Bx9qm5xC.cjs.map} +1 -1
- package/dist/chunks/{NcListItem-CnxZixD_.mjs → NcListItem-CifyXFmv.mjs} +2 -2
- package/dist/chunks/{NcListItem-CnxZixD_.mjs.map → NcListItem-CifyXFmv.mjs.map} +1 -1
- package/dist/chunks/{NcListItemIcon-CTfYEjBB.mjs → NcListItemIcon-CZrilo88.mjs} +2 -2
- package/dist/chunks/{NcListItemIcon-CTfYEjBB.mjs.map → NcListItemIcon-CZrilo88.mjs.map} +1 -1
- package/dist/chunks/{NcListItemIcon-BUthbF_v.cjs → NcListItemIcon-DMhlNuU9.cjs} +2 -2
- package/dist/chunks/{NcListItemIcon-BUthbF_v.cjs.map → NcListItemIcon-DMhlNuU9.cjs.map} +1 -1
- package/dist/chunks/{NcPopover-QGSKWhSP.cjs → NcPopover-DjeDGPXc.cjs} +21 -6
- package/dist/chunks/NcPopover-DjeDGPXc.cjs.map +1 -0
- package/dist/chunks/{NcPopover-CAJVK-MR.mjs → NcPopover-DxTXnL3u.mjs} +21 -6
- package/dist/chunks/NcPopover-DxTXnL3u.mjs.map +1 -0
- package/dist/chunks/{NcRichContenteditable-cpptFUeI.mjs → NcRichContenteditable-CMQnS1Wz.mjs} +6 -6
- package/dist/chunks/{NcRichContenteditable-cpptFUeI.mjs.map → NcRichContenteditable-CMQnS1Wz.mjs.map} +1 -1
- package/dist/chunks/{NcRichContenteditable-B5-V1mov.cjs → NcRichContenteditable-DtkaJmwG.cjs} +6 -6
- package/dist/chunks/{NcRichContenteditable-B5-V1mov.cjs.map → NcRichContenteditable-DtkaJmwG.cjs.map} +1 -1
- package/dist/chunks/{NcRichText-DKesJDDM.cjs → NcRichText-7B9lDtoo.cjs} +3 -3
- package/dist/chunks/{NcRichText-DKesJDDM.cjs.map → NcRichText-7B9lDtoo.cjs.map} +1 -1
- package/dist/chunks/{NcRichText-CmuVmSzl.mjs → NcRichText-MMeidJmP.mjs} +3 -3
- package/dist/chunks/{NcRichText-CmuVmSzl.mjs.map → NcRichText-MMeidJmP.mjs.map} +1 -1
- package/dist/chunks/{NcSelect-CnLfkqdF.cjs → NcSelect-CrxryIo3.cjs} +2 -2
- package/dist/chunks/{NcSelect-CnLfkqdF.cjs.map → NcSelect-CrxryIo3.cjs.map} +1 -1
- package/dist/chunks/{NcSelect-BUOuXJUQ.mjs → NcSelect-okD5YTJq.mjs} +2 -2
- package/dist/chunks/{NcSelect-BUOuXJUQ.mjs.map → NcSelect-okD5YTJq.mjs.map} +1 -1
- package/dist/chunks/{NcSelectTags-hP98xYkg.mjs → NcSelectTags-BPxmiMto.mjs} +2 -2
- package/dist/chunks/{NcSelectTags-hP98xYkg.mjs.map → NcSelectTags-BPxmiMto.mjs.map} +1 -1
- package/dist/chunks/{NcSelectTags-D9-2HA1H.cjs → NcSelectTags-BZqBdSqC.cjs} +2 -2
- package/dist/chunks/{NcSelectTags-D9-2HA1H.cjs.map → NcSelectTags-BZqBdSqC.cjs.map} +1 -1
- package/dist/chunks/{NcSelectUsers-arPrkqH_.cjs → NcSelectUsers-CshAjqE_.cjs} +3 -3
- package/dist/chunks/{NcSelectUsers-arPrkqH_.cjs.map → NcSelectUsers-CshAjqE_.cjs.map} +1 -1
- package/dist/chunks/{NcSelectUsers-DaHVPRPE.mjs → NcSelectUsers-DK3EtvnG.mjs} +3 -3
- package/dist/chunks/{NcSelectUsers-DaHVPRPE.mjs.map → NcSelectUsers-DK3EtvnG.mjs.map} +1 -1
- package/dist/chunks/{NcSettingsSelectGroup-SuQNKdqU.mjs → NcSettingsSelectGroup-CUUKv6lH.mjs} +2 -2
- package/dist/chunks/{NcSettingsSelectGroup-SuQNKdqU.mjs.map → NcSettingsSelectGroup-CUUKv6lH.mjs.map} +1 -1
- package/dist/chunks/{NcSettingsSelectGroup-D0s0bzQI.cjs → NcSettingsSelectGroup-Dd04CVAM.cjs} +2 -2
- package/dist/chunks/{NcSettingsSelectGroup-D0s0bzQI.cjs.map → NcSettingsSelectGroup-Dd04CVAM.cjs.map} +1 -1
- package/dist/chunks/{NcTextField-Dyuxj4yu.cjs → NcTextField-DDJqk3SI.cjs} +2 -2
- package/dist/chunks/{NcTextField-Dyuxj4yu.cjs.map → NcTextField-DDJqk3SI.cjs.map} +1 -1
- package/dist/chunks/{NcTextField-Do6wBDGH.mjs → NcTextField-eKuP0G6I.mjs} +2 -2
- package/dist/chunks/{NcTextField-Do6wBDGH.mjs.map → NcTextField-eKuP0G6I.mjs.map} +1 -1
- package/dist/chunks/{NcTimezonePicker-bIwFQlmV.mjs → NcTimezonePicker-BbqblRd7.mjs} +2 -2
- package/dist/chunks/{NcTimezonePicker-bIwFQlmV.mjs.map → NcTimezonePicker-BbqblRd7.mjs.map} +1 -1
- package/dist/chunks/{NcTimezonePicker-obgDIrK0.cjs → NcTimezonePicker-DV_arh0f.cjs} +2 -2
- package/dist/chunks/{NcTimezonePicker-obgDIrK0.cjs.map → NcTimezonePicker-DV_arh0f.cjs.map} +1 -1
- package/dist/chunks/{NcUserBubble-BmPOx3MW.mjs → NcUserBubble-C7XtYsrf.mjs} +3 -3
- package/dist/chunks/{NcUserBubble-BmPOx3MW.mjs.map → NcUserBubble-C7XtYsrf.mjs.map} +1 -1
- package/dist/chunks/{NcUserBubble-BusyVqGW.cjs → NcUserBubble-DuyMsPzl.cjs} +3 -3
- package/dist/chunks/{NcUserBubble-BusyVqGW.cjs.map → NcUserBubble-DuyMsPzl.cjs.map} +1 -1
- package/dist/chunks/{ScopeComponent-CNZNqO-O.mjs → ScopeComponent-B_NOkzpc.mjs} +2 -2
- package/dist/chunks/{ScopeComponent-CNZNqO-O.mjs.map → ScopeComponent-B_NOkzpc.mjs.map} +1 -1
- package/dist/chunks/{ScopeComponent-CTlekHht.cjs → ScopeComponent-CbzbU6pi.cjs} +2 -2
- package/dist/chunks/{ScopeComponent-CTlekHht.cjs.map → ScopeComponent-CbzbU6pi.cjs.map} +1 -1
- package/dist/chunks/{index-56SXuvlv.mjs → customPickerElements-CH9vlHLd.mjs} +47 -46
- package/dist/chunks/customPickerElements-CH9vlHLd.mjs.map +1 -0
- package/dist/chunks/{index-BV85rPB7.cjs → customPickerElements-Q3Y7fgZ1.cjs} +42 -41
- package/dist/chunks/customPickerElements-Q3Y7fgZ1.cjs.map +1 -0
- package/dist/chunks/{mdi-B_QN3oas.cjs → mdi-BBwE-MZC.cjs} +3 -1
- package/dist/chunks/{mdi-B_QN3oas.cjs.map → mdi-BBwE-MZC.cjs.map} +1 -1
- package/dist/chunks/{mdi-DoaiuWye.mjs → mdi-DXu6GWVJ.mjs} +8 -6
- package/dist/chunks/{mdi-DoaiuWye.mjs.map → mdi-DXu6GWVJ.mjs.map} +1 -1
- package/dist/chunks/{referencePickerModal-CtMUY45l.mjs → referencePickerModal-B2nPzrke.mjs} +45 -51
- package/dist/chunks/referencePickerModal-B2nPzrke.mjs.map +1 -0
- package/dist/chunks/{referencePickerModal-C1Srl207.cjs → referencePickerModal-BINQW-pL.cjs} +53 -59
- package/dist/chunks/referencePickerModal-BINQW-pL.cjs.map +1 -0
- package/dist/components/NcAssistantButton/index.d.ts +5 -0
- package/dist/components/NcAssistantContent/index.d.ts +5 -0
- package/dist/components/NcAssistantIcon/index.d.ts +5 -0
- package/dist/functions/reference/customPickerElements.d.ts +56 -0
- package/dist/functions/reference/index.d.ts +8 -0
- package/dist/functions/reference/providerHelper.d.ts +45 -0
- package/dist/functions/reference/referencePickerModal.d.ts +11 -0
- package/dist/functions/reference/widgets.d.ts +47 -28
- package/dist/functions/registerReference/index.d.ts +6 -0
- package/dist/index.cjs +48 -39
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +46 -37
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/NcCheckboxRadioSwitch-ip_mRd2T.mjs.map +0 -1
- package/dist/chunks/NcCheckboxRadioSwitch-kdoDmLpF.cjs.map +0 -1
- package/dist/chunks/NcPopover-CAJVK-MR.mjs.map +0 -1
- package/dist/chunks/NcPopover-QGSKWhSP.cjs.map +0 -1
- package/dist/chunks/index-56SXuvlv.mjs.map +0 -1
- package/dist/chunks/index-BV85rPB7.cjs.map +0 -1
- package/dist/chunks/referencePickerModal-C1Srl207.cjs.map +0 -1
- package/dist/chunks/referencePickerModal-CtMUY45l.mjs.map +0 -1
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
import '../assets/referencePickerModal-
|
|
2
|
-
import {
|
|
1
|
+
import '../assets/referencePickerModal-DrvqNTIf.css';
|
|
2
|
+
import { d as destroyWidget, a as renderWidget, i as isWidgetRegistered, h as hasInteractiveView, j as hasFullWidth, c as renderCustomPickerElement, e as destroyCustomPickerElement, f as isCustomPickerElementRegistered, g as getCustomPickerElementSize } from "./customPickerElements-CH9vlHLd.mjs";
|
|
3
3
|
import { n as normalizeComponent } from "./_plugin-vue2_normalizer-DU4iP6Vu.mjs";
|
|
4
4
|
import { r as register, V as t21, a as t, W as t7, X as t44, Y as t38, Z as t22, x as t40, _ as t29, n as t17, $ as t11 } from "./_l10n-CW0YfIWk.mjs";
|
|
5
5
|
import axios from "@nextcloud/axios";
|
|
6
6
|
import { loadState } from "@nextcloud/initial-state";
|
|
7
7
|
import { imagePath, generateOcsUrl } from "@nextcloud/router";
|
|
8
|
+
import { l as logger } from "./logger-D3RVzcfQ.mjs";
|
|
8
9
|
import NcEmptyContent from "../Components/NcEmptyContent.mjs";
|
|
9
10
|
import { N as NcHighlight } from "./index-Bz6q9mZw.mjs";
|
|
10
|
-
import { N as NcSelect } from "./NcSelect-
|
|
11
|
+
import { N as NcSelect } from "./NcSelect-okD5YTJq.mjs";
|
|
11
12
|
import { useElementSize, useIntersectionObserver } from "@vueuse/core";
|
|
12
13
|
import Vue, { ref, nextTick } from "vue";
|
|
13
14
|
import { RouterLink } from "vue-router";
|
|
14
15
|
import { g as getRoute } from "./autolink-cbuFALXr.mjs";
|
|
15
16
|
import NcButton from "../Components/NcButton.mjs";
|
|
16
17
|
import NcLoadingIcon from "../Components/NcLoadingIcon.mjs";
|
|
17
|
-
import { N as NcTextField } from "./NcTextField-
|
|
18
|
-
import { D as DotsHorizontalIcon } from "./NcActions-
|
|
18
|
+
import { N as NcTextField } from "./NcTextField-eKuP0G6I.mjs";
|
|
19
|
+
import { D as DotsHorizontalIcon } from "./NcActions-DdARGGZ_.mjs";
|
|
19
20
|
import NcModal from "../Components/NcModal.mjs";
|
|
20
21
|
import { emit } from "@nextcloud/event-bus";
|
|
21
22
|
import { A as ArrowLeft } from "./ArrowLeft-DuT2LZOm.mjs";
|
|
@@ -258,7 +259,7 @@ var __component__$7 = /* @__PURE__ */ normalizeComponent(
|
|
|
258
259
|
_sfc_staticRenderFns$7,
|
|
259
260
|
false,
|
|
260
261
|
null,
|
|
261
|
-
"
|
|
262
|
+
"93468058"
|
|
262
263
|
);
|
|
263
264
|
const NcCustomPickerElement = __component__$7.exports;
|
|
264
265
|
register(t7);
|
|
@@ -266,14 +267,11 @@ const anyLinkProviderId = "any-link";
|
|
|
266
267
|
const anyLinkProvider = {
|
|
267
268
|
id: anyLinkProviderId,
|
|
268
269
|
title: t("Any link"),
|
|
270
|
+
order: 0,
|
|
269
271
|
icon_url: imagePath("core", "filetypes/link.svg")
|
|
270
272
|
};
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
}
|
|
274
|
-
if (!window._vue_richtext_reference_provider_timestamps) {
|
|
275
|
-
window._vue_richtext_reference_provider_timestamps = loadState("core", "reference-provider-timestamps", {});
|
|
276
|
-
}
|
|
273
|
+
window._vue_richtext_reference_providers ??= loadState("core", "reference-provider-list", []);
|
|
274
|
+
window._vue_richtext_reference_provider_timestamps ??= loadState("core", "reference-provider-timestamps", {});
|
|
277
275
|
function getProvider(providerId) {
|
|
278
276
|
if (providerId === anyLinkProviderId) {
|
|
279
277
|
return anyLinkProvider;
|
|
@@ -284,7 +282,7 @@ function getProviders() {
|
|
|
284
282
|
return window._vue_richtext_reference_providers.filter((p) => {
|
|
285
283
|
const keep = !!p.search_providers_ids && p.search_providers_ids.length > 0 || isCustomPickerElementRegistered(p.id);
|
|
286
284
|
if (!keep) {
|
|
287
|
-
|
|
285
|
+
logger.debug(`[smart picker] ${p.id} reference provider is discoverable but does not have any related search provider or custom picker component registered`);
|
|
288
286
|
}
|
|
289
287
|
return keep;
|
|
290
288
|
});
|
|
@@ -299,7 +297,7 @@ function sortProviders(providerList) {
|
|
|
299
297
|
return ta === tb ? 0 : tb === void 0 ? -1 : ta === void 0 ? 1 : ta > tb ? -1 : 1;
|
|
300
298
|
});
|
|
301
299
|
}
|
|
302
|
-
function searchProvider(query, limit
|
|
300
|
+
function searchProvider(query, limit) {
|
|
303
301
|
const providers = getProviders();
|
|
304
302
|
const escapedQuery = query.replace(/[/\-\\^$*+?.()|[\]{}]/g, "\\$&");
|
|
305
303
|
const regexp = new RegExp(escapedQuery, "i");
|
|
@@ -313,15 +311,11 @@ function searchProvider(query, limit = null) {
|
|
|
313
311
|
}
|
|
314
312
|
return searchResult;
|
|
315
313
|
}
|
|
316
|
-
function touchProvider(providerId) {
|
|
314
|
+
async function touchProvider(providerId) {
|
|
317
315
|
const timestamp = Math.floor(Date.now() / 1e3);
|
|
318
|
-
const params = {
|
|
319
|
-
timestamp
|
|
320
|
-
};
|
|
321
316
|
const url = generateOcsUrl("references/provider/{providerId}", { providerId });
|
|
322
|
-
axios.put(url,
|
|
323
|
-
|
|
324
|
-
});
|
|
317
|
+
await axios.put(url, { timestamp });
|
|
318
|
+
window._vue_richtext_reference_provider_timestamps[providerId] = timestamp;
|
|
325
319
|
}
|
|
326
320
|
let mytimer = 0;
|
|
327
321
|
function delay(callback, ms) {
|
|
@@ -447,7 +441,7 @@ var __component__$5 = /* @__PURE__ */ normalizeComponent(
|
|
|
447
441
|
_sfc_staticRenderFns$5,
|
|
448
442
|
false,
|
|
449
443
|
null,
|
|
450
|
-
"
|
|
444
|
+
"10f6fc31"
|
|
451
445
|
);
|
|
452
446
|
const NcProviderList = __component__$5.exports;
|
|
453
447
|
register(t22);
|
|
@@ -933,7 +927,7 @@ var __component__$1 = /* @__PURE__ */ normalizeComponent(
|
|
|
933
927
|
_sfc_staticRenderFns$1,
|
|
934
928
|
false,
|
|
935
929
|
null,
|
|
936
|
-
"
|
|
930
|
+
"98624f25"
|
|
937
931
|
);
|
|
938
932
|
const NcReferencePicker = __component__$1.exports;
|
|
939
933
|
register(t11, t17);
|
|
@@ -1041,43 +1035,43 @@ var __component__ = /* @__PURE__ */ normalizeComponent(
|
|
|
1041
1035
|
_sfc_staticRenderFns,
|
|
1042
1036
|
false,
|
|
1043
1037
|
null,
|
|
1044
|
-
"
|
|
1038
|
+
"13d8f21e"
|
|
1045
1039
|
);
|
|
1046
1040
|
const NcReferencePickerModal = __component__.exports;
|
|
1047
|
-
async function getLinkWithPicker(providerId
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
});
|
|
1041
|
+
async function getLinkWithPicker(providerId, isInsideViewer) {
|
|
1042
|
+
const modalId = "referencePickerModal";
|
|
1043
|
+
const modalElement = document.createElement("div");
|
|
1044
|
+
modalElement.id = modalId;
|
|
1045
|
+
document.body.append(modalElement);
|
|
1046
|
+
const { promise, reject, resolve } = Promise.withResolvers();
|
|
1047
|
+
const initialProvider = providerId && getProvider(providerId) || null;
|
|
1048
|
+
const View = Vue.extend(NcReferencePickerModal);
|
|
1049
|
+
const view = new View({
|
|
1050
|
+
propsData: {
|
|
1051
|
+
initialProvider,
|
|
1052
|
+
isInsideViewer
|
|
1053
|
+
}
|
|
1054
|
+
}).$mount(modalElement);
|
|
1055
|
+
view.$on("cancel", () => {
|
|
1056
|
+
view.$destroy();
|
|
1057
|
+
reject(new Error("User cancellation"));
|
|
1058
|
+
});
|
|
1059
|
+
view.$on("submit", (link) => {
|
|
1060
|
+
view.$destroy();
|
|
1061
|
+
resolve(link);
|
|
1069
1062
|
});
|
|
1063
|
+
return promise;
|
|
1070
1064
|
}
|
|
1071
1065
|
export {
|
|
1072
1066
|
NcReferenceWidget as N,
|
|
1073
|
-
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
|
|
1067
|
+
getProvider as a,
|
|
1068
|
+
getProviders as b,
|
|
1069
|
+
searchProvider as c,
|
|
1070
|
+
anyLinkProviderId as d,
|
|
1077
1071
|
NcReferencePicker as e,
|
|
1078
1072
|
NcReferencePickerModal as f,
|
|
1079
1073
|
getLinkWithPicker as g,
|
|
1080
1074
|
NcSearch as h,
|
|
1081
1075
|
sortProviders as s
|
|
1082
1076
|
};
|
|
1083
|
-
//# sourceMappingURL=referencePickerModal-
|
|
1077
|
+
//# sourceMappingURL=referencePickerModal-B2nPzrke.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"referencePickerModal-B2nPzrke.mjs","sources":["../../src/components/NcRichText/NcReferenceWidget.vue","../../src/components/NcRichText/NcReferencePicker/NcCustomPickerElement.vue","../../src/functions/reference/providerHelper.ts","../../src/components/NcRichText/NcReferencePicker/utils.js","../../node_modules/vue-material-design-icons/LinkVariant.vue","../../src/components/NcRichText/NcReferencePicker/NcProviderList.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.ts"],"sourcesContent":["<!--\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.js'\nimport { renderWidget, isWidgetRegistered, destroyWidget, hasInteractiveView, hasFullWidth } from './../../functions/reference/widgets.ts'\n\nimport NcButton from '../../components/NcButton/index.js'\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\tbeforeDestroy() {\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;\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 ref=\"domElement\" />\n</template>\n\n<script>\nimport {\n\trenderCustomPickerElement,\n\tisCustomPickerElementRegistered,\n\tdestroyCustomPickerElement,\n} from '../../../functions/reference/customPickerElements.ts'\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\tbeforeDestroy() {\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.ts'\n\nimport { t } from '../../l10n.js'\n\nimport axios from '@nextcloud/axios'\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateOcsUrl, imagePath } from '@nextcloud/router'\nimport { logger } from '../../utils/logger.ts'\n\nexport interface ReferenceProvider {\n\tid: string\n\ttitle: string\n\ticon_url: string\n\torder: number\n\tsearch_providers_ids?: string[]\n}\n\nexport const anyLinkProviderId = 'any-link'\n\nconst anyLinkProvider: ReferenceProvider = {\n\tid: anyLinkProviderId,\n\ttitle: t('Any link'),\n\torder: 0,\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\nwindow._vue_richtext_reference_providers ??= loadState('core', 'reference-provider-list', [])\n// single timestamps object used by every entity in the page\nwindow._vue_richtext_reference_provider_timestamps ??= loadState('core', 'reference-provider-timestamps', {})\n\n/**\n * @param providerId - The provider ID\n * @return The provider object\n */\nexport function getProvider(providerId: string): ReferenceProvider|undefined {\n\tif (providerId === anyLinkProviderId) {\n\t\treturn anyLinkProvider\n\t}\n\n\treturn getProviders().find(p => p.id === providerId)\n}\n\n/**\n * Get raw provider list as it was provided by the server\n */\nexport function getProviders(): ReferenceProvider[] {\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\tlogger.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 providerList - List of provider objects\n * @return The sorted provider list\n */\nexport function sortProviders(providerList: ReferenceProvider[]): ReferenceProvider[] {\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 query - The search query\n * @param limit - (optional) max number of results\n * @return The sorted/filtered provider list\n */\nexport function searchProvider(query: string, limit?: number): ReferenceProvider[] {\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\n\tconst searchResult = limit\n\t\t? filteredSortedProviders.slice(0, limit)\n\t\t: filteredSortedProviders\n\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 providerId - The id of the search provider\n */\nexport async function touchProvider(providerId: number) {\n\tconst timestamp = Math.floor(Date.now() / 1000)\n\tconst url = generateOcsUrl('references/provider/{providerId}', { providerId })\n\n\tawait axios.put(url, { timestamp })\n\twindow._vue_richtext_reference_provider_timestamps[providerId] = timestamp\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@input=\"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.ts'\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, loading) {\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: 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\t:value.sync=\"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:value=\"onInput\"\n\t\t\t\t@keyup.native.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@input=\"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\tbeforeDestroy() {\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, loading) {\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.ts'\nimport { touchProvider } from '../../../functions/reference/providerHelper.ts'\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\t:can-close=\"true\"\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.ts'\nimport NcButton from '../../NcButton/index.js'\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\" scoped>\n// this is to avoid scroll on the container and leave it to the result block\n.reference-picker-modal :deep(.modal-container) {\n\tdisplay: flex !important;\n}\n\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.ts'\n\nimport Vue from 'vue'\n\n/**\n * Creates a reference picker modal and return a promise which provides the result\n *\n * @param providerId - Optional ID of initial selected provider\n * @param isInsideViewer - Should be true if this function is called while the Viewer is displayed\n */\nexport async function getLinkWithPicker(providerId?: string, isInsideViewer?: boolean): Promise<string> {\n\tconst modalId = 'referencePickerModal'\n\tconst modalElement = document.createElement('div')\n\tmodalElement.id = modalId\n\tdocument.body.append(modalElement)\n\t\n\tconst { promise, reject, resolve } = Promise.withResolvers<string>()\n\tconst initialProvider = (providerId && getProvider(providerId)) || null\n\tconst View = Vue.extend(NcReferencePickerModal)\n\tconst view = new View({\n\t\tpropsData: {\n\t\t\tinitialProvider,\n\t\t\tisInsideViewer,\n\t\t},\n\t}).$mount(modalElement)\n\n\tview.$on('cancel', () => {\n\t\tview.$destroy()\n\t\treject(new Error('User cancellation'))\n\t})\n\tview.$on('submit', (link) => {\n\t\tview.$destroy()\n\t\tresolve(link)\n\t})\n\n\treturn promise\n}\n"],"names":["_sfc_main","ArrowLeftIcon","CloseIcon"],"mappings":"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","x_google_ignoreList":[4]}
|
|
@@ -1,22 +1,23 @@
|
|
|
1
|
-
require('../assets/referencePickerModal-
|
|
1
|
+
require('../assets/referencePickerModal-DrvqNTIf.css');
|
|
2
2
|
"use strict";
|
|
3
|
-
const
|
|
3
|
+
const customPickerElements = require("./customPickerElements-Q3Y7fgZ1.cjs");
|
|
4
4
|
const _pluginVue2_normalizer = require("./_plugin-vue2_normalizer-V0q-tHlQ.cjs");
|
|
5
5
|
const _l10n = require("./_l10n-RKohWu5d.cjs");
|
|
6
6
|
const axios = require("@nextcloud/axios");
|
|
7
7
|
const initialState = require("@nextcloud/initial-state");
|
|
8
8
|
const router = require("@nextcloud/router");
|
|
9
|
+
const logger = require("./logger-3HuiEIF6.cjs");
|
|
9
10
|
const Components_NcEmptyContent = require("../Components/NcEmptyContent.cjs");
|
|
10
11
|
const Components_NcHighlight = require("./index-DIJxEozm.cjs");
|
|
11
|
-
const NcSelect = require("./NcSelect-
|
|
12
|
+
const NcSelect = require("./NcSelect-CrxryIo3.cjs");
|
|
12
13
|
const core = require("@vueuse/core");
|
|
13
14
|
const Vue = require("vue");
|
|
14
15
|
const vueRouter = require("vue-router");
|
|
15
16
|
const autolink = require("./autolink-BAgL31EZ.cjs");
|
|
16
17
|
const Components_NcButton = require("../Components/NcButton.cjs");
|
|
17
18
|
const Components_NcLoadingIcon = require("../Components/NcLoadingIcon.cjs");
|
|
18
|
-
const NcTextField = require("./NcTextField-
|
|
19
|
-
const NcActions = require("./NcActions-
|
|
19
|
+
const NcTextField = require("./NcTextField-DDJqk3SI.cjs");
|
|
20
|
+
const NcActions = require("./NcActions-DRCkAU8h.cjs");
|
|
20
21
|
const Components_NcModal = require("../Components/NcModal.cjs");
|
|
21
22
|
const eventBus = require("@nextcloud/event-bus");
|
|
22
23
|
const ArrowLeft = require("./ArrowLeft-BP7yfzCQ.cjs");
|
|
@@ -72,13 +73,13 @@ const _sfc_main$8 = {
|
|
|
72
73
|
return !this.interactiveOptIn && this.interactive || this.showInteractive;
|
|
73
74
|
},
|
|
74
75
|
hasFullWidth() {
|
|
75
|
-
return
|
|
76
|
+
return customPickerElements.hasFullWidth(this.reference.richObjectType);
|
|
76
77
|
},
|
|
77
78
|
hasCustomWidget() {
|
|
78
|
-
return
|
|
79
|
+
return customPickerElements.isWidgetRegistered(this.reference.richObjectType);
|
|
79
80
|
},
|
|
80
81
|
hasInteractiveView() {
|
|
81
|
-
return
|
|
82
|
+
return customPickerElements.isWidgetRegistered(this.reference.richObjectType) && customPickerElements.hasInteractiveView(this.reference.richObjectType);
|
|
82
83
|
},
|
|
83
84
|
noAccess() {
|
|
84
85
|
return this.reference && !this.reference.accessible;
|
|
@@ -165,7 +166,7 @@ const _sfc_main$8 = {
|
|
|
165
166
|
widget.style = "width: 100%;";
|
|
166
167
|
this.$refs.customWidget.appendChild(widget);
|
|
167
168
|
this.$nextTick(() => {
|
|
168
|
-
|
|
169
|
+
customPickerElements.renderWidget(widget, {
|
|
169
170
|
...this.reference,
|
|
170
171
|
interactive: this.isInteractive
|
|
171
172
|
});
|
|
@@ -174,7 +175,7 @@ const _sfc_main$8 = {
|
|
|
174
175
|
},
|
|
175
176
|
destroyWidget() {
|
|
176
177
|
if (this.rendered) {
|
|
177
|
-
|
|
178
|
+
customPickerElements.destroyWidget(this.reference.richObjectType, this.$el);
|
|
178
179
|
this.rendered = false;
|
|
179
180
|
}
|
|
180
181
|
}
|
|
@@ -211,7 +212,7 @@ const _sfc_main$7 = {
|
|
|
211
212
|
],
|
|
212
213
|
data() {
|
|
213
214
|
return {
|
|
214
|
-
isRegistered:
|
|
215
|
+
isRegistered: customPickerElements.isCustomPickerElementRegistered(this.provider.id),
|
|
215
216
|
renderResult: null
|
|
216
217
|
};
|
|
217
218
|
},
|
|
@@ -222,7 +223,7 @@ const _sfc_main$7 = {
|
|
|
222
223
|
},
|
|
223
224
|
beforeDestroy() {
|
|
224
225
|
if (this.isRegistered) {
|
|
225
|
-
|
|
226
|
+
customPickerElements.destroyCustomPickerElement(this.provider.id, this.$el, this.renderResult);
|
|
226
227
|
}
|
|
227
228
|
},
|
|
228
229
|
methods: {
|
|
@@ -230,7 +231,7 @@ const _sfc_main$7 = {
|
|
|
230
231
|
if (this.$refs.domElement) {
|
|
231
232
|
this.$refs.domElement.innerHTML = "";
|
|
232
233
|
}
|
|
233
|
-
const renderFunctionResult =
|
|
234
|
+
const renderFunctionResult = customPickerElements.renderCustomPickerElement(this.$refs.domElement, { providerId: this.provider.id, accessible: false });
|
|
234
235
|
Promise.resolve(renderFunctionResult).then((result) => {
|
|
235
236
|
this.renderResult = result;
|
|
236
237
|
if (this.renderResult.object?._isVue && this.renderResult.object?.$on) {
|
|
@@ -262,7 +263,7 @@ var __component__$7 = /* @__PURE__ */ _pluginVue2_normalizer.normalizeComponent(
|
|
|
262
263
|
_sfc_staticRenderFns$7,
|
|
263
264
|
false,
|
|
264
265
|
null,
|
|
265
|
-
"
|
|
266
|
+
"93468058"
|
|
266
267
|
);
|
|
267
268
|
const NcCustomPickerElement = __component__$7.exports;
|
|
268
269
|
_l10n.register(_l10n.t7);
|
|
@@ -270,14 +271,11 @@ const anyLinkProviderId = "any-link";
|
|
|
270
271
|
const anyLinkProvider = {
|
|
271
272
|
id: anyLinkProviderId,
|
|
272
273
|
title: _l10n.t("Any link"),
|
|
274
|
+
order: 0,
|
|
273
275
|
icon_url: router.imagePath("core", "filetypes/link.svg")
|
|
274
276
|
};
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
}
|
|
278
|
-
if (!window._vue_richtext_reference_provider_timestamps) {
|
|
279
|
-
window._vue_richtext_reference_provider_timestamps = initialState.loadState("core", "reference-provider-timestamps", {});
|
|
280
|
-
}
|
|
277
|
+
window._vue_richtext_reference_providers ??= initialState.loadState("core", "reference-provider-list", []);
|
|
278
|
+
window._vue_richtext_reference_provider_timestamps ??= initialState.loadState("core", "reference-provider-timestamps", {});
|
|
281
279
|
function getProvider(providerId) {
|
|
282
280
|
if (providerId === anyLinkProviderId) {
|
|
283
281
|
return anyLinkProvider;
|
|
@@ -286,9 +284,9 @@ function getProvider(providerId) {
|
|
|
286
284
|
}
|
|
287
285
|
function getProviders() {
|
|
288
286
|
return window._vue_richtext_reference_providers.filter((p) => {
|
|
289
|
-
const keep = !!p.search_providers_ids && p.search_providers_ids.length > 0 ||
|
|
287
|
+
const keep = !!p.search_providers_ids && p.search_providers_ids.length > 0 || customPickerElements.isCustomPickerElementRegistered(p.id);
|
|
290
288
|
if (!keep) {
|
|
291
|
-
|
|
289
|
+
logger.logger.debug(`[smart picker] ${p.id} reference provider is discoverable but does not have any related search provider or custom picker component registered`);
|
|
292
290
|
}
|
|
293
291
|
return keep;
|
|
294
292
|
});
|
|
@@ -303,7 +301,7 @@ function sortProviders(providerList) {
|
|
|
303
301
|
return ta === tb ? 0 : tb === void 0 ? -1 : ta === void 0 ? 1 : ta > tb ? -1 : 1;
|
|
304
302
|
});
|
|
305
303
|
}
|
|
306
|
-
function searchProvider(query, limit
|
|
304
|
+
function searchProvider(query, limit) {
|
|
307
305
|
const providers = getProviders();
|
|
308
306
|
const escapedQuery = query.replace(/[/\-\\^$*+?.()|[\]{}]/g, "\\$&");
|
|
309
307
|
const regexp = new RegExp(escapedQuery, "i");
|
|
@@ -317,15 +315,11 @@ function searchProvider(query, limit = null) {
|
|
|
317
315
|
}
|
|
318
316
|
return searchResult;
|
|
319
317
|
}
|
|
320
|
-
function touchProvider(providerId) {
|
|
318
|
+
async function touchProvider(providerId) {
|
|
321
319
|
const timestamp = Math.floor(Date.now() / 1e3);
|
|
322
|
-
const params = {
|
|
323
|
-
timestamp
|
|
324
|
-
};
|
|
325
320
|
const url = router.generateOcsUrl("references/provider/{providerId}", { providerId });
|
|
326
|
-
axios__default.default.put(url,
|
|
327
|
-
|
|
328
|
-
});
|
|
321
|
+
await axios__default.default.put(url, { timestamp });
|
|
322
|
+
window._vue_richtext_reference_provider_timestamps[providerId] = timestamp;
|
|
329
323
|
}
|
|
330
324
|
let mytimer = 0;
|
|
331
325
|
function delay(callback, ms) {
|
|
@@ -451,7 +445,7 @@ var __component__$5 = /* @__PURE__ */ _pluginVue2_normalizer.normalizeComponent(
|
|
|
451
445
|
_sfc_staticRenderFns$5,
|
|
452
446
|
false,
|
|
453
447
|
null,
|
|
454
|
-
"
|
|
448
|
+
"10f6fc31"
|
|
455
449
|
);
|
|
456
450
|
const NcProviderList = __component__$5.exports;
|
|
457
451
|
_l10n.register(_l10n.t22);
|
|
@@ -855,7 +849,7 @@ const _sfc_main$1 = {
|
|
|
855
849
|
},
|
|
856
850
|
computed: {
|
|
857
851
|
mode() {
|
|
858
|
-
return this.selectedProvider === null ? MODES.providerList :
|
|
852
|
+
return this.selectedProvider === null ? MODES.providerList : customPickerElements.isCustomPickerElementRegistered(this.selectedProvider.id) ? MODES.customElement : this.selectedProvider.search_providers_ids ? MODES.searchInput : MODES.standardLinkInput;
|
|
859
853
|
},
|
|
860
854
|
pickerWrapperStyle() {
|
|
861
855
|
return {
|
|
@@ -937,7 +931,7 @@ var __component__$1 = /* @__PURE__ */ _pluginVue2_normalizer.normalizeComponent(
|
|
|
937
931
|
_sfc_staticRenderFns$1,
|
|
938
932
|
false,
|
|
939
933
|
null,
|
|
940
|
-
"
|
|
934
|
+
"98624f25"
|
|
941
935
|
);
|
|
942
936
|
const NcReferencePicker = __component__$1.exports;
|
|
943
937
|
_l10n.register(_l10n.t11, _l10n.t17);
|
|
@@ -995,10 +989,10 @@ const _sfc_main = {
|
|
|
995
989
|
return this.initialProvider === null && this.isProviderSelected;
|
|
996
990
|
},
|
|
997
991
|
modalSize() {
|
|
998
|
-
return this.isProviderSelected &&
|
|
992
|
+
return this.isProviderSelected && customPickerElements.isCustomPickerElementRegistered(this.selectedProvider.id) ? customPickerElements.getCustomPickerElementSize(this.selectedProvider.id) ?? "large" : "normal";
|
|
999
993
|
},
|
|
1000
994
|
showModalName() {
|
|
1001
|
-
return !this.isProviderSelected || !
|
|
995
|
+
return !this.isProviderSelected || !customPickerElements.isCustomPickerElementRegistered(this.selectedProvider.id);
|
|
1002
996
|
},
|
|
1003
997
|
modalName() {
|
|
1004
998
|
return this.isProviderSelected ? this.selectedProvider.title : _l10n.t("Smart Picker");
|
|
@@ -1045,32 +1039,32 @@ var __component__ = /* @__PURE__ */ _pluginVue2_normalizer.normalizeComponent(
|
|
|
1045
1039
|
_sfc_staticRenderFns,
|
|
1046
1040
|
false,
|
|
1047
1041
|
null,
|
|
1048
|
-
"
|
|
1042
|
+
"13d8f21e"
|
|
1049
1043
|
);
|
|
1050
1044
|
const NcReferencePickerModal = __component__.exports;
|
|
1051
|
-
async function getLinkWithPicker(providerId
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1069
|
-
|
|
1070
|
-
|
|
1071
|
-
|
|
1072
|
-
});
|
|
1045
|
+
async function getLinkWithPicker(providerId, isInsideViewer) {
|
|
1046
|
+
const modalId = "referencePickerModal";
|
|
1047
|
+
const modalElement = document.createElement("div");
|
|
1048
|
+
modalElement.id = modalId;
|
|
1049
|
+
document.body.append(modalElement);
|
|
1050
|
+
const { promise, reject, resolve } = Promise.withResolvers();
|
|
1051
|
+
const initialProvider = providerId && getProvider(providerId) || null;
|
|
1052
|
+
const View = Vue__default.default.extend(NcReferencePickerModal);
|
|
1053
|
+
const view = new View({
|
|
1054
|
+
propsData: {
|
|
1055
|
+
initialProvider,
|
|
1056
|
+
isInsideViewer
|
|
1057
|
+
}
|
|
1058
|
+
}).$mount(modalElement);
|
|
1059
|
+
view.$on("cancel", () => {
|
|
1060
|
+
view.$destroy();
|
|
1061
|
+
reject(new Error("User cancellation"));
|
|
1062
|
+
});
|
|
1063
|
+
view.$on("submit", (link) => {
|
|
1064
|
+
view.$destroy();
|
|
1065
|
+
resolve(link);
|
|
1073
1066
|
});
|
|
1067
|
+
return promise;
|
|
1074
1068
|
}
|
|
1075
1069
|
exports.NcReferencePicker = NcReferencePicker;
|
|
1076
1070
|
exports.NcReferencePickerModal = NcReferencePickerModal;
|
|
@@ -1082,4 +1076,4 @@ exports.getProvider = getProvider;
|
|
|
1082
1076
|
exports.getProviders = getProviders;
|
|
1083
1077
|
exports.searchProvider = searchProvider;
|
|
1084
1078
|
exports.sortProviders = sortProviders;
|
|
1085
|
-
//# sourceMappingURL=referencePickerModal-
|
|
1079
|
+
//# sourceMappingURL=referencePickerModal-BINQW-pL.cjs.map
|