@nextcloud/vue 9.8.1 → 9.9.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.
Files changed (318) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/README.md +21 -0
  3. package/dist/assets/{NcActions-DOI7rRa0.css → NcActions-y7ehwPSp.css} +14 -11
  4. package/dist/assets/{NcAppContent-BC7DBer3.css → NcAppContent-TgcZd4AI.css} +20 -20
  5. package/dist/assets/{NcAppNavigation-2b1jxOXM.css → NcAppNavigation-OHw55TTZ.css} +13 -13
  6. package/dist/assets/{NcAppNavigationItem-BsuZoJAq.css → NcAppNavigationItem-BZ1xj6Xi.css} +49 -49
  7. package/dist/assets/{NcAppNavigationSettings-HQEDobBQ.css → NcAppNavigationSettings-mWFhcXm0.css} +6 -6
  8. package/dist/assets/{NcAppSettingsDialog-HsZoLuDy.css → NcAppSettingsDialog-Dh_scIK4.css} +31 -31
  9. package/dist/assets/{NcAppSettingsShortcutsSection-BonG0SgH.css → NcAppSettingsShortcutsSection-BHxkQTg2.css} +1 -1
  10. package/dist/assets/{NcAppSidebar-dHtSShIl.css → NcAppSidebar-oJQ8kUb0.css} +21 -21
  11. package/dist/assets/{NcAssistantButton-BmD9GrOw.css → NcAssistantButton-CT25wqIs.css} +9 -9
  12. package/dist/assets/{NcAssistantContent-7THxd33X.css → NcAssistantContent-FV00e96S.css} +3 -3
  13. package/dist/assets/{NcAssistantIcon-CsBmzIxJ.css → NcAssistantIcon-BMLpMaMJ.css} +4 -4
  14. package/dist/assets/{NcBlurHash-tWUPu9Oh.css → NcBlurHash-RgrahjEp.css} +2 -2
  15. package/dist/assets/{NcBreadcrumbs-5gl8Syfa.css → NcBreadcrumbs-B4eyDS9i.css} +6 -6
  16. package/dist/assets/{NcButton-Bf9wuDV-.css → NcButton-DOrlC_y5.css} +49 -49
  17. package/dist/assets/{NcDateTimePicker-HT1ZTE-Z.css → NcDateTimePicker-BQ_y9Ihj.css} +235 -235
  18. package/dist/assets/{NcFilePicker-CimiKIH1.css → NcFilePicker-BdjtiV3h.css} +1 -1
  19. package/dist/assets/{NcFormBox-CRdHJkrd.css → NcFormBox-TRgICDO3.css} +11 -11
  20. package/dist/assets/{NcFormBoxButton-BWfU7d2r.css → NcFormBoxButton-ClkxmO-H.css} +2 -2
  21. package/dist/assets/{NcFormBoxItem-Bjbi17-B.css → NcFormBoxItem-CABDVZLe.css} +14 -14
  22. package/dist/assets/{NcFormBoxSwitch-Cn-MBAzZ.css → NcFormBoxSwitch-NCjook_Z.css} +2 -2
  23. package/dist/assets/{NcFormGroup-qFucmL8a.css → NcFormGroup-eh8-PBGB.css} +7 -7
  24. package/dist/assets/{NcGuestContent-j8ai4O1K.css → NcGuestContent-CM0uWLr1.css} +3 -3
  25. package/dist/assets/{NcHotkey-CvuY7fQJ.css → NcHotkey-Dm-26TVC.css} +8 -8
  26. package/dist/assets/{NcHotkeyList-BfrEkKmK.css → NcHotkeyList-BigfRqyr.css} +2 -2
  27. package/dist/assets/{NcIconToggleSwitch-V-AKJgPA.css → NcIconToggleSwitch-zUXkaJHv.css} +4 -4
  28. package/dist/assets/{NcInputConfirmCancel-BEmwC87z.css → NcInputConfirmCancel-DZEDRf0t.css} +8 -8
  29. package/dist/assets/{NcKbd-BeQpGp0b.css → NcKbd-DcC56WbC.css} +3 -3
  30. package/dist/assets/{NcListItem-1uR7AJIf.css → NcListItem-BjeejGlB.css} +58 -58
  31. package/dist/assets/{NcMentionBubble-ptHUq68a.css → NcMentionBubble-BeGb2xGc.css} +9 -9
  32. package/dist/assets/{NcPopover-P1fheee2.css → NcPopover-CAoHhjKa.css} +14 -14
  33. package/dist/assets/{NcRadioGroup-BoFb0R8S.css → NcRadioGroup-CtXZ4Y8D.css} +2 -2
  34. package/dist/assets/{NcRadioGroupButton-DUF_3DDU.css → NcRadioGroupButton-BuB-aWeJ.css} +13 -13
  35. package/dist/assets/{NcRelatedResourcesPanel-CiG_Ixb6.css → NcRelatedResourcesPanel-BZKjkugM.css} +24 -24
  36. package/dist/assets/{NcRichContenteditable-DNABzVif.css → NcRichContenteditable-BCUBhRqg.css} +37 -37
  37. package/dist/assets/{NcRichText-BTu-LT3p.css → NcRichText-D0Bu5bbu.css} +93 -93
  38. package/dist/assets/{autolink-C_iad4O_.css → autolink-XS-VDSVB.css} +3 -3
  39. package/dist/assets/{referencePickerModal-Dod7nzta.css → referencePickerModal-BNPfxyni.css} +89 -54
  40. package/dist/chunks/{NcActionButtonGroup-B9LfyE-G.mjs → NcActionButtonGroup-Dd03Oluy.mjs} +2 -2
  41. package/dist/chunks/{NcActionButtonGroup-B9LfyE-G.mjs.map → NcActionButtonGroup-Dd03Oluy.mjs.map} +1 -1
  42. package/dist/chunks/{NcActionInput-BO0lB4VP.mjs → NcActionInput-Dr8Yrafu.mjs} +5 -5
  43. package/dist/chunks/{NcActionInput-BO0lB4VP.mjs.map → NcActionInput-Dr8Yrafu.mjs.map} +1 -1
  44. package/dist/chunks/{NcActions-CUmcZ3C3.mjs → NcActions-C-wDqSrv.mjs} +23 -8
  45. package/dist/chunks/NcActions-C-wDqSrv.mjs.map +1 -0
  46. package/dist/chunks/{NcAppContent--92JdjRr.mjs → NcAppContent-DavgjaFX.mjs} +5 -5
  47. package/dist/chunks/{NcAppContent--92JdjRr.mjs.map → NcAppContent-DavgjaFX.mjs.map} +1 -1
  48. package/dist/chunks/{NcAppNavigation-Bb9-C2eO.mjs → NcAppNavigation-g57j16pB.mjs} +8 -7
  49. package/dist/chunks/NcAppNavigation-g57j16pB.mjs.map +1 -0
  50. package/dist/chunks/{NcAppNavigationCaption-E9iJtiQt.mjs → NcAppNavigationCaption-VjSWJ8R4.mjs} +2 -2
  51. package/dist/chunks/{NcAppNavigationCaption-E9iJtiQt.mjs.map → NcAppNavigationCaption-VjSWJ8R4.mjs.map} +1 -1
  52. package/dist/chunks/{NcAppNavigationItem-BFAIHyTL.mjs → NcAppNavigationItem-CDeYtA3E.mjs} +12 -12
  53. package/dist/chunks/{NcAppNavigationItem-BFAIHyTL.mjs.map → NcAppNavigationItem-CDeYtA3E.mjs.map} +1 -1
  54. package/dist/chunks/{NcAppNavigationNew-Dspn3-4i.mjs → NcAppNavigationNew-CBNppM7Q.mjs} +2 -2
  55. package/dist/chunks/{NcAppNavigationNew-Dspn3-4i.mjs.map → NcAppNavigationNew-CBNppM7Q.mjs.map} +1 -1
  56. package/dist/chunks/{NcAppNavigationNewItem-Cg8IJ6ZV.mjs → NcAppNavigationNewItem-B1RfQkvu.mjs} +2 -2
  57. package/dist/chunks/{NcAppNavigationNewItem-Cg8IJ6ZV.mjs.map → NcAppNavigationNewItem-B1RfQkvu.mjs.map} +1 -1
  58. package/dist/chunks/{NcAppNavigationSearch-CiOKjV3M.mjs → NcAppNavigationSearch-CQQWb1Eq.mjs} +3 -3
  59. package/dist/chunks/{NcAppNavigationSearch-CiOKjV3M.mjs.map → NcAppNavigationSearch-CQQWb1Eq.mjs.map} +1 -1
  60. package/dist/chunks/{NcAppNavigationSettings-fbuQmy-q.mjs → NcAppNavigationSettings-DoMjRExO.mjs} +10 -10
  61. package/dist/chunks/{NcAppNavigationSettings-fbuQmy-q.mjs.map → NcAppNavigationSettings-DoMjRExO.mjs.map} +1 -1
  62. package/dist/chunks/{NcAppSettingsDialog-DByPnndK.mjs → NcAppSettingsDialog-BPcEYLjP.mjs} +8 -8
  63. package/dist/chunks/NcAppSettingsDialog-BPcEYLjP.mjs.map +1 -0
  64. package/dist/chunks/{NcAppSettingsShortcutsSection-DgqVuZGx.mjs → NcAppSettingsShortcutsSection-DLwubKV9.mjs} +4 -4
  65. package/dist/chunks/{NcAppSettingsShortcutsSection-DgqVuZGx.mjs.map → NcAppSettingsShortcutsSection-DLwubKV9.mjs.map} +1 -1
  66. package/dist/chunks/{NcAppSidebar-Ch7Vp7q5.mjs → NcAppSidebar-C8YzAzrZ.mjs} +12 -12
  67. package/dist/chunks/{NcAppSidebar-Ch7Vp7q5.mjs.map → NcAppSidebar-C8YzAzrZ.mjs.map} +1 -1
  68. package/dist/chunks/{NcAssistantButton-CTrCv4CO.mjs → NcAssistantButton-iK491d2v.mjs} +11 -11
  69. package/dist/chunks/{NcAssistantButton-CTrCv4CO.mjs.map → NcAssistantButton-iK491d2v.mjs.map} +1 -1
  70. package/dist/chunks/{NcAssistantContent-CeuwcdMY.mjs → NcAssistantContent-iHA4O4cC.mjs} +5 -5
  71. package/dist/chunks/{NcAssistantContent-CeuwcdMY.mjs.map → NcAssistantContent-iHA4O4cC.mjs.map} +1 -1
  72. package/dist/chunks/{NcAssistantIcon-Dpp9_LUg.mjs → NcAssistantIcon-C6s4Qm7-.mjs} +6 -6
  73. package/dist/chunks/{NcAssistantIcon-Dpp9_LUg.mjs.map → NcAssistantIcon-C6s4Qm7-.mjs.map} +1 -1
  74. package/dist/chunks/{NcAvatar-M3-CbKbq.mjs → NcAvatar-1KxMUN7V.mjs} +11 -10
  75. package/dist/chunks/NcAvatar-1KxMUN7V.mjs.map +1 -0
  76. package/dist/chunks/{NcBlurHash-yPfSKY7W.mjs → NcBlurHash-B30Ol8KP.mjs} +4 -4
  77. package/dist/chunks/{NcBlurHash-yPfSKY7W.mjs.map → NcBlurHash-B30Ol8KP.mjs.map} +1 -1
  78. package/dist/chunks/{NcBreadcrumb-BeDMWE_b.mjs → NcBreadcrumb-3Y5NWXnV.mjs} +3 -3
  79. package/dist/chunks/{NcBreadcrumb-BeDMWE_b.mjs.map → NcBreadcrumb-3Y5NWXnV.mjs.map} +1 -1
  80. package/dist/chunks/{NcBreadcrumbs-CuQDDvin.mjs → NcBreadcrumbs-BaTp3Sya.mjs} +5 -6
  81. package/dist/chunks/{NcBreadcrumbs-CuQDDvin.mjs.map → NcBreadcrumbs-BaTp3Sya.mjs.map} +1 -1
  82. package/dist/chunks/{NcButton-QbPBynlU.mjs → NcButton-jvoYS2my.mjs} +3 -3
  83. package/dist/chunks/{NcButton-QbPBynlU.mjs.map → NcButton-jvoYS2my.mjs.map} +1 -1
  84. package/dist/chunks/{NcCheckboxRadioSwitch-D8Dfv4iw.mjs → NcCheckboxRadioSwitch-DVdt5Hkq.mjs} +3 -3
  85. package/dist/chunks/{NcCheckboxRadioSwitch-D8Dfv4iw.mjs.map → NcCheckboxRadioSwitch-DVdt5Hkq.mjs.map} +1 -1
  86. package/dist/chunks/{NcChip-nVHnbjaY.mjs → NcChip-DKRlV47q.mjs} +3 -3
  87. package/dist/chunks/{NcChip-nVHnbjaY.mjs.map → NcChip-DKRlV47q.mjs.map} +1 -1
  88. package/dist/chunks/{NcCollectionList-CO-iHqi6.mjs → NcCollectionList-B9qCtjJw.mjs} +6 -6
  89. package/dist/chunks/NcCollectionList-B9qCtjJw.mjs.map +1 -0
  90. package/dist/chunks/{NcColorPicker-D6NbBOX3.mjs → NcColorPicker-BCkasLwT.mjs} +5 -5
  91. package/dist/chunks/{NcColorPicker-D6NbBOX3.mjs.map → NcColorPicker-BCkasLwT.mjs.map} +1 -1
  92. package/dist/chunks/{NcContent-BhMoPROW.mjs → NcContent-BYh5hWDN.mjs} +3 -3
  93. package/dist/chunks/{NcContent-BhMoPROW.mjs.map → NcContent-BYh5hWDN.mjs.map} +1 -1
  94. package/dist/chunks/{NcDashboardWidget-ftOfMTzx.mjs → NcDashboardWidget-zmbDEGL-.mjs} +4 -4
  95. package/dist/chunks/{NcDashboardWidget-ftOfMTzx.mjs.map → NcDashboardWidget-zmbDEGL-.mjs.map} +1 -1
  96. package/dist/chunks/{NcDashboardWidgetItem-BwwFiNOL.mjs → NcDashboardWidgetItem-DwDndrm_.mjs} +3 -3
  97. package/dist/chunks/{NcDashboardWidgetItem-BwwFiNOL.mjs.map → NcDashboardWidgetItem-DwDndrm_.mjs.map} +1 -1
  98. package/dist/chunks/{NcDateTimePicker-CK4rhfEB.mjs → NcDateTimePicker-qaFC_wUt.mjs} +20 -14
  99. package/dist/chunks/NcDateTimePicker-qaFC_wUt.mjs.map +1 -0
  100. package/dist/chunks/{NcDateTimePickerNative-BeM4WOA4.mjs → NcDateTimePickerNative-B8CMOUnH.mjs} +2 -2
  101. package/dist/chunks/{NcDateTimePickerNative-BeM4WOA4.mjs.map → NcDateTimePickerNative-B8CMOUnH.mjs.map} +1 -1
  102. package/dist/chunks/{NcDialog-kwzJ3A4X.mjs → NcDialog-D617YI0t.mjs} +3 -3
  103. package/dist/chunks/{NcDialog-kwzJ3A4X.mjs.map → NcDialog-D617YI0t.mjs.map} +1 -1
  104. package/dist/chunks/{NcDialogButton.vue_vue_type_script_setup_true_lang-Cn-8O9iZ.mjs → NcDialogButton.vue_vue_type_script_setup_true_lang-Bqfy678u.mjs} +3 -3
  105. package/dist/chunks/{NcDialogButton.vue_vue_type_script_setup_true_lang-Cn-8O9iZ.mjs.map → NcDialogButton.vue_vue_type_script_setup_true_lang-Bqfy678u.mjs.map} +1 -1
  106. package/dist/chunks/{NcEmojiPicker-Bpw-68QP.mjs → NcEmojiPicker-UTxgju3f.mjs} +7 -7
  107. package/dist/chunks/{NcEmojiPicker-Bpw-68QP.mjs.map → NcEmojiPicker-UTxgju3f.mjs.map} +1 -1
  108. package/dist/chunks/{NcFilePicker-nPCwHMqj.mjs → NcFilePicker-bD2toutn.mjs} +4 -4
  109. package/dist/chunks/{NcFilePicker-nPCwHMqj.mjs.map → NcFilePicker-bD2toutn.mjs.map} +1 -1
  110. package/dist/chunks/{NcFormBox-ClWfuBWz.mjs → NcFormBox-Bmqar8nn.mjs} +7 -7
  111. package/dist/chunks/{NcFormBox-ClWfuBWz.mjs.map → NcFormBox-Bmqar8nn.mjs.map} +1 -1
  112. package/dist/chunks/{NcFormBoxButton-i4i3Lt_Q.mjs → NcFormBoxButton-G_PkUiQy.mjs} +5 -5
  113. package/dist/chunks/{NcFormBoxButton-i4i3Lt_Q.mjs.map → NcFormBoxButton-G_PkUiQy.mjs.map} +1 -1
  114. package/dist/chunks/{NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang-NfKiRrIn.mjs → NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang-BA_gWnmz.mjs} +3 -3
  115. package/dist/chunks/{NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang-NfKiRrIn.mjs.map → NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang-BA_gWnmz.mjs.map} +1 -1
  116. package/dist/chunks/{NcFormBoxItem-BTB68AEB.mjs → NcFormBoxItem-Cm8aZaVJ.mjs} +10 -10
  117. package/dist/chunks/{NcFormBoxItem-BTB68AEB.mjs.map → NcFormBoxItem-Cm8aZaVJ.mjs.map} +1 -1
  118. package/dist/chunks/{NcFormBoxSwitch-DlNcJ1q7.mjs → NcFormBoxSwitch-DSXiQcnq.mjs} +6 -6
  119. package/dist/chunks/{NcFormBoxSwitch-DlNcJ1q7.mjs.map → NcFormBoxSwitch-DSXiQcnq.mjs.map} +1 -1
  120. package/dist/chunks/{NcFormGroup-DvLGFMdb.mjs → NcFormGroup-N7qIFAwN.mjs} +9 -9
  121. package/dist/chunks/{NcFormGroup-DvLGFMdb.mjs.map → NcFormGroup-N7qIFAwN.mjs.map} +1 -1
  122. package/dist/chunks/{NcGuestContent-_z22nZMF.mjs → NcGuestContent-CvT6VGt1.mjs} +4 -10
  123. package/dist/chunks/NcGuestContent-CvT6VGt1.mjs.map +1 -0
  124. package/dist/chunks/{NcHeaderButton-m4oAOSTa.mjs → NcHeaderButton-BnLwYCog.mjs} +2 -2
  125. package/dist/chunks/{NcHeaderButton-m4oAOSTa.mjs.map → NcHeaderButton-BnLwYCog.mjs.map} +1 -1
  126. package/dist/chunks/{NcHeaderMenu-DRxcyWNX.mjs → NcHeaderMenu-ktQJV2SW.mjs} +2 -2
  127. package/dist/chunks/{NcHeaderMenu-DRxcyWNX.mjs.map → NcHeaderMenu-ktQJV2SW.mjs.map} +1 -1
  128. package/dist/chunks/{NcHotkey-C-TYyC8X.mjs → NcHotkey-BDGeF3eH.mjs} +7 -7
  129. package/dist/chunks/{NcHotkey-C-TYyC8X.mjs.map → NcHotkey-BDGeF3eH.mjs.map} +1 -1
  130. package/dist/chunks/{NcHotkeyList-CmMgGhMr.mjs → NcHotkeyList-B4WjTLAp.mjs} +5 -5
  131. package/dist/chunks/{NcHotkeyList-CmMgGhMr.mjs.map → NcHotkeyList-B4WjTLAp.mjs.map} +1 -1
  132. package/dist/chunks/{NcIconToggleSwitch-CbfRwb67.mjs → NcIconToggleSwitch-CRvGt4su.mjs} +4 -4
  133. package/dist/chunks/{NcIconToggleSwitch-CbfRwb67.mjs.map → NcIconToggleSwitch-CRvGt4su.mjs.map} +1 -1
  134. package/dist/chunks/{NcInputConfirmCancel-B6qC3s63.mjs → NcInputConfirmCancel-CGTllrXj.mjs} +8 -8
  135. package/dist/chunks/{NcInputConfirmCancel-B6qC3s63.mjs.map → NcInputConfirmCancel-CGTllrXj.mjs.map} +1 -1
  136. package/dist/chunks/{NcInputField-B1bGxYHt.mjs → NcInputField-5Sg6EUP6.mjs} +2 -2
  137. package/dist/chunks/{NcInputField-B1bGxYHt.mjs.map → NcInputField-5Sg6EUP6.mjs.map} +1 -1
  138. package/dist/chunks/{NcKbd-Iyp0KDp4.mjs → NcKbd-Bh_Tk6Ar.mjs} +5 -5
  139. package/dist/chunks/{NcKbd-Iyp0KDp4.mjs.map → NcKbd-Bh_Tk6Ar.mjs.map} +1 -1
  140. package/dist/chunks/{NcListItem-Y5a098Cw.mjs → NcListItem-BliLJpvU.mjs} +8 -8
  141. package/dist/chunks/{NcListItem-Y5a098Cw.mjs.map → NcListItem-BliLJpvU.mjs.map} +1 -1
  142. package/dist/chunks/{NcListItemIcon-D_f5AGrh.mjs → NcListItemIcon-Dl_tfkk9.mjs} +3 -3
  143. package/dist/chunks/{NcListItemIcon-D_f5AGrh.mjs.map → NcListItemIcon-Dl_tfkk9.mjs.map} +1 -1
  144. package/dist/chunks/{NcMentionBubble.vue_vue_type_style_index_0_scoped_45238efd_lang-BX_KxRP-.mjs → NcMentionBubble.vue_vue_type_style_index_0_scoped_3c4a673d_lang-DyqakLm5.mjs} +2 -2
  145. package/dist/chunks/{NcMentionBubble.vue_vue_type_style_index_0_scoped_45238efd_lang-BX_KxRP-.mjs.map → NcMentionBubble.vue_vue_type_style_index_0_scoped_3c4a673d_lang-DyqakLm5.mjs.map} +1 -1
  146. package/dist/chunks/{NcModal-DUWLRm_F.mjs → NcModal-DiDvgcU8.mjs} +4 -4
  147. package/dist/chunks/{NcModal-DUWLRm_F.mjs.map → NcModal-DiDvgcU8.mjs.map} +1 -1
  148. package/dist/chunks/{NcPasswordField-Be5_qcfm.mjs → NcPasswordField-BFyzHTOO.mjs} +3 -3
  149. package/dist/chunks/{NcPasswordField-Be5_qcfm.mjs.map → NcPasswordField-BFyzHTOO.mjs.map} +1 -1
  150. package/dist/chunks/{NcPopover-CtdLAkEU.mjs → NcPopover-B87bEPLq.mjs} +4 -4
  151. package/dist/chunks/{NcPopover-CtdLAkEU.mjs.map → NcPopover-B87bEPLq.mjs.map} +1 -1
  152. package/dist/chunks/{NcRadioGroup-BzW4XHoK.mjs → NcRadioGroup-B4qmS2UD.mjs} +6 -6
  153. package/dist/chunks/{NcRadioGroup-BzW4XHoK.mjs.map → NcRadioGroup-B4qmS2UD.mjs.map} +1 -1
  154. package/dist/chunks/{NcRadioGroupButton-CXKQMID9.mjs → NcRadioGroupButton-CZykGwv3.mjs} +8 -8
  155. package/dist/chunks/{NcRadioGroupButton-CXKQMID9.mjs.map → NcRadioGroupButton-CZykGwv3.mjs.map} +1 -1
  156. package/dist/chunks/{NcRelatedResourcesPanel-C0j0Fs4r.mjs → NcRelatedResourcesPanel-D_Ttpg5_.mjs} +27 -11
  157. package/dist/chunks/NcRelatedResourcesPanel-D_Ttpg5_.mjs.map +1 -0
  158. package/dist/chunks/{NcRichContenteditable-DO3_WniI.mjs → NcRichContenteditable-Qw614bJ5.mjs} +37 -28
  159. package/dist/chunks/NcRichContenteditable-Qw614bJ5.mjs.map +1 -0
  160. package/dist/chunks/{NcRichText-BOBQq7Od.mjs → NcRichText-BO_4KtBA.mjs} +39 -10
  161. package/dist/chunks/NcRichText-BO_4KtBA.mjs.map +1 -0
  162. package/dist/chunks/{NcSelect-BOFzoCwK.mjs → NcSelect--kERLlBK.mjs} +5 -5
  163. package/dist/chunks/NcSelect--kERLlBK.mjs.map +1 -0
  164. package/dist/chunks/{NcSelectTags-D7qWNjXa.mjs → NcSelectTags-I2hJaNax.mjs} +3 -3
  165. package/dist/chunks/{NcSelectTags-D7qWNjXa.mjs.map → NcSelectTags-I2hJaNax.mjs.map} +1 -1
  166. package/dist/chunks/{NcSelectUsers-CI8twLn9.mjs → NcSelectUsers-K14Bepkq.mjs} +3 -3
  167. package/dist/chunks/{NcSelectUsers-CI8twLn9.mjs.map → NcSelectUsers-K14Bepkq.mjs.map} +1 -1
  168. package/dist/chunks/{NcSettingsSection-DmfxX2se.mjs → NcSettingsSection-Caz1fuWt.mjs} +2 -2
  169. package/dist/chunks/{NcSettingsSection-DmfxX2se.mjs.map → NcSettingsSection-Caz1fuWt.mjs.map} +1 -1
  170. package/dist/chunks/{NcSettingsSelectGroup-TN64yH4k.mjs → NcSettingsSelectGroup-SYJ8-XlR.mjs} +3 -3
  171. package/dist/chunks/{NcSettingsSelectGroup-TN64yH4k.mjs.map → NcSettingsSelectGroup-SYJ8-XlR.mjs.map} +1 -1
  172. package/dist/chunks/{NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r.mjs → NcTextField.vue_vue_type_script_setup_true_lang-Bx2esFU2.mjs} +3 -3
  173. package/dist/chunks/{NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r.mjs.map → NcTextField.vue_vue_type_script_setup_true_lang-Bx2esFU2.mjs.map} +1 -1
  174. package/dist/chunks/{NcTimezonePicker.vue_vue_type_script_setup_true_lang-Csd1JQe6.mjs → NcTimezonePicker.vue_vue_type_script_setup_true_lang-D7ZHgnwW.mjs} +3 -3
  175. package/dist/chunks/{NcTimezonePicker.vue_vue_type_script_setup_true_lang-Csd1JQe6.mjs.map → NcTimezonePicker.vue_vue_type_script_setup_true_lang-D7ZHgnwW.mjs.map} +1 -1
  176. package/dist/chunks/{NcUserBubble-CDQa0hGy.mjs → NcUserBubble-BXR7vT0V.mjs} +3 -3
  177. package/dist/chunks/{NcUserBubble-CDQa0hGy.mjs.map → NcUserBubble-BXR7vT0V.mjs.map} +1 -1
  178. package/dist/chunks/{NcUserStatusIcon-DsviB2Cr.mjs → NcUserStatusIcon-BF5OEQFU.mjs} +2 -2
  179. package/dist/chunks/{NcUserStatusIcon-DsviB2Cr.mjs.map → NcUserStatusIcon-BF5OEQFU.mjs.map} +1 -1
  180. package/dist/chunks/{_l10n-CG4CuN3H.mjs → _l10n-wdIzZwir.mjs} +2 -2
  181. package/dist/chunks/_l10n-wdIzZwir.mjs.map +1 -0
  182. package/dist/chunks/{autolink-BT8u-IL-.mjs → autolink-DrIurosL.mjs} +5 -5
  183. package/dist/chunks/autolink-DrIurosL.mjs.map +1 -0
  184. package/dist/chunks/{colors-BDeMBgfq.mjs → colors-Cv9F-jWS.mjs} +2 -2
  185. package/dist/chunks/{colors-BDeMBgfq.mjs.map → colors-Cv9F-jWS.mjs.map} +1 -1
  186. package/dist/chunks/{customPickerElements-Cu7bLbap.mjs → customPickerElements-BqbDcaEu.mjs} +6 -1
  187. package/dist/chunks/customPickerElements-BqbDcaEu.mjs.map +1 -0
  188. package/dist/chunks/{referencePickerModal-B4bsiMOy.mjs → referencePickerModal-CnKdEDwu.mjs} +212 -48
  189. package/dist/chunks/referencePickerModal-CnKdEDwu.mjs.map +1 -0
  190. package/dist/chunks/{useCopy-PckLYUAU.mjs → useCopy-6F-qWHq0.mjs} +2 -2
  191. package/dist/chunks/{useCopy-PckLYUAU.mjs.map → useCopy-6F-qWHq0.mjs.map} +1 -1
  192. package/dist/components/NcActionButtonGroup/index.mjs +1 -1
  193. package/dist/components/NcActionInput/NcActionInput.vue.d.ts +4 -4
  194. package/dist/components/NcActionInput/index.mjs +1 -1
  195. package/dist/components/NcActions/NcActions.vue.d.ts +15 -0
  196. package/dist/components/NcActions/index.mjs +1 -1
  197. package/dist/components/NcAppContent/index.mjs +1 -1
  198. package/dist/components/NcAppNavigation/index.mjs +1 -1
  199. package/dist/components/NcAppNavigationCaption/NcAppNavigationCaption.vue.d.ts +9 -0
  200. package/dist/components/NcAppNavigationCaption/index.mjs +1 -1
  201. package/dist/components/NcAppNavigationItem/NcAppNavigationItem.vue.d.ts +11 -2
  202. package/dist/components/NcAppNavigationItem/index.mjs +1 -1
  203. package/dist/components/NcAppNavigationNew/index.mjs +1 -1
  204. package/dist/components/NcAppNavigationNewItem/index.mjs +1 -1
  205. package/dist/components/NcAppNavigationSearch/index.mjs +1 -1
  206. package/dist/components/NcAppNavigationSettings/index.mjs +1 -1
  207. package/dist/components/NcAppSettingsDialog/index.mjs +1 -1
  208. package/dist/components/NcAppSettingsSectionShortcuts/index.mjs +1 -1
  209. package/dist/components/NcAppSettingsShortcutsSection/index.mjs +1 -1
  210. package/dist/components/NcAppSidebar/NcAppSidebar.vue.d.ts +9 -0
  211. package/dist/components/NcAppSidebar/index.mjs +1 -1
  212. package/dist/components/NcAssistantButton/index.mjs +1 -1
  213. package/dist/components/NcAssistantContent/index.mjs +1 -1
  214. package/dist/components/NcAssistantIcon/index.mjs +1 -1
  215. package/dist/components/NcAvatar/NcAvatar.vue.d.ts +10 -1
  216. package/dist/components/NcAvatar/index.mjs +1 -1
  217. package/dist/components/NcBlurHash/index.mjs +1 -1
  218. package/dist/components/NcBreadcrumb/NcBreadcrumb.vue.d.ts +9 -0
  219. package/dist/components/NcBreadcrumb/index.mjs +1 -1
  220. package/dist/components/NcBreadcrumbs/NcBreadcrumbs.vue.d.ts +18 -0
  221. package/dist/components/NcBreadcrumbs/index.mjs +1 -1
  222. package/dist/components/NcButton/index.mjs +1 -1
  223. package/dist/components/NcCheckboxRadioSwitch/index.mjs +1 -1
  224. package/dist/components/NcChip/index.mjs +1 -1
  225. package/dist/components/NcCollectionList/NcCollectionList.vue.d.ts +34 -3
  226. package/dist/components/NcCollectionList/NcCollectionListItem.vue.d.ts +19 -1
  227. package/dist/components/NcCollectionList/index.mjs +1 -1
  228. package/dist/components/NcCollectionList/useCollections.d.ts +5 -1
  229. package/dist/components/NcColorPicker/index.mjs +1 -1
  230. package/dist/components/NcContent/index.mjs +1 -1
  231. package/dist/components/NcDashboardWidget/NcDashboardWidget.vue.d.ts +29 -2
  232. package/dist/components/NcDashboardWidget/index.mjs +1 -1
  233. package/dist/components/NcDashboardWidgetItem/NcDashboardWidgetItem.vue.d.ts +19 -1
  234. package/dist/components/NcDashboardWidgetItem/index.mjs +1 -1
  235. package/dist/components/NcDateTimePicker/NcDateTimePicker.vue.d.ts +7 -5
  236. package/dist/components/NcDateTimePicker/index.mjs +1 -1
  237. package/dist/components/NcDateTimePickerNative/index.mjs +1 -1
  238. package/dist/components/NcDialog/NcDialog.vue.d.ts +1 -1
  239. package/dist/components/NcDialog/index.mjs +1 -1
  240. package/dist/components/NcDialogButton/index.mjs +1 -1
  241. package/dist/components/NcEmojiPicker/index.mjs +1 -1
  242. package/dist/components/NcFilePicker/index.mjs +1 -1
  243. package/dist/components/NcFormBox/index.mjs +1 -1
  244. package/dist/components/NcFormBoxButton/index.mjs +1 -1
  245. package/dist/components/NcFormBoxCopyButton/index.mjs +1 -1
  246. package/dist/components/NcFormBoxSwitch/index.mjs +1 -1
  247. package/dist/components/NcFormGroup/index.mjs +1 -1
  248. package/dist/components/NcGuestContent/index.mjs +1 -1
  249. package/dist/components/NcHeaderButton/index.mjs +1 -1
  250. package/dist/components/NcHeaderMenu/index.mjs +1 -1
  251. package/dist/components/NcHotkey/index.mjs +1 -1
  252. package/dist/components/NcHotkeyList/index.mjs +1 -1
  253. package/dist/components/NcInputField/index.mjs +1 -1
  254. package/dist/components/NcKbd/index.mjs +1 -1
  255. package/dist/components/NcListItem/NcListItem.vue.d.ts +11 -2
  256. package/dist/components/NcListItem/index.mjs +1 -1
  257. package/dist/components/NcListItemIcon/NcListItemIcon.vue.d.ts +11 -2
  258. package/dist/components/NcListItemIcon/index.mjs +1 -1
  259. package/dist/components/NcModal/index.mjs +1 -1
  260. package/dist/components/NcPasswordField/index.mjs +1 -1
  261. package/dist/components/NcPopover/index.mjs +1 -1
  262. package/dist/components/NcRadioGroup/index.mjs +1 -1
  263. package/dist/components/NcRadioGroupButton/index.mjs +1 -1
  264. package/dist/components/NcRelatedResourcesPanel/NcRelatedResourcesPanel.vue.d.ts +8 -2
  265. package/dist/components/NcRelatedResourcesPanel/NcResource.vue.d.ts +18 -0
  266. package/dist/components/NcRelatedResourcesPanel/NcTeamResources.vue.d.ts +12 -0
  267. package/dist/components/NcRelatedResourcesPanel/index.mjs +1 -1
  268. package/dist/components/NcRichContenteditable/NcAutoCompleteResult.vue.d.ts +12 -0
  269. package/dist/components/NcRichContenteditable/NcMentionBubble.vue.d.ts +6 -0
  270. package/dist/components/NcRichContenteditable/NcRichContenteditable.vue.d.ts +1 -1
  271. package/dist/components/NcRichContenteditable/index.mjs +1 -1
  272. package/dist/components/NcRichText/NcReferenceList.vue.d.ts +37 -0
  273. package/dist/components/NcRichText/NcReferencePicker/NcCustomPickerElement.vue.d.ts +3 -1
  274. package/dist/components/NcRichText/NcReferencePicker/NcProviderList.vue.d.ts +2 -1
  275. package/dist/components/NcRichText/NcReferencePicker/NcRawLinkInput.vue.d.ts +3 -1
  276. package/dist/components/NcRichText/NcReferencePicker/NcReferencePicker.vue.d.ts +13 -5
  277. package/dist/components/NcRichText/NcReferencePicker/NcReferencePickerModal.vue.d.ts +16 -6
  278. package/dist/components/NcRichText/NcReferencePicker/NcSearch.vue.d.ts +8 -1
  279. package/dist/components/NcRichText/NcReferenceWidget.vue.d.ts +1 -0
  280. package/dist/components/NcRichText/NcRichText.vue.d.ts +25 -0
  281. package/dist/components/NcRichText/autolink.d.ts +7 -5
  282. package/dist/components/NcRichText/index.d.ts +2 -2
  283. package/dist/components/NcRichText/index.mjs +10 -9
  284. package/dist/components/NcSelect/index.mjs +1 -1
  285. package/dist/components/NcSelectTags/index.mjs +1 -1
  286. package/dist/components/NcSelectUsers/index.mjs +1 -1
  287. package/dist/components/NcSettingsSection/index.mjs +1 -1
  288. package/dist/components/NcSettingsSelectGroup/index.mjs +1 -1
  289. package/dist/components/NcTextField/index.mjs +1 -1
  290. package/dist/components/NcTimezonePicker/index.mjs +1 -1
  291. package/dist/components/NcUserBubble/index.mjs +1 -1
  292. package/dist/components/NcUserStatusIcon/index.mjs +1 -1
  293. package/dist/composables/useFormatDateTime/index.mjs +1 -1
  294. package/dist/functions/reference/index.d.ts +7 -4
  295. package/dist/functions/reference/index.mjs +4 -3
  296. package/dist/functions/reference/referencePickerModal.d.ts +16 -1
  297. package/dist/functions/reference/widgets.d.ts +11 -1
  298. package/dist/functions/registerReference/index.mjs +1 -1
  299. package/dist/functions/usernameToColor/index.mjs +1 -1
  300. package/dist/index.mjs +74 -72
  301. package/dist/index.mjs.map +1 -1
  302. package/dist/mixins/userStatus.d.ts +5 -4
  303. package/package.json +21 -21
  304. package/dist/chunks/NcActions-CUmcZ3C3.mjs.map +0 -1
  305. package/dist/chunks/NcAppNavigation-Bb9-C2eO.mjs.map +0 -1
  306. package/dist/chunks/NcAppSettingsDialog-DByPnndK.mjs.map +0 -1
  307. package/dist/chunks/NcAvatar-M3-CbKbq.mjs.map +0 -1
  308. package/dist/chunks/NcCollectionList-CO-iHqi6.mjs.map +0 -1
  309. package/dist/chunks/NcDateTimePicker-CK4rhfEB.mjs.map +0 -1
  310. package/dist/chunks/NcGuestContent-_z22nZMF.mjs.map +0 -1
  311. package/dist/chunks/NcRelatedResourcesPanel-C0j0Fs4r.mjs.map +0 -1
  312. package/dist/chunks/NcRichContenteditable-DO3_WniI.mjs.map +0 -1
  313. package/dist/chunks/NcRichText-BOBQq7Od.mjs.map +0 -1
  314. package/dist/chunks/NcSelect-BOFzoCwK.mjs.map +0 -1
  315. package/dist/chunks/_l10n-CG4CuN3H.mjs.map +0 -1
  316. package/dist/chunks/autolink-BT8u-IL-.mjs.map +0 -1
  317. package/dist/chunks/customPickerElements-Cu7bLbap.mjs.map +0 -1
  318. package/dist/chunks/referencePickerModal-B4bsiMOy.mjs.map +0 -1
package/dist/index.mjs CHANGED
@@ -1,85 +1,85 @@
1
1
  import { N } from "./chunks/NcActionButton-BO5T5ePT.mjs";
2
- import { N as N2 } from "./chunks/NcActionButtonGroup-B9LfyE-G.mjs";
2
+ import { N as N2 } from "./chunks/NcActionButtonGroup-Dd03Oluy.mjs";
3
3
  import { N as N3 } from "./chunks/NcActionCaption-f7L9gBlT.mjs";
4
4
  import { N as N4 } from "./chunks/NcActionCheckbox-DBqiK-AZ.mjs";
5
- import { N as N5 } from "./chunks/NcActionInput-BO0lB4VP.mjs";
5
+ import { N as N5 } from "./chunks/NcActionInput-Dr8Yrafu.mjs";
6
6
  import { N as N6 } from "./chunks/NcActionLink-BFiaYt9A.mjs";
7
7
  import { N as N7 } from "./chunks/NcActionRadio-BA08CAtA.mjs";
8
8
  import { N as N8 } from "./chunks/NcActionRouter-vYFtIOzD.mjs";
9
- import { N as N9 } from "./chunks/NcActions-CUmcZ3C3.mjs";
9
+ import { N as N9 } from "./chunks/NcActions-C-wDqSrv.mjs";
10
10
  import { N as N10 } from "./chunks/NcActionSeparator-B9pNQaji.mjs";
11
11
  import { N as N11 } from "./chunks/NcActionText-CQ9qwJ0p.mjs";
12
12
  import { N as N12 } from "./chunks/NcActionTextEditable-B8y_GEre.mjs";
13
- import { N as N13 } from "./chunks/NcAppContent--92JdjRr.mjs";
13
+ import { N as N13 } from "./chunks/NcAppContent-DavgjaFX.mjs";
14
14
  import { _ } from "./chunks/NcAppContentDetails.vue_vue_type_script_setup_true_lang-BWl5Pw5g.mjs";
15
15
  import { N as N14 } from "./chunks/NcAppContentList-Copx3Ver.mjs";
16
- import { N as N15 } from "./chunks/NcAppNavigation-Bb9-C2eO.mjs";
17
- import { N as N16 } from "./chunks/NcAppNavigationCaption-E9iJtiQt.mjs";
16
+ import { N as N15 } from "./chunks/NcAppNavigation-g57j16pB.mjs";
17
+ import { N as N16 } from "./chunks/NcAppNavigationCaption-VjSWJ8R4.mjs";
18
18
  import { N as N17 } from "./chunks/NcAppNavigationIconBullet-BmU-dPcY.mjs";
19
- import { N as N18 } from "./chunks/NcAppNavigationItem-BFAIHyTL.mjs";
19
+ import { N as N18 } from "./chunks/NcAppNavigationItem-CDeYtA3E.mjs";
20
20
  import { N as N19 } from "./chunks/NcAppNavigationList-CGSWabRB.mjs";
21
- import { N as N20 } from "./chunks/NcAppNavigationNew-Dspn3-4i.mjs";
22
- import { N as N21 } from "./chunks/NcAppNavigationNewItem-Cg8IJ6ZV.mjs";
23
- import { N as N22 } from "./chunks/NcAppNavigationSearch-CiOKjV3M.mjs";
24
- import { N as N23 } from "./chunks/NcAppNavigationSettings-fbuQmy-q.mjs";
21
+ import { N as N20 } from "./chunks/NcAppNavigationNew-CBNppM7Q.mjs";
22
+ import { N as N21 } from "./chunks/NcAppNavigationNewItem-B1RfQkvu.mjs";
23
+ import { N as N22 } from "./chunks/NcAppNavigationSearch-CQQWb1Eq.mjs";
24
+ import { N as N23 } from "./chunks/NcAppNavigationSettings-DoMjRExO.mjs";
25
25
  import { N as N24 } from "./chunks/NcAppNavigationSpacer-CIRC4ZEj.mjs";
26
- import { N as N25 } from "./chunks/NcAppSettingsDialog-DByPnndK.mjs";
26
+ import { N as N25 } from "./chunks/NcAppSettingsDialog-BPcEYLjP.mjs";
27
27
  import { N as N26 } from "./chunks/NcAppSettingsSection-BosSmisT.mjs";
28
- import { N as N27, N as N28 } from "./chunks/NcAppSettingsShortcutsSection-DgqVuZGx.mjs";
29
- import { N as N29 } from "./chunks/NcAppSidebar-Ch7Vp7q5.mjs";
28
+ import { N as N27, N as N28 } from "./chunks/NcAppSettingsShortcutsSection-DLwubKV9.mjs";
29
+ import { N as N29 } from "./chunks/NcAppSidebar-C8YzAzrZ.mjs";
30
30
  import { _ as _2 } from "./chunks/NcAppSidebarHeader.vue_vue_type_script_setup_true_lang-C-QhdyiN.mjs";
31
31
  import { N as N30 } from "./chunks/NcAppSidebarTab-DOSDDbGA.mjs";
32
- import { N as N31 } from "./chunks/NcAssistantButton-CTrCv4CO.mjs";
33
- import { N as N32 } from "./chunks/NcAssistantContent-CeuwcdMY.mjs";
34
- import { N as N33 } from "./chunks/NcAssistantIcon-Dpp9_LUg.mjs";
35
- import { N as N34 } from "./chunks/NcAvatar-M3-CbKbq.mjs";
36
- import { N as N35 } from "./chunks/NcBlurHash-yPfSKY7W.mjs";
37
- import { N as N36 } from "./chunks/NcBreadcrumb-BeDMWE_b.mjs";
38
- import { N as N37 } from "./chunks/NcBreadcrumbs-CuQDDvin.mjs";
39
- import { N as N38 } from "./chunks/NcButton-QbPBynlU.mjs";
40
- import { N as N39 } from "./chunks/NcCheckboxRadioSwitch-D8Dfv4iw.mjs";
41
- import { N as N40 } from "./chunks/NcChip-nVHnbjaY.mjs";
42
- import { N as N41 } from "./chunks/NcCollectionList-CO-iHqi6.mjs";
43
- import { N as N42 } from "./chunks/NcColorPicker-D6NbBOX3.mjs";
44
- import { N as N43 } from "./chunks/NcContent-BhMoPROW.mjs";
32
+ import { N as N31 } from "./chunks/NcAssistantButton-iK491d2v.mjs";
33
+ import { N as N32 } from "./chunks/NcAssistantContent-iHA4O4cC.mjs";
34
+ import { N as N33 } from "./chunks/NcAssistantIcon-C6s4Qm7-.mjs";
35
+ import { N as N34 } from "./chunks/NcAvatar-1KxMUN7V.mjs";
36
+ import { N as N35 } from "./chunks/NcBlurHash-B30Ol8KP.mjs";
37
+ import { N as N36 } from "./chunks/NcBreadcrumb-3Y5NWXnV.mjs";
38
+ import { N as N37 } from "./chunks/NcBreadcrumbs-BaTp3Sya.mjs";
39
+ import { N as N38 } from "./chunks/NcButton-jvoYS2my.mjs";
40
+ import { N as N39 } from "./chunks/NcCheckboxRadioSwitch-DVdt5Hkq.mjs";
41
+ import { N as N40 } from "./chunks/NcChip-DKRlV47q.mjs";
42
+ import { N as N41 } from "./chunks/NcCollectionList-B9qCtjJw.mjs";
43
+ import { N as N42 } from "./chunks/NcColorPicker-BCkasLwT.mjs";
44
+ import { N as N43 } from "./chunks/NcContent-BYh5hWDN.mjs";
45
45
  import { N as N44 } from "./chunks/NcCounterBubble-CV0YMrXW.mjs";
46
- import { N as N45 } from "./chunks/NcDashboardWidget-ftOfMTzx.mjs";
47
- import { N as N46 } from "./chunks/NcDashboardWidgetItem-BwwFiNOL.mjs";
46
+ import { N as N45 } from "./chunks/NcDashboardWidget-zmbDEGL-.mjs";
47
+ import { N as N46 } from "./chunks/NcDashboardWidgetItem-DwDndrm_.mjs";
48
48
  import { _ as _3 } from "./chunks/NcDateTime.vue_vue_type_script_setup_true_lang-BJuPH7S7.mjs";
49
- import { N as N47 } from "./chunks/NcDateTimePicker-CK4rhfEB.mjs";
50
- import { N as N48 } from "./chunks/NcDateTimePickerNative-BeM4WOA4.mjs";
51
- import { N as N49 } from "./chunks/NcDialog-kwzJ3A4X.mjs";
52
- import { _ as _4 } from "./chunks/NcDialogButton.vue_vue_type_script_setup_true_lang-Cn-8O9iZ.mjs";
49
+ import { N as N47 } from "./chunks/NcDateTimePicker-qaFC_wUt.mjs";
50
+ import { N as N48 } from "./chunks/NcDateTimePickerNative-B8CMOUnH.mjs";
51
+ import { N as N49 } from "./chunks/NcDialog-D617YI0t.mjs";
52
+ import { _ as _4 } from "./chunks/NcDialogButton.vue_vue_type_script_setup_true_lang-Bqfy678u.mjs";
53
53
  import { N as N50 } from "./chunks/NcEllipsisedOption-D6Amb91K.mjs";
54
- import { N as N51 } from "./chunks/NcEmojiPicker-Bpw-68QP.mjs";
54
+ import { N as N51 } from "./chunks/NcEmojiPicker-UTxgju3f.mjs";
55
55
  import { N as N52 } from "./chunks/NcEmptyContent-CGAPqk4S.mjs";
56
- import { N as N53 } from "./chunks/NcFilePicker-nPCwHMqj.mjs";
57
- import { N as N54 } from "./chunks/NcFormBox-ClWfuBWz.mjs";
58
- import { N as N55 } from "./chunks/NcFormBoxButton-i4i3Lt_Q.mjs";
59
- import { _ as _5 } from "./chunks/NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang-NfKiRrIn.mjs";
60
- import { N as N56 } from "./chunks/NcFormBoxSwitch-DlNcJ1q7.mjs";
61
- import { N as N57 } from "./chunks/NcFormGroup-DvLGFMdb.mjs";
62
- import { N as N58 } from "./chunks/NcGuestContent-_z22nZMF.mjs";
63
- import { N as N59 } from "./chunks/NcHeaderButton-m4oAOSTa.mjs";
64
- import { N as N60 } from "./chunks/NcHeaderMenu-DRxcyWNX.mjs";
56
+ import { N as N53 } from "./chunks/NcFilePicker-bD2toutn.mjs";
57
+ import { N as N54 } from "./chunks/NcFormBox-Bmqar8nn.mjs";
58
+ import { N as N55 } from "./chunks/NcFormBoxButton-G_PkUiQy.mjs";
59
+ import { _ as _5 } from "./chunks/NcFormBoxCopyButton.vue_vue_type_script_setup_true_lang-BA_gWnmz.mjs";
60
+ import { N as N56 } from "./chunks/NcFormBoxSwitch-DSXiQcnq.mjs";
61
+ import { N as N57 } from "./chunks/NcFormGroup-N7qIFAwN.mjs";
62
+ import { N as N58 } from "./chunks/NcGuestContent-CvT6VGt1.mjs";
63
+ import { N as N59 } from "./chunks/NcHeaderButton-BnLwYCog.mjs";
64
+ import { N as N60 } from "./chunks/NcHeaderMenu-ktQJV2SW.mjs";
65
65
  import { _ as _6 } from "./chunks/NcHighlight.vue_vue_type_script_lang-DnWQDM_2.mjs";
66
- import { N as N61 } from "./chunks/NcHotkey-C-TYyC8X.mjs";
67
- import { N as N62 } from "./chunks/NcHotkeyList-CmMgGhMr.mjs";
66
+ import { N as N61 } from "./chunks/NcHotkey-BDGeF3eH.mjs";
67
+ import { N as N62 } from "./chunks/NcHotkeyList-B4WjTLAp.mjs";
68
68
  import { N as N63 } from "./chunks/NcIconSvgWrapper-g8ubWhoz.mjs";
69
- import { N as N64 } from "./chunks/NcInputField-B1bGxYHt.mjs";
70
- import { N as N65 } from "./chunks/NcKbd-Iyp0KDp4.mjs";
71
- import { N as N66 } from "./chunks/NcListItem-Y5a098Cw.mjs";
72
- import { N as N67 } from "./chunks/NcListItemIcon-D_f5AGrh.mjs";
69
+ import { N as N64 } from "./chunks/NcInputField-5Sg6EUP6.mjs";
70
+ import { N as N65 } from "./chunks/NcKbd-Bh_Tk6Ar.mjs";
71
+ import { N as N66 } from "./chunks/NcListItem-BliLJpvU.mjs";
72
+ import { N as N67 } from "./chunks/NcListItemIcon-Dl_tfkk9.mjs";
73
73
  import { N as N68 } from "./chunks/NcLoadingIcon-BOVpFVQz.mjs";
74
- import { N as N69 } from "./chunks/NcModal-DUWLRm_F.mjs";
74
+ import { N as N69 } from "./chunks/NcModal-DiDvgcU8.mjs";
75
75
  import { N as N70 } from "./chunks/NcNoteCard-mI7qVZ9j.mjs";
76
- import { N as N71 } from "./chunks/NcPasswordField-Be5_qcfm.mjs";
77
- import { N as N72 } from "./chunks/NcPopover-CtdLAkEU.mjs";
76
+ import { N as N71 } from "./chunks/NcPasswordField-BFyzHTOO.mjs";
77
+ import { N as N72 } from "./chunks/NcPopover-B87bEPLq.mjs";
78
78
  import { N as N73 } from "./chunks/NcProgressBar-C-ane-Ni.mjs";
79
- import { N as N74 } from "./chunks/NcRadioGroup-BzW4XHoK.mjs";
80
- import { N as N75 } from "./chunks/NcRadioGroupButton-CXKQMID9.mjs";
81
- import { N as N76 } from "./chunks/NcRelatedResourcesPanel-C0j0Fs4r.mjs";
82
- import { N as N77, a, b } from "./chunks/NcRichContenteditable-DO3_WniI.mjs";
79
+ import { N as N74 } from "./chunks/NcRadioGroup-B4qmS2UD.mjs";
80
+ import { N as N75 } from "./chunks/NcRadioGroupButton-CZykGwv3.mjs";
81
+ import { N as N76 } from "./chunks/NcRelatedResourcesPanel-D_Ttpg5_.mjs";
82
+ import { N as N77, a, b } from "./chunks/NcRichContenteditable-Qw614bJ5.mjs";
83
83
  import "@nextcloud/auth";
84
84
  import "@nextcloud/axios";
85
85
  import "@nextcloud/router";
@@ -87,26 +87,27 @@ import "@nextcloud/sharing/public";
87
87
  import "vue";
88
88
  import "@vueuse/core";
89
89
  import "vue-router";
90
- import { a as a2, g, b as b2, c, s, d } from "./chunks/referencePickerModal-B4bsiMOy.mjs";
91
- import { N as N78, h, i, b as b3, r, c as c2, e, f } from "./chunks/customPickerElements-Cu7bLbap.mjs";
90
+ import { a as a2, g, b as b2, c, d, s, e } from "./chunks/referencePickerModal-CnKdEDwu.mjs";
91
+ import "./chunks/createElementId-DhjFt1I9.mjs";
92
+ import { N as N78, h, i, b as b3, r, c as c2, e as e2, f } from "./chunks/customPickerElements-BqbDcaEu.mjs";
92
93
  import "unist-builder";
93
94
  import "unist-util-visit-parents";
94
95
  import "./chunks/logger-D3RVzcfQ.mjs";
95
- import { N as N79 } from "./chunks/NcRichText-BOBQq7Od.mjs";
96
- import { N as N80 } from "./chunks/NcSelect-BOFzoCwK.mjs";
96
+ import { N as N79 } from "./chunks/NcRichText-BO_4KtBA.mjs";
97
+ import { N as N80 } from "./chunks/NcSelect--kERLlBK.mjs";
97
98
  import "debounce";
98
- import { _ as _7 } from "./chunks/NcTextField.vue_vue_type_script_setup_true_lang-BQHjkK8r.mjs";
99
+ import { _ as _7 } from "./chunks/NcTextField.vue_vue_type_script_setup_true_lang-Bx2esFU2.mjs";
99
100
  import "@nextcloud/event-bus";
100
101
  import { _ as _8 } from "./chunks/NcSavingIndicatorIcon.vue_vue_type_script_setup_true_lang-DbQnMYZm.mjs";
101
- import { N as N81 } from "./chunks/NcSelectTags-D7qWNjXa.mjs";
102
- import { N as N82 } from "./chunks/NcSelectUsers-CI8twLn9.mjs";
103
- import { N as N83 } from "./chunks/NcSettingsSection-DmfxX2se.mjs";
104
- import { N as N84 } from "./chunks/NcSettingsSelectGroup-TN64yH4k.mjs";
102
+ import { N as N81 } from "./chunks/NcSelectTags-I2hJaNax.mjs";
103
+ import { N as N82 } from "./chunks/NcSelectUsers-K14Bepkq.mjs";
104
+ import { N as N83 } from "./chunks/NcSettingsSection-Caz1fuWt.mjs";
105
+ import { N as N84 } from "./chunks/NcSettingsSelectGroup-SYJ8-XlR.mjs";
105
106
  import { N as N85 } from "./chunks/NcTextArea-Dxzj4zdb.mjs";
106
107
  import { _ as _9 } from "./chunks/NcThemeProvider.vue_vue_type_script_setup_true_lang-wie70gn4.mjs";
107
- import { _ as _10 } from "./chunks/NcTimezonePicker.vue_vue_type_script_setup_true_lang-Csd1JQe6.mjs";
108
- import { N as N86 } from "./chunks/NcUserBubble-CDQa0hGy.mjs";
109
- import { N as N87 } from "./chunks/NcUserStatusIcon-DsviB2Cr.mjs";
108
+ import { _ as _10 } from "./chunks/NcTimezonePicker.vue_vue_type_script_setup_true_lang-D7ZHgnwW.mjs";
109
+ import { N as N86 } from "./chunks/NcUserBubble-BXR7vT0V.mjs";
110
+ import { N as N87 } from "./chunks/NcUserStatusIcon-BF5OEQFU.mjs";
110
111
  import { _ as _11 } from "./chunks/NcVNodes.vue_vue_type_script_lang-BqUHinRZ.mjs";
111
112
  import { useFormatRelativeTime, useFormatTime } from "./composables/useFormatDateTime/index.mjs";
112
113
  import { useHotKey } from "./composables/useHotKey/index.mjs";
@@ -116,7 +117,7 @@ import { MOBILE_BREAKPOINT, MOBILE_SMALL_BREAKPOINT, useIsMobile, useIsSmallMobi
116
117
  import { isA11yActivation } from "./functions/a11y/index.mjs";
117
118
  import { getEnabledContactsMenuActions, registerContactsMenuAction } from "./functions/contactsMenu/index.mjs";
118
119
  import { spawnDialog } from "./functions/dialog/index.mjs";
119
- import { E, e as e2, a as a3, g as g2, s as s2 } from "./chunks/emoji-C8k9NUlo.mjs";
120
+ import { E, e as e3, a as a3, g as g2, s as s2 } from "./chunks/emoji-C8k9NUlo.mjs";
120
121
  import { checkIfDarkTheme, isDarkTheme } from "./functions/isDarkTheme/index.mjs";
121
122
  import { preloadImage } from "./functions/preloadImage/index.mjs";
122
123
  import { usernameToColor } from "./functions/usernameToColor/index.mjs";
@@ -230,13 +231,14 @@ export {
230
231
  _11 as NcVNodes,
231
232
  a2 as anyLinkProviderId,
232
233
  checkIfDarkTheme,
233
- e2 as emojiAddRecent,
234
+ e3 as emojiAddRecent,
234
235
  a3 as emojiSearch,
235
236
  g2 as getCurrentSkinTone,
236
237
  getEnabledContactsMenuActions,
237
238
  g as getLinkWithPicker,
238
239
  b2 as getProvider,
239
240
  c as getProviders,
241
+ d as getReferenceWithPicker,
240
242
  h as hasInteractiveView,
241
243
  isA11yActivation,
242
244
  i as isCustomPickerElementRegistered,
@@ -246,11 +248,11 @@ export {
246
248
  registerContactsMenuAction,
247
249
  r as registerCustomPickerElement,
248
250
  c2 as registerWidget,
249
- e as renderCustomPickerElement,
251
+ e2 as renderCustomPickerElement,
250
252
  f as renderWidget,
251
253
  s as searchProvider,
252
254
  s2 as setCurrentSkinTone,
253
- d as sortProviders,
255
+ e as sortProviders,
254
256
  spawnDialog,
255
257
  useFormatRelativeTime,
256
258
  useFormatTime,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -19,11 +19,12 @@ declare namespace _default {
19
19
  /**
20
20
  * Sets the user status
21
21
  *
22
- * @param {string} status user's status
23
- * @param {string} message user's message
24
- * @param {string} icon user's icon
22
+ * @param {Record<string, string>} options - Options for setting the user status
23
+ * @param {string} options.status user's status
24
+ * @param {string} options.message user's message
25
+ * @param {string} options.icon user's icon
25
26
  */
26
- function setUserStatus({ status, message, icon }: string): void;
27
+ function setUserStatus({ status, message, icon }: Record<string, string>): void;
27
28
  }
28
29
  }
29
30
  export default _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextcloud/vue",
3
- "version": "9.8.1",
3
+ "version": "9.9.0",
4
4
  "description": "Nextcloud vue components",
5
5
  "keywords": [
6
6
  "vuejs",
@@ -76,7 +76,7 @@
76
76
  },
77
77
  "dependencies": {
78
78
  "@ckpack/vue-color": "^1.6.0",
79
- "@floating-ui/dom": "^1.7.6",
79
+ "@floating-ui/dom": "^1.8.0",
80
80
  "@nextcloud/auth": "^2.6.0",
81
81
  "@nextcloud/axios": "^2.6.0",
82
82
  "@nextcloud/browser-storage": "^0.5.0",
@@ -94,14 +94,14 @@
94
94
  "blurhash": "^2.0.5",
95
95
  "clone": "^2.1.2",
96
96
  "debounce": "^3.0.0",
97
- "dompurify": "^3.4.3",
97
+ "dompurify": "^3.4.12",
98
98
  "emoji-mart-vue-fast": "^15.0.5",
99
99
  "escape-html": "^1.0.3",
100
100
  "floating-vue": "^5.2.2",
101
- "focus-trap": "^8.2.0",
101
+ "focus-trap": "^8.2.2",
102
102
  "linkifyjs": "^4.3.3",
103
103
  "mdast-util-to-string": "^4.0.0",
104
- "p-queue": "^9.2.0",
104
+ "p-queue": "^9.3.1",
105
105
  "rehype-external-links": "^3.0.0",
106
106
  "rehype-highlight": "^7.0.2",
107
107
  "rehype-react": "^8.0.0",
@@ -118,49 +118,49 @@
118
118
  "unist-builder": "^4.0.0",
119
119
  "unist-util-visit-parents": "^6.0.2",
120
120
  "vue": "^3.5.18",
121
- "vue-router": "^5.0.7"
121
+ "vue-router": "^5.1.0"
122
122
  },
123
123
  "devDependencies": {
124
- "@babel/plugin-syntax-import-assertions": "^7.28.6",
125
- "@babel/plugin-transform-typescript": "^7.28.6",
126
- "@babel/preset-typescript": "^7.28.5",
124
+ "@babel/plugin-syntax-import-assertions": "^7.29.7",
125
+ "@babel/plugin-transform-typescript": "^7.29.7",
126
+ "@babel/preset-typescript": "^7.29.7",
127
127
  "@fontsource/roboto": "^5.2.10",
128
128
  "@mdi/js": "^7.4.47",
129
129
  "@mdi/svg": "^7.4.47",
130
130
  "@nextcloud/babel-config": "^1.3.0",
131
131
  "@nextcloud/browserslist-config": "^3.1.2",
132
- "@nextcloud/eslint-config": "^9.0.0-rc.9",
132
+ "@nextcloud/eslint-config": "^9.0.1",
133
133
  "@nextcloud/stylelint-config": "^3.2.2",
134
134
  "@nextcloud/vite-config": "^2.5.0",
135
135
  "@nextcloud/webpack-vue-config": "github:nextcloud/webpack-vue-config#vue3",
136
- "@playwright/experimental-ct-vue": "^1.58.2",
137
- "@playwright/test": "^1.60.0",
136
+ "@playwright/experimental-ct-vue": "^1.61.1",
137
+ "@playwright/test": "^1.61.1",
138
138
  "@types/gettext-parser": "^9.0.0",
139
- "@types/node": "^24.12.4",
140
- "@vitest/coverage-v8": "^4.1.6",
139
+ "@types/node": "^26.1.1",
140
+ "@vitest/coverage-v8": "^4.1.10",
141
141
  "@vue/test-utils": "^2.4.6",
142
142
  "@vue/tsconfig": "^0.9.1",
143
143
  "babel-loader-exclude-node-modules-except": "^1.2.4",
144
144
  "core-js": "^3.49.0",
145
- "eslint": "^10.3.0",
145
+ "eslint": "^10.6.0",
146
146
  "file-loader": "^6.2.0",
147
147
  "gettext-extractor": "^4.0.6",
148
- "gettext-parser": "^9.0.2",
148
+ "gettext-parser": "^9.1.1",
149
149
  "glob": "^13.0.6",
150
150
  "jsdom": "^29.1.1",
151
151
  "remark-gfm": "^4.0.1",
152
152
  "resolve-url-loader": "^5.0.0",
153
- "sass": "^1.99.0",
154
- "stylelint": "^17.11.1",
153
+ "sass": "^1.101.0",
154
+ "stylelint": "^17.14.0",
155
155
  "ts-node": "^10.9.2",
156
156
  "typescript": "^5.9.3",
157
157
  "url-loader": "^4.1.1",
158
- "vite": "^7.3.2",
158
+ "vite": "^7.3.5",
159
159
  "vitest": "^4.0.14",
160
160
  "vue-material-design-icons": "^5.3.1",
161
161
  "vue-styleguidist": "^4.72.4",
162
- "vue-tsc": "^3.2.9",
163
- "webpack": "^5.106.2",
162
+ "vue-tsc": "^3.3.7",
163
+ "webpack": "^5.108.4",
164
164
  "webpack-merge": "^6.0.1"
165
165
  },
166
166
  "engines": {
@@ -1 +0,0 @@
1
- {"version":3,"file":"NcActions-CUmcZ3C3.mjs","sources":["../../node_modules/vue-material-design-icons/DotsHorizontal.vue","../../src/utils/isSlotPopulated.ts","../../src/components/NcActions/NcActions.vue"],"sourcesContent":["<template>\n <span v-bind=\"$attrs\"\n :aria-hidden=\"title ? null : 'true'\"\n :aria-label=\"title\"\n class=\"material-design-icon dots-horizontal-icon\"\n role=\"img\"\n @click=\"$emit('click', $event)\">\n <svg :fill=\"fillColor\"\n class=\"material-design-icon__svg\"\n :width=\"size\"\n :height=\"size\"\n viewBox=\"0 0 24 24\">\n <path d=\"M16,12A2,2 0 0,1 18,10A2,2 0 0,1 20,12A2,2 0 0,1 18,14A2,2 0 0,1 16,12M10,12A2,2 0 0,1 12,10A2,2 0 0,1 14,12A2,2 0 0,1 12,14A2,2 0 0,1 10,12M4,12A2,2 0 0,1 6,10A2,2 0 0,1 8,12A2,2 0 0,1 6,14A2,2 0 0,1 4,12Z\">\n <title v-if=\"title\">{{ title }}</title>\n </path>\n </svg>\n </span>\n</template>\n\n<script>\nexport default {\n name: \"DotsHorizontalIcon\",\n emits: ['click'],\n props: {\n title: {\n type: String,\n },\n fillColor: {\n type: String,\n default: \"currentColor\"\n },\n size: {\n type: Number,\n default: 24\n }\n }\n}\n</script>","/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport type { VNode, VNodeNormalizedChildren } from 'vue'\n\nimport { Comment, Fragment, Text } from 'vue'\n\n/**\n * Checks whether a slot is populated\n *\n * @param vnodes The array of vnodes to check\n */\nexport function isSlotPopulated(vnodes?: VNode[] | VNodeNormalizedChildren) {\n\treturn Array.isArray(vnodes) && vnodes.some((node) => {\n\t\tif (node === null) {\n\t\t\treturn false\n\t\t} else if (typeof node === 'object') {\n\t\t\tconst vnode = node as VNode\n\t\t\tif (vnode.type === Comment) {\n\t\t\t\treturn false\n\t\t\t} else if (vnode.type === Fragment && !isSlotPopulated(vnode.children)) {\n\t\t\t\treturn false\n\t\t\t} else if (vnode.type === Text && !(vnode.children as string).trim()) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t}\n\t\treturn true\n\t})\n}\n","<!--\n - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\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<IconTrashCanOutline :size=\"20\" />\n\t\t\t</template>\n\t\t\tDelete\n\t\t</NcActionButton>\n\t</NcActions>\n</template>\n<script>\nimport IconTrashCanOutline from 'vue-material-design-icons/TrashCanOutline.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconTrashCanOutline,\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<IconPencilOutline :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<IconTrashCanOutline :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<IconOpenInNew :size=\"20\" />\n\t\t\t</template>\n\t\t\tLink\n\t\t</NcActionLink>\n\t</NcActions>\n</template>\n<script>\nimport IconTrashCanOutline from 'vue-material-design-icons/TrashCanOutline.vue'\nimport IconOpenInNew from 'vue-material-design-icons/OpenInNew.vue'\nimport IconPencilOutline from 'vue-material-design-icons/PencilOutline.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconTrashCanOutline,\n\t\tIconOpenInNew,\n\t\tIconPencilOutline,\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<IconPlus :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<IconPencilOutline :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<IconTrashCanOutline :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<IconOpenInNew :size=\"20\" />\n\t\t\t</template>\n\t\t\tLink\n\t\t</NcActionLink>\n\t</NcActions>\n</template>\n<script>\nimport IconPlus from 'vue-material-design-icons/Plus.vue'\nimport IconTrashCanOutline from 'vue-material-design-icons/TrashCanOutline.vue'\nimport IconOpenInNew from 'vue-material-design-icons/OpenInNew.vue'\nimport IconPencilOutline from 'vue-material-design-icons/PencilOutline.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconTrashCanOutline,\n\t\tIconOpenInNew,\n\t\tIconPencilOutline,\n\t\tIconPlus,\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<IconPlus :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<IconPencilOutline :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<IconTrashCanOutline :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<IconOpenInNew :size=\"20\" />\n\t\t\t</template>\n\t\t\tLink\n\t\t</NcActionLink>\n\t</NcActions>\n</template>\n<script>\nimport IconPlus from 'vue-material-design-icons/Plus.vue'\nimport IconTrashCanOutline from 'vue-material-design-icons/TrashCanOutline.vue'\nimport IconOpenInNew from 'vue-material-design-icons/OpenInNew.vue'\nimport IconPencilOutline from 'vue-material-design-icons/PencilOutline.vue'\nexport default {\n\tcomponents: {\n\t\tIconTrashCanOutline,\n\t\tIconOpenInNew,\n\t\tIconPencilOutline,\n\t\tIconPlus,\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<IconPencilOutline :size=\"20\" />\n\t\t</template>\n\t\t<NcActionButton @click=\"showMessage('Edit')\">\n\t\t\t<template #icon>\n\t\t\t\t<IconPencilOutline :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<IconTrashCanOutline :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<IconOpenInNew :size=\"20\" />\n\t\t\t</template>\n\t\t\tLink\n\t\t</NcActionLink>\n\t</NcActions>\n</template>\n<script>\nimport IconTrashCanOutline from 'vue-material-design-icons/TrashCanOutline.vue'\nimport IconOpenInNew from 'vue-material-design-icons/OpenInNew.vue'\nimport IconPencilOutline from 'vue-material-design-icons/PencilOutline.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconTrashCanOutline,\n\t\tIconOpenInNew,\n\t\tIconPencilOutline,\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<IconPencilOutline :size=\"20\" />\n\t\t</template>\n\t\t<NcActionButton>\n\t\t\t<template #icon>\n\t\t\t\t<IconPencilOutline :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<IconTrashCanOutline :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<IconArrowRight :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<IconTrayArrowDown :size=\"20\" />\n\t\t\t</template>\n\t\t\tDownload\n\t\t</NcActionButton>\n\t</NcActions>\n</template>\n<script>\nimport IconArrowRight from 'vue-material-design-icons/ArrowRight.vue'\nimport IconTrashCanOutline from 'vue-material-design-icons/TrashCanOutline.vue'\nimport IconTrayArrowDown from 'vue-material-design-icons/TrayArrowDown.vue'\nimport IconPencilOutline from 'vue-material-design-icons/PencilOutline.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconArrowRight,\n\t\tIconTrashCanOutline,\n\t\tIconTrayArrowDown,\n\t\tIconPencilOutline,\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<IconPencilOutline :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<IconTrashCanOutline :size=\"20\" />\n\t\t\t</template>\n\t\t\tDelete\n\t\t</NcActionButton>\n\t</NcActions>\n</template>\n<script>\nimport IconTrashCanOutline from 'vue-material-design-icons/TrashCanOutline.vue'\nimport IconPencilOutline from 'vue-material-design-icons/PencilOutline.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconTrashCanOutline,\n\t\tIconPencilOutline,\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<IconPlus :size=\"20\" />\n\t\t</template>\n\t\t<NcActionButton>\n\t\t\t<template #icon>\n\t\t\t\t<IconPencilOutline :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<IconTrashCanOutline :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<IconArrowRight :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<IconTrayArrowDown :size=\"20\" />\n\t\t\t</template>\n\t\t\tDownload\n\t\t</NcActionButton>\n\t</NcActions>\n</template>\n<script>\nimport IconArrowRight from 'vue-material-design-icons/ArrowRight.vue'\nimport IconTrashCanOutline from 'vue-material-design-icons/TrashCanOutline.vue'\nimport IconTrayArrowDown from 'vue-material-design-icons/TrayArrowDown.vue'\nimport IconPencilOutline from 'vue-material-design-icons/PencilOutline.vue'\nimport IconPlus from 'vue-material-design-icons/Plus.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconArrowRight,\n\t\tIconTrashCanOutline,\n\t\tIconTrayArrowDown,\n\t\tIconPencilOutline,\n\t\tIconPlus,\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<IconDotsHorizontalCircleOutline :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<IconMicrophoneOff :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<IconTrashCanOutline :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 IconTrashCanOutline from 'vue-material-design-icons/TrashCanOutline.vue'\nimport IconDotsHorizontalCircleOutline from 'vue-material-design-icons/DotsHorizontalCircleOutline.vue'\nimport IconMicrophoneOff from 'vue-material-design-icons/MicrophoneOff.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconTrashCanOutline,\n\t\tIconDotsHorizontalCircleOutline,\n\t\tIconMicrophoneOff,\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<IconMagnify :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<IconTrashCanOutline :size=\"20\" />\n\t\t\t</template>\n\t\t\tDelete\n\t\t</NcActionButton>\n\t</NcActions>\n</template>\n<script>\nimport IconTrashCanOutline from 'vue-material-design-icons/TrashCanOutline.vue'\nimport IconMagnify from 'vue-material-design-icons/Magnify.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconTrashCanOutline,\n\t\tIconMagnify,\n\t},\n}\n</script>\n```\n\n### Design variants\n\n```vue\n<template>\n\t<div>\n\t\t<NcActions :variant=\"current\">\n\t\t\t<template #icon>\n\t\t\t\t<IconSelectColor :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<IconTrashCanOutline :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 variants\" close-after-click @click=\"define(row)\" :key=\"`type-icon--${row}`\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconCheckboxMarkedCircleOutline v-if=\"row === current\" :size=\"20\" />\n\t\t\t\t\t<IconSelectColor 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 :variant=\"current\" menu-name=\"Choose a variant\">\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<IconTrashCanOutline :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 variants\" close-after-click @click=\"define(row)\" :key=\"`type-text--${row}`\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconCheckboxMarkedCircleOutline v-if=\"row === current\" :size=\"20\" />\n\t\t\t\t\t<IconSelectColor 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 :variant=\"current\" menu-name=\"Choose a variant\">\n\t\t\t<template #icon>\n\t\t\t\t<IconSelectColor :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<IconTrashCanOutline :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 variants\" close-after-click @click=\"define(row)\" :key=\"`type-icon-text--${row}`\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconCheckboxMarkedCircleOutline v-if=\"row === current\" :size=\"20\" />\n\t\t\t\t\t<IconSelectColor 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 IconTrashCanOutline from 'vue-material-design-icons/TrashCanOutline.vue'\nimport IconPaletteOutline from 'vue-material-design-icons/PaletteOutline.vue'\nimport IconSelectColor from 'vue-material-design-icons/SelectColor.vue'\nimport IconCheckboxMarkedCircleOutline from 'vue-material-design-icons/CheckboxMarkedCircleOutline.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconTrashCanOutline,\n\t\tIconPaletteOutline,\n\t\tIconSelectColor,\n\t\tIconCheckboxMarkedCircleOutline,\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tcurrent: 'primary',\n\t\t\tvariants: [\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\" variant=\"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<IconStarOutline :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<IconEmail :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<IconBookmarkOutline :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<IconClockOutline :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<IconAlertOctagonOutline :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 v-model=\"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<IconOpenInNew :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<IconTrayArrowDown :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\" variant=\"tertiary\">\n\t\t\t\t<template #icon>\n\t\t\t\t\t<IconFormatTitle :size=\"20\" />\n\t\t\t\t</template>\n\t\t\t\t<NcActionButtonGroup name=\"Alignment\">\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<IconFormatAlignLeft :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<IconFormatAlignCenter :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<IconFormatAlignRight :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 v-model=\"checked.bold\" value=\"bold\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconFormatBold :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 v-model=\"checked.italic\" value=\"italic\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconFormatItalic :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 v-model=\"checked.underline\" value=\"underline\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconFormatUnderline :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\" v-model=\"color.black\" value=\"Black\">Black</NcActionRadio>\n\t\t\t\t<NcActionRadio name=\"color\" v-model=\"color.blue\" value=\"Blue\">Blue</NcActionRadio>\n\t\t\t\t<NcActionRadio name=\"color\" v-model=\"color.red\" value=\"Red\">Red</NcActionRadio>\n\t\t\t\t<NcActionRadio name=\"color\" v-model=\"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\" variant=\"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<IconPencilOutline :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<IconTrashCanOutline :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>Tooltip</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 IconPencilOutline from 'vue-material-design-icons/PencilOutline.vue'\nimport IconTrashCanOutline from 'vue-material-design-icons/TrashCanOutline.vue'\n\n// Email icons\nimport IconStarOutline from 'vue-material-design-icons/StarOutline.vue'\nimport IconEmail from 'vue-material-design-icons/Email.vue'\nimport IconBookmarkOutline from 'vue-material-design-icons/BookmarkOutline.vue'\nimport IconClockOutline from 'vue-material-design-icons/ClockOutline.vue'\nimport IconAlertOctagonOutline from 'vue-material-design-icons/AlertOctagonOutline.vue'\nimport IconCheck from 'vue-material-design-icons/Check.vue'\nimport IconOpenInNew from 'vue-material-design-icons/OpenInNew.vue'\nimport IconTrayArrowDown from 'vue-material-design-icons/TrayArrowDown.vue'\n\n// Formatting icons\nimport IconFormatTitle from 'vue-material-design-icons/FormatTitle.vue'\nimport IconFormatAlignLeft from 'vue-material-design-icons/FormatAlignLeft.vue'\nimport IconFormatAlignCenter from 'vue-material-design-icons/FormatAlignCenter.vue'\nimport IconFormatAlignRight from 'vue-material-design-icons/FormatAlignRight.vue'\nimport IconFormatBold from 'vue-material-design-icons/FormatBold.vue'\nimport IconFormatItalic from 'vue-material-design-icons/FormatItalic.vue'\nimport IconFormatUnderline from 'vue-material-design-icons/FormatUnderline.vue'\n\nexport default {\n\tcomponents: {\n\t\t// Common icons\n\t\tIconPencilOutline,\n\t\tIconTrashCanOutline,\n\n\t\t// Email icons\n\t\tIconStarOutline,\n\t\tIconEmail,\n\t\tIconBookmarkOutline,\n\t\tIconClockOutline,\n\t\tIconAlertOctagonOutline,\n\t\tIconCheck,\n\t\tIconOpenInNew,\n\t\tIconTrayArrowDown,\n\n\t\t// Formatting icons\n\t\tIconFormatTitle,\n\t\tIconFormatAlignLeft,\n\t\tIconFormatAlignCenter,\n\t\tIconFormatAlignRight,\n\t\tIconFormatBold,\n\t\tIconFormatItalic,\n\t\tIconFormatUnderline,\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tselected: false,\n\t\t\t// Formatting\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;\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<IconAccountOutline :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<IconAccountOutline :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<IconAccountOutline :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 { h, resolveComponent } from 'vue'\nimport IconAccountOutline from 'vue-material-design-icons/AccountOutline.vue'\n\nexport default {\n\tcomponents: {\n\t\tIconAccountOutline,\n\n\t\tMyUserActionButton: {\n\t\t\tname: 'MyUserActionButton',\n\t\t\tcomponents: { IconAccountOutline },\n\t\t\trender: () => h(resolveComponent('NcActionButton'), null, { default: () => 'Button', icon: () => h(IconAccountOutline, { size: 20 }) }),\n\t\t},\n\n\t\tMyActionsList: {\n\t\t\tname: 'MyActionsList',\n\t\t\tcomponents: { IconAccountOutline },\n\t\t\trender: () => h('div', null, {\n\t\t\t\tdefault: () => [\n\t\t\t\t\th(resolveComponent('NcActionButton'), null, { default: () => 'Button', icon: () => h(IconAccountOutline, { size: 20 }) }),\n\t\t\t\t\th(resolveComponent('NcActionButton'), null, { default: () => 'Button', icon: () => h(IconAccountOutline, { size: 20 }) }),\n\t\t\t\t\th(resolveComponent('NcActionButton'), null, { default: () => 'Button', icon: () => h(IconAccountOutline, { size: 20 }) }),\n\t\t\t\t\th(resolveComponent('NcActionButton'), null, { default: () => 'Button', icon: () => h(IconAccountOutline, { size: 20 }) }),\n\t\t\t\t],\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</docs>\n\n<script>\nimport { computed, Fragment, h, mergeProps, warn } from 'vue'\nimport IconDotsHorizontal from 'vue-material-design-icons/DotsHorizontal.vue'\nimport { useTrapStackControl } from '../../composables/useTrapStackControl.ts'\nimport { t } from '../../l10n.ts'\nimport { createElementId } from '../../utils/createElementId.ts'\nimport { isSlotPopulated } from '../../utils/isSlotPopulated.ts'\nimport NcButton from '../NcButton/index.ts'\nimport NcPopover from '../NcPopover/index.js'\nimport { NC_ACTIONS_CLOSE_MENU, NC_ACTIONS_IS_SEMANTIC_MENU } from './useNcActions.ts'\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 popover menu 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\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 * - Navigation (has no specific role, should be used an element with navigation 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 *\n\t\t\t * @type {import('vue').ComputedRef<boolean>}\n\t\t\t */\n\t\t\t[NC_ACTIONS_IS_SEMANTIC_MENU]: computed(() => this.actionsMenuSemanticType === 'menu'),\n\t\t\t[NC_ACTIONS_CLOSE_MENU]: this.closeMenu,\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 * 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 * 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 * 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.getElementById('content-vue') ?? 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: [Boolean, String, Object, Element],\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\n\t\t/**\n\t\t * Specifies the button variant used for trigger and single actions buttons.\n\t\t *\n\t\t * If left empty, the default button style will be applied.\n\t\t *\n\t\t * @since 8.23.0\n\t\t */\n\t\tvariant: {\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'].includes(value)\n\t\t\t},\n\n\t\t\tdefault: null,\n\t\t},\n\n\t\t/**\n\t\t * Specify the size used for trigger and single actions buttons.\n\t\t *\n\t\t * If left empty, the default button size will be applied.\n\t\t */\n\t\tsize: {\n\t\t\ttype: String,\n\t\t\tdefault: 'normal',\n\t\t\tvalidator(value) {\n\t\t\t\treturn ['small', 'normal', 'large'].includes(value)\n\t\t\t},\n\t\t},\n\t},\n\n\temits: [\n\t\t'click',\n\t\t'blur',\n\t\t'focus',\n\n\t\t'close',\n\t\t'closed',\n\t\t'open',\n\t\t'opened',\n\t\t'update:open',\n\t],\n\n\tsetup() {\n\t\tconst randomId = createElementId()\n\n\t\treturn {\n\t\t\trandomId,\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'|'navigation'|'dialog'|'tooltip'|'unknown'}\n\t\t\t */\n\t\t\tactionsMenuSemanticType: 'unknown',\n\t\t}\n\t},\n\n\tcomputed: {\n\t\ttriggerButtonVariant() {\n\t\t\t// If requested, we use a primary button\n\t\t\treturn this.variant || (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 * There is no valid popup role for navigation 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\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},\n\n\t\t\t\tnavigation: {\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},\n\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},\n\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},\n\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},\n\t\t\t}\n\t\t\treturn configs[this.actionsMenuSemanticType]\n\t\t},\n\n\t\twithFocusTrap() {\n\t\t\treturn this.config.withFocusTrap\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\t// Ensure that pressing escape will close the menu even if the menu is not hovered\n\t\t\t// and not currently active, e.g. because user opened the context menu\n\t\t\tif (this.opened) {\n\t\t\t\tdocument.body.addEventListener('keydown', this.handleEscapePressed)\n\t\t\t} else {\n\t\t\t\tdocument.body.removeEventListener('keydown', this.handleEscapePressed)\n\t\t\t}\n\t\t},\n\t},\n\n\tcreated() {\n\t\t// When component has its own custom focus management\n\t\t// The global focus trap stack should be paused\n\t\tuseTrapStackControl(() => this.opened, {\n\t\t\tdisabled: () => this.config.withFocusTrap,\n\t\t})\n\n\t\tif ('ariaHidden' in this.$attrs) {\n\t\t\twarn('[NcActions]: Do not set the ariaHidden attribute as the root element will inherit the incorrect aria-hidden.')\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?.type?.name\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\tisAction(action) {\n\t\t\treturn this.getActionName(action)?.startsWith?.('NcAction')\n\t\t},\n\n\t\t/**\n\t\t * Check whether a icon prop value is an URL or not\n\t\t *\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 {\n\t\t\t\treturn false\n\t\t\t}\n\t\t},\n\n\t\t// MENU STATE MANAGEMENT\n\t\ttoggleMenu(state) {\n\t\t\tif (state) {\n\t\t\t\tthis.openMenu()\n\t\t\t} else {\n\t\t\t\tthis.closeMenu()\n\t\t\t}\n\t\t},\n\n\t\topenMenu() {\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\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 trigger button\n\t\t\t\tthis.$refs.triggerButton?.$el.focus()\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Called when popover is shown after the show delay\n\t\t */\n\t\tonOpened() {\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.focusFirstAction(null)\n\n\t\t\t\t/**\n\t\t\t\t * Event emitted when the popover menu is opened.\n\t\t\t\t *\n\t\t\t\t * This event is emitted after `update:open` was emitted and the opening transition finished.\n\t\t\t\t */\n\t\t\t\tthis.$emit('opened')\n\t\t\t})\n\t\t},\n\n\t\tonClosed() {\n\t\t\t/**\n\t\t\t * Event emitted when the popover menu is closed.\n\t\t\t *\n\t\t\t * This event is emitted after `update:open` was emitted and the closing transition finished.\n\t\t\t */\n\t\t\tthis.$emit('closed')\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\n\t\t/**\n\t\t * @return {NodeList<HTMLElement>}\n\t\t */\n\t\tgetFocusableMenuItemElements() {\n\t\t\treturn this.$refs.menu.querySelectorAll(focusableSelector)\n\t\t},\n\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\tthis.handleEscapePressed(event)\n\t\t},\n\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\n\t\thandleEscapePressed(event) {\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\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\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\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\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\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\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\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\n\t\tonFocus(event) {\n\t\t\tthis.$emit('focus', event)\n\t\t},\n\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 requires 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\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 * @return {object|undefined} The created VNode\n\t */\n\trender() {\n\t\tconst actions = []\n\t\t// We have to iterate over all slot elements\n\t\tconst findActions = (vnodes, actions) => {\n\t\t\tvnodes.forEach((vnode) => {\n\t\t\t\tif (this.isAction(vnode)) {\n\t\t\t\t\tactions.push(vnode)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t// If we encounter a Fragment, we have to check its children too\n\t\t\t\tif (vnode.type === Fragment) {\n\t\t\t\t\tfindActions(vnode.children, actions)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\tfindActions(this.$slots.default?.(), actions)\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\twarn('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\n\t\tconst menuItemsActions = ['NcActionButton', 'NcActionButtonGroup', 'NcActionCheckbox', 'NcActionRadio']\n\t\tconst textInputActions = ['NcActionInput', 'NcActionTextEditable']\n\t\tconst linkActions = ['NcActionLink', 'NcActionRouter']\n\n\t\tconst hasTextInputAction = menuActions.some((action) => textInputActions.includes(this.getActionName(action)))\n\t\tconst hasMenuItemAction = menuActions.some((action) => menuItemsActions.includes(this.getActionName(action)))\n\t\tconst hasLinkAction = menuActions.some((action) => linkActions.includes(this.getActionName(action)))\n\n\t\tif (hasTextInputAction) {\n\t\t\tthis.actionsMenuSemanticType = 'dialog'\n\t\t} else if (hasMenuItemAction) {\n\t\t\tthis.actionsMenuSemanticType = 'menu'\n\t\t} else if (hasLinkAction) {\n\t\t\tthis.actionsMenuSemanticType = 'navigation'\n\t\t} else {\n\t\t\t// (!) Hotfix (!)\n\t\t\t// In Vue 2 it is not easy to search for NcAction* in sub-component of a slot.\n\t\t\t// When a menu is rendered, children are not mounted yet.\n\t\t\t// If we have NcActions > MyActionsList > NcActionButton, only MyActionsList's vnode is available.\n\t\t\t// So when NcActions has actions as non-direct children, here then we don't know about them.\n\t\t\t// Like this menu has no buttons/links/inputs.\n\t\t\t// It makes the menu incorrectly considered a tooltip.\n\t\t\tconst ncActions = actions.filter((action) => this.getActionName(action).startsWith('NcAction'))\n\t\t\tif (ncActions.length === actions.length) {\n\t\t\t\t// True tooltip\n\t\t\t\tthis.actionsMenuSemanticType = 'tooltip'\n\t\t\t} else {\n\t\t\t\t// Custom components are passed to the NcActions\n\t\t\t\tthis.actionsMenuSemanticType = 'unknown'\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?.props?.icon\n\t\t\tconst icon = action?.children?.icon?.()?.[0] ?? (\n\t\t\t\tthis.isIconUrl(iconProp)\n\t\t\t\t\t? h('img', { class: 'action-item__menutoggle__icon', src: iconProp, alt: '' })\n\t\t\t\t\t: h('span', { class: ['icon', iconProp] })\n\t\t\t)\n\t\t\tconst text = action?.children?.default?.()?.[0]?.children?.trim()\n\t\t\tconst buttonText = this.forceName ? text : ''\n\n\t\t\tlet title = action?.props?.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?.props ?? {}) }\n\t\t\tconst type = ['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(\n\t\t\t\tNcButton,\n\t\t\t\tmergeProps(\n\t\t\t\t\tpropsToForward,\n\t\t\t\t\t{\n\t\t\t\t\t\tclass: 'action-item action-item--single',\n\t\t\t\t\t\t'aria-label': action?.props?.['aria-label'] || text,\n\t\t\t\t\t\ttitle,\n\t\t\t\t\t\tdisabled: this.disabled || action?.props?.disabled,\n\t\t\t\t\t\tpressed: action?.props?.modelValue,\n\t\t\t\t\t\tsize: this.size,\n\t\t\t\t\t\ttype,\n\t\t\t\t\t\t// If it has a menuName, we use a secondary button\n\t\t\t\t\t\tvariant: this.variant || (buttonText ? 'secondary' : 'tertiary'),\n\t\t\t\t\t\tonFocus: this.onFocus,\n\t\t\t\t\t\tonBlur: 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'onUpdate:pressed': action?.props?.['onUpdate:modelValue'] ?? (() => {}),\n\t\t\t\t\t},\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tdefault: () => buttonText,\n\t\t\t\t\ticon: () => icon,\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 = isSlotPopulated(this.$slots.icon?.())\n\t\t\t\t? this.$slots.icon?.()\n\t\t\t\t: (this.defaultIcon\n\t\t\t\t\t\t? h('span', { class: ['icon', this.defaultIcon] })\n\t\t\t\t\t\t: h(IconDotsHorizontal, { size: 20 })\n\t\t\t\t\t)\n\t\t\tconst triggerRandomId = `${this.randomId}-trigger`\n\t\t\treturn h(\n\t\t\t\tNcPopover,\n\t\t\t\t{\n\t\t\t\t\tref: 'popover',\n\t\t\t\t\tdelay: 0,\n\t\t\t\t\tshown: this.opened,\n\t\t\t\t\tplacement: this.placement,\n\t\t\t\t\tboundary: this.boundariesElement,\n\t\t\t\t\tautoBoundaryMaxSize: true,\n\t\t\t\t\tcontainer: this.container,\n\t\t\t\t\t...this.manualOpen && {\n\t\t\t\t\t\ttriggers: [],\n\t\t\t\t\t},\n\t\t\t\t\tnoCloseOnClickOutside: this.manualOpen,\n\t\t\t\t\tpopoverBaseClass: 'action-item__popper',\n\t\t\t\t\tpopupRole: this.config.popupRole,\n\t\t\t\t\tsetReturnFocus: this.config.withFocusTrap ? this.$refs.triggerButton?.$el : undefined,\n\t\t\t\t\tnoFocusTrap: !this.config.withFocusTrap,\n\t\t\t\t\t'onUpdate:shown': this.toggleMenu,\n\t\t\t\t\tonAfterShow: this.onOpened,\n\t\t\t\t\tonAfterClose: this.onClosed,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttrigger: () => h(NcButton, {\n\t\t\t\t\t\tid: triggerRandomId,\n\t\t\t\t\t\tclass: 'action-item__menutoggle',\n\t\t\t\t\t\tdisabled: this.disabled,\n\t\t\t\t\t\tsize: this.size,\n\t\t\t\t\t\tvariant: this.triggerButtonVariant,\n\t\t\t\t\t\tref: 'triggerButton',\n\t\t\t\t\t\t'aria-label': this.menuName ? null : this.ariaLabel,\n\t\t\t\t\t\t// 'aria-controls' should only present together with a valid aria-haspopup\n\t\t\t\t\t\t'aria-controls': this.opened && this.config.popupRole ? this.randomId : null,\n\t\t\t\t\t\tonFocus: this.onFocus,\n\t\t\t\t\t\tonBlur: this.onBlur,\n\t\t\t\t\t\tonClick: this.onClick,\n\t\t\t\t\t\tonKeydown: this.onTriggerKeydown,\n\t\t\t\t\t}, {\n\t\t\t\t\t\ticon: () => triggerIcon,\n\t\t\t\t\t\tdefault: () => this.menuName,\n\t\t\t\t\t}),\n\t\t\t\t\tdefault: () => h('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\ttabindex: '-1',\n\t\t\t\t\t\tonKeydown: this.onKeydown,\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\tid: this.randomId,\n\t\t\t\t\t\t\ttabindex: '-1',\n\t\t\t\t\t\t\tref: 'menuList',\n\t\t\t\t\t\t\trole: this.config.popupRole,\n\t\t\t\t\t\t\t// For most roles a label is required (dialog, menu), but also in general nothing speaks against labelling a list.\n\t\t\t\t\t\t\t// It is even recommended to do so.\n\t\t\t\t\t\t\t'aria-labelledby': triggerRandomId,\n\t\t\t\t\t\t\t'aria-modal': this.actionsMenuSemanticType === 'dialog' ? 'true' : undefined,\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(\n\t\t\t\t'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.triggerButtonVariant}`,\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(\n\t\t\t\t\t\t\t\t'div',\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tclass: [\n\t\t\t\t\t\t\t\t\t\t'action-item',\n\t\t\t\t\t\t\t\t\t\t{\n\t\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\t},\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\t[renderActionsPopover(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\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(\n\t\t\t'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.triggerButtonVariant}`,\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\tgap: calc($icon-margin / 2);\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-nc-popover-9.v-popper__popper.action-item__popper .v-popper__wrapper {\n\tborder-radius: var(--border-radius-element);\n\n\t.v-popper__inner {\n\t\tborder-radius: var(--border-radius-element);\n\t\tpadding: 4px;\n\t\tmax-height: calc(100vh - var(--header-height));\n\t\toverflow: auto;\n\t}\n}\n</style>\n"],"names":["_sfc_main","_createElementBlock","_mergeProps","_createElementVNode","_openBlock","actions"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NcAppNavigation-Bb9-C2eO.mjs","sources":["../../src/components/NcAppNavigation/NcAppNavigationToggle.vue","../../src/components/NcAppNavigation/NcAppNavigation.vue"],"sourcesContent":["<!--\n - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n -->\n\n<script setup lang=\"ts\">\nimport { mdiMenu, mdiMenuOpen } from '@mdi/js'\nimport { computed } from 'vue'\nimport NcIconSvgWrapper from '../NcIconSvgWrapper/NcIconSvgWrapper.vue'\nimport { t } from '../../l10n.ts'\nimport NcButton from '../NcButton/index.ts'\n\n/**\n * Tracks whether the toggle has been clicked or not.\n * If it has been clicked, switches between the different MenuIcons\n * and emits a boolean indicating its opened status\n */\nconst open = defineModel<boolean>('open', { required: true })\n\nconst title = computed(() => open.value ? t('Close navigation') : t('Open navigation'))\n</script>\n\n<template>\n\t<div class=\"app-navigation-toggle-wrapper\">\n\t\t<NcButton\n\t\t\tclass=\"app-navigation-toggle\"\n\t\t\taria-controls=\"app-navigation-vue\"\n\t\t\t:aria-expanded=\"open ? 'true' : 'false'\"\n\t\t\t:aria-label=\"title\"\n\t\t\t:title\n\t\t\tvariant=\"tertiary\"\n\t\t\t@click=\"open = !open\">\n\t\t\t<template #icon>\n\t\t\t\t<NcIconSvgWrapper :path=\"open ? mdiMenuOpen : mdiMenu\" />\n\t\t\t</template>\n\t\t</NcButton>\n\t</div>\n</template>\n\n<style scoped lang=\"scss\">\n.app-navigation-toggle-wrapper {\n\tposition: absolute;\n\ttop: var(--app-navigation-padding);\n\tinset-inline-end: calc(0px - var(--app-navigation-padding));\n\tmargin-inline-end: calc(-1 * var(--default-clickable-area));\n}\n\nbutton.app-navigation-toggle {\n\tbackground-color: var(--color-main-background);\n}\n</style>\n","<!--\n - SPDX-FileCopyrightText: 2019 Nextcloud GmbH and Nextcloud contributors\n - SPDX-License-Identifier: AGPL-3.0-or-later\n-->\n\n<docs>\n```vue\n<template>\n\t<div class=\"styleguide-nc-content\">\n\t\t<NcAppNavigation>\n\t\t\t<template #search>\n\t\t\t\t<div class=\"navigation__header\">\n\t\t\t\t\t<NcAppNavigationSearch v-model=\"searchValue\" label=\"Search …\" />\n\t\t\t\t\t<NcActions>\n\t\t\t\t\t\t<NcActionButton close-after-click @click=\"showModal = true\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<IconCogOutline />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\tApp settings (close after click)\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t\t<NcActionButton @click=\"showModal = true\">\n\t\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t\t<IconCogOutline />\n\t\t\t\t\t\t\t</template>\n\t\t\t\t\t\t\tApp settings (handle only click)\n\t\t\t\t\t\t</NcActionButton>\n\t\t\t\t\t</NcActions>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t\t<template #list>\n\t\t\t\t<NcAppNavigationItem v-for=\"item in items\" :key=\"item\" :name=\"item\">\n\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t<IconCheck :size=\"20\" />\n\t\t\t\t\t</template>\n\t\t\t\t</NcAppNavigationItem>\n\t\t\t</template>\n\t\t\t<template #footer>\n\t\t\t\t<div class=\"navigation__footer\">\n\t\t\t\t\t<NcButton wide @click=\"showModal = true\">\n\t\t\t\t\t\t<template #icon>\n\t\t\t\t\t\t\t<IconCogOutline />\n\t\t\t\t\t\t</template>\n\t\t\t\t\t\tApp settings\n\t\t\t\t\t</NcButton>\n\t\t\t\t\t<NcModal v-if=\"showModal\" name=\"Modal for focus-trap check\" @close=\"showModal = false\">\n\t\t\t\t\t\t<div class=\"modal-content\">\n\t\t\t\t\t\t\t<h4>Focus-trap should be locked inside the modal</h4>\n\t\t\t\t\t\t\t<NcTextField v-model=\"modalValue\" label=\"Focus me\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</NcModal>\n\t\t\t\t</div>\n\t\t\t</template>\n\t\t</NcAppNavigation>\n\t</div>\n</template>\n\n<script>\n\timport IconCheck from 'vue-material-design-icons/Check'\n\timport IconCogOutline from 'vue-material-design-icons/CogOutline'\n\n\texport default {\n\t\tcomponents: {\n\t\t\tIconCheck,\n\t\t\tIconCogOutline,\n\t\t},\n\t\tprovide() {\n\t\t\treturn {\n\t\t\t\t'NcContent:setHasAppNavigation': () => {},\n\t\t\t}\n\t\t},\n\t\tdata() {\n\t\t\treturn {\n\t\t\t\titems: Array.from({ length: 5 }, (v, i) => `Item ${i+1}`),\n\t\t\t\tsearchValue: '',\n\t\t\t\tmodalValue: '',\n\t\t\t\tshowModal: false,\n\t\t\t}\n\t\t},\n\t}\n</script>\n\n<style scoped>\n\t/* Mock NcContent */\n\t.styleguide-nc-content {\n\t\tposition: relative;\n\t\theight: 300px;\n\t\tbackground-color: var(--color-background-plain);\n\t\toverflow: hidden;\n\t}\n\n\t.navigation__header,\n\t.navigation__footer {\n\t\tdisplay: flex;\n\t\talign-items: center;\n\t\tgap: 4px;\n\t\tpadding: 4px;\n\t}\n\n\t.modal-content {\n\t\theight: 120px;\n\t\tpadding: 10px;\n\t}\n</style>\n```\n\nThe navigation bar can be open and closed from anywhere in the app using the\nnextcloud event bus.\n\n### Install the event bus package\n\n```bash\nnpm i -S @nextcloud/event-bus\n```\n\n### Usage\n\n#### Open the navigation\n\n```js static\nimport { emit } from '@nextcloud/event-bus'\nemit('toggle-navigation', {\n\topen: true,\n})\n```\n\n#### Close the navigation\n\n```js static\nimport { emit } from '@nextcloud/event-bus'\nemit('toggle-navigation', {\n\topen: false,\n})\n```\n\n</docs>\n\n<script setup lang=\"ts\">\nimport type { FocusTrap } from 'focus-trap'\nimport type { Slot } from 'vue'\n\nimport { emit, subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport { createFocusTrap } from 'focus-trap'\nimport { inject, onMounted, onUnmounted, ref, useTemplateRef, warn, watch, watchEffect } from 'vue'\nimport NcAppNavigationList from '../NcAppNavigationList/NcAppNavigationList.vue'\nimport NcAppNavigationToggle from './NcAppNavigationToggle.vue'\nimport { useIsMobile } from '../../composables/useIsMobile/index.ts'\nimport { getTrapStack } from '../../utils/focusTrap.ts'\nimport { isLegacy34 } from '../../utils/legacy.ts'\nimport { HAS_APP_NAVIGATION_KEY } from '../NcContent/constants.ts'\n\nconst props = defineProps<{\n\t/**\n\t * The aria label to describe the navigation\n\t */\n\tariaLabel?: string\n\n\t/**\n\t * aria-labelledby attribute to describe the navigation\n\t */\n\tariaLabelledby?: string\n}>()\n\ndefineSlots<{\n\t/**\n\t * The main content of the navigation.\n\t * If no list is passed to the `#list` slot, stretched vertically.\n\t */\n\tdefault?: Slot\n\t/**\n\t * Footer for e.g. `NcAppNavigationSettings`\n\t */\n\tfooter?: Slot\n\t/**\n\t * List for Navigation list items.\n\t * Stretched between the main content and the footer\n\t */\n\tlist?: Slot\n\t/**\n\t * For in-app search you can pass a `NcAppNavigationSearch` component as the slot content.\n\t */\n\tsearch?: Slot\n}>()\n\nlet focusTrap: FocusTrap\nconst setHasAppNavigation = inject(\n\tHAS_APP_NAVIGATION_KEY,\n\t() => warn('NcAppNavigation is not mounted inside NcContent, this is probably an error.'),\n\tfalse,\n)\n\nconst appNavigationContainerElement = useTemplateRef('appNavigationContainer')\nconst isMobile = useIsMobile()\nconst open = ref(!isMobile.value)\n\nwatchEffect(() => {\n\tif (!props.ariaLabel && !props.ariaLabelledby) {\n\t\twarn('NcAppNavigation requires either `ariaLabel` or `ariaLabelledby` to be set for accessibility.')\n\t}\n})\n\nwatch(isMobile, () => {\n\topen.value = !isMobile.value\n})\n\nwatch(open, () => {\n\ttoggleFocusTrap()\n})\n\nonMounted(() => {\n\tsetHasAppNavigation(true)\n\tsubscribe('toggle-navigation', toggleNavigationByEventBus)\n\t// Emit an event with the initial state of the navigation\n\temit('navigation-toggled', {\n\t\topen: open.value,\n\t})\n\n\tfocusTrap = createFocusTrap(appNavigationContainerElement.value!, {\n\t\tallowOutsideClick: true,\n\t\tclickOutsideDeactivates: () => {\n\t\t\tif (isMobile.value) {\n\t\t\t\tfocusTrap.deactivate({ returnFocus: false })\n\t\t\t\ttoggleNavigation(false)\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tfallbackFocus: appNavigationContainerElement.value!,\n\t\ttrapStack: getTrapStack(),\n\t\tescapeDeactivates: false,\n\t})\n\ttoggleFocusTrap()\n})\n\nonUnmounted(() => {\n\tsetHasAppNavigation(false)\n\tunsubscribe('toggle-navigation', toggleNavigationByEventBus)\n\tfocusTrap.deactivate()\n})\n\n/**\n * Toggle the navigation\n *\n * @param state set the state instead of inverting the current one\n */\nfunction toggleNavigation(state?: boolean): void {\n\t// Early return if already in that state\n\tif (open.value === state) {\n\t\temit('navigation-toggled', {\n\t\t\topen: open.value,\n\t\t})\n\t\treturn\n\t}\n\n\topen.value = state === undefined ? !open.value : state\n\tconst bodyStyles = getComputedStyle(document.body)\n\tconst animationLength = parseInt(bodyStyles.getPropertyValue('--animation-quick')) || 100\n\n\tsetTimeout(() => {\n\t\temit('navigation-toggled', {\n\t\t\topen: open.value,\n\t\t})\n\t// We wait for 1.5 times the animation length to give the animation time to really finish.\n\t}, 1.5 * animationLength)\n}\n\n/**\n * Handler for the event-bus navigation event.\n *\n * @param context - The event bus context\n * @param context.open - The new navigation open state\n */\nfunction toggleNavigationByEventBus({ open }: { open: boolean }): void {\n\treturn toggleNavigation(open)\n}\n\n/**\n * Activate focus trap if it is currently needed, otherwise deactivate\n */\nfunction toggleFocusTrap(): void {\n\tif (isMobile.value && open.value) {\n\t\tfocusTrap.activate()\n\t} else {\n\t\tfocusTrap.deactivate()\n\t}\n}\n\n/**\n * Handle hotkey for closing the navigation.\n */\nfunction handleEsc(): void {\n\tif (isMobile.value) {\n\t\ttoggleNavigation(false)\n\t}\n}\n</script>\n\n<template>\n\t<div\n\t\tref=\"appNavigationContainer\"\n\t\tclass=\"app-navigation\"\n\t\t:class=\"{\n\t\t\t'app-navigation--closed': !open,\n\t\t\t'app-navigation--legacy': isLegacy34,\n\t\t}\">\n\t\t<nav\n\t\t\tid=\"app-navigation-vue\"\n\t\t\t:aria-hidden=\"open ? 'false' : 'true'\"\n\t\t\t:aria-label=\"ariaLabel || undefined\"\n\t\t\t:aria-labelledby=\"ariaLabelledby || undefined\"\n\t\t\tclass=\"app-navigation__content\"\n\t\t\t:inert=\"!open || undefined\"\n\t\t\t@keydown.esc=\"handleEsc\">\n\t\t\t<div class=\"app-navigation__search\">\n\t\t\t\t<slot name=\"search\" />\n\t\t\t</div>\n\n\t\t\t<div class=\"app-navigation__body\" :class=\"{ 'app-navigation__body--no-list': !$slots.list }\">\n\t\t\t\t<slot />\n\t\t\t</div>\n\n\t\t\t<NcAppNavigationList v-if=\"$slots.list\" class=\"app-navigation__list\">\n\t\t\t\t<slot name=\"list\" />\n\t\t\t</NcAppNavigationList>\n\n\t\t\t<slot name=\"footer\" />\n\t\t</nav>\n\t\t<NcAppNavigationToggle :open @update:open=\"toggleNavigation\" />\n\t</div>\n</template>\n\n<style lang=\"scss\">\n.app-navigation,\n.app-content {\n\t/** Distance of the app navigation toggle and the first navigation item to the top edge of the app content container */\n\t--app-navigation-padding: #{$app-navigation-padding};\n}\n</style>\n\n<style lang=\"scss\" scoped>\n.app-navigation {\n\t// Set scoped variable override\n\t// Using --color-text-maxcontrast as a fallback evaluates to an invalid value as it references itself in this scope instead of the variable defined higher up\n\t--color-text-maxcontrast: var(--color-text-maxcontrast-background-blur, var(--color-text-maxcontrast-default));\n\ttransition: transform var(--animation-quick), margin var(--animation-quick);\n\twidth: $navigation-width;\n\t// Left toggle button padding + toggle button + right padding from NcAppContent\n\t--app-navigation-max-width: calc(100vw - (var(--app-navigation-padding) + var(--default-clickable-area) + var(--default-grid-baseline)));\n\tmax-width: var(--app-navigation-max-width);\n\tposition: relative;\n\ttop: 0;\n\tinset-inline-start: 0;\n\tpadding: 0px;\n\t// Above NcAppContent\n\tz-index: 1800;\n\theight: 100%;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\t// New design (NC34+): transparent so the frosted chrome on NcContent shows through.\n\tbackground-color: transparent;\n\n\t&--legacy {\n\t\tbackground-color: var(--color-main-background-blur, var(--color-main-background));\n\t\tbackdrop-filter: var(--filter-background-blur, none);\n\t}\n\n\t&--closed {\n\t\tmargin-inline-start: calc(-1 * min($navigation-width, var(--app-navigation-max-width)));\n\t}\n\n\t&__search {\n\t\twidth: 100%;\n\t}\n\n\t&__body {\n\t\toverflow-y: scroll;\n\t}\n\n\t// For legacy purposes support passing a bare list to the content in #default slot and including #footer slot\n\t// Same styles as NcAppNavigationList\n\t&__content > ul {\n\t\tposition: relative;\n\t\twidth: 100%;\n\t\toverflow-x: hidden;\n\t\toverflow-y: auto;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t\tgap: var(--default-grid-baseline, 4px);\n\t\tpadding: var(--app-navigation-padding);\n\t}\n\n\t// Always stretch the navigation list\n\t& &__list {\n\t\theight: 100%;\n\t}\n\n\t// Stretch the main content if there is no stretched list\n\t&__body--no-list {\n\t\tflex: 1 1 auto;\n\t\toverflow: auto;\n\t\theight: 100%;\n\t}\n\n\t&__content {\n\t\theight: 100%;\n\t\tdisplay: flex;\n\t\tflex-direction: column;\n\t}\n}\n\n// Add extra border for high contrast mode\n[data-themes*=\"highcontrast\"] {\n\t.app-navigation {\n\t\tborder-inline-end: 1px solid var(--color-border);\n\t}\n}\n\n// When on mobile, we make the navigation slide over the NcAppContent\n@media only screen and (width < $breakpoint-mobile) {\n\t.app-navigation {\n\t\tposition: absolute;\n\t\tborder-inline-end: 1px solid var(--color-border);\n\t\tbackground-color: var(--color-main-background-blur, var(--color-main-background));\n\t\tbackdrop-filter: var(--filter-background-blur, none);\n\t}\n}\n\n// Put the toggle behind NcAppSidebar on small screens\n@media only screen and (max-width: $breakpoint-small-mobile) {\n\t.app-navigation {\n\t\tz-index: 1400;\n\t}\n}\n\n</style>\n"],"names":["_useModel","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","open","_createElementVNode","_renderSlot","_normalizeClass","$slots","_createBlock"],"mappings":"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"}