@nextcloud/vue 8.36.0 → 8.37.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 +18 -0
- 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/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/NcAppSettingsSectionShortcuts.cjs +1 -1
- package/dist/Components/NcAppSettingsSectionShortcuts.mjs +1 -1
- package/dist/Components/NcAppSettingsShortcutsSection.cjs +1 -1
- package/dist/Components/NcAppSettingsShortcutsSection.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 +4 -4
- package/dist/Components/NcDateTimePicker.mjs +4 -4
- package/dist/Components/NcDateTimePickerNative.cjs +1 -1
- package/dist/Components/NcDateTimePickerNative.mjs +1 -1
- package/dist/Components/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 +4 -0
- package/dist/Components/NcFilePicker.cjs.map +1 -0
- package/dist/Components/NcFilePicker.mjs +5 -0
- package/dist/Components/NcFilePicker.mjs.map +1 -0
- package/dist/Components/NcFormBoxCopyButton.cjs +1 -1
- package/dist/Components/NcFormBoxCopyButton.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/NcHotkey.cjs +1 -1
- package/dist/Components/NcHotkey.mjs +1 -1
- package/dist/Components/NcHotkeyList.cjs +1 -1
- package/dist/Components/NcHotkeyList.mjs +1 -1
- package/dist/Components/NcInputField.cjs +1 -1
- package/dist/Components/NcInputField.mjs +1 -1
- package/dist/Components/NcKbd.cjs +1 -1
- package/dist/Components/NcKbd.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 +36 -10
- package/dist/Components/NcModal.cjs.map +1 -1
- package/dist/Components/NcModal.mjs +36 -10
- package/dist/Components/NcModal.mjs.map +1 -1
- 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 +1 -1
- package/dist/Components/NcRichContenteditable.mjs +1 -1
- 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/NcSettingsInputText.cjs +1 -1
- package/dist/Components/NcSettingsInputText.mjs +1 -1
- package/dist/Components/NcSettingsSection.cjs +1 -1
- package/dist/Components/NcSettingsSection.mjs +1 -1
- package/dist/Components/NcSettingsSelectGroup.cjs +1 -1
- package/dist/Components/NcSettingsSelectGroup.mjs +1 -1
- package/dist/Components/NcTextArea.cjs +1 -1
- package/dist/Components/NcTextArea.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/Components/NcUserStatusIcon.cjs +1 -1
- package/dist/Components/NcUserStatusIcon.mjs +1 -1
- package/dist/Composables/useFormatDateTime.cjs +1 -1
- package/dist/Composables/useFormatDateTime.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/Functions/usernameToColor.cjs +1 -1
- package/dist/Functions/usernameToColor.mjs +1 -1
- package/dist/assets/{NcAppContent-COKKdvdZ.css → NcAppContent-CKJUs-ZZ.css} +22 -19
- package/dist/assets/{NcButton-n-KI8Bqb.css → NcButton-8Y8d_1Z_.css} +46 -46
- package/dist/assets/{NcContent-IIXgAj_u.css → NcContent-a67pCVHO.css} +10 -10
- package/dist/assets/{NcDateTimePicker-BU_TdhUm.css → NcDateTimePicker-BzP7Sn12.css} +8 -8
- package/dist/assets/NcFilePicker-BokX813z.css +6 -0
- package/dist/assets/{NcInputField-CJzLu0_0.css → NcInputField-Cc-l-KGd.css} +46 -46
- package/dist/assets/{NcModal-CfHpabcF.css → NcModal-wPeHZkqH.css} +66 -67
- package/dist/assets/{NcRichContenteditable-Cm0fohqz.css → NcRichContenteditable-3tL9zHn2.css} +11 -11
- package/dist/assets/{NcRichText-C72XMOoz.css → NcRichText-CAhzDSty.css} +91 -91
- package/dist/assets/{NcTextArea-BNxd9_FK.css → NcTextArea-BtG5_qHD.css} +30 -28
- package/dist/chunks/{NcActionButtonGroup-QVUAMbKq.cjs → NcActionButtonGroup-CpZDTAQo.cjs} +2 -2
- package/dist/chunks/{NcActionButtonGroup-QVUAMbKq.cjs.map → NcActionButtonGroup-CpZDTAQo.cjs.map} +1 -1
- package/dist/chunks/{NcActionButtonGroup-BxvJmEwM.mjs → NcActionButtonGroup-eZxqibUd.mjs} +2 -2
- package/dist/chunks/{NcActionButtonGroup-BxvJmEwM.mjs.map → NcActionButtonGroup-eZxqibUd.mjs.map} +1 -1
- package/dist/chunks/{NcActionInput-BLfZBCFj.mjs → NcActionInput-UPwE2Dky.mjs} +5 -5
- package/dist/chunks/{NcActionInput-BLfZBCFj.mjs.map → NcActionInput-UPwE2Dky.mjs.map} +1 -1
- package/dist/chunks/{NcActionInput-CuhJdyHk.cjs → NcActionInput-eAmBylEO.cjs} +5 -5
- package/dist/chunks/{NcActionInput-CuhJdyHk.cjs.map → NcActionInput-eAmBylEO.cjs.map} +1 -1
- package/dist/chunks/{NcActions-RVSfZOYh.cjs → NcActions-BSDvtMJD.cjs} +3 -3
- package/dist/chunks/{NcActions-RVSfZOYh.cjs.map → NcActions-BSDvtMJD.cjs.map} +1 -1
- package/dist/chunks/{NcActions-B7LKaVy0.mjs → NcActions-BcLis_nr.mjs} +3 -3
- package/dist/chunks/{NcActions-B7LKaVy0.mjs.map → NcActions-BcLis_nr.mjs.map} +1 -1
- package/dist/chunks/{NcAppContent-BQbYzcUh.mjs → NcAppContent-CeVqX0gV.mjs} +6 -6
- package/dist/chunks/NcAppContent-CeVqX0gV.mjs.map +1 -0
- package/dist/chunks/{NcAppContent-iiQ0CC8-.cjs → NcAppContent-DLGtJosF.cjs} +6 -6
- package/dist/chunks/NcAppContent-DLGtJosF.cjs.map +1 -0
- package/dist/chunks/{NcAppNavigation-Cu8LpQSI.mjs → NcAppNavigation-BfzJA6cb.mjs} +2 -2
- package/dist/chunks/{NcAppNavigation-Cu8LpQSI.mjs.map → NcAppNavigation-BfzJA6cb.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigation-DjeB8XMY.cjs → NcAppNavigation-D2Ds_2Dm.cjs} +2 -2
- package/dist/chunks/{NcAppNavigation-DjeB8XMY.cjs.map → NcAppNavigation-D2Ds_2Dm.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationCaption-CQaKs-Zf.mjs → NcAppNavigationCaption-3YHrxAYS.mjs} +2 -2
- package/dist/chunks/{NcAppNavigationCaption-CQaKs-Zf.mjs.map → NcAppNavigationCaption-3YHrxAYS.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationCaption-BrwsCX28.cjs → NcAppNavigationCaption-BDSDmQuu.cjs} +2 -2
- package/dist/chunks/{NcAppNavigationCaption-BrwsCX28.cjs.map → NcAppNavigationCaption-BDSDmQuu.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationItem-ryrQ6jep.mjs → NcAppNavigationItem-D30ztZfZ.mjs} +6 -6
- package/dist/chunks/{NcAppNavigationItem-ryrQ6jep.mjs.map → NcAppNavigationItem-D30ztZfZ.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationItem-CyQBEt9w.cjs → NcAppNavigationItem-Dc5Vdhb1.cjs} +6 -6
- package/dist/chunks/{NcAppNavigationItem-CyQBEt9w.cjs.map → NcAppNavigationItem-Dc5Vdhb1.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationNew-t3Rkrwjh.mjs → NcAppNavigationNew-Ce_TheyK.mjs} +2 -2
- package/dist/chunks/{NcAppNavigationNew-t3Rkrwjh.mjs.map → NcAppNavigationNew-Ce_TheyK.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationNew-ByTNXL-2.cjs → NcAppNavigationNew-D7FwWc52.cjs} +2 -2
- package/dist/chunks/{NcAppNavigationNew-ByTNXL-2.cjs.map → NcAppNavigationNew-D7FwWc52.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationNewItem-_8ozWEv3.mjs → NcAppNavigationNewItem-BskLwwWH.mjs} +2 -2
- package/dist/chunks/{NcAppNavigationNewItem-_8ozWEv3.mjs.map → NcAppNavigationNewItem-BskLwwWH.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationNewItem-C_0savRU.cjs → NcAppNavigationNewItem-Cjody3t9.cjs} +2 -2
- package/dist/chunks/{NcAppNavigationNewItem-C_0savRU.cjs.map → NcAppNavigationNewItem-Cjody3t9.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationSearch-CSih_quP.mjs → NcAppNavigationSearch-CkcBGG0H.mjs} +4 -4
- package/dist/chunks/{NcAppNavigationSearch-CSih_quP.mjs.map → NcAppNavigationSearch-CkcBGG0H.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationSearch-CqJql2d9.cjs → NcAppNavigationSearch-CwO9XhWM.cjs} +4 -4
- package/dist/chunks/{NcAppNavigationSearch-CqJql2d9.cjs.map → NcAppNavigationSearch-CwO9XhWM.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationSettings-Eseo9MMQ.mjs → NcAppNavigationSettings-BjyBA5Mj.mjs} +4 -4
- package/dist/chunks/{NcAppNavigationSettings-Eseo9MMQ.mjs.map → NcAppNavigationSettings-BjyBA5Mj.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationSettings-DRoGqPHP.cjs → NcAppNavigationSettings-CrLS3Smo.cjs} +4 -4
- package/dist/chunks/{NcAppNavigationSettings-DRoGqPHP.cjs.map → NcAppNavigationSettings-CrLS3Smo.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationToggle-5n7gV3K0.cjs → NcAppNavigationToggle-DPjOENSf.cjs} +3 -3
- package/dist/chunks/{NcAppNavigationToggle-5n7gV3K0.cjs.map → NcAppNavigationToggle-DPjOENSf.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationToggle-DYJLh23P.mjs → NcAppNavigationToggle-zzG9M53D.mjs} +3 -3
- package/dist/chunks/{NcAppNavigationToggle-DYJLh23P.mjs.map → NcAppNavigationToggle-zzG9M53D.mjs.map} +1 -1
- package/dist/chunks/{NcAppSettingsDialog-DApthKor.cjs → NcAppSettingsDialog-Ckf6dRRJ.cjs} +4 -4
- package/dist/chunks/{NcAppSettingsDialog-DApthKor.cjs.map → NcAppSettingsDialog-Ckf6dRRJ.cjs.map} +1 -1
- package/dist/chunks/{NcAppSettingsDialog-zwmLtX7z.mjs → NcAppSettingsDialog-vBeCGFqk.mjs} +4 -4
- package/dist/chunks/{NcAppSettingsDialog-zwmLtX7z.mjs.map → NcAppSettingsDialog-vBeCGFqk.mjs.map} +1 -1
- package/dist/chunks/{NcAppSettingsShortcutsSection-CiLZpXkV.mjs → NcAppSettingsShortcutsSection-DblUBaWP.mjs} +2 -2
- package/dist/chunks/NcAppSettingsShortcutsSection-DblUBaWP.mjs.map +1 -0
- package/dist/chunks/{NcAppSettingsShortcutsSection-Ow8Xrs6j.cjs → NcAppSettingsShortcutsSection-DgGU8-cF.cjs} +2 -2
- package/dist/chunks/NcAppSettingsShortcutsSection-DgGU8-cF.cjs.map +1 -0
- package/dist/chunks/{NcAppSidebar-COAO4VHH.cjs → NcAppSidebar-CPHVBBe0.cjs} +5 -5
- package/dist/chunks/{NcAppSidebar-COAO4VHH.cjs.map → NcAppSidebar-CPHVBBe0.cjs.map} +1 -1
- package/dist/chunks/{NcAppSidebar-BiIeJ3p1.mjs → NcAppSidebar-Cx0PlofZ.mjs} +5 -5
- package/dist/chunks/{NcAppSidebar-BiIeJ3p1.mjs.map → NcAppSidebar-Cx0PlofZ.mjs.map} +1 -1
- package/dist/chunks/{NcAssistantButton-Dm2xP503.cjs → NcAssistantButton-Bl0F4iDe.cjs} +2 -2
- package/dist/chunks/{NcAssistantButton-Dm2xP503.cjs.map → NcAssistantButton-Bl0F4iDe.cjs.map} +1 -1
- package/dist/chunks/{NcAssistantButton-Cp9x57gS.mjs → NcAssistantButton-D1Miejvu.mjs} +2 -2
- package/dist/chunks/{NcAssistantButton-Cp9x57gS.mjs.map → NcAssistantButton-D1Miejvu.mjs.map} +1 -1
- package/dist/chunks/{NcAvatar-OCD_HmOb.mjs → NcAvatar-DC2fiCH-.mjs} +5 -5
- package/dist/chunks/{NcAvatar-OCD_HmOb.mjs.map → NcAvatar-DC2fiCH-.mjs.map} +1 -1
- package/dist/chunks/{NcAvatar-DQZhvYDx.cjs → NcAvatar-ffZLZnH_.cjs} +5 -5
- package/dist/chunks/{NcAvatar-DQZhvYDx.cjs.map → NcAvatar-ffZLZnH_.cjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumb-B-voXzzn.cjs → NcBreadcrumb-AZMsaVbs.cjs} +3 -3
- package/dist/chunks/{NcBreadcrumb-B-voXzzn.cjs.map → NcBreadcrumb-AZMsaVbs.cjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumb-UmBT5BsM.mjs → NcBreadcrumb-VwnF27KB.mjs} +3 -3
- package/dist/chunks/{NcBreadcrumb-UmBT5BsM.mjs.map → NcBreadcrumb-VwnF27KB.mjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumbs-CyRh9rRH.cjs → NcBreadcrumbs-CpU2Nbqu.cjs} +3 -3
- package/dist/chunks/{NcBreadcrumbs-CyRh9rRH.cjs.map → NcBreadcrumbs-CpU2Nbqu.cjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumbs-B8iMbaQb.mjs → NcBreadcrumbs-CpXJ-OQ1.mjs} +3 -3
- package/dist/chunks/{NcBreadcrumbs-B8iMbaQb.mjs.map → NcBreadcrumbs-CpXJ-OQ1.mjs.map} +1 -1
- package/dist/chunks/{NcButton-Dz2O6cSU.mjs → NcButton-BaZAY-tN.mjs} +3 -3
- package/dist/chunks/{NcButton-Dz2O6cSU.mjs.map → NcButton-BaZAY-tN.mjs.map} +1 -1
- package/dist/chunks/{NcButton-CuFElrFD.cjs → NcButton-Dszi1Apb.cjs} +3 -3
- package/dist/chunks/{NcButton-CuFElrFD.cjs.map → NcButton-Dszi1Apb.cjs.map} +1 -1
- package/dist/chunks/{NcCheckboxRadioSwitch-Di43R9CE.mjs → NcCheckboxRadioSwitch-DJmw98x9.mjs} +2 -2
- package/dist/chunks/{NcCheckboxRadioSwitch-Di43R9CE.mjs.map → NcCheckboxRadioSwitch-DJmw98x9.mjs.map} +1 -1
- package/dist/chunks/{NcCheckboxRadioSwitch-DtrlpJJN.cjs → NcCheckboxRadioSwitch-NOpZzkFR.cjs} +2 -2
- package/dist/chunks/{NcCheckboxRadioSwitch-DtrlpJJN.cjs.map → NcCheckboxRadioSwitch-NOpZzkFR.cjs.map} +1 -1
- package/dist/chunks/{NcCollectionList-Cvf4AeNt.cjs → NcCollectionList-DUQPwfcY.cjs} +5 -5
- package/dist/chunks/{NcCollectionList-Cvf4AeNt.cjs.map → NcCollectionList-DUQPwfcY.cjs.map} +1 -1
- package/dist/chunks/{NcCollectionList-C-LCG1Ob.mjs → NcCollectionList-U0EoWgeN.mjs} +5 -5
- package/dist/chunks/{NcCollectionList-C-LCG1Ob.mjs.map → NcCollectionList-U0EoWgeN.mjs.map} +1 -1
- package/dist/chunks/{NcColorPicker-DPUDuNp4.mjs → NcColorPicker-BfApfazi.mjs} +4 -4
- package/dist/chunks/{NcColorPicker-DPUDuNp4.mjs.map → NcColorPicker-BfApfazi.mjs.map} +1 -1
- package/dist/chunks/{NcColorPicker-CnQNBGVB.cjs → NcColorPicker-CpIQU_eH.cjs} +4 -4
- package/dist/chunks/{NcColorPicker-CnQNBGVB.cjs.map → NcColorPicker-CpIQU_eH.cjs.map} +1 -1
- package/dist/chunks/{NcContent-mCqWZXj_.mjs → NcContent-DFOsZ6pm.mjs} +6 -5
- package/dist/chunks/{NcContent-mCqWZXj_.mjs.map → NcContent-DFOsZ6pm.mjs.map} +1 -1
- package/dist/chunks/{NcContent-B1B89UG0.cjs → NcContent-MiRvygrj.cjs} +6 -5
- package/dist/chunks/{NcContent-B1B89UG0.cjs.map → NcContent-MiRvygrj.cjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidget-DkIJ5CtL.cjs → NcDashboardWidget-BP9C-mPR.cjs} +4 -4
- package/dist/chunks/{NcDashboardWidget-DkIJ5CtL.cjs.map → NcDashboardWidget-BP9C-mPR.cjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidget-CrInkRLf.mjs → NcDashboardWidget-Cp3DMHz7.mjs} +4 -4
- package/dist/chunks/{NcDashboardWidget-CrInkRLf.mjs.map → NcDashboardWidget-Cp3DMHz7.mjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidgetItem-DwvrP3Fa.mjs → NcDashboardWidgetItem-BCjppWNJ.mjs} +3 -3
- package/dist/chunks/{NcDashboardWidgetItem-DwvrP3Fa.mjs.map → NcDashboardWidgetItem-BCjppWNJ.mjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidgetItem-B9edccBC.cjs → NcDashboardWidgetItem-hwkr1yWB.cjs} +3 -3
- package/dist/chunks/{NcDashboardWidgetItem-B9edccBC.cjs.map → NcDashboardWidgetItem-hwkr1yWB.cjs.map} +1 -1
- package/dist/chunks/{NcDialog-Bu9xyU24.mjs → NcDialog-CDFWleNp.mjs} +2 -2
- package/dist/chunks/{NcDialog-Bu9xyU24.mjs.map → NcDialog-CDFWleNp.mjs.map} +1 -1
- package/dist/chunks/{NcDialog-ja5_vkY1.cjs → NcDialog-gV238gzy.cjs} +2 -2
- package/dist/chunks/{NcDialog-ja5_vkY1.cjs.map → NcDialog-gV238gzy.cjs.map} +1 -1
- package/dist/chunks/{NcDialogButton-BKPo8qTj.cjs → NcDialogButton-BDYsOgo1.cjs} +3 -3
- package/dist/chunks/{NcDialogButton-BKPo8qTj.cjs.map → NcDialogButton-BDYsOgo1.cjs.map} +1 -1
- package/dist/chunks/{NcDialogButton-DGBhiACK.mjs → NcDialogButton-tB5RGMME.mjs} +3 -3
- package/dist/chunks/{NcDialogButton-DGBhiACK.mjs.map → NcDialogButton-tB5RGMME.mjs.map} +1 -1
- package/dist/chunks/{NcEmojiPicker-Bm-B75F0.cjs → NcEmojiPicker-CRRgA7eR.cjs} +8 -8
- package/dist/chunks/{NcEmojiPicker-Bm-B75F0.cjs.map → NcEmojiPicker-CRRgA7eR.cjs.map} +1 -1
- package/dist/chunks/{NcEmojiPicker-DOFfHZjX.mjs → NcEmojiPicker-Cw593Jp6.mjs} +8 -8
- package/dist/chunks/{NcEmojiPicker-DOFfHZjX.mjs.map → NcEmojiPicker-Cw593Jp6.mjs.map} +1 -1
- package/dist/chunks/NcFilePicker-CDHKrfPj.mjs +210 -0
- package/dist/chunks/NcFilePicker-CDHKrfPj.mjs.map +1 -0
- package/dist/chunks/NcFilePicker-Ct_uwON0.cjs +209 -0
- package/dist/chunks/NcFilePicker-Ct_uwON0.cjs.map +1 -0
- package/dist/chunks/{NcFormBoxCopyButton-DmFZ1t3a.cjs → NcFormBoxCopyButton-B2GrmfEz.cjs} +2 -2
- package/dist/chunks/{NcFormBoxCopyButton-DmFZ1t3a.cjs.map → NcFormBoxCopyButton-B2GrmfEz.cjs.map} +1 -1
- package/dist/chunks/{NcFormBoxCopyButton-DtJpZ971.mjs → NcFormBoxCopyButton-BkunQ3me.mjs} +2 -2
- package/dist/chunks/{NcFormBoxCopyButton-DtJpZ971.mjs.map → NcFormBoxCopyButton-BkunQ3me.mjs.map} +1 -1
- package/dist/chunks/{NcHeaderButton-Dvo1_Bwc.mjs → NcHeaderButton-BI15lyn_.mjs} +2 -2
- package/dist/chunks/{NcHeaderButton-Dvo1_Bwc.mjs.map → NcHeaderButton-BI15lyn_.mjs.map} +1 -1
- package/dist/chunks/{NcHeaderButton-CpWQbzfF.cjs → NcHeaderButton-KtkQRinp.cjs} +2 -2
- package/dist/chunks/{NcHeaderButton-CpWQbzfF.cjs.map → NcHeaderButton-KtkQRinp.cjs.map} +1 -1
- package/dist/chunks/{NcHeaderMenu-Cuh8ay0F.mjs → NcHeaderMenu-B2gYavD4.mjs} +2 -2
- package/dist/chunks/{NcHeaderMenu-Cuh8ay0F.mjs.map → NcHeaderMenu-B2gYavD4.mjs.map} +1 -1
- package/dist/chunks/{NcHeaderMenu-Cmu-m_aM.cjs → NcHeaderMenu-Bl4_eT2K.cjs} +2 -2
- package/dist/chunks/{NcHeaderMenu-Cmu-m_aM.cjs.map → NcHeaderMenu-Bl4_eT2K.cjs.map} +1 -1
- package/dist/chunks/{NcHotkey-Cv2Je6eF.mjs → NcHotkey-CLLtt9LG.mjs} +2 -2
- package/dist/chunks/{NcHotkey-Cv2Je6eF.mjs.map → NcHotkey-CLLtt9LG.mjs.map} +1 -1
- package/dist/chunks/{NcHotkey-wTQuk8tk.cjs → NcHotkey-vKyDZ2a7.cjs} +2 -2
- package/dist/chunks/{NcHotkey-wTQuk8tk.cjs.map → NcHotkey-vKyDZ2a7.cjs.map} +1 -1
- package/dist/chunks/{NcHotkeyList-CrAcIN70.mjs → NcHotkeyList-Co7MBL5U.mjs} +2 -2
- package/dist/chunks/{NcHotkeyList-CrAcIN70.mjs.map → NcHotkeyList-Co7MBL5U.mjs.map} +1 -1
- package/dist/chunks/{NcHotkeyList-CezOirdf.cjs → NcHotkeyList-DhFQdopw.cjs} +2 -2
- package/dist/chunks/{NcHotkeyList-CezOirdf.cjs.map → NcHotkeyList-DhFQdopw.cjs.map} +1 -1
- package/dist/chunks/{NcInputConfirmCancel-D7e4BkoB.mjs → NcInputConfirmCancel-BvYpvopv.mjs} +3 -3
- package/dist/chunks/{NcInputConfirmCancel-D7e4BkoB.mjs.map → NcInputConfirmCancel-BvYpvopv.mjs.map} +1 -1
- package/dist/chunks/{NcInputConfirmCancel-CsJOuKAS.cjs → NcInputConfirmCancel-Ckda9G9Z.cjs} +3 -3
- package/dist/chunks/{NcInputConfirmCancel-CsJOuKAS.cjs.map → NcInputConfirmCancel-Ckda9G9Z.cjs.map} +1 -1
- package/dist/chunks/{NcInputField-DyXCCIOM.mjs → NcInputField-Cfm1bJR4.mjs} +4 -4
- package/dist/chunks/{NcInputField-DyXCCIOM.mjs.map → NcInputField-Cfm1bJR4.mjs.map} +1 -1
- package/dist/chunks/{NcInputField-BNi4nRz_.cjs → NcInputField-DDgBZ427.cjs} +4 -4
- package/dist/chunks/{NcInputField-BNi4nRz_.cjs.map → NcInputField-DDgBZ427.cjs.map} +1 -1
- package/dist/chunks/{NcKbd-BOezPDqA.cjs → NcKbd-DbjnDaJH.cjs} +2 -2
- package/dist/chunks/{NcKbd-BOezPDqA.cjs.map → NcKbd-DbjnDaJH.cjs.map} +1 -1
- package/dist/chunks/{NcKbd-CUoUkqEz.mjs → NcKbd-GB8FuSAU.mjs} +2 -2
- package/dist/chunks/{NcKbd-CUoUkqEz.mjs.map → NcKbd-GB8FuSAU.mjs.map} +1 -1
- package/dist/chunks/{NcListItem-BYJvJ8iU.cjs → NcListItem-BLbG7272.cjs} +2 -2
- package/dist/chunks/{NcListItem-BYJvJ8iU.cjs.map → NcListItem-BLbG7272.cjs.map} +1 -1
- package/dist/chunks/{NcListItem-DzezqYDz.mjs → NcListItem-RKTfRg06.mjs} +2 -2
- package/dist/chunks/{NcListItem-DzezqYDz.mjs.map → NcListItem-RKTfRg06.mjs.map} +1 -1
- package/dist/chunks/{NcListItemIcon-mfE2915t.cjs → NcListItemIcon-CQzyGLEI.cjs} +2 -2
- package/dist/chunks/{NcListItemIcon-mfE2915t.cjs.map → NcListItemIcon-CQzyGLEI.cjs.map} +1 -1
- package/dist/chunks/{NcListItemIcon-BKWOSFfG.mjs → NcListItemIcon-D49wESTI.mjs} +2 -2
- package/dist/chunks/{NcListItemIcon-BKWOSFfG.mjs.map → NcListItemIcon-D49wESTI.mjs.map} +1 -1
- package/dist/chunks/{NcPasswordField-DVXnb5JS.cjs → NcPasswordField-DNuolayr.cjs} +3 -3
- package/dist/chunks/{NcPasswordField-DVXnb5JS.cjs.map → NcPasswordField-DNuolayr.cjs.map} +1 -1
- package/dist/chunks/{NcPasswordField-Di_KXR_G.mjs → NcPasswordField-lE4m20vf.mjs} +3 -3
- package/dist/chunks/{NcPasswordField-Di_KXR_G.mjs.map → NcPasswordField-lE4m20vf.mjs.map} +1 -1
- package/dist/chunks/{NcRelatedResourcesPanel-MmhCAbd4.mjs → NcRelatedResourcesPanel-C2sLodV8.mjs} +4 -4
- package/dist/chunks/{NcRelatedResourcesPanel-MmhCAbd4.mjs.map → NcRelatedResourcesPanel-C2sLodV8.mjs.map} +1 -1
- package/dist/chunks/{NcRelatedResourcesPanel-BNyUdxZY.cjs → NcRelatedResourcesPanel-Dge9WXUM.cjs} +4 -4
- package/dist/chunks/{NcRelatedResourcesPanel-BNyUdxZY.cjs.map → NcRelatedResourcesPanel-Dge9WXUM.cjs.map} +1 -1
- package/dist/chunks/{NcRichContenteditable-C7lbE4KZ.cjs → NcRichContenteditable-Bh-mMIQz.cjs} +48 -29
- package/dist/chunks/NcRichContenteditable-Bh-mMIQz.cjs.map +1 -0
- package/dist/chunks/{NcRichContenteditable-BDjKhFe3.mjs → NcRichContenteditable-SA1zbfkk.mjs} +48 -29
- package/dist/chunks/NcRichContenteditable-SA1zbfkk.mjs.map +1 -0
- package/dist/chunks/{NcRichText-C5whs7n-.cjs → NcRichText-B1Fyj7k8.cjs} +40 -8
- package/dist/chunks/NcRichText-B1Fyj7k8.cjs.map +1 -0
- package/dist/chunks/{NcRichText-DTzKWfUk.mjs → NcRichText-rNfwY_Oc.mjs} +39 -8
- package/dist/chunks/NcRichText-rNfwY_Oc.mjs.map +1 -0
- package/dist/chunks/{NcSelect-BDPuWrJ7.cjs → NcSelect-1P3nA044.cjs} +3 -3
- package/dist/chunks/{NcSelect-BDPuWrJ7.cjs.map → NcSelect-1P3nA044.cjs.map} +1 -1
- package/dist/chunks/{NcSelect-BD9fhCVy.mjs → NcSelect-CbWXsDdZ.mjs} +3 -3
- package/dist/chunks/{NcSelect-BD9fhCVy.mjs.map → NcSelect-CbWXsDdZ.mjs.map} +1 -1
- package/dist/chunks/{NcSelectTags-AFttsKK_.mjs → NcSelectTags-CqVn5iU9.mjs} +3 -3
- package/dist/chunks/{NcSelectTags-AFttsKK_.mjs.map → NcSelectTags-CqVn5iU9.mjs.map} +1 -1
- package/dist/chunks/{NcSelectTags-BdCxmpQz.cjs → NcSelectTags-D0fZXXmB.cjs} +3 -3
- package/dist/chunks/{NcSelectTags-BdCxmpQz.cjs.map → NcSelectTags-D0fZXXmB.cjs.map} +1 -1
- package/dist/chunks/{NcSelectUsers-Tl4BZ0R-.cjs → NcSelectUsers-BuehmXvD.cjs} +5 -5
- package/dist/chunks/{NcSelectUsers-Tl4BZ0R-.cjs.map → NcSelectUsers-BuehmXvD.cjs.map} +1 -1
- package/dist/chunks/{NcSelectUsers-BRDGLoPt.mjs → NcSelectUsers-DGnn4yBW.mjs} +5 -5
- package/dist/chunks/{NcSelectUsers-BRDGLoPt.mjs.map → NcSelectUsers-DGnn4yBW.mjs.map} +1 -1
- package/dist/chunks/{NcSettingsInputText-C4vnFBMY.cjs → NcSettingsInputText-BF5437Q7.cjs} +3 -3
- package/dist/chunks/{NcSettingsInputText-C4vnFBMY.cjs.map → NcSettingsInputText-BF5437Q7.cjs.map} +1 -1
- package/dist/chunks/{NcSettingsInputText-BeLtzRuE.mjs → NcSettingsInputText-BwnkZzWL.mjs} +3 -3
- package/dist/chunks/{NcSettingsInputText-BeLtzRuE.mjs.map → NcSettingsInputText-BwnkZzWL.mjs.map} +1 -1
- package/dist/chunks/{NcSettingsSection-B26VKgIm.cjs → NcSettingsSection-BrIKMh-B.cjs} +2 -2
- package/dist/chunks/{NcSettingsSection-B26VKgIm.cjs.map → NcSettingsSection-BrIKMh-B.cjs.map} +1 -1
- package/dist/chunks/{NcSettingsSection-CCJrqjyc.mjs → NcSettingsSection-Dz_b9rcq.mjs} +2 -2
- package/dist/chunks/{NcSettingsSection-CCJrqjyc.mjs.map → NcSettingsSection-Dz_b9rcq.mjs.map} +1 -1
- package/dist/chunks/{NcSettingsSelectGroup-BqSdPsYY.mjs → NcSettingsSelectGroup-BaSHNm1x.mjs} +4 -4
- package/dist/chunks/{NcSettingsSelectGroup-BqSdPsYY.mjs.map → NcSettingsSelectGroup-BaSHNm1x.mjs.map} +1 -1
- package/dist/chunks/{NcSettingsSelectGroup-BAbur3rR.cjs → NcSettingsSelectGroup-CUQtMkR1.cjs} +4 -4
- package/dist/chunks/{NcSettingsSelectGroup-BAbur3rR.cjs.map → NcSettingsSelectGroup-CUQtMkR1.cjs.map} +1 -1
- package/dist/chunks/{NcTextArea-CdYBB93W.cjs → NcTextArea-UKiTMLga.cjs} +3 -3
- package/dist/chunks/{NcTextArea-CdYBB93W.cjs.map → NcTextArea-UKiTMLga.cjs.map} +1 -1
- package/dist/chunks/{NcTextArea-DaYLP_Lc.mjs → NcTextArea-fGUiK7p2.mjs} +3 -3
- package/dist/chunks/{NcTextArea-DaYLP_Lc.mjs.map → NcTextArea-fGUiK7p2.mjs.map} +1 -1
- package/dist/chunks/{NcTextField-BdfF5z6a.cjs → NcTextField-CkW-dl88.cjs} +4 -4
- package/dist/chunks/{NcTextField-BdfF5z6a.cjs.map → NcTextField-CkW-dl88.cjs.map} +1 -1
- package/dist/chunks/{NcTextField-DLlQozKA.mjs → NcTextField-DZHP0Dfw.mjs} +4 -4
- package/dist/chunks/{NcTextField-DLlQozKA.mjs.map → NcTextField-DZHP0Dfw.mjs.map} +1 -1
- package/dist/chunks/{NcTimezonePicker-B-o71qLO.cjs → NcTimezonePicker-CI4FEzzK.cjs} +4 -4
- package/dist/chunks/{NcTimezonePicker-B-o71qLO.cjs.map → NcTimezonePicker-CI4FEzzK.cjs.map} +1 -1
- package/dist/chunks/{NcTimezonePicker-DTdF1yG4.mjs → NcTimezonePicker-w7XtRhLb.mjs} +4 -4
- package/dist/chunks/{NcTimezonePicker-DTdF1yG4.mjs.map → NcTimezonePicker-w7XtRhLb.mjs.map} +1 -1
- package/dist/chunks/{NcUserBubble-CWgceS0Q.mjs → NcUserBubble-CIOqCO9S.mjs} +2 -2
- package/dist/chunks/{NcUserBubble-CWgceS0Q.mjs.map → NcUserBubble-CIOqCO9S.mjs.map} +1 -1
- package/dist/chunks/{NcUserBubble-DBqYZmgY.cjs → NcUserBubble-DTcWIk4G.cjs} +2 -2
- package/dist/chunks/{NcUserBubble-DBqYZmgY.cjs.map → NcUserBubble-DTcWIk4G.cjs.map} +1 -1
- package/dist/chunks/{NcUserStatusIcon-CVgFNNxH.cjs → NcUserStatusIcon-Bw0m9Xza.cjs} +3 -3
- package/dist/chunks/{NcUserStatusIcon-CVgFNNxH.cjs.map → NcUserStatusIcon-Bw0m9Xza.cjs.map} +1 -1
- package/dist/chunks/{NcUserStatusIcon-BjrsTrss.mjs → NcUserStatusIcon-Cq1RnTfF.mjs} +3 -3
- package/dist/chunks/{NcUserStatusIcon-BjrsTrss.mjs.map → NcUserStatusIcon-Cq1RnTfF.mjs.map} +1 -1
- package/dist/chunks/{ScopeComponent-Zty1tz_X.cjs → ScopeComponent-CjjPkFe1.cjs} +2 -2
- package/dist/chunks/{ScopeComponent-Zty1tz_X.cjs.map → ScopeComponent-CjjPkFe1.cjs.map} +1 -1
- package/dist/chunks/{ScopeComponent-DnsVyhxP.mjs → ScopeComponent-DvT_N_X8.mjs} +2 -2
- package/dist/chunks/{ScopeComponent-DnsVyhxP.mjs.map → ScopeComponent-DvT_N_X8.mjs.map} +1 -1
- package/dist/chunks/{_l10n-Dpecfv0B.mjs → _l10n-DVz9Qdzk.mjs} +43 -41
- package/dist/chunks/_l10n-DVz9Qdzk.mjs.map +1 -0
- package/dist/chunks/{_l10n-Cd8G51Ar.cjs → _l10n-skrZri3h.cjs} +16 -14
- package/dist/chunks/{_l10n-Cd8G51Ar.cjs.map → _l10n-skrZri3h.cjs.map} +1 -1
- package/dist/chunks/{colors-DFNwuW2a.mjs → colors-BmzDi7by.mjs} +2 -2
- package/dist/chunks/{colors-DFNwuW2a.mjs.map → colors-BmzDi7by.mjs.map} +1 -1
- package/dist/chunks/{colors-Cvcv7NQc.cjs → colors-CND3oL8e.cjs} +2 -2
- package/dist/chunks/{colors-Cvcv7NQc.cjs.map → colors-CND3oL8e.cjs.map} +1 -1
- package/dist/chunks/{emoji-BY_D0V5K.mjs → emoji-BgZdRy3v.mjs} +14 -3
- package/dist/chunks/emoji-BgZdRy3v.mjs.map +1 -0
- package/dist/chunks/{emoji-VgSjNTd5.cjs → emoji-CEwczMT5.cjs} +14 -3
- package/dist/chunks/emoji-CEwczMT5.cjs.map +1 -0
- package/dist/chunks/{referencePickerModal-BqYhlLYA.mjs → referencePickerModal-DD_GM6xV.mjs} +8 -8
- package/dist/chunks/{referencePickerModal-BqYhlLYA.mjs.map → referencePickerModal-DD_GM6xV.mjs.map} +1 -1
- package/dist/chunks/{referencePickerModal-Cd3jRn0q.cjs → referencePickerModal-hGj81_Th.cjs} +8 -8
- package/dist/chunks/{referencePickerModal-Cd3jRn0q.cjs.map → referencePickerModal-hGj81_Th.cjs.map} +1 -1
- package/dist/chunks/{useCopy-Crn9gIC_.cjs → useCopy-3m2jDiIN.cjs} +2 -2
- package/dist/chunks/{useCopy-Crn9gIC_.cjs.map → useCopy-3m2jDiIN.cjs.map} +1 -1
- package/dist/chunks/{useCopy-CYjunv08.mjs → useCopy-DDDe5RYH.mjs} +2 -2
- package/dist/chunks/{useCopy-CYjunv08.mjs.map → useCopy-DDDe5RYH.mjs.map} +1 -1
- package/dist/components/NcFilePicker/index.d.ts +6 -0
- package/dist/components/NcRichText/remarkStripCode.d.ts +2 -0
- package/dist/functions/emoji/emoji.d.ts +11 -5
- package/dist/index.cjs +56 -53
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +57 -54
- package/dist/index.mjs.map +1 -1
- package/package.json +17 -15
- package/dist/chunks/NcAppContent-BQbYzcUh.mjs.map +0 -1
- package/dist/chunks/NcAppContent-iiQ0CC8-.cjs.map +0 -1
- package/dist/chunks/NcAppSettingsShortcutsSection-CiLZpXkV.mjs.map +0 -1
- package/dist/chunks/NcAppSettingsShortcutsSection-Ow8Xrs6j.cjs.map +0 -1
- package/dist/chunks/NcRichContenteditable-BDjKhFe3.mjs.map +0 -1
- package/dist/chunks/NcRichContenteditable-C7lbE4KZ.cjs.map +0 -1
- package/dist/chunks/NcRichText-C5whs7n-.cjs.map +0 -1
- package/dist/chunks/NcRichText-DTzKWfUk.mjs.map +0 -1
- package/dist/chunks/_l10n-Dpecfv0B.mjs.map +0 -1
- package/dist/chunks/emoji-BY_D0V5K.mjs.map +0 -1
- package/dist/chunks/emoji-VgSjNTd5.cjs.map +0 -1
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
require('../assets/NcFilePicker-BokX813z.css');
|
|
2
|
+
"use strict";
|
|
3
|
+
const Vue = require("vue");
|
|
4
|
+
const _pluginVue2_normalizer = require("./_plugin-vue2_normalizer-V0q-tHlQ.cjs");
|
|
5
|
+
const NcActionButton = require("./NcActionButton-C5Dqge0c.cjs");
|
|
6
|
+
const Components_NcActionCaption = require("../Components/NcActionCaption.cjs");
|
|
7
|
+
const NcActions = require("./NcActions-BSDvtMJD.cjs");
|
|
8
|
+
const NcIconSvgWrapper = require("./NcIconSvgWrapper-Bbl4kXZI.cjs");
|
|
9
|
+
const Components_NcLoadingIcon = require("../Components/NcLoadingIcon.cjs");
|
|
10
|
+
const _l10n = require("./_l10n-skrZri3h.cjs");
|
|
11
|
+
const _sfc_main$3 = {
|
|
12
|
+
name: "FolderUploadIcon",
|
|
13
|
+
emits: ["click"],
|
|
14
|
+
props: {
|
|
15
|
+
title: {
|
|
16
|
+
type: String
|
|
17
|
+
},
|
|
18
|
+
fillColor: {
|
|
19
|
+
type: String,
|
|
20
|
+
default: "currentColor"
|
|
21
|
+
},
|
|
22
|
+
size: {
|
|
23
|
+
type: Number,
|
|
24
|
+
default: 24
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
var _sfc_render$3 = function render() {
|
|
29
|
+
var _vm = this, _c = _vm._self._c;
|
|
30
|
+
return _c("span", _vm._b({ staticClass: "material-design-icon folder-upload-icon", attrs: { "aria-hidden": _vm.title ? null : "true", "aria-label": _vm.title, "role": "img" }, on: { "click": function($event) {
|
|
31
|
+
return _vm.$emit("click", $event);
|
|
32
|
+
} } }, "span", _vm.$attrs, false), [_c("svg", { staticClass: "material-design-icon__svg", attrs: { "fill": _vm.fillColor, "width": _vm.size, "height": _vm.size, "viewBox": "0 0 24 24" } }, [_c("path", { attrs: { "d": "M20,6A2,2 0 0,1 22,8V18A2,2 0 0,1 20,20H4A2,2 0 0,1 2,18V6A2,2 0 0,1 4,4H10L12,6H20M10.75,13H14V17H16V13H19.25L15,8.75" } }, [_vm.title ? _c("title", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);
|
|
33
|
+
};
|
|
34
|
+
var _sfc_staticRenderFns$3 = [];
|
|
35
|
+
var __component__$3 = /* @__PURE__ */ _pluginVue2_normalizer.normalizeComponent(
|
|
36
|
+
_sfc_main$3,
|
|
37
|
+
_sfc_render$3,
|
|
38
|
+
_sfc_staticRenderFns$3,
|
|
39
|
+
false,
|
|
40
|
+
null,
|
|
41
|
+
null
|
|
42
|
+
);
|
|
43
|
+
const IconFolderUpload = __component__$3.exports;
|
|
44
|
+
const _sfc_main$2 = {
|
|
45
|
+
name: "PlusIcon",
|
|
46
|
+
emits: ["click"],
|
|
47
|
+
props: {
|
|
48
|
+
title: {
|
|
49
|
+
type: String
|
|
50
|
+
},
|
|
51
|
+
fillColor: {
|
|
52
|
+
type: String,
|
|
53
|
+
default: "currentColor"
|
|
54
|
+
},
|
|
55
|
+
size: {
|
|
56
|
+
type: Number,
|
|
57
|
+
default: 24
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
var _sfc_render$2 = function render2() {
|
|
62
|
+
var _vm = this, _c = _vm._self._c;
|
|
63
|
+
return _c("span", _vm._b({ staticClass: "material-design-icon plus-icon", attrs: { "aria-hidden": _vm.title ? null : "true", "aria-label": _vm.title, "role": "img" }, on: { "click": function($event) {
|
|
64
|
+
return _vm.$emit("click", $event);
|
|
65
|
+
} } }, "span", _vm.$attrs, false), [_c("svg", { staticClass: "material-design-icon__svg", attrs: { "fill": _vm.fillColor, "width": _vm.size, "height": _vm.size, "viewBox": "0 0 24 24" } }, [_c("path", { attrs: { "d": "M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z" } }, [_vm.title ? _c("title", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);
|
|
66
|
+
};
|
|
67
|
+
var _sfc_staticRenderFns$2 = [];
|
|
68
|
+
var __component__$2 = /* @__PURE__ */ _pluginVue2_normalizer.normalizeComponent(
|
|
69
|
+
_sfc_main$2,
|
|
70
|
+
_sfc_render$2,
|
|
71
|
+
_sfc_staticRenderFns$2,
|
|
72
|
+
false,
|
|
73
|
+
null,
|
|
74
|
+
null
|
|
75
|
+
);
|
|
76
|
+
const IconPlus = __component__$2.exports;
|
|
77
|
+
const _sfc_main$1 = {
|
|
78
|
+
name: "UploadIcon",
|
|
79
|
+
emits: ["click"],
|
|
80
|
+
props: {
|
|
81
|
+
title: {
|
|
82
|
+
type: String
|
|
83
|
+
},
|
|
84
|
+
fillColor: {
|
|
85
|
+
type: String,
|
|
86
|
+
default: "currentColor"
|
|
87
|
+
},
|
|
88
|
+
size: {
|
|
89
|
+
type: Number,
|
|
90
|
+
default: 24
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
var _sfc_render$1 = function render3() {
|
|
95
|
+
var _vm = this, _c = _vm._self._c;
|
|
96
|
+
return _c("span", _vm._b({ staticClass: "material-design-icon upload-icon", attrs: { "aria-hidden": _vm.title ? null : "true", "aria-label": _vm.title, "role": "img" }, on: { "click": function($event) {
|
|
97
|
+
return _vm.$emit("click", $event);
|
|
98
|
+
} } }, "span", _vm.$attrs, false), [_c("svg", { staticClass: "material-design-icon__svg", attrs: { "fill": _vm.fillColor, "width": _vm.size, "height": _vm.size, "viewBox": "0 0 24 24" } }, [_c("path", { attrs: { "d": "M9,16V10H5L12,3L19,10H15V16H9M5,20V18H19V20H5Z" } }, [_vm.title ? _c("title", [_vm._v(_vm._s(_vm.title))]) : _vm._e()])])]);
|
|
99
|
+
};
|
|
100
|
+
var _sfc_staticRenderFns$1 = [];
|
|
101
|
+
var __component__$1 = /* @__PURE__ */ _pluginVue2_normalizer.normalizeComponent(
|
|
102
|
+
_sfc_main$1,
|
|
103
|
+
_sfc_render$1,
|
|
104
|
+
_sfc_staticRenderFns$1,
|
|
105
|
+
false,
|
|
106
|
+
null,
|
|
107
|
+
null
|
|
108
|
+
);
|
|
109
|
+
const IconUpload = __component__$1.exports;
|
|
110
|
+
_l10n.register(_l10n.t40);
|
|
111
|
+
const _sfc_main = /* @__PURE__ */ Vue.defineComponent({
|
|
112
|
+
__name: "NcFilePicker",
|
|
113
|
+
props: {
|
|
114
|
+
accept: { default: void 0 },
|
|
115
|
+
actionCaption: { default: "" },
|
|
116
|
+
actions: { default: () => [] },
|
|
117
|
+
directory: { type: Boolean },
|
|
118
|
+
directoryOnly: { type: Boolean },
|
|
119
|
+
disabled: { type: Boolean },
|
|
120
|
+
iconOnly: { type: Boolean },
|
|
121
|
+
label: { default: void 0 },
|
|
122
|
+
loading: { type: Boolean },
|
|
123
|
+
multiple: { type: Boolean },
|
|
124
|
+
variant: { default: "primary" }
|
|
125
|
+
},
|
|
126
|
+
emits: ["pick"],
|
|
127
|
+
setup(__props, { expose, emit }) {
|
|
128
|
+
const props = __props;
|
|
129
|
+
expose({
|
|
130
|
+
reset
|
|
131
|
+
});
|
|
132
|
+
const formElement = Vue.ref(null);
|
|
133
|
+
const inputElement = Vue.ref(null);
|
|
134
|
+
const currentLabel = Vue.computed(() => {
|
|
135
|
+
if (props.loading) {
|
|
136
|
+
return _l10n.t("Uploading …");
|
|
137
|
+
} else if (props.label) {
|
|
138
|
+
return props.label;
|
|
139
|
+
} else if (props.directoryOnly) {
|
|
140
|
+
return _l10n.t("Pick folder");
|
|
141
|
+
}
|
|
142
|
+
return props.multiple ? _l10n.t("Pick files") : _l10n.t("Pick file");
|
|
143
|
+
});
|
|
144
|
+
const canUploadFolders = Vue.computed(() => {
|
|
145
|
+
return (props.directory || props.directoryOnly) && "webkitdirectory" in HTMLInputElement.prototype;
|
|
146
|
+
});
|
|
147
|
+
function triggerPickFiles(uploadFolders) {
|
|
148
|
+
reset();
|
|
149
|
+
if (canUploadFolders.value) {
|
|
150
|
+
inputElement.value.webkitdirectory = uploadFolders;
|
|
151
|
+
}
|
|
152
|
+
Vue.nextTick(() => inputElement.value.click());
|
|
153
|
+
}
|
|
154
|
+
function onPick() {
|
|
155
|
+
const files = inputElement.value?.files ? Array.from(inputElement.value.files) : [];
|
|
156
|
+
emit("pick", files);
|
|
157
|
+
}
|
|
158
|
+
function reset() {
|
|
159
|
+
formElement.value.reset();
|
|
160
|
+
}
|
|
161
|
+
return { __sfc: true, props, emit, formElement, inputElement, currentLabel, canUploadFolders, triggerPickFiles, onPick, reset, IconFolderUpload, IconPlus, IconUpload, NcActionButton: NcActionButton.NcActionButton, NcActionCaption: Components_NcActionCaption, NcActions: NcActions.NcActions, NcIconSvgWrapper: NcIconSvgWrapper.NcIconSvgWrapper, NcLoadingIcon: Components_NcLoadingIcon, t: _l10n.t };
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
const filePicker = "_filePicker_KfdBJ";
|
|
165
|
+
const style0 = {
|
|
166
|
+
filePicker
|
|
167
|
+
};
|
|
168
|
+
var _sfc_render = function render4() {
|
|
169
|
+
var _vm = this, _c = _vm._self._c, _setup = _vm._self._setupProxy;
|
|
170
|
+
return _c("form", { ref: "formElement", class: _vm.$style.filePicker }, [_c(_setup.NcActions, { attrs: { "aria-label": _setup.currentLabel, "disabled": _vm.disabled || _vm.loading, "menu-name": _vm.iconOnly ? void 0 : _setup.currentLabel, "force-name": !_vm.iconOnly, "variant": _vm.variant }, scopedSlots: _vm._u([{ key: "icon", fn: function() {
|
|
171
|
+
return [!_vm.loading ? _vm._t("icon", function() {
|
|
172
|
+
return [_c(_setup.IconPlus, { attrs: { "size": 20 } })];
|
|
173
|
+
}) : _c(_setup.NcLoadingIcon)];
|
|
174
|
+
}, proxy: true }], null, true) }, [_vm.actionCaption ? _c(_setup.NcActionCaption, { attrs: { "name": _vm.actionCaption } }) : _vm._e(), !_vm.directoryOnly ? _c(_setup.NcActionButton, { attrs: { "close-after-click": "" }, on: { "click": function($event) {
|
|
175
|
+
return _setup.triggerPickFiles(false);
|
|
176
|
+
} }, scopedSlots: _vm._u([{ key: "icon", fn: function() {
|
|
177
|
+
return [_c(_setup.IconUpload, { attrs: { "size": 20 } })];
|
|
178
|
+
}, proxy: true }], null, false, 3377047136) }, [_vm._v(" " + _vm._s(_setup.canUploadFolders || !!_vm.$slots.actions ? _vm.multiple ? _setup.t("Upload files") : _setup.t("Upload file") : _setup.currentLabel) + " ")]) : _vm._e(), _setup.canUploadFolders ? _c(_setup.NcActionButton, { attrs: { "close-after-click": "" }, on: { "click": function($event) {
|
|
179
|
+
return _setup.triggerPickFiles(true);
|
|
180
|
+
} }, scopedSlots: _vm._u([{ key: "icon", fn: function() {
|
|
181
|
+
return [_c(_setup.IconFolderUpload, { staticStyle: { "color": "var(--color-primary-element)" }, attrs: { "size": 20 } })];
|
|
182
|
+
}, proxy: true }], null, false, 746052933) }, [_vm._v(" " + _vm._s(!_vm.directoryOnly || !!_vm.$slots.actions ? _setup.t("Upload folder") : _setup.currentLabel) + " ")]) : _vm._e(), _vm._l(_vm.actions, function(group) {
|
|
183
|
+
return [group.caption ? _c(_setup.NcActionCaption, { key: group.caption, attrs: { "name": group.caption } }) : _vm._e(), _vm._l(group.actions ?? [group], function(action) {
|
|
184
|
+
return _c(_setup.NcActionButton, { key: action.label, attrs: { "close-after-click": "" }, on: { "click": action.onClick }, scopedSlots: _vm._u([{ key: "icon", fn: function() {
|
|
185
|
+
return [_c(_setup.NcIconSvgWrapper, { attrs: { "svg": action.iconSvg } })];
|
|
186
|
+
}, proxy: true }], null, true) }, [_vm._v(" " + _vm._s(action.label) + " ")]);
|
|
187
|
+
})];
|
|
188
|
+
})], 2), _c("input", { ref: "inputElement", staticClass: "hidden-visually", attrs: { "accept": _vm.accept?.join(", "), "aria-hidden": "true", "multiple": _vm.multiple, "type": "file" }, on: { "change": _setup.onPick } }), _vm._t("default")], 2);
|
|
189
|
+
};
|
|
190
|
+
var _sfc_staticRenderFns = [];
|
|
191
|
+
const __cssModules = {
|
|
192
|
+
"$style": style0
|
|
193
|
+
};
|
|
194
|
+
function _sfc_injectStyles(ctx) {
|
|
195
|
+
for (var key in __cssModules) {
|
|
196
|
+
this[key] = __cssModules[key];
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
var __component__ = /* @__PURE__ */ _pluginVue2_normalizer.normalizeComponent(
|
|
200
|
+
_sfc_main,
|
|
201
|
+
_sfc_render,
|
|
202
|
+
_sfc_staticRenderFns,
|
|
203
|
+
false,
|
|
204
|
+
_sfc_injectStyles,
|
|
205
|
+
null
|
|
206
|
+
);
|
|
207
|
+
const NcFilePicker = __component__.exports;
|
|
208
|
+
exports.NcFilePicker = NcFilePicker;
|
|
209
|
+
//# sourceMappingURL=NcFilePicker-Ct_uwON0.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NcFilePicker-Ct_uwON0.cjs","sources":["../../node_modules/vue-material-design-icons/FolderUpload.vue","../../node_modules/vue-material-design-icons/Plus.vue","../../node_modules/vue-material-design-icons/Upload.vue","../../src/components/NcFilePicker/NcFilePicker.vue"],"sourcesContent":["<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon folder-upload-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,6A2,2 0 0,1 22,8V18A2,2 0 0,1 20,20H4A2,2 0 0,1 2,18V6A2,2 0 0,1 4,4H10L12,6H20M10.75,13H14V17H16V13H19.25L15,8.75\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"FolderUploadIcon\",\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>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon plus-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=\"M19,13H13V19H11V13H5V11H11V5H13V11H19V13Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"PlusIcon\",\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>","<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon upload-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=\"M9,16V10H5L12,3L19,10H15V16H9M5,20V18H19V20H5Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"UploadIcon\",\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: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport { computed, nextTick, ref } from 'vue'\nimport IconFolderUpload from 'vue-material-design-icons/FolderUpload.vue'\nimport IconPlus from 'vue-material-design-icons/Plus.vue'\nimport IconUpload from 'vue-material-design-icons/Upload.vue'\nimport NcActionButton from '../NcActionButton/NcActionButton.vue'\nimport NcActionCaption from '../NcActionCaption/NcActionCaption.vue'\nimport NcActions from '../NcActions/NcActions.vue'\nimport NcIconSvgWrapper from '../NcIconSvgWrapper/NcIconSvgWrapper.vue'\nimport NcLoadingIcon from '../NcLoadingIcon/NcLoadingIcon.vue'\nimport { t } from '../../l10n.js'\n\nexport interface FilePickerItem {\n\t/**\n\t * SVG icon (as string) for the action\n\t */\n\ticonSvg: string\n\t/**\n\t * Label of the action\n\t */\n\tlabel: string\n\t/**\n\t * Callback when the action is clicked\n\t */\n\tonClick: () => void\n}\n\nexport interface FilePickerItemGroup {\n\t/**\n\t * Caption for the action group\n\t */\n\tcaption: string\n\t/**\n\t * Actions within this group\n\t */\n\tactions: FilePickerItem[]\n}\n\nconst props = withDefaults(defineProps<{\n\t/**\n\t * File types to accept\n\t */\n\taccept?: string[]\n\n\t/**\n\t * Optional menu caption to be shown above the actions\n\t */\n\tactionCaption?: string\n\n\t/**\n\t * Additional actions to be shown within the picker menu\n\t */\n\tactions?: FilePickerItem[] | FilePickerItemGroup[]\n\n\t/**\n\t * Allow picking a directory\n\t */\n\tdirectory?: boolean\n\n\t/**\n\t * Disable picking files and only allow picking a directory\n\t */\n\tdirectoryOnly?: boolean\n\n\t/**\n\t * Disabled state of the picker\n\t */\n\tdisabled?: boolean\n\n\t/**\n\t * If set then the label is only used for accessibility but not shown visually\n\t */\n\ticonOnly?: boolean\n\n\t/**\n\t * Label of the picker\n\t *\n\t * @default 'Pick file' or 'Pick files' depending on `multiple`\n\t */\n\tlabel?: string\n\n\t/**\n\t * If set then the picker will be set into a loading state.\n\t * This means the picker is disabled, a loading spinner is shown and the label is adjusted.\n\t */\n\tloading?: boolean\n\n\t/**\n\t * Can the user pick multiple files.\n\t * This is ignored when picking folder (by browser limitations).\n\t */\n\tmultiple?: boolean\n\n\t/**\n\t * The variant of the button\n\t */\n\tvariant?: 'primary' | 'secondary' | 'tertiary'\n}>(), {\n\tactions: () => [],\n\taccept: undefined,\n\tactionCaption: '',\n\tlabel: undefined,\n\tvariant: 'primary',\n})\n\nconst emit = defineEmits<{\n\t(event: 'pick', files: File[]): void\n}>()\n\ndefineExpose({\n\treset,\n})\n\nconst formElement = ref<HTMLFormElement | null>(null)\nconst inputElement = ref<HTMLInputElement | null>(null)\n\n/**\n * The current label to be used as menu name and accessible name of the picker.\n */\nconst currentLabel = computed(() => {\n\tif (props.loading) {\n\t\treturn t('Uploading …')\n\t} else if (props.label) {\n\t\treturn props.label\n\t} else if (props.directoryOnly) {\n\t\treturn t('Pick folder')\n\t}\n\treturn props.multiple ? t('Pick files') : t('Pick file')\n})\n\n/**\n * Check whether the current browser supports uploading directories\n * Hint: This does not check if the current connection supports this, as some browsers require a secure context!\n */\nconst canUploadFolders = computed(() => {\n\treturn (props.directory || props.directoryOnly) && 'webkitdirectory' in HTMLInputElement.prototype\n})\n\n/**\n * Trigger file picker\n *\n * @param uploadFolders - Whether to upload folders or files\n */\nfunction triggerPickFiles(uploadFolders: boolean) {\n\t// Without reset selecting the same file doesn't trigger the change event\n\treset()\n\n\t// Only if the browser supports picking folders and the user selected \"pick folder\" we set the file input to directory picking.\n\tif (canUploadFolders.value) {\n\t\tinputElement.value!.webkitdirectory = uploadFolders\n\t}\n\n\t// Wait for the reset and the `webkitdirectory` to be dispatched in DOM\n\tnextTick(() => inputElement.value!.click())\n}\n\n/**\n * Handle picking some local files\n */\nfunction onPick() {\n\tconst files = inputElement.value?.files ? Array.from(inputElement.value.files) : []\n\temit('pick', files)\n}\n\n/**\n * Reset the picker state of the currently selected files.\n */\nfunction reset() {\n\tformElement.value!.reset()\n}\n</script>\n\n<template>\n\t<form\n\t\tref=\"formElement\"\n\t\t:class=\"$style.filePicker\">\n\t\t<NcActions\n\t\t\t:aria-label=\"currentLabel\"\n\t\t\t:disabled=\"disabled || loading\"\n\t\t\t:menu-name=\"iconOnly ? undefined : currentLabel\"\n\t\t\t:force-name=\"!iconOnly\"\n\t\t\t:variant=\"variant\">\n\t\t\t<template #icon>\n\t\t\t\t<!-- @slot Optional custom icon for the picker menu -->\n\t\t\t\t<slot v-if=\"!loading\" name=\"icon\">\n\t\t\t\t\t<IconPlus :size=\"20\" />\n\t\t\t\t</slot>\n\t\t\t\t<NcLoadingIcon v-else />\n\t\t\t</template>\n\n\t\t\t<NcActionCaption v-if=\"actionCaption\" :name=\"actionCaption\" />\n\n\t\t\t<NcActionButton\n\t\t\t\tv-if=\"!directoryOnly\"\n\t\t\t\tclose-after-click\n\t\t\t\t@click=\"triggerPickFiles(false)\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconUpload :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ (canUploadFolders || !!$slots.actions) ? (multiple ? t('Upload files') : t('Upload file')) : currentLabel }}\n\t\t\t\t<!-- If this is not the only action in the NcActions this is a menu entry and we need a generic name - otherwise this will be a single button where we need to apply the label -->\n\t\t\t</NcActionButton>\n\n\t\t\t<NcActionButton\n\t\t\t\tv-if=\"canUploadFolders\"\n\t\t\t\tclose-after-click\n\t\t\t\t@click=\"triggerPickFiles(true)\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconFolderUpload style=\"color: var(--color-primary-element)\" :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ (!directoryOnly || !!$slots.actions) ? t('Upload folder') : currentLabel }}\n\t\t\t\t<!-- If this is not the only action in the NcActions this is a menu entry and we need a generic name - otherwise this will be a single button where we need to apply the label -->\n\t\t\t</NcActionButton>\n\n\t\t\t<template v-for=\"group of actions\">\n\t\t\t\t<NcActionCaption\n\t\t\t\t\tv-if=\"group.caption\"\n\t\t\t\t\t:key=\"group.caption\"\n\t\t\t\t\t:name=\"group.caption\" />\n\n\t\t\t\t<NcActionButton\n\t\t\t\t\tv-for=\"action of group.actions ?? [group]\"\n\t\t\t\t\t:key=\"action.label\"\n\t\t\t\t\tclose-after-click\n\t\t\t\t\t@click=\"action.onClick\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<NcIconSvgWrapper :svg=\"action.iconSvg\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ action.label }}\n\t\t\t\t</NcActionButton>\n\t\t\t</template>\n\t\t</NcActions>\n\n\t\t<!-- Hidden files picker input - also hidden for accessibility as otherwise such users also loose the ability to pick files -->\n\t\t<input\n\t\t\tref=\"inputElement\"\n\t\t\t:accept=\"accept?.join(', ')\"\n\t\t\taria-hidden=\"true\"\n\t\t\tclass=\"hidden-visually\"\n\t\t\t:multiple=\"multiple\"\n\t\t\ttype=\"file\"\n\t\t\t@change=\"onPick\">\n\n\t\t<!-- @slot Optional content to be shown in the picker. This can be used e.g. for a progress bar or similar. -->\n\t\t<slot />\n\t</form>\n</template>\n\n<style module>\n.filePicker {\n\tdisplay: inline-flex;\n\talign-items: center;\n\theight: var(--default-clickable-area);\n}\n</style>\n\n<docs>\nThis component allows to pick local files (or directories) which can be used to upload them to Nextcloud or directly process them in the browser.\n\n### Exposed methods\n\n- `function reset(): void`\n This method allows to reset the internal state of the file picker to clear the current selection\n\n### Example\n\n```vue\n<template>\n\t<div>\n\t\t<div class=\"wrapper\">\n\t\t\t<NcFilePicker ref=\"picker\"\n\t\t\t\tdirectory\n\t\t\t\t@pick=\"selectedFiles = $event\" />\n\n\t\t\t<NcButton variant=\"tertiary\"\n\t\t\t\t@click=\"clearPicker\">\n\t\t\t\tClear\n\t\t\t</NcButton>\n\t\t</div>\n\n\t\t<h3>Selected files:</h3>\n\t\t<ul>\n\t\t\t<li v-for=\"file in selectedFiles\" :key=\"file.name\">\n\t\t\t\t{{ file.webkitRelativePath || file.name }}\n\t\t\t</li>\n\t\t</ul>\n\t</div>\n</template>\n<script>\n\texport default {\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\tselectedFiles: [],\n\t\t\t}\n\t\t},\n\t\tmethods: {\n\t\t\t/**\n\t\t\t * This will clear the selected files from the picker.\n\t\t\t */\n\t\t\tclearPicker() {\n\t\t\t\tthis.$refs.picker.reset()\n\t\t\t},\n\t\t},\n\t}\n</script>\n<style scoped>\n.wrapper {\n\tdisplay: flex;\n\tgap: 10px;\n}\n</style>\n```\n</docs>\n"],"names":["_sfc_main","ref","computed","t","nextTick"],"mappings":";;;;;;;;;AAoBA,MAAAA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA,CAAA,OAAA;AAAA,EACA,OAAA;AAAA,IACA,OAAA;AAAA,MACA,MAAA;AAAA,IACA;AAAA,IACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,IACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;AChBA,MAAAA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA,CAAA,OAAA;AAAA,EACA,OAAA;AAAA,IACA,OAAA;AAAA,MACA,MAAA;AAAA,IACA;AAAA,IACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,IACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;AChBA,MAAAA,cAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA,CAAA,OAAA;AAAA,EACA,OAAA;AAAA,IACA,OAAA;AAAA,MACA,MAAA;AAAA,IACA;AAAA,IACA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,IACA,MAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC8EA,WAAa;AAAA,MACZ;AAAA,IAAA,CACA;AAED,UAAM,cAAcC,IAAAA,IAA4B,IAAI;AACpD,UAAM,eAAeA,IAAAA,IAA6B,IAAI;AAKtD,UAAM,eAAeC,IAAAA,SAAS,MAAM;AACnC,UAAI,MAAM,SAAS;AAClB,eAAOC,MAAAA,EAAE,aAAa;AAAA,MACvB,WAAW,MAAM,OAAO;AACvB,eAAO,MAAM;AAAA,MACd,WAAW,MAAM,eAAe;AAC/B,eAAOA,MAAAA,EAAE,aAAa;AAAA,MACvB;AACA,aAAO,MAAM,WAAWA,MAAAA,EAAE,YAAY,IAAIA,MAAAA,EAAE,WAAW;AAAA,IACxD,CAAC;AAMD,UAAM,mBAAmBD,IAAAA,SAAS,MAAM;AACvC,cAAQ,MAAM,aAAa,MAAM,kBAAkB,qBAAqB,iBAAiB;AAAA,IAC1F,CAAC;AAOD,aAAS,iBAAiB,eAAwB;AAEjD,YAAA;AAGA,UAAI,iBAAiB,OAAO;AAC3B,qBAAa,MAAO,kBAAkB;AAAA,MACvC;AAGAE,UAAAA,SAAS,MAAM,aAAa,MAAO,MAAA,CAAO;AAAA,IAC3C;AAKA,aAAS,SAAS;AACjB,YAAM,QAAQ,aAAa,OAAO,QAAQ,MAAM,KAAK,aAAa,MAAM,KAAK,IAAI,CAAA;AACjF,WAAK,QAAQ,KAAK;AAAA,IACnB;AAKA,aAAS,QAAQ;AAChB,kBAAY,MAAO,MAAA;AAAA,IACpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","x_google_ignoreList":[0,1,2]}
|
|
@@ -3,7 +3,7 @@ const Vue = require("vue");
|
|
|
3
3
|
const core = require("@vueuse/core");
|
|
4
4
|
const NcFormBoxButton = require("./NcFormBoxButton-BO2bMnah.cjs");
|
|
5
5
|
const NcIconSvgWrapper = require("./NcIconSvgWrapper-Bbl4kXZI.cjs");
|
|
6
|
-
const useCopy = require("./useCopy-
|
|
6
|
+
const useCopy = require("./useCopy-3m2jDiIN.cjs");
|
|
7
7
|
const _pluginVue2_normalizer = require("./_plugin-vue2_normalizer-V0q-tHlQ.cjs");
|
|
8
8
|
const _sfc_main = /* @__PURE__ */ Vue.defineComponent({
|
|
9
9
|
__name: "NcFormBoxCopyButton",
|
|
@@ -43,4 +43,4 @@ var __component__ = /* @__PURE__ */ _pluginVue2_normalizer.normalizeComponent(
|
|
|
43
43
|
);
|
|
44
44
|
const NcFormBoxCopyButton = __component__.exports;
|
|
45
45
|
exports.NcFormBoxCopyButton = NcFormBoxCopyButton;
|
|
46
|
-
//# sourceMappingURL=NcFormBoxCopyButton-
|
|
46
|
+
//# sourceMappingURL=NcFormBoxCopyButton-B2GrmfEz.cjs.map
|
package/dist/chunks/{NcFormBoxCopyButton-DmFZ1t3a.cjs.map → NcFormBoxCopyButton-B2GrmfEz.cjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NcFormBoxCopyButton-
|
|
1
|
+
{"version":3,"file":"NcFormBoxCopyButton-B2GrmfEz.cjs","sources":["../../src/components/NcFormBoxCopyButton/NcFormBoxCopyButton.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport { whenever } from '@vueuse/core'\nimport NcFormBoxButton from '../NcFormBoxButton/NcFormBoxButton.vue'\nimport NcIconSvgWrapper from '../NcIconSvgWrapper/NcIconSvgWrapper.vue'\nimport { useCopy } from '../../composables/useCopy.ts'\n\nconst props = withDefaults(defineProps<{\n\t/** Copied value's value */\n\tlabel?: string\n\t/** The value to be copied */\n\tvalue: string\n\t/** Native disabled attribute */\n\tdisabled?: boolean\n}>(), {\n\tlabel: undefined,\n\tdisabled: false,\n})\n\nconst emit = defineEmits<{\n\t/** Value has been successfully copied */\n\t(event: 'copy'): void\n}>()\n\nconst { isCopied, copy, icon, altText } = useCopy(() => props.value)\n\nwhenever(isCopied, () => emit('copy'))\n</script>\n\n<template>\n\t<NcFormBoxButton\n\t\t:disabled=\"disabled\"\n\t\tinverted-accent\n\t\t@click=\"copy\">\n\t\t<template v-if=\"$slots.default || label\" #default>\n\t\t\t<!-- @slot Custom label content -->\n\t\t\t<span class=\"hidden-visually\">\n\t\t\t\t{{ altText }}\n\t\t\t</span>\n\t\t\t<slot>\n\t\t\t\t{{ label }}\n\t\t\t</slot>\n\t\t</template>\n\t\t<template #description>\n\t\t\t{{ value }}\n\t\t</template>\n\t\t<template #icon>\n\t\t\t<NcIconSvgWrapper :path=\"icon\" inline />\n\t\t</template>\n\t</NcFormBoxButton>\n</template>\n\n<docs>\n### General\n\n`NcFormBoxButton` set up to be a copy button.\n\n```vue\n<template>\n\t<NcFormGroup label=\"CalDAV\" description=\"Access Nextcloud calendars from other apps and devices\">\n\t\t<NcFormBox>\n\t\t\t<NcFormBoxCopyButton\n\t\t\t\tlabel=\"CalDAV URL\"\n\t\t\t\tvalue=\"https://cloud.example.com/remote.php/dav/\" />\n\t\t\t<NcFormBoxCopyButton\n\t\t\t\tlabel=\"Server Address for iOS and macOS\"\n\t\t\t\tvalue=\"https://cloud.example.com/remote.php/dav/principals/users/user/\" />\n\t\t</NcFormBox>\n\t</NcFormGroup>\n</template>\n```\n</docs>\n"],"names":["useCopy","whenever"],"mappings":";;;;;;;;;;;;;;;;;AA4BA,UAAM,EAAE,UAAU,MAAM,MAAM,YAAYA,QAAAA,QAAQ,MAAM,MAAM,KAAK;AAEnEC,SAAAA,SAAS,UAAU,MAAM,KAAK,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -2,7 +2,7 @@ import { defineComponent } from "vue";
|
|
|
2
2
|
import { whenever } from "@vueuse/core";
|
|
3
3
|
import { N as NcFormBoxButton } from "./NcFormBoxButton-BQi11xQX.mjs";
|
|
4
4
|
import { N as NcIconSvgWrapper } from "./NcIconSvgWrapper-Bui9PhAS.mjs";
|
|
5
|
-
import { u as useCopy } from "./useCopy-
|
|
5
|
+
import { u as useCopy } from "./useCopy-DDDe5RYH.mjs";
|
|
6
6
|
import { n as normalizeComponent } from "./_plugin-vue2_normalizer-DU4iP6Vu.mjs";
|
|
7
7
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
8
8
|
__name: "NcFormBoxCopyButton",
|
|
@@ -44,4 +44,4 @@ const NcFormBoxCopyButton = __component__.exports;
|
|
|
44
44
|
export {
|
|
45
45
|
NcFormBoxCopyButton as N
|
|
46
46
|
};
|
|
47
|
-
//# sourceMappingURL=NcFormBoxCopyButton-
|
|
47
|
+
//# sourceMappingURL=NcFormBoxCopyButton-BkunQ3me.mjs.map
|
package/dist/chunks/{NcFormBoxCopyButton-DtJpZ971.mjs.map → NcFormBoxCopyButton-BkunQ3me.mjs.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NcFormBoxCopyButton-
|
|
1
|
+
{"version":3,"file":"NcFormBoxCopyButton-BkunQ3me.mjs","sources":["../../src/components/NcFormBoxCopyButton/NcFormBoxCopyButton.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport { whenever } from '@vueuse/core'\nimport NcFormBoxButton from '../NcFormBoxButton/NcFormBoxButton.vue'\nimport NcIconSvgWrapper from '../NcIconSvgWrapper/NcIconSvgWrapper.vue'\nimport { useCopy } from '../../composables/useCopy.ts'\n\nconst props = withDefaults(defineProps<{\n\t/** Copied value's value */\n\tlabel?: string\n\t/** The value to be copied */\n\tvalue: string\n\t/** Native disabled attribute */\n\tdisabled?: boolean\n}>(), {\n\tlabel: undefined,\n\tdisabled: false,\n})\n\nconst emit = defineEmits<{\n\t/** Value has been successfully copied */\n\t(event: 'copy'): void\n}>()\n\nconst { isCopied, copy, icon, altText } = useCopy(() => props.value)\n\nwhenever(isCopied, () => emit('copy'))\n</script>\n\n<template>\n\t<NcFormBoxButton\n\t\t:disabled=\"disabled\"\n\t\tinverted-accent\n\t\t@click=\"copy\">\n\t\t<template v-if=\"$slots.default || label\" #default>\n\t\t\t<!-- @slot Custom label content -->\n\t\t\t<span class=\"hidden-visually\">\n\t\t\t\t{{ altText }}\n\t\t\t</span>\n\t\t\t<slot>\n\t\t\t\t{{ label }}\n\t\t\t</slot>\n\t\t</template>\n\t\t<template #description>\n\t\t\t{{ value }}\n\t\t</template>\n\t\t<template #icon>\n\t\t\t<NcIconSvgWrapper :path=\"icon\" inline />\n\t\t</template>\n\t</NcFormBoxButton>\n</template>\n\n<docs>\n### General\n\n`NcFormBoxButton` set up to be a copy button.\n\n```vue\n<template>\n\t<NcFormGroup label=\"CalDAV\" description=\"Access Nextcloud calendars from other apps and devices\">\n\t\t<NcFormBox>\n\t\t\t<NcFormBoxCopyButton\n\t\t\t\tlabel=\"CalDAV URL\"\n\t\t\t\tvalue=\"https://cloud.example.com/remote.php/dav/\" />\n\t\t\t<NcFormBoxCopyButton\n\t\t\t\tlabel=\"Server Address for iOS and macOS\"\n\t\t\t\tvalue=\"https://cloud.example.com/remote.php/dav/principals/users/user/\" />\n\t\t</NcFormBox>\n\t</NcFormGroup>\n</template>\n```\n</docs>\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;AA4BA,UAAM,EAAE,UAAU,MAAM,MAAM,YAAY,QAAQ,MAAM,MAAM,KAAK;AAEnE,aAAS,UAAU,MAAM,KAAK,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import '../assets/NcHeaderButton-DI-1Gsph.css';
|
|
2
2
|
import { G as GenRandomId } from "./GenRandomId-F5ebeBB_.mjs";
|
|
3
|
-
import { N as NcButton } from "./NcButton-
|
|
3
|
+
import { N as NcButton } from "./NcButton-BaZAY-tN.mjs";
|
|
4
4
|
import { n as normalizeComponent } from "./_plugin-vue2_normalizer-DU4iP6Vu.mjs";
|
|
5
5
|
const _sfc_main = {
|
|
6
6
|
name: "NcHeaderButton",
|
|
@@ -61,4 +61,4 @@ const NcHeaderButton = __component__.exports;
|
|
|
61
61
|
export {
|
|
62
62
|
NcHeaderButton as N
|
|
63
63
|
};
|
|
64
|
-
//# sourceMappingURL=NcHeaderButton-
|
|
64
|
+
//# sourceMappingURL=NcHeaderButton-BI15lyn_.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NcHeaderButton-
|
|
1
|
+
{"version":3,"file":"NcHeaderButton-BI15lyn_.mjs","sources":["../../src/components/NcHeaderButton/NcHeaderButton.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\nThis component is made to be used in the Nextcloud top header,\nsimilar to the NcHeaderMenu but to be used when only a trigger button is needed, e.g. when opening a dialog.\n\n```\n<template>\n\t<div id=\"nextcloud-header\">\n\t\t<NcHeaderButton id=\"search-dialog\"\n\t\t\taria-label=\"Search\"\n\t\t\t@click=\"showDialog = true\">\n\t\t\t<template #icon>\n\t\t\t\t<Magnify />\n\t\t\t</template>\n\t\t</NcHeaderButton>\n\n\t\t<NcDialog name=\"Search\"\n\t\t\tsize=\"normal\"\n\t\t\t:open.sync=\"showDialog\">\n\t\t\t<NcTextField label=\"Search for files, comments, contacts …\"\n\t\t\t\ttype=\"search\"\n\t\t\t\t:value.sync=\"query\" />\n\t\t\t<NcEmptyContent name=\"Search\"\n\t\t\t\t:description=\"query ? `No results for '${query}'` : 'Start typing to search'\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Magnify />\n\t\t\t\t</template>\n\t\t\t</NcEmptyContent>\n\t\t</NcDialog>\n\t</div>\n</template>\n<script>\nimport Magnify from 'vue-material-design-icons/Magnify'\n\nexport default {\n\tcomponents: {\n\t\tMagnify,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tshowDialog: false,\n\t\t\tquery: '',\n\t\t}\n\t},\n}\n</script>\n<style>\n#nextcloud-header {\n\tdisplay: flex;\n\tjustify-content: right;\n\tbackground-color: var(--color-primary);\n\theight: var(--header-height, 50px);\n\tpadding-inline-end: 12px;\n}\n</style>\n```\n</docs>\n\n<template>\n\t<!-- We need a wrapper for server styles to apply -->\n\t<div :id=\"id\" class=\"header-menu\">\n\t\t<NcButton\n\t\t\tclass=\"header-menu__trigger\"\n\t\t\t:aria-label=\"ariaLabel\"\n\t\t\t:aria-describedby=\"descriptionId\"\n\t\t\tsize=\"large\"\n\t\t\tvariant=\"tertiary-no-background\"\n\t\t\t@click.prevent=\"$emit('click', $event)\">\n\t\t\t<template #icon>\n\t\t\t\t<!-- @slot Icon trigger slot. Make sure the svg path\n\t\t\t\tis at least 16px. Usually mdi icon works at 20px -->\n\t\t\t\t<slot name=\"icon\" />\n\t\t\t</template>\n\t\t</NcButton>\n\n\t\t<span\n\t\t\tv-if=\"description\"\n\t\t\t:id=\"descriptionId\"\n\t\t\tclass=\"header-menu__description hidden-visually\">\n\t\t\t{{ description }}\n\t\t</span>\n\t</div>\n</template>\n\n<script>\nimport GenRandomId from '../../utils/GenRandomId.js'\nimport NcButton from '../NcButton/index.js'\n\nexport default {\n\tname: 'NcHeaderButton',\n\n\tcomponents: {\n\t\tNcButton,\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * Unique id for this menu\n\t\t */\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * `aria-label` attribute of the button\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * Additional visually hidden description text for the button\n\t\t */\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\temits: [\n\t\t'click',\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\tdescriptionId: GenRandomId(),\n\t\t}\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use '../NcHeaderMenu/header-menu__trigger.scss';\n</style>\n"],"names":[],"mappings":";;;AA6FA,MAAA,YAAA;AAAA,EACA,MAAA;AAAA,EAEA,YAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AAAA;AAAA;AAAA;AAAA,IAIA,IAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,aAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AACA,WAAA;AAAA,MACA,eAAA,YAAA;AAAA,IACA;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require('../assets/NcHeaderButton-DI-1Gsph.css');
|
|
2
2
|
"use strict";
|
|
3
3
|
const GenRandomId = require("./GenRandomId-D7iOvpZS.cjs");
|
|
4
|
-
const NcButton = require("./NcButton-
|
|
4
|
+
const NcButton = require("./NcButton-Dszi1Apb.cjs");
|
|
5
5
|
const _pluginVue2_normalizer = require("./_plugin-vue2_normalizer-V0q-tHlQ.cjs");
|
|
6
6
|
const _sfc_main = {
|
|
7
7
|
name: "NcHeaderButton",
|
|
@@ -60,4 +60,4 @@ var __component__ = /* @__PURE__ */ _pluginVue2_normalizer.normalizeComponent(
|
|
|
60
60
|
);
|
|
61
61
|
const NcHeaderButton = __component__.exports;
|
|
62
62
|
exports.NcHeaderButton = NcHeaderButton;
|
|
63
|
-
//# sourceMappingURL=NcHeaderButton-
|
|
63
|
+
//# sourceMappingURL=NcHeaderButton-KtkQRinp.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NcHeaderButton-
|
|
1
|
+
{"version":3,"file":"NcHeaderButton-KtkQRinp.cjs","sources":["../../src/components/NcHeaderButton/NcHeaderButton.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2024 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\nThis component is made to be used in the Nextcloud top header,\nsimilar to the NcHeaderMenu but to be used when only a trigger button is needed, e.g. when opening a dialog.\n\n```\n<template>\n\t<div id=\"nextcloud-header\">\n\t\t<NcHeaderButton id=\"search-dialog\"\n\t\t\taria-label=\"Search\"\n\t\t\t@click=\"showDialog = true\">\n\t\t\t<template #icon>\n\t\t\t\t<Magnify />\n\t\t\t</template>\n\t\t</NcHeaderButton>\n\n\t\t<NcDialog name=\"Search\"\n\t\t\tsize=\"normal\"\n\t\t\t:open.sync=\"showDialog\">\n\t\t\t<NcTextField label=\"Search for files, comments, contacts …\"\n\t\t\t\ttype=\"search\"\n\t\t\t\t:value.sync=\"query\" />\n\t\t\t<NcEmptyContent name=\"Search\"\n\t\t\t\t:description=\"query ? `No results for '${query}'` : 'Start typing to search'\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Magnify />\n\t\t\t\t</template>\n\t\t\t</NcEmptyContent>\n\t\t</NcDialog>\n\t</div>\n</template>\n<script>\nimport Magnify from 'vue-material-design-icons/Magnify'\n\nexport default {\n\tcomponents: {\n\t\tMagnify,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tshowDialog: false,\n\t\t\tquery: '',\n\t\t}\n\t},\n}\n</script>\n<style>\n#nextcloud-header {\n\tdisplay: flex;\n\tjustify-content: right;\n\tbackground-color: var(--color-primary);\n\theight: var(--header-height, 50px);\n\tpadding-inline-end: 12px;\n}\n</style>\n```\n</docs>\n\n<template>\n\t<!-- We need a wrapper for server styles to apply -->\n\t<div :id=\"id\" class=\"header-menu\">\n\t\t<NcButton\n\t\t\tclass=\"header-menu__trigger\"\n\t\t\t:aria-label=\"ariaLabel\"\n\t\t\t:aria-describedby=\"descriptionId\"\n\t\t\tsize=\"large\"\n\t\t\tvariant=\"tertiary-no-background\"\n\t\t\t@click.prevent=\"$emit('click', $event)\">\n\t\t\t<template #icon>\n\t\t\t\t<!-- @slot Icon trigger slot. Make sure the svg path\n\t\t\t\tis at least 16px. Usually mdi icon works at 20px -->\n\t\t\t\t<slot name=\"icon\" />\n\t\t\t</template>\n\t\t</NcButton>\n\n\t\t<span\n\t\t\tv-if=\"description\"\n\t\t\t:id=\"descriptionId\"\n\t\t\tclass=\"header-menu__description hidden-visually\">\n\t\t\t{{ description }}\n\t\t</span>\n\t</div>\n</template>\n\n<script>\nimport GenRandomId from '../../utils/GenRandomId.js'\nimport NcButton from '../NcButton/index.js'\n\nexport default {\n\tname: 'NcHeaderButton',\n\n\tcomponents: {\n\t\tNcButton,\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * Unique id for this menu\n\t\t */\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * `aria-label` attribute of the button\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * Additional visually hidden description text for the button\n\t\t */\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\temits: [\n\t\t'click',\n\t],\n\n\tdata() {\n\t\treturn {\n\t\t\tdescriptionId: GenRandomId(),\n\t\t}\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n@use '../NcHeaderMenu/header-menu__trigger.scss';\n</style>\n"],"names":["NcButton","GenRandomId"],"mappings":";;;;AA6FA,MAAA,YAAA;AAAA,EACA,MAAA;AAAA,EAEA,YAAA;AAAA,IACA,UAAAA,SAAAA;AAAAA,EACA;AAAA,EAEA,OAAA;AAAA;AAAA;AAAA;AAAA,IAIA,IAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,WAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA,IAKA,aAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AAAA,IACA;AAAA,EACA;AAAA,EAEA,OAAA;AACA,WAAA;AAAA,MACA,eAAAC,YAAAA,YAAA;AAAA,IACA;AAAA,EACA;AACA;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -20,7 +20,7 @@ import "@nextcloud/capabilities";
|
|
|
20
20
|
import "./logger-D3RVzcfQ.mjs";
|
|
21
21
|
import { g as getTrapStack } from "./focusTrap-HJQ4pqHV.mjs";
|
|
22
22
|
import { G as GenRandomId } from "./GenRandomId-F5ebeBB_.mjs";
|
|
23
|
-
import { N as NcButton } from "./NcButton-
|
|
23
|
+
import { N as NcButton } from "./NcButton-BaZAY-tN.mjs";
|
|
24
24
|
const _sfc_main = {
|
|
25
25
|
name: "NcHeaderMenu",
|
|
26
26
|
components: {
|
|
@@ -231,4 +231,4 @@ const NcHeaderMenu = __component__.exports;
|
|
|
231
231
|
export {
|
|
232
232
|
NcHeaderMenu as N
|
|
233
233
|
};
|
|
234
|
-
//# sourceMappingURL=NcHeaderMenu-
|
|
234
|
+
//# sourceMappingURL=NcHeaderMenu-B2gYavD4.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NcHeaderMenu-Cuh8ay0F.mjs","sources":["../../src/components/NcHeaderMenu/NcHeaderMenu.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\nThis component is made to be used in the Nextcloud top header.\n\n```\n<template>\n\t<div id=\"nextcloud-header\">\n\t\t<NcHeaderMenu id=\"search\"\n\t\t\taria-label=\"Search\">\n\t\t\t<template #trigger>\n\t\t\t\t<Magnify />\n\t\t\t</template>\n\t\t\t<div>\n\t\t\t\t<NcTextField label=\"Search for files, comments, contacts …\"\n\t\t\t\tstyle=\"padding-inline: 8px;\"\n\t\t\t\ttype=\"search\"\n\t\t\t\t:value.sync=\"query\" />\n\t\t\t\t<NcEmptyContent\n\t\t\t\t\tname=\"Search\"\n\t\t\t\t\t:description=\"query ? `No results for '${query}'` : 'Start typing to search'\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Magnify />\n\t\t\t\t\t</template>\n\t\t\t\t</NcEmptyContent>\n\t\t\t</div>\n\t\t</NcHeaderMenu>\n\t</div>\n</template>\n<script>\nimport Magnify from 'vue-material-design-icons/Magnify'\n\nexport default {\n\tcomponents: {\n\t\tMagnify,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tquery: '',\n\t\t}\n\t},\n}\n</script>\n<style>\n#nextcloud-header {\n\tdisplay: flex;\n\tjustify-content: right;\n\tbackground-color: var(--color-primary);\n\theight: var(--header-height, 50px);\n\tpadding-inline-end: 12px;\n}\n</style>\n```\n</docs>\n\n<template>\n\t<component\n\t\t:is=\"wrapperTag\"\n\t\t:id=\"id\"\n\t\tref=\"headerMenu\"\n\t\tv-click-outside=\"clickOutsideConfig\"\n\t\t:aria-labelledby=\"isNav ? triggerId : null\"\n\t\t:class=\"{ 'header-menu--opened': opened }\"\n\t\tclass=\"header-menu\"\n\t\tv-on=\"listeners\">\n\t\t<!-- Trigger -->\n\t\t<NcButton\n\t\t\t:id=\"isNav ? triggerId : null\"\n\t\t\tref=\"trigger\"\n\t\t\tclass=\"header-menu__trigger\"\n\t\t\t:aria-controls=\"`header-menu-${id}`\"\n\t\t\t:aria-describedby=\"description ? descriptionId : null\"\n\t\t\t:aria-expanded=\"opened.toString()\"\n\t\t\t:aria-label=\"ariaLabel\"\n\t\t\tsize=\"large\"\n\t\t\tvariant=\"tertiary-no-background\"\n\t\t\t@click.prevent=\"toggleMenu\">\n\t\t\t<template #icon>\n\t\t\t\t<!-- @slot Icon trigger slot. Make sure the svg path\n\t\t\t\tis at least 16px. Usually mdi icon works at 20px -->\n\t\t\t\t<slot name=\"trigger\" />\n\t\t\t</template>\n\t\t</NcButton>\n\n\t\t<span\n\t\t\tv-if=\"description\"\n\t\t\t:id=\"descriptionId\"\n\t\t\tclass=\"header-menu__description hidden-visually\">\n\t\t\t{{ description }}\n\t\t</span>\n\n\t\t<!-- Visual triangle -->\n\t\t<div v-show=\"opened\" class=\"header-menu__carret\" />\n\n\t\t<!-- Menu opened content -->\n\t\t<div\n\t\t\tv-show=\"opened\"\n\t\t\t:id=\"`header-menu-${id}`\"\n\t\t\tclass=\"header-menu__wrapper\">\n\t\t\t<div ref=\"content\" class=\"header-menu__content\">\n\t\t\t\t<!-- @slot Main content -->\n\t\t\t\t<slot />\n\t\t\t</div>\n\t\t</div>\n\t</component>\n</template>\n\n<script>\nimport { vOnClickOutside as ClickOutside } from '@vueuse/components'\nimport { createFocusTrap } from 'focus-trap'\nimport { ref } from 'vue'\nimport { useTrapStackControl } from '../../composables/useTrapStackControl.ts'\nimport { clickOutsideOptions } from '../../mixins/index.js'\nimport { getTrapStack } from '../../utils/focusTrap.ts'\nimport GenRandomId from '../../utils/GenRandomId.js'\nimport NcButton from '../NcButton/index.js'\n\nexport default {\n\tname: 'NcHeaderMenu',\n\n\tcomponents: {\n\t\tNcButton,\n\t},\n\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\n\tmixins: [\n\t\tclickOutsideOptions,\n\t],\n\n\tprops: {\n\t\t/**\n\t\t * Unique id for this menu\n\t\t */\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * aria-label attribute of the menu open button\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Current menu open state\n\t\t */\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Pass `true` if the header menu is used for website navigation\n\t\t *\n\t\t * The wrapper tag will be set to `nav` and its `aria-labelledby`\n\t\t * will be associated with the menu open button\n\t\t */\n\t\tisNav: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Additional visually hidden description text for the menu\n\t\t * open button\n\t\t */\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\temits: [\n\t\t'close',\n\t\t'closed',\n\t\t'open',\n\t\t'opened',\n\t\t'update:open',\n\t\t'cancel',\n\t],\n\n\tsetup(props) {\n\t\tconst opened = ref(props.open)\n\n\t\t// When component has its own custom focus management\n\t\t// The global focus trap stack should be paused\n\t\tuseTrapStackControl(opened, {\n\t\t\tdisabled: () => !props.isNav,\n\t\t})\n\n\t\treturn {\n\t\t\topened,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfocusTrap: null,\n\t\t\tshortcutsDisabled: window.OCP?.Accessibility?.disableKeyboardShortcuts?.(),\n\t\t\ttriggerId: GenRandomId(),\n\t\t\tdescriptionId: GenRandomId(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\twrapperTag() {\n\t\t\treturn this.isNav ? 'nav' : 'div'\n\t\t},\n\n\t\tclickOutsideConfig() {\n\t\t\treturn [\n\t\t\t\tthis.closeMenu,\n\t\t\t\tthis.clickOutsideOptions,\n\t\t\t]\n\t\t},\n\n\t\tlisteners() {\n\t\t\tif (this.isNav) {\n\t\t\t\treturn {\n\t\t\t\t\tfocusout: this.onFocusOut,\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\t},\n\n\twatch: {\n\t\topen(open) {\n\t\t\tif (open) {\n\t\t\t\tthis.openMenu()\n\t\t\t} else {\n\t\t\t\tthis.closeMenu()\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tdocument.addEventListener('keydown', this.onKeyDown)\n\t},\n\n\tbeforeDestroy() {\n\t\tdocument.removeEventListener('keydown', this.onKeyDown)\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Toggle the current menu open state\n\t\t */\n\t\ttoggleMenu() {\n\t\t\t// Toggling current state\n\t\t\tif (!this.opened) {\n\t\t\t\tthis.openMenu()\n\t\t\t} else {\n\t\t\t\tthis.closeMenu()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Close the current menu\n\t\t *\n\t\t * @param {boolean} cancelled emit a cancel event instead of close\n\t\t */\n\t\tcloseMenu(cancelled = false) {\n\t\t\t// Close the menu\n\t\t\tthis.opened = false\n\t\t\tthis.$emit(cancelled ? 'cancel' : 'close')\n\t\t\tthis.$emit('update:open', false)\n\n\t\t\t// Kill focus trap\n\t\t\tthis.clearFocusTrap()\n\n\t\t\t// Wait for component to finish rendering\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$emit('closed')\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Open the current menu\n\t\t */\n\t\topenMenu() {\n\t\t\t// Open the menu\n\t\t\tthis.opened = true\n\t\t\tthis.$emit('open')\n\t\t\tthis.$emit('update:open', true)\n\n\t\t\t// Wait for component to finish rendering\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.useFocusTrap()\n\t\t\t\tthis.$emit('opened')\n\t\t\t})\n\t\t},\n\n\t\tonKeyDown(event) {\n\t\t\tif (this.shortcutsDisabled || !this.opened) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If escape have been pressed, we close\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tevent.preventDefault()\n\n\t\t\t\t/** User cancelled the menu by pressing escape */\n\t\t\t\tthis.closeMenu(true)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @param {FocusEvent} event The focus event\n\t\t */\n\t\tonFocusOut(event) {\n\t\t\tif (!this.$refs.headerMenu.contains(event.relatedTarget)) {\n\t\t\t\tthis.closeMenu()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add focus trap for accessibility.\n\t\t * Shall only be used when all children are mounted\n\t\t * and available in the DOM. We use $nextTick for that.\n\t\t */\n\t\tasync useFocusTrap() {\n\t\t\tif (this.isNav || this.focusTrap) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// Init focus trap\n\t\t\tconst contentContainer = this.$refs.content\n\t\t\tthis.focusTrap = createFocusTrap(contentContainer, {\n\t\t\t\tallowOutsideClick: true,\n\t\t\t\ttrapStack: getTrapStack(),\n\t\t\t\tfallbackFocus: this.$refs.trigger.$el,\n\t\t\t})\n\t\t\tthis.focusTrap.activate()\n\t\t},\n\n\t\tclearFocusTrap() {\n\t\t\tthis.focusTrap?.deactivate()\n\t\t\tthis.focusTrap = null\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// content inner and outer margin\n// Also used for menu top-right positioning\n$externalMargin: 8px;\n\n@use './header-menu__trigger.scss';\n\n.header-menu {\n\t&__wrapper {\n\t\tposition: fixed;\n\t\tz-index: 2000;\n\t\ttop: var(--header-height);\n\t\tinset-inline-end: 0;\n\t\tbox-sizing: border-box;\n\t\tmargin: 0 $externalMargin;\n\t\tborder-radius: 0 0 var(--border-radius) var(--border-radius);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-main-background);\n\n\t\tfilter: drop-shadow(0 1px 5px var(--color-box-shadow));\n\t}\n\n\t&__carret {\n\t\tposition: absolute;\n\t\tz-index: 2001; // Because __wrapper is 2000.\n\t\tbottom: 0;\n\t\tinset-inline-start: calc(50% - 10px);\n\t\twidth: 0;\n\t\theight: 0;\n\t\tcontent: ' ';\n\t\tpointer-events: none;\n\t\tborder: 10px solid transparent;\n\t\tborder-bottom-color: var(--color-main-background);\n\t}\n\n\t&__content {\n\t\toverflow: auto;\n\t\twidth: 350px;\n\t\tmax-width: calc(100vw - 2 * $externalMargin);\n\t\tmin-height: calc(var(--default-clickable-area) * 1.5);\n\t\tmax-height: calc(100vh - var(--header-height) * 2);\n\t\t:deep(.empty-content) {\n\t\t\tmargin: 12vh 10px;\n\t\t}\n\t}\n}\n</style>\n"],"names":["ClickOutside"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NcHeaderMenu-B2gYavD4.mjs","sources":["../../src/components/NcHeaderMenu/NcHeaderMenu.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\nThis component is made to be used in the Nextcloud top header.\n\n```\n<template>\n\t<div id=\"nextcloud-header\">\n\t\t<NcHeaderMenu id=\"search\"\n\t\t\taria-label=\"Search\">\n\t\t\t<template #trigger>\n\t\t\t\t<Magnify />\n\t\t\t</template>\n\t\t\t<div>\n\t\t\t\t<NcTextField label=\"Search for files, comments, contacts …\"\n\t\t\t\tstyle=\"padding-inline: 8px;\"\n\t\t\t\ttype=\"search\"\n\t\t\t\t:value.sync=\"query\" />\n\t\t\t\t<NcEmptyContent\n\t\t\t\t\tname=\"Search\"\n\t\t\t\t\t:description=\"query ? `No results for '${query}'` : 'Start typing to search'\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Magnify />\n\t\t\t\t\t</template>\n\t\t\t\t</NcEmptyContent>\n\t\t\t</div>\n\t\t</NcHeaderMenu>\n\t</div>\n</template>\n<script>\nimport Magnify from 'vue-material-design-icons/Magnify'\n\nexport default {\n\tcomponents: {\n\t\tMagnify,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tquery: '',\n\t\t}\n\t},\n}\n</script>\n<style>\n#nextcloud-header {\n\tdisplay: flex;\n\tjustify-content: right;\n\tbackground-color: var(--color-primary);\n\theight: var(--header-height, 50px);\n\tpadding-inline-end: 12px;\n}\n</style>\n```\n</docs>\n\n<template>\n\t<component\n\t\t:is=\"wrapperTag\"\n\t\t:id=\"id\"\n\t\tref=\"headerMenu\"\n\t\tv-click-outside=\"clickOutsideConfig\"\n\t\t:aria-labelledby=\"isNav ? triggerId : null\"\n\t\t:class=\"{ 'header-menu--opened': opened }\"\n\t\tclass=\"header-menu\"\n\t\tv-on=\"listeners\">\n\t\t<!-- Trigger -->\n\t\t<NcButton\n\t\t\t:id=\"isNav ? triggerId : null\"\n\t\t\tref=\"trigger\"\n\t\t\tclass=\"header-menu__trigger\"\n\t\t\t:aria-controls=\"`header-menu-${id}`\"\n\t\t\t:aria-describedby=\"description ? descriptionId : null\"\n\t\t\t:aria-expanded=\"opened.toString()\"\n\t\t\t:aria-label=\"ariaLabel\"\n\t\t\tsize=\"large\"\n\t\t\tvariant=\"tertiary-no-background\"\n\t\t\t@click.prevent=\"toggleMenu\">\n\t\t\t<template #icon>\n\t\t\t\t<!-- @slot Icon trigger slot. Make sure the svg path\n\t\t\t\tis at least 16px. Usually mdi icon works at 20px -->\n\t\t\t\t<slot name=\"trigger\" />\n\t\t\t</template>\n\t\t</NcButton>\n\n\t\t<span\n\t\t\tv-if=\"description\"\n\t\t\t:id=\"descriptionId\"\n\t\t\tclass=\"header-menu__description hidden-visually\">\n\t\t\t{{ description }}\n\t\t</span>\n\n\t\t<!-- Visual triangle -->\n\t\t<div v-show=\"opened\" class=\"header-menu__carret\" />\n\n\t\t<!-- Menu opened content -->\n\t\t<div\n\t\t\tv-show=\"opened\"\n\t\t\t:id=\"`header-menu-${id}`\"\n\t\t\tclass=\"header-menu__wrapper\">\n\t\t\t<div ref=\"content\" class=\"header-menu__content\">\n\t\t\t\t<!-- @slot Main content -->\n\t\t\t\t<slot />\n\t\t\t</div>\n\t\t</div>\n\t</component>\n</template>\n\n<script>\nimport { vOnClickOutside as ClickOutside } from '@vueuse/components'\nimport { createFocusTrap } from 'focus-trap'\nimport { ref } from 'vue'\nimport { useTrapStackControl } from '../../composables/useTrapStackControl.ts'\nimport { clickOutsideOptions } from '../../mixins/index.js'\nimport { getTrapStack } from '../../utils/focusTrap.ts'\nimport GenRandomId from '../../utils/GenRandomId.js'\nimport NcButton from '../NcButton/index.js'\n\nexport default {\n\tname: 'NcHeaderMenu',\n\n\tcomponents: {\n\t\tNcButton,\n\t},\n\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\n\tmixins: [\n\t\tclickOutsideOptions,\n\t],\n\n\tprops: {\n\t\t/**\n\t\t * Unique id for this menu\n\t\t */\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * aria-label attribute of the menu open button\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Current menu open state\n\t\t */\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Pass `true` if the header menu is used for website navigation\n\t\t *\n\t\t * The wrapper tag will be set to `nav` and its `aria-labelledby`\n\t\t * will be associated with the menu open button\n\t\t */\n\t\tisNav: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Additional visually hidden description text for the menu\n\t\t * open button\n\t\t */\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\temits: [\n\t\t'close',\n\t\t'closed',\n\t\t'open',\n\t\t'opened',\n\t\t'update:open',\n\t\t'cancel',\n\t],\n\n\tsetup(props) {\n\t\tconst opened = ref(props.open)\n\n\t\t// When component has its own custom focus management\n\t\t// The global focus trap stack should be paused\n\t\tuseTrapStackControl(opened, {\n\t\t\tdisabled: () => !props.isNav,\n\t\t})\n\n\t\treturn {\n\t\t\topened,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfocusTrap: null,\n\t\t\tshortcutsDisabled: window.OCP?.Accessibility?.disableKeyboardShortcuts?.(),\n\t\t\ttriggerId: GenRandomId(),\n\t\t\tdescriptionId: GenRandomId(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\twrapperTag() {\n\t\t\treturn this.isNav ? 'nav' : 'div'\n\t\t},\n\n\t\tclickOutsideConfig() {\n\t\t\treturn [\n\t\t\t\tthis.closeMenu,\n\t\t\t\tthis.clickOutsideOptions,\n\t\t\t]\n\t\t},\n\n\t\tlisteners() {\n\t\t\tif (this.isNav) {\n\t\t\t\treturn {\n\t\t\t\t\tfocusout: this.onFocusOut,\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\t},\n\n\twatch: {\n\t\topen(open) {\n\t\t\tif (open) {\n\t\t\t\tthis.openMenu()\n\t\t\t} else {\n\t\t\t\tthis.closeMenu()\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tdocument.addEventListener('keydown', this.onKeyDown)\n\t},\n\n\tbeforeDestroy() {\n\t\tdocument.removeEventListener('keydown', this.onKeyDown)\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Toggle the current menu open state\n\t\t */\n\t\ttoggleMenu() {\n\t\t\t// Toggling current state\n\t\t\tif (!this.opened) {\n\t\t\t\tthis.openMenu()\n\t\t\t} else {\n\t\t\t\tthis.closeMenu()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Close the current menu\n\t\t *\n\t\t * @param {boolean} cancelled emit a cancel event instead of close\n\t\t */\n\t\tcloseMenu(cancelled = false) {\n\t\t\t// Close the menu\n\t\t\tthis.opened = false\n\t\t\tthis.$emit(cancelled ? 'cancel' : 'close')\n\t\t\tthis.$emit('update:open', false)\n\n\t\t\t// Kill focus trap\n\t\t\tthis.clearFocusTrap()\n\n\t\t\t// Wait for component to finish rendering\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$emit('closed')\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Open the current menu\n\t\t */\n\t\topenMenu() {\n\t\t\t// Open the menu\n\t\t\tthis.opened = true\n\t\t\tthis.$emit('open')\n\t\t\tthis.$emit('update:open', true)\n\n\t\t\t// Wait for component to finish rendering\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.useFocusTrap()\n\t\t\t\tthis.$emit('opened')\n\t\t\t})\n\t\t},\n\n\t\tonKeyDown(event) {\n\t\t\tif (this.shortcutsDisabled || !this.opened) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If escape have been pressed, we close\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tevent.preventDefault()\n\n\t\t\t\t/** User cancelled the menu by pressing escape */\n\t\t\t\tthis.closeMenu(true)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @param {FocusEvent} event The focus event\n\t\t */\n\t\tonFocusOut(event) {\n\t\t\tif (!this.$refs.headerMenu.contains(event.relatedTarget)) {\n\t\t\t\tthis.closeMenu()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add focus trap for accessibility.\n\t\t * Shall only be used when all children are mounted\n\t\t * and available in the DOM. We use $nextTick for that.\n\t\t */\n\t\tasync useFocusTrap() {\n\t\t\tif (this.isNav || this.focusTrap) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// Init focus trap\n\t\t\tconst contentContainer = this.$refs.content\n\t\t\tthis.focusTrap = createFocusTrap(contentContainer, {\n\t\t\t\tallowOutsideClick: true,\n\t\t\t\ttrapStack: getTrapStack(),\n\t\t\t\tfallbackFocus: this.$refs.trigger.$el,\n\t\t\t})\n\t\t\tthis.focusTrap.activate()\n\t\t},\n\n\t\tclearFocusTrap() {\n\t\t\tthis.focusTrap?.deactivate()\n\t\t\tthis.focusTrap = null\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// content inner and outer margin\n// Also used for menu top-right positioning\n$externalMargin: 8px;\n\n@use './header-menu__trigger.scss';\n\n.header-menu {\n\t&__wrapper {\n\t\tposition: fixed;\n\t\tz-index: 2000;\n\t\ttop: var(--header-height);\n\t\tinset-inline-end: 0;\n\t\tbox-sizing: border-box;\n\t\tmargin: 0 $externalMargin;\n\t\tborder-radius: 0 0 var(--border-radius) var(--border-radius);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-main-background);\n\n\t\tfilter: drop-shadow(0 1px 5px var(--color-box-shadow));\n\t}\n\n\t&__carret {\n\t\tposition: absolute;\n\t\tz-index: 2001; // Because __wrapper is 2000.\n\t\tbottom: 0;\n\t\tinset-inline-start: calc(50% - 10px);\n\t\twidth: 0;\n\t\theight: 0;\n\t\tcontent: ' ';\n\t\tpointer-events: none;\n\t\tborder: 10px solid transparent;\n\t\tborder-bottom-color: var(--color-main-background);\n\t}\n\n\t&__content {\n\t\toverflow: auto;\n\t\twidth: 350px;\n\t\tmax-width: calc(100vw - 2 * $externalMargin);\n\t\tmin-height: calc(var(--default-clickable-area) * 1.5);\n\t\tmax-height: calc(100vh - var(--header-height) * 2);\n\t\t:deep(.empty-content) {\n\t\t\tmargin: 12vh 10px;\n\t\t}\n\t}\n}\n</style>\n"],"names":["ClickOutside"],"mappings":"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"}
|
|
@@ -21,7 +21,7 @@ require("@nextcloud/capabilities");
|
|
|
21
21
|
require("./logger-3HuiEIF6.cjs");
|
|
22
22
|
const focusTrap$1 = require("./focusTrap-DUTqW_IG.cjs");
|
|
23
23
|
const GenRandomId = require("./GenRandomId-D7iOvpZS.cjs");
|
|
24
|
-
const NcButton = require("./NcButton-
|
|
24
|
+
const NcButton = require("./NcButton-Dszi1Apb.cjs");
|
|
25
25
|
const _sfc_main = {
|
|
26
26
|
name: "NcHeaderMenu",
|
|
27
27
|
components: {
|
|
@@ -230,4 +230,4 @@ var __component__ = /* @__PURE__ */ _pluginVue2_normalizer.normalizeComponent(
|
|
|
230
230
|
);
|
|
231
231
|
const NcHeaderMenu = __component__.exports;
|
|
232
232
|
exports.NcHeaderMenu = NcHeaderMenu;
|
|
233
|
-
//# sourceMappingURL=NcHeaderMenu-
|
|
233
|
+
//# sourceMappingURL=NcHeaderMenu-Bl4_eT2K.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NcHeaderMenu-Cmu-m_aM.cjs","sources":["../../src/components/NcHeaderMenu/NcHeaderMenu.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\nThis component is made to be used in the Nextcloud top header.\n\n```\n<template>\n\t<div id=\"nextcloud-header\">\n\t\t<NcHeaderMenu id=\"search\"\n\t\t\taria-label=\"Search\">\n\t\t\t<template #trigger>\n\t\t\t\t<Magnify />\n\t\t\t</template>\n\t\t\t<div>\n\t\t\t\t<NcTextField label=\"Search for files, comments, contacts …\"\n\t\t\t\tstyle=\"padding-inline: 8px;\"\n\t\t\t\ttype=\"search\"\n\t\t\t\t:value.sync=\"query\" />\n\t\t\t\t<NcEmptyContent\n\t\t\t\t\tname=\"Search\"\n\t\t\t\t\t:description=\"query ? `No results for '${query}'` : 'Start typing to search'\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Magnify />\n\t\t\t\t\t</template>\n\t\t\t\t</NcEmptyContent>\n\t\t\t</div>\n\t\t</NcHeaderMenu>\n\t</div>\n</template>\n<script>\nimport Magnify from 'vue-material-design-icons/Magnify'\n\nexport default {\n\tcomponents: {\n\t\tMagnify,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tquery: '',\n\t\t}\n\t},\n}\n</script>\n<style>\n#nextcloud-header {\n\tdisplay: flex;\n\tjustify-content: right;\n\tbackground-color: var(--color-primary);\n\theight: var(--header-height, 50px);\n\tpadding-inline-end: 12px;\n}\n</style>\n```\n</docs>\n\n<template>\n\t<component\n\t\t:is=\"wrapperTag\"\n\t\t:id=\"id\"\n\t\tref=\"headerMenu\"\n\t\tv-click-outside=\"clickOutsideConfig\"\n\t\t:aria-labelledby=\"isNav ? triggerId : null\"\n\t\t:class=\"{ 'header-menu--opened': opened }\"\n\t\tclass=\"header-menu\"\n\t\tv-on=\"listeners\">\n\t\t<!-- Trigger -->\n\t\t<NcButton\n\t\t\t:id=\"isNav ? triggerId : null\"\n\t\t\tref=\"trigger\"\n\t\t\tclass=\"header-menu__trigger\"\n\t\t\t:aria-controls=\"`header-menu-${id}`\"\n\t\t\t:aria-describedby=\"description ? descriptionId : null\"\n\t\t\t:aria-expanded=\"opened.toString()\"\n\t\t\t:aria-label=\"ariaLabel\"\n\t\t\tsize=\"large\"\n\t\t\tvariant=\"tertiary-no-background\"\n\t\t\t@click.prevent=\"toggleMenu\">\n\t\t\t<template #icon>\n\t\t\t\t<!-- @slot Icon trigger slot. Make sure the svg path\n\t\t\t\tis at least 16px. Usually mdi icon works at 20px -->\n\t\t\t\t<slot name=\"trigger\" />\n\t\t\t</template>\n\t\t</NcButton>\n\n\t\t<span\n\t\t\tv-if=\"description\"\n\t\t\t:id=\"descriptionId\"\n\t\t\tclass=\"header-menu__description hidden-visually\">\n\t\t\t{{ description }}\n\t\t</span>\n\n\t\t<!-- Visual triangle -->\n\t\t<div v-show=\"opened\" class=\"header-menu__carret\" />\n\n\t\t<!-- Menu opened content -->\n\t\t<div\n\t\t\tv-show=\"opened\"\n\t\t\t:id=\"`header-menu-${id}`\"\n\t\t\tclass=\"header-menu__wrapper\">\n\t\t\t<div ref=\"content\" class=\"header-menu__content\">\n\t\t\t\t<!-- @slot Main content -->\n\t\t\t\t<slot />\n\t\t\t</div>\n\t\t</div>\n\t</component>\n</template>\n\n<script>\nimport { vOnClickOutside as ClickOutside } from '@vueuse/components'\nimport { createFocusTrap } from 'focus-trap'\nimport { ref } from 'vue'\nimport { useTrapStackControl } from '../../composables/useTrapStackControl.ts'\nimport { clickOutsideOptions } from '../../mixins/index.js'\nimport { getTrapStack } from '../../utils/focusTrap.ts'\nimport GenRandomId from '../../utils/GenRandomId.js'\nimport NcButton from '../NcButton/index.js'\n\nexport default {\n\tname: 'NcHeaderMenu',\n\n\tcomponents: {\n\t\tNcButton,\n\t},\n\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\n\tmixins: [\n\t\tclickOutsideOptions,\n\t],\n\n\tprops: {\n\t\t/**\n\t\t * Unique id for this menu\n\t\t */\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * aria-label attribute of the menu open button\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Current menu open state\n\t\t */\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Pass `true` if the header menu is used for website navigation\n\t\t *\n\t\t * The wrapper tag will be set to `nav` and its `aria-labelledby`\n\t\t * will be associated with the menu open button\n\t\t */\n\t\tisNav: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Additional visually hidden description text for the menu\n\t\t * open button\n\t\t */\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\temits: [\n\t\t'close',\n\t\t'closed',\n\t\t'open',\n\t\t'opened',\n\t\t'update:open',\n\t\t'cancel',\n\t],\n\n\tsetup(props) {\n\t\tconst opened = ref(props.open)\n\n\t\t// When component has its own custom focus management\n\t\t// The global focus trap stack should be paused\n\t\tuseTrapStackControl(opened, {\n\t\t\tdisabled: () => !props.isNav,\n\t\t})\n\n\t\treturn {\n\t\t\topened,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfocusTrap: null,\n\t\t\tshortcutsDisabled: window.OCP?.Accessibility?.disableKeyboardShortcuts?.(),\n\t\t\ttriggerId: GenRandomId(),\n\t\t\tdescriptionId: GenRandomId(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\twrapperTag() {\n\t\t\treturn this.isNav ? 'nav' : 'div'\n\t\t},\n\n\t\tclickOutsideConfig() {\n\t\t\treturn [\n\t\t\t\tthis.closeMenu,\n\t\t\t\tthis.clickOutsideOptions,\n\t\t\t]\n\t\t},\n\n\t\tlisteners() {\n\t\t\tif (this.isNav) {\n\t\t\t\treturn {\n\t\t\t\t\tfocusout: this.onFocusOut,\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\t},\n\n\twatch: {\n\t\topen(open) {\n\t\t\tif (open) {\n\t\t\t\tthis.openMenu()\n\t\t\t} else {\n\t\t\t\tthis.closeMenu()\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tdocument.addEventListener('keydown', this.onKeyDown)\n\t},\n\n\tbeforeDestroy() {\n\t\tdocument.removeEventListener('keydown', this.onKeyDown)\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Toggle the current menu open state\n\t\t */\n\t\ttoggleMenu() {\n\t\t\t// Toggling current state\n\t\t\tif (!this.opened) {\n\t\t\t\tthis.openMenu()\n\t\t\t} else {\n\t\t\t\tthis.closeMenu()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Close the current menu\n\t\t *\n\t\t * @param {boolean} cancelled emit a cancel event instead of close\n\t\t */\n\t\tcloseMenu(cancelled = false) {\n\t\t\t// Close the menu\n\t\t\tthis.opened = false\n\t\t\tthis.$emit(cancelled ? 'cancel' : 'close')\n\t\t\tthis.$emit('update:open', false)\n\n\t\t\t// Kill focus trap\n\t\t\tthis.clearFocusTrap()\n\n\t\t\t// Wait for component to finish rendering\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$emit('closed')\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Open the current menu\n\t\t */\n\t\topenMenu() {\n\t\t\t// Open the menu\n\t\t\tthis.opened = true\n\t\t\tthis.$emit('open')\n\t\t\tthis.$emit('update:open', true)\n\n\t\t\t// Wait for component to finish rendering\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.useFocusTrap()\n\t\t\t\tthis.$emit('opened')\n\t\t\t})\n\t\t},\n\n\t\tonKeyDown(event) {\n\t\t\tif (this.shortcutsDisabled || !this.opened) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If escape have been pressed, we close\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tevent.preventDefault()\n\n\t\t\t\t/** User cancelled the menu by pressing escape */\n\t\t\t\tthis.closeMenu(true)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @param {FocusEvent} event The focus event\n\t\t */\n\t\tonFocusOut(event) {\n\t\t\tif (!this.$refs.headerMenu.contains(event.relatedTarget)) {\n\t\t\t\tthis.closeMenu()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add focus trap for accessibility.\n\t\t * Shall only be used when all children are mounted\n\t\t * and available in the DOM. We use $nextTick for that.\n\t\t */\n\t\tasync useFocusTrap() {\n\t\t\tif (this.isNav || this.focusTrap) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// Init focus trap\n\t\t\tconst contentContainer = this.$refs.content\n\t\t\tthis.focusTrap = createFocusTrap(contentContainer, {\n\t\t\t\tallowOutsideClick: true,\n\t\t\t\ttrapStack: getTrapStack(),\n\t\t\t\tfallbackFocus: this.$refs.trigger.$el,\n\t\t\t})\n\t\t\tthis.focusTrap.activate()\n\t\t},\n\n\t\tclearFocusTrap() {\n\t\t\tthis.focusTrap?.deactivate()\n\t\t\tthis.focusTrap = null\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// content inner and outer margin\n// Also used for menu top-right positioning\n$externalMargin: 8px;\n\n@use './header-menu__trigger.scss';\n\n.header-menu {\n\t&__wrapper {\n\t\tposition: fixed;\n\t\tz-index: 2000;\n\t\ttop: var(--header-height);\n\t\tinset-inline-end: 0;\n\t\tbox-sizing: border-box;\n\t\tmargin: 0 $externalMargin;\n\t\tborder-radius: 0 0 var(--border-radius) var(--border-radius);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-main-background);\n\n\t\tfilter: drop-shadow(0 1px 5px var(--color-box-shadow));\n\t}\n\n\t&__carret {\n\t\tposition: absolute;\n\t\tz-index: 2001; // Because __wrapper is 2000.\n\t\tbottom: 0;\n\t\tinset-inline-start: calc(50% - 10px);\n\t\twidth: 0;\n\t\theight: 0;\n\t\tcontent: ' ';\n\t\tpointer-events: none;\n\t\tborder: 10px solid transparent;\n\t\tborder-bottom-color: var(--color-main-background);\n\t}\n\n\t&__content {\n\t\toverflow: auto;\n\t\twidth: 350px;\n\t\tmax-width: calc(100vw - 2 * $externalMargin);\n\t\tmin-height: calc(var(--default-clickable-area) * 1.5);\n\t\tmax-height: calc(100vh - var(--header-height) * 2);\n\t\t:deep(.empty-content) {\n\t\t\tmargin: 12vh 10px;\n\t\t}\n\t}\n}\n</style>\n"],"names":["NcButton","ClickOutside","clickOutsideOptions","ref","useTrapStackControl","GenRandomId","createFocusTrap","getTrapStack"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"NcHeaderMenu-Bl4_eT2K.cjs","sources":["../../src/components/NcHeaderMenu/NcHeaderMenu.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2020 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\nThis component is made to be used in the Nextcloud top header.\n\n```\n<template>\n\t<div id=\"nextcloud-header\">\n\t\t<NcHeaderMenu id=\"search\"\n\t\t\taria-label=\"Search\">\n\t\t\t<template #trigger>\n\t\t\t\t<Magnify />\n\t\t\t</template>\n\t\t\t<div>\n\t\t\t\t<NcTextField label=\"Search for files, comments, contacts …\"\n\t\t\t\tstyle=\"padding-inline: 8px;\"\n\t\t\t\ttype=\"search\"\n\t\t\t\t:value.sync=\"query\" />\n\t\t\t\t<NcEmptyContent\n\t\t\t\t\tname=\"Search\"\n\t\t\t\t\t:description=\"query ? `No results for '${query}'` : 'Start typing to search'\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Magnify />\n\t\t\t\t\t</template>\n\t\t\t\t</NcEmptyContent>\n\t\t\t</div>\n\t\t</NcHeaderMenu>\n\t</div>\n</template>\n<script>\nimport Magnify from 'vue-material-design-icons/Magnify'\n\nexport default {\n\tcomponents: {\n\t\tMagnify,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tquery: '',\n\t\t}\n\t},\n}\n</script>\n<style>\n#nextcloud-header {\n\tdisplay: flex;\n\tjustify-content: right;\n\tbackground-color: var(--color-primary);\n\theight: var(--header-height, 50px);\n\tpadding-inline-end: 12px;\n}\n</style>\n```\n</docs>\n\n<template>\n\t<component\n\t\t:is=\"wrapperTag\"\n\t\t:id=\"id\"\n\t\tref=\"headerMenu\"\n\t\tv-click-outside=\"clickOutsideConfig\"\n\t\t:aria-labelledby=\"isNav ? triggerId : null\"\n\t\t:class=\"{ 'header-menu--opened': opened }\"\n\t\tclass=\"header-menu\"\n\t\tv-on=\"listeners\">\n\t\t<!-- Trigger -->\n\t\t<NcButton\n\t\t\t:id=\"isNav ? triggerId : null\"\n\t\t\tref=\"trigger\"\n\t\t\tclass=\"header-menu__trigger\"\n\t\t\t:aria-controls=\"`header-menu-${id}`\"\n\t\t\t:aria-describedby=\"description ? descriptionId : null\"\n\t\t\t:aria-expanded=\"opened.toString()\"\n\t\t\t:aria-label=\"ariaLabel\"\n\t\t\tsize=\"large\"\n\t\t\tvariant=\"tertiary-no-background\"\n\t\t\t@click.prevent=\"toggleMenu\">\n\t\t\t<template #icon>\n\t\t\t\t<!-- @slot Icon trigger slot. Make sure the svg path\n\t\t\t\tis at least 16px. Usually mdi icon works at 20px -->\n\t\t\t\t<slot name=\"trigger\" />\n\t\t\t</template>\n\t\t</NcButton>\n\n\t\t<span\n\t\t\tv-if=\"description\"\n\t\t\t:id=\"descriptionId\"\n\t\t\tclass=\"header-menu__description hidden-visually\">\n\t\t\t{{ description }}\n\t\t</span>\n\n\t\t<!-- Visual triangle -->\n\t\t<div v-show=\"opened\" class=\"header-menu__carret\" />\n\n\t\t<!-- Menu opened content -->\n\t\t<div\n\t\t\tv-show=\"opened\"\n\t\t\t:id=\"`header-menu-${id}`\"\n\t\t\tclass=\"header-menu__wrapper\">\n\t\t\t<div ref=\"content\" class=\"header-menu__content\">\n\t\t\t\t<!-- @slot Main content -->\n\t\t\t\t<slot />\n\t\t\t</div>\n\t\t</div>\n\t</component>\n</template>\n\n<script>\nimport { vOnClickOutside as ClickOutside } from '@vueuse/components'\nimport { createFocusTrap } from 'focus-trap'\nimport { ref } from 'vue'\nimport { useTrapStackControl } from '../../composables/useTrapStackControl.ts'\nimport { clickOutsideOptions } from '../../mixins/index.js'\nimport { getTrapStack } from '../../utils/focusTrap.ts'\nimport GenRandomId from '../../utils/GenRandomId.js'\nimport NcButton from '../NcButton/index.js'\n\nexport default {\n\tname: 'NcHeaderMenu',\n\n\tcomponents: {\n\t\tNcButton,\n\t},\n\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\n\tmixins: [\n\t\tclickOutsideOptions,\n\t],\n\n\tprops: {\n\t\t/**\n\t\t * Unique id for this menu\n\t\t */\n\t\tid: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\n\t\t/**\n\t\t * aria-label attribute of the menu open button\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Current menu open state\n\t\t */\n\t\topen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Pass `true` if the header menu is used for website navigation\n\t\t *\n\t\t * The wrapper tag will be set to `nav` and its `aria-labelledby`\n\t\t * will be associated with the menu open button\n\t\t */\n\t\tisNav: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Additional visually hidden description text for the menu\n\t\t * open button\n\t\t */\n\t\tdescription: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\temits: [\n\t\t'close',\n\t\t'closed',\n\t\t'open',\n\t\t'opened',\n\t\t'update:open',\n\t\t'cancel',\n\t],\n\n\tsetup(props) {\n\t\tconst opened = ref(props.open)\n\n\t\t// When component has its own custom focus management\n\t\t// The global focus trap stack should be paused\n\t\tuseTrapStackControl(opened, {\n\t\t\tdisabled: () => !props.isNav,\n\t\t})\n\n\t\treturn {\n\t\t\topened,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tfocusTrap: null,\n\t\t\tshortcutsDisabled: window.OCP?.Accessibility?.disableKeyboardShortcuts?.(),\n\t\t\ttriggerId: GenRandomId(),\n\t\t\tdescriptionId: GenRandomId(),\n\t\t}\n\t},\n\n\tcomputed: {\n\t\twrapperTag() {\n\t\t\treturn this.isNav ? 'nav' : 'div'\n\t\t},\n\n\t\tclickOutsideConfig() {\n\t\t\treturn [\n\t\t\t\tthis.closeMenu,\n\t\t\t\tthis.clickOutsideOptions,\n\t\t\t]\n\t\t},\n\n\t\tlisteners() {\n\t\t\tif (this.isNav) {\n\t\t\t\treturn {\n\t\t\t\t\tfocusout: this.onFocusOut,\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\t},\n\n\twatch: {\n\t\topen(open) {\n\t\t\tif (open) {\n\t\t\t\tthis.openMenu()\n\t\t\t} else {\n\t\t\t\tthis.closeMenu()\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tdocument.addEventListener('keydown', this.onKeyDown)\n\t},\n\n\tbeforeDestroy() {\n\t\tdocument.removeEventListener('keydown', this.onKeyDown)\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Toggle the current menu open state\n\t\t */\n\t\ttoggleMenu() {\n\t\t\t// Toggling current state\n\t\t\tif (!this.opened) {\n\t\t\t\tthis.openMenu()\n\t\t\t} else {\n\t\t\t\tthis.closeMenu()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Close the current menu\n\t\t *\n\t\t * @param {boolean} cancelled emit a cancel event instead of close\n\t\t */\n\t\tcloseMenu(cancelled = false) {\n\t\t\t// Close the menu\n\t\t\tthis.opened = false\n\t\t\tthis.$emit(cancelled ? 'cancel' : 'close')\n\t\t\tthis.$emit('update:open', false)\n\n\t\t\t// Kill focus trap\n\t\t\tthis.clearFocusTrap()\n\n\t\t\t// Wait for component to finish rendering\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$emit('closed')\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Open the current menu\n\t\t */\n\t\topenMenu() {\n\t\t\t// Open the menu\n\t\t\tthis.opened = true\n\t\t\tthis.$emit('open')\n\t\t\tthis.$emit('update:open', true)\n\n\t\t\t// Wait for component to finish rendering\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.useFocusTrap()\n\t\t\t\tthis.$emit('opened')\n\t\t\t})\n\t\t},\n\n\t\tonKeyDown(event) {\n\t\t\tif (this.shortcutsDisabled || !this.opened) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// If escape have been pressed, we close\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tevent.preventDefault()\n\n\t\t\t\t/** User cancelled the menu by pressing escape */\n\t\t\t\tthis.closeMenu(true)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * @param {FocusEvent} event The focus event\n\t\t */\n\t\tonFocusOut(event) {\n\t\t\tif (!this.$refs.headerMenu.contains(event.relatedTarget)) {\n\t\t\t\tthis.closeMenu()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add focus trap for accessibility.\n\t\t * Shall only be used when all children are mounted\n\t\t * and available in the DOM. We use $nextTick for that.\n\t\t */\n\t\tasync useFocusTrap() {\n\t\t\tif (this.isNav || this.focusTrap) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// Init focus trap\n\t\t\tconst contentContainer = this.$refs.content\n\t\t\tthis.focusTrap = createFocusTrap(contentContainer, {\n\t\t\t\tallowOutsideClick: true,\n\t\t\t\ttrapStack: getTrapStack(),\n\t\t\t\tfallbackFocus: this.$refs.trigger.$el,\n\t\t\t})\n\t\t\tthis.focusTrap.activate()\n\t\t},\n\n\t\tclearFocusTrap() {\n\t\t\tthis.focusTrap?.deactivate()\n\t\t\tthis.focusTrap = null\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// content inner and outer margin\n// Also used for menu top-right positioning\n$externalMargin: 8px;\n\n@use './header-menu__trigger.scss';\n\n.header-menu {\n\t&__wrapper {\n\t\tposition: fixed;\n\t\tz-index: 2000;\n\t\ttop: var(--header-height);\n\t\tinset-inline-end: 0;\n\t\tbox-sizing: border-box;\n\t\tmargin: 0 $externalMargin;\n\t\tborder-radius: 0 0 var(--border-radius) var(--border-radius);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-main-background);\n\n\t\tfilter: drop-shadow(0 1px 5px var(--color-box-shadow));\n\t}\n\n\t&__carret {\n\t\tposition: absolute;\n\t\tz-index: 2001; // Because __wrapper is 2000.\n\t\tbottom: 0;\n\t\tinset-inline-start: calc(50% - 10px);\n\t\twidth: 0;\n\t\theight: 0;\n\t\tcontent: ' ';\n\t\tpointer-events: none;\n\t\tborder: 10px solid transparent;\n\t\tborder-bottom-color: var(--color-main-background);\n\t}\n\n\t&__content {\n\t\toverflow: auto;\n\t\twidth: 350px;\n\t\tmax-width: calc(100vw - 2 * $externalMargin);\n\t\tmin-height: calc(var(--default-clickable-area) * 1.5);\n\t\tmax-height: calc(100vh - var(--header-height) * 2);\n\t\t:deep(.empty-content) {\n\t\t\tmargin: 12vh 10px;\n\t\t}\n\t}\n}\n</style>\n"],"names":["NcButton","ClickOutside","clickOutsideOptions","ref","useTrapStackControl","GenRandomId","createFocusTrap","getTrapStack"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import '../assets/NcHotkey-9k8cxWO5.css';
|
|
2
2
|
import { defineComponent, computed } from "vue";
|
|
3
|
-
import { N as NcKbd } from "./NcKbd-
|
|
3
|
+
import { N as NcKbd } from "./NcKbd-GB8FuSAU.mjs";
|
|
4
4
|
import { n as normalizeComponent } from "./_plugin-vue2_normalizer-DU4iP6Vu.mjs";
|
|
5
5
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
6
6
|
__name: "NcHotkey",
|
|
@@ -57,4 +57,4 @@ const NcHotkey = __component__.exports;
|
|
|
57
57
|
export {
|
|
58
58
|
NcHotkey as N
|
|
59
59
|
};
|
|
60
|
-
//# sourceMappingURL=NcHotkey-
|
|
60
|
+
//# sourceMappingURL=NcHotkey-CLLtt9LG.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NcHotkey-
|
|
1
|
+
{"version":3,"file":"NcHotkey-CLLtt9LG.mjs","sources":["../../src/components/NcHotkey/NcHotkey.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport NcKbd from '../NcKbd/NcKbd.vue'\n\nconst props = withDefaults(defineProps<{\n\t/**\n\t * Label for the hotkey\n\t */\n\tlabel?: string\n\t/**\n\t * Hotkey combination string separated by space, for example, `Control Alt T` or `F2` (see `<NcKbd>` for supported key names)\n\t */\n\thotkey?: string\n}>(), {\n\tlabel: undefined,\n\thotkey: undefined,\n})\n\nconst symbols = computed(() => {\n\treturn props.hotkey?.split(/\\s+/).map((s) => s.trim())\n})\n\nconst NO_LABEL_WARNING = '⚠️ NcHotKey must have a label or slot content'\n</script>\n\n<template>\n\t<li :class=\"$style.hotkey\">\n\t\t<span role=\"term\" :class=\"$style.hotkey__keys\">\n\t\t\t<!-- @slot Custom hotkey content for an advanced hotkey layout with \"NcKbd\" components or other custom content -->\n\t\t\t<slot name=\"hotkey\">\n\t\t\t\t<NcKbd v-for=\"(symbol, index) in symbols\" :key=\"index\" :symbol=\"symbol\" />\n\t\t\t</slot>\n\t\t</span>\n\t\t<span role=\"definition\" :class=\"$style.hotkey__label\">\n\t\t\t<!-- @slot Custom label content -->\n\t\t\t<slot>\n\t\t\t\t{{ label || NO_LABEL_WARNING }}\n\t\t\t</slot>\n\t\t</span>\n\t</li>\n</template>\n\n<style lang=\"scss\" module>\n.hotkey {\n\t--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline));\n\tdisplay: flex;\n\tflex-direction: row-reverse;\n\talign-items: stretch;\n\tpadding-inline: var(--form-element-label-offset);\n\n\t&:first-child {\n\t\t.hotkey__label,\n\t\t.hotkey__keys {\n\t\t\tborder-block-start: none;\n\t\t}\n\t}\n\n}\n\n.hotkey__label,\n.hotkey__keys {\n\tdisplay: flex;\n\talign-items: center;\n\tpadding-block: calc(2 * var(--default-grid-baseline));\n\tborder-block-start: 1px solid var(--color-border);\n}\n\n.hotkey__label {\n\tflex: 1 1 200px;\n}\n\n.hotkey__keys {\n\tflex: 1 1 auto;\n\tflex-wrap: wrap;\n\tjustify-content: end;\n\trow-gap: calc(1 * var(--default-grid-baseline));\n}\n</style>\n"],"names":[],"mappings":";;;;;;;;;;;AAuBA,UAAM,UAAU,SAAS,MAAM;AAC9B,aAAO,MAAM,QAAQ,MAAM,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM;AAAA,IACtD,CAAC;AAED,UAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
require('../assets/NcHotkey-9k8cxWO5.css');
|
|
2
2
|
"use strict";
|
|
3
3
|
const Vue = require("vue");
|
|
4
|
-
const NcKbd = require("./NcKbd-
|
|
4
|
+
const NcKbd = require("./NcKbd-DbjnDaJH.cjs");
|
|
5
5
|
const _pluginVue2_normalizer = require("./_plugin-vue2_normalizer-V0q-tHlQ.cjs");
|
|
6
6
|
const _sfc_main = /* @__PURE__ */ Vue.defineComponent({
|
|
7
7
|
__name: "NcHotkey",
|
|
@@ -56,4 +56,4 @@ var __component__ = /* @__PURE__ */ _pluginVue2_normalizer.normalizeComponent(
|
|
|
56
56
|
);
|
|
57
57
|
const NcHotkey = __component__.exports;
|
|
58
58
|
exports.NcHotkey = NcHotkey;
|
|
59
|
-
//# sourceMappingURL=NcHotkey-
|
|
59
|
+
//# sourceMappingURL=NcHotkey-vKyDZ2a7.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NcHotkey-
|
|
1
|
+
{"version":3,"file":"NcHotkey-vKyDZ2a7.cjs","sources":["../../src/components/NcHotkey/NcHotkey.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2025 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue'\nimport NcKbd from '../NcKbd/NcKbd.vue'\n\nconst props = withDefaults(defineProps<{\n\t/**\n\t * Label for the hotkey\n\t */\n\tlabel?: string\n\t/**\n\t * Hotkey combination string separated by space, for example, `Control Alt T` or `F2` (see `<NcKbd>` for supported key names)\n\t */\n\thotkey?: string\n}>(), {\n\tlabel: undefined,\n\thotkey: undefined,\n})\n\nconst symbols = computed(() => {\n\treturn props.hotkey?.split(/\\s+/).map((s) => s.trim())\n})\n\nconst NO_LABEL_WARNING = '⚠️ NcHotKey must have a label or slot content'\n</script>\n\n<template>\n\t<li :class=\"$style.hotkey\">\n\t\t<span role=\"term\" :class=\"$style.hotkey__keys\">\n\t\t\t<!-- @slot Custom hotkey content for an advanced hotkey layout with \"NcKbd\" components or other custom content -->\n\t\t\t<slot name=\"hotkey\">\n\t\t\t\t<NcKbd v-for=\"(symbol, index) in symbols\" :key=\"index\" :symbol=\"symbol\" />\n\t\t\t</slot>\n\t\t</span>\n\t\t<span role=\"definition\" :class=\"$style.hotkey__label\">\n\t\t\t<!-- @slot Custom label content -->\n\t\t\t<slot>\n\t\t\t\t{{ label || NO_LABEL_WARNING }}\n\t\t\t</slot>\n\t\t</span>\n\t</li>\n</template>\n\n<style lang=\"scss\" module>\n.hotkey {\n\t--form-element-label-offset: calc(var(--border-radius-element) + var(--default-grid-baseline));\n\tdisplay: flex;\n\tflex-direction: row-reverse;\n\talign-items: stretch;\n\tpadding-inline: var(--form-element-label-offset);\n\n\t&:first-child {\n\t\t.hotkey__label,\n\t\t.hotkey__keys {\n\t\t\tborder-block-start: none;\n\t\t}\n\t}\n\n}\n\n.hotkey__label,\n.hotkey__keys {\n\tdisplay: flex;\n\talign-items: center;\n\tpadding-block: calc(2 * var(--default-grid-baseline));\n\tborder-block-start: 1px solid var(--color-border);\n}\n\n.hotkey__label {\n\tflex: 1 1 200px;\n}\n\n.hotkey__keys {\n\tflex: 1 1 auto;\n\tflex-wrap: wrap;\n\tjustify-content: end;\n\trow-gap: calc(1 * var(--default-grid-baseline));\n}\n</style>\n"],"names":["computed"],"mappings":";;;;;;;;;;;;AAuBA,UAAM,UAAUA,IAAAA,SAAS,MAAM;AAC9B,aAAO,MAAM,QAAQ,MAAM,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM;AAAA,IACtD,CAAC;AAED,UAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|