@nextcloud/vue 8.9.0 → 8.10.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 +34 -0
- package/README.md +4 -2
- 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/NcAppNavigationList.cjs +2 -2
- package/dist/Components/NcAppNavigationList.cjs.map +1 -1
- package/dist/Components/NcAppNavigationList.mjs +4 -4
- package/dist/Components/NcAppNavigationList.mjs.map +1 -1
- package/dist/Components/NcAppNavigationNewItem.cjs +1 -1
- package/dist/Components/NcAppNavigationNewItem.mjs +1 -1
- package/dist/Components/NcAppNavigationSettings.cjs +1 -1
- package/dist/Components/NcAppNavigationSettings.mjs +1 -1
- package/dist/Components/NcAppNavigationToggle.cjs +1 -1
- package/dist/Components/NcAppNavigationToggle.mjs +1 -1
- package/dist/Components/NcAppSettingsDialog.cjs +1 -1
- package/dist/Components/NcAppSettingsDialog.mjs +1 -1
- package/dist/Components/NcAppSidebar.cjs +1 -1
- package/dist/Components/NcAppSidebar.mjs +1 -1
- package/dist/Components/NcAvatar.cjs +1 -1
- package/dist/Components/NcAvatar.mjs +1 -1
- package/dist/Components/NcBreadcrumb.cjs +1 -1
- package/dist/Components/NcBreadcrumb.mjs +1 -1
- package/dist/Components/NcBreadcrumbs.cjs +1 -1
- package/dist/Components/NcBreadcrumbs.mjs +1 -1
- package/dist/Components/NcCheckboxRadioSwitch.cjs +1 -1
- package/dist/Components/NcCheckboxRadioSwitch.mjs +1 -1
- package/dist/Components/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/NcDateTime.cjs +1 -1
- package/dist/Components/NcDateTime.mjs +1 -1
- package/dist/Components/NcDateTimePicker.cjs +2 -2
- package/dist/Components/NcDateTimePicker.mjs +4 -4
- package/dist/Components/NcDateTimePickerNative.cjs +1 -1
- package/dist/Components/NcDateTimePickerNative.mjs +1 -1
- package/dist/Components/NcEmojiPicker.cjs +1 -1
- package/dist/Components/NcEmojiPicker.mjs +1 -1
- package/dist/Components/NcListItem.cjs +1 -1
- package/dist/Components/NcListItem.mjs +1 -1
- package/dist/Components/NcListItemIcon.cjs +1 -1
- package/dist/Components/NcListItemIcon.mjs +1 -1
- package/dist/Components/NcModal.cjs +1 -1
- package/dist/Components/NcModal.mjs +3 -3
- package/dist/Components/NcPasswordField.cjs +1 -1
- package/dist/Components/NcPasswordField.mjs +1 -1
- package/dist/Components/NcRelatedResourcesPanel.cjs +1 -1
- package/dist/Components/NcRelatedResourcesPanel.mjs +1 -1
- package/dist/Components/NcRichContenteditable.cjs +1 -1
- package/dist/Components/NcRichContenteditable.mjs +2 -2
- package/dist/Components/NcRichText.cjs +1 -1
- 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/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/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/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/Mixins/richEditor.cjs +1 -1
- package/dist/Mixins/richEditor.mjs +1 -1
- package/dist/assets/{NcActions-CEbgl0_n.css → NcActions-DL7ZZIjx.css} +12 -12
- package/dist/assets/{NcAppContent-Cv8rRTyy.css → NcAppContent-DcXMrsBz.css} +32 -23
- package/dist/assets/{NcAppNavigation-D4ZBCJrI.css → NcAppNavigation-BgGJuJPv.css} +15 -19
- package/dist/assets/{NcAppNavigationList-Bj9PwL4X.css → NcAppNavigationList-CUnaMQQD.css} +4 -4
- package/dist/assets/{NcDateTimePicker-BChLYJ5X.css → NcDateTimePicker-DR7jRFm4.css} +10 -10
- package/dist/assets/NcListItem-DLFj1G31.css +175 -0
- package/dist/assets/{NcRelatedResourcesPanel-COW9gzml.css → NcRelatedResourcesPanel-D6K7OQFJ.css} +19 -13
- package/dist/assets/{NcRichContenteditable-CtbqXSHe.css → NcRichContenteditable-DvTdg1DO.css} +12 -12
- package/dist/assets/{NcRichText-BMe-xENJ.css → NcRichText-D2BBsB-_.css} +65 -65
- package/dist/assets/{referencePickerModal-C1KJzICb.css → referencePickerModal-DZ7qJeiJ.css} +19 -19
- package/dist/chunks/{GenColors-vI-bx9ZY.cjs → GenColors-DQEIzxqb.cjs} +1 -1
- package/dist/chunks/{GenColors-vI-bx9ZY.cjs.map → GenColors-DQEIzxqb.cjs.map} +1 -1
- package/dist/chunks/{GenColors-BteFtwOv.mjs → GenColors-SIdMEx1i.mjs} +1 -1
- package/dist/chunks/{GenColors-BteFtwOv.mjs.map → GenColors-SIdMEx1i.mjs.map} +1 -1
- package/dist/chunks/{NcActionButtonGroup-BdxkXNwc.cjs → NcActionButtonGroup-B47_9Jpc.cjs} +1 -1
- package/dist/chunks/{NcActionButtonGroup-BdxkXNwc.cjs.map → NcActionButtonGroup-B47_9Jpc.cjs.map} +1 -1
- package/dist/chunks/{NcActionButtonGroup-SS3PkUD2.mjs → NcActionButtonGroup-D6_CIr2e.mjs} +1 -1
- package/dist/chunks/{NcActionButtonGroup-SS3PkUD2.mjs.map → NcActionButtonGroup-D6_CIr2e.mjs.map} +1 -1
- package/dist/chunks/{NcActionInput-D308ZntG.cjs → NcActionInput-BPPLjfW5.cjs} +1 -1
- package/dist/chunks/{NcActionInput-D308ZntG.cjs.map → NcActionInput-BPPLjfW5.cjs.map} +1 -1
- package/dist/chunks/{NcActionInput-BHq3Le0q.mjs → NcActionInput-GZcIfn-2.mjs} +4 -4
- package/dist/chunks/{NcActionInput-BHq3Le0q.mjs.map → NcActionInput-GZcIfn-2.mjs.map} +1 -1
- package/dist/chunks/{NcActions-Dfkog_G0.cjs → NcActions-B049TCK5.cjs} +144 -85
- package/dist/chunks/NcActions-B049TCK5.cjs.map +1 -0
- package/dist/chunks/{NcActions-CpU9WXzM.mjs → NcActions-D2wvJbMw.mjs} +144 -85
- package/dist/chunks/NcActions-D2wvJbMw.mjs.map +1 -0
- package/dist/chunks/{NcAppContent-BDwOdxJE.mjs → NcAppContent-CUnQ4EVa.mjs} +67 -40
- package/dist/chunks/NcAppContent-CUnQ4EVa.mjs.map +1 -0
- package/dist/chunks/{NcAppContent-kqYjKpzU.cjs → NcAppContent-CuOJJPbt.cjs} +59 -32
- package/dist/chunks/NcAppContent-CuOJJPbt.cjs.map +1 -0
- package/dist/chunks/{NcAppNavigation-BRtyTvKt.mjs → NcAppNavigation-Dl1g_orJ.mjs} +26 -24
- package/dist/chunks/NcAppNavigation-Dl1g_orJ.mjs.map +1 -0
- package/dist/chunks/{NcAppNavigation-DMxORgkV.cjs → NcAppNavigation-DtxPGDOf.cjs} +19 -18
- package/dist/chunks/NcAppNavigation-DtxPGDOf.cjs.map +1 -0
- package/dist/chunks/{NcAppNavigationCaption-BKchbDsJ.cjs → NcAppNavigationCaption-BefNtbTx.cjs} +1 -1
- package/dist/chunks/{NcAppNavigationCaption-BKchbDsJ.cjs.map → NcAppNavigationCaption-BefNtbTx.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationCaption-DsT6O4Hx.mjs → NcAppNavigationCaption-g4NsNSvL.mjs} +1 -1
- package/dist/chunks/{NcAppNavigationCaption-DsT6O4Hx.mjs.map → NcAppNavigationCaption-g4NsNSvL.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationItem-bjPcEx5D.mjs → NcAppNavigationItem-BSV20azN.mjs} +3 -3
- package/dist/chunks/{NcAppNavigationItem-bjPcEx5D.mjs.map → NcAppNavigationItem-BSV20azN.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationItem-CABF2T4q.cjs → NcAppNavigationItem-DVlpQH-e.cjs} +1 -1
- package/dist/chunks/{NcAppNavigationItem-CABF2T4q.cjs.map → NcAppNavigationItem-DVlpQH-e.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationNewItem-BHCgaCoK.mjs → NcAppNavigationNewItem-C7PviElx.mjs} +1 -1
- package/dist/chunks/{NcAppNavigationNewItem-BHCgaCoK.mjs.map → NcAppNavigationNewItem-C7PviElx.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationNewItem-t45tM5u1.cjs → NcAppNavigationNewItem-DG-KzABc.cjs} +1 -1
- package/dist/chunks/{NcAppNavigationNewItem-t45tM5u1.cjs.map → NcAppNavigationNewItem-DG-KzABc.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationSettings-CBeUiVLk.cjs → NcAppNavigationSettings-CoutbNdC.cjs} +1 -1
- package/dist/chunks/{NcAppNavigationSettings-CBeUiVLk.cjs.map → NcAppNavigationSettings-CoutbNdC.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationSettings-BQD7JA4m.mjs → NcAppNavigationSettings-D8MkJD-a.mjs} +1 -1
- package/dist/chunks/{NcAppNavigationSettings-BQD7JA4m.mjs.map → NcAppNavigationSettings-D8MkJD-a.mjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationToggle-DDChOnAq.cjs → NcAppNavigationToggle-ACf6tmPq.cjs} +1 -1
- package/dist/chunks/{NcAppNavigationToggle-DDChOnAq.cjs.map → NcAppNavigationToggle-ACf6tmPq.cjs.map} +1 -1
- package/dist/chunks/{NcAppNavigationToggle-BZxbkhCr.mjs → NcAppNavigationToggle-n8ES2H5d.mjs} +1 -1
- package/dist/chunks/{NcAppNavigationToggle-BZxbkhCr.mjs.map → NcAppNavigationToggle-n8ES2H5d.mjs.map} +1 -1
- package/dist/chunks/{NcAppSettingsDialog-DeFBTD2J.mjs → NcAppSettingsDialog-CmQPplb5.mjs} +1 -1
- package/dist/chunks/{NcAppSettingsDialog-DeFBTD2J.mjs.map → NcAppSettingsDialog-CmQPplb5.mjs.map} +1 -1
- package/dist/chunks/{NcAppSettingsDialog-EUys9Os_.cjs → NcAppSettingsDialog-DYr9eXTI.cjs} +1 -1
- package/dist/chunks/{NcAppSettingsDialog-EUys9Os_.cjs.map → NcAppSettingsDialog-DYr9eXTI.cjs.map} +1 -1
- package/dist/chunks/{NcAppSidebar-Du-IRmEO.cjs → NcAppSidebar-BsbmJ5H_.cjs} +2 -2
- package/dist/chunks/{NcAppSidebar-Du-IRmEO.cjs.map → NcAppSidebar-BsbmJ5H_.cjs.map} +1 -1
- package/dist/chunks/{NcAppSidebar-CdSvRI6l.mjs → NcAppSidebar-CSjqjYTb.mjs} +3 -3
- package/dist/chunks/{NcAppSidebar-CdSvRI6l.mjs.map → NcAppSidebar-CSjqjYTb.mjs.map} +1 -1
- package/dist/chunks/{NcAvatar-e0M-nnF6.mjs → NcAvatar-BdtXzaRJ.mjs} +4 -4
- package/dist/chunks/{NcAvatar-e0M-nnF6.mjs.map → NcAvatar-BdtXzaRJ.mjs.map} +1 -1
- package/dist/chunks/{NcAvatar-BEet_8fB.cjs → NcAvatar-Bn9oT7sS.cjs} +2 -2
- package/dist/chunks/{NcAvatar-BEet_8fB.cjs.map → NcAvatar-Bn9oT7sS.cjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumb-CVMyBckA.mjs → NcBreadcrumb-D8yGqnFJ.mjs} +1 -1
- package/dist/chunks/{NcBreadcrumb-CVMyBckA.mjs.map → NcBreadcrumb-D8yGqnFJ.mjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumb-DVXsgQkE.cjs → NcBreadcrumb-DApyHRGZ.cjs} +1 -1
- package/dist/chunks/{NcBreadcrumb-DVXsgQkE.cjs.map → NcBreadcrumb-DApyHRGZ.cjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumbs-DkgzO9f5.cjs → NcBreadcrumbs-BoA2lxaY.cjs} +1 -1
- package/dist/chunks/{NcBreadcrumbs-DkgzO9f5.cjs.map → NcBreadcrumbs-BoA2lxaY.cjs.map} +1 -1
- package/dist/chunks/{NcBreadcrumbs-DqRU0BfB.mjs → NcBreadcrumbs-DVyfjkgH.mjs} +2 -2
- package/dist/chunks/{NcBreadcrumbs-DqRU0BfB.mjs.map → NcBreadcrumbs-DVyfjkgH.mjs.map} +1 -1
- package/dist/chunks/{NcCheckboxRadioSwitch-Dt96X5bR.cjs → NcCheckboxRadioSwitch-BEYj-jaN.cjs} +2 -2
- package/dist/chunks/{NcCheckboxRadioSwitch-Dt96X5bR.cjs.map → NcCheckboxRadioSwitch-BEYj-jaN.cjs.map} +1 -1
- package/dist/chunks/{NcCheckboxRadioSwitch-7Yib86y3.mjs → NcCheckboxRadioSwitch-DiNnRbJI.mjs} +2 -2
- package/dist/chunks/{NcCheckboxRadioSwitch-7Yib86y3.mjs.map → NcCheckboxRadioSwitch-DiNnRbJI.mjs.map} +1 -1
- package/dist/chunks/{NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-CKROuACA.mjs → NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-DMJGZndr.mjs} +1 -1
- package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-DMJGZndr.mjs.map +1 -0
- package/dist/chunks/{NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-C1WLneXl.cjs → NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-Dh3GUSYj.cjs} +1 -1
- package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-Dh3GUSYj.cjs.map +1 -0
- package/dist/chunks/{NcColorPicker-BVqwn1Fr.cjs → NcColorPicker-Acx2mFFG.cjs} +1 -1
- package/dist/chunks/{NcColorPicker-BVqwn1Fr.cjs.map → NcColorPicker-Acx2mFFG.cjs.map} +1 -1
- package/dist/chunks/{NcColorPicker-Dkxeigs5.mjs → NcColorPicker-sge8Yr9m.mjs} +2 -2
- package/dist/chunks/{NcColorPicker-Dkxeigs5.mjs.map → NcColorPicker-sge8Yr9m.mjs.map} +1 -1
- package/dist/chunks/{NcContent-Bmeq8hLO.cjs → NcContent-COHfXhM3.cjs} +1 -1
- package/dist/chunks/{NcContent-Bmeq8hLO.cjs.map → NcContent-COHfXhM3.cjs.map} +1 -1
- package/dist/chunks/{NcContent-COIw1X7V.mjs → NcContent-kTlEGtKt.mjs} +1 -1
- package/dist/chunks/{NcContent-COIw1X7V.mjs.map → NcContent-kTlEGtKt.mjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidget-Cxz_n1AN.mjs → NcDashboardWidget-CL7e1yAw.mjs} +3 -3
- package/dist/chunks/{NcDashboardWidget-Cxz_n1AN.mjs.map → NcDashboardWidget-CL7e1yAw.mjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidget-DArU3jbL.cjs → NcDashboardWidget-CyrKw12p.cjs} +1 -1
- package/dist/chunks/{NcDashboardWidget-DArU3jbL.cjs.map → NcDashboardWidget-CyrKw12p.cjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidgetItem-BAhzcFfs.cjs → NcDashboardWidgetItem-C6Npm5U9.cjs} +1 -1
- package/dist/chunks/{NcDashboardWidgetItem-BAhzcFfs.cjs.map → NcDashboardWidgetItem-C6Npm5U9.cjs.map} +1 -1
- package/dist/chunks/{NcDashboardWidgetItem-BV2tuXoj.mjs → NcDashboardWidgetItem-Cq-HAbIB.mjs} +2 -2
- package/dist/chunks/{NcDashboardWidgetItem-BV2tuXoj.mjs.map → NcDashboardWidgetItem-Cq-HAbIB.mjs.map} +1 -1
- package/dist/chunks/{NcDateTime-B0oaElJX.mjs → NcDateTime-B1X22iSf.mjs} +1 -1
- package/dist/chunks/{NcDateTime-B0oaElJX.mjs.map → NcDateTime-B1X22iSf.mjs.map} +1 -1
- package/dist/chunks/{NcDateTime-Dl0XztMt.cjs → NcDateTime-CyKYSWsT.cjs} +1 -1
- package/dist/chunks/{NcDateTime-Dl0XztMt.cjs.map → NcDateTime-CyKYSWsT.cjs.map} +1 -1
- package/dist/chunks/{NcEmojiPicker-BCdoIKXJ.cjs → NcEmojiPicker-DuZc08BD.cjs} +1 -1
- package/dist/chunks/{NcEmojiPicker-BCdoIKXJ.cjs.map → NcEmojiPicker-DuZc08BD.cjs.map} +1 -1
- package/dist/chunks/{NcEmojiPicker-fRx7dTTf.mjs → NcEmojiPicker-r6eAlCKl.mjs} +4 -4
- package/dist/chunks/{NcEmojiPicker-fRx7dTTf.mjs.map → NcEmojiPicker-r6eAlCKl.mjs.map} +1 -1
- package/dist/chunks/{NcInputConfirmCancel-DpgXTGmT.cjs → NcInputConfirmCancel-DAaMkW9I.cjs} +1 -1
- package/dist/chunks/{NcInputConfirmCancel-DpgXTGmT.cjs.map → NcInputConfirmCancel-DAaMkW9I.cjs.map} +1 -1
- package/dist/chunks/{NcInputConfirmCancel-BXZqwqY6.mjs → NcInputConfirmCancel-fwl4-RD4.mjs} +1 -1
- package/dist/chunks/{NcInputConfirmCancel-BXZqwqY6.mjs.map → NcInputConfirmCancel-fwl4-RD4.mjs.map} +1 -1
- package/dist/chunks/{NcListItem-wxqWqs4s.cjs → NcListItem-8heZoa83.cjs} +28 -23
- package/dist/chunks/NcListItem-8heZoa83.cjs.map +1 -0
- package/dist/chunks/{NcListItem-C5oWvAZQ.mjs → NcListItem-DxnCJdGU.mjs} +27 -22
- package/dist/chunks/NcListItem-DxnCJdGU.mjs.map +1 -0
- package/dist/chunks/{NcListItemIcon-DfdkSCin.cjs → NcListItemIcon-D5NW3bY2.cjs} +1 -1
- package/dist/chunks/{NcListItemIcon-DfdkSCin.cjs.map → NcListItemIcon-D5NW3bY2.cjs.map} +1 -1
- package/dist/chunks/{NcListItemIcon-WH9TUCxb.mjs → NcListItemIcon-DyE902SK.mjs} +1 -1
- package/dist/chunks/{NcListItemIcon-WH9TUCxb.mjs.map → NcListItemIcon-DyE902SK.mjs.map} +1 -1
- package/dist/chunks/{NcPasswordField-BPAivxc_.mjs → NcPasswordField-BeIfZq-I.mjs} +1 -1
- package/dist/chunks/{NcPasswordField-BPAivxc_.mjs.map → NcPasswordField-BeIfZq-I.mjs.map} +1 -1
- package/dist/chunks/{NcPasswordField-BgNcvN0V.cjs → NcPasswordField-Bx3rarNt.cjs} +1 -1
- package/dist/chunks/{NcPasswordField-BgNcvN0V.cjs.map → NcPasswordField-Bx3rarNt.cjs.map} +1 -1
- package/dist/chunks/{NcRelatedResourcesPanel-Cp8Au2iI.cjs → NcRelatedResourcesPanel-BmE02hfU.cjs} +4 -4
- package/dist/chunks/NcRelatedResourcesPanel-BmE02hfU.cjs.map +1 -0
- package/dist/chunks/{NcRelatedResourcesPanel-LTNqJecS.mjs → NcRelatedResourcesPanel-C8HsjDiN.mjs} +8 -8
- package/dist/chunks/NcRelatedResourcesPanel-C8HsjDiN.mjs.map +1 -0
- package/dist/chunks/{NcRichContenteditable-CHggLQuR.mjs → NcRichContenteditable-COl1GELF.mjs} +35 -26
- package/dist/chunks/NcRichContenteditable-COl1GELF.mjs.map +1 -0
- package/dist/chunks/{NcRichContenteditable-hT5m_2tr.cjs → NcRichContenteditable-DVCrsKyc.cjs} +41 -32
- package/dist/chunks/NcRichContenteditable-DVCrsKyc.cjs.map +1 -0
- package/dist/chunks/{NcRichText-BBXbh0Hh.mjs → NcRichText-BEoKx41c.mjs} +45 -29
- package/dist/chunks/NcRichText-BEoKx41c.mjs.map +1 -0
- package/dist/chunks/{NcRichText-BWX8BLVh.cjs → NcRichText-Dow2nMvP.cjs} +35 -19
- package/dist/chunks/NcRichText-Dow2nMvP.cjs.map +1 -0
- package/dist/chunks/{NcSelect-BVmjiQFa.mjs → NcSelect-C_dMqtoe.mjs} +2 -2
- package/dist/chunks/{NcSelect-BVmjiQFa.mjs.map → NcSelect-C_dMqtoe.mjs.map} +1 -1
- package/dist/chunks/{NcSelect-DjTSAsNL.cjs → NcSelect-CyESQ4uQ.cjs} +1 -1
- package/dist/chunks/{NcSelect-DjTSAsNL.cjs.map → NcSelect-CyESQ4uQ.cjs.map} +1 -1
- package/dist/chunks/{NcSelectTags-BJvxyO8E.cjs → NcSelectTags-Bl95j2Kh.cjs} +1 -1
- package/dist/chunks/{NcSelectTags-BJvxyO8E.cjs.map → NcSelectTags-Bl95j2Kh.cjs.map} +1 -1
- package/dist/chunks/{NcSelectTags-Ccv-eQzZ.mjs → NcSelectTags-BoX-3tOa.mjs} +2 -2
- package/dist/chunks/{NcSelectTags-Ccv-eQzZ.mjs.map → NcSelectTags-BoX-3tOa.mjs.map} +1 -1
- package/dist/chunks/{NcSettingsInputText-CcO2Du6E.cjs → NcSettingsInputText-DlBTOZRv.cjs} +1 -1
- package/dist/chunks/{NcSettingsInputText-CcO2Du6E.cjs.map → NcSettingsInputText-DlBTOZRv.cjs.map} +1 -1
- package/dist/chunks/{NcSettingsInputText-DXxmqvcd.mjs → NcSettingsInputText-fLyjAE06.mjs} +1 -1
- package/dist/chunks/{NcSettingsInputText-DXxmqvcd.mjs.map → NcSettingsInputText-fLyjAE06.mjs.map} +1 -1
- package/dist/chunks/{NcSettingsSection-DBe4fKFA.mjs → NcSettingsSection-COSdi50c.mjs} +1 -1
- package/dist/chunks/{NcSettingsSection-DBe4fKFA.mjs.map → NcSettingsSection-COSdi50c.mjs.map} +1 -1
- package/dist/chunks/{NcSettingsSection-qgIYSB_M.cjs → NcSettingsSection-CoHKnYDP.cjs} +1 -1
- package/dist/chunks/{NcSettingsSection-qgIYSB_M.cjs.map → NcSettingsSection-CoHKnYDP.cjs.map} +1 -1
- package/dist/chunks/{NcSettingsSelectGroup-DD8PEgvQ.cjs → NcSettingsSelectGroup-2wsNrz7x.cjs} +1 -1
- package/dist/chunks/{NcSettingsSelectGroup-DD8PEgvQ.cjs.map → NcSettingsSelectGroup-2wsNrz7x.cjs.map} +1 -1
- package/dist/chunks/{NcSettingsSelectGroup-d2TLOW1O.mjs → NcSettingsSelectGroup-BZG67QrR.mjs} +2 -2
- package/dist/chunks/{NcSettingsSelectGroup-d2TLOW1O.mjs.map → NcSettingsSelectGroup-BZG67QrR.mjs.map} +1 -1
- package/dist/chunks/{NcTextField-CU-YIhL3.mjs → NcTextField-BEpgHsY2.mjs} +1 -1
- package/dist/chunks/{NcTextField-CU-YIhL3.mjs.map → NcTextField-BEpgHsY2.mjs.map} +1 -1
- package/dist/chunks/{NcTextField-CsnzlYWD.cjs → NcTextField-C-2-Of6b.cjs} +1 -1
- package/dist/chunks/{NcTextField-CsnzlYWD.cjs.map → NcTextField-C-2-Of6b.cjs.map} +1 -1
- package/dist/chunks/{NcTimezonePicker-C-Ci2IuC.cjs → NcTimezonePicker-BMlKQe6-.cjs} +1 -1
- package/dist/chunks/{NcTimezonePicker-C-Ci2IuC.cjs.map → NcTimezonePicker-BMlKQe6-.cjs.map} +1 -1
- package/dist/chunks/{NcTimezonePicker-gvp9MAcg.mjs → NcTimezonePicker-JJeMG5Mo.mjs} +2 -2
- package/dist/chunks/{NcTimezonePicker-gvp9MAcg.mjs.map → NcTimezonePicker-JJeMG5Mo.mjs.map} +1 -1
- package/dist/chunks/{NcUserBubble-COhpp9l_.cjs → NcUserBubble-DMBDwtwW.cjs} +1 -1
- package/dist/chunks/{NcUserBubble-COhpp9l_.cjs.map → NcUserBubble-DMBDwtwW.cjs.map} +1 -1
- package/dist/chunks/{NcUserBubble-CbufscPi.mjs → NcUserBubble-RZlZRmxZ.mjs} +1 -1
- package/dist/chunks/{NcUserBubble-CbufscPi.mjs.map → NcUserBubble-RZlZRmxZ.mjs.map} +1 -1
- package/dist/chunks/{NcUserStatusIcon-C7dfcW39.cjs → NcUserStatusIcon-7yBYL8ur.cjs} +4 -4
- package/dist/chunks/NcUserStatusIcon-7yBYL8ur.cjs.map +1 -0
- package/dist/chunks/{NcUserStatusIcon-0SGYQL9L.mjs → NcUserStatusIcon-DMQxYiY6.mjs} +9 -9
- package/dist/chunks/NcUserStatusIcon-DMQxYiY6.mjs.map +1 -0
- package/dist/chunks/{ScopeComponent-LxI8YPnR.mjs → ScopeComponent-9FoStIVM.mjs} +1 -1
- package/dist/chunks/{ScopeComponent-LxI8YPnR.mjs.map → ScopeComponent-9FoStIVM.mjs.map} +1 -1
- package/dist/chunks/{ScopeComponent-CSd5rNUA.cjs → ScopeComponent-DdL1psE0.cjs} +1 -1
- package/dist/chunks/{ScopeComponent-CSd5rNUA.cjs.map → ScopeComponent-DdL1psE0.cjs.map} +1 -1
- package/dist/chunks/{_l10n-D8Scz3mH.mjs → _l10n-CAwwH-o2.mjs} +3 -3
- package/dist/chunks/_l10n-CAwwH-o2.mjs.map +1 -0
- package/dist/chunks/{_l10n-B986q8RC.cjs → _l10n-DZggkcVs.cjs} +3 -3
- package/dist/chunks/_l10n-DZggkcVs.cjs.map +1 -0
- package/dist/chunks/{index-DYXjj9ET.mjs → index-BAVa4G2v.mjs} +31 -31
- package/dist/chunks/index-BAVa4G2v.mjs.map +1 -0
- package/dist/chunks/{index-CIsMzBte.cjs → index-CVsxVZon.cjs} +19 -19
- package/dist/chunks/index-CVsxVZon.cjs.map +1 -0
- package/dist/chunks/{referencePickerModal-DUhJWt2e.mjs → referencePickerModal-CtIcJRWz.mjs} +417 -414
- package/dist/chunks/referencePickerModal-CtIcJRWz.mjs.map +1 -0
- package/dist/chunks/{referencePickerModal-DV7-XzCc.cjs → referencePickerModal-Ig4S8WI3.cjs} +298 -295
- package/dist/chunks/referencePickerModal-Ig4S8WI3.cjs.map +1 -0
- package/dist/chunks/{usernameToColor-iYF-oKTP.mjs → usernameToColor-3Z3jKEos.mjs} +1 -1
- package/dist/chunks/{usernameToColor-iYF-oKTP.mjs.map → usernameToColor-3Z3jKEos.mjs.map} +1 -1
- package/dist/chunks/{usernameToColor-DibvD_OP.cjs → usernameToColor-7pQQJMR_.cjs} +1 -1
- package/dist/chunks/{usernameToColor-DibvD_OP.cjs.map → usernameToColor-7pQQJMR_.cjs.map} +1 -1
- package/dist/index.cjs +8 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +45 -45
- package/package.json +1 -1
- package/dist/assets/NcListItem-vwt4bCl6.css +0 -165
- package/dist/chunks/NcActions-CpU9WXzM.mjs.map +0 -1
- package/dist/chunks/NcActions-Dfkog_G0.cjs.map +0 -1
- package/dist/chunks/NcAppContent-BDwOdxJE.mjs.map +0 -1
- package/dist/chunks/NcAppContent-kqYjKpzU.cjs.map +0 -1
- package/dist/chunks/NcAppNavigation-BRtyTvKt.mjs.map +0 -1
- package/dist/chunks/NcAppNavigation-DMxORgkV.cjs.map +0 -1
- package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-C1WLneXl.cjs.map +0 -1
- package/dist/chunks/NcCheckboxRadioSwitch.vue_vue_type_style_index_0_scoped_2603be83_lang-CKROuACA.mjs.map +0 -1
- package/dist/chunks/NcListItem-C5oWvAZQ.mjs.map +0 -1
- package/dist/chunks/NcListItem-wxqWqs4s.cjs.map +0 -1
- package/dist/chunks/NcRelatedResourcesPanel-Cp8Au2iI.cjs.map +0 -1
- package/dist/chunks/NcRelatedResourcesPanel-LTNqJecS.mjs.map +0 -1
- package/dist/chunks/NcRichContenteditable-CHggLQuR.mjs.map +0 -1
- package/dist/chunks/NcRichContenteditable-hT5m_2tr.cjs.map +0 -1
- package/dist/chunks/NcRichText-BBXbh0Hh.mjs.map +0 -1
- package/dist/chunks/NcRichText-BWX8BLVh.cjs.map +0 -1
- package/dist/chunks/NcUserStatusIcon-0SGYQL9L.mjs.map +0 -1
- package/dist/chunks/NcUserStatusIcon-C7dfcW39.cjs.map +0 -1
- package/dist/chunks/_l10n-B986q8RC.cjs.map +0 -1
- package/dist/chunks/_l10n-D8Scz3mH.mjs.map +0 -1
- package/dist/chunks/index-CIsMzBte.cjs.map +0 -1
- package/dist/chunks/index-DYXjj9ET.mjs.map +0 -1
- package/dist/chunks/referencePickerModal-DUhJWt2e.mjs.map +0 -1
- package/dist/chunks/referencePickerModal-DV7-XzCc.cjs.map +0 -1
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
require('../assets/NcActions-
|
|
1
|
+
require('../assets/NcActions-DL7ZZIjx.css');
|
|
2
2
|
"use strict";
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
const j = ".focusable",
|
|
3
|
+
const Y = require("../Components/NcButton.cjs"), Z = require("./NcPopover-h-t7Dnjk.cjs"), ee = require("./GenRandomId-B2O1GMbH.cjs"), te = require("./focusTrap-xauhLvvr.cjs"), A = require("./_l10n-DZggkcVs.cjs"), J = require("vue"), ne = require("./DotsHorizontal-B8kTqpHe.cjs"), ie = require("./_plugin-vue2_normalizer-GXKvuwrq.cjs"), se = (e) => e && e.__esModule ? e : { default: e }, oe = /* @__PURE__ */ se(J);
|
|
4
|
+
A.register(A.t4);
|
|
5
|
+
const j = ".focusable", re = {
|
|
6
6
|
name: "NcActions",
|
|
7
7
|
components: {
|
|
8
|
-
NcButton:
|
|
9
|
-
DotsHorizontal:
|
|
10
|
-
NcPopover:
|
|
8
|
+
NcButton: Y,
|
|
9
|
+
DotsHorizontal: ne.DotsHorizontal,
|
|
10
|
+
NcPopover: Z.NcPopover
|
|
11
11
|
},
|
|
12
12
|
provide() {
|
|
13
13
|
return {
|
|
14
14
|
/**
|
|
15
15
|
* NcActions can be used as:
|
|
16
16
|
* - Application menu (has menu role)
|
|
17
|
-
* -
|
|
17
|
+
* - Expanded block (has no specific role, should be used an element with expanded role)
|
|
18
18
|
* - Popover with plain text or text inputs (has no specific role)
|
|
19
19
|
* Depending on the usage (used items), the menu and its items should have different roles for a11y.
|
|
20
20
|
* Provide the role for NcAction* components in the NcActions content.
|
|
@@ -62,6 +62,33 @@ const j = ".focusable", fe = {
|
|
|
62
62
|
type: String,
|
|
63
63
|
default: null
|
|
64
64
|
},
|
|
65
|
+
/**
|
|
66
|
+
* NcActions can be used as:
|
|
67
|
+
*
|
|
68
|
+
* - Application menu (has menu role)
|
|
69
|
+
* - Navigation (has no specific role, should be used an element with expanded role)
|
|
70
|
+
* - Popover with plain text or text inputs (has no specific role)
|
|
71
|
+
*
|
|
72
|
+
* By default the used type is automatically detected by components used in the default slot.#
|
|
73
|
+
*
|
|
74
|
+
* With Vue this is limited to direct children of the NcActions component.
|
|
75
|
+
* So if you use a wrapper, you have to provide the semantic type yourself (see Example)
|
|
76
|
+
*
|
|
77
|
+
* Choose:
|
|
78
|
+
*
|
|
79
|
+
* - 'dialog' if you use any of these components: NcActionInput', 'NcActionTextEditable'
|
|
80
|
+
* - 'menu' if you use any of these components: 'NcActionButton', 'NcActionButtonGroup', 'NcActionCheckbox', 'NcActionRadio'
|
|
81
|
+
* - 'expanded' if using one of these: 'NcActionLink', 'NcActionRouter'. This represents an expanded block.
|
|
82
|
+
* - 'tooltip' only to be used when a text without any interactive elements is used.
|
|
83
|
+
* - Leave this property unset otherwise
|
|
84
|
+
*/
|
|
85
|
+
forceSemanticType: {
|
|
86
|
+
type: String,
|
|
87
|
+
default: null,
|
|
88
|
+
validator(e) {
|
|
89
|
+
return ["dialog", "menu", "expanded", "tooltip"].includes(e);
|
|
90
|
+
}
|
|
91
|
+
},
|
|
65
92
|
/**
|
|
66
93
|
* Apply primary styling for this menu
|
|
67
94
|
*/
|
|
@@ -99,7 +126,7 @@ const j = ".focusable", fe = {
|
|
|
99
126
|
*/
|
|
100
127
|
ariaLabel: {
|
|
101
128
|
type: String,
|
|
102
|
-
default:
|
|
129
|
+
default: A.t("Actions")
|
|
103
130
|
},
|
|
104
131
|
/**
|
|
105
132
|
* @deprecated To be removed in @nextcloud/vue 9. Migration guide: remove ariaHidden prop from NcAction* components.
|
|
@@ -155,13 +182,19 @@ const j = ".focusable", fe = {
|
|
|
155
182
|
"blur",
|
|
156
183
|
"click"
|
|
157
184
|
],
|
|
185
|
+
setup() {
|
|
186
|
+
const e = "menu-".concat(ee.GenRandomId());
|
|
187
|
+
return {
|
|
188
|
+
randomId: e,
|
|
189
|
+
triggerRandomId: "trigger-".concat(e)
|
|
190
|
+
};
|
|
191
|
+
},
|
|
158
192
|
data() {
|
|
159
193
|
return {
|
|
160
194
|
opened: this.open,
|
|
161
195
|
focusIndex: 0,
|
|
162
|
-
randomId: "menu-".concat(re.GenRandomId()),
|
|
163
196
|
/**
|
|
164
|
-
* @type {'menu'|'
|
|
197
|
+
* @type {'menu'|'expanded'|'dialog'|'tooltip'|'unknown'}
|
|
165
198
|
*/
|
|
166
199
|
actionsMenuSemanticType: "unknown",
|
|
167
200
|
externalFocusTrapStack: []
|
|
@@ -180,25 +213,50 @@ const j = ".focusable", fe = {
|
|
|
180
213
|
popupRole: "menu",
|
|
181
214
|
withArrowNavigation: !0,
|
|
182
215
|
withTabNavigation: !1,
|
|
183
|
-
withFocusTrap: !1
|
|
216
|
+
withFocusTrap: !1,
|
|
217
|
+
triggerA11yAttr: {
|
|
218
|
+
"aria-controls": this.opened ? this.randomId : null
|
|
219
|
+
},
|
|
220
|
+
popoverContainerA11yAttrs: {},
|
|
221
|
+
popoverUlA11yAttrs: {
|
|
222
|
+
id: this.randomId,
|
|
223
|
+
role: "menu"
|
|
224
|
+
}
|
|
184
225
|
},
|
|
185
|
-
|
|
226
|
+
expanded: {
|
|
186
227
|
popupRole: void 0,
|
|
187
228
|
withArrowNavigation: !1,
|
|
188
229
|
withTabNavigation: !0,
|
|
189
|
-
withFocusTrap: !1
|
|
230
|
+
withFocusTrap: !1,
|
|
231
|
+
triggerA11yAttr: {},
|
|
232
|
+
popoverContainerA11yAttrs: {},
|
|
233
|
+
popoverUlA11yAttrs: {}
|
|
190
234
|
},
|
|
191
235
|
dialog: {
|
|
192
236
|
popupRole: "dialog",
|
|
193
237
|
withArrowNavigation: !1,
|
|
194
238
|
withTabNavigation: !0,
|
|
195
|
-
withFocusTrap: !0
|
|
239
|
+
withFocusTrap: !0,
|
|
240
|
+
triggerA11yAttr: {
|
|
241
|
+
"aria-controls": this.opened ? this.randomId : null
|
|
242
|
+
},
|
|
243
|
+
popoverContainerA11yAttrs: {
|
|
244
|
+
id: this.randomId,
|
|
245
|
+
role: "dialog",
|
|
246
|
+
// Dialog must have a label
|
|
247
|
+
"aria-labelledby": this.triggerRandomId,
|
|
248
|
+
"aria-modal": "true"
|
|
249
|
+
},
|
|
250
|
+
popoverUlA11yAttrs: {}
|
|
196
251
|
},
|
|
197
252
|
tooltip: {
|
|
198
253
|
popupRole: void 0,
|
|
199
254
|
withArrowNavigation: !1,
|
|
200
255
|
withTabNavigation: !1,
|
|
201
|
-
withFocusTrap: !1
|
|
256
|
+
withFocusTrap: !1,
|
|
257
|
+
triggerA11yAttr: {},
|
|
258
|
+
popoverContainerA11yAttrs: {},
|
|
259
|
+
popoverUlA11yAttrs: {}
|
|
202
260
|
},
|
|
203
261
|
// Due to Vue limitations, we sometimes cannot determine the true type
|
|
204
262
|
// As a fallback use both arrow navigation and focus trap
|
|
@@ -207,12 +265,12 @@ const j = ".focusable", fe = {
|
|
|
207
265
|
role: void 0,
|
|
208
266
|
withArrowNavigation: !0,
|
|
209
267
|
withTabNavigation: !1,
|
|
210
|
-
withFocusTrap: !0
|
|
268
|
+
withFocusTrap: !0,
|
|
269
|
+
triggerA11yAttr: {},
|
|
270
|
+
popoverContainerA11yAttrs: {},
|
|
271
|
+
popoverUlA11yAttrs: {}
|
|
211
272
|
}
|
|
212
273
|
}[this.actionsMenuSemanticType];
|
|
213
|
-
},
|
|
214
|
-
withFocusTrap() {
|
|
215
|
-
return this.config.withFocusTrap;
|
|
216
274
|
}
|
|
217
275
|
},
|
|
218
276
|
watch: {
|
|
@@ -232,8 +290,8 @@ const j = ".focusable", fe = {
|
|
|
232
290
|
* @return {string} the name of the action component
|
|
233
291
|
*/
|
|
234
292
|
getActionName(e) {
|
|
235
|
-
var n,
|
|
236
|
-
return (
|
|
293
|
+
var n, i, s, o, l;
|
|
294
|
+
return (l = (s = (i = (n = e == null ? void 0 : e.componentOptions) == null ? void 0 : n.Ctor) == null ? void 0 : i.extendOptions) == null ? void 0 : s.name) != null ? l : (o = e == null ? void 0 : e.componentOptions) == null ? void 0 : o.tag;
|
|
237
295
|
},
|
|
238
296
|
/**
|
|
239
297
|
* When the component has its own focus trap, then it is managed by global trap stack by focus-trap.
|
|
@@ -247,7 +305,7 @@ const j = ".focusable", fe = {
|
|
|
247
305
|
intersectIntoCurrentFocusTrapStack() {
|
|
248
306
|
if (!this.config.withFocusTrap)
|
|
249
307
|
if (this.opened) {
|
|
250
|
-
this.externalFocusTrapStack = [...
|
|
308
|
+
this.externalFocusTrapStack = [...te.getTrapStack()];
|
|
251
309
|
for (const e of this.externalFocusTrapStack)
|
|
252
310
|
e.pause();
|
|
253
311
|
} else {
|
|
@@ -282,8 +340,8 @@ const j = ".focusable", fe = {
|
|
|
282
340
|
this.opened || (this.opened = !0, this.$emit("update:open", !0), this.$emit("open"));
|
|
283
341
|
},
|
|
284
342
|
async closeMenu(e = !0) {
|
|
285
|
-
var n,
|
|
286
|
-
this.opened && (await this.$nextTick(), this.opened = !1, (n = this.$refs.popover) == null || n.clearFocusTrap({ returnFocus: e }), this.$emit("update:open", !1), this.$emit("close"), this.focusIndex = 0, e && ((
|
|
343
|
+
var n, i;
|
|
344
|
+
this.opened && (await this.$nextTick(), this.opened = !1, (n = this.$refs.popover) == null || n.clearFocusTrap({ returnFocus: e }), this.$emit("update:open", !1), this.$emit("close"), this.focusIndex = 0, e && ((i = this.$refs.menuButton) == null || i.$el.focus()));
|
|
287
345
|
},
|
|
288
346
|
onOpen(e) {
|
|
289
347
|
this.$nextTick(() => {
|
|
@@ -315,9 +373,9 @@ const j = ".focusable", fe = {
|
|
|
315
373
|
return;
|
|
316
374
|
const n = e.target.closest("li");
|
|
317
375
|
if (n && this.$refs.menu.contains(n)) {
|
|
318
|
-
const
|
|
319
|
-
if (
|
|
320
|
-
const o = [...this.getFocusableMenuItemElements()].indexOf(
|
|
376
|
+
const i = n.querySelector(j);
|
|
377
|
+
if (i) {
|
|
378
|
+
const o = [...this.getFocusableMenuItemElements()].indexOf(i);
|
|
321
379
|
o > -1 && (this.focusIndex = o, this.focusAction());
|
|
322
380
|
}
|
|
323
381
|
}
|
|
@@ -336,11 +394,11 @@ const j = ".focusable", fe = {
|
|
|
336
394
|
return;
|
|
337
395
|
}
|
|
338
396
|
e.preventDefault();
|
|
339
|
-
const n = this.getFocusableMenuItemElements(),
|
|
340
|
-
if (
|
|
397
|
+
const n = this.getFocusableMenuItemElements(), i = [...n].indexOf(document.activeElement);
|
|
398
|
+
if (i === -1)
|
|
341
399
|
return;
|
|
342
|
-
const
|
|
343
|
-
(
|
|
400
|
+
const s = e.shiftKey ? i - 1 : i + 1;
|
|
401
|
+
(s < 0 || s === n.length) && this.closeMenu(!0), this.focusIndex = s, this.focusAction();
|
|
344
402
|
return;
|
|
345
403
|
}
|
|
346
404
|
this.config.withArrowNavigation && (e.key === "ArrowUp" && this.focusPreviousAction(e), e.key === "ArrowDown" && this.focusNextAction(e), e.key === "PageUp" && this.focusFirstAction(e), e.key === "PageDown" && this.focusLastAction(e)), e.key === "Escape" && (this.closeMenu(), e.preventDefault());
|
|
@@ -372,7 +430,7 @@ const j = ".focusable", fe = {
|
|
|
372
430
|
focusFirstAction(e) {
|
|
373
431
|
if (this.opened) {
|
|
374
432
|
this.preventIfEvent(e);
|
|
375
|
-
const n = [...this.getFocusableMenuItemElements()].findIndex((
|
|
433
|
+
const n = [...this.getFocusableMenuItemElements()].findIndex((i) => i.getAttribute("aria-checked") === "true" && i.getAttribute("role") === "menuitemradio");
|
|
376
434
|
this.focusIndex = n > -1 ? n : 0, this.focusAction();
|
|
377
435
|
}
|
|
378
436
|
},
|
|
@@ -402,65 +460,70 @@ const j = ".focusable", fe = {
|
|
|
402
460
|
const n = (this.$slots.default || []).filter((t) => this.getActionName(t));
|
|
403
461
|
if (n.length === 0)
|
|
404
462
|
return;
|
|
405
|
-
let
|
|
406
|
-
this.forceMenu &&
|
|
407
|
-
const
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
const
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
463
|
+
let i = n.filter(this.isValidSingleAction);
|
|
464
|
+
this.forceMenu && i.length > 0 && this.inline > 0 && (oe.default.util.warn("Specifying forceMenu will ignore any inline actions rendering."), i = []);
|
|
465
|
+
const s = i.slice(0, this.inline), o = n.filter((t) => !s.includes(t));
|
|
466
|
+
if (this.forceSemanticType)
|
|
467
|
+
this.actionsMenuSemanticType = this.forceSemanticType;
|
|
468
|
+
else {
|
|
469
|
+
const t = ["NcActionInput", "NcActionTextEditable"], c = ["NcActionButton", "NcActionButtonGroup", "NcActionCheckbox", "NcActionRadio"], u = ["NcActionLink", "NcActionRouter"], a = o.some((r) => t.includes(this.getActionName(r))), p = o.some((r) => c.includes(this.getActionName(r))), f = o.some((r) => u.includes(this.getActionName(r)));
|
|
470
|
+
a ? this.actionsMenuSemanticType = "dialog" : p ? this.actionsMenuSemanticType = "menu" : f ? this.actionsMenuSemanticType = "expanded" : n.filter((h) => this.getActionName(h).startsWith("NcAction")).length === n.length ? this.actionsMenuSemanticType = "tooltip" : this.actionsMenuSemanticType = "unknown";
|
|
471
|
+
}
|
|
472
|
+
const l = (t) => {
|
|
473
|
+
var I, v, b, T, w, N, x, S, k, M, F, $, m, _, B, E, C, O, R, L, D, q, P, U, z, V, H, K, G, W;
|
|
474
|
+
const c = (v = (I = t == null ? void 0 : t.componentOptions) == null ? void 0 : I.propsData) == null ? void 0 : v.icon, u = (N = (w = (T = (b = t == null ? void 0 : t.data) == null ? void 0 : b.scopedSlots) == null ? void 0 : T.icon()) == null ? void 0 : w[0]) != null ? N : this.isIconUrl(c) ? e("img", { class: "action-item__menutoggle__icon", attrs: { src: c, alt: "" } }) : e("span", { class: ["icon", c] }), a = ((x = t == null ? void 0 : t.data) == null ? void 0 : x.attrs) || {}, p = (k = (S = t == null ? void 0 : t.componentOptions) == null ? void 0 : S.listeners) == null ? void 0 : k.click, f = (_ = (m = ($ = (F = (M = t == null ? void 0 : t.componentOptions) == null ? void 0 : M.children) == null ? void 0 : F[0]) == null ? void 0 : $.text) == null ? void 0 : m.trim) == null ? void 0 : _.call(m), r = ((E = (B = t == null ? void 0 : t.componentOptions) == null ? void 0 : B.propsData) == null ? void 0 : E.ariaLabel) || f, h = this.forceName ? f : "";
|
|
475
|
+
let g = (O = (C = t == null ? void 0 : t.componentOptions) == null ? void 0 : C.propsData) == null ? void 0 : O.title;
|
|
476
|
+
this.forceName || g || (g = f);
|
|
477
|
+
const d = { ...(L = (R = t == null ? void 0 : t.componentOptions) == null ? void 0 : R.propsData) != null ? L : {} }, Q = ["submit", "reset"].includes(d.type) ? d.modelValue : "button";
|
|
478
|
+
return delete d.modelValue, delete d.type, e(
|
|
416
479
|
"NcButton",
|
|
417
480
|
{
|
|
418
481
|
class: [
|
|
419
482
|
"action-item action-item--single",
|
|
420
|
-
(
|
|
421
|
-
(
|
|
483
|
+
(D = t == null ? void 0 : t.data) == null ? void 0 : D.staticClass,
|
|
484
|
+
(q = t == null ? void 0 : t.data) == null ? void 0 : q.class
|
|
422
485
|
],
|
|
423
486
|
attrs: {
|
|
424
|
-
...
|
|
425
|
-
"aria-label":
|
|
426
|
-
title:
|
|
487
|
+
...a,
|
|
488
|
+
"aria-label": r,
|
|
489
|
+
title: g
|
|
427
490
|
},
|
|
428
491
|
ref: (P = t == null ? void 0 : t.data) == null ? void 0 : P.ref,
|
|
429
492
|
props: {
|
|
430
493
|
// If it has a menuName, we use a secondary button
|
|
431
|
-
type: this.type || (
|
|
432
|
-
disabled: this.disabled || ((
|
|
433
|
-
pressed: (
|
|
434
|
-
nativeType:
|
|
435
|
-
...
|
|
494
|
+
type: this.type || (h ? "secondary" : "tertiary"),
|
|
495
|
+
disabled: this.disabled || ((z = (U = t == null ? void 0 : t.componentOptions) == null ? void 0 : U.propsData) == null ? void 0 : z.disabled),
|
|
496
|
+
pressed: (H = (V = t == null ? void 0 : t.componentOptions) == null ? void 0 : V.propsData) == null ? void 0 : H.modelValue,
|
|
497
|
+
nativeType: Q,
|
|
498
|
+
...d
|
|
436
499
|
},
|
|
437
500
|
on: {
|
|
438
501
|
focus: this.onFocus,
|
|
439
502
|
blur: this.onBlur,
|
|
440
503
|
// forward any pressed state from NcButton just like NcActionButton does
|
|
441
|
-
"update:pressed": (W = (G = (
|
|
504
|
+
"update:pressed": (W = (G = (K = t == null ? void 0 : t.componentOptions) == null ? void 0 : K.listeners) == null ? void 0 : G["update:modelValue"]) != null ? W : () => {
|
|
442
505
|
},
|
|
443
506
|
// If we have a click listener,
|
|
444
507
|
// we bind it to execute on click and forward the click event
|
|
445
|
-
...!!
|
|
446
|
-
click: (
|
|
447
|
-
|
|
508
|
+
...!!p && {
|
|
509
|
+
click: (X) => {
|
|
510
|
+
p && p(X);
|
|
448
511
|
}
|
|
449
512
|
}
|
|
450
513
|
}
|
|
451
514
|
},
|
|
452
515
|
[
|
|
453
|
-
e("template", { slot: "icon" }, [
|
|
454
|
-
|
|
516
|
+
e("template", { slot: "icon" }, [u]),
|
|
517
|
+
h
|
|
455
518
|
]
|
|
456
519
|
);
|
|
457
520
|
}, y = (t) => {
|
|
458
|
-
var
|
|
459
|
-
const
|
|
521
|
+
var u, a;
|
|
522
|
+
const c = ((u = this.$slots.icon) == null ? void 0 : u[0]) || (this.defaultIcon ? e("span", { class: ["icon", this.defaultIcon] }) : e("DotsHorizontal", {
|
|
460
523
|
props: {
|
|
461
524
|
size: 20
|
|
462
525
|
}
|
|
463
|
-
}))
|
|
526
|
+
}));
|
|
464
527
|
return e(
|
|
465
528
|
"NcPopover",
|
|
466
529
|
{
|
|
@@ -474,7 +537,7 @@ const j = ".focusable", fe = {
|
|
|
474
537
|
container: this.container,
|
|
475
538
|
popoverBaseClass: "action-item__popper",
|
|
476
539
|
popupRole: this.config.popupRole,
|
|
477
|
-
setReturnFocus: this.config.withFocusTrap ? (
|
|
540
|
+
setReturnFocus: this.config.withFocusTrap ? (a = this.$refs.menuButton) == null ? void 0 : a.$el : null,
|
|
478
541
|
focusTrap: this.config.withFocusTrap
|
|
479
542
|
},
|
|
480
543
|
// For some reason the popover component
|
|
@@ -505,10 +568,9 @@ const j = ".focusable", fe = {
|
|
|
505
568
|
slot: "trigger",
|
|
506
569
|
ref: "menuButton",
|
|
507
570
|
attrs: {
|
|
508
|
-
id:
|
|
571
|
+
id: this.triggerRandomId,
|
|
509
572
|
"aria-label": this.menuName ? null : this.ariaLabel,
|
|
510
|
-
|
|
511
|
-
"aria-controls": this.opened && this.config.popupRole ? this.randomId : null
|
|
573
|
+
...this.config.triggerA11yAttr
|
|
512
574
|
},
|
|
513
575
|
on: {
|
|
514
576
|
focus: this.onFocus,
|
|
@@ -517,7 +579,7 @@ const j = ".focusable", fe = {
|
|
|
517
579
|
keydown: this.onTriggerKeydown
|
|
518
580
|
}
|
|
519
581
|
}, [
|
|
520
|
-
e("template", { slot: "icon" }, [
|
|
582
|
+
e("template", { slot: "icon" }, [c]),
|
|
521
583
|
this.menuName
|
|
522
584
|
]),
|
|
523
585
|
e("div", {
|
|
@@ -525,7 +587,8 @@ const j = ".focusable", fe = {
|
|
|
525
587
|
open: this.opened
|
|
526
588
|
},
|
|
527
589
|
attrs: {
|
|
528
|
-
tabindex: "-1"
|
|
590
|
+
tabindex: "-1",
|
|
591
|
+
...this.config.popoverContainerA11yAttrs
|
|
529
592
|
},
|
|
530
593
|
on: {
|
|
531
594
|
keydown: this.onKeydown,
|
|
@@ -535,12 +598,8 @@ const j = ".focusable", fe = {
|
|
|
535
598
|
}, [
|
|
536
599
|
e("ul", {
|
|
537
600
|
attrs: {
|
|
538
|
-
id: this.randomId,
|
|
539
601
|
tabindex: "-1",
|
|
540
|
-
|
|
541
|
-
// Dialog must have a label
|
|
542
|
-
"aria-labelledby": this.actionsMenuSemanticType === "dialog" ? l : void 0,
|
|
543
|
-
"aria-modal": this.actionsMenuSemanticType === "dialog" ? "true" : void 0
|
|
602
|
+
...this.config.popoverUlA11yAttrs
|
|
544
603
|
}
|
|
545
604
|
}, [
|
|
546
605
|
t
|
|
@@ -549,9 +608,9 @@ const j = ".focusable", fe = {
|
|
|
549
608
|
]
|
|
550
609
|
);
|
|
551
610
|
};
|
|
552
|
-
return n.length === 1 &&
|
|
611
|
+
return n.length === 1 && i.length === 1 && !this.forceMenu ? l(n[0]) : (this.$nextTick(() => {
|
|
553
612
|
this.opened && this.$refs.menu && (this.$refs.menu.querySelector("li.active") || []).length === 0 && this.focusFirstAction();
|
|
554
|
-
}),
|
|
613
|
+
}), s.length > 0 && this.inline > 0 ? e(
|
|
555
614
|
"div",
|
|
556
615
|
{
|
|
557
616
|
class: [
|
|
@@ -561,7 +620,7 @@ const j = ".focusable", fe = {
|
|
|
561
620
|
},
|
|
562
621
|
[
|
|
563
622
|
// Render inline actions
|
|
564
|
-
...
|
|
623
|
+
...s.map(l),
|
|
565
624
|
// render the rest within the popover menu
|
|
566
625
|
o.length > 0 ? e(
|
|
567
626
|
"div",
|
|
@@ -594,16 +653,16 @@ const j = ".focusable", fe = {
|
|
|
594
653
|
]
|
|
595
654
|
));
|
|
596
655
|
}
|
|
597
|
-
},
|
|
598
|
-
var
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
656
|
+
}, ce = null, ue = null;
|
|
657
|
+
var ae = /* @__PURE__ */ ie.normalizeComponent(
|
|
658
|
+
re,
|
|
659
|
+
ce,
|
|
660
|
+
ue,
|
|
602
661
|
!1,
|
|
603
662
|
null,
|
|
604
|
-
"
|
|
663
|
+
"65ff86b8",
|
|
605
664
|
null,
|
|
606
665
|
null
|
|
607
666
|
);
|
|
608
|
-
const
|
|
609
|
-
exports.NcActions =
|
|
667
|
+
const le = ae.exports;
|
|
668
|
+
exports.NcActions = le;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NcActions-B049TCK5.cjs","sources":["../../src/components/NcActions/NcActions.vue"],"sourcesContent":["<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Marco Ambrosini <marcoambrosini@icloud.com>\n - @author Raimund Schlüßler <raimund.schluessler@mailbox.org>\n - @author Grigorii K. Shartsev <me@shgk.me>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<!-- Accessibility guidelines:\nhttps://www.w3.org/TR/wai-aria-practices/examples/menu-button/menu-button-actions.html -->\n\n<docs>\n### Single action\n\n```vue\n<template>\n\t<NcActions>\n\t\t<NcActionButton @click=\"actionDelete\">\n\t\t\t<template #icon>\n\t\t\t\t<Delete :size=\"20\" />\n\t\t\t</template>\n\t\t\tDelete\n\t\t</NcActionButton>\n\t</NcActions>\n</template>\n<script>\nimport Delete from 'vue-material-design-icons/Delete'\n\nexport default {\n\tcomponents: {\n\t\tDelete,\n\t},\n\tmethods: {\n\t\tactionDelete() {\n\t\t\talert('Delete')\n\t\t},\n\t},\n}\n</script>\n```\n\n### Multiple actions\n\n```vue\n<template>\n\t<NcActions>\n\t\t<NcActionButton @click=\"showMessage('Edit')\">\n\t\t\t<template #icon>\n\t\t\t\t<Pencil :size=\"20\" />\n\t\t\t</template>\n\t\t\tEdit\n\t\t</NcActionButton>\n\t\t<NcActionButton @click=\"showMessage('Delete')\">\n\t\t\t<template #icon>\n\t\t\t\t<Delete :size=\"20\" />\n\t\t\t</template>\n\t\t\tDelete\n\t\t</NcActionButton>\n\t\t<NcActionLink href=\"https://nextcloud.com\">\n\t\t\t<template #icon>\n\t\t\t\t<OpenInNew :size=\"20\" />\n\t\t\t</template>\n\t\t\tLink\n\t\t</NcActionLink>\n\t</NcActions>\n</template>\n<script>\nimport Delete from 'vue-material-design-icons/Delete'\nimport OpenInNew from 'vue-material-design-icons/OpenInNew'\nimport Pencil from 'vue-material-design-icons/Pencil'\n\nexport default {\n\tcomponents: {\n\t\tDelete,\n\t\tOpenInNew,\n\t\tPencil,\n\t},\n\tmethods: {\n\t\tshowMessage(msg) {\n\t\t\talert(msg)\n\t\t},\n\t},\n}\n</script>\n```\n\n### Multiple actions with 2 items inline\n\n```vue\n<template>\n\t<NcActions :inline=\"2\">\n\t\t<NcActionButton @click=\"showMessage('Add')\">\n\t\t\t<template #icon>\n\t\t\t\t<Plus :size=\"20\" />\n\t\t\t</template>\n\t\t\tAdd\n\t\t</NcActionButton>\n\t\t<NcActionButton @click=\"showMessage('Edit')\">\n\t\t\t<template #icon>\n\t\t\t\t<Pencil :size=\"20\" />\n\t\t\t</template>\n\t\t\tEdit\n\t\t</NcActionButton>\n\t\t<NcActionButton @click=\"showMessage('Delete')\">\n\t\t\t<template #icon>\n\t\t\t\t<Delete :size=\"20\" />\n\t\t\t</template>\n\t\t\tDelete\n\t\t</NcActionButton>\n\t\t<NcActionLink href=\"https://nextcloud.com\">\n\t\t\t<template #icon>\n\t\t\t\t<OpenInNew :size=\"20\" />\n\t\t\t</template>\n\t\t\tLink\n\t\t</NcActionLink>\n\t</NcActions>\n</template>\n<script>\nimport Plus from 'vue-material-design-icons/Plus'\nimport Delete from 'vue-material-design-icons/Delete'\nimport OpenInNew from 'vue-material-design-icons/OpenInNew'\nimport Pencil from 'vue-material-design-icons/Pencil'\n\nexport default {\n\tcomponents: {\n\t\tDelete,\n\t\tOpenInNew,\n\t\tPencil,\n\t\tPlus,\n\t},\n\tmethods: {\n\t\tshowMessage(msg) {\n\t\t\talert(msg)\n\t\t},\n\t},\n}\n</script>\n```\n\n### Multiple actions with 2 items inline AND forced names\n\n```vue\n<template>\n\t<NcActions :force-name=\"true\" :inline=\"2\">\n\t\t<NcActionButton @click=\"showMessage('Add')\">\n\t\t\t<template #icon>\n\t\t\t\t<Plus :size=\"20\" />\n\t\t\t</template>\n\t\t\tAdd\n\t\t</NcActionButton>\n\t\t<NcActionButton @click=\"showMessage('Edit')\">\n\t\t\t<template #icon>\n\t\t\t\t<Pencil :size=\"20\" />\n\t\t\t</template>\n\t\t\tEdit\n\t\t</NcActionButton>\n\t\t<NcActionButton @click=\"showMessage('Delete')\">\n\t\t\t<template #icon>\n\t\t\t\t<Delete :size=\"20\" />\n\t\t\t</template>\n\t\t\tDelete\n\t\t</NcActionButton>\n\t\t<NcActionLink href=\"https://nextcloud.com\">\n\t\t\t<template #icon>\n\t\t\t\t<OpenInNew :size=\"20\" />\n\t\t\t</template>\n\t\t\tLink\n\t\t</NcActionLink>\n\t</NcActions>\n</template>\n<script>\nimport Plus from 'vue-material-design-icons/Plus'\nimport Delete from 'vue-material-design-icons/Delete'\nimport OpenInNew from 'vue-material-design-icons/OpenInNew'\nimport Pencil from 'vue-material-design-icons/Pencil'\nexport default {\n\tcomponents: {\n\t\tDelete,\n\t\tOpenInNew,\n\t\tPencil,\n\t\tPlus,\n\t},\n\tmethods: {\n\t\tshowMessage(msg) {\n\t\t\talert(msg)\n\t\t},\n\t},\n}\n</script>\n```\n\n### Multiple actions with custom icon\n\n```vue\n<template>\n\t<NcActions>\n\t\t<template #icon>\n\t\t\t<Pencil :size=\"20\" />\n\t\t</template>\n\t\t<NcActionButton @click=\"showMessage('Edit')\">\n\t\t\t<template #icon>\n\t\t\t\t<Pencil :size=\"20\" />\n\t\t\t</template>\n\t\t\tEdit\n\t\t</NcActionButton>\n\t\t<NcActionButton @click=\"showMessage('Delete')\">\n\t\t\t<template #icon>\n\t\t\t\t<Delete :size=\"20\" />\n\t\t\t</template>\n\t\t\tDelete\n\t\t</NcActionButton>\n\t\t<NcActionLink href=\"https://nextcloud.com\">\n\t\t\t<template #icon>\n\t\t\t\t<OpenInNew :size=\"20\" />\n\t\t\t</template>\n\t\t\tLink\n\t\t</NcActionLink>\n\t</NcActions>\n</template>\n<script>\nimport Delete from 'vue-material-design-icons/Delete'\nimport OpenInNew from 'vue-material-design-icons/OpenInNew'\nimport Pencil from 'vue-material-design-icons/Pencil'\n\nexport default {\n\tcomponents: {\n\t\tDelete,\n\t\tOpenInNew,\n\t\tPencil,\n\t},\n\tmethods: {\n\t\tshowMessage(msg) {\n\t\t\talert(msg)\n\t\t},\n\t},\n}\n</script>\n```\n\n### With menu name\n\n```vue\n<template>\n\t<NcActions menu-name=\"Object management\">\n\t\t<template #icon>\n\t\t\t<Pencil :size=\"20\" />\n\t\t</template>\n\t\t<NcActionButton>\n\t\t\t<template #icon>\n\t\t\t\t<Pencil :size=\"20\" />\n\t\t\t</template>\n\t\t\tRename\n\t\t</NcActionButton>\n\t\t<NcActionButton>\n\t\t\t<template #icon>\n\t\t\t\t<Delete :size=\"20\" />\n\t\t\t</template>\n\t\t\tDelete\n\t\t</NcActionButton>\n\t\t<NcActionButton>\n\t\t\t<template #icon>\n\t\t\t\t<ArrowRight :size=\"20\" />\n\t\t\t</template>\n\t\t\tValidate\n\t\t</NcActionButton>\n\t\t<NcActionButton>\n\t\t\t<template #icon>\n\t\t\t\t<Download :size=\"20\" />\n\t\t\t</template>\n\t\t\tDownload\n\t\t</NcActionButton>\n\t</NcActions>\n</template>\n<script>\nimport ArrowRight from 'vue-material-design-icons/ArrowRight'\nimport Delete from 'vue-material-design-icons/Delete'\nimport Download from 'vue-material-design-icons/Download'\nimport Pencil from 'vue-material-design-icons/Pencil'\n\nexport default {\n\tcomponents: {\n\t\tArrowRight,\n\t\tDelete,\n\t\tDownload,\n\t\tPencil,\n\t},\n}\n</script>\n```\n\n### Various icons styles\n```vue\n<template>\n\t<NcActions :primary=\"true\">\n\t\t<NcActionButton>\n\t\t\t<template #icon>\n\t\t\t\t<Pencil :size=\"20\" />\n\t\t\t</template>\n\t\t\tEdit\n\t\t</NcActionButton>\n\t\t<NcActionButton>\n\t\t\t<template #icon>\n\t\t\t\t<Delete :size=\"20\" />\n\t\t\t</template>\n\t\t\tDelete\n\t\t</NcActionButton>\n\t</NcActions>\n</template>\n<script>\nimport Delete from 'vue-material-design-icons/Delete'\nimport Pencil from 'vue-material-design-icons/Pencil'\n\nexport default {\n\tcomponents: {\n\t\tDelete,\n\t\tPencil,\n\t},\n}\n</script>\n```\n\n```vue\n<template>\n\t<NcActions :primary=\"true\" menu-name=\"Object management\">\n\t\t<template #icon>\n\t\t\t<Plus :size=\"20\" />\n\t\t</template>\n\t\t<NcActionButton>\n\t\t\t<template #icon>\n\t\t\t\t<Pencil :size=\"20\" />\n\t\t\t</template>\n\t\t\tRename\n\t\t</NcActionButton>\n\t\t<NcActionButton>\n\t\t\t<template #icon>\n\t\t\t\t<Delete :size=\"20\" />\n\t\t\t</template>\n\t\t\tDelete\n\t\t</NcActionButton>\n\t\t<NcActionButton>\n\t\t\t<template #icon>\n\t\t\t\t<ArrowRight :size=\"20\" />\n\t\t\t</template>\n\t\t\tValidate\n\t\t</NcActionButton>\n\t\t<NcActionButton>\n\t\t\t<template #icon>\n\t\t\t\t<Download :size=\"20\" />\n\t\t\t</template>\n\t\t\tDownload\n\t\t</NcActionButton>\n\t</NcActions>\n</template>\n<script>\nimport ArrowRight from 'vue-material-design-icons/ArrowRight'\nimport Delete from 'vue-material-design-icons/Delete'\nimport Download from 'vue-material-design-icons/Download'\nimport Pencil from 'vue-material-design-icons/Pencil'\nimport Plus from 'vue-material-design-icons/Plus'\n\nexport default {\n\tcomponents: {\n\t\tArrowRight,\n\t\tDelete,\n\t\tDownload,\n\t\tPencil,\n\t\tPlus,\n\t},\n}\n</script>\n```\n\n### Custom icon slot\nTo be used with `vue-material-design-icons` only. For icon classes use the `default-icon` slot.\nIt can be used with one or multiple actions.\n```vue\n<template>\n\t<div style=\"display: flex;align-items: center;\">\n\t\t<NcButton @click=\"toggled = !toggled\">Toggle multiple action</NcButton>\n\t\t<NcActions>\n\t\t\t<template #icon>\n\t\t\t\t<DotsHorizontalCircleOutline :size=\"20\" />\n\t\t\t</template>\n\t\t\t<NcActionButton>\n\t\t\t\t<template #icon>\n\t\t\t\t\t<MicrophoneOff :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\tMute\n\t\t\t</NcActionButton>\n\t\t\t<NcActionButton v-if=\"toggled\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Delete :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\tDelete\n\t\t\t</NcActionButton>\n\t\t</NcActions>\n\t</div>\n</template>\n<script>\nimport Delete from 'vue-material-design-icons/Delete'\nimport DotsHorizontalCircleOutline from 'vue-material-design-icons/DotsHorizontalCircleOutline'\nimport MicrophoneOff from 'vue-material-design-icons/MicrophoneOff'\n\nexport default {\n\tcomponents: {\n\t\tDelete,\n\t\tDotsHorizontalCircleOutline,\n\t\tMicrophoneOff,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\ttoggled: false\n\t\t}\n\t}\n}\n</script>\n```\n\n### Custom icon slot in child elements\n```vue\n<template>\n\t<NcActions :primary=\"true\">\n\t\t<NcActionButton>\n\t\t\t<template #icon>\n\t\t\t\t<Magnify :size=\"20\" />\n\t\t\t</template>\n\t\t\tSearch\n\t\t</NcActionButton>\n\t\t<NcActionButton>\n\t\t\t<template #icon>\n\t\t\t\t<Delete :size=\"20\" />\n\t\t\t</template>\n\t\t\tDelete\n\t\t</NcActionButton>\n\t</NcActions>\n</template>\n<script>\nimport Delete from 'vue-material-design-icons/Delete'\nimport Magnify from 'vue-material-design-icons/Magnify'\n\nexport default {\n\tcomponents: {\n\t\tDelete,\n\t\tMagnify,\n\t},\n}\n</script>\n```\n\n### Type variants\n\n```vue\n<template>\n\t<div>\n\t\t<NcActions :type=\"current\">\n\t\t\t<template #icon>\n\t\t\t\t<SelectColor :size=\"20\" />\n\t\t\t</template>\n\n\t\t\t<NcActionButton v-if=\"current\" close-after-click @click=\"define()\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Delete :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\tRemove\n\t\t\t</NcActionButton>\n\n\t\t\t<NcActionButton v-for=\"row in types\" close-after-click @click=\"define(row)\" :key=\"`type-icon--${row}`\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<CheckboxMarkedCircleOutline v-if=\"row === current\" :size=\"20\" />\n\t\t\t\t\t<SelectColor v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ row }}\n\t\t\t</NcActionButton>\n\t\t</NcActions>\n\n\t\t<NcActions :type=\"current\" menu-name=\"Choose a type\">\n\t\t\t<NcActionButton v-if=\"current\" close-after-click @click=\"define()\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Delete :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\tRemove\n\t\t\t</NcActionButton>\n\n\t\t\t<NcActionButton v-for=\"row in types\" close-after-click @click=\"define(row)\" :key=\"`type-text--${row}`\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<CheckboxMarkedCircleOutline v-if=\"row === current\" :size=\"20\" />\n\t\t\t\t\t<SelectColor v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ row }}\n\t\t\t</NcActionButton>\n\t\t</NcActions>\n\n\t\t<NcActions :type=\"current\" menu-name=\"Choose a type\">\n\t\t\t<template #icon>\n\t\t\t\t<SelectColor :size=\"20\" />\n\t\t\t</template>\n\n\t\t\t<NcActionButton v-if=\"current\" close-after-click @click=\"define()\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<Delete :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\tRemove\n\t\t\t</NcActionButton>\n\n\t\t\t<NcActionButton v-for=\"row in types\" close-after-click @click=\"define(row)\" :key=\"`type-icon-text--${row}`\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<CheckboxMarkedCircleOutline v-if=\"row === current\" :size=\"20\" />\n\t\t\t\t\t<SelectColor v-else :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t{{ row }}\n\t\t\t</NcActionButton>\n\t\t</NcActions>\n\t</div>\n</template>\n\n<script>\nimport Delete from 'vue-material-design-icons/Delete'\nimport Palette from 'vue-material-design-icons/Palette'\nimport SelectColor from 'vue-material-design-icons/SelectColor'\nimport CheckboxMarkedCircleOutline from 'vue-material-design-icons/CheckboxMarkedCircleOutline'\n\nexport default {\n\tcomponents: {\n\t\tDelete,\n\t\tPalette,\n\t\tSelectColor,\n\t\tCheckboxMarkedCircleOutline,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcurrent: 'primary',\n\t\t\ttypes: [\n\t\t\t\t'primary',\n\t\t\t\t'secondary',\n\t\t\t\t'tertiary',\n\t\t\t\t'error',\n\t\t\t\t'warning',\n\t\t\t\t'success'\n\t\t\t]\n\t\t}\n\t},\n\tmethods: {\n\t\tdefine(row = undefined) {\n\t\t\tthis.current = row\n\t\t}\n\t}\n}\n</script>\n```\n\n### Use cases\n\n```vue\n<template>\n\t<div>\n\t\t<h2>Application menu</h2>\n\t\t<p>Has buttons, button groups, links and router links, separators, texts. May have checkboxes and radio buttons. Separator can be used to make groups of radio buttons as well.</p>\n\t\t<p><kbd>Arrows</kbd> are used to navigate between items, <kbd>Tab</kbd> is used to navigate to the next UI element on the page.</p>\n\t\t<p>\n\t\t\t<NcActions aria-label=\"Email menu\" type=\"tertiary\">\n\t\t\t\t<NcActionButtonGroup>\n\t\t\t\t\t<NcActionButton>\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<StarOutline :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\tFavorite\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t<NcActionButton>\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<EmailUnread :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\tUnread\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t<NcActionButton>\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Bookmark :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\tImportant\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActionButtonGroup>\n\t\t\t\t<NcActionText>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<ClockOutlineIcon :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\t{{ new Date().toLocaleDateString('en-US') }}\n\t\t\t\t</NcActionText>\n\t\t\t\t<NcActionSeparator />\n\t\t\t\t<NcActionButton>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<AlertOctagonIcon :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tMark as spam\n\t\t\t\t</NcActionButton>\n\t\t\t\t<NcActionCheckbox :checked.sync=\"selected\">\n\t\t\t\t\tSelect\n\t\t\t\t</NcActionCheckbox>\n\t\t\t\t<NcActionButton>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<OpenInNewIcon :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tMove thread\n\t\t\t\t</NcActionButton>\n\t\t\t\t<NcActionLink href=\"#\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<DownloadIcon :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tDownload message\n\t\t\t\t</NcActionLink>\n\t\t\t</NcActions>\n\t\t</p>\n\t\t<p>\n\t\t\t<NcActions aria-label=\"Text settings\" type=\"tertiary\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<FormatTitle :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t<NcActionButtonGroup name=\"Allignment\">\n\t\t\t\t\t<NcActionButton aria-label=\"Left\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<FormatAlignLeft :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t<NcActionButton aria-label=\"Center\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<FormatAlignCenter :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t<NcActionButton aria-label=\"Right\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<FormatAlignRight :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActionButtonGroup>\n\t\t\t\t<NcActionSeparator />\n\t\t\t\t<NcActionCheckbox :checked.sync=\"checked.bold\" value=\"bold\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<FormatBold :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tBold\n\t\t\t\t</NcActionCheckbox>\n\t\t\t\t<NcActionCheckbox :checked.sync=\"checked.italic\" value=\"italic\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<FormatItalic :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tItalic\n\t\t\t\t</NcActionCheckbox>\n\t\t\t\t<NcActionCheckbox :checked.sync=\"checked.underline\" value=\"underline\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<FormatUnderline :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tUnderline\n\t\t\t\t</NcActionCheckbox>\n\t\t\t\t<NcActionSeparator />\n\t\t\t\t<NcActionRadio name=\"color\" :checked.sync=\"color.black\" value=\"Black\">Black</NcActionRadio>\n\t\t\t\t<NcActionRadio name=\"color\" :checked.sync=\"color.blue\" value=\"Blue\">Blue</NcActionRadio>\n\t\t\t\t<NcActionRadio name=\"color\" :checked.sync=\"color.red\" value=\"Red\">Red</NcActionRadio>\n\t\t\t\t<NcActionRadio name=\"color\" :checked.sync=\"color.green\" value=\"Green\">Green</NcActionRadio>\n\t\t\t</NcActions>\n\t\t</p>\n\n\t\t<h2>Navigation</h2>\n\t\t<p>Has links or router links. May use text elements, captions and separators.</p>\n\t\t<p>Uses classic <kbd>Tab</kbd> navigation.</p>\n\t\t<p>\n\t\t\t<NcActions aria-label=\"Applications navigation\" :inline=\"2\" type=\"tertiary\">\n\t\t\t\t<NcActionLink href=\"/apps/dashboard\" icon=\"icon-category-dashboard-white\">\n\t\t\t\t\tDashboard\n\t\t\t\t</NcActionLink>\n\t\t\t\t<NcActionLink href=\"/apps/files\" icon=\"icon-files-white\">\n\t\t\t\t\tFiles\n\t\t\t\t</NcActionLink>\n\t\t\t\t<NcActionLink href=\"/apps/spreed\" icon=\"icon-talk-white\">\n\t\t\t\t\tTalk\n\t\t\t\t</NcActionLink>\n\t\t\t\t<NcActionLink href=\"/apps/contacts\" icon=\"icon-contacts-white\">\n\t\t\t\t\tContacts\n\t\t\t\t</NcActionLink>\n\t\t\t\t<NcActionLink href=\"/apps/circles\" icon=\"icon-circles-white\">\n\t\t\t\t\tCircles\n\t\t\t\t</NcActionLink>\n\t\t\t</NcActions>\n\t\t</p>\n\n\t\t<h2>Dialog</h2>\n\t\t<p>Includes data input elements, forms.</p>\n\t\t<p>Uses <kbd>Tab</kbd> navigation with a focus trap.</p>\n\t\t<p>\n\t\t\t<NcActions aria-label=\"Group management\">\n\t\t\t\t<NcActionInput trailing-button-label=\"Submit\" label=\"Rename group\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Pencil :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcActionInput>\n\t\t\t\t<NcActionButton>\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<Delete :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t\tRemove group\n\t\t\t\t</NcActionButton>\n\t\t\t</NcActions>\n\t\t</p>\n\n\t\t<h2>Toolip</h2>\n\t\t<p>Has only text and no interactive elements.</p>\n\t\t<p>\n\t\t\t<NcActions aria-label=\"Contact\" :inline=\"1\">\n\t\t\t\t<NcActionLink aria-label=\"View profile\" href=\"/u/alice\" icon=\"icon-user-white\">\n\t\t\t\t\tView profile\n\t\t\t\t</NcActionLink>\n\t\t\t\t<NcActionText icon=\"icon-timezone-white\">\n\t\t\t\t\tLocal time: 10:12\n\t\t\t\t</NcActionText>\n\t\t\t</NcActions>\n\t\t</p>\n\t</div>\n</template>\n\n<script>\n// Common icons\nimport Pencil from 'vue-material-design-icons/Pencil'\nimport Delete from 'vue-material-design-icons/Delete'\n\n// Email icons\nimport StarOutline from 'vue-material-design-icons/StarOutline'\nimport EmailUnread from 'vue-material-design-icons/Email'\nimport Bookmark from 'vue-material-design-icons/Bookmark'\nimport ClockOutlineIcon from 'vue-material-design-icons/ClockOutline'\nimport AlertOctagonIcon from 'vue-material-design-icons/AlertOctagon'\nimport CheckIcon from 'vue-material-design-icons/Check'\nimport OpenInNewIcon from 'vue-material-design-icons/OpenInNew'\nimport DownloadIcon from 'vue-material-design-icons/Download'\n\n// Formating icons\nimport FormatTitle from 'vue-material-design-icons/FormatTitle.vue'\nimport FormatAlignLeft from 'vue-material-design-icons/FormatAlignLeft.vue'\nimport FormatAlignCenter from 'vue-material-design-icons/FormatAlignCenter.vue'\nimport FormatAlignRight from 'vue-material-design-icons/FormatAlignRight.vue'\nimport FormatBold from 'vue-material-design-icons/FormatBold.vue'\nimport FormatItalic from 'vue-material-design-icons/FormatItalic.vue'\nimport FormatUnderline from 'vue-material-design-icons/FormatUnderline.vue'\n\nexport default {\n\tcomponents: {\n\t\t// Common icons\n\t\tPencil,\n\t\tDelete,\n\n\t\t// Email icons\n\t\tStarOutline,\n\t\tEmailUnread,\n\t\tBookmark,\n\t\tClockOutlineIcon,\n\t\tAlertOctagonIcon,\n\t\tCheckIcon,\n\t\tOpenInNewIcon,\n\t\tDownloadIcon,\n\n\t\t// Formating icons\n\t\tFormatTitle,\n\t\tFormatAlignLeft,\n\t\tFormatAlignCenter,\n\t\tFormatAlignRight,\n\t\tFormatBold,\n\t\tFormatItalic,\n\t\tFormatUnderline,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tselected: false,\n\t\t\t// Formating\n\t\t\tchecked: {\n\t\t\t\tbold: true,\n\t\t\t\titalic: false,\n\t\t\t\tunderline: false,\n\t\t\t},\n\t\t\tcolor: {\n\t\t\t\tblack: true,\n\t\t\t\tblue: false,\n\t\t\t\tred: false,\n\t\t\t\tgreen: false,\n\t\t\t},\n\t\t}\n\t},\n}\n</script>\n\n<style scoped>\np {\n\tmargin: 1rem 0;\n}\n</style>\n```\n\n## NcActions children limitations\n\n`<NcActions>` is supposed to be used with direct `<NcAction*>` children.\nAlthough it works when actions are not direct children but wrapped in custom components, it has limitations:\n- No `inline` prop property, including a single action display;\n- Accessibility issues, including changed keyboard behavior (see below);\n- Invalid HTML.\n\n```\n<template>\n\t<table class=\"actions-limitations-table\">\n\t\t<tr>\n\t\t\t<th style=\"width: 50%\">Non-direct children</th>\n\t\t\t<th style=\"width: 50%\">Direct NcAction* children</th>\n\t\t</tr>\n\n\t\t<tr>\n\t\t\t<th colspan=\"2\">This single button is supposed to be rendered as inline action but it is rendered as a menu:</th>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t<NcActions>\n\t\t\t\t\t<MyUserActionButton />\n\t\t\t\t</NcActions>\n\t\t\t</td>\n\t\t\t<td>\n\t\t\t\t<NcActions>\n\t\t\t\t\t<NcActionButton>\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Account :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\tButton\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<th colspan=\"2\">This NcActions is supposed to have 2 inline buttons but it has none:</th>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t<NcActions :inline=\"2\">\n\t\t\t\t\t<MyUserActionButton v-for=\"i in 4\" />\n\t\t\t\t</NcActions>\n\t\t\t</td>\n\t\t\t<td>\n\t\t\t\t<NcActions :inline=\"2\">\n\t\t\t\t\t<NcActionButton v-for=\"i in 4\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Account :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\tButton\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\t\t\t</td>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<th colspan=\"2\">This NcActions is supposed to have a11y role menu and keyboard navigation but it acts like a dialog:</th>\n\t\t</tr>\n\t\t<tr>\n\t\t\t<td>\n\t\t\t\t<NcActions>\n\t\t\t\t\t<MyActionsList />\n\t\t\t\t</NcActions>\n\t\t\t</td>\n\t\t\t<td>\n\t\t\t\t<NcActions>\n\t\t\t\t\t<NcActionButton v-for=\"i in 4\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<Account :size=\"20\" />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\tButton\n\t\t\t\t\t</NcActionButton>\n\t\t\t\t</NcActions>\n\t\t\t</td>\n\t\t</tr>\n\t</table>\n</template>\n\n<script>\nimport Account from 'vue-material-design-icons/Account.vue'\n\nexport default {\n\tcomponents: {\n\t\tAccount,\n\n\t\tMyUserActionButton: {\n\t\t\tname: 'MyUserActionButton',\n\t\t\tcomponents: { Account },\n\t\t\trender: (h) => h('NcActionButton', ['Button', h('Account', { props: { size: 20 }, slot: 'icon' })]),\n\t\t},\n\n\t\tMyActionsList: {\n\t\t\tname: 'MyActionsList',\n\t\t\tcomponents: { Account },\n\t\t\trender: (h) => h('div', [\n\t\t\t\th('NcActionButton', ['Button', h('Account', { props: { size: 20 }, slot: 'icon' })]),\n\t\t\t\th('NcActionButton', ['Button', h('Account', { props: { size: 20 }, slot: 'icon' })]),\n\t\t\t\th('NcActionButton', ['Button', h('Account', { props: { size: 20 }, slot: 'icon' })]),\n\t\t\t\th('NcActionButton', ['Button', h('Account', { props: { size: 20 }, slot: 'icon' })]),\n\t\t\t]),\n\t\t}\n\t}\n}\n</script>\n\n<style>\n.actions-limitations-table {\n\tborder-collapse: collapse;\n\twidth: 100%;\n\tth,\n\ttd {\n\t\tborder: 1px solid var(--color-border);\n\t\tpadding: var(--default-grid-baseline);\n\t\tmax-width: 50%;\n\t}\n\n\tth {\n\t\ttext-align: center;\n\t\ttext-wrap: wrap;\n\t}\n}\n</style>\n```\n\n#### Manually providing semantic menu information\nDue to limitations of Vue, when using a custom wrapper for action components, you have to provide the semantic menu type yourself.\nThis is used for keyboard navigation and accessibility.\nIn this example a `NcActionInput` component is used within a custom wrapper, so `NcActions` is not able to detect the semantic menu type of 'dialog' automatically,\nmeaning it must be provided manually:\n\n```vue\n<template>\n\t<NcActions menu-semantic-type=\"dialog\">\n\t\t<MyWrapper />\n\t</NcActions>\n</template>\n<script>\nimport Pencil from 'vue-material-design-icons/Pencil.vue'\n\nexport default {\n\tcomponents: {\n\t\tMyWrapper: {\n\t\t\ttemplate: `\n<NcActionInput trailing-button-label=\"Submit\" label=\"Rename group\">\n\t<template #icon>\n\t\t<Pencil :size=\"20\" />\n\t</template>\n</NcActionInput>`,\n\t\t},\n\t\tcomponents: {\n\t\t\tPencil,\n\t\t},\n\t},\n}\n</script>\n```\n\n</docs>\n\n<script>\nimport NcButton from '../NcButton/index.js'\nimport NcPopover from '../NcPopover/index.js'\nimport GenRandomId from '../../utils/GenRandomId.js'\nimport { getTrapStack } from '../../utils/focusTrap.js'\nimport { t } from '../../l10n.js'\n\nimport Vue, { computed } from 'vue'\nimport DotsHorizontal from 'vue-material-design-icons/DotsHorizontal.vue'\n\nconst focusableSelector = '.focusable'\n\n/**\n * The Actions component can be used to display one ore more actions.\n * If only a single action is provided, it will be rendered as an inline icon.\n * For more, a menu indicator will be shown and a popovermenu containing the\n * actions will be opened on click.\n *\n * @since 0.10.0\n */\nexport default {\n\tname: 'NcActions',\n\n\tcomponents: {\n\t\tNcButton,\n\t\tDotsHorizontal,\n\t\tNcPopover,\n\t},\n\n\tprovide() {\n\t\treturn {\n\t\t\t/**\n\t\t\t * NcActions can be used as:\n\t\t\t * - Application menu (has menu role)\n\t\t\t * - Expanded block (has no specific role, should be used an element with expanded role)\n\t\t\t * - Popover with plain text or text inputs (has no specific role)\n\t\t\t * Depending on the usage (used items), the menu and its items should have different roles for a11y.\n\t\t\t * Provide the role for NcAction* components in the NcActions content.\n\t\t\t * @type {import('vue').ComputedRef<boolean>}\n\t\t\t */\n\t\t\t'NcActions:isSemanticMenu': computed(() => this.actionsMenuSemanticType === 'menu'),\n\t\t}\n\t},\n\n\tprops: {\n\t\t/**\n\t\t * Specify the open state of the popover menu\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 * This disables the internal open management,\n\t\t * so the actions menu only respects the `open` prop.\n\t\t * This is e.g. necessary for the NcAvatar component\n\t\t * to only open the actions menu after loading it's entries has finished.\n\t\t */\n\t\tmanualOpen: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Force the actions to display in a three dot menu\n\t\t */\n\t\tforceMenu: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Force the name to show for single actions\n\t\t */\n\t\tforceName: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Specify the menu name\n\t\t */\n\t\tmenuName: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * NcActions can be used as:\n\t\t *\n\t\t * - Application menu (has menu role)\n\t\t * - Navigation (has no specific role, should be used an element with expanded role)\n\t\t * - Popover with plain text or text inputs (has no specific role)\n\t\t *\n\t\t * By default the used type is automatically detected by components used in the default slot.#\n\t\t *\n\t\t * With Vue this is limited to direct children of the NcActions component.\n\t\t * So if you use a wrapper, you have to provide the semantic type yourself (see Example)\n\t\t *\n\t\t * Choose:\n\t\t *\n\t\t * - 'dialog' if you use any of these components: NcActionInput', 'NcActionTextEditable'\n\t\t * - 'menu' if you use any of these components: 'NcActionButton', 'NcActionButtonGroup', 'NcActionCheckbox', 'NcActionRadio'\n\t\t * - 'expanded' if using one of these: 'NcActionLink', 'NcActionRouter'. This represents an expanded block.\n\t\t * - 'tooltip' only to be used when a text without any interactive elements is used.\n\t\t * - Leave this property unset otherwise\n\t\t */\n\t\tforceSemanticType: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['dialog', 'menu', 'expanded', 'tooltip'].includes(value)\n\t\t\t},\n\t\t},\n\n\t\t/**\n\t\t * Apply primary styling for this menu\n\t\t */\n\t\tprimary: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Specifies the button type used for trigger and single actions buttons\n\t\t * Accepted values: primary, secondary, tertiary, tertiary-no-background, tertiary-on-primary, error, warning, success. If left empty,\n\t\t * the default button style will be applied.\n\t\t */\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['primary', 'secondary', 'tertiary', 'tertiary-no-background', 'tertiary-on-primary', 'error', 'warning', 'success'].indexOf(value) !== -1\n\t\t\t},\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Icon to show for the toggle menu button\n\t\t * when more than one action is inside the actions component.\n\t\t * Only replace the default three-dot icon if really necessary.\n\t\t */\n\t\tdefaultIcon: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\n\t\t/**\n\t\t * Aria label for the actions menu.\n\t\t *\n\t\t * If `menuName` is defined this will not be used to prevent\n\t\t * any accessible name conflicts. This ensures that the\n\t\t * element can be activated via voice input.\n\t\t */\n\t\tariaLabel: {\n\t\t\ttype: String,\n\t\t\tdefault: t('Actions'),\n\t\t},\n\n\t\t/**\n\t\t * @deprecated To be removed in @nextcloud/vue 9. Migration guide: remove ariaHidden prop from NcAction* components.\n\t\t * @todo Add a check in @nextcloud/vue 9 that this prop is not provided,\n\t\t * otherwise root element will inherit incorrect aria-hidden.\n\t\t */\n\t\tariaHidden: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Wanted direction of the menu\n\t\t */\n\t\tplacement: {\n\t\t\ttype: String,\n\t\t\tdefault: 'bottom',\n\t\t},\n\n\t\t/**\n\t\t * DOM element for the actions' popover boundaries\n\t\t */\n\t\tboundariesElement: {\n\t\t\ttype: Element,\n\t\t\tdefault: () => document.querySelector('body'),\n\t\t},\n\n\t\t/**\n\t\t * Selector for the actions' popover container\n\t\t */\n\t\tcontainer: {\n\t\t\ttype: [String, Object, Element, Boolean],\n\t\t\tdefault: 'body',\n\t\t},\n\n\t\t/**\n\t\t * Disabled state of the main button (single action or menu toggle)\n\t\t */\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\n\t\t/**\n\t\t * Display x items inline out of the dropdown menu\n\t\t * Will be ignored if `forceMenu` is set\n\t\t */\n\t\tinline: {\n\t\t\ttype: Number,\n\t\t\tdefault: 0,\n\t\t},\n\t},\n\n\temits: [\n\t\t'open',\n\t\t'update:open',\n\t\t'close',\n\t\t'focus',\n\t\t'blur',\n\t\t'click',\n\t],\n\n\tsetup() {\n\t\tconst randomId = `menu-${GenRandomId()}`\n\t\treturn {\n\t\t\trandomId,\n\t\t\ttriggerRandomId: `trigger-${randomId}`,\n\t\t}\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\topened: this.open,\n\t\t\tfocusIndex: 0,\n\t\t\t/**\n\t\t\t * @type {'menu'|'expanded'|'dialog'|'tooltip'|'unknown'}\n\t\t\t */\n\t\t\tactionsMenuSemanticType: 'unknown',\n\t\t\texternalFocusTrapStack: [],\n\t\t}\n\t},\n\n\tcomputed: {\n\t\ttriggerBtnType() {\n\t\t\t// If requested, we use a primary button\n\t\t\treturn this.type || (this.primary\n\t\t\t\t? 'primary'\n\t\t\t\t// If it has a name, we use a secondary button\n\t\t\t\t: this.menuName ? 'secondary' : 'tertiary')\n\t\t},\n\n\t\t/**\n\t\t * A11y roles and keyboard navigation configuration depending on the semantic type\n\t\t */\n\t\tconfig() {\n\t\t\t/**\n\t\t\t * Accessibility notes:\n\t\t\t *\n\t\t\t * \"aria-haspopup\" and \"aria-expanded\" are managed by NcPopover via `popupRole`\n\t\t\t *\n\t\t\t * \"aria-controls\" should only present together with a valid aria-haspopup\n\t\t\t *\n\t\t\t * There is no valid popup role for expanded and tooltip in `aria-haspopup`.\n\t\t\t * aria-haspopup=\"true\" is equivalent to aria-haspopup=\"menu\".\n\t\t\t * They must not be treated as menus.\n\t\t\t *\n\t\t\t * Having both arrow and tab navigation is not allowed for a11y.\n\t\t\t * Either menu is an atomic UI element, and arrows select menu items, Tab moves to the next UI element.\n\t\t\t * Or the menu is an expanded list of UI elements.\n\t\t\t *\n\t\t\t * Navigation type is just an \"expanded\" block, similar to native <details> element.\n\t\t\t *\n\t\t\t * Arrow and Tab navigation should not be used together:\n\t\t\t * - Arrow navigation is used to navigate between items of UI element\n\t\t\t * - Tab navigation is used to navigate between UI elements on the page\n\t\t\t * - Menu is either an atomic UI element of just an expanded block of elements\n\t\t\t */\n\t\t\tconst configs = {\n\t\t\t\tmenu: {\n\t\t\t\t\tpopupRole: 'menu',\n\t\t\t\t\twithArrowNavigation: true,\n\t\t\t\t\twithTabNavigation: false,\n\t\t\t\t\twithFocusTrap: false,\n\t\t\t\t\ttriggerA11yAttr: {\n\t\t\t\t\t\t'aria-controls': this.opened ? this.randomId : null,\n\t\t\t\t\t},\n\t\t\t\t\tpopoverContainerA11yAttrs: {},\n\t\t\t\t\tpopoverUlA11yAttrs: {\n\t\t\t\t\t\tid: this.randomId,\n\t\t\t\t\t\trole: 'menu',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\texpanded: {\n\t\t\t\t\tpopupRole: undefined,\n\t\t\t\t\twithArrowNavigation: false,\n\t\t\t\t\twithTabNavigation: true,\n\t\t\t\t\twithFocusTrap: false,\n\t\t\t\t\ttriggerA11yAttr: {},\n\t\t\t\t\tpopoverContainerA11yAttrs: {},\n\t\t\t\t\tpopoverUlA11yAttrs: {},\n\t\t\t\t},\n\t\t\t\tdialog: {\n\t\t\t\t\tpopupRole: 'dialog',\n\t\t\t\t\twithArrowNavigation: false,\n\t\t\t\t\twithTabNavigation: true,\n\t\t\t\t\twithFocusTrap: true,\n\t\t\t\t\ttriggerA11yAttr: {\n\t\t\t\t\t\t'aria-controls': this.opened ? this.randomId : null,\n\t\t\t\t\t},\n\t\t\t\t\tpopoverContainerA11yAttrs: {\n\t\t\t\t\t\tid: this.randomId,\n\t\t\t\t\t\trole: 'dialog',\n\t\t\t\t\t\t// Dialog must have a label\n\t\t\t\t\t\t'aria-labelledby': this.triggerRandomId,\n\t\t\t\t\t\t'aria-modal': 'true',\n\t\t\t\t\t},\n\t\t\t\t\tpopoverUlA11yAttrs: {},\n\t\t\t\t},\n\t\t\t\ttooltip: {\n\t\t\t\t\tpopupRole: undefined,\n\t\t\t\t\twithArrowNavigation: false,\n\t\t\t\t\twithTabNavigation: false,\n\t\t\t\t\twithFocusTrap: false,\n\t\t\t\t\ttriggerA11yAttr: {},\n\t\t\t\t\tpopoverContainerA11yAttrs: {},\n\t\t\t\t\tpopoverUlA11yAttrs: {},\n\t\t\t\t},\n\t\t\t\t// Due to Vue limitations, we sometimes cannot determine the true type\n\t\t\t\t// As a fallback use both arrow navigation and focus trap\n\t\t\t\tunknown: {\n\t\t\t\t\tpopupRole: undefined,\n\t\t\t\t\trole: undefined,\n\t\t\t\t\twithArrowNavigation: true,\n\t\t\t\t\twithTabNavigation: false,\n\t\t\t\t\twithFocusTrap: true,\n\t\t\t\t\ttriggerA11yAttr: {},\n\t\t\t\t\tpopoverContainerA11yAttrs: {},\n\t\t\t\t\tpopoverUlA11yAttrs: {},\n\t\t\t\t},\n\t\t\t}\n\t\t\treturn configs[this.actionsMenuSemanticType]\n\t\t},\n\t},\n\n\twatch: {\n\t\t// Watch parent prop\n\t\topen(state) {\n\t\t\tif (state === this.opened) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.opened = state\n\t\t},\n\n\t\topened() {\n\t\t\tthis.intersectIntoCurrentFocusTrapStack()\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Get the name of the action component\n\t\t *\n\t\t * @param {import('vue').VNode} action - a vnode with a NcAction* component instance\n\t\t * @return {string} the name of the action component\n\t\t */\n\t\tgetActionName(action) {\n\t\t\treturn action?.componentOptions?.Ctor?.extendOptions?.name ?? action?.componentOptions?.tag\n\t\t},\n\n\t\t/**\n\t\t * When the component has its own focus trap, then it is managed by global trap stack by focus-trap.\n\t\t *\n\t\t * However if the component has no focus trap and is used inside another focus trap - there is an issue.\n\t\t * By default popover content is rendered in body or other container, which is likely outside the current focus trap containers.\n\t\t * It results in broken behavior from focus-trap.\n\t\t *\n\t\t * We need to pause all the focus traps for opening popover and then unpause them back after closing.\n\t\t */\n\t\tintersectIntoCurrentFocusTrapStack() {\n\t\t\tif (this.config.withFocusTrap) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.opened) {\n\t\t\t\tthis.externalFocusTrapStack = [...getTrapStack()]\n\t\t\t\tfor (const trap of this.externalFocusTrapStack) {\n\t\t\t\t\ttrap.pause()\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const trap of this.externalFocusTrapStack) {\n\t\t\t\t\ttrap.unpause()\n\t\t\t\t}\n\t\t\t\tthis.externalFocusTrapStack = []\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Do we have exactly one Action and\n\t\t * is it allowed as a standalone element?\n\t\t *\n\t\t * @param {import('vue').VNode} action The action to check\n\t\t * @return {boolean}\n\t\t */\n\t\tisValidSingleAction(action) {\n\t\t\treturn ['NcActionButton', 'NcActionLink', 'NcActionRouter'].includes(this.getActionName(action))\n\t\t},\n\n\t\t/**\n\t\t * Check whether a icon prop value is an URL or not\n\t\t * @param {string} url The icon prop value\n\t\t */\n\t\tisIconUrl(url) {\n\t\t\ttry {\n\t\t\t\treturn !!(new URL(url, url.startsWith('/') ? window.location.origin : undefined))\n\t\t\t} catch (error) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t},\n\n\t\t// MENU STATE MANAGEMENT\n\t\topenMenu(e) {\n\t\t\tif (this.opened) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.opened = true\n\n\t\t\t/**\n\t\t\t * Event emitted when the popover menu open state is changed\n\t\t\t *\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tthis.$emit('update:open', true)\n\n\t\t\t/**\n\t\t\t * Event emitted when the popover menu is opened\n\t\t\t */\n\t\t\tthis.$emit('open')\n\t\t},\n\t\tasync closeMenu(returnFocus = true) {\n\t\t\tif (!this.opened) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// Wait for the next tick to keep the menu in DOM, allowing other components to find what button in what menu was used,\n\t\t\t// for example, to implement auto set return focus.\n\t\t\t// NcPopover will actually remove the menu from DOM also on the next tick.\n\t\t\tawait this.$nextTick()\n\n\t\t\tthis.opened = false\n\n\t\t\tthis.$refs.popover?.clearFocusTrap({ returnFocus })\n\n\t\t\t/**\n\t\t\t * Event emitted when the popover menu open state is changed\n\t\t\t *\n\t\t\t * @type {boolean}\n\t\t\t */\n\t\t\tthis.$emit('update:open', false)\n\n\t\t\t/**\n\t\t\t * Event emitted when the popover menu is closed\n\t\t\t */\n\t\t\tthis.$emit('close')\n\n\t\t\t// close everything\n\t\t\tthis.focusIndex = 0\n\n\t\t\tif (returnFocus) {\n\t\t\t\t// Focus back the menu button\n\t\t\t\tthis.$refs.menuButton?.$el.focus()\n\t\t\t}\n\t\t},\n\n\t\tonOpen(event) {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.focusFirstAction(event)\n\t\t\t})\n\t\t},\n\n\t\t// MENU KEYS & FOCUS MANAGEMENT\n\t\t/**\n\t\t * @return {HTMLElement|null}\n\t\t */\n\t\tgetCurrentActiveMenuItemElement() {\n\t\t\treturn this.$refs.menu.querySelector('li.active')\n\t\t},\n\t\t/**\n\t\t * @return {NodeListOf<HTMLElement>}\n\t\t */\n\t\tgetFocusableMenuItemElements() {\n\t\t\treturn this.$refs.menu.querySelectorAll(focusableSelector)\n\t\t},\n\t\t/**\n\t\t * Focus nearest focusable item on mouse move.\n\t\t * DO NOT change the focus if the target is already focused\n\t\t * this will prevent issues with input being unfocused\n\t\t * on mouse move\n\t\t * @param {PointerEvent} event - The mouse move event\n\t\t */\n\t\tonMouseFocusAction(event) {\n\t\t\tif (document.activeElement === event.target) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst menuItem = event.target.closest('li')\n\t\t\tif (menuItem && this.$refs.menu.contains(menuItem)) {\n\t\t\t\tconst focusableItem = menuItem.querySelector(focusableSelector)\n\t\t\t\tif (focusableItem) {\n\t\t\t\t\tconst focusList = this.getFocusableMenuItemElements()\n\t\t\t\t\tconst focusIndex = [...focusList].indexOf(focusableItem)\n\t\t\t\t\tif (focusIndex > -1) {\n\t\t\t\t\t\tthis.focusIndex = focusIndex\n\t\t\t\t\t\tthis.focusAction()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t/**\n\t\t * Dispatches the keydown listener to different handlers\n\t\t *\n\t\t * @param {object} event The keydown event\n\t\t */\n\t\tonKeydown(event) {\n\t\t\tif (event.key === 'Tab') {\n\t\t\t\tif (this.config.withFocusTrap) {\n\t\t\t\t\t// Focus is managed by focus-trap\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tif (!this.config.withTabNavigation) {\n\t\t\t\t\t// Tab is not used for navigation - close the menu\n\t\t\t\t\t// Return focus to restore Tab sequence\n\t\t\t\t\t// So browser will correctly move focus to the next element\n\t\t\t\t\tthis.closeMenu(true)\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\t// Tab is used for classic navigation but we implement it manually\n\n\t\t\t\tevent.preventDefault()\n\n\t\t\t\tconst focusList = this.getFocusableMenuItemElements()\n\t\t\t\tconst focusIndex = [...focusList].indexOf(document.activeElement)\n\t\t\t\tif (focusIndex === -1) {\n\t\t\t\t\t// This is not supposed to happen\n\t\t\t\t\t// But if it does - do nothing and keep native behavior\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst newFocusIndex = event.shiftKey ? focusIndex - 1 : focusIndex + 1\n\n\t\t\t\t// There is no focus-trap, so going out of the menu closes it\n\t\t\t\tif (newFocusIndex < 0 || newFocusIndex === focusList.length) {\n\t\t\t\t\tthis.closeMenu(true)\n\t\t\t\t}\n\n\t\t\t\t// Update current focused element\n\t\t\t\tthis.focusIndex = newFocusIndex\n\t\t\t\tthis.focusAction()\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (this.config.withArrowNavigation) {\n\t\t\t\tif (event.key === 'ArrowUp') {\n\t\t\t\t\tthis.focusPreviousAction(event)\n\t\t\t\t}\n\n\t\t\t\tif (event.key === 'ArrowDown') {\n\t\t\t\t\tthis.focusNextAction(event)\n\t\t\t\t}\n\n\t\t\t\tif (event.key === 'PageUp') {\n\t\t\t\t\tthis.focusFirstAction(event)\n\t\t\t\t}\n\n\t\t\t\tif (event.key === 'PageDown') {\n\t\t\t\t\tthis.focusLastAction(event)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\tthis.closeMenu()\n\t\t\t\tevent.preventDefault()\n\t\t\t}\n\t\t},\n\t\tonTriggerKeydown(event) {\n\t\t\tif (event.key === 'Escape') {\n\t\t\t\t// Tooltip has no focusable elements and the focus remains on the trigger button.\n\t\t\t\t// So keydown event on the menu cannot be handled to close Tooltip on Escape.\n\t\t\t\t// Handle on the trigger.\n\t\t\t\tif (this.actionsMenuSemanticType === 'tooltip') {\n\t\t\t\t\tthis.closeMenu()\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tremoveCurrentActive() {\n\t\t\tconst currentActiveElement = this.$refs.menu.querySelector('li.active')\n\t\t\tif (currentActiveElement) {\n\t\t\t\tcurrentActiveElement.classList.remove('active')\n\t\t\t}\n\t\t},\n\t\tfocusAction() {\n\t\t\t// TODO: have a global disabled state for non input elements\n\t\t\tconst focusElement = this.getFocusableMenuItemElements()[this.focusIndex]\n\t\t\tif (focusElement) {\n\t\t\t\tthis.removeCurrentActive()\n\t\t\t\tconst liMenuParent = focusElement.closest('li.action')\n\t\t\t\tfocusElement.focus()\n\t\t\t\tif (liMenuParent) {\n\t\t\t\t\tliMenuParent.classList.add('active')\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tfocusPreviousAction(event) {\n\t\t\tif (this.opened) {\n\t\t\t\tif (this.focusIndex === 0) {\n\t\t\t\t\tthis.focusLastAction(event)\n\t\t\t\t} else {\n\t\t\t\t\tthis.preventIfEvent(event)\n\t\t\t\t\tthis.focusIndex = this.focusIndex - 1\n\t\t\t\t}\n\t\t\t\tthis.focusAction()\n\t\t\t}\n\t\t},\n\t\tfocusNextAction(event) {\n\t\t\tif (this.opened) {\n\t\t\t\tconst indexLength = this.getFocusableMenuItemElements().length - 1\n\t\t\t\tif (this.focusIndex === indexLength) {\n\t\t\t\t\tthis.focusFirstAction(event)\n\t\t\t\t} else {\n\t\t\t\t\tthis.preventIfEvent(event)\n\t\t\t\t\tthis.focusIndex = this.focusIndex + 1\n\t\t\t\t}\n\t\t\t\tthis.focusAction()\n\t\t\t}\n\t\t},\n\t\tfocusFirstAction(event) {\n\t\t\tif (this.opened) {\n\t\t\t\tthis.preventIfEvent(event)\n\t\t\t\t// In case a NcActionButton is considered checked we will use this one as a initial focus\n\t\t\t\t// Having aria-checked is the simplest way to determine the checked state of a button\n\t\t\t\t// TODO: determine when we need to focus the first checked item and when we not, for example, if menu has many radio groups\n\t\t\t\tconst firstCheckedIndex = [...this.getFocusableMenuItemElements()].findIndex((button) => {\n\t\t\t\t\treturn button.getAttribute('aria-checked') === 'true' && button.getAttribute('role') === 'menuitemradio'\n\t\t\t\t})\n\t\t\t\tthis.focusIndex = firstCheckedIndex > -1 ? firstCheckedIndex : 0\n\t\t\t\tthis.focusAction()\n\t\t\t}\n\t\t},\n\t\tfocusLastAction(event) {\n\t\t\tif (this.opened) {\n\t\t\t\tthis.preventIfEvent(event)\n\t\t\t\tthis.focusIndex = this.getFocusableMenuItemElements().length - 1\n\t\t\t\tthis.focusAction()\n\t\t\t}\n\t\t},\n\t\tpreventIfEvent(event) {\n\t\t\tif (event) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\t\t\t}\n\t\t},\n\t\tonFocus(event) {\n\t\t\tthis.$emit('focus', event)\n\t\t},\n\t\tonBlur(event) {\n\t\t\tthis.$emit('blur', event)\n\n\t\t\t// When there is no focusable elements to handle Tab press from actions menu\n\t\t\t// It requries manual closing\n\t\t\tif (this.actionsMenuSemanticType === 'tooltip') {\n\t\t\t\t// Tooltip is supposed to have no focusable element.\n\t\t\t\t// However, if there is a custom focusable element, it will be auto-focused and cause the menu to be closed on open.\n\t\t\t\tif (this.$refs.menu && this.getFocusableMenuItemElements().length === 0) {\n\t\t\t\t\tthis.closeMenu(false)\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tonClick(event) {\n\t\t\t/**\n\t\t\t * Event emitted when the menu toggle button is clicked.\n\t\t\t *\n\t\t\t * This is e.g. necessary for the NcAvatar component\n\t\t\t * which needs to fetch the menu items on click.\n\t\t\t *\n\t\t\t * @type {PointerEvent}\n\t\t\t */\n\t\t\tthis.$emit('click', event)\n\t\t},\n\t},\n\n\t/**\n\t * The render function to display the component\n\t *\n\t * @param {Function} h The function to create VNodes\n\t * @return {object|undefined} The created VNode\n\t */\n\trender(h) {\n\t\t/**\n\t\t * Filter the Actions, so that we only get allowed components.\n\t\t * This also ensure that we don't get 'text' elements, which would\n\t\t * become problematic later on.\n\t\t */\n\t\tconst actions = (this.$slots.default || []).filter(action => this.getActionName(action))\n\n\t\t// Check that we have at least one action\n\t\tif (actions.length === 0) {\n\t\t\treturn\n\t\t}\n\n\t\t/**\n\t\t * Separate the actions into inline and menu actions\n\t\t */\n\n\t\t/**\n\t\t * @type {import('vue').VNode[]}\n\t\t */\n\t\tlet validInlineActions = actions.filter(this.isValidSingleAction)\n\t\tif (this.forceMenu && validInlineActions.length > 0 && this.inline > 0) {\n\t\t\tVue.util.warn('Specifying forceMenu will ignore any inline actions rendering.')\n\t\t\tvalidInlineActions = []\n\t\t}\n\t\t/**\n\t\t * @type {import('vue').VNode[]}\n\t\t */\n\t\tconst inlineActions = validInlineActions.slice(0, this.inline)\n\t\t/**\n\t\t * @type {import('vue').VNode[]}\n\t\t */\n\t\tconst menuActions = actions.filter(action => !inlineActions.includes(action))\n\n\t\t/**\n\t\t * Determine what kind of menu we have.\n\t\t * It defines keyboard navigation and a11y.\n\t\t */\n\t\tif (this.forceSemanticType) {\n\t\t\tthis.actionsMenuSemanticType = this.forceSemanticType\n\t\t} else {\n\t\t\tconst textInputActions = ['NcActionInput', 'NcActionTextEditable']\n\t\t\tconst menuItemsActions = ['NcActionButton', 'NcActionButtonGroup', 'NcActionCheckbox', 'NcActionRadio']\n\t\t\tconst linkActions = ['NcActionLink', 'NcActionRouter']\n\n\t\t\tconst hasTextInputAction = menuActions.some(action => textInputActions.includes(this.getActionName(action)))\n\t\t\tconst hasMenuItemAction = menuActions.some(action => menuItemsActions.includes(this.getActionName(action)))\n\t\t\tconst hasLinkAction = menuActions.some(action => linkActions.includes(this.getActionName(action)))\n\n\t\t\tif (hasTextInputAction) {\n\t\t\t\tthis.actionsMenuSemanticType = 'dialog'\n\t\t\t} else if (hasMenuItemAction) {\n\t\t\t\tthis.actionsMenuSemanticType = 'menu'\n\t\t\t} else if (hasLinkAction) {\n\t\t\t\tthis.actionsMenuSemanticType = 'expanded'\n\t\t\t} else {\n\t\t\t\t// (!) Hotfix (!)\n\t\t\t\t// In Vue 2 it is not easy to search for NcAction* in sub-component of a slot.\n\t\t\t\t// When a menu is rendered, children are not mounted yet.\n\t\t\t\t// If we have NcActions > MyActionsList > NcActionButton, only MyActionsList's vnode is available.\n\t\t\t\t// So when NcActions has actions as non-direct children, here then we don't know about them.\n\t\t\t\t// Like this menu has no buttons/links/inputs.\n\t\t\t\t// It makes the menu incorrectly considered a tooltip.\n\t\t\t\tconst ncActions = actions.filter((action) => this.getActionName(action).startsWith('NcAction'))\n\t\t\t\tif (ncActions.length === actions.length) {\n\t\t\t\t\t// True tooltip\n\t\t\t\t\tthis.actionsMenuSemanticType = 'tooltip'\n\t\t\t\t} else {\n\t\t\t\t\t// Custom components are passed to the NcActions\n\t\t\t\t\tthis.actionsMenuSemanticType = 'unknown'\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Render the provided action\n\t\t *\n\t\t * @param {import('vue').VNode} action the action to render\n\t\t * @return {Function} the vue render function\n\t\t */\n\t\tconst renderInlineAction = (action) => {\n\t\t\tconst iconProp = action?.componentOptions?.propsData?.icon\n\t\t\tconst icon = action?.data?.scopedSlots?.icon()?.[0] ?? (\n\t\t\t\tthis.isIconUrl(iconProp)\n\t\t\t\t\t? h('img', { class: 'action-item__menutoggle__icon', attrs: { src: iconProp, alt: '' } })\n\t\t\t\t\t: h('span', { class: ['icon', iconProp] })\n\t\t\t)\n\t\t\tconst attrs = action?.data?.attrs || {}\n\t\t\tconst clickListener = action?.componentOptions?.listeners?.click\n\n\t\t\tconst text = action?.componentOptions?.children?.[0]?.text?.trim?.()\n\t\t\tconst ariaLabel = action?.componentOptions?.propsData?.ariaLabel || text\n\t\t\tconst buttonText = this.forceName ? text : ''\n\n\t\t\tlet title = action?.componentOptions?.propsData?.title\n\t\t\t// Show a default title for single actions if none is present\n\t\t\tif (!(this.forceName || title)) {\n\t\t\t\ttitle = text\n\t\t\t}\n\n\t\t\tconst propsToForward = { ...(action?.componentOptions?.propsData ?? {}) }\n\t\t\tconst nativeType = ['submit', 'reset'].includes(propsToForward.type) ? propsToForward.modelValue : 'button'\n\t\t\t// not available on NcButton or with different meaning\n\t\t\tdelete propsToForward.modelValue\n\t\t\tdelete propsToForward.type\n\n\t\t\treturn h('NcButton',\n\t\t\t\t{\n\t\t\t\t\tclass: [\n\t\t\t\t\t\t'action-item action-item--single',\n\t\t\t\t\t\taction?.data?.staticClass,\n\t\t\t\t\t\taction?.data?.class,\n\t\t\t\t\t],\n\t\t\t\t\tattrs: {\n\t\t\t\t\t\t...attrs,\n\t\t\t\t\t\t'aria-label': ariaLabel,\n\t\t\t\t\t\ttitle,\n\t\t\t\t\t},\n\t\t\t\t\tref: action?.data?.ref,\n\t\t\t\t\tprops: {\n\t\t\t\t\t\t// If it has a menuName, we use a secondary button\n\t\t\t\t\t\ttype: this.type || (buttonText ? 'secondary' : 'tertiary'),\n\t\t\t\t\t\tdisabled: this.disabled || action?.componentOptions?.propsData?.disabled,\n\t\t\t\t\t\tpressed: action?.componentOptions?.propsData?.modelValue,\n\t\t\t\t\t\tnativeType,\n\t\t\t\t\t\t...propsToForward,\n\t\t\t\t\t},\n\t\t\t\t\ton: {\n\t\t\t\t\t\tfocus: this.onFocus,\n\t\t\t\t\t\tblur: this.onBlur,\n\t\t\t\t\t\t// forward any pressed state from NcButton just like NcActionButton does\n\t\t\t\t\t\t'update:pressed': action?.componentOptions?.listeners?.['update:modelValue'] ?? (() => {}),\n\t\t\t\t\t\t// If we have a click listener,\n\t\t\t\t\t\t// we bind it to execute on click and forward the click event\n\t\t\t\t\t\t...(!!clickListener && {\n\t\t\t\t\t\t\tclick: (event) => {\n\t\t\t\t\t\t\t\tif (clickListener) {\n\t\t\t\t\t\t\t\t\tclickListener(event)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t[\n\t\t\t\t\th('template', { slot: 'icon' }, [icon]),\n\t\t\t\t\tbuttonText,\n\t\t\t\t],\n\t\t\t)\n\t\t}\n\n\t\t/**\n\t\t * Render the actions popover\n\t\t *\n\t\t * @param {Array} actions the actions to render within\n\t\t * @return {Function} the vue render function\n\t\t */\n\t\tconst renderActionsPopover = (actions) => {\n\t\t\tconst triggerIcon = this.$slots.icon?.[0] || (\n\t\t\t\tthis.defaultIcon\n\t\t\t\t\t? h('span', { class: ['icon', this.defaultIcon] })\n\t\t\t\t\t: h('DotsHorizontal', {\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tsize: 20,\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t)\n\t\t\treturn h('NcPopover',\n\t\t\t\t{\n\t\t\t\t\tref: 'popover',\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tdelay: 0,\n\t\t\t\t\t\thandleResize: true,\n\t\t\t\t\t\tshown: this.opened,\n\t\t\t\t\t\tplacement: this.placement,\n\t\t\t\t\t\tboundary: this.boundariesElement,\n\t\t\t\t\t\tcontainer: this.container,\n\t\t\t\t\t\tpopoverBaseClass: 'action-item__popper',\n\t\t\t\t\t\tpopupRole: this.config.popupRole,\n\t\t\t\t\t\tsetReturnFocus: this.config.withFocusTrap ? this.$refs.menuButton?.$el : null,\n\t\t\t\t\t\tfocusTrap: this.config.withFocusTrap,\n\t\t\t\t\t},\n\t\t\t\t\t// For some reason the popover component\n\t\t\t\t\t// does not react to props given under the 'props' key,\n\t\t\t\t\t// so we use both 'attrs' and 'props'\n\t\t\t\t\tattrs: {\n\t\t\t\t\t\tdelay: 0,\n\t\t\t\t\t\thandleResize: true,\n\t\t\t\t\t\tshown: this.opened,\n\t\t\t\t\t\tplacement: this.placement,\n\t\t\t\t\t\tboundary: this.boundariesElement,\n\t\t\t\t\t\tcontainer: this.container,\n\t\t\t\t\t\t...this.manualOpen && { triggers: [] },\n\t\t\t\t\t},\n\t\t\t\t\ton: {\n\t\t\t\t\t\tshow: this.openMenu,\n\t\t\t\t\t\t'after-show': this.onOpen,\n\t\t\t\t\t\thide: this.closeMenu,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t[\n\t\t\t\t\th('NcButton', {\n\t\t\t\t\t\tclass: 'action-item__menutoggle',\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\ttype: this.triggerBtnType,\n\t\t\t\t\t\t\tdisabled: this.disabled,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tslot: 'trigger',\n\t\t\t\t\t\tref: 'menuButton',\n\t\t\t\t\t\tattrs: {\n\t\t\t\t\t\t\tid: this.triggerRandomId,\n\t\t\t\t\t\t\t'aria-label': this.menuName ? null : this.ariaLabel,\n\t\t\t\t\t\t\t...this.config.triggerA11yAttr,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\tfocus: this.onFocus,\n\t\t\t\t\t\t\tblur: this.onBlur,\n\t\t\t\t\t\t\tclick: this.onClick,\n\t\t\t\t\t\t\tkeydown: this.onTriggerKeydown,\n\t\t\t\t\t\t},\n\t\t\t\t\t}, [\n\t\t\t\t\t\th('template', { slot: 'icon' }, [triggerIcon]),\n\t\t\t\t\t\tthis.menuName,\n\t\t\t\t\t]),\n\t\t\t\t\th('div', {\n\t\t\t\t\t\tclass: {\n\t\t\t\t\t\t\topen: this.opened,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tattrs: {\n\t\t\t\t\t\t\ttabindex: '-1',\n\t\t\t\t\t\t\t...this.config.popoverContainerA11yAttrs,\n\t\t\t\t\t\t},\n\t\t\t\t\t\ton: {\n\t\t\t\t\t\t\tkeydown: this.onKeydown,\n\t\t\t\t\t\t\tmousemove: this.onMouseFocusAction,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tref: 'menu',\n\t\t\t\t\t}, [\n\t\t\t\t\t\th('ul', {\n\t\t\t\t\t\t\tattrs: {\n\t\t\t\t\t\t\t\ttabindex: '-1',\n\t\t\t\t\t\t\t\t...this.config.popoverUlA11yAttrs,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}, [\n\t\t\t\t\t\t\tactions,\n\t\t\t\t\t\t]),\n\t\t\t\t\t]),\n\t\t\t\t],\n\t\t\t)\n\t\t}\n\n\t\t/**\n\t\t * If we have a single action only and didn't force a menu,\n\t\t * we render the action as a standalone button\n\t\t */\n\t\tif (actions.length === 1 && validInlineActions.length === 1 && !this.forceMenu) {\n\t\t\treturn renderInlineAction(actions[0])\n\t\t}\n\n\t\t// If we completely re-render the children\n\t\t// we need to focus the first action again\n\t\t// Mostly used when clicking a menu item\n\t\tthis.$nextTick(() => {\n\t\t\tif (this.opened && this.$refs.menu) {\n\t\t\t\tconst isAnyActive = this.$refs.menu.querySelector('li.active') || []\n\t\t\t\tif (isAnyActive.length === 0) {\n\t\t\t\t\tthis.focusFirstAction()\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\t/**\n\t\t * If we some inline actions to render, render them, then the menu\n\t\t */\n\t\tif (inlineActions.length > 0 && this.inline > 0) {\n\t\t\treturn h('div',\n\t\t\t\t{\n\t\t\t\t\tclass: [\n\t\t\t\t\t\t'action-items',\n\t\t\t\t\t\t`action-item--${this.triggerBtnType}`,\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t[\n\t\t\t\t\t// Render inline actions\n\t\t\t\t\t...inlineActions.map(renderInlineAction),\n\t\t\t\t\t// render the rest within the popover menu\n\t\t\t\t\tmenuActions.length > 0\n\t\t\t\t\t\t? h('div',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tclass: [\n\t\t\t\t\t\t\t\t\t'action-item',\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t'action-item--open': this.opened,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\trenderActionsPopover(menuActions),\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t: null,\n\t\t\t\t])\n\t\t}\n\n\t\t/**\n\t\t * Otherwise, we render the actions in a popover\n\t\t */\n\t\treturn h('div',\n\t\t\t{\n\t\t\t\tclass: [\n\t\t\t\t\t'action-item action-item--default-popover',\n\t\t\t\t\t`action-item--${this.triggerBtnType}`,\n\t\t\t\t\t{\n\t\t\t\t\t\t'action-item--open': this.opened,\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t[\n\t\t\t\trenderActionsPopover(actions),\n\t\t\t],\n\t\t)\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// Inline buttons\n.action-items {\n\tdisplay: flex;\n\talign-items: center;\n\n\t// Spacing between buttons\n\t& > button {\n\t\tmargin-right: math.div($icon-margin, 2);\n\t}\n}\n\n.action-item {\n\t--open-background-color: var(--color-background-hover, $action-background-hover);\n\tposition: relative;\n\tdisplay: inline-block;\n\n\t&.action-item--primary {\n\t\t--open-background-color: var(--color-primary-element-hover);\n\t}\n\n\t&.action-item--secondary {\n\t\t--open-background-color: var(--color-primary-element-light-hover);\n\t}\n\n\t&.action-item--error {\n\t\t--open-background-color: var(--color-error-hover);\n\t}\n\n\t&.action-item--warning {\n\t\t--open-background-color: var(--color-warning-hover);\n\t}\n\n\t&.action-item--success {\n\t\t--open-background-color: var(--color-success-hover);\n\t}\n\n\t&.action-item--tertiary-no-background {\n\t\t--open-background-color: transparent;\n\t}\n\n\t&.action-item--open .action-item__menutoggle {\n\t\tbackground-color: var(--open-background-color);\n\t}\n\n\t&__menutoggle__icon {\n\t\twidth: 20px;\n\t\theight: 20px;\n\t\tobject-fit: contain;\n\t}\n}\n</style>\n\n<style lang=\"scss\">\n// We overwrote the popover base class, so we can style\n// the popover__inner for actions only.\n.v-popper--theme-dropdown.v-popper__popper.action-item__popper .v-popper__wrapper {\n\tborder-radius: var(--border-radius-large);\n\toverflow:hidden;\n\n\t.v-popper__inner {\n\t\tborder-radius: var(--border-radius-large);\n\t\tpadding: 4px;\n\t\tmax-height: calc(50vh - 16px);\n\t\toverflow: auto;\n\t}\n}\n</style>\n"],"names":["focusableSelector","_sfc_main","NcButton","DotsHorizontal","NcPopover","computed","value","t","randomId","GenRandomId","state","action","_e","_c","_b","_a","_d","getTrapStack","trap","url","returnFocus","event","menuItem","focusableItem","focusIndex","focusList","newFocusIndex","currentActiveElement","focusElement","liMenuParent","indexLength","firstCheckedIndex","button","h","actions","validInlineActions","Vue","inlineActions","menuActions","textInputActions","menuItemsActions","linkActions","hasTextInputAction","hasMenuItemAction","hasLinkAction","renderInlineAction","iconProp","icon","_f","attrs","_g","clickListener","_i","_h","text","_n","_m","_l","_k","_j","ariaLabel","_p","_o","buttonText","title","_r","_q","propsToForward","_t","_s","nativeType","_u","_v","_w","_y","_x","_A","_z","_D","_C","_B","renderActionsPopover","triggerIcon"],"mappings":"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"}
|