@nextcloud/vue 8.37.0 → 8.38.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 +32 -0
- package/dist/Components/NcActionButton.cjs +1 -1
- package/dist/Components/NcActionButton.mjs +1 -1
- package/dist/Components/NcActionButtonGroup.cjs +1 -1
- package/dist/Components/NcActionButtonGroup.mjs +1 -1
- package/dist/Components/NcActionInput.cjs +1 -1
- package/dist/Components/NcActionInput.mjs +1 -1
- package/dist/Components/NcActionLink.cjs +2 -2
- package/dist/Components/NcActionLink.cjs.map +1 -1
- package/dist/Components/NcActionLink.mjs +2 -2
- package/dist/Components/NcActionLink.mjs.map +1 -1
- package/dist/Components/NcActionTextEditable.cjs +1 -1
- package/dist/Components/NcActionTextEditable.mjs +1 -1
- package/dist/Components/NcActions.cjs +1 -1
- package/dist/Components/NcActions.mjs +1 -1
- package/dist/Components/NcAppContent.cjs +1 -1
- package/dist/Components/NcAppContent.mjs +1 -1
- package/dist/Components/NcAppNavigation.cjs +1 -1
- package/dist/Components/NcAppNavigation.mjs +1 -1
- package/dist/Components/NcAppNavigationCaption.cjs +1 -1
- package/dist/Components/NcAppNavigationCaption.mjs +1 -1
- package/dist/Components/NcAppNavigationItem.cjs +1 -1
- package/dist/Components/NcAppNavigationItem.mjs +1 -1
- package/dist/Components/NcAppNavigationNew.cjs +1 -1
- package/dist/Components/NcAppNavigationNew.mjs +1 -1
- package/dist/Components/NcAppNavigationNewItem.cjs +1 -1
- package/dist/Components/NcAppNavigationNewItem.mjs +1 -1
- package/dist/Components/NcAppNavigationSearch.cjs +1 -1
- package/dist/Components/NcAppNavigationSearch.mjs +1 -1
- package/dist/Components/NcAppNavigationSettings.cjs +1 -1
- package/dist/Components/NcAppNavigationSettings.mjs +1 -1
- package/dist/Components/NcAppNavigationToggle.cjs +1 -1
- package/dist/Components/NcAppNavigationToggle.mjs +1 -1
- package/dist/Components/NcAppSettingsDialog.cjs +1 -1
- package/dist/Components/NcAppSettingsDialog.mjs +1 -1
- package/dist/Components/NcAppSidebar.cjs +1 -1
- package/dist/Components/NcAppSidebar.mjs +1 -1
- package/dist/Components/NcAssistantButton.cjs +1 -1
- package/dist/Components/NcAssistantButton.mjs +1 -1
- package/dist/Components/NcAvatar.cjs +1 -1
- package/dist/Components/NcAvatar.mjs +1 -1
- package/dist/Components/NcBreadcrumb.cjs +1 -1
- package/dist/Components/NcBreadcrumb.mjs +1 -1
- package/dist/Components/NcBreadcrumbs.cjs +1 -1
- package/dist/Components/NcBreadcrumbs.mjs +1 -1
- package/dist/Components/NcButton.cjs +1 -1
- package/dist/Components/NcButton.mjs +1 -1
- package/dist/Components/NcCheckboxRadioSwitch.cjs +1 -1
- package/dist/Components/NcCheckboxRadioSwitch.mjs +1 -1
- package/dist/Components/NcChip.cjs +2 -2
- package/dist/Components/NcChip.mjs +2 -2
- package/dist/Components/NcCollectionList.cjs +1 -1
- package/dist/Components/NcCollectionList.mjs +1 -1
- package/dist/Components/NcColorPicker.cjs +1 -1
- package/dist/Components/NcColorPicker.mjs +1 -1
- package/dist/Components/NcContent.cjs +1 -1
- package/dist/Components/NcContent.mjs +1 -1
- package/dist/Components/NcDashboardWidget.cjs +1 -1
- package/dist/Components/NcDashboardWidget.mjs +1 -1
- package/dist/Components/NcDashboardWidgetItem.cjs +1 -1
- package/dist/Components/NcDashboardWidgetItem.mjs +1 -1
- package/dist/Components/NcDateTimePicker.cjs +3 -3
- package/dist/Components/NcDateTimePicker.mjs +3 -3
- package/dist/Components/NcDateTimePickerNative.cjs +1 -1
- package/dist/Components/NcDateTimePickerNative.mjs +1 -1
- package/dist/Components/NcDialog.cjs +1 -1
- package/dist/Components/NcDialog.mjs +1 -1
- package/dist/Components/NcDialogButton.cjs +1 -1
- package/dist/Components/NcDialogButton.mjs +1 -1
- package/dist/Components/NcEmojiPicker.cjs +1 -1
- package/dist/Components/NcEmojiPicker.mjs +1 -1
- package/dist/Components/NcFilePicker.cjs +1 -1
- package/dist/Components/NcFilePicker.mjs +1 -1
- package/dist/Components/NcHeaderButton.cjs +1 -1
- package/dist/Components/NcHeaderButton.mjs +1 -1
- package/dist/Components/NcHeaderMenu.cjs +1 -1
- package/dist/Components/NcHeaderMenu.mjs +1 -1
- package/dist/Components/NcInputField.cjs +1 -1
- package/dist/Components/NcInputField.mjs +1 -1
- package/dist/Components/NcListItem.cjs +1 -1
- package/dist/Components/NcListItem.mjs +1 -1
- package/dist/Components/NcListItemIcon.cjs +1 -1
- package/dist/Components/NcListItemIcon.mjs +1 -1
- package/dist/Components/NcModal.cjs +3 -3
- package/dist/Components/NcModal.mjs +3 -3
- package/dist/Components/NcPasswordField.cjs +1 -1
- package/dist/Components/NcPasswordField.mjs +1 -1
- package/dist/Components/NcRelatedResourcesPanel.cjs +1 -1
- package/dist/Components/NcRelatedResourcesPanel.mjs +1 -1
- package/dist/Components/NcRichContenteditable.cjs +2 -2
- package/dist/Components/NcRichContenteditable.mjs +2 -2
- package/dist/Components/NcRichText.cjs +2 -2
- package/dist/Components/NcRichText.mjs +3 -3
- package/dist/Components/NcSelect.cjs +1 -1
- package/dist/Components/NcSelect.mjs +1 -1
- package/dist/Components/NcSelectTags.cjs +1 -1
- package/dist/Components/NcSelectTags.mjs +1 -1
- package/dist/Components/NcSelectUsers.cjs +1 -1
- package/dist/Components/NcSelectUsers.mjs +1 -1
- package/dist/Components/NcSettingsSelectGroup.cjs +1 -1
- package/dist/Components/NcSettingsSelectGroup.mjs +1 -1
- package/dist/Components/NcTextField.cjs +1 -1
- package/dist/Components/NcTextField.mjs +1 -1
- package/dist/Components/NcTimezonePicker.cjs +1 -1
- package/dist/Components/NcTimezonePicker.mjs +1 -1
- package/dist/Components/NcUserBubble.cjs +1 -1
- package/dist/Components/NcUserBubble.mjs +1 -1
- package/dist/Functions/emoji.cjs +1 -1
- package/dist/Functions/emoji.mjs +1 -1
- package/dist/Functions/reference.cjs +1 -1
- package/dist/Functions/reference.mjs +1 -1
- package/dist/Mixins/richEditor.cjs +1 -1
- package/dist/Mixins/richEditor.mjs +1 -1
- package/dist/assets/{NcActionButton-CG4V9b5b.css → NcActionButton-CjKx3679.css} +18 -18
- package/dist/assets/{NcActionButtonGroup-CRXLyFpx.css → NcActionButtonGroup-DqR0weTf.css} +8 -8
- package/dist/assets/{NcActionInput-B-c5cOfM.css → NcActionInput-CPu4Btyq.css} +65 -65
- package/dist/assets/{NcActionLink-BtpJIbvI.css → NcActionLink-Bt-73iBm.css} +13 -13
- package/dist/assets/{NcActionTextEditable-BCmDMuUg.css → NcActionTextEditable-AuLw5QVP.css} +65 -65
- package/dist/assets/{NcActions-CVw1SmBu.css → NcActions-CuFJSslC.css} +11 -11
- package/dist/assets/{NcAppNavigation-Dbpqdigp.css → NcAppNavigation-mcR7I0Bd.css} +12 -12
- package/dist/assets/{NcAppSettingsDialog-N2RJYgHo.css → NcAppSettingsDialog-x8dImUGK.css} +11 -11
- package/dist/assets/{NcBreadcrumbs-DahxPGJY.css → NcBreadcrumbs-Dt1zdHzR.css} +6 -6
- package/dist/assets/{NcButton-8Y8d_1Z_.css → NcButton-C5JW43jM.css} +46 -46
- package/dist/assets/{NcCheckboxRadioSwitch-BACLOhMO.css → NcCheckboxRadioSwitch-BojbloxL.css} +38 -38
- package/dist/assets/{NcDateTimePicker-BzP7Sn12.css → NcDateTimePicker-DrfMaKM7.css} +8 -8
- package/dist/assets/{NcPasswordField-CiN_phAQ.css → NcPasswordField-vrT0oftw.css} +2 -2
- package/dist/assets/{NcRelatedResourcesPanel-BgMc8bue.css → NcRelatedResourcesPanel-CTpqdDL9.css} +3 -3
- package/dist/assets/{NcRichContenteditable-3tL9zHn2.css → NcRichContenteditable-DwS6PNCv.css} +11 -11
- package/dist/assets/{NcRichText-CAhzDSty.css → NcRichText-Cp_5tfBy.css} +91 -98
- package/dist/assets/autolink-KPdaBewQ.css +25 -0
- package/dist/chunks/{NcActionButton-C5Dqge0c.cjs → NcActionButton-CiYel4_C.cjs} +3 -3
- package/dist/chunks/NcActionButton-CiYel4_C.cjs.map +1 -0
- package/dist/chunks/{NcActionButton-1gSJfFUC.mjs → NcActionButton-K4jUGMlW.mjs} +3 -3
- package/dist/chunks/NcActionButton-K4jUGMlW.mjs.map +1 -0
- package/dist/chunks/{NcActionButtonGroup-eZxqibUd.mjs → NcActionButtonGroup-B95wg_Q6.mjs} +3 -3
- package/dist/chunks/NcActionButtonGroup-B95wg_Q6.mjs.map +1 -0
- package/dist/chunks/{NcActionButtonGroup-CpZDTAQo.cjs → NcActionButtonGroup-CFGCmzTM.cjs} +3 -3
- package/dist/chunks/NcActionButtonGroup-CFGCmzTM.cjs.map +1 -0
- package/dist/chunks/{NcActionInput-UPwE2Dky.mjs → NcActionInput-B_9GOTi6.mjs} +5 -5
- package/dist/chunks/NcActionInput-B_9GOTi6.mjs.map +1 -0
- package/dist/chunks/{NcActionInput-eAmBylEO.cjs → NcActionInput-D3w0eGfB.cjs} +5 -5
- package/dist/chunks/NcActionInput-D3w0eGfB.cjs.map +1 -0
- package/dist/chunks/{NcActionTextEditable-RFLtWxrl.cjs → NcActionTextEditable-BqJ5wONY.cjs} +3 -3
- package/dist/chunks/NcActionTextEditable-BqJ5wONY.cjs.map +1 -0
- package/dist/chunks/{NcActionTextEditable-CIsAP-pp.mjs → NcActionTextEditable-YqvZGY07.mjs} +3 -3
- package/dist/chunks/NcActionTextEditable-YqvZGY07.mjs.map +1 -0
- package/dist/chunks/{NcActions-BSDvtMJD.cjs → NcActions-0fAYsGbh.cjs} +4 -4
- package/dist/chunks/NcActions-0fAYsGbh.cjs.map +1 -0
- package/dist/chunks/{NcActions-BcLis_nr.mjs → NcActions-Ca_2vj8f.mjs} +4 -4
- package/dist/chunks/NcActions-Ca_2vj8f.mjs.map +1 -0
- package/dist/chunks/{NcAppContent-DLGtJosF.cjs → NcAppContent-B95Sj4-X.cjs} +2 -2
- package/dist/chunks/{NcAppContent-DLGtJosF.cjs.map → NcAppContent-B95Sj4-X.cjs.map} +1 -1
- package/dist/chunks/{NcAppContent-CeVqX0gV.mjs → NcAppContent-HZ-Lp090.mjs} +2 -2
- package/dist/chunks/{NcAppContent-CeVqX0gV.mjs.map → NcAppContent-HZ-Lp090.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigation-D2Ds_2Dm.cjs → NcAppNavigation-BDxzq-ai.cjs} +17 -7
- package/dist/chunks/NcAppNavigation-BDxzq-ai.cjs.map +1 -0
- package/dist/chunks/{NcAppNavigation-BfzJA6cb.mjs → NcAppNavigation-BPqJExo6.mjs} +17 -7
- package/dist/chunks/NcAppNavigation-BPqJExo6.mjs.map +1 -0
- package/dist/chunks/{NcAppNavigationCaption-3YHrxAYS.mjs → NcAppNavigationCaption-Bt51pgle.mjs} +2 -2
- package/dist/chunks/{NcAppNavigationCaption-3YHrxAYS.mjs.map → NcAppNavigationCaption-Bt51pgle.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationCaption-BDSDmQuu.cjs → NcAppNavigationCaption-CQZ7ZrEO.cjs} +2 -2
- package/dist/chunks/{NcAppNavigationCaption-BDSDmQuu.cjs.map → NcAppNavigationCaption-CQZ7ZrEO.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationItem-Dc5Vdhb1.cjs → NcAppNavigationItem-BBZ1SsqQ.cjs} +5 -5
- package/dist/chunks/{NcAppNavigationItem-Dc5Vdhb1.cjs.map → NcAppNavigationItem-BBZ1SsqQ.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationItem-D30ztZfZ.mjs → NcAppNavigationItem-DcKt7SjF.mjs} +5 -5
- package/dist/chunks/{NcAppNavigationItem-D30ztZfZ.mjs.map → NcAppNavigationItem-DcKt7SjF.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationNew-Ce_TheyK.mjs → NcAppNavigationNew-B5ikLvxM.mjs} +2 -2
- package/dist/chunks/{NcAppNavigationNew-Ce_TheyK.mjs.map → NcAppNavigationNew-B5ikLvxM.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationNew-D7FwWc52.cjs → NcAppNavigationNew-DljLy9CQ.cjs} +2 -2
- package/dist/chunks/{NcAppNavigationNew-D7FwWc52.cjs.map → NcAppNavigationNew-DljLy9CQ.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationNewItem-BskLwwWH.mjs → NcAppNavigationNewItem-BqhwbJsJ.mjs} +2 -2
- package/dist/chunks/{NcAppNavigationNewItem-BskLwwWH.mjs.map → NcAppNavigationNewItem-BqhwbJsJ.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationNewItem-Cjody3t9.cjs → NcAppNavigationNewItem-C6gqVpBt.cjs} +2 -2
- package/dist/chunks/{NcAppNavigationNewItem-Cjody3t9.cjs.map → NcAppNavigationNewItem-C6gqVpBt.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationSearch-CkcBGG0H.mjs → NcAppNavigationSearch-B6u1Ln1_.mjs} +2 -2
- package/dist/chunks/{NcAppNavigationSearch-CkcBGG0H.mjs.map → NcAppNavigationSearch-B6u1Ln1_.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationSearch-CwO9XhWM.cjs → NcAppNavigationSearch-CliHANzA.cjs} +2 -2
- package/dist/chunks/{NcAppNavigationSearch-CwO9XhWM.cjs.map → NcAppNavigationSearch-CliHANzA.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationSettings-BjyBA5Mj.mjs → NcAppNavigationSettings-BfysBg80.mjs} +2 -2
- package/dist/chunks/{NcAppNavigationSettings-BjyBA5Mj.mjs.map → NcAppNavigationSettings-BfysBg80.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationSettings-CrLS3Smo.cjs → NcAppNavigationSettings-ClcR05vZ.cjs} +2 -2
- package/dist/chunks/{NcAppNavigationSettings-CrLS3Smo.cjs.map → NcAppNavigationSettings-ClcR05vZ.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationToggle-DPjOENSf.cjs → NcAppNavigationToggle-CLPYPwyi.cjs} +2 -2
- package/dist/chunks/{NcAppNavigationToggle-DPjOENSf.cjs.map → NcAppNavigationToggle-CLPYPwyi.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationToggle-zzG9M53D.mjs → NcAppNavigationToggle-DtJjJGQ5.mjs} +2 -2
- package/dist/chunks/{NcAppNavigationToggle-zzG9M53D.mjs.map → NcAppNavigationToggle-DtJjJGQ5.mjs.map} +1 -1
- package/dist/chunks/{NcAppSettingsDialog-Ckf6dRRJ.cjs → NcAppSettingsDialog-C2-LWcDG.cjs} +4 -4
- package/dist/chunks/{NcAppSettingsDialog-vBeCGFqk.mjs.map → NcAppSettingsDialog-C2-LWcDG.cjs.map} +1 -1
- package/dist/chunks/{NcAppSettingsDialog-vBeCGFqk.mjs → NcAppSettingsDialog-D0M18YFD.mjs} +4 -4
- package/dist/chunks/{NcAppSettingsDialog-Ckf6dRRJ.cjs.map → NcAppSettingsDialog-D0M18YFD.mjs.map} +1 -1
- package/dist/chunks/{NcAppSidebar-CPHVBBe0.cjs → NcAppSidebar-BYHXZjYR.cjs} +4 -4
- package/dist/chunks/{NcAppSidebar-CPHVBBe0.cjs.map → NcAppSidebar-BYHXZjYR.cjs.map} +1 -1
- package/dist/chunks/{NcAppSidebar-Cx0PlofZ.mjs → NcAppSidebar-Bljse39J.mjs} +4 -4
- package/dist/chunks/{NcAppSidebar-Cx0PlofZ.mjs.map → NcAppSidebar-Bljse39J.mjs.map} +1 -1
- package/dist/chunks/{NcAssistantButton-D1Miejvu.mjs → NcAssistantButton-BdUkhzq1.mjs} +2 -2
- package/dist/chunks/{NcAssistantButton-D1Miejvu.mjs.map → NcAssistantButton-BdUkhzq1.mjs.map} +1 -1
- package/dist/chunks/{NcAssistantButton-Bl0F4iDe.cjs → NcAssistantButton-mPenTfuv.cjs} +2 -2
- package/dist/chunks/{NcAssistantButton-Bl0F4iDe.cjs.map → NcAssistantButton-mPenTfuv.cjs.map} +1 -1
- package/dist/chunks/{NcAvatar-DC2fiCH-.mjs → NcAvatar-CGnqUtoy.mjs} +6 -6
- package/dist/chunks/{NcAvatar-DC2fiCH-.mjs.map → NcAvatar-CGnqUtoy.mjs.map} +1 -1
- package/dist/chunks/{NcAvatar-ffZLZnH_.cjs → NcAvatar-DP8TpFfy.cjs} +6 -6
- package/dist/chunks/{NcAvatar-ffZLZnH_.cjs.map → NcAvatar-DP8TpFfy.cjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumb-VwnF27KB.mjs → NcBreadcrumb-DH2FV6QI.mjs} +3 -3
- package/dist/chunks/{NcBreadcrumb-VwnF27KB.mjs.map → NcBreadcrumb-DH2FV6QI.mjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumb-AZMsaVbs.cjs → NcBreadcrumb-hK0W8qx4.cjs} +3 -3
- package/dist/chunks/{NcBreadcrumb-AZMsaVbs.cjs.map → NcBreadcrumb-hK0W8qx4.cjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumbs-CpXJ-OQ1.mjs → NcBreadcrumbs-DrYYSHAS.mjs} +7 -7
- package/dist/chunks/{NcBreadcrumbs-CpU2Nbqu.cjs.map → NcBreadcrumbs-DrYYSHAS.mjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumbs-CpU2Nbqu.cjs → NcBreadcrumbs-pDN1N49I.cjs} +7 -7
- package/dist/chunks/{NcBreadcrumbs-CpXJ-OQ1.mjs.map → NcBreadcrumbs-pDN1N49I.cjs.map} +1 -1
- package/dist/chunks/{NcButton-BaZAY-tN.mjs → NcButton-BgppWSl9.mjs} +12 -4
- package/dist/chunks/NcButton-BgppWSl9.mjs.map +1 -0
- package/dist/chunks/{NcButton-Dszi1Apb.cjs → NcButton-DaWD-X8V.cjs} +12 -4
- package/dist/chunks/NcButton-DaWD-X8V.cjs.map +1 -0
- package/dist/chunks/{NcCheckboxRadioSwitch-NOpZzkFR.cjs → NcCheckboxRadioSwitch-BQeglWXd.cjs} +8 -17
- package/dist/chunks/{NcCheckboxRadioSwitch-DJmw98x9.mjs.map → NcCheckboxRadioSwitch-BQeglWXd.cjs.map} +1 -1
- package/dist/chunks/{NcCheckboxRadioSwitch-DJmw98x9.mjs → NcCheckboxRadioSwitch-D4IV4zWy.mjs} +8 -17
- package/dist/chunks/{NcCheckboxRadioSwitch-NOpZzkFR.cjs.map → NcCheckboxRadioSwitch-D4IV4zWy.mjs.map} +1 -1
- package/dist/chunks/{NcCollectionList-U0EoWgeN.mjs → NcCollectionList-BbmBJ4ET.mjs} +6 -6
- package/dist/chunks/{NcCollectionList-U0EoWgeN.mjs.map → NcCollectionList-BbmBJ4ET.mjs.map} +1 -1
- package/dist/chunks/{NcCollectionList-DUQPwfcY.cjs → NcCollectionList-DgLrYZ6o.cjs} +6 -6
- package/dist/chunks/{NcCollectionList-DUQPwfcY.cjs.map → NcCollectionList-DgLrYZ6o.cjs.map} +1 -1
- package/dist/chunks/{NcColorPicker-BfApfazi.mjs → NcColorPicker-Bzzw1uKu.mjs} +2 -2
- package/dist/chunks/{NcColorPicker-BfApfazi.mjs.map → NcColorPicker-Bzzw1uKu.mjs.map} +1 -1
- package/dist/chunks/{NcColorPicker-CpIQU_eH.cjs → NcColorPicker-DNpKf7gx.cjs} +2 -2
- package/dist/chunks/{NcColorPicker-CpIQU_eH.cjs.map → NcColorPicker-DNpKf7gx.cjs.map} +1 -1
- package/dist/chunks/{NcContent-MiRvygrj.cjs → NcContent-CMjQ3dfw.cjs} +2 -2
- package/dist/chunks/{NcContent-MiRvygrj.cjs.map → NcContent-CMjQ3dfw.cjs.map} +1 -1
- package/dist/chunks/{NcContent-DFOsZ6pm.mjs → NcContent-DpGM2KRx.mjs} +2 -2
- package/dist/chunks/{NcContent-DFOsZ6pm.mjs.map → NcContent-DpGM2KRx.mjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidget-BP9C-mPR.cjs → NcDashboardWidget-DuoTxAyf.cjs} +3 -3
- package/dist/chunks/{NcDashboardWidget-BP9C-mPR.cjs.map → NcDashboardWidget-DuoTxAyf.cjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidget-Cp3DMHz7.mjs → NcDashboardWidget-NOuL4APU.mjs} +3 -3
- package/dist/chunks/{NcDashboardWidget-Cp3DMHz7.mjs.map → NcDashboardWidget-NOuL4APU.mjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidgetItem-hwkr1yWB.cjs → NcDashboardWidgetItem-BFsKgWo2.cjs} +4 -4
- package/dist/chunks/{NcDashboardWidgetItem-hwkr1yWB.cjs.map → NcDashboardWidgetItem-BFsKgWo2.cjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidgetItem-BCjppWNJ.mjs → NcDashboardWidgetItem-CBW263ij.mjs} +4 -4
- package/dist/chunks/{NcDashboardWidgetItem-BCjppWNJ.mjs.map → NcDashboardWidgetItem-CBW263ij.mjs.map} +1 -1
- package/dist/chunks/{NcDialog-CDFWleNp.mjs → NcDialog-BCCBuI6f.mjs} +2 -2
- package/dist/chunks/{NcDialog-CDFWleNp.mjs.map → NcDialog-BCCBuI6f.mjs.map} +1 -1
- package/dist/chunks/{NcDialog-gV238gzy.cjs → NcDialog-x3G0Nuve.cjs} +2 -2
- package/dist/chunks/{NcDialog-gV238gzy.cjs.map → NcDialog-x3G0Nuve.cjs.map} +1 -1
- package/dist/chunks/{NcDialogButton-BDYsOgo1.cjs → NcDialogButton-DBtmgcol.cjs} +2 -2
- package/dist/chunks/{NcDialogButton-BDYsOgo1.cjs.map → NcDialogButton-DBtmgcol.cjs.map} +1 -1
- package/dist/chunks/{NcDialogButton-tB5RGMME.mjs → NcDialogButton-DpA4mqr-.mjs} +2 -2
- package/dist/chunks/{NcDialogButton-tB5RGMME.mjs.map → NcDialogButton-DpA4mqr-.mjs.map} +1 -1
- package/dist/chunks/{NcEmojiPicker-Cw593Jp6.mjs → NcEmojiPicker-C4jCrwQY.mjs} +5 -5
- package/dist/chunks/{NcEmojiPicker-Cw593Jp6.mjs.map → NcEmojiPicker-C4jCrwQY.mjs.map} +1 -1
- package/dist/chunks/{NcEmojiPicker-CRRgA7eR.cjs → NcEmojiPicker-DefnK492.cjs} +5 -5
- package/dist/chunks/{NcEmojiPicker-CRRgA7eR.cjs.map → NcEmojiPicker-DefnK492.cjs.map} +1 -1
- package/dist/chunks/{NcFilePicker-Ct_uwON0.cjs → NcFilePicker-BYWr-vcP.cjs} +3 -3
- package/dist/chunks/{NcFilePicker-Ct_uwON0.cjs.map → NcFilePicker-BYWr-vcP.cjs.map} +1 -1
- package/dist/chunks/{NcFilePicker-CDHKrfPj.mjs → NcFilePicker-DCPi6JGg.mjs} +3 -3
- package/dist/chunks/{NcFilePicker-CDHKrfPj.mjs.map → NcFilePicker-DCPi6JGg.mjs.map} +1 -1
- package/dist/chunks/NcFormBox-DRGVpFeZ.cjs.map +1 -1
- package/dist/chunks/NcFormBox-DtoCXLMx.mjs.map +1 -1
- package/dist/chunks/{NcHeaderButton-BI15lyn_.mjs → NcHeaderButton-DXdY8gct.mjs} +2 -2
- package/dist/chunks/{NcHeaderButton-BI15lyn_.mjs.map → NcHeaderButton-DXdY8gct.mjs.map} +1 -1
- package/dist/chunks/{NcHeaderButton-KtkQRinp.cjs → NcHeaderButton-iEtQ74pa.cjs} +2 -2
- package/dist/chunks/{NcHeaderButton-KtkQRinp.cjs.map → NcHeaderButton-iEtQ74pa.cjs.map} +1 -1
- package/dist/chunks/{NcHeaderMenu-B2gYavD4.mjs → NcHeaderMenu-BZnnbLTo.mjs} +2 -2
- package/dist/chunks/{NcHeaderMenu-B2gYavD4.mjs.map → NcHeaderMenu-BZnnbLTo.mjs.map} +1 -1
- package/dist/chunks/{NcHeaderMenu-Bl4_eT2K.cjs → NcHeaderMenu-efsSG80P.cjs} +2 -2
- package/dist/chunks/{NcHeaderMenu-Bl4_eT2K.cjs.map → NcHeaderMenu-efsSG80P.cjs.map} +1 -1
- package/dist/chunks/{NcInputConfirmCancel-Ckda9G9Z.cjs → NcInputConfirmCancel-CTvNhtqM.cjs} +2 -2
- package/dist/chunks/{NcInputConfirmCancel-Ckda9G9Z.cjs.map → NcInputConfirmCancel-CTvNhtqM.cjs.map} +1 -1
- package/dist/chunks/{NcInputConfirmCancel-BvYpvopv.mjs → NcInputConfirmCancel-LAJSyhOn.mjs} +2 -2
- package/dist/chunks/{NcInputConfirmCancel-BvYpvopv.mjs.map → NcInputConfirmCancel-LAJSyhOn.mjs.map} +1 -1
- package/dist/chunks/{NcInputField-DDgBZ427.cjs → NcInputField-DX2Jz57P.cjs} +2 -2
- package/dist/chunks/{NcInputField-DDgBZ427.cjs.map → NcInputField-DX2Jz57P.cjs.map} +1 -1
- package/dist/chunks/{NcInputField-Cfm1bJR4.mjs → NcInputField-j5EyU7QH.mjs} +2 -2
- package/dist/chunks/{NcInputField-Cfm1bJR4.mjs.map → NcInputField-j5EyU7QH.mjs.map} +1 -1
- package/dist/chunks/{NcListItem-BLbG7272.cjs → NcListItem-C14yh4-n.cjs} +2 -2
- package/dist/chunks/{NcListItem-BLbG7272.cjs.map → NcListItem-C14yh4-n.cjs.map} +1 -1
- package/dist/chunks/{NcListItem-RKTfRg06.mjs → NcListItem-D0JDzXkL.mjs} +2 -2
- package/dist/chunks/{NcListItem-RKTfRg06.mjs.map → NcListItem-D0JDzXkL.mjs.map} +1 -1
- package/dist/chunks/{NcListItemIcon-CQzyGLEI.cjs → NcListItemIcon-BccR3hro.cjs} +2 -2
- package/dist/chunks/{NcListItemIcon-CQzyGLEI.cjs.map → NcListItemIcon-BccR3hro.cjs.map} +1 -1
- package/dist/chunks/{NcListItemIcon-D49wESTI.mjs → NcListItemIcon-D35XZDGI.mjs} +2 -2
- package/dist/chunks/{NcListItemIcon-D49wESTI.mjs.map → NcListItemIcon-D35XZDGI.mjs.map} +1 -1
- package/dist/chunks/{NcPasswordField-DNuolayr.cjs → NcPasswordField-BkY96Kt0.cjs} +7 -8
- package/dist/chunks/NcPasswordField-BkY96Kt0.cjs.map +1 -0
- package/dist/chunks/{NcPasswordField-lE4m20vf.mjs → NcPasswordField-HQK5d_nv.mjs} +7 -8
- package/dist/chunks/NcPasswordField-HQK5d_nv.mjs.map +1 -0
- package/dist/chunks/{NcRelatedResourcesPanel-C2sLodV8.mjs → NcRelatedResourcesPanel-BdmY-Mly.mjs} +7 -7
- package/dist/chunks/{NcRelatedResourcesPanel-C2sLodV8.mjs.map → NcRelatedResourcesPanel-BdmY-Mly.mjs.map} +1 -1
- package/dist/chunks/{NcRelatedResourcesPanel-Dge9WXUM.cjs → NcRelatedResourcesPanel-BmpOFhV1.cjs} +7 -7
- package/dist/chunks/{NcRelatedResourcesPanel-Dge9WXUM.cjs.map → NcRelatedResourcesPanel-BmpOFhV1.cjs.map} +1 -1
- package/dist/chunks/{NcRichContenteditable-SA1zbfkk.mjs → NcRichContenteditable-BcTSkyeW.mjs} +19 -17
- package/dist/chunks/NcRichContenteditable-BcTSkyeW.mjs.map +1 -0
- package/dist/chunks/{NcRichContenteditable-Bh-mMIQz.cjs → NcRichContenteditable-QnLNsBkB.cjs} +19 -17
- package/dist/chunks/NcRichContenteditable-QnLNsBkB.cjs.map +1 -0
- package/dist/chunks/{NcRichText-B1Fyj7k8.cjs → NcRichText-CiRdCF_B.cjs} +230 -305
- package/dist/chunks/NcRichText-CiRdCF_B.cjs.map +1 -0
- package/dist/chunks/{NcRichText-rNfwY_Oc.mjs → NcRichText-DZgAb6-3.mjs} +229 -303
- package/dist/chunks/NcRichText-DZgAb6-3.mjs.map +1 -0
- package/dist/chunks/{NcSelect-1P3nA044.cjs → NcSelect-DVXAVRT_.cjs} +2 -2
- package/dist/chunks/{NcSelect-1P3nA044.cjs.map → NcSelect-DVXAVRT_.cjs.map} +1 -1
- package/dist/chunks/{NcSelect-CbWXsDdZ.mjs → NcSelect-FwcxH76q.mjs} +2 -2
- package/dist/chunks/{NcSelect-CbWXsDdZ.mjs.map → NcSelect-FwcxH76q.mjs.map} +1 -1
- package/dist/chunks/{NcSelectTags-D0fZXXmB.cjs → NcSelectTags-BNFcTbHy.cjs} +2 -2
- package/dist/chunks/{NcSelectTags-D0fZXXmB.cjs.map → NcSelectTags-BNFcTbHy.cjs.map} +1 -1
- package/dist/chunks/{NcSelectTags-CqVn5iU9.mjs → NcSelectTags-yZfa_z_z.mjs} +2 -2
- package/dist/chunks/{NcSelectTags-CqVn5iU9.mjs.map → NcSelectTags-yZfa_z_z.mjs.map} +1 -1
- package/dist/chunks/{NcSelectUsers-DGnn4yBW.mjs → NcSelectUsers-5r-vvEVy.mjs} +3 -3
- package/dist/chunks/{NcSelectUsers-DGnn4yBW.mjs.map → NcSelectUsers-5r-vvEVy.mjs.map} +1 -1
- package/dist/chunks/{NcSelectUsers-BuehmXvD.cjs → NcSelectUsers-fp6nf6ic.cjs} +3 -3
- package/dist/chunks/{NcSelectUsers-BuehmXvD.cjs.map → NcSelectUsers-fp6nf6ic.cjs.map} +1 -1
- package/dist/chunks/{NcSettingsSelectGroup-BaSHNm1x.mjs → NcSettingsSelectGroup-CUM0vkbN.mjs} +2 -2
- package/dist/chunks/{NcSettingsSelectGroup-BaSHNm1x.mjs.map → NcSettingsSelectGroup-CUM0vkbN.mjs.map} +1 -1
- package/dist/chunks/{NcSettingsSelectGroup-CUQtMkR1.cjs → NcSettingsSelectGroup-D5EWVZ7k.cjs} +2 -2
- package/dist/chunks/{NcSettingsSelectGroup-CUQtMkR1.cjs.map → NcSettingsSelectGroup-D5EWVZ7k.cjs.map} +1 -1
- package/dist/chunks/{NcTextField-CkW-dl88.cjs → NcTextField-B2tcddKo.cjs} +2 -2
- package/dist/chunks/{NcTextField-CkW-dl88.cjs.map → NcTextField-B2tcddKo.cjs.map} +1 -1
- package/dist/chunks/{NcTextField-DZHP0Dfw.mjs → NcTextField-ByDOTNvC.mjs} +2 -2
- package/dist/chunks/{NcTextField-DZHP0Dfw.mjs.map → NcTextField-ByDOTNvC.mjs.map} +1 -1
- package/dist/chunks/{NcTimezonePicker-CI4FEzzK.cjs → NcTimezonePicker-CeQXCjIR.cjs} +2 -2
- package/dist/chunks/{NcTimezonePicker-CI4FEzzK.cjs.map → NcTimezonePicker-CeQXCjIR.cjs.map} +1 -1
- package/dist/chunks/{NcTimezonePicker-w7XtRhLb.mjs → NcTimezonePicker-Cok_NaVd.mjs} +2 -2
- package/dist/chunks/{NcTimezonePicker-w7XtRhLb.mjs.map → NcTimezonePicker-Cok_NaVd.mjs.map} +1 -1
- package/dist/chunks/{NcUserBubble-DTcWIk4G.cjs → NcUserBubble-CIcwErdM.cjs} +2 -2
- package/dist/chunks/{NcUserBubble-DTcWIk4G.cjs.map → NcUserBubble-CIcwErdM.cjs.map} +1 -1
- package/dist/chunks/{NcUserBubble-CIOqCO9S.mjs → NcUserBubble-Csw7PXyG.mjs} +2 -2
- package/dist/chunks/{NcUserBubble-CIOqCO9S.mjs.map → NcUserBubble-Csw7PXyG.mjs.map} +1 -1
- package/dist/chunks/{ScopeComponent-DvT_N_X8.mjs → ScopeComponent-B6luC3XR.mjs} +2 -2
- package/dist/chunks/{ScopeComponent-DvT_N_X8.mjs.map → ScopeComponent-B6luC3XR.mjs.map} +1 -1
- package/dist/chunks/{ScopeComponent-CjjPkFe1.cjs → ScopeComponent-Co-1SOFK.cjs} +2 -2
- package/dist/chunks/{ScopeComponent-CjjPkFe1.cjs.map → ScopeComponent-Co-1SOFK.cjs.map} +1 -1
- package/dist/chunks/{autolink-D2pIbi92.mjs → autolink-CeB9uxD9.mjs} +56 -21
- package/dist/chunks/autolink-CeB9uxD9.mjs.map +1 -0
- package/dist/chunks/{autolink-BPlRHRHR.cjs → autolink-VQMuzjxl.cjs} +57 -22
- package/dist/chunks/autolink-VQMuzjxl.cjs.map +1 -0
- package/dist/chunks/{emoji-BgZdRy3v.mjs → emoji-Dtn2mDf7.mjs} +2 -2
- package/dist/chunks/emoji-Dtn2mDf7.mjs.map +1 -0
- package/dist/chunks/{emoji-CEwczMT5.cjs → emoji-aWWWqkrJ.cjs} +2 -2
- package/dist/chunks/emoji-aWWWqkrJ.cjs.map +1 -0
- package/dist/chunks/{getAvatarUrl-Du9Y3cPO.cjs → getAvatarUrl-4HsuXa3l.cjs} +2 -2
- package/dist/chunks/{getAvatarUrl-Du9Y3cPO.cjs.map → getAvatarUrl-4HsuXa3l.cjs.map} +1 -1
- package/dist/chunks/{getAvatarUrl-IhLacDEr.mjs → getAvatarUrl-BGOeDmNO.mjs} +2 -2
- package/dist/chunks/{getAvatarUrl-IhLacDEr.mjs.map → getAvatarUrl-BGOeDmNO.mjs.map} +1 -1
- package/dist/chunks/{index-TmAR7I2T.mjs → index-BCqXu_og.mjs} +2 -2
- package/dist/chunks/{index-TmAR7I2T.mjs.map → index-BCqXu_og.mjs.map} +1 -1
- package/dist/chunks/{index-CgkN1xho.cjs → index-phHwkniW.cjs} +2 -2
- package/dist/chunks/{index-CgkN1xho.cjs.map → index-phHwkniW.cjs.map} +1 -1
- package/dist/chunks/{referencePickerModal-hGj81_Th.cjs → referencePickerModal-BOCqzVJk.cjs} +6 -6
- package/dist/chunks/{referencePickerModal-hGj81_Th.cjs.map → referencePickerModal-BOCqzVJk.cjs.map} +1 -1
- package/dist/chunks/{referencePickerModal-DD_GM6xV.mjs → referencePickerModal-BQExd0w6.mjs} +6 -6
- package/dist/chunks/{referencePickerModal-DD_GM6xV.mjs.map → referencePickerModal-BQExd0w6.mjs.map} +1 -1
- package/dist/index.cjs +50 -50
- package/dist/index.mjs +52 -52
- package/dist/vendor.LICENSE.txt +2 -6
- package/package.json +14 -14
- package/dist/chunks/NcActionButton-1gSJfFUC.mjs.map +0 -1
- package/dist/chunks/NcActionButton-C5Dqge0c.cjs.map +0 -1
- package/dist/chunks/NcActionButtonGroup-CpZDTAQo.cjs.map +0 -1
- package/dist/chunks/NcActionButtonGroup-eZxqibUd.mjs.map +0 -1
- package/dist/chunks/NcActionInput-UPwE2Dky.mjs.map +0 -1
- package/dist/chunks/NcActionInput-eAmBylEO.cjs.map +0 -1
- package/dist/chunks/NcActionTextEditable-CIsAP-pp.mjs.map +0 -1
- package/dist/chunks/NcActionTextEditable-RFLtWxrl.cjs.map +0 -1
- package/dist/chunks/NcActions-BSDvtMJD.cjs.map +0 -1
- package/dist/chunks/NcActions-BcLis_nr.mjs.map +0 -1
- package/dist/chunks/NcAppNavigation-BfzJA6cb.mjs.map +0 -1
- package/dist/chunks/NcAppNavigation-D2Ds_2Dm.cjs.map +0 -1
- package/dist/chunks/NcButton-BaZAY-tN.mjs.map +0 -1
- package/dist/chunks/NcButton-Dszi1Apb.cjs.map +0 -1
- package/dist/chunks/NcPasswordField-DNuolayr.cjs.map +0 -1
- package/dist/chunks/NcPasswordField-lE4m20vf.mjs.map +0 -1
- package/dist/chunks/NcRichContenteditable-Bh-mMIQz.cjs.map +0 -1
- package/dist/chunks/NcRichContenteditable-SA1zbfkk.mjs.map +0 -1
- package/dist/chunks/NcRichText-B1Fyj7k8.cjs.map +0 -1
- package/dist/chunks/NcRichText-rNfwY_Oc.mjs.map +0 -1
- package/dist/chunks/autolink-BPlRHRHR.cjs.map +0 -1
- package/dist/chunks/autolink-D2pIbi92.mjs.map +0 -1
- package/dist/chunks/emoji-BgZdRy3v.mjs.map +0 -1
- package/dist/chunks/emoji-CEwczMT5.cjs.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emoji-aWWWqkrJ.cjs","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":["getBuilder","EmojiSkinTone","EmojiIndex","data","frequently"],"mappings":";;;;;;AASA,MAAM,UAAUA,eAAAA,WAAW,eAAe,EAAE,QAAQ,IAAI,EAAE,MAAA;AAI1D,IAAI;AAcG,IAAK,kCAAAC,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,IAAIC,iBAAAA,WAAWC,qBAAI;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,cAAUC,iBAAAA,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,IAAIF,iBAAAA,WAAWC,qBAAI;AAAA,IACjC;AACA,gBAAY,WAAW,UAAU,gBAAgB;AAAA,EAClD,OAAO;AACN,gBAAY;AAAA,EACb;AAEA,MAAI,aAAa,QAAQ,WAAW;AACnCC,qBAAAA,WAAW,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;;;;;;"}
|
|
@@ -5,10 +5,10 @@ function getAvatarUrl(user, options) {
|
|
|
5
5
|
const size = (options?.size || 64) <= 64 ? 64 : 512;
|
|
6
6
|
const guestUrl = options?.isGuest ? "/guest" : "";
|
|
7
7
|
const themeUrl = options?.isDarkTheme ?? Functions_isDarkTheme.checkIfDarkTheme(document.body) ? "/dark" : "";
|
|
8
|
-
return router.generateUrl(`/avatar${guestUrl}/{user}/{size}${themeUrl}`, {
|
|
8
|
+
return router.generateUrl(`/avatar${guestUrl}/{user}/{size}${themeUrl}?guestFallback=true`, {
|
|
9
9
|
user,
|
|
10
10
|
size
|
|
11
11
|
});
|
|
12
12
|
}
|
|
13
13
|
exports.getAvatarUrl = getAvatarUrl;
|
|
14
|
-
//# sourceMappingURL=getAvatarUrl-
|
|
14
|
+
//# sourceMappingURL=getAvatarUrl-4HsuXa3l.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAvatarUrl-
|
|
1
|
+
{"version":3,"file":"getAvatarUrl-4HsuXa3l.cjs","sources":["../../src/utils/getAvatarUrl.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { generateUrl } from '@nextcloud/router'\nimport { checkIfDarkTheme } from '../functions/isDarkTheme/index.ts'\n\ninterface AvatarUrlOptions {\n\t/**\n\t * Should the dark theme variant be used.\n\t */\n\tisDarkTheme?: boolean\n\n\t/**\n\t * Is the user a guest user.\n\t */\n\tisGuest?: boolean\n\n\t/**\n\t * Size of the avatar.\n\t *\n\t * @default 64\n\t */\n\tsize?: 64 | 512\n}\n\n/**\n * Get the avatar URL for a given user.\n *\n * @param user - The user id\n * @param options - Adjustments for the avatar format\n */\nexport function getAvatarUrl(user: string, options?: AvatarUrlOptions): string {\n\t// backend only supports 64 and 512px\n\t// so we only request the needed size for better caching of the request.\n\tconst size = (options?.size || 64) <= 64\n\t\t? 64\n\t\t: 512\n\n\tconst guestUrl = options?.isGuest\n\t\t? '/guest'\n\t\t: ''\n\tconst themeUrl = options?.isDarkTheme ?? checkIfDarkTheme(document.body)\n\t\t? '/dark'\n\t\t: ''\n\n\treturn generateUrl(`/avatar${guestUrl}/{user}/{size}${themeUrl}?guestFallback=true`, {\n\t\tuser,\n\t\tsize,\n\t})\n}\n"],"names":["checkIfDarkTheme","generateUrl"],"mappings":";;;AAiCO,SAAS,aAAa,MAAc,SAAoC;AAG9E,QAAM,QAAQ,SAAS,QAAQ,OAAO,KACnC,KACA;AAEH,QAAM,WAAW,SAAS,UACvB,WACA;AACH,QAAM,WAAW,SAAS,eAAeA,sBAAAA,iBAAiB,SAAS,IAAI,IACpE,UACA;AAEH,SAAOC,OAAAA,YAAY,UAAU,QAAQ,iBAAiB,QAAQ,uBAAuB;AAAA,IACpF;AAAA,IACA;AAAA,EAAA,CACA;AACF;;"}
|
|
@@ -4,7 +4,7 @@ function getAvatarUrl(user, options) {
|
|
|
4
4
|
const size = (options?.size || 64) <= 64 ? 64 : 512;
|
|
5
5
|
const guestUrl = options?.isGuest ? "/guest" : "";
|
|
6
6
|
const themeUrl = options?.isDarkTheme ?? checkIfDarkTheme(document.body) ? "/dark" : "";
|
|
7
|
-
return generateUrl(`/avatar${guestUrl}/{user}/{size}${themeUrl}`, {
|
|
7
|
+
return generateUrl(`/avatar${guestUrl}/{user}/{size}${themeUrl}?guestFallback=true`, {
|
|
8
8
|
user,
|
|
9
9
|
size
|
|
10
10
|
});
|
|
@@ -12,4 +12,4 @@ function getAvatarUrl(user, options) {
|
|
|
12
12
|
export {
|
|
13
13
|
getAvatarUrl as g
|
|
14
14
|
};
|
|
15
|
-
//# sourceMappingURL=getAvatarUrl-
|
|
15
|
+
//# sourceMappingURL=getAvatarUrl-BGOeDmNO.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getAvatarUrl-
|
|
1
|
+
{"version":3,"file":"getAvatarUrl-BGOeDmNO.mjs","sources":["../../src/utils/getAvatarUrl.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { generateUrl } from '@nextcloud/router'\nimport { checkIfDarkTheme } from '../functions/isDarkTheme/index.ts'\n\ninterface AvatarUrlOptions {\n\t/**\n\t * Should the dark theme variant be used.\n\t */\n\tisDarkTheme?: boolean\n\n\t/**\n\t * Is the user a guest user.\n\t */\n\tisGuest?: boolean\n\n\t/**\n\t * Size of the avatar.\n\t *\n\t * @default 64\n\t */\n\tsize?: 64 | 512\n}\n\n/**\n * Get the avatar URL for a given user.\n *\n * @param user - The user id\n * @param options - Adjustments for the avatar format\n */\nexport function getAvatarUrl(user: string, options?: AvatarUrlOptions): string {\n\t// backend only supports 64 and 512px\n\t// so we only request the needed size for better caching of the request.\n\tconst size = (options?.size || 64) <= 64\n\t\t? 64\n\t\t: 512\n\n\tconst guestUrl = options?.isGuest\n\t\t? '/guest'\n\t\t: ''\n\tconst themeUrl = options?.isDarkTheme ?? checkIfDarkTheme(document.body)\n\t\t? '/dark'\n\t\t: ''\n\n\treturn generateUrl(`/avatar${guestUrl}/{user}/{size}${themeUrl}?guestFallback=true`, {\n\t\tuser,\n\t\tsize,\n\t})\n}\n"],"names":[],"mappings":";;AAiCO,SAAS,aAAa,MAAc,SAAoC;AAG9E,QAAM,QAAQ,SAAS,QAAQ,OAAO,KACnC,KACA;AAEH,QAAM,WAAW,SAAS,UACvB,WACA;AACH,QAAM,WAAW,SAAS,eAAe,iBAAiB,SAAS,IAAI,IACpE,UACA;AAEH,SAAO,YAAY,UAAU,QAAQ,iBAAiB,QAAQ,uBAAuB;AAAA,IACpF;AAAA,IACA;AAAA,EAAA,CACA;AACF;"}
|
|
@@ -3,7 +3,7 @@ import escapeHtml from "escape-html";
|
|
|
3
3
|
import stripTags from "striptags";
|
|
4
4
|
import Vue from "vue";
|
|
5
5
|
import { useIsDarkTheme } from "../Composables/useIsDarkTheme.mjs";
|
|
6
|
-
import { g as getAvatarUrl } from "./getAvatarUrl-
|
|
6
|
+
import { g as getAvatarUrl } from "./getAvatarUrl-BGOeDmNO.mjs";
|
|
7
7
|
/* empty css */
|
|
8
8
|
import { n as normalizeComponent } from "./_plugin-vue2_normalizer-DU4iP6Vu.mjs";
|
|
9
9
|
const _sfc_main = {
|
|
@@ -176,4 +176,4 @@ export {
|
|
|
176
176
|
USERID_REGEX_WITH_SPACE as a,
|
|
177
177
|
richEditor as r
|
|
178
178
|
};
|
|
179
|
-
//# sourceMappingURL=index-
|
|
179
|
+
//# sourceMappingURL=index-BCqXu_og.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-TmAR7I2T.mjs","sources":["../../src/components/NcRichContenteditable/NcMentionBubble.vue","../../src/mixins/richEditor/index.js"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<span\n\t\tclass=\"mention-bubble\"\n\t\t:class=\"{ 'mention-bubble--primary': primary }\"\n\t\tcontenteditable=\"false\">\n\t\t<span class=\"mention-bubble__wrapper\">\n\t\t\t<span class=\"mention-bubble__content\">\n\t\t\t\t<!-- Avatar or icon -->\n\t\t\t\t<span\n\t\t\t\t\t:class=\"[icon, `mention-bubble__icon--${avatarUrl ? 'with-avatar' : ''}`]\"\n\t\t\t\t\t:style=\"avatarUrl ? { backgroundImage: `url(${avatarUrl})` } : null\"\n\t\t\t\t\tclass=\"mention-bubble__icon\" />\n\n\t\t\t\t<!-- Title -->\n\t\t\t\t<span role=\"heading\" class=\"mention-bubble__title\" :title=\"labelWithFallback\" />\n\t\t\t</span>\n\n\t\t\t<!-- Selectable text for copy/paste -->\n\t\t\t<span role=\"none\" class=\"mention-bubble__select\">{{ mentionText }}</span>\n\t\t</span>\n\t</span>\n</template>\n\n<script>\nimport { useIsDarkTheme } from '../../composables/useIsDarkTheme/index.ts'\nimport { getAvatarUrl } from '../../utils/getAvatarUrl.ts'\n\nexport default {\n\tname: 'NcMentionBubble',\n\n\t/* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * @deprecated Use `label` instead\n\t\t */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\ticonUrl: {\n\t\t\ttype: [String, null],\n\t\t\tdefault: null,\n\t\t},\n\n\t\tsource: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\tprimary: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst isDarkTheme = useIsDarkTheme()\n\n\t\treturn {\n\t\t\tisDarkTheme,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tavatarUrl() {\n\t\t\tif (this.iconUrl) {\n\t\t\t\treturn this.iconUrl\n\t\t\t}\n\n\t\t\treturn this.id && this.source === 'users'\n\t\t\t\t? getAvatarUrl(this.id, { isDarkTheme: this.isDarkTheme })\n\t\t\t\t: null\n\t\t},\n\n\t\tmentionText() {\n\t\t\treturn !this.id.includes(' ') && !this.id.includes('/')\n\t\t\t\t? `@${this.id}`\n\t\t\t\t: `@\"${this.id}\"`\n\t\t},\n\n\t\t// Fallback to title for compatibility\n\t\tlabelWithFallback() {\n\t\t\treturn this.label || this.title\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$bubble-height: 20px;\n$bubble-max-width: 150px;\n$bubble-padding: 2px;\n$bubble-avatar-size: $bubble-height - 2 * $bubble-padding;\n\n.mention-bubble {\n\t&--primary &__content {\n\t\tcolor: var(--color-primary-element-text);\n\t\tbackground-color: var(--color-primary-element);\n\t}\n\n\t&__wrapper {\n\t\tposition: relative;\n\t\tmax-width: $bubble-max-width;\n\t\t// Align with text\n\t\theight: $bubble-height - $bubble-padding;\n\t\tvertical-align: text-bottom;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t}\n\n\t&__content {\n\t\tdisplay: inline-flex;\n\t\toverflow: hidden;\n\t\talign-items: center;\n\t\tmax-width: 100%;\n\t\theight: $bubble-height;\n\t\t-webkit-user-select: none;\n\t\tuser-select: none;\n\t\tpadding-inline: $bubble-padding $bubble-padding * 3;\n\t\tborder-radius: math.div($bubble-height, 2);\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\n\t&__icon {\n\t\tposition: relative;\n\t\twidth: $bubble-avatar-size;\n\t\theight: $bubble-avatar-size;\n\t\tborder-radius: math.div($bubble-avatar-size, 2);\n\t\tbackground-color: var(--color-background-darker);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: center;\n\t\tbackground-size: $bubble-avatar-size - 2 * $bubble-padding;\n\n\t\t&--with-avatar {\n\t\t\tcolor: inherit;\n\t\t\tbackground-size: cover;\n\t\t}\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\tmargin-inline-start: $bubble-padding;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\t// Put title in ::before so it is not selectable\n\t\t&::before {\n\t\t\tcontent: attr(title);\n\t\t}\n\t}\n\n\t// Hide the mention id so it is selectable\n\t&__select {\n\t\tposition: absolute;\n\t\tz-index: -1;\n\t\tinset-inline-start: -100vw;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t\toverflow: hidden;\n\t}\n}\n\n</style>\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport escapeHtml from 'escape-html'\nimport stripTags from 'striptags'\nimport Vue from 'vue'\nimport NcMentionBubble from '../../components/NcRichContenteditable/NcMentionBubble.vue'\n\n// Referenced from public function getMentions(): https://github.com/nextcloud/server/blob/master/lib/private/Comments/Comment.php\n// Beginning or whitespace. Uses positive lookahead (to work on MobileSafari <16.4)\nconst MENTION_START = /(?=[a-z0-9_\\-@.'])\\B/.source\n// Capturing groups like: @user-id, @\"guest/abc16def\", @\"federated_user/user-id\", @\"user-id with space\"\nconst MENTION_SIMPLE = /(@[a-z0-9_\\-@.']+)/.source\nconst MENTION_GUEST = /@"(?:guest|email){1}\\/[a-f0-9]+"/.source\nconst MENTION_PREFIXED = /@"(?:federated_)?(?:group|team|user){1}\\/[a-z0-9_\\-@.' /:]+"/.source\nconst MENTION_WITH_SPACE = /@"[a-z0-9_\\-@.' ]+"/.source\nconst MENTION_COMPLEX = `(${MENTION_GUEST}|${MENTION_PREFIXED}|${MENTION_WITH_SPACE})`\n// Concatenated regular expressions\nexport const USERID_REGEX = new RegExp(`${MENTION_START}${MENTION_SIMPLE}`, 'gi')\nexport const USERID_REGEX_WITH_SPACE = new RegExp(`${MENTION_START}${MENTION_COMPLEX}`, 'gi')\n\nexport default {\n\tprops: {\n\t\tuserData: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Convert the value string to html for the inner content\n\t\t *\n\t\t * @param {string} value the content without html\n\t\t * @return {string} rendered html\n\t\t */\n\t\trenderContent(value) {\n\t\t\t// Sanitize the value prop\n\t\t\tconst sanitizedValue = escapeHtml(value)\n\n\t\t\t// Extract all the userIds\n\t\t\tconst splitValue = sanitizedValue.split(USERID_REGEX)\n\t\t\t\t.map((part) => part.split(USERID_REGEX_WITH_SPACE)).flat()\n\n\t\t\t// Replace userIds by html\n\t\t\treturn splitValue\n\t\t\t\t.map((part) => {\n\t\t\t\t\t// When splitting, the string is always putting the userIds\n\t\t\t\t\t// on the uneven indexes. We only want to generate the mentions html\n\t\t\t\t\tif (!part.startsWith('@')) {\n\t\t\t\t\t\treturn part\n\t\t\t\t\t}\n\n\t\t\t\t\t// Extracting the id, nuking the leading @ and all \"\n\t\t\t\t\tconst id = part.slice(1).replace(/"/gi, '')\n\t\t\t\t\t// Compiling template and prepend with the space we removed during the split\n\t\t\t\t\treturn this.genSelectTemplate(id)\n\t\t\t\t})\n\t\t\t\t.join('')\n\t\t\t\t.replace(/\\n/gmi, '<br>')\n\t\t\t\t.replace(/&/gmi, '&')\n\t\t},\n\n\t\t/**\n\t\t * Convert the innerHtml content to a string with mentions as text\n\t\t *\n\t\t * @param {string} content the content without html\n\t\t * @return {string}\n\t\t */\n\t\tparseContent(content) {\n\t\t\tlet text = content\n\t\t\t// Replace break lines with new lines\n\t\t\ttext = text.replace(/<br>/gmi, '\\n')\n\t\t\t// Replace some html special characters\n\t\t\ttext = text.replace(/ /gmi, ' ')\n\t\t\ttext = text.replace(/&/gmi, '&')\n\n\t\t\t// Convert the mentions to text only\n\t\t\t// first we replace divs with new lines\n\t\t\ttext = text.replace(/<\\/div>/gmi, '\\n')\n\t\t\t// then we remove all leftover html\n\t\t\ttext = stripTags(text, '<div>')\n\t\t\ttext = stripTags(text)\n\n\t\t\treturn text\n\t\t},\n\n\t\t/**\n\t\t * Generate an autocompletion popup entry template\n\t\t *\n\t\t * @param {string} value the value to match against the userData\n\t\t * @return {string}\n\t\t */\n\t\tgenSelectTemplate(value) {\n\t\t\t// The value returned by this function will replace the trigger '@'\n\t\t\t// and the search text, so when there is no match we simply return\n\t\t\t// '@' and the text.\n\t\t\tif (typeof value === 'undefined') {\n\t\t\t\treturn `${this.autocompleteTribute.current.collection.trigger}${this.autocompleteTribute.current.mentionText}`\n\t\t\t}\n\n\t\t\tconst data = this.userData[value]\n\n\t\t\t// Fallback to @mention in case no data matches\n\t\t\tif (!data) {\n\t\t\t\t// return @value if matches MENTION_SIMPLE, @\"value\" otherwise\n\t\t\t\treturn [' ', '/', ':'].every((char) => !value.includes(char))\n\t\t\t\t\t? `@${value}`\n\t\t\t\t\t: `@\"${value}\"`\n\t\t\t}\n\n\t\t\t// Return template and make sure we strip off new lines, tabs and consecutive whitespaces\n\t\t\treturn this.renderComponentHtml(data, NcMentionBubble)\n\t\t\t\t.replace(/[\\n\\t]/gmi, '')\n\t\t\t\t.replace(/>\\s+</g, '><')\n\t\t},\n\n\t\t/**\n\t\t * Render a component and return its html content\n\t\t *\n\t\t * @param {object} propsData the props to pass to the component\n\t\t * @param {object} component the component to render\n\t\t * @return {string} the rendered html\n\t\t */\n\t\trenderComponentHtml(propsData, component) {\n\t\t\tconst View = Vue.extend(component)\n\t\t\tconst Item = new View({\n\t\t\t\tpropsData,\n\t\t\t})\n\n\t\t\t// Prepare mountpoint\n\t\t\tconst wrapper = document.createElement('div')\n\t\t\tconst mount = document.createElement('div')\n\t\t\twrapper.style.display = 'none'\n\t\t\twrapper.appendChild(mount)\n\t\t\tdocument.body.appendChild(wrapper)\n\n\t\t\t// Mount and get raw html\n\t\t\tItem.$mount(mount)\n\t\t\tconst renderedHtml = wrapper.innerHTML\n\n\t\t\t// Destroy\n\t\t\tItem.$destroy()\n\t\t\twrapper.remove()\n\n\t\t\treturn renderedHtml\n\t\t},\n\t},\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-BCqXu_og.mjs","sources":["../../src/components/NcRichContenteditable/NcMentionBubble.vue","../../src/mixins/richEditor/index.js"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<span\n\t\tclass=\"mention-bubble\"\n\t\t:class=\"{ 'mention-bubble--primary': primary }\"\n\t\tcontenteditable=\"false\">\n\t\t<span class=\"mention-bubble__wrapper\">\n\t\t\t<span class=\"mention-bubble__content\">\n\t\t\t\t<!-- Avatar or icon -->\n\t\t\t\t<span\n\t\t\t\t\t:class=\"[icon, `mention-bubble__icon--${avatarUrl ? 'with-avatar' : ''}`]\"\n\t\t\t\t\t:style=\"avatarUrl ? { backgroundImage: `url(${avatarUrl})` } : null\"\n\t\t\t\t\tclass=\"mention-bubble__icon\" />\n\n\t\t\t\t<!-- Title -->\n\t\t\t\t<span role=\"heading\" class=\"mention-bubble__title\" :title=\"labelWithFallback\" />\n\t\t\t</span>\n\n\t\t\t<!-- Selectable text for copy/paste -->\n\t\t\t<span role=\"none\" class=\"mention-bubble__select\">{{ mentionText }}</span>\n\t\t</span>\n\t</span>\n</template>\n\n<script>\nimport { useIsDarkTheme } from '../../composables/useIsDarkTheme/index.ts'\nimport { getAvatarUrl } from '../../utils/getAvatarUrl.ts'\n\nexport default {\n\tname: 'NcMentionBubble',\n\n\t/* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * @deprecated Use `label` instead\n\t\t */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\ticonUrl: {\n\t\t\ttype: [String, null],\n\t\t\tdefault: null,\n\t\t},\n\n\t\tsource: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\tprimary: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst isDarkTheme = useIsDarkTheme()\n\n\t\treturn {\n\t\t\tisDarkTheme,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tavatarUrl() {\n\t\t\tif (this.iconUrl) {\n\t\t\t\treturn this.iconUrl\n\t\t\t}\n\n\t\t\treturn this.id && this.source === 'users'\n\t\t\t\t? getAvatarUrl(this.id, { isDarkTheme: this.isDarkTheme })\n\t\t\t\t: null\n\t\t},\n\n\t\tmentionText() {\n\t\t\treturn !this.id.includes(' ') && !this.id.includes('/')\n\t\t\t\t? `@${this.id}`\n\t\t\t\t: `@\"${this.id}\"`\n\t\t},\n\n\t\t// Fallback to title for compatibility\n\t\tlabelWithFallback() {\n\t\t\treturn this.label || this.title\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$bubble-height: 20px;\n$bubble-max-width: 150px;\n$bubble-padding: 2px;\n$bubble-avatar-size: $bubble-height - 2 * $bubble-padding;\n\n.mention-bubble {\n\t&--primary &__content {\n\t\tcolor: var(--color-primary-element-text);\n\t\tbackground-color: var(--color-primary-element);\n\t}\n\n\t&__wrapper {\n\t\tposition: relative;\n\t\tmax-width: $bubble-max-width;\n\t\t// Align with text\n\t\theight: $bubble-height - $bubble-padding;\n\t\tvertical-align: text-bottom;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t}\n\n\t&__content {\n\t\tdisplay: inline-flex;\n\t\toverflow: hidden;\n\t\talign-items: center;\n\t\tmax-width: 100%;\n\t\theight: $bubble-height;\n\t\t-webkit-user-select: none;\n\t\tuser-select: none;\n\t\tpadding-inline: $bubble-padding $bubble-padding * 3;\n\t\tborder-radius: math.div($bubble-height, 2);\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\n\t&__icon {\n\t\tposition: relative;\n\t\twidth: $bubble-avatar-size;\n\t\theight: $bubble-avatar-size;\n\t\tborder-radius: math.div($bubble-avatar-size, 2);\n\t\tbackground-color: var(--color-background-darker);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: center;\n\t\tbackground-size: $bubble-avatar-size - 2 * $bubble-padding;\n\n\t\t&--with-avatar {\n\t\t\tcolor: inherit;\n\t\t\tbackground-size: cover;\n\t\t}\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\tmargin-inline-start: $bubble-padding;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\t// Put title in ::before so it is not selectable\n\t\t&::before {\n\t\t\tcontent: attr(title);\n\t\t}\n\t}\n\n\t// Hide the mention id so it is selectable\n\t&__select {\n\t\tposition: absolute;\n\t\tz-index: -1;\n\t\tinset-inline-start: -100vw;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t\toverflow: hidden;\n\t}\n}\n\n</style>\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport escapeHtml from 'escape-html'\nimport stripTags from 'striptags'\nimport Vue from 'vue'\nimport NcMentionBubble from '../../components/NcRichContenteditable/NcMentionBubble.vue'\n\n// Referenced from public function getMentions(): https://github.com/nextcloud/server/blob/master/lib/private/Comments/Comment.php\n// Beginning or whitespace. Uses positive lookahead (to work on MobileSafari <16.4)\nconst MENTION_START = /(?=[a-z0-9_\\-@.'])\\B/.source\n// Capturing groups like: @user-id, @\"guest/abc16def\", @\"federated_user/user-id\", @\"user-id with space\"\nconst MENTION_SIMPLE = /(@[a-z0-9_\\-@.']+)/.source\nconst MENTION_GUEST = /@"(?:guest|email){1}\\/[a-f0-9]+"/.source\nconst MENTION_PREFIXED = /@"(?:federated_)?(?:group|team|user){1}\\/[a-z0-9_\\-@.' /:]+"/.source\nconst MENTION_WITH_SPACE = /@"[a-z0-9_\\-@.' ]+"/.source\nconst MENTION_COMPLEX = `(${MENTION_GUEST}|${MENTION_PREFIXED}|${MENTION_WITH_SPACE})`\n// Concatenated regular expressions\nexport const USERID_REGEX = new RegExp(`${MENTION_START}${MENTION_SIMPLE}`, 'gi')\nexport const USERID_REGEX_WITH_SPACE = new RegExp(`${MENTION_START}${MENTION_COMPLEX}`, 'gi')\n\nexport default {\n\tprops: {\n\t\tuserData: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Convert the value string to html for the inner content\n\t\t *\n\t\t * @param {string} value the content without html\n\t\t * @return {string} rendered html\n\t\t */\n\t\trenderContent(value) {\n\t\t\t// Sanitize the value prop\n\t\t\tconst sanitizedValue = escapeHtml(value)\n\n\t\t\t// Extract all the userIds\n\t\t\tconst splitValue = sanitizedValue.split(USERID_REGEX)\n\t\t\t\t.map((part) => part.split(USERID_REGEX_WITH_SPACE)).flat()\n\n\t\t\t// Replace userIds by html\n\t\t\treturn splitValue\n\t\t\t\t.map((part) => {\n\t\t\t\t\t// When splitting, the string is always putting the userIds\n\t\t\t\t\t// on the uneven indexes. We only want to generate the mentions html\n\t\t\t\t\tif (!part.startsWith('@')) {\n\t\t\t\t\t\treturn part\n\t\t\t\t\t}\n\n\t\t\t\t\t// Extracting the id, nuking the leading @ and all \"\n\t\t\t\t\tconst id = part.slice(1).replace(/"/gi, '')\n\t\t\t\t\t// Compiling template and prepend with the space we removed during the split\n\t\t\t\t\treturn this.genSelectTemplate(id)\n\t\t\t\t})\n\t\t\t\t.join('')\n\t\t\t\t.replace(/\\n/gmi, '<br>')\n\t\t\t\t.replace(/&/gmi, '&')\n\t\t},\n\n\t\t/**\n\t\t * Convert the innerHtml content to a string with mentions as text\n\t\t *\n\t\t * @param {string} content the content without html\n\t\t * @return {string}\n\t\t */\n\t\tparseContent(content) {\n\t\t\tlet text = content\n\t\t\t// Replace break lines with new lines\n\t\t\ttext = text.replace(/<br>/gmi, '\\n')\n\t\t\t// Replace some html special characters\n\t\t\ttext = text.replace(/ /gmi, ' ')\n\t\t\ttext = text.replace(/&/gmi, '&')\n\n\t\t\t// Convert the mentions to text only\n\t\t\t// first we replace divs with new lines\n\t\t\ttext = text.replace(/<\\/div>/gmi, '\\n')\n\t\t\t// then we remove all leftover html\n\t\t\ttext = stripTags(text, '<div>')\n\t\t\ttext = stripTags(text)\n\n\t\t\treturn text\n\t\t},\n\n\t\t/**\n\t\t * Generate an autocompletion popup entry template\n\t\t *\n\t\t * @param {string} value the value to match against the userData\n\t\t * @return {string}\n\t\t */\n\t\tgenSelectTemplate(value) {\n\t\t\t// The value returned by this function will replace the trigger '@'\n\t\t\t// and the search text, so when there is no match we simply return\n\t\t\t// '@' and the text.\n\t\t\tif (typeof value === 'undefined') {\n\t\t\t\treturn `${this.autocompleteTribute.current.collection.trigger}${this.autocompleteTribute.current.mentionText}`\n\t\t\t}\n\n\t\t\tconst data = this.userData[value]\n\n\t\t\t// Fallback to @mention in case no data matches\n\t\t\tif (!data) {\n\t\t\t\t// return @value if matches MENTION_SIMPLE, @\"value\" otherwise\n\t\t\t\treturn [' ', '/', ':'].every((char) => !value.includes(char))\n\t\t\t\t\t? `@${value}`\n\t\t\t\t\t: `@\"${value}\"`\n\t\t\t}\n\n\t\t\t// Return template and make sure we strip off new lines, tabs and consecutive whitespaces\n\t\t\treturn this.renderComponentHtml(data, NcMentionBubble)\n\t\t\t\t.replace(/[\\n\\t]/gmi, '')\n\t\t\t\t.replace(/>\\s+</g, '><')\n\t\t},\n\n\t\t/**\n\t\t * Render a component and return its html content\n\t\t *\n\t\t * @param {object} propsData the props to pass to the component\n\t\t * @param {object} component the component to render\n\t\t * @return {string} the rendered html\n\t\t */\n\t\trenderComponentHtml(propsData, component) {\n\t\t\tconst View = Vue.extend(component)\n\t\t\tconst Item = new View({\n\t\t\t\tpropsData,\n\t\t\t})\n\n\t\t\t// Prepare mountpoint\n\t\t\tconst wrapper = document.createElement('div')\n\t\t\tconst mount = document.createElement('div')\n\t\t\twrapper.style.display = 'none'\n\t\t\twrapper.appendChild(mount)\n\t\t\tdocument.body.appendChild(wrapper)\n\n\t\t\t// Mount and get raw html\n\t\t\tItem.$mount(mount)\n\t\t\tconst renderedHtml = wrapper.innerHTML\n\n\t\t\t// Destroy\n\t\t\tItem.$destroy()\n\t\t\twrapper.remove()\n\n\t\t\treturn renderedHtml\n\t\t},\n\t},\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -4,7 +4,7 @@ const escapeHtml = require("escape-html");
|
|
|
4
4
|
const stripTags = require("striptags");
|
|
5
5
|
const Vue = require("vue");
|
|
6
6
|
const Composables_useIsDarkTheme = require("../Composables/useIsDarkTheme.cjs");
|
|
7
|
-
const getAvatarUrl = require("./getAvatarUrl-
|
|
7
|
+
const getAvatarUrl = require("./getAvatarUrl-4HsuXa3l.cjs");
|
|
8
8
|
;/* empty css */
|
|
9
9
|
const _pluginVue2_normalizer = require("./_plugin-vue2_normalizer-V0q-tHlQ.cjs");
|
|
10
10
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
@@ -179,4 +179,4 @@ exports.NcMentionBubble = NcMentionBubble;
|
|
|
179
179
|
exports.USERID_REGEX = USERID_REGEX;
|
|
180
180
|
exports.USERID_REGEX_WITH_SPACE = USERID_REGEX_WITH_SPACE;
|
|
181
181
|
exports.richEditor = richEditor;
|
|
182
|
-
//# sourceMappingURL=index-
|
|
182
|
+
//# sourceMappingURL=index-phHwkniW.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-CgkN1xho.cjs","sources":["../../src/components/NcRichContenteditable/NcMentionBubble.vue","../../src/mixins/richEditor/index.js"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<span\n\t\tclass=\"mention-bubble\"\n\t\t:class=\"{ 'mention-bubble--primary': primary }\"\n\t\tcontenteditable=\"false\">\n\t\t<span class=\"mention-bubble__wrapper\">\n\t\t\t<span class=\"mention-bubble__content\">\n\t\t\t\t<!-- Avatar or icon -->\n\t\t\t\t<span\n\t\t\t\t\t:class=\"[icon, `mention-bubble__icon--${avatarUrl ? 'with-avatar' : ''}`]\"\n\t\t\t\t\t:style=\"avatarUrl ? { backgroundImage: `url(${avatarUrl})` } : null\"\n\t\t\t\t\tclass=\"mention-bubble__icon\" />\n\n\t\t\t\t<!-- Title -->\n\t\t\t\t<span role=\"heading\" class=\"mention-bubble__title\" :title=\"labelWithFallback\" />\n\t\t\t</span>\n\n\t\t\t<!-- Selectable text for copy/paste -->\n\t\t\t<span role=\"none\" class=\"mention-bubble__select\">{{ mentionText }}</span>\n\t\t</span>\n\t</span>\n</template>\n\n<script>\nimport { useIsDarkTheme } from '../../composables/useIsDarkTheme/index.ts'\nimport { getAvatarUrl } from '../../utils/getAvatarUrl.ts'\n\nexport default {\n\tname: 'NcMentionBubble',\n\n\t/* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * @deprecated Use `label` instead\n\t\t */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\ticonUrl: {\n\t\t\ttype: [String, null],\n\t\t\tdefault: null,\n\t\t},\n\n\t\tsource: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\tprimary: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst isDarkTheme = useIsDarkTheme()\n\n\t\treturn {\n\t\t\tisDarkTheme,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tavatarUrl() {\n\t\t\tif (this.iconUrl) {\n\t\t\t\treturn this.iconUrl\n\t\t\t}\n\n\t\t\treturn this.id && this.source === 'users'\n\t\t\t\t? getAvatarUrl(this.id, { isDarkTheme: this.isDarkTheme })\n\t\t\t\t: null\n\t\t},\n\n\t\tmentionText() {\n\t\t\treturn !this.id.includes(' ') && !this.id.includes('/')\n\t\t\t\t? `@${this.id}`\n\t\t\t\t: `@\"${this.id}\"`\n\t\t},\n\n\t\t// Fallback to title for compatibility\n\t\tlabelWithFallback() {\n\t\t\treturn this.label || this.title\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$bubble-height: 20px;\n$bubble-max-width: 150px;\n$bubble-padding: 2px;\n$bubble-avatar-size: $bubble-height - 2 * $bubble-padding;\n\n.mention-bubble {\n\t&--primary &__content {\n\t\tcolor: var(--color-primary-element-text);\n\t\tbackground-color: var(--color-primary-element);\n\t}\n\n\t&__wrapper {\n\t\tposition: relative;\n\t\tmax-width: $bubble-max-width;\n\t\t// Align with text\n\t\theight: $bubble-height - $bubble-padding;\n\t\tvertical-align: text-bottom;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t}\n\n\t&__content {\n\t\tdisplay: inline-flex;\n\t\toverflow: hidden;\n\t\talign-items: center;\n\t\tmax-width: 100%;\n\t\theight: $bubble-height;\n\t\t-webkit-user-select: none;\n\t\tuser-select: none;\n\t\tpadding-inline: $bubble-padding $bubble-padding * 3;\n\t\tborder-radius: math.div($bubble-height, 2);\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\n\t&__icon {\n\t\tposition: relative;\n\t\twidth: $bubble-avatar-size;\n\t\theight: $bubble-avatar-size;\n\t\tborder-radius: math.div($bubble-avatar-size, 2);\n\t\tbackground-color: var(--color-background-darker);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: center;\n\t\tbackground-size: $bubble-avatar-size - 2 * $bubble-padding;\n\n\t\t&--with-avatar {\n\t\t\tcolor: inherit;\n\t\t\tbackground-size: cover;\n\t\t}\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\tmargin-inline-start: $bubble-padding;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\t// Put title in ::before so it is not selectable\n\t\t&::before {\n\t\t\tcontent: attr(title);\n\t\t}\n\t}\n\n\t// Hide the mention id so it is selectable\n\t&__select {\n\t\tposition: absolute;\n\t\tz-index: -1;\n\t\tinset-inline-start: -100vw;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t\toverflow: hidden;\n\t}\n}\n\n</style>\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport escapeHtml from 'escape-html'\nimport stripTags from 'striptags'\nimport Vue from 'vue'\nimport NcMentionBubble from '../../components/NcRichContenteditable/NcMentionBubble.vue'\n\n// Referenced from public function getMentions(): https://github.com/nextcloud/server/blob/master/lib/private/Comments/Comment.php\n// Beginning or whitespace. Uses positive lookahead (to work on MobileSafari <16.4)\nconst MENTION_START = /(?=[a-z0-9_\\-@.'])\\B/.source\n// Capturing groups like: @user-id, @\"guest/abc16def\", @\"federated_user/user-id\", @\"user-id with space\"\nconst MENTION_SIMPLE = /(@[a-z0-9_\\-@.']+)/.source\nconst MENTION_GUEST = /@"(?:guest|email){1}\\/[a-f0-9]+"/.source\nconst MENTION_PREFIXED = /@"(?:federated_)?(?:group|team|user){1}\\/[a-z0-9_\\-@.' /:]+"/.source\nconst MENTION_WITH_SPACE = /@"[a-z0-9_\\-@.' ]+"/.source\nconst MENTION_COMPLEX = `(${MENTION_GUEST}|${MENTION_PREFIXED}|${MENTION_WITH_SPACE})`\n// Concatenated regular expressions\nexport const USERID_REGEX = new RegExp(`${MENTION_START}${MENTION_SIMPLE}`, 'gi')\nexport const USERID_REGEX_WITH_SPACE = new RegExp(`${MENTION_START}${MENTION_COMPLEX}`, 'gi')\n\nexport default {\n\tprops: {\n\t\tuserData: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Convert the value string to html for the inner content\n\t\t *\n\t\t * @param {string} value the content without html\n\t\t * @return {string} rendered html\n\t\t */\n\t\trenderContent(value) {\n\t\t\t// Sanitize the value prop\n\t\t\tconst sanitizedValue = escapeHtml(value)\n\n\t\t\t// Extract all the userIds\n\t\t\tconst splitValue = sanitizedValue.split(USERID_REGEX)\n\t\t\t\t.map((part) => part.split(USERID_REGEX_WITH_SPACE)).flat()\n\n\t\t\t// Replace userIds by html\n\t\t\treturn splitValue\n\t\t\t\t.map((part) => {\n\t\t\t\t\t// When splitting, the string is always putting the userIds\n\t\t\t\t\t// on the uneven indexes. We only want to generate the mentions html\n\t\t\t\t\tif (!part.startsWith('@')) {\n\t\t\t\t\t\treturn part\n\t\t\t\t\t}\n\n\t\t\t\t\t// Extracting the id, nuking the leading @ and all \"\n\t\t\t\t\tconst id = part.slice(1).replace(/"/gi, '')\n\t\t\t\t\t// Compiling template and prepend with the space we removed during the split\n\t\t\t\t\treturn this.genSelectTemplate(id)\n\t\t\t\t})\n\t\t\t\t.join('')\n\t\t\t\t.replace(/\\n/gmi, '<br>')\n\t\t\t\t.replace(/&/gmi, '&')\n\t\t},\n\n\t\t/**\n\t\t * Convert the innerHtml content to a string with mentions as text\n\t\t *\n\t\t * @param {string} content the content without html\n\t\t * @return {string}\n\t\t */\n\t\tparseContent(content) {\n\t\t\tlet text = content\n\t\t\t// Replace break lines with new lines\n\t\t\ttext = text.replace(/<br>/gmi, '\\n')\n\t\t\t// Replace some html special characters\n\t\t\ttext = text.replace(/ /gmi, ' ')\n\t\t\ttext = text.replace(/&/gmi, '&')\n\n\t\t\t// Convert the mentions to text only\n\t\t\t// first we replace divs with new lines\n\t\t\ttext = text.replace(/<\\/div>/gmi, '\\n')\n\t\t\t// then we remove all leftover html\n\t\t\ttext = stripTags(text, '<div>')\n\t\t\ttext = stripTags(text)\n\n\t\t\treturn text\n\t\t},\n\n\t\t/**\n\t\t * Generate an autocompletion popup entry template\n\t\t *\n\t\t * @param {string} value the value to match against the userData\n\t\t * @return {string}\n\t\t */\n\t\tgenSelectTemplate(value) {\n\t\t\t// The value returned by this function will replace the trigger '@'\n\t\t\t// and the search text, so when there is no match we simply return\n\t\t\t// '@' and the text.\n\t\t\tif (typeof value === 'undefined') {\n\t\t\t\treturn `${this.autocompleteTribute.current.collection.trigger}${this.autocompleteTribute.current.mentionText}`\n\t\t\t}\n\n\t\t\tconst data = this.userData[value]\n\n\t\t\t// Fallback to @mention in case no data matches\n\t\t\tif (!data) {\n\t\t\t\t// return @value if matches MENTION_SIMPLE, @\"value\" otherwise\n\t\t\t\treturn [' ', '/', ':'].every((char) => !value.includes(char))\n\t\t\t\t\t? `@${value}`\n\t\t\t\t\t: `@\"${value}\"`\n\t\t\t}\n\n\t\t\t// Return template and make sure we strip off new lines, tabs and consecutive whitespaces\n\t\t\treturn this.renderComponentHtml(data, NcMentionBubble)\n\t\t\t\t.replace(/[\\n\\t]/gmi, '')\n\t\t\t\t.replace(/>\\s+</g, '><')\n\t\t},\n\n\t\t/**\n\t\t * Render a component and return its html content\n\t\t *\n\t\t * @param {object} propsData the props to pass to the component\n\t\t * @param {object} component the component to render\n\t\t * @return {string} the rendered html\n\t\t */\n\t\trenderComponentHtml(propsData, component) {\n\t\t\tconst View = Vue.extend(component)\n\t\t\tconst Item = new View({\n\t\t\t\tpropsData,\n\t\t\t})\n\n\t\t\t// Prepare mountpoint\n\t\t\tconst wrapper = document.createElement('div')\n\t\t\tconst mount = document.createElement('div')\n\t\t\twrapper.style.display = 'none'\n\t\t\twrapper.appendChild(mount)\n\t\t\tdocument.body.appendChild(wrapper)\n\n\t\t\t// Mount and get raw html\n\t\t\tItem.$mount(mount)\n\t\t\tconst renderedHtml = wrapper.innerHTML\n\n\t\t\t// Destroy\n\t\t\tItem.$destroy()\n\t\t\twrapper.remove()\n\n\t\t\treturn renderedHtml\n\t\t},\n\t},\n}\n"],"names":["useIsDarkTheme","getAvatarUrl","escapeHtml","stripTags","Vue"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index-phHwkniW.cjs","sources":["../../src/components/NcRichContenteditable/NcMentionBubble.vue","../../src/mixins/richEditor/index.js"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<template>\n\t<span\n\t\tclass=\"mention-bubble\"\n\t\t:class=\"{ 'mention-bubble--primary': primary }\"\n\t\tcontenteditable=\"false\">\n\t\t<span class=\"mention-bubble__wrapper\">\n\t\t\t<span class=\"mention-bubble__content\">\n\t\t\t\t<!-- Avatar or icon -->\n\t\t\t\t<span\n\t\t\t\t\t:class=\"[icon, `mention-bubble__icon--${avatarUrl ? 'with-avatar' : ''}`]\"\n\t\t\t\t\t:style=\"avatarUrl ? { backgroundImage: `url(${avatarUrl})` } : null\"\n\t\t\t\t\tclass=\"mention-bubble__icon\" />\n\n\t\t\t\t<!-- Title -->\n\t\t\t\t<span role=\"heading\" class=\"mention-bubble__title\" :title=\"labelWithFallback\" />\n\t\t\t</span>\n\n\t\t\t<!-- Selectable text for copy/paste -->\n\t\t\t<span role=\"none\" class=\"mention-bubble__select\">{{ mentionText }}</span>\n\t\t</span>\n\t</span>\n</template>\n\n<script>\nimport { useIsDarkTheme } from '../../composables/useIsDarkTheme/index.ts'\nimport { getAvatarUrl } from '../../utils/getAvatarUrl.ts'\n\nexport default {\n\tname: 'NcMentionBubble',\n\n\t/* eslint vue/require-prop-comment: warn -- TODO: Add a proper doc block about what this props do */\n\tprops: {\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * @deprecated Use `label` instead\n\t\t */\n\t\ttitle: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\ticonUrl: {\n\t\t\ttype: [String, null],\n\t\t\tdefault: null,\n\t\t},\n\n\t\tsource: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\tprimary: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tsetup() {\n\t\tconst isDarkTheme = useIsDarkTheme()\n\n\t\treturn {\n\t\t\tisDarkTheme,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tavatarUrl() {\n\t\t\tif (this.iconUrl) {\n\t\t\t\treturn this.iconUrl\n\t\t\t}\n\n\t\t\treturn this.id && this.source === 'users'\n\t\t\t\t? getAvatarUrl(this.id, { isDarkTheme: this.isDarkTheme })\n\t\t\t\t: null\n\t\t},\n\n\t\tmentionText() {\n\t\t\treturn !this.id.includes(' ') && !this.id.includes('/')\n\t\t\t\t? `@${this.id}`\n\t\t\t\t: `@\"${this.id}\"`\n\t\t},\n\n\t\t// Fallback to title for compatibility\n\t\tlabelWithFallback() {\n\t\t\treturn this.label || this.title\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$bubble-height: 20px;\n$bubble-max-width: 150px;\n$bubble-padding: 2px;\n$bubble-avatar-size: $bubble-height - 2 * $bubble-padding;\n\n.mention-bubble {\n\t&--primary &__content {\n\t\tcolor: var(--color-primary-element-text);\n\t\tbackground-color: var(--color-primary-element);\n\t}\n\n\t&__wrapper {\n\t\tposition: relative;\n\t\tmax-width: $bubble-max-width;\n\t\t// Align with text\n\t\theight: $bubble-height - $bubble-padding;\n\t\tvertical-align: text-bottom;\n\t\tdisplay: inline-flex;\n\t\talign-items: center;\n\t}\n\n\t&__content {\n\t\tdisplay: inline-flex;\n\t\toverflow: hidden;\n\t\talign-items: center;\n\t\tmax-width: 100%;\n\t\theight: $bubble-height;\n\t\t-webkit-user-select: none;\n\t\tuser-select: none;\n\t\tpadding-inline: $bubble-padding $bubble-padding * 3;\n\t\tborder-radius: math.div($bubble-height, 2);\n\t\tbackground-color: var(--color-background-dark);\n\t}\n\n\t&__icon {\n\t\tposition: relative;\n\t\twidth: $bubble-avatar-size;\n\t\theight: $bubble-avatar-size;\n\t\tborder-radius: math.div($bubble-avatar-size, 2);\n\t\tbackground-color: var(--color-background-darker);\n\t\tbackground-repeat: no-repeat;\n\t\tbackground-position: center;\n\t\tbackground-size: $bubble-avatar-size - 2 * $bubble-padding;\n\n\t\t&--with-avatar {\n\t\t\tcolor: inherit;\n\t\t\tbackground-size: cover;\n\t\t}\n\t}\n\n\t&__title {\n\t\toverflow: hidden;\n\t\tmargin-inline-start: $bubble-padding;\n\t\twhite-space: nowrap;\n\t\ttext-overflow: ellipsis;\n\t\t// Put title in ::before so it is not selectable\n\t\t&::before {\n\t\t\tcontent: attr(title);\n\t\t}\n\t}\n\n\t// Hide the mention id so it is selectable\n\t&__select {\n\t\tposition: absolute;\n\t\tz-index: -1;\n\t\tinset-inline-start: -100vw;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t\toverflow: hidden;\n\t}\n}\n\n</style>\n","/**\n * SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport escapeHtml from 'escape-html'\nimport stripTags from 'striptags'\nimport Vue from 'vue'\nimport NcMentionBubble from '../../components/NcRichContenteditable/NcMentionBubble.vue'\n\n// Referenced from public function getMentions(): https://github.com/nextcloud/server/blob/master/lib/private/Comments/Comment.php\n// Beginning or whitespace. Uses positive lookahead (to work on MobileSafari <16.4)\nconst MENTION_START = /(?=[a-z0-9_\\-@.'])\\B/.source\n// Capturing groups like: @user-id, @\"guest/abc16def\", @\"federated_user/user-id\", @\"user-id with space\"\nconst MENTION_SIMPLE = /(@[a-z0-9_\\-@.']+)/.source\nconst MENTION_GUEST = /@"(?:guest|email){1}\\/[a-f0-9]+"/.source\nconst MENTION_PREFIXED = /@"(?:federated_)?(?:group|team|user){1}\\/[a-z0-9_\\-@.' /:]+"/.source\nconst MENTION_WITH_SPACE = /@"[a-z0-9_\\-@.' ]+"/.source\nconst MENTION_COMPLEX = `(${MENTION_GUEST}|${MENTION_PREFIXED}|${MENTION_WITH_SPACE})`\n// Concatenated regular expressions\nexport const USERID_REGEX = new RegExp(`${MENTION_START}${MENTION_SIMPLE}`, 'gi')\nexport const USERID_REGEX_WITH_SPACE = new RegExp(`${MENTION_START}${MENTION_COMPLEX}`, 'gi')\n\nexport default {\n\tprops: {\n\t\tuserData: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Convert the value string to html for the inner content\n\t\t *\n\t\t * @param {string} value the content without html\n\t\t * @return {string} rendered html\n\t\t */\n\t\trenderContent(value) {\n\t\t\t// Sanitize the value prop\n\t\t\tconst sanitizedValue = escapeHtml(value)\n\n\t\t\t// Extract all the userIds\n\t\t\tconst splitValue = sanitizedValue.split(USERID_REGEX)\n\t\t\t\t.map((part) => part.split(USERID_REGEX_WITH_SPACE)).flat()\n\n\t\t\t// Replace userIds by html\n\t\t\treturn splitValue\n\t\t\t\t.map((part) => {\n\t\t\t\t\t// When splitting, the string is always putting the userIds\n\t\t\t\t\t// on the uneven indexes. We only want to generate the mentions html\n\t\t\t\t\tif (!part.startsWith('@')) {\n\t\t\t\t\t\treturn part\n\t\t\t\t\t}\n\n\t\t\t\t\t// Extracting the id, nuking the leading @ and all \"\n\t\t\t\t\tconst id = part.slice(1).replace(/"/gi, '')\n\t\t\t\t\t// Compiling template and prepend with the space we removed during the split\n\t\t\t\t\treturn this.genSelectTemplate(id)\n\t\t\t\t})\n\t\t\t\t.join('')\n\t\t\t\t.replace(/\\n/gmi, '<br>')\n\t\t\t\t.replace(/&/gmi, '&')\n\t\t},\n\n\t\t/**\n\t\t * Convert the innerHtml content to a string with mentions as text\n\t\t *\n\t\t * @param {string} content the content without html\n\t\t * @return {string}\n\t\t */\n\t\tparseContent(content) {\n\t\t\tlet text = content\n\t\t\t// Replace break lines with new lines\n\t\t\ttext = text.replace(/<br>/gmi, '\\n')\n\t\t\t// Replace some html special characters\n\t\t\ttext = text.replace(/ /gmi, ' ')\n\t\t\ttext = text.replace(/&/gmi, '&')\n\n\t\t\t// Convert the mentions to text only\n\t\t\t// first we replace divs with new lines\n\t\t\ttext = text.replace(/<\\/div>/gmi, '\\n')\n\t\t\t// then we remove all leftover html\n\t\t\ttext = stripTags(text, '<div>')\n\t\t\ttext = stripTags(text)\n\n\t\t\treturn text\n\t\t},\n\n\t\t/**\n\t\t * Generate an autocompletion popup entry template\n\t\t *\n\t\t * @param {string} value the value to match against the userData\n\t\t * @return {string}\n\t\t */\n\t\tgenSelectTemplate(value) {\n\t\t\t// The value returned by this function will replace the trigger '@'\n\t\t\t// and the search text, so when there is no match we simply return\n\t\t\t// '@' and the text.\n\t\t\tif (typeof value === 'undefined') {\n\t\t\t\treturn `${this.autocompleteTribute.current.collection.trigger}${this.autocompleteTribute.current.mentionText}`\n\t\t\t}\n\n\t\t\tconst data = this.userData[value]\n\n\t\t\t// Fallback to @mention in case no data matches\n\t\t\tif (!data) {\n\t\t\t\t// return @value if matches MENTION_SIMPLE, @\"value\" otherwise\n\t\t\t\treturn [' ', '/', ':'].every((char) => !value.includes(char))\n\t\t\t\t\t? `@${value}`\n\t\t\t\t\t: `@\"${value}\"`\n\t\t\t}\n\n\t\t\t// Return template and make sure we strip off new lines, tabs and consecutive whitespaces\n\t\t\treturn this.renderComponentHtml(data, NcMentionBubble)\n\t\t\t\t.replace(/[\\n\\t]/gmi, '')\n\t\t\t\t.replace(/>\\s+</g, '><')\n\t\t},\n\n\t\t/**\n\t\t * Render a component and return its html content\n\t\t *\n\t\t * @param {object} propsData the props to pass to the component\n\t\t * @param {object} component the component to render\n\t\t * @return {string} the rendered html\n\t\t */\n\t\trenderComponentHtml(propsData, component) {\n\t\t\tconst View = Vue.extend(component)\n\t\t\tconst Item = new View({\n\t\t\t\tpropsData,\n\t\t\t})\n\n\t\t\t// Prepare mountpoint\n\t\t\tconst wrapper = document.createElement('div')\n\t\t\tconst mount = document.createElement('div')\n\t\t\twrapper.style.display = 'none'\n\t\t\twrapper.appendChild(mount)\n\t\t\tdocument.body.appendChild(wrapper)\n\n\t\t\t// Mount and get raw html\n\t\t\tItem.$mount(mount)\n\t\t\tconst renderedHtml = wrapper.innerHTML\n\n\t\t\t// Destroy\n\t\t\tItem.$destroy()\n\t\t\twrapper.remove()\n\n\t\t\treturn renderedHtml\n\t\t},\n\t},\n}\n"],"names":["useIsDarkTheme","getAvatarUrl","escapeHtml","stripTags","Vue"],"mappings":"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"}
|
|
@@ -13,14 +13,14 @@ const _l10n = require("./_l10n-skrZri3h.cjs");
|
|
|
13
13
|
const logger = require("./logger-3HuiEIF6.cjs");
|
|
14
14
|
const Components_NcEmptyContent = require("../Components/NcEmptyContent.cjs");
|
|
15
15
|
const Components_NcHighlight = require("./index-Dr9k4hIP.cjs");
|
|
16
|
-
const NcSelect = require("./NcSelect-
|
|
16
|
+
const NcSelect = require("./NcSelect-DVXAVRT_.cjs");
|
|
17
17
|
const core = require("@vueuse/core");
|
|
18
18
|
const vueRouter = require("vue-router");
|
|
19
|
-
const NcButton = require("./NcButton-
|
|
20
|
-
const autolink = require("./autolink-
|
|
19
|
+
const NcButton = require("./NcButton-DaWD-X8V.cjs");
|
|
20
|
+
const autolink = require("./autolink-VQMuzjxl.cjs");
|
|
21
21
|
const Components_NcLoadingIcon = require("../Components/NcLoadingIcon.cjs");
|
|
22
|
-
const NcTextField = require("./NcTextField-
|
|
23
|
-
const NcActions = require("./NcActions-
|
|
22
|
+
const NcTextField = require("./NcTextField-B2tcddKo.cjs");
|
|
23
|
+
const NcActions = require("./NcActions-0fAYsGbh.cjs");
|
|
24
24
|
const Components_NcModal = require("../Components/NcModal.cjs");
|
|
25
25
|
const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
|
|
26
26
|
const Vue__default = /* @__PURE__ */ _interopDefault(Vue);
|
|
@@ -1085,4 +1085,4 @@ exports.getProvider = getProvider;
|
|
|
1085
1085
|
exports.getProviders = getProviders;
|
|
1086
1086
|
exports.searchProvider = searchProvider;
|
|
1087
1087
|
exports.sortProviders = sortProviders;
|
|
1088
|
-
//# sourceMappingURL=referencePickerModal-
|
|
1088
|
+
//# sourceMappingURL=referencePickerModal-BOCqzVJk.cjs.map
|