@nextcloud/vue 9.6.0 → 9.8.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 +43 -0
- package/dist/assets/{NcActionButton-Bb0ihLdt.css → NcActionButton-DLer-aUY.css} +3 -2
- package/dist/assets/{NcActionCheckbox-DLJQfCUI.css → NcActionCheckbox-wD8m_a8-.css} +3 -2
- package/dist/assets/{NcActionInput-BO4gR6sg.css → NcActionInput-t9WvlgV0.css} +66 -66
- package/dist/assets/{NcActionLink-DAEr-vmd.css → NcActionLink-b4Ph5q10.css} +3 -2
- package/dist/assets/{NcActionRadio-Bd4RFH-l.css → NcActionRadio-D2rLM1ci.css} +3 -2
- package/dist/assets/{NcActionRouter-DeYzeM5W.css → NcActionRouter-BWXfCfxM.css} +3 -2
- package/dist/assets/{NcActionText-D9InmayH.css → NcActionText-Dzegj6AY.css} +3 -2
- package/dist/assets/{NcActionTextEditable-TPYz4ma-.css → NcActionTextEditable-BlZeHZ7J.css} +66 -66
- package/dist/assets/{NcAppNavigation-f2zUqaiQ.css → NcAppNavigation-ykL7Wz6L.css} +18 -12
- package/dist/assets/{NcAppNavigationCaption-HUg9fMCm.css → NcAppNavigationCaption-ggcWspH2.css} +8 -8
- package/dist/assets/{NcAppNavigationItem-qicc4X_c.css → NcAppNavigationItem-DF81QkEz.css} +78 -40
- package/dist/assets/{NcAppNavigationNewItem-e_CtdnzP.css → NcAppNavigationNewItem-vxkB61-C.css} +42 -4
- package/dist/assets/{NcAppNavigationSearch-Bpd_RlYz.css → NcAppNavigationSearch-DD7mo6OW.css} +8 -5
- package/dist/assets/{NcAppNavigationSettings-BmfpoWXN.css → NcAppNavigationSettings-HQEDobBQ.css} +1 -1
- package/dist/assets/NcAppSettingsDialog-B6-RqGYA.css +221 -0
- package/dist/assets/{NcAppSettingsSection-ObwpPdgW.css → NcAppSettingsSection-DIw8GLHR.css} +7 -7
- package/dist/assets/{NcAppSidebar-Ci7hXMpX.css → NcAppSidebar-BMon2CtX.css} +116 -70
- package/dist/assets/{NcAvatar-CuPj3fbb.css → NcAvatar-Bs7qEhkA.css} +25 -25
- package/dist/assets/{NcBreadcrumb-D9N_qB_o.css → NcBreadcrumb-BxhZKQlW.css} +16 -16
- package/dist/assets/{NcButton-CCY9S6Db.css → NcButton-Bf9wuDV-.css} +53 -50
- package/dist/assets/{NcCheckboxRadioSwitch-BBLFj8M-.css → NcCheckboxRadioSwitch-CZYa6mnQ.css} +51 -49
- package/dist/assets/{NcColorPicker-CCanY5eB.css → NcColorPicker-DVYGs8R3.css} +32 -32
- package/dist/assets/{NcContent-CVIwhwfc.css → NcContent-DXc6geEw.css} +23 -11
- package/dist/assets/{NcEmptyContent-CLjlZ-UT.css → NcEmptyContent-DJMDuGVz.css} +10 -10
- package/dist/assets/{NcFormBoxItem-CATNOTQx.css → NcFormBoxItem-Bjbi17-B.css} +4 -0
- package/dist/assets/{NcFormGroup-BjWhd5Ky.css → NcFormGroup-qFucmL8a.css} +1 -1
- package/dist/assets/{NcHotkeyList-Braxeyah.css → NcHotkeyList-BfrEkKmK.css} +1 -1
- package/dist/assets/NcInputConfirmCancel-BEmwC87z.css +53 -0
- package/dist/assets/{NcInputField-DR0FULeu.css → NcInputField-DpyFJ1xw.css} +44 -44
- package/dist/assets/NcListItem-1uR7AJIf.css +219 -0
- package/dist/assets/{NcModal-CUh8AdAE.css → NcModal-UuJKmueo.css} +59 -59
- package/dist/assets/{NcNoteCard-DZSuYX4-.css → NcNoteCard-DfescGKl.css} +11 -11
- package/dist/assets/{NcPasswordField-ftYon3Xm.css → NcPasswordField-BN4HFgU5.css} +2 -2
- package/dist/assets/{NcRadioGroupButton-xGU7fVa3.css → NcRadioGroupButton-DUF_3DDU.css} +1 -1
- package/dist/assets/{NcRelatedResourcesPanel-D1efpH8E.css → NcRelatedResourcesPanel-CiG_Ixb6.css} +30 -30
- package/dist/assets/{NcRichContenteditable-Do20Rmk1.css → NcRichContenteditable-DNABzVif.css} +12 -12
- package/dist/assets/{NcRichText-ZpC0uhOy.css → NcRichText-D0Dv1hVB.css} +95 -102
- package/dist/assets/{NcTextArea-DF9NgPUa.css → NcTextArea-BxGe3Lqn.css} +28 -28
- package/dist/assets/autolink-C_iad4O_.css +25 -0
- package/dist/assets/{referencePickerModal-CpzDUJ5f.css → referencePickerModal-Dod7nzta.css} +18 -18
- package/dist/chunks/{NcActionButton-BuRnYpJX.mjs → NcActionButton-BJKJG2zO.mjs} +2 -2
- package/dist/chunks/{NcActionButton-BuRnYpJX.mjs.map → NcActionButton-BJKJG2zO.mjs.map} +1 -1
- package/dist/chunks/{NcActionButtonGroup-CrbcMWK-.mjs → NcActionButtonGroup-CgYSlRXJ.mjs} +2 -2
- package/dist/chunks/{NcActionButtonGroup-CrbcMWK-.mjs.map → NcActionButtonGroup-CgYSlRXJ.mjs.map} +1 -1
- package/dist/chunks/{NcActionCheckbox-CjawS972.mjs → NcActionCheckbox-D2Fu35M_.mjs} +2 -2
- package/dist/chunks/{NcActionCheckbox-CjawS972.mjs.map → NcActionCheckbox-D2Fu35M_.mjs.map} +1 -1
- package/dist/chunks/{NcActionInput-BrI5iKHo.mjs → NcActionInput-gv6uLn_N.mjs} +7 -7
- package/dist/chunks/{NcActionInput-BrI5iKHo.mjs.map → NcActionInput-gv6uLn_N.mjs.map} +1 -1
- package/dist/chunks/{NcActionLink-CCszAEdZ.mjs → NcActionLink-BFiaYt9A.mjs} +2 -2
- package/dist/chunks/{NcActionLink-CCszAEdZ.mjs.map → NcActionLink-BFiaYt9A.mjs.map} +1 -1
- package/dist/chunks/{NcActionRadio-BV9Ra5tq.mjs → NcActionRadio-BJ4i9n8a.mjs} +2 -2
- package/dist/chunks/{NcActionRadio-BV9Ra5tq.mjs.map → NcActionRadio-BJ4i9n8a.mjs.map} +1 -1
- package/dist/chunks/{NcActionRouter-CvDVCQiQ.mjs → NcActionRouter-vYFtIOzD.mjs} +2 -2
- package/dist/chunks/{NcActionRouter-CvDVCQiQ.mjs.map → NcActionRouter-vYFtIOzD.mjs.map} +1 -1
- package/dist/chunks/{NcActionText-SU4ghOlw.mjs → NcActionText-CQ9qwJ0p.mjs} +2 -2
- package/dist/chunks/{NcActionText-SU4ghOlw.mjs.map → NcActionText-CQ9qwJ0p.mjs.map} +1 -1
- package/dist/chunks/{NcActionTextEditable-BC66QDvV.mjs → NcActionTextEditable-Bd6fU8b3.mjs} +3 -3
- package/dist/chunks/NcActionTextEditable-Bd6fU8b3.mjs.map +1 -0
- package/dist/chunks/{NcActions-B_QR93qv.mjs → NcActions-fCXSb_0o.mjs} +3 -3
- package/dist/chunks/{NcActions-B_QR93qv.mjs.map → NcActions-fCXSb_0o.mjs.map} +1 -1
- package/dist/chunks/{NcAppContent-D27Kyq5N.mjs → NcAppContent-taTvqnvd.mjs} +3 -3
- package/dist/chunks/{NcAppContent-D27Kyq5N.mjs.map → NcAppContent-taTvqnvd.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigation-DQzgUarc.mjs → NcAppNavigation-Bb54U_qJ.mjs} +17 -6
- package/dist/chunks/NcAppNavigation-Bb54U_qJ.mjs.map +1 -0
- package/dist/chunks/{NcAppNavigationCaption-DsM6rzrK.mjs → NcAppNavigationCaption-CwaRTmmd.mjs} +4 -4
- package/dist/chunks/{NcAppNavigationCaption-DsM6rzrK.mjs.map → NcAppNavigationCaption-CwaRTmmd.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationItem-XSXn3qhJ.mjs → NcAppNavigationItem-Dg2d2AwS.mjs} +20 -14
- package/dist/chunks/NcAppNavigationItem-Dg2d2AwS.mjs.map +1 -0
- package/dist/chunks/{NcAppNavigationNew-BkybFzV0.mjs → NcAppNavigationNew-Ch_kPggd.mjs} +2 -2
- package/dist/chunks/{NcAppNavigationNew-BkybFzV0.mjs.map → NcAppNavigationNew-Ch_kPggd.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationNewItem-CNb-I7xZ.mjs → NcAppNavigationNewItem-DYM8hEa7.mjs} +3 -3
- package/dist/chunks/{NcAppNavigationNewItem-CNb-I7xZ.mjs.map → NcAppNavigationNewItem-DYM8hEa7.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationSearch-DpcjjmY5.mjs → NcAppNavigationSearch-BWHsAoc1.mjs} +7 -7
- package/dist/chunks/NcAppNavigationSearch-BWHsAoc1.mjs.map +1 -0
- package/dist/chunks/{NcAppNavigationSettings-CxjLIB1E.mjs → NcAppNavigationSettings-CJ2z5cYU.mjs} +5 -5
- package/dist/chunks/{NcAppNavigationSettings-CxjLIB1E.mjs.map → NcAppNavigationSettings-CJ2z5cYU.mjs.map} +1 -1
- package/dist/chunks/{NcAppSettingsDialog-Brgi3W2x.mjs → NcAppSettingsDialog-37Ko8yBC.mjs} +20 -14
- package/dist/chunks/NcAppSettingsDialog-37Ko8yBC.mjs.map +1 -0
- package/dist/chunks/{NcAppSettingsSection-B-ak1kbx.mjs → NcAppSettingsSection-MusCsTGg.mjs} +3 -3
- package/dist/chunks/{NcAppSettingsSection-B-ak1kbx.mjs.map → NcAppSettingsSection-MusCsTGg.mjs.map} +1 -1
- package/dist/chunks/{NcAppSettingsShortcutsSection-HmIjAN0a.mjs → NcAppSettingsShortcutsSection-C0io5RJP.mjs} +3 -3
- package/dist/chunks/{NcAppSettingsShortcutsSection-HmIjAN0a.mjs.map → NcAppSettingsShortcutsSection-C0io5RJP.mjs.map} +1 -1
- package/dist/chunks/{NcAppSidebar-KwLsRcZO.mjs → NcAppSidebar-CV2t1fDr.mjs} +18 -13
- package/dist/chunks/NcAppSidebar-CV2t1fDr.mjs.map +1 -0
- package/dist/chunks/{NcAssistantButton-DxNbEbqt.mjs → NcAssistantButton-u8m6vfFY.mjs} +2 -2
- package/dist/chunks/NcAssistantButton-u8m6vfFY.mjs.map +1 -0
- package/dist/chunks/{NcAvatar-ruClKRzS.mjs → NcAvatar-QYahYt2p.mjs} +13 -13
- package/dist/chunks/{NcAvatar-ruClKRzS.mjs.map → NcAvatar-QYahYt2p.mjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumb-D2NtMTnk.mjs → NcBreadcrumb-CYI3eykz.mjs} +5 -5
- package/dist/chunks/{NcBreadcrumb-D2NtMTnk.mjs.map → NcBreadcrumb-CYI3eykz.mjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumbs-DDutZRtm.mjs → NcBreadcrumbs-DLKGhmX6.mjs} +6 -6
- package/dist/chunks/{NcBreadcrumbs-DDutZRtm.mjs.map → NcBreadcrumbs-DLKGhmX6.mjs.map} +1 -1
- package/dist/chunks/{NcButton-lQra4n2g.mjs → NcButton-CdQzGSB6.mjs} +6 -5
- package/dist/chunks/NcButton-CdQzGSB6.mjs.map +1 -0
- package/dist/chunks/{NcCheckboxRadioSwitch-D0gFwEVl.mjs → NcCheckboxRadioSwitch-B0KUiKrb.mjs} +10 -19
- package/dist/chunks/NcCheckboxRadioSwitch-B0KUiKrb.mjs.map +1 -0
- package/dist/chunks/{NcChip-CrVOU2RM.mjs → NcChip-CjYZUIUu.mjs} +4 -4
- package/dist/chunks/{NcChip-CrVOU2RM.mjs.map → NcChip-CjYZUIUu.mjs.map} +1 -1
- package/dist/chunks/{NcCollectionList-pWG42SU1.mjs → NcCollectionList-CU1Tigay.mjs} +7 -7
- package/dist/chunks/{NcCollectionList-pWG42SU1.mjs.map → NcCollectionList-CU1Tigay.mjs.map} +1 -1
- package/dist/chunks/{NcColorPicker-D07Se8Xb.mjs → NcColorPicker-DUIppkpO.mjs} +6 -6
- package/dist/chunks/{NcColorPicker-D07Se8Xb.mjs.map → NcColorPicker-DUIppkpO.mjs.map} +1 -1
- package/dist/chunks/{NcContent-D69ktIEB.mjs → NcContent-Dd15hgck.mjs} +8 -7
- package/dist/chunks/{NcContent-D69ktIEB.mjs.map → NcContent-Dd15hgck.mjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidget-CvpYMKur.mjs → NcDashboardWidget-CPI2VARK.mjs} +5 -5
- package/dist/chunks/{NcDashboardWidget-CvpYMKur.mjs.map → NcDashboardWidget-CPI2VARK.mjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidgetItem-ZKImQn7Y.mjs → NcDashboardWidgetItem-DJ820dYQ.mjs} +4 -4
- package/dist/chunks/{NcDashboardWidgetItem-ZKImQn7Y.mjs.map → NcDashboardWidgetItem-DJ820dYQ.mjs.map} +1 -1
- package/dist/chunks/NcDateTime.vue_vue_type_script_setup_true_lang-B4upiZjL.mjs.map +1 -1
- package/dist/chunks/{NcDateTimePicker-DksKisgE.mjs → NcDateTimePicker-8vIvIKoD.mjs} +4 -4
- package/dist/chunks/{NcDateTimePicker-DksKisgE.mjs.map → NcDateTimePicker-8vIvIKoD.mjs.map} +1 -1
- package/dist/chunks/{NcDateTimePickerNative-BvtMQDIe.mjs → NcDateTimePickerNative-XO_O44n2.mjs} +2 -2
- package/dist/chunks/{NcDateTimePickerNative-BvtMQDIe.mjs.map → NcDateTimePickerNative-XO_O44n2.mjs.map} +1 -1
- package/dist/chunks/{NcDialog-nDc1gW50.mjs → NcDialog-D-qxVQxL.mjs} +3 -3
- package/dist/chunks/{NcDialog-nDc1gW50.mjs.map → NcDialog-D-qxVQxL.mjs.map} +1 -1
- package/dist/chunks/{NcDialogButton.vue_vue_type_script_setup_true_lang-Z_bOZAn_.mjs → NcDialogButton.vue_vue_type_script_setup_true_lang-WZfDqDwc.mjs} +3 -3
- package/dist/chunks/{NcDialogButton.vue_vue_type_script_setup_true_lang-Z_bOZAn_.mjs.map → NcDialogButton.vue_vue_type_script_setup_true_lang-WZfDqDwc.mjs.map} +1 -1
- package/dist/chunks/{NcEmojiPicker-DGgqTnHp.mjs → NcEmojiPicker-DG3qO_fi.mjs} +7 -7
- package/dist/chunks/{NcEmojiPicker-DGgqTnHp.mjs.map → NcEmojiPicker-DG3qO_fi.mjs.map} +1 -1
- package/dist/chunks/{NcEmptyContent-CDgWCt_m.mjs → NcEmptyContent--TRhmNAW.mjs} +3 -3
- package/dist/chunks/{NcEmptyContent-CDgWCt_m.mjs.map → NcEmptyContent--TRhmNAW.mjs.map} +1 -1
- package/dist/chunks/{NcFilePicker-DtOsHB4q.mjs → NcFilePicker-DPiYJu5B.mjs} +3 -3
- package/dist/chunks/{NcFilePicker-DtOsHB4q.mjs.map → NcFilePicker-DPiYJu5B.mjs.map} +1 -1
- package/dist/chunks/{NcFormBoxButton-JvZ6_2E3.mjs → NcFormBoxButton-DhEpFn7z.mjs} +2 -2
- package/dist/chunks/{NcFormBoxButton-JvZ6_2E3.mjs.map → NcFormBoxButton-DhEpFn7z.mjs.map} +1 -1
- package/dist/chunks/{NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang-CjJ09v8E.mjs → NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang-DLh3Ylq_.mjs} +3 -3
- package/dist/chunks/{NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang-CjJ09v8E.mjs.map → NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang-DLh3Ylq_.mjs.map} +1 -1
- package/dist/chunks/{NcFormBoxItem-B7YVodqN.mjs → NcFormBoxItem-CHxCeuxj.mjs} +5 -5
- package/dist/chunks/{NcFormBoxItem-B7YVodqN.mjs.map → NcFormBoxItem-CHxCeuxj.mjs.map} +1 -1
- package/dist/chunks/{NcFormBoxSwitch-DP4dD4xe.mjs → NcFormBoxSwitch-QMisnf8C.mjs} +2 -2
- package/dist/chunks/{NcFormBoxSwitch-DP4dD4xe.mjs.map → NcFormBoxSwitch-QMisnf8C.mjs.map} +1 -1
- package/dist/chunks/{NcFormGroup-B3a2iUnT.mjs → NcFormGroup-BDjfDvq0.mjs} +2 -2
- package/dist/chunks/{NcFormGroup-B3a2iUnT.mjs.map → NcFormGroup-BDjfDvq0.mjs.map} +1 -1
- package/dist/chunks/{NcHeaderButton-CXu9xIQP.mjs → NcHeaderButton-lhDrtYWN.mjs} +2 -2
- package/dist/chunks/{NcHeaderButton-CXu9xIQP.mjs.map → NcHeaderButton-lhDrtYWN.mjs.map} +1 -1
- package/dist/chunks/{NcHeaderMenu-CYU4Y3h5.mjs → NcHeaderMenu-B5-BQbQ6.mjs} +2 -2
- package/dist/chunks/{NcHeaderMenu-CYU4Y3h5.mjs.map → NcHeaderMenu-B5-BQbQ6.mjs.map} +1 -1
- package/dist/chunks/{NcHotkey-DYevuX3i.mjs → NcHotkey-B0qDRy1t.mjs} +2 -2
- package/dist/chunks/{NcHotkey-DYevuX3i.mjs.map → NcHotkey-B0qDRy1t.mjs.map} +1 -1
- package/dist/chunks/{NcHotkeyList-CHLWkWfY.mjs → NcHotkeyList-Ca7AtgZ9.mjs} +3 -3
- package/dist/chunks/NcHotkeyList-Ca7AtgZ9.mjs.map +1 -0
- package/dist/chunks/{NcInputConfirmCancel-Ch0byKa3.mjs → NcInputConfirmCancel-BL_BkfXh.mjs} +16 -11
- package/dist/chunks/NcInputConfirmCancel-BL_BkfXh.mjs.map +1 -0
- package/dist/chunks/{NcInputField-CPL-a_MM.mjs → NcInputField-C3iof9pY.mjs} +5 -5
- package/dist/chunks/{NcInputField-CPL-a_MM.mjs.map → NcInputField-C3iof9pY.mjs.map} +1 -1
- package/dist/chunks/{NcKbd-DE1emmb_.mjs → NcKbd-Caeq706M.mjs} +2 -2
- package/dist/chunks/{NcKbd-DE1emmb_.mjs.map → NcKbd-Caeq706M.mjs.map} +1 -1
- package/dist/chunks/{NcListItem-DfFmqnmW.mjs → NcListItem-Chk9TtPa.mjs} +14 -7
- package/dist/chunks/NcListItem-Chk9TtPa.mjs.map +1 -0
- package/dist/chunks/{NcListItemIcon-DJJR4RtI.mjs → NcListItemIcon-vZ-OTxIa.mjs} +3 -3
- package/dist/chunks/{NcListItemIcon-DJJR4RtI.mjs.map → NcListItemIcon-vZ-OTxIa.mjs.map} +1 -1
- package/dist/chunks/{NcMentionBubble.vue_vue_type_style_index_0_scoped_45238efd_lang-D6LzDiYf.mjs → NcMentionBubble.vue_vue_type_style_index_0_scoped_45238efd_lang-BX_KxRP-.mjs} +2 -2
- package/dist/chunks/{NcMentionBubble.vue_vue_type_style_index_0_scoped_45238efd_lang-D6LzDiYf.mjs.map → NcMentionBubble.vue_vue_type_style_index_0_scoped_45238efd_lang-BX_KxRP-.mjs.map} +1 -1
- package/dist/chunks/{NcModal-kyWZ3UFC.mjs → NcModal-DyOZxq9E.mjs} +10 -11
- package/dist/chunks/NcModal-DyOZxq9E.mjs.map +1 -0
- package/dist/chunks/{NcNoteCard-CWiO3Dse.mjs → NcNoteCard-BJF9bD7S.mjs} +4 -4
- package/dist/chunks/{NcNoteCard-CWiO3Dse.mjs.map → NcNoteCard-BJF9bD7S.mjs.map} +1 -1
- package/dist/chunks/{NcPasswordField-BOLzDHBJ.mjs → NcPasswordField-ykWHv_hw.mjs} +12 -8
- package/dist/chunks/NcPasswordField-ykWHv_hw.mjs.map +1 -0
- package/dist/chunks/{NcRadioGroup-LkOsE5Mc.mjs → NcRadioGroup-EGc_x6uH.mjs} +2 -2
- package/dist/chunks/{NcRadioGroup-LkOsE5Mc.mjs.map → NcRadioGroup-EGc_x6uH.mjs.map} +1 -1
- package/dist/chunks/{NcRadioGroupButton-BtE_SLVd.mjs → NcRadioGroupButton-Dd5hMWx5.mjs} +2 -2
- package/dist/chunks/{NcRadioGroupButton-BtE_SLVd.mjs.map → NcRadioGroupButton-Dd5hMWx5.mjs.map} +1 -1
- package/dist/chunks/{NcRelatedResourcesPanel-Cn27rj0H.mjs → NcRelatedResourcesPanel-C7C0-pBV.mjs} +10 -10
- package/dist/chunks/NcRelatedResourcesPanel-C7C0-pBV.mjs.map +1 -0
- package/dist/chunks/{NcRichContenteditable-BREsny-v.mjs → NcRichContenteditable-DLPNb2TV.mjs} +26 -23
- package/dist/chunks/NcRichContenteditable-DLPNb2TV.mjs.map +1 -0
- package/dist/chunks/{NcRichText-D_ssz6sB.mjs → NcRichText-rS9gcduo.mjs} +243 -311
- package/dist/chunks/NcRichText-rS9gcduo.mjs.map +1 -0
- package/dist/chunks/{NcSelect-B1uITk_3.mjs → NcSelect-DK4ZWMha.mjs} +4 -5
- package/dist/chunks/NcSelect-DK4ZWMha.mjs.map +1 -0
- package/dist/chunks/{NcSelectTags-B3_tcJAf.mjs → NcSelectTags-D3tAMWYx.mjs} +3 -3
- package/dist/chunks/{NcSelectTags-B3_tcJAf.mjs.map → NcSelectTags-D3tAMWYx.mjs.map} +1 -1
- package/dist/chunks/{NcSelectUsers-B9ZFtd6B.mjs → NcSelectUsers-2L4I2yvb.mjs} +3 -3
- package/dist/chunks/{NcSelectUsers-B9ZFtd6B.mjs.map → NcSelectUsers-2L4I2yvb.mjs.map} +1 -1
- package/dist/chunks/{NcSettingsSection-DIcgD1vo.mjs → NcSettingsSection-DnzR8DRc.mjs} +2 -2
- package/dist/chunks/{NcSettingsSection-DIcgD1vo.mjs.map → NcSettingsSection-DnzR8DRc.mjs.map} +1 -1
- package/dist/chunks/{NcSettingsSelectGroup-CupkYUPJ.mjs → NcSettingsSelectGroup-CYgEv80h.mjs} +3 -3
- package/dist/chunks/{NcSettingsSelectGroup-CupkYUPJ.mjs.map → NcSettingsSelectGroup-CYgEv80h.mjs.map} +1 -1
- package/dist/chunks/{NcTextArea-CseOD9aM.mjs → NcTextArea-BwFQx9Bj.mjs} +4 -4
- package/dist/chunks/{NcTextArea-CseOD9aM.mjs.map → NcTextArea-BwFQx9Bj.mjs.map} +1 -1
- package/dist/chunks/{NcTextField.vue_vue_type_script_setup_true_lang-B-4HNjYH.mjs → NcTextField.vue_vue_type_script_setup_true_lang-DgvCZDmR.mjs} +3 -3
- package/dist/chunks/{NcTextField.vue_vue_type_script_setup_true_lang-B-4HNjYH.mjs.map → NcTextField.vue_vue_type_script_setup_true_lang-DgvCZDmR.mjs.map} +1 -1
- package/dist/chunks/{NcTimezonePicker.vue_vue_type_script_setup_true_lang-8CBGI3yi.mjs → NcTimezonePicker.vue_vue_type_script_setup_true_lang-53QSdjMX.mjs} +3 -3
- package/dist/chunks/{NcTimezonePicker.vue_vue_type_script_setup_true_lang-8CBGI3yi.mjs.map → NcTimezonePicker.vue_vue_type_script_setup_true_lang-53QSdjMX.mjs.map} +1 -1
- package/dist/chunks/{NcUserBubble-BE6yD-R0.mjs → NcUserBubble-BnaGHDoD.mjs} +2 -2
- package/dist/chunks/{NcUserBubble-BE6yD-R0.mjs.map → NcUserBubble-BnaGHDoD.mjs.map} +1 -1
- package/dist/chunks/{NcUserStatusIcon-JWiuiAXe.mjs → NcUserStatusIcon-CNh1vXUF.mjs} +2 -2
- package/dist/chunks/{NcUserStatusIcon-JWiuiAXe.mjs.map → NcUserStatusIcon-CNh1vXUF.mjs.map} +1 -1
- package/dist/chunks/{_l10n-BklkVPDO.mjs → _l10n-BCg4udFv.mjs} +44 -44
- package/dist/chunks/_l10n-BCg4udFv.mjs.map +1 -0
- package/dist/chunks/{autolink-U5pBzLgI.mjs → autolink-_k1FETYm.mjs} +58 -36
- package/dist/chunks/autolink-_k1FETYm.mjs.map +1 -0
- package/dist/chunks/{colors-BfjxNgsx.mjs → colors-2YFh1g7z.mjs} +6 -2
- package/dist/chunks/{colors-BfjxNgsx.mjs.map → colors-2YFh1g7z.mjs.map} +1 -1
- package/dist/chunks/{emoji-V9hqFgPs.mjs → emoji-C8k9NUlo.mjs} +2 -2
- package/dist/chunks/emoji-C8k9NUlo.mjs.map +1 -0
- package/dist/chunks/legacy-BoqDmOCa.mjs +9 -0
- package/dist/chunks/legacy-BoqDmOCa.mjs.map +1 -0
- package/dist/chunks/{referencePickerModal-D09ZVhqa.mjs → referencePickerModal-DgIpbEdl.mjs} +11 -11
- package/dist/chunks/referencePickerModal-DgIpbEdl.mjs.map +1 -0
- package/dist/chunks/{useCopy-Dgw864OI.mjs → useCopy--plF8q1P.mjs} +2 -2
- package/dist/chunks/{useCopy-Dgw864OI.mjs.map → useCopy--plF8q1P.mjs.map} +1 -1
- package/dist/components/NcActionButton/index.mjs +1 -1
- package/dist/components/NcActionButtonGroup/index.mjs +1 -1
- package/dist/components/NcActionCheckbox/index.mjs +1 -1
- package/dist/components/NcActionInput/index.mjs +1 -1
- package/dist/components/NcActionLink/index.mjs +1 -1
- package/dist/components/NcActionRadio/index.mjs +1 -1
- package/dist/components/NcActionRouter/index.mjs +1 -1
- package/dist/components/NcActionText/index.mjs +1 -1
- package/dist/components/NcActionTextEditable/index.mjs +1 -1
- package/dist/components/NcActions/index.mjs +1 -1
- package/dist/components/NcAppContent/index.mjs +1 -1
- package/dist/components/NcAppNavigation/index.mjs +1 -1
- package/dist/components/NcAppNavigationCaption/index.mjs +1 -1
- package/dist/components/NcAppNavigationItem/NcAppNavigationIconCollapsible.vue.d.ts +3 -1
- package/dist/components/NcAppNavigationItem/NcAppNavigationItem.vue.d.ts +7 -2
- package/dist/components/NcAppNavigationItem/NcInputConfirmCancel.vue.d.ts +3 -1
- package/dist/components/NcAppNavigationItem/index.mjs +1 -1
- package/dist/components/NcAppNavigationNew/index.mjs +1 -1
- package/dist/components/NcAppNavigationNewItem/NcAppNavigationNewItem.vue.d.ts +3 -1
- package/dist/components/NcAppNavigationNewItem/index.mjs +1 -1
- package/dist/components/NcAppNavigationSearch/index.mjs +1 -1
- package/dist/components/NcAppNavigationSettings/index.mjs +1 -1
- package/dist/components/NcAppSettingsDialog/index.mjs +1 -1
- package/dist/components/NcAppSettingsSection/index.mjs +1 -1
- package/dist/components/NcAppSettingsSectionShortcuts/index.mjs +1 -1
- package/dist/components/NcAppSettingsShortcutsSection/index.mjs +1 -1
- package/dist/components/NcAppSidebar/NcAppSidebar.vue.d.ts +1 -0
- package/dist/components/NcAppSidebar/NcAppSidebarTabs.vue.d.ts +3 -2
- package/dist/components/NcAppSidebar/index.mjs +1 -1
- package/dist/components/NcAssistantButton/index.mjs +1 -1
- package/dist/components/NcAvatar/index.mjs +1 -1
- package/dist/components/NcBreadcrumb/index.mjs +1 -1
- package/dist/components/NcBreadcrumbs/index.mjs +1 -1
- package/dist/components/NcButton/index.mjs +1 -1
- package/dist/components/NcCheckboxRadioSwitch/index.mjs +1 -1
- package/dist/components/NcChip/index.mjs +1 -1
- package/dist/components/NcCollectionList/index.mjs +1 -1
- package/dist/components/NcColorPicker/index.mjs +1 -1
- package/dist/components/NcContent/index.mjs +1 -1
- package/dist/components/NcDashboardWidget/index.mjs +1 -1
- package/dist/components/NcDashboardWidgetItem/index.mjs +1 -1
- package/dist/components/NcDateTimePicker/index.mjs +1 -1
- package/dist/components/NcDateTimePickerNative/index.mjs +1 -1
- package/dist/components/NcDialog/index.mjs +1 -1
- package/dist/components/NcDialogButton/index.mjs +1 -1
- package/dist/components/NcEmojiPicker/index.mjs +1 -1
- package/dist/components/NcEmptyContent/index.mjs +1 -1
- package/dist/components/NcFilePicker/index.mjs +1 -1
- package/dist/components/NcFormBoxButton/index.mjs +1 -1
- package/dist/components/NcFormBoxCopyButton/index.mjs +1 -1
- package/dist/components/NcFormBoxSwitch/index.mjs +1 -1
- package/dist/components/NcFormGroup/index.mjs +1 -1
- package/dist/components/NcHeaderButton/index.mjs +1 -1
- package/dist/components/NcHeaderMenu/index.mjs +1 -1
- package/dist/components/NcHotkey/index.mjs +1 -1
- package/dist/components/NcHotkeyList/index.mjs +1 -1
- package/dist/components/NcInputField/index.mjs +1 -1
- package/dist/components/NcKbd/index.mjs +1 -1
- package/dist/components/NcListItem/NcListItem.vue.d.ts +3 -1
- package/dist/components/NcListItem/index.mjs +1 -1
- package/dist/components/NcListItemIcon/index.mjs +1 -1
- package/dist/components/NcModal/index.mjs +1 -1
- package/dist/components/NcNoteCard/index.mjs +1 -1
- package/dist/components/NcPasswordField/index.mjs +1 -1
- package/dist/components/NcRadioGroup/index.mjs +1 -1
- package/dist/components/NcRadioGroupButton/index.mjs +1 -1
- package/dist/components/NcRelatedResourcesPanel/index.mjs +1 -1
- package/dist/components/NcRichContenteditable/NcRichContenteditable.vue.d.ts +11 -9
- package/dist/components/NcRichContenteditable/index.mjs +1 -1
- package/dist/components/NcRichText/NcRichTextExternalLink.vue.d.ts +23 -0
- package/dist/components/NcRichText/index.mjs +3 -3
- package/dist/components/NcSelect/index.mjs +1 -1
- package/dist/components/NcSelectTags/index.mjs +1 -1
- package/dist/components/NcSelectUsers/index.mjs +1 -1
- package/dist/components/NcSettingsSection/index.mjs +1 -1
- package/dist/components/NcSettingsSelectGroup/index.mjs +1 -1
- package/dist/components/NcTextArea/index.mjs +1 -1
- package/dist/components/NcTextField/index.mjs +1 -1
- package/dist/components/NcTimezonePicker/index.mjs +1 -1
- package/dist/components/NcUserBubble/index.mjs +1 -1
- package/dist/components/NcUserStatusIcon/index.mjs +1 -1
- package/dist/composables/useFormatDateTime/index.mjs +1 -1
- package/dist/functions/emoji/index.mjs +1 -1
- package/dist/functions/reference/index.mjs +1 -1
- package/dist/functions/usernameToColor/index.mjs +1 -1
- package/dist/index.mjs +75 -74
- package/dist/index.mjs.map +1 -1
- package/dist/utils/legacy.d.ts +1 -0
- package/package.json +27 -28
- package/dist/assets/NcAppSettingsDialog-Ckc0OWTs.css +0 -98
- package/dist/assets/NcInputConfirmCancel-BrdZEfr2.css +0 -39
- package/dist/assets/NcListItem-Cat18cSx.css +0 -177
- package/dist/chunks/NcActionTextEditable-BC66QDvV.mjs.map +0 -1
- package/dist/chunks/NcAppNavigation-DQzgUarc.mjs.map +0 -1
- package/dist/chunks/NcAppNavigationItem-XSXn3qhJ.mjs.map +0 -1
- package/dist/chunks/NcAppNavigationSearch-DpcjjmY5.mjs.map +0 -1
- package/dist/chunks/NcAppSettingsDialog-Brgi3W2x.mjs.map +0 -1
- package/dist/chunks/NcAppSidebar-KwLsRcZO.mjs.map +0 -1
- package/dist/chunks/NcAssistantButton-DxNbEbqt.mjs.map +0 -1
- package/dist/chunks/NcButton-lQra4n2g.mjs.map +0 -1
- package/dist/chunks/NcCheckboxRadioSwitch-D0gFwEVl.mjs.map +0 -1
- package/dist/chunks/NcHotkeyList-CHLWkWfY.mjs.map +0 -1
- package/dist/chunks/NcInputConfirmCancel-Ch0byKa3.mjs.map +0 -1
- package/dist/chunks/NcListItem-DfFmqnmW.mjs.map +0 -1
- package/dist/chunks/NcModal-kyWZ3UFC.mjs.map +0 -1
- package/dist/chunks/NcPasswordField-BOLzDHBJ.mjs.map +0 -1
- package/dist/chunks/NcRelatedResourcesPanel-Cn27rj0H.mjs.map +0 -1
- package/dist/chunks/NcRichContenteditable-BREsny-v.mjs.map +0 -1
- package/dist/chunks/NcRichText-D_ssz6sB.mjs.map +0 -1
- package/dist/chunks/NcSelect-B1uITk_3.mjs.map +0 -1
- package/dist/chunks/_l10n-BklkVPDO.mjs.map +0 -1
- package/dist/chunks/autolink-U5pBzLgI.mjs.map +0 -1
- package/dist/chunks/emoji-V9hqFgPs.mjs.map +0 -1
- package/dist/chunks/legacy-DcjXBL_t.mjs +0 -6
- package/dist/chunks/legacy-DcjXBL_t.mjs.map +0 -1
- package/dist/chunks/referencePickerModal-D09ZVhqa.mjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_l10n-BCg4udFv.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,52 +1,73 @@
|
|
|
1
|
+
import '../assets/autolink-C_iad4O_.css';
|
|
1
2
|
import { getBaseUrl, getRootUrl } from "@nextcloud/router";
|
|
2
3
|
import { u } from "unist-builder";
|
|
3
|
-
import {
|
|
4
|
-
import { defineComponent,
|
|
4
|
+
import { visitParents, SKIP } from "unist-util-visit-parents";
|
|
5
|
+
import { defineComponent, openBlock, createElementBlock, normalizeClass, renderSlot, createTextVNode, toDisplayString } from "vue";
|
|
6
|
+
import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.mjs";
|
|
5
7
|
import { l as logger } from "./logger-D3RVzcfQ.mjs";
|
|
8
|
+
const _hoisted_1 = ["href"];
|
|
9
|
+
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
10
|
+
__name: "NcRichTextExternalLink",
|
|
11
|
+
props: {
|
|
12
|
+
href: {},
|
|
13
|
+
decorateExternal: { type: Boolean, default: false }
|
|
14
|
+
},
|
|
15
|
+
setup(__props) {
|
|
16
|
+
return (_ctx, _cache) => {
|
|
17
|
+
return openBlock(), createElementBlock("a", {
|
|
18
|
+
href: _ctx.href,
|
|
19
|
+
rel: "noopener noreferrer",
|
|
20
|
+
target: "_blank",
|
|
21
|
+
class: normalizeClass([_ctx.$style.externalLink, {
|
|
22
|
+
[_ctx.$style.externalLink_decorated]: _ctx.decorateExternal
|
|
23
|
+
}])
|
|
24
|
+
}, [
|
|
25
|
+
renderSlot(_ctx.$slots, "default", {}, () => [
|
|
26
|
+
createTextVNode(toDisplayString(_ctx.href), 1)
|
|
27
|
+
])
|
|
28
|
+
], 10, _hoisted_1);
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
const externalLink = "_externalLink_ASIsx";
|
|
33
|
+
const externalLink_decorated = "_externalLink_decorated_97QHT";
|
|
34
|
+
const style0 = {
|
|
35
|
+
"material-design-icon": "_material-design-icon_M3MSE",
|
|
36
|
+
externalLink,
|
|
37
|
+
externalLink_decorated
|
|
38
|
+
};
|
|
39
|
+
const cssModules = {
|
|
40
|
+
"$style": style0
|
|
41
|
+
};
|
|
42
|
+
const NcRichTextExternalLink = /* @__PURE__ */ _export_sfc(_sfc_main, [["__cssModules", cssModules]]);
|
|
6
43
|
/*!
|
|
7
44
|
* SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors
|
|
8
45
|
* SPDX-License-Identifier: AGPL-3.0-or-later
|
|
9
46
|
*/
|
|
10
47
|
const URL_PATTERN = /(\s|^)(https?:\/\/)([-A-Z0-9+_.]+(?::[0-9]+)?(?:\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\s|$)/ig;
|
|
11
48
|
const URL_PATTERN_AUTOLINK = /(\s|\(|^)((https?:\/\/)([-A-Z0-9+_.]+[-A-Z0-9]+(?::[0-9]+)?(?:\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*))(?=\s|\)|$)/ig;
|
|
12
|
-
const NcLink = defineComponent({
|
|
13
|
-
name: "NcLink",
|
|
14
|
-
props: {
|
|
15
|
-
href: {
|
|
16
|
-
type: String,
|
|
17
|
-
required: true
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
render() {
|
|
21
|
-
return h("a", {
|
|
22
|
-
href: this.href,
|
|
23
|
-
rel: "noopener noreferrer",
|
|
24
|
-
target: "_blank",
|
|
25
|
-
class: "rich-text--external-link"
|
|
26
|
-
}, [this.href.trim()]);
|
|
27
|
-
}
|
|
28
|
-
});
|
|
29
49
|
function remarkAutolink({ autolink, useMarkdown, useExtendedMarkdown }) {
|
|
30
50
|
return function(tree) {
|
|
31
51
|
if (useExtendedMarkdown || !useMarkdown || !autolink) {
|
|
32
52
|
return;
|
|
33
53
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
parsed = [u("text", parsed)];
|
|
38
|
-
} else {
|
|
39
|
-
parsed = parsed.map((n) => {
|
|
40
|
-
if (typeof n === "string") {
|
|
41
|
-
return u("text", n);
|
|
42
|
-
}
|
|
43
|
-
return u("link", {
|
|
44
|
-
url: n.props.href
|
|
45
|
-
}, [u("text", n.props.href)]);
|
|
46
|
-
}).filter((x) => x).flat();
|
|
54
|
+
visitParents(tree, (node) => node.type === "text", (node, ancestors) => {
|
|
55
|
+
if (ancestors.some((ancestor) => ancestor.type === "link" || ancestor.type === "linkReference")) {
|
|
56
|
+
return;
|
|
47
57
|
}
|
|
48
|
-
parent.
|
|
49
|
-
|
|
58
|
+
const parent = ancestors.at(-1);
|
|
59
|
+
const index = parent.children.indexOf(node) ?? 0;
|
|
60
|
+
const parsed = parseUrl(node.value);
|
|
61
|
+
const parsedNodes = typeof parsed === "string" ? [u("text", parsed)] : parsed.map((n) => {
|
|
62
|
+
if (typeof n === "string") {
|
|
63
|
+
return u("text", n);
|
|
64
|
+
}
|
|
65
|
+
return u("link", {
|
|
66
|
+
url: n.props.href
|
|
67
|
+
}, [u("text", n.props.href)]);
|
|
68
|
+
}).filter((x) => x).flat();
|
|
69
|
+
parent.children.splice(index, 1, ...parsedNodes);
|
|
70
|
+
return [SKIP, index + parsedNodes.length];
|
|
50
71
|
});
|
|
51
72
|
};
|
|
52
73
|
}
|
|
@@ -68,7 +89,7 @@ function parseUrl(text) {
|
|
|
68
89
|
textAfter = lastChar;
|
|
69
90
|
}
|
|
70
91
|
list.push(textBefore);
|
|
71
|
-
list.push({ component:
|
|
92
|
+
list.push({ component: NcRichTextExternalLink, props: { href: href.trim(), decorateExternal: true } });
|
|
72
93
|
if (textAfter) {
|
|
73
94
|
list.push(textAfter);
|
|
74
95
|
}
|
|
@@ -110,9 +131,10 @@ function getRoute(router, url) {
|
|
|
110
131
|
return route.fullPath;
|
|
111
132
|
}
|
|
112
133
|
export {
|
|
134
|
+
NcRichTextExternalLink as N,
|
|
113
135
|
URL_PATTERN as U,
|
|
114
136
|
getRoute as g,
|
|
115
137
|
parseUrl as p,
|
|
116
138
|
remarkAutolink as r
|
|
117
139
|
};
|
|
118
|
-
//# sourceMappingURL=autolink-
|
|
140
|
+
//# sourceMappingURL=autolink-_k1FETYm.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autolink-_k1FETYm.mjs","sources":["../../src/components/NcRichText/NcRichTextExternalLink.vue","../../src/components/NcRichText/helpers.ts","../../src/components/NcRichText/autolink.ts"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2026 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nconst { href, decorateExternal = false } = defineProps<{\n\t/** Link attribute to render */\n\thref: string\n\t/** Whether to add the appended arrow decoration */\n\tdecorateExternal?: boolean\n}>()\n</script>\n\n<template>\n\t<a\n\t\t:href=\"href\"\n\t\trel=\"noopener noreferrer\"\n\t\ttarget=\"_blank\"\n\t\t:class=\"[$style.externalLink, {\n\t\t\t[$style.externalLink_decorated]: decorateExternal,\n\t\t}]\">\n\t\t<slot name=\"default\">\n\t\t\t{{ href }}\n\t\t</slot>\n\t</a>\n</template>\n\n<style module lang=\"scss\">\n.externalLink {\n\ttext-decoration: underline;\n}\n\n.externalLink_decorated::after {\n\tcontent: ' ↗';\n}\n</style>\n\n<docs>\nAn internal component\n</docs>\n","/*!\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Literal } from 'unist'\n\n/**\n * Unist literal node with string value like code blocks or text nodes\n */\nexport interface TextNode extends Literal {\n\tvalue: string\n}\n\n/**\n * Regex pattern to match links to be resolved by the link-reference provider\n */\nexport const URL_PATTERN = /(\\s|^)(https?:\\/\\/)([-A-Z0-9+_.]+(?::[0-9]+)?(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\\s|$)/ig\n\n/**\n * Regex pattern to identify strings as links and then making them clickable\n */\nexport const URL_PATTERN_AUTOLINK = /(\\s|\\(|^)((https?:\\/\\/)([-A-Z0-9+_.]+[-A-Z0-9]+(?::[0-9]+)?(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*))(?=\\s|\\)|$)/ig\n","/**\n * SPDX-FileCopyrightText: 2022 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { Node, Parent } from 'unist'\nimport type { Router } from 'vue-router'\n\nimport { getBaseUrl, getRootUrl } from '@nextcloud/router'\nimport { u } from 'unist-builder'\nimport { SKIP, visitParents } from 'unist-util-visit-parents'\nimport NcRichTextExternalLink from './NcRichTextExternalLink.vue'\nimport { logger } from '../../utils/logger.ts'\nimport { URL_PATTERN_AUTOLINK } from './helpers.js'\n\n/**\n *\n * @param root0\n * @param root0.autolink\n * @param root0.useMarkdown\n * @param root0.useExtendedMarkdown\n */\nexport function remarkAutolink({ autolink, useMarkdown, useExtendedMarkdown }) {\n\treturn function(tree) {\n\t\t// remark-gfm has its own autolink parser which can not be disabled\n\t\t// and thus a local one is not needed\n\t\tif (useExtendedMarkdown || !useMarkdown || !autolink) {\n\t\t\treturn\n\t\t}\n\n\t\tvisitParents(tree, (node) => node.type === 'text', (node, ancestors: Parent[]) => {\n\t\t\t// Do not autolink text already inside a link node\n\t\t\tif (ancestors.some((ancestor) => ancestor.type === 'link' || ancestor.type === 'linkReference')) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst parent = ancestors.at(-1)\n\t\t\tconst index = parent!.children.indexOf(node) ?? 0\n\n\t\t\tconst parsed = parseUrl(node.value)\n\t\t\tconst parsedNodes: Node[] = (typeof parsed === 'string')\n\t\t\t\t? [u('text', parsed)]\n\t\t\t\t: parsed.map((n) => {\n\t\t\t\t\t\tif (typeof n === 'string') {\n\t\t\t\t\t\t\treturn u('text', n)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn u('link', {\n\t\t\t\t\t\t\turl: n.props.href,\n\t\t\t\t\t\t}, [u('text', n.props.href)])\n\t\t\t\t\t})\n\t\t\t\t\t\t.filter((x) => x)\n\t\t\t\t\t\t.flat()\n\n\t\t\tparent!.children.splice(index, 1, ...parsedNodes)\n\t\t\treturn [SKIP, index + parsedNodes.length]\n\t\t})\n\t}\n}\n\n/**\n *\n * @param text\n */\nexport function parseUrl(text: string) {\n\tlet match = URL_PATTERN_AUTOLINK.exec(text)\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst list: (string | Record<string, any>)[] = []\n\tlet start = 0\n\twhile (match !== null) {\n\t\tlet href = match[2]!\n\t\tlet textAfter\n\t\tlet textBefore = text.substring(start, match.index + match[1]!.length)\n\t\tif (href[0] === ' ') {\n\t\t\ttextBefore += href[0]\n\t\t\thref = href.substring(1).trim()\n\t\t}\n\t\tconst lastChar = href[(href.length - 1)]\n\t\tif (lastChar === '.' || lastChar === ',' || lastChar === ';' || (match[0][0] === '(' && lastChar === ')')) {\n\t\t\thref = href.substring(0, href.length - 1)\n\t\t\ttextAfter = lastChar\n\t\t}\n\t\tlist.push(textBefore)\n\t\tlist.push({ component: NcRichTextExternalLink, props: { href: href.trim(), decorateExternal: true } })\n\t\tif (textAfter) {\n\t\t\tlist.push(textAfter)\n\t\t}\n\t\tstart = match.index + match[0].length\n\t\tmatch = URL_PATTERN_AUTOLINK.exec(text)\n\t}\n\tlist.push(text.substring(start))\n\tconst joinedText = list.map((item) => typeof item === 'string' ? item : item.props.href).join('')\n\tif (text === joinedText) {\n\t\treturn list\n\t}\n\tlogger.error('[NcRichText] Failed to reassemble the chunked text: ' + text)\n\treturn text\n}\n\n/**\n * Try to get path for router link from an absolute or relative URL.\n *\n * @param router - VueRouter instance of the router link\n * @param url - absolute URL to parse\n * @return a path that can be used in the router link or null if this URL doesn't match this router config\n * @example http://cloud.ltd/nextcloud/index.php/apps/files/favorites?fileid=2#fragment => /files/favorites?fileid=2#fragment\n */\nexport function getRoute(router: Router | null, url: string): string | null {\n\t/**\n\t * http://cloud.ltd /nextcloud /index.php /apps/files /favorites?fileid=2#fragment\n\t * |_____origin____|___________router-base____________| |\n\t * |__________base____________| |______________relative-url______________|\n\t * | |___root___|_optional_|__app-base__|_________router-path_______|\n\t */\n\n\tconst removePrefix = (str, prefix) => str.startsWith(prefix) ? str.slice(prefix.length) : str\n\tconst removePrefixes = (str, ...prefixes) => prefixes.reduce((acc, prefix) => removePrefix(acc, prefix), str)\n\n\t// Router is not defined in the app => not an app route\n\tif (!router) {\n\t\treturn null\n\t}\n\n\tconst isAbsoluteURL = /^https?:\\/\\//.test(url)\n\n\t// URL is a \"mailto:\", \"tel:\" or any custom app protocol link\n\tconst isNonHttpLink = /^[a-z][a-z0-9+.-]*:.+/.test(url)\n\tif (!isAbsoluteURL && isNonHttpLink) {\n\t\treturn null\n\t}\n\n\t// URL is not a link to this Nextcloud server instance => not an app route\n\tif (isAbsoluteURL && !url.startsWith(getBaseUrl())) {\n\t\treturn null\n\t}\n\n\tif (!isAbsoluteURL && !url.startsWith('/')) {\n\t\t// Relative URL without a leading slash are not allowed\n\t\t// VueRouter handles such urls according to the URL RFC,\n\t\t// for example, being on /call/abc page, link \"def\" is resolved as \"/call/def\" relative to \"/call/\".\n\t\t// We don't want to support such links,\n\t\t// so relative URL MUST start with a slash.\n\t\treturn null\n\t}\n\n\t// URL relative to the instance root\n\tconst relativeUrl = isAbsoluteURL ? removePrefixes(url, getBaseUrl(), '/index.php') : url\n\n\t// Router base relative to the instance root (app-base above)\n\tconst relativeRouterBase = removePrefixes(router.options.history.base, getRootUrl(), '/index.php')\n\n\t// Root route may have an empty '' path, fallback to '/'\n\tconst potentialRouterPath = removePrefixes(relativeUrl, relativeRouterBase) || '/'\n\n\t// Check if there is actually matching route in the router for this path\n\tconst route = router.resolve(potentialRouterPath)\n\n\tif (!route.matched.length) {\n\t\treturn null\n\t}\n\n\treturn route.fullPath\n}\n"],"names":["_createElementBlock","href","_normalizeClass","$style","decorateExternal","_renderSlot"],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as register, t as t3, a as t } from "./_l10n-
|
|
1
|
+
import { r as register, t as t3, a as t } from "./_l10n-BCg4udFv.mjs";
|
|
2
2
|
register(t3);
|
|
3
3
|
class Color {
|
|
4
4
|
/**
|
|
@@ -17,6 +17,10 @@ class Color {
|
|
|
17
17
|
this.b = Math.min(b, 255);
|
|
18
18
|
this.name = name;
|
|
19
19
|
}
|
|
20
|
+
r;
|
|
21
|
+
g;
|
|
22
|
+
b;
|
|
23
|
+
name;
|
|
20
24
|
/**
|
|
21
25
|
* The hexadecimal color string.
|
|
22
26
|
*/
|
|
@@ -112,4 +116,4 @@ export {
|
|
|
112
116
|
defaultPalette as d,
|
|
113
117
|
generatePalette as g
|
|
114
118
|
};
|
|
115
|
-
//# sourceMappingURL=colors-
|
|
119
|
+
//# sourceMappingURL=colors-2YFh1g7z.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"colors-
|
|
1
|
+
{"version":3,"file":"colors-2YFh1g7z.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.ts'\n\nexport class Color {\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 * 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// This are our default base colors we use for mixing palettes\nconst COLOR_RED = new Color(182, 70, 157, t('Purple'))\nconst COLOR_YELLOW = new Color(221, 203, 85, t('Gold'))\nconst COLOR_BLUE = new Color(0, 130, 201, t('Nextcloud blue'))\n// Special \"none\"-colors\nexport const COLOR_BLACK = new Color(0, 0, 0, t('Black'))\nexport const COLOR_WHITE = new Color(255, 255, 255, t('White'))\n\n/**\n * Like GenColor(4) but with labels\n */\nexport const defaultPalette = [\n\tCOLOR_RED,\n\tnew Color(\n\t\t...[191, 103, 139],\n\t\tt('Rosy brown'), // TRANSLATORS: A color name for RGB(191, 103, 139)\n\t),\n\tnew Color(\n\t\t...[201, 136, 121],\n\t\tt('Feldspar'), // TRANSLATORS: A color name for RGB(201, 136, 121)\n\t),\n\tnew Color(\n\t\t...[211, 169, 103],\n\t\tt('Whiskey'), // TRANSLATORS: A color name for RGB(211, 169, 103)\n\t),\n\tCOLOR_YELLOW,\n\tnew Color(\n\t\t...[165, 184, 114],\n\t\tt('Olivine'), // TRANSLATORS: A color name for RGB(165, 184, 114)\n\t),\n\tnew Color(\n\t\t...[110, 166, 143],\n\t\tt('Acapulco'), // TRANSLATORS: A color name for RGB(110, 166, 143)\n\t),\n\tnew Color(\n\t\t...[55, 148, 172],\n\t\tt('Boston Blue'), // TRANSLATORS: A color name for RGB(55, 148, 172)\n\t),\n\tCOLOR_BLUE,\n\tnew Color(\n\t\t...[45, 115, 190],\n\t\tt('Mariner'), // TRANSLATORS: A color name for RGB(45, 115, 190)\n\t),\n\tnew Color(\n\t\t...[91, 100, 179],\n\t\tt('Blue Violet'), // TRANSLATORS: A color name for RGB(91, 100, 179)\n\t),\n\tnew Color(\n\t\t...[136, 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 palette1 = mixPalette(steps, COLOR_RED, COLOR_YELLOW)\n\tconst palette2 = mixPalette(steps, COLOR_YELLOW, COLOR_BLUE)\n\tconst palette3 = mixPalette(steps, COLOR_BLUE, COLOR_RED)\n\n\treturn palette1.concat(palette2).concat(palette3)\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -29,7 +29,7 @@ function emojiSearch(query, maxResults = 10) {
|
|
|
29
29
|
return results.map((emoji) => emoji.getSkin(currentSkinTone));
|
|
30
30
|
}
|
|
31
31
|
function emojiAddRecent(emojiOrEmojiData) {
|
|
32
|
-
let emojiData
|
|
32
|
+
let emojiData;
|
|
33
33
|
if (typeof emojiOrEmojiData === "string") {
|
|
34
34
|
if (!emojiIndex) {
|
|
35
35
|
emojiIndex = new EmojiIndex(data);
|
|
@@ -73,4 +73,4 @@ export {
|
|
|
73
73
|
getCurrentSkinTone as g,
|
|
74
74
|
setCurrentSkinTone as s
|
|
75
75
|
};
|
|
76
|
-
//# sourceMappingURL=emoji-
|
|
76
|
+
//# sourceMappingURL=emoji-C8k9NUlo.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emoji-C8k9NUlo.mjs","sources":["../../src/functions/emoji/emoji.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2021 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { getBuilder } from '@nextcloud/browser-storage'\nimport { EmojiIndex, frequently } from 'emoji-mart-vue-fast'\nimport data from 'emoji-mart-vue-fast/data/all.json'\n\nconst storage = getBuilder('nextcloud-vue').persist(true).build()\n\n// Shared emoji index and skinTone for all emojiSearch function calls\n// Will be initialized on the first call\nlet emojiIndex\n\n/**\n * Object type returned by EmojiIndex\n * (keep only required properties)\n */\ntype EmojiData = {\n\tid: string\n}\n\n/**\n * Skin tones supported by Unicode Emojis (Fitzpatrick scale)\n * The numeric values align with `emoji-mart-vue`\n */\nexport enum EmojiSkinTone {\n\tNeutral = 1,\n\tLight = 2,\n\tMediumLight = 3,\n\tMedium = 4,\n\tMediumDark = 5,\n\tDark = 6,\n}\n\n/**\n * Get the list of emojis by search filter or the list of frequently used emojis\n *\n * @param query Emoji search filter string; if no string or empty string is given, the list of frequently used emojis is returned\n * @param maxResults Maximum of returned emojis\n * @return list of found emojis in the same format as the emoji-mart-vue-fast's EmojiIndex\n */\nexport function emojiSearch(query: string, maxResults: number = 10): object[] {\n\t// If this is the first call of function - initialize EmojiIndex\n\tif (!emojiIndex) {\n\t\temojiIndex = new EmojiIndex(data)\n\t}\n\tconst currentSkinTone = getCurrentSkinTone()\n\n\tlet results\n\tif (query) {\n\t\tresults = emojiIndex.search(`:${query}`, maxResults)\n\t\tif (results.length < maxResults) {\n\t\t\tresults = results.concat(emojiIndex.search(query, maxResults - results.length))\n\t\t}\n\t} else {\n\t\tresults = frequently.get(maxResults).map((id: number) => emojiIndex.emoji(id)) || []\n\t}\n\n\treturn results.map((emoji) => emoji.getSkin(currentSkinTone))\n}\n\n/**\n * Add emoji to the list of recent emojis.\n * This list can be got from emojiSearch function and it is used in NcEmojiPicker.\n *\n * @param emojiOrEmojiData object with `id` property, or emoji string. When string provided, object is looked up in EmojiIndex\n * @param emojiOrEmojiData.id the emoji ID from emoji index. Mandatory property to modify 'frequently' array\n */\nexport function emojiAddRecent(emojiOrEmojiData: EmojiData | string | null): void {\n\tlet emojiData: EmojiData | null\n\n\tif (typeof emojiOrEmojiData === 'string') {\n\t\t// If this is the first call of function - initialize EmojiIndex\n\t\tif (!emojiIndex) {\n\t\t\temojiIndex = new EmojiIndex(data)\n\t\t}\n\t\temojiData = emojiIndex.findEmoji(emojiOrEmojiData) as EmojiData | null\n\t} else {\n\t\temojiData = emojiOrEmojiData\n\t}\n\n\tif (emojiData && 'id' in emojiData) {\n\t\tfrequently.add(emojiData)\n\t}\n}\n\n/**\n * Get the current skin tone index used for emojis\n *\n * @return The skin tone\n */\nexport function getCurrentSkinTone(): EmojiSkinTone {\n\tconst skinTone = Number.parseInt(storage.getItem('NcEmojiPicker::currentSkinTone') ?? '1')\n\t// Clamp skinTone to valid ranges\n\treturn Math.min(Math.max(skinTone, EmojiSkinTone.Neutral), EmojiSkinTone.Dark)\n}\n\n/**\n * Set the current active skin tone for emojis\n *\n * @param skinTone Skin tone\n */\nexport function setCurrentSkinTone(skinTone: EmojiSkinTone): void {\n\t// Clamp skinTone to valid ranges\n\tskinTone = Math.min(Math.max(skinTone, EmojiSkinTone.Neutral), EmojiSkinTone.Dark)\n\tstorage.setItem('NcEmojiPicker::currentSkinTone', skinTone.toString())\n}\n"],"names":["EmojiSkinTone"],"mappings":";;;AASA,MAAM,UAAU,WAAW,eAAe,EAAE,QAAQ,IAAI,EAAE,MAAA;AAI1D,IAAI;AAcG,IAAK,kCAAAA,mBAAL;AACNA,iBAAAA,eAAA,aAAU,CAAA,IAAV;AACAA,iBAAAA,eAAA,WAAQ,CAAA,IAAR;AACAA,iBAAAA,eAAA,iBAAc,CAAA,IAAd;AACAA,iBAAAA,eAAA,YAAS,CAAA,IAAT;AACAA,iBAAAA,eAAA,gBAAa,CAAA,IAAb;AACAA,iBAAAA,eAAA,UAAO,CAAA,IAAP;AANW,SAAAA;AAAA,GAAA,iBAAA,CAAA,CAAA;AAgBL,SAAS,YAAY,OAAe,aAAqB,IAAc;AAE7E,MAAI,CAAC,YAAY;AAChB,iBAAa,IAAI,WAAW,IAAI;AAAA,EACjC;AACA,QAAM,kBAAkB,mBAAA;AAExB,MAAI;AACJ,MAAI,OAAO;AACV,cAAU,WAAW,OAAO,IAAI,KAAK,IAAI,UAAU;AACnD,QAAI,QAAQ,SAAS,YAAY;AAChC,gBAAU,QAAQ,OAAO,WAAW,OAAO,OAAO,aAAa,QAAQ,MAAM,CAAC;AAAA,IAC/E;AAAA,EACD,OAAO;AACN,cAAU,WAAW,IAAI,UAAU,EAAE,IAAI,CAAC,OAAe,WAAW,MAAM,EAAE,CAAC,KAAK,CAAA;AAAA,EACnF;AAEA,SAAO,QAAQ,IAAI,CAAC,UAAU,MAAM,QAAQ,eAAe,CAAC;AAC7D;AASO,SAAS,eAAe,kBAAmD;AACjF,MAAI;AAEJ,MAAI,OAAO,qBAAqB,UAAU;AAEzC,QAAI,CAAC,YAAY;AAChB,mBAAa,IAAI,WAAW,IAAI;AAAA,IACjC;AACA,gBAAY,WAAW,UAAU,gBAAgB;AAAA,EAClD,OAAO;AACN,gBAAY;AAAA,EACb;AAEA,MAAI,aAAa,QAAQ,WAAW;AACnC,eAAW,IAAI,SAAS;AAAA,EACzB;AACD;AAOO,SAAS,qBAAoC;AACnD,QAAM,WAAW,OAAO,SAAS,QAAQ,QAAQ,gCAAgC,KAAK,GAAG;AAEzF,SAAO,KAAK;AAAA,IAAI,KAAK;AAAA,MAAI;AAAA,MAAU;AAAA;AAAA,IAAA;AAAA,IAAwB;AAAA;AAAA,EAAA;AAC5D;AAOO,SAAS,mBAAmB,UAA+B;AAEjE,aAAW,KAAK;AAAA,IAAI,KAAK;AAAA,MAAI;AAAA,MAAU;AAAA;AAAA,IAAA;AAAA,IAAwB;AAAA;AAAA,EAAA;AAC/D,UAAQ,QAAQ,kCAAkC,SAAS,SAAA,CAAU;AACtE;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
const [majorVersion] = window.OC?.config?.version?.split(".") ?? [];
|
|
2
|
+
const major = Number.parseInt(majorVersion ?? "34");
|
|
3
|
+
const isLegacy = major < 32;
|
|
4
|
+
const isLegacy34 = major < 34;
|
|
5
|
+
export {
|
|
6
|
+
isLegacy as a,
|
|
7
|
+
isLegacy34 as i
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=legacy-BoqDmOCa.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"legacy-BoqDmOCa.mjs","sources":["../../src/utils/legacy.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nconst [majorVersion] = window.OC?.config?.version?.split('.') ?? []\n// Fallback assumes the current major when no server version is detectable\n// (tests, embedded use). Keeps legacy fallbacks off by default in those cases.\nconst major = Number.parseInt(majorVersion ?? '34')\nexport const isLegacy = major < 32\nexport const isLegacy34 = major < 34\n"],"names":[],"mappings":"AAKA,MAAM,CAAC,YAAY,IAAI,OAAO,IAAI,QAAQ,SAAS,MAAM,GAAG,KAAK,CAAA;AAGjE,MAAM,QAAQ,OAAO,SAAS,gBAAgB,IAAI;AAC3C,MAAM,WAAW,QAAQ;AACzB,MAAM,aAAa,QAAQ;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import '../assets/referencePickerModal-
|
|
1
|
+
import '../assets/referencePickerModal-Dod7nzta.css';
|
|
2
2
|
import { openBlock, createElementBlock, mergeProps, createElementVNode, toDisplayString, createCommentVNode, resolveComponent, createVNode, withCtx, defineComponent, inject, ref, useTemplateRef, nextTick, computed, watch, onBeforeUnmount, normalizeClass, createBlock, resolveDynamicComponent, normalizeStyle, createTextVNode, unref, withKeys, withModifiers, createApp } from "vue";
|
|
3
3
|
import { emit } from "@nextcloud/event-bus";
|
|
4
4
|
import { _ as _export_sfc } from "./_plugin-vue_export-helper-1tPrXgE0.mjs";
|
|
@@ -7,20 +7,20 @@ import { e as renderCustomPickerElement, d as destroyCustomPickerElement, i as i
|
|
|
7
7
|
import axios from "@nextcloud/axios";
|
|
8
8
|
import { loadState } from "@nextcloud/initial-state";
|
|
9
9
|
import { imagePath, generateOcsUrl } from "@nextcloud/router";
|
|
10
|
-
import { r as register, W as t8, a as t, X as t46, Y as t41, Z as t24, _ as t25, q as t43, $ as t32, A as t19, a0 as t12 } from "./_l10n-
|
|
10
|
+
import { r as register, W as t8, a as t, X as t46, Y as t41, Z as t24, _ as t25, q as t43, $ as t32, A as t19, a0 as t12 } from "./_l10n-BCg4udFv.mjs";
|
|
11
11
|
import { l as logger } from "./logger-D3RVzcfQ.mjs";
|
|
12
|
-
import { N as NcEmptyContent } from "./NcEmptyContent
|
|
12
|
+
import { N as NcEmptyContent } from "./NcEmptyContent--TRhmNAW.mjs";
|
|
13
13
|
import { _ as _sfc_main$a } from "./NcHighlight.vue_vue_type_script_lang-DnWQDM_2.mjs";
|
|
14
|
-
import { N as NcSelect } from "./NcSelect-
|
|
14
|
+
import { N as NcSelect } from "./NcSelect-DK4ZWMha.mjs";
|
|
15
15
|
import debounce from "debounce";
|
|
16
16
|
import { useElementSize, useIntersectionObserver } from "@vueuse/core";
|
|
17
17
|
import { routerKey, RouterLink } from "vue-router";
|
|
18
|
-
import { N as NcButton } from "./NcButton-
|
|
19
|
-
import { g as getRoute } from "./autolink-
|
|
18
|
+
import { N as NcButton } from "./NcButton-CdQzGSB6.mjs";
|
|
19
|
+
import { g as getRoute } from "./autolink-_k1FETYm.mjs";
|
|
20
20
|
import { N as NcLoadingIcon } from "./NcLoadingIcon-CInLzPtA.mjs";
|
|
21
|
-
import { _ as _sfc_main$b } from "./NcTextField.vue_vue_type_script_setup_true_lang-
|
|
22
|
-
import { I as IconDotsHorizontal } from "./NcActions-
|
|
23
|
-
import { N as NcModal } from "./NcModal-
|
|
21
|
+
import { _ as _sfc_main$b } from "./NcTextField.vue_vue_type_script_setup_true_lang-DgvCZDmR.mjs";
|
|
22
|
+
import { I as IconDotsHorizontal } from "./NcActions-fCXSb_0o.mjs";
|
|
23
|
+
import { N as NcModal } from "./NcModal-DyOZxq9E.mjs";
|
|
24
24
|
const _sfc_main$9 = {
|
|
25
25
|
name: "ArrowLeftIcon",
|
|
26
26
|
emits: ["click"],
|
|
@@ -532,7 +532,7 @@ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
|
|
|
532
532
|
};
|
|
533
533
|
}
|
|
534
534
|
});
|
|
535
|
-
const NcReferenceWidget = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-
|
|
535
|
+
const NcReferenceWidget = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-b0ec9f0b"]]);
|
|
536
536
|
register(t25);
|
|
537
537
|
const _sfc_main$4 = {
|
|
538
538
|
name: "NcRawLinkInput",
|
|
@@ -1368,4 +1368,4 @@ export {
|
|
|
1368
1368
|
NcSearch as h,
|
|
1369
1369
|
searchProvider as s
|
|
1370
1370
|
};
|
|
1371
|
-
//# sourceMappingURL=referencePickerModal-
|
|
1371
|
+
//# sourceMappingURL=referencePickerModal-DgIpbEdl.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"referencePickerModal-DgIpbEdl.mjs","sources":["../../node_modules/vue-material-design-icons/ArrowLeft.vue","../../src/components/NcRichText/NcReferencePicker/NcCustomPickerElement.vue","../../node_modules/vue-material-design-icons/LinkVariant.vue","../../src/functions/reference/providerHelper.ts","../../src/components/NcRichText/NcReferencePicker/utils.ts","../../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.ts"],"sourcesContent":["<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon arrow-left-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=\"M20,11V13H8L13.5,18.5L12.08,19.92L4.16,12L12.08,4.08L13.5,5.5L8,11H20Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"ArrowLeftIcon\",\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 ref=\"domElement\" />\n</template>\n\n<script>\nimport {\n\tdestroyCustomPickerElement,\n\tisCustomPickerElementRegistered,\n\trenderCustomPickerElement,\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\n\temits: [\n\t\t'cancel',\n\t\t'submit',\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\tisRegistered: isCustomPickerElementRegistered(this.provider.id),\n\t\t\trenderResult: null,\n\t\t}\n\t},\n\n\tmounted() {\n\t\tif (this.isRegistered) {\n\t\t\tthis.renderElement()\n\t\t}\n\t},\n\n\tbeforeUnmount() {\n\t\tif (this.isRegistered) {\n\t\t\tdestroyCustomPickerElement(this.provider.id, this.$el, this.renderResult)\n\t\t}\n\t},\n\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\n\t\tonSubmit(value) {\n\t\t\tthis.$emit('submit', value)\n\t\t},\n\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","<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\nimport axios from '@nextcloud/axios'\nimport { loadState } from '@nextcloud/initial-state'\nimport { generateOcsUrl, imagePath } from '@nextcloud/router'\nimport { t } from '../../l10n.ts'\nimport { logger } from '../../utils/logger.js'\nimport { isCustomPickerElementRegistered } from './customPickerElements.js'\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\n/**\n * Check wether a given string is a valid URL.\n *\n * @param str - The potential URL\n */\nexport function isUrl(str: string): boolean {\n\ttry {\n\t\treturn Boolean(new URL(str))\n\t} catch {\n\t\treturn false\n\t}\n}\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=\"provider-list\">\n\t\t<NcSelect\n\t\t\tref=\"provider-select\"\n\t\t\tv-model=\"selectedProvider\"\n\t\t\tclass=\"provider-list--select\"\n\t\t\tinputId=\"provider-select-input\"\n\t\t\tlabel=\"title\"\n\t\t\t:placeholder=\"multiselectPlaceholder\"\n\t\t\t:options=\"options\"\n\t\t\t:appendToBody=\"false\"\n\t\t\t:clearSearchOnSelect=\"true\"\n\t\t\t:clearSearchOnBlur=\"() => false\"\n\t\t\t:filterable=\"false\"\n\t\t\t@search=\"onSearch\"\n\t\t\t@update:modelValue=\"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\n\t\t\t\t\t\tclass=\"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\n\t\t\t\t\t\tclass=\"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 LinkVariantIcon from 'vue-material-design-icons/LinkVariant.vue'\nimport { searchProvider } from '../../../functions/reference/providerHelper.ts'\nimport { t } from '../../../l10n.ts'\nimport NcEmptyContent from '../../NcEmptyContent/index.ts'\nimport NcHighlight from '../../NcHighlight/index.ts'\nimport NcSelect from '../../NcSelect/index.js'\nimport { isUrl } from './utils.js'\n\nexport default {\n\tname: 'NcProviderList',\n\tcomponents: {\n\t\tNcSelect,\n\t\tNcHighlight,\n\t\tNcEmptyContent,\n\t\tLinkVariantIcon,\n\t},\n\n\temits: [\n\t\t'selectProvider',\n\t\t'submit',\n\t],\n\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\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\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\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('selectProvider', p)\n\t\t\t\t}\n\t\t\t\tthis.selectedProvider = null\n\t\t\t}\n\t\t},\n\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<script setup lang=\"ts\">\nimport type { ReferenceWidgetObject } from './../../functions/reference/widgets.ts'\n\nimport { useElementSize, useIntersectionObserver } from '@vueuse/core'\nimport { computed, inject, nextTick, onBeforeUnmount, ref, useTemplateRef, watch } from 'vue'\nimport { routerKey, RouterLink } from 'vue-router'\nimport NcButton from '../../components/NcButton/NcButton.vue'\nimport { t } from '../../l10n.ts'\nimport { destroyWidget, hasFullWidth, hasInteractiveView, isWidgetRegistered, renderWidget } from './../../functions/reference/widgets.ts'\nimport { getRoute } from './autolink.ts'\n\nconst props = withDefaults(defineProps<{\n\t/**\n\t * A reference object as returned by the ReferenceProvider\n\t */\n\treference: ReferenceWidgetObject\n\t/**\n\t * Whether to render the widget in interactive mode (if available)\n\t */\n\tinteractive?: boolean\n\t/**\n\t * Whether to show user an option to enable to interactive mode (if available)\n\t */\n\tinteractiveOptIn?: boolean\n}>(), {\n\tinteractive: true,\n\tinteractiveOptIn: false,\n})\n\n/* 3 minutes outside of viewport before widget is removed from the DOM */\nconst IDLE_TIMEOUT = 3 * 60 * 1000\n\nconst router = inject(routerKey, null)\n\nconst isVisible = ref(false)\nconst customWidget = useTemplateRef('customWidget')\nconst widgetRoot = useTemplateRef('widgetRoot')\nconst { width } = useElementSize(widgetRoot)\n\nuseIntersectionObserver(widgetRoot, ([entry]) => {\n\tnextTick(() => {\n\t\tisVisible.value = entry!.isIntersecting\n\t})\n})\n\nconst showInteractive = ref(false)\nconst rendered = ref(false)\nlet idleTimeout: NodeJS.Timeout | null = null\n\nconst isInteractive = computed(() => {\n\treturn (!props.interactiveOptIn && props.interactive) || showInteractive.value\n})\n\nconst referenceHasFullWidth = computed(() => {\n\treturn hasFullWidth(props.reference.richObjectType)\n})\n\nconst hasCustomWidget = computed(() => {\n\treturn isWidgetRegistered(props.reference.richObjectType)\n})\n\nconst referenceHasInteractiveView = computed(() => {\n\treturn hasCustomWidget.value && hasInteractiveView(props.reference.richObjectType)\n})\n\nconst noAccess = computed(() => {\n\treturn !props.reference.accessible\n})\n\nconst numberOfLines = computed(() => {\n\t// no description for width < 450, one line until 550 and so on\n\tconst lineCountOffsets = [450, 550, 650, Infinity]\n\treturn lineCountOffsets.findIndex((max) => width.value < max)\n})\n\nconst descriptionStyle = computed(() => {\n\tif (numberOfLines.value === 0) {\n\t\treturn {\n\t\t\tdisplay: 'none',\n\t\t}\n\t}\n\tconst lineClamp = numberOfLines.value\n\treturn {\n\t\tlineClamp,\n\t\twebkitLineClamp: lineClamp,\n\t}\n})\n\nconst compactLink = computed(() => {\n\tconst link = props.reference.openGraphObject.link\n\tif (!link) {\n\t\treturn ''\n\t}\n\n\tif (link.startsWith('https://')) {\n\t\treturn link.substring(8)\n\t}\n\tif (link.startsWith('http://')) {\n\t\treturn link.substring(7)\n\t}\n\treturn link\n})\n\nconst route = computed(() => {\n\treturn getRoute(router, props.reference.openGraphObject.link)\n})\n\nconst referenceWidgetLinkComponent = computed(() => {\n\treturn route.value ? RouterLink : 'a'\n})\n\nconst referenceWidgetLinkProps = computed(() => {\n\treturn route.value\n\t\t? { to: route.value }\n\t\t: { href: props.reference.openGraphObject.link, target: '_blank' }\n})\n\nwatch(isVisible, (val) => {\n\tif (!val) {\n\t\tidleTimeout = setTimeout(() => {\n\t\t\t// If the widget is still outside of viewport after timeout, destroy it\n\t\t\tif (!isVisible.value) {\n\t\t\t\tdestroyReferenceWidget()\n\t\t\t}\n\t\t}, IDLE_TIMEOUT)\n\t\treturn\n\t}\n\n\tif (idleTimeout) {\n\t\tclearTimeout(idleTimeout)\n\t\tidleTimeout = null\n\t}\n\n\tif (!rendered.value) {\n\t\trenderReferenceWidget()\n\t}\n}, { immediate: true })\n\nonBeforeUnmount(() => {\n\tdestroyReferenceWidget()\n})\n\n/**\n * Enable interactive view of the widget, if available\n */\nfunction enableInteractive() {\n\tshowInteractive.value = true\n\trenderReferenceWidget()\n}\n\n/**\n * Render the reference widget\n */\nfunction renderReferenceWidget() {\n\tif (!customWidget.value) {\n\t\treturn\n\t}\n\n\tif (props.reference.richObjectType === 'open-graph') {\n\t\treturn\n\t}\n\n\tcustomWidget.value.innerHTML = ''\n\n\t// create a separate element so we can rerender on the ref again\n\tconst widget = document.createElement('div')\n\twidget.style.width = '100%'\n\tcustomWidget.value.appendChild(widget)\n\tnextTick(() => {\n\t\t// Waiting for the ref to become available\n\t\trenderWidget(widget, {\n\t\t\t...props.reference,\n\t\t\tinteractive: isInteractive.value,\n\t\t})\n\t\trendered.value = true\n\t})\n}\n\n/**\n * Destroy the reference widget\n */\nfunction destroyReferenceWidget() {\n\tif (rendered.value && widgetRoot.value) {\n\t\tdestroyWidget(props.reference.richObjectType, widgetRoot.value)\n\t\trendered.value = false\n\t}\n}\n</script>\n\n<template>\n\t<div ref=\"widgetRoot\" :class=\"{ 'toggle-interactive': referenceHasInteractiveView && !isInteractive }\">\n\t\t<div\n\t\t\tv-if=\"reference && hasCustomWidget\"\n\t\t\tref=\"customWidget\"\n\t\t\tclass=\"widget-custom\"\n\t\t\t:class=\"{ 'full-width': referenceHasFullWidth }\" />\n\n\t\t<component\n\t\t\t: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 && referenceHasInteractiveView && !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\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: var(--font-weight-heading, 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\n\t\t\t\tref=\"url-input\"\n\t\t\t\tv-model=\"inputValue\"\n\t\t\t\t:showTrailingButton=\"inputValue !== ''\"\n\t\t\t\t:label=\"inputPlaceholder\"\n\t\t\t\t@trailingButtonClick=\"onClear\"\n\t\t\t\t@update:modelValue=\"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\n\t\t\tv-if=\"reference !== null\"\n\t\t\tclass=\"reference-widget\"\n\t\t\t:reference=\"reference\" />\n\t\t<NcEmptyContent\n\t\t\tv-else\n\t\t\tclass=\"raw-link--empty-content\">\n\t\t\t<template #icon>\n\t\t\t\t<img\n\t\t\t\t\tv-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 axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport debounce from 'debounce'\nimport LinkVariantIcon from 'vue-material-design-icons/LinkVariant.vue'\nimport NcReferenceWidget from '../NcReferenceWidget.vue'\nimport { t } from '../../../l10n.ts'\nimport { logger } from '../../../utils/logger.ts'\nimport NcEmptyContent from '../../NcEmptyContent/index.ts'\nimport NcLoadingIcon from '../../NcLoadingIcon/index.ts'\nimport NcTextField from '../../NcTextField/index.ts'\nimport { isUrl } from './utils.ts'\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\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\n\temits: [\n\t\t'submit',\n\t],\n\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\n\tcomputed: {\n\t\tisLinkValid() {\n\t\t\treturn isUrl(this.inputValue)\n\t\t},\n\n\t\tdebouncedUpdateReference() {\n\t\t\treturn debounce(this.updateReference, 500)\n\t\t},\n\t},\n\n\tmethods: {\n\t\tfocus() {\n\t\t\tthis.$refs['url-input'].$el.getElementsByTagName('input')[0]?.focus()\n\t\t},\n\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\n\t\tonClear() {\n\t\t\tthis.inputValue = ''\n\t\t\tthis.reference = null\n\t\t},\n\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\tthis.debouncedUpdateReference()\n\t\t\t}\n\t\t},\n\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\tlogger.error('[NcRawLinkInput] Failed to update reference', { 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\n\t\t\tv-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\n\t\t\tv-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.ts'\n\nexport default {\n\tname: 'NcSearchResult',\n\tcomponents: {\n\t\tNcHighlight,\n\t},\n\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\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\n\t\t\tref=\"search-select\"\n\t\t\tv-model=\"selectedResult\"\n\t\t\tclass=\"smart-picker-search--select\"\n\t\t\tinputId=\"search-select-input\"\n\t\t\tlabel=\"name\"\n\t\t\t:placeholder=\"mySearchPlaceholder\"\n\t\t\t:options=\"options\"\n\t\t\t:appendToBody=\"false\"\n\t\t\t:closeOnSelect=\"false\"\n\t\t\t:clearSearchOnSelect=\"false\"\n\t\t\t:clearSearchOnBlur=\"() => false\"\n\t\t\t:resetFocusOnOptionsChange=\"false\"\n\t\t\t:filterable=\"false\"\n\t\t\t:autoscroll=\"true\"\n\t\t\t:resetOnOptionsChange=\"false\"\n\t\t\t:loading=\"searching\"\n\t\t\t@search=\"onSearchInput\"\n\t\t\t@update:modelValue=\"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\n\t\t\t\t\tv-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\n\t\t\t\t\t\tv-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\">\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\n\t\t\tv-if=\"showEmptyContent\"\n\t\t\tclass=\"smart-picker-search--empty-content\">\n\t\t\t<template #icon>\n\t\t\t\t<img\n\t\t\t\t\tv-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 axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\nimport debounce from 'debounce'\nimport DotsHorizontalIcon from 'vue-material-design-icons/DotsHorizontal.vue'\nimport LinkVariantIcon from 'vue-material-design-icons/LinkVariant.vue'\nimport NcSearchResult from './NcSearchResult.vue'\nimport { t } from '../../../l10n.ts'\nimport NcEmptyContent from '../../NcEmptyContent/index.ts'\nimport NcSelect from '../../NcSelect/index.js'\nimport { isUrl } from './utils.ts'\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\n\t/* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\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\n\t\tshowEmptyContent: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\n\t\t/**\n\t\t * Placeholder of the search\n\t\t */\n\t\tsearchPlaceholder: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\temits: [\n\t\t'submit',\n\t],\n\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\n\tcomputed: {\n\t\tmySearchPlaceholder() {\n\t\t\treturn this.searchPlaceholder || t('Search')\n\t\t},\n\n\t\tsearchProviderIds() {\n\t\t\treturn this.provider.search_providers_ids\n\t\t},\n\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\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\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\n\t\tdebouncedUpdateSearch() {\n\t\t\treturn debounce(this.updateSearch, 500)\n\t\t},\n\t},\n\n\tmounted() {\n\t\tthis.resetResults()\n\t},\n\n\tbeforeUnmount() {\n\t\tthis.cancelSearchRequests()\n\t},\n\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\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\n\t\tcancelSearchRequests() {\n\t\t\tif (this.abortController) {\n\t\t\t\tthis.abortController.abort()\n\t\t\t}\n\t\t},\n\n\t\tonSearchInput(query) {\n\t\t\tthis.searchQuery = query\n\t\t\tthis.debouncedUpdateSearch()\n\t\t},\n\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\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\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\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\t\treturn this.searchOneProvider(pid)\n\t\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\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\n\t\tclass=\"reference-picker\"\n\t\t:style=\"pickerWrapperStyle\"\n\t\ttabindex=\"-1\"\n\t\t@keydown.stop.prevent.esc=\"onEscapePressed\">\n\t\t<NcProviderList\n\t\t\tv-if=\"mode === MODES.providerList\"\n\t\t\tref=\"provider-list\"\n\t\t\t@selectProvider=\"onProviderSelected\"\n\t\t\t@submit=\"submitLink\"\n\t\t\t@cancel=\"cancelProviderSelection\" />\n\t\t<NcRawLinkInput\n\t\t\tv-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\n\t\t\tv-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\n\t\t\tv-else-if=\"mode === MODES.customElement\"\n\t\t\tclass=\"custom-element-wrapper\">\n\t\t\t<NcCustomPickerElement\n\t\t\t\t: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\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\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\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\n\temits: [\n\t\t'cancel',\n\t\t'cancelRawLink',\n\t\t'cancelSearch',\n\t\t'providerSelected',\n\t\t'submit',\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\tMODES,\n\t\t\tselectedProvider: this.initialProvider,\n\t\t}\n\t},\n\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\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\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\t},\n\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\n\t\tonProviderSelected(provider) {\n\t\t\tthis.selectedProvider = provider\n\t\t\tthis.$emit('providerSelected', provider)\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs['url-input']?.focus()\n\t\t\t})\n\t\t},\n\n\t\tcancelCustomElement() {\n\t\t\tthis.deselectProvider()\n\t\t},\n\n\t\tcancelSearch() {\n\t\t\tthis.$emit('cancelSearch', this.selectedProvider?.title)\n\t\t\tthis.deselectProvider()\n\t\t},\n\n\t\tcancelRawLinkInput() {\n\t\t\tthis.$emit('cancelRawLink', this.selectedProvider?.title)\n\t\t\tthis.deselectProvider()\n\t\t},\n\n\t\tcancelProviderSelection() {\n\t\t\tthis.$emit('cancel')\n\t\t},\n\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\n\t\tdeselectProvider() {\n\t\t\tthis.selectedProvider = null\n\t\t\tthis.$emit('providerSelected', 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\n\t\tv-if=\"show\"\n\t\t:size=\"modalSize\"\n\t\tclass=\"reference-picker-modal\"\n\t\t@close=\"onCancel\">\n\t\t<div\n\t\t\tref=\"modal_content\"\n\t\t\tclass=\"reference-picker-modal--content\">\n\t\t\t<NcButton\n\t\t\t\tv-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\n\t\t\t\tclass=\"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\n\t\t\t\tref=\"referencePicker\"\n\t\t\t\t:initialProvider=\"initialProvider\"\n\t\t\t\t:focusOnCreate=\"focusOnCreate\"\n\t\t\t\t@providerSelected=\"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 { emit } from '@nextcloud/event-bus'\nimport ArrowLeftIcon from 'vue-material-design-icons/ArrowLeft.vue'\nimport CloseIcon from 'vue-material-design-icons/Close.vue'\nimport NcReferencePicker from './NcReferencePicker.vue'\nimport { getCustomPickerElementSize, isCustomPickerElementRegistered } from '../../../functions/reference/customPickerElements.ts'\nimport { t } from '../../../l10n.ts'\nimport NcButton from '../../NcButton/index.ts'\nimport NcModal from '../../NcModal/index.js'\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\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\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\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\n\temits: [\n\t\t'cancel',\n\t\t'submit',\n\t],\n\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\n\tcomputed: {\n\t\tisProviderSelected() {\n\t\t\treturn this.selectedProvider !== null\n\t\t},\n\n\t\tshowBackButton() {\n\t\t\treturn this.initialProvider === null && this.isProviderSelected\n\t\t},\n\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\n\t\tshowModalName() {\n\t\t\treturn !this.isProviderSelected || !isCustomPickerElementRegistered(this.selectedProvider.id)\n\t\t},\n\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\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\n\tmethods: {\n\t\tonCancel() {\n\t\t\tthis.show = false\n\t\t\tthis.$emit('cancel')\n\t\t},\n\n\t\tonSubmit(value) {\n\t\t\tthis.show = false\n\t\t\tthis.$emit('submit', value)\n\t\t},\n\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\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 { createApp } from 'vue'\nimport NcReferencePickerModal from './../../components/NcRichText/NcReferencePicker/NcReferencePickerModal.vue'\nimport { getProvider } from './providerHelper.js'\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\n\tconst { promise, reject, resolve } = Promise.withResolvers<string>()\n\tconst initialProvider = (providerId && getProvider(providerId)) || null\n\tconst view = createApp(NcReferencePickerModal, {\n\t\tinitialProvider,\n\t\tisInsideViewer,\n\t\tonCancel() {\n\t\t\tview.unmount()\n\t\t\treject(new Error('User cancellation'))\n\t\t},\n\t\tonSubmit(link: string) {\n\t\t\tview.unmount()\n\t\t\tresolve(link)\n\t\t},\n\t})\n\tview.mount(modalElement)\n\n\treturn promise\n}\n"],"names":["_sfc_main","_hoisted_3","_createElementBlock","_mergeProps","_createElementVNode","_openBlock","_hoisted_1","NcHighlight","_createVNode","_withCtx","_hoisted_2","_toDisplayString","_normalizeClass","reference","_createBlock","_resolveDynamicComponent","_hoisted_4","interactiveOptIn","_unref","NcTextField","_hoisted_5","DotsHorizontalIcon","CloseIcon"],"mappings":"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","x_google_ignoreList":[0,2]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { d as mdiCheck, e as mdiContentCopy } from "./mdi-CpchYUUV.mjs";
|
|
2
2
|
import { ref, computed, toValue } from "vue";
|
|
3
|
-
import { r as register, e as t22, a as t } from "./_l10n-
|
|
3
|
+
import { r as register, e as t22, a as t } from "./_l10n-BCg4udFv.mjs";
|
|
4
4
|
register(t22);
|
|
5
5
|
/*!
|
|
6
6
|
* SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors
|
|
@@ -36,4 +36,4 @@ function useCopy(content) {
|
|
|
36
36
|
export {
|
|
37
37
|
useCopy as u
|
|
38
38
|
};
|
|
39
|
-
//# sourceMappingURL=useCopy
|
|
39
|
+
//# sourceMappingURL=useCopy--plF8q1P.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCopy
|
|
1
|
+
{"version":3,"file":"useCopy--plF8q1P.mjs","sources":["../../src/composables/useCopy.ts"],"sourcesContent":["/*!\n * SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { MaybeRefOrGetter } from 'vue'\n\nimport { mdiCheck, mdiContentCopy } from '@mdi/js'\nimport { computed, ref, toValue } from 'vue'\nimport { t } from '../l10n.ts'\n\nconst DELAY = 2000\n\n/**\n * Copy content to clipboard with copied state\n *\n * @param content - Content to copy\n */\nexport function useCopy(content: MaybeRefOrGetter<string>) {\n\tconst isCopied = ref(false)\n\tconst icon = computed(() => isCopied.value ? mdiCheck : mdiContentCopy)\n\tconst altText = computed(() => isCopied.value ? t('Copied') : t('Copy to clipboard'))\n\n\t/**\n\t * Copy the content to clipboard\n\t */\n\tasync function copy() {\n\t\tif (isCopied.value) {\n\t\t\treturn\n\t\t}\n\n\t\tconst value = toValue(content)\n\t\ttry {\n\t\t\tawait navigator.clipboard.writeText(value)\n\t\t} catch {\n\t\t\t// Fallback for a case when clipboard API is not available or permission denied\n\t\t\tprompt('', value)\n\t\t}\n\n\t\tisCopied.value = true\n\t\tsetTimeout(() => {\n\t\t\tisCopied.value = false\n\t\t}, DELAY)\n\t}\n\n\treturn {\n\t\tisCopied,\n\t\tcopy,\n\t\ticon,\n\t\taltText,\n\t}\n}\n"],"names":[],"mappings":";;;;AAAA;AAAA;AAAA;AAAA;AAWA,MAAM,QAAQ;AAOP,SAAS,QAAQ,SAAmC;AAC1D,QAAM,WAAW,IAAI,KAAK;AAC1B,QAAM,OAAO,SAAS,MAAM,SAAS,QAAQ,WAAW,cAAc;AACtE,QAAM,UAAU,SAAS,MAAM,SAAS,QAAQ,EAAE,QAAQ,IAAI,EAAE,mBAAmB,CAAC;AAKpF,iBAAe,OAAO;AACrB,QAAI,SAAS,OAAO;AACnB;AAAA,IACD;AAEA,UAAM,QAAQ,QAAQ,OAAO;AAC7B,QAAI;AACH,YAAM,UAAU,UAAU,UAAU,KAAK;AAAA,IAC1C,QAAQ;AAEP,aAAO,IAAI,KAAK;AAAA,IACjB;AAEA,aAAS,QAAQ;AACjB,eAAW,MAAM;AAChB,eAAS,QAAQ;AAAA,IAClB,GAAG,KAAK;AAAA,EACT;AAEA,SAAO;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEF;"}
|