@ariakit/react-components 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +51 -0
- package/dist/button/button.d.ts +1 -1
- package/dist/{button-Cp853csH.d.ts → button-CVWcOgxs.d.ts} +3 -3
- package/dist/{button-Cp853csH.d.ts.map → button-CVWcOgxs.d.ts.map} +1 -1
- package/dist/checkbox/checkbox-check.d.ts +1 -1
- package/dist/checkbox/checkbox-check.d.ts.map +1 -1
- package/dist/checkbox/checkbox.d.ts +2 -2
- package/dist/checkbox/checkbox.d.ts.map +1 -1
- package/dist/collection/collection-item-offscreen.d.ts +1 -1
- package/dist/collection/collection-item-offscreen.js +1 -1
- package/dist/collection/collection-item-offscreen.js.map +1 -1
- package/dist/collection/collection-item.d.ts +1 -1
- package/dist/collection/collection-renderer.d.ts +1 -1
- package/dist/collection/collection-renderer.js +1 -1
- package/dist/collection/collection-renderer.js.map +1 -1
- package/dist/collection/collection.d.ts +1 -1
- package/dist/collection/collection.d.ts.map +1 -1
- package/dist/{collection-item-offscreen-DyXa-sqj.d.ts → collection-item-offscreen-B5E5vNFi.d.ts} +2 -2
- package/dist/{collection-item-offscreen-DyXa-sqj.d.ts.map → collection-item-offscreen-B5E5vNFi.d.ts.map} +1 -1
- package/dist/{collection-item-C-g2BwVF.d.ts → collection-item-pvEWNoNs.d.ts} +2 -2
- package/dist/{collection-item-C-g2BwVF.d.ts.map → collection-item-pvEWNoNs.d.ts.map} +1 -1
- package/dist/{collection-renderer-DsPD9ksD.d.ts → collection-renderer-BhzF21Du.d.ts} +29 -15
- package/dist/collection-renderer-BhzF21Du.d.ts.map +1 -0
- package/dist/combobox/combobox-cancel.d.ts +2 -2
- package/dist/combobox/combobox-cancel.d.ts.map +1 -1
- package/dist/combobox/combobox-cancel.js +1 -1
- package/dist/combobox/combobox-cancel.js.map +1 -1
- package/dist/combobox/combobox-disclosure.d.ts +2 -2
- package/dist/combobox/combobox-disclosure.d.ts.map +1 -1
- package/dist/combobox/combobox-disclosure.js +1 -1
- package/dist/combobox/combobox-disclosure.js.map +1 -1
- package/dist/combobox/combobox-group-label.d.ts +1 -1
- package/dist/combobox/combobox-group-label.d.ts.map +1 -1
- package/dist/combobox/combobox-group.d.ts +1 -1
- package/dist/combobox/combobox-group.d.ts.map +1 -1
- package/dist/combobox/combobox-group.js +1 -1
- package/dist/combobox/combobox-group.js.map +1 -1
- package/dist/combobox/combobox-item-check.d.ts +1 -1
- package/dist/combobox/combobox-item-check.d.ts.map +1 -1
- package/dist/combobox/combobox-item-value.d.ts +1 -1
- package/dist/combobox/combobox-item-value.d.ts.map +1 -1
- package/dist/combobox/combobox-item.d.ts +3 -3
- package/dist/combobox/combobox-item.d.ts.map +1 -1
- package/dist/combobox/combobox-item.js +1 -1
- package/dist/combobox/combobox-item.js.map +1 -1
- package/dist/combobox/combobox-label.d.ts +1 -1
- package/dist/combobox/combobox-label.d.ts.map +1 -1
- package/dist/combobox/combobox-label.js +1 -1
- package/dist/combobox/combobox-label.js.map +1 -1
- package/dist/combobox/combobox-list.d.ts +1 -1
- package/dist/combobox/combobox-list.d.ts.map +1 -1
- package/dist/combobox/combobox-list.js +1 -1
- package/dist/combobox/combobox-list.js.map +1 -1
- package/dist/combobox/combobox-popover.d.ts +1 -1
- package/dist/combobox/combobox-popover.js +1 -1
- package/dist/combobox/combobox-popover.js.map +1 -1
- package/dist/combobox/combobox-row.d.ts +1 -1
- package/dist/combobox/combobox-row.d.ts.map +1 -1
- package/dist/combobox/combobox-row.js +1 -1
- package/dist/combobox/combobox-row.js.map +1 -1
- package/dist/combobox/combobox-separator.d.ts +1 -1
- package/dist/combobox/combobox-separator.d.ts.map +1 -1
- package/dist/combobox/combobox-separator.js +1 -1
- package/dist/combobox/combobox-separator.js.map +1 -1
- package/dist/combobox/combobox-value.js +1 -1
- package/dist/combobox/combobox-value.js.map +1 -1
- package/dist/combobox/combobox.d.ts +3 -3
- package/dist/combobox/combobox.d.ts.map +1 -1
- package/dist/combobox/combobox.js +16 -2
- package/dist/combobox/combobox.js.map +1 -1
- package/dist/command/command.d.ts +1 -1
- package/dist/{command-DckndCUK.d.ts → command-B9C8p3_S.d.ts} +3 -3
- package/dist/{command-DckndCUK.d.ts.map → command-B9C8p3_S.d.ts.map} +1 -1
- package/dist/composite/composite-container.d.ts +1 -1
- package/dist/composite/composite-container.d.ts.map +1 -1
- package/dist/composite/composite-container.js +2 -2
- package/dist/composite/composite-container.js.map +1 -1
- package/dist/composite/composite-group-label.d.ts +2 -2
- package/dist/composite/composite-group-label.d.ts.map +1 -1
- package/dist/composite/composite-group.d.ts +2 -2
- package/dist/composite/composite-group.d.ts.map +1 -1
- package/dist/composite/composite-hover.d.ts +1 -1
- package/dist/composite/composite-hover.js +9 -13
- package/dist/composite/composite-hover.js.map +1 -1
- package/dist/composite/composite-input.d.ts +1 -1
- package/dist/composite/composite-input.d.ts.map +1 -1
- package/dist/composite/composite-input.js +1 -1
- package/dist/composite/composite-input.js.map +1 -1
- package/dist/composite/composite-item-offscreen.d.ts +2 -2
- package/dist/composite/composite-item-offscreen.js +2 -2
- package/dist/composite/composite-item-offscreen.js.map +1 -1
- package/dist/composite/composite-item.d.ts +1 -1
- package/dist/composite/composite-item.js +2 -2
- package/dist/composite/composite-item.js.map +1 -1
- package/dist/composite/composite-overflow-disclosure.d.ts +2 -2
- package/dist/composite/composite-overflow-disclosure.d.ts.map +1 -1
- package/dist/composite/composite-overflow.d.ts +2 -2
- package/dist/composite/composite-overflow.d.ts.map +1 -1
- package/dist/composite/composite-renderer.d.ts +28 -14
- package/dist/composite/composite-renderer.d.ts.map +1 -1
- package/dist/composite/composite-renderer.js +2 -2
- package/dist/composite/composite-renderer.js.map +1 -1
- package/dist/composite/composite-row.d.ts +1 -1
- package/dist/composite/composite-row.d.ts.map +1 -1
- package/dist/composite/composite-row.js +3 -3
- package/dist/composite/composite-row.js.map +1 -1
- package/dist/composite/composite-separator.d.ts +2 -2
- package/dist/composite/composite-separator.d.ts.map +1 -1
- package/dist/composite/composite-separator.js +3 -3
- package/dist/composite/composite-separator.js.map +1 -1
- package/dist/composite/composite-typeahead.d.ts +1 -1
- package/dist/composite/composite-typeahead.js +3 -3
- package/dist/composite/composite-typeahead.js.map +1 -1
- package/dist/composite/composite.d.ts +1 -1
- package/dist/composite/composite.js +3 -3
- package/dist/composite/composite.js.map +1 -1
- package/dist/{composite-DLvyFHMq.d.ts → composite-KBhCGLEy.d.ts} +3 -3
- package/dist/{composite-DLvyFHMq.d.ts.map → composite-KBhCGLEy.d.ts.map} +1 -1
- package/dist/{composite-hover-C7ul163w.d.ts → composite-hover-BpXq3T8J.d.ts} +2 -2
- package/dist/{composite-hover-C7ul163w.d.ts.map → composite-hover-BpXq3T8J.d.ts.map} +1 -1
- package/dist/{composite-item-B4WTelVz.d.ts → composite-item-d4UXaZ84.d.ts} +4 -4
- package/dist/{composite-item-B4WTelVz.d.ts.map → composite-item-d4UXaZ84.d.ts.map} +1 -1
- package/dist/{composite-typeahead-DDhpyKqm.d.ts → composite-typeahead-0euW43GU.d.ts} +2 -2
- package/dist/{composite-typeahead-DDhpyKqm.d.ts.map → composite-typeahead-0euW43GU.d.ts.map} +1 -1
- package/dist/dialog/dialog-backdrop.d.ts +1 -1
- package/dist/dialog/dialog-description.d.ts +1 -1
- package/dist/dialog/dialog-disclosure.d.ts +1 -1
- package/dist/dialog/dialog-disclosure.js +1 -1
- package/dist/dialog/dialog-disclosure.js.map +1 -1
- package/dist/dialog/dialog-dismiss.d.ts +1 -1
- package/dist/dialog/dialog-heading.d.ts +1 -1
- package/dist/dialog/dialog.d.ts +1 -1
- package/dist/dialog/dialog.js +18 -6
- package/dist/dialog/dialog.js.map +1 -1
- package/dist/dialog/utils/disable-accessibility-tree-outside.d.ts +1 -3
- package/dist/dialog/utils/disable-accessibility-tree-outside.d.ts.map +1 -1
- package/dist/dialog/utils/disable-accessibility-tree-outside.js +1 -15
- package/dist/dialog/utils/disable-accessibility-tree-outside.js.map +1 -1
- package/dist/dialog/utils/use-hide-on-interact-outside.d.ts +1 -1
- package/dist/dialog/utils/use-hide-on-interact-outside.js +2 -2
- package/dist/dialog/utils/use-hide-on-interact-outside.js.map +1 -1
- package/dist/dialog/utils/use-prevent-body-scroll.js +2 -1
- package/dist/dialog/utils/use-prevent-body-scroll.js.map +1 -1
- package/dist/dialog/utils/use-previous-mouse-down-ref.d.ts +1 -1
- package/dist/dialog/utils/use-previous-mouse-down-ref.d.ts.map +1 -1
- package/dist/{dialog-C__C-zX2.d.ts → dialog-D23r2ZWj.d.ts} +4 -4
- package/dist/{dialog-C__C-zX2.d.ts.map → dialog-D23r2ZWj.d.ts.map} +1 -1
- package/dist/{dialog-description-BCZJ1Kyd.d.ts → dialog-description-CJGxnEvk.d.ts} +2 -2
- package/dist/{dialog-description-BCZJ1Kyd.d.ts.map → dialog-description-CJGxnEvk.d.ts.map} +1 -1
- package/dist/{dialog-disclosure-DLD10zlb.d.ts → dialog-disclosure-DSESk5pv.d.ts} +3 -3
- package/dist/{dialog-disclosure-DLD10zlb.d.ts.map → dialog-disclosure-DSESk5pv.d.ts.map} +1 -1
- package/dist/{dialog-dismiss-CnwEbzc6.d.ts → dialog-dismiss-DW3XQYvp.d.ts} +3 -3
- package/dist/{dialog-dismiss-CnwEbzc6.d.ts.map → dialog-dismiss-DW3XQYvp.d.ts.map} +1 -1
- package/dist/{dialog-heading-DQvnOfZH.d.ts → dialog-heading-DGA5d8VH.d.ts} +3 -3
- package/dist/{dialog-heading-DQvnOfZH.d.ts.map → dialog-heading-DGA5d8VH.d.ts.map} +1 -1
- package/dist/disclosure/disclosure-content.js +1 -1
- package/dist/disclosure/disclosure-content.js.map +1 -1
- package/dist/disclosure/disclosure.d.ts +1 -1
- package/dist/disclosure/disclosure.js +1 -1
- package/dist/disclosure/disclosure.js.map +1 -1
- package/dist/{disclosure-CQ37hPVP.d.ts → disclosure-C4F4sCVZ.d.ts} +3 -3
- package/dist/{disclosure-CQ37hPVP.d.ts.map → disclosure-C4F4sCVZ.d.ts.map} +1 -1
- package/dist/focus-trap/focus-trap-region.d.ts +1 -1
- package/dist/focus-trap/focus-trap-region.d.ts.map +1 -1
- package/dist/focus-trap/focus-trap.d.ts +1 -1
- package/dist/focus-trap/focus-trap.d.ts.map +1 -1
- package/dist/focusable/focusable-container.d.ts +1 -1
- package/dist/focusable/focusable-container.d.ts.map +1 -1
- package/dist/focusable/focusable.d.ts +1 -1
- package/dist/focusable/focusable.js +49 -8
- package/dist/focusable/focusable.js.map +1 -1
- package/dist/{focusable-B00tOxtB.d.ts → focusable-dBZH13-T.d.ts} +2 -2
- package/dist/{focusable-B00tOxtB.d.ts.map → focusable-dBZH13-T.d.ts.map} +1 -1
- package/dist/form/form-checkbox.d.ts +1 -1
- package/dist/form/form-checkbox.d.ts.map +1 -1
- package/dist/form/form-checkbox.js +1 -1
- package/dist/form/form-checkbox.js.map +1 -1
- package/dist/form/form-control.d.ts +2 -2
- package/dist/form/form-control.d.ts.map +1 -1
- package/dist/form/form-control.js +1 -1
- package/dist/form/form-control.js.map +1 -1
- package/dist/form/form-description.d.ts +2 -2
- package/dist/form/form-description.d.ts.map +1 -1
- package/dist/form/form-description.js +1 -1
- package/dist/form/form-description.js.map +1 -1
- package/dist/form/form-error.d.ts +2 -2
- package/dist/form/form-error.d.ts.map +1 -1
- package/dist/form/form-error.js +1 -1
- package/dist/form/form-error.js.map +1 -1
- package/dist/form/form-field.d.ts +1 -1
- package/dist/form/form-field.d.ts.map +1 -1
- package/dist/form/form-group-label.d.ts +2 -2
- package/dist/form/form-group-label.d.ts.map +1 -1
- package/dist/form/form-group.d.ts +2 -2
- package/dist/form/form-group.d.ts.map +1 -1
- package/dist/form/form-input.d.ts +2 -2
- package/dist/form/form-input.d.ts.map +1 -1
- package/dist/form/form-input.js +1 -1
- package/dist/form/form-input.js.map +1 -1
- package/dist/form/form-label.d.ts +2 -2
- package/dist/form/form-label.d.ts.map +1 -1
- package/dist/form/form-label.js +1 -1
- package/dist/form/form-label.js.map +1 -1
- package/dist/form/form-push.d.ts +3 -3
- package/dist/form/form-push.d.ts.map +1 -1
- package/dist/form/form-push.js +1 -1
- package/dist/form/form-push.js.map +1 -1
- package/dist/form/form-radio-group.d.ts +1 -1
- package/dist/form/form-radio-group.d.ts.map +1 -1
- package/dist/form/form-radio.d.ts +1 -1
- package/dist/form/form-radio.d.ts.map +1 -1
- package/dist/form/form-radio.js +1 -1
- package/dist/form/form-radio.js.map +1 -1
- package/dist/form/form-remove.d.ts +16 -12
- package/dist/form/form-remove.d.ts.map +1 -1
- package/dist/form/form-remove.js +15 -11
- package/dist/form/form-remove.js.map +1 -1
- package/dist/form/form-reset.d.ts +2 -2
- package/dist/form/form-reset.d.ts.map +1 -1
- package/dist/form/form-reset.js +1 -1
- package/dist/form/form-reset.js.map +1 -1
- package/dist/form/form-submit.d.ts +2 -2
- package/dist/form/form-submit.d.ts.map +1 -1
- package/dist/form/form-submit.js +1 -1
- package/dist/form/form-submit.js.map +1 -1
- package/dist/form/form.d.ts +1 -1
- package/dist/form/form.d.ts.map +1 -1
- package/dist/form/form.js +1 -1
- package/dist/form/form.js.map +1 -1
- package/dist/group/group-label.d.ts +1 -1
- package/dist/group/group.d.ts +1 -1
- package/dist/{group-label-C16IDs1b.d.ts → group-label-BKYqD4Sj.d.ts} +2 -2
- package/dist/{group-label-C16IDs1b.d.ts.map → group-label-BKYqD4Sj.d.ts.map} +1 -1
- package/dist/{group-CamegDJA.d.ts → group-nGD9e6Dj.d.ts} +2 -2
- package/dist/{group-CamegDJA.d.ts.map → group-nGD9e6Dj.d.ts.map} +1 -1
- package/dist/heading/heading.d.ts +1 -1
- package/dist/heading/heading.js +2 -2
- package/dist/heading/heading.js.map +1 -1
- package/dist/{heading-zY9g_9K-.d.ts → heading-D_AmeqL5.d.ts} +2 -2
- package/dist/{heading-zY9g_9K-.d.ts.map → heading-D_AmeqL5.d.ts.map} +1 -1
- package/dist/hovercard/hovercard-anchor.d.ts +2 -2
- package/dist/hovercard/hovercard-anchor.d.ts.map +1 -1
- package/dist/hovercard/hovercard-anchor.js +1 -1
- package/dist/hovercard/hovercard-anchor.js.map +1 -1
- package/dist/hovercard/hovercard-arrow.d.ts +1 -1
- package/dist/hovercard/hovercard-arrow.d.ts.map +1 -1
- package/dist/hovercard/hovercard-description.d.ts +2 -2
- package/dist/hovercard/hovercard-description.d.ts.map +1 -1
- package/dist/hovercard/hovercard-disclosure.d.ts +2 -2
- package/dist/hovercard/hovercard-disclosure.d.ts.map +1 -1
- package/dist/hovercard/hovercard-disclosure.js +4 -4
- package/dist/hovercard/hovercard-disclosure.js.map +1 -1
- package/dist/hovercard/hovercard-dismiss.d.ts +2 -2
- package/dist/hovercard/hovercard-dismiss.d.ts.map +1 -1
- package/dist/hovercard/hovercard-heading.d.ts +2 -2
- package/dist/hovercard/hovercard-heading.d.ts.map +1 -1
- package/dist/hovercard/hovercard.d.ts +1 -1
- package/dist/hovercard/hovercard.js +2 -2
- package/dist/hovercard/hovercard.js.map +1 -1
- package/dist/menu/menu-arrow.d.ts +2 -2
- package/dist/menu/menu-arrow.d.ts.map +1 -1
- package/dist/menu/menu-bar-provider.js +1 -1
- package/dist/menu/menu-bar-provider.js.map +1 -1
- package/dist/menu/menu-bar-store.d.ts +3 -3
- package/dist/menu/menu-bar-store.js +3 -3
- package/dist/menu/menu-bar-store.js.map +1 -1
- package/dist/menu/menu-bar.d.ts +1 -1
- package/dist/menu/menu-bar.d.ts.map +1 -1
- package/dist/menu/menu-bar.js +1 -1
- package/dist/menu/menu-bar.js.map +1 -1
- package/dist/menu/menu-button-arrow.d.ts +2 -2
- package/dist/menu/menu-button-arrow.d.ts.map +1 -1
- package/dist/menu/menu-button.d.ts +3 -3
- package/dist/menu/menu-button.d.ts.map +1 -1
- package/dist/menu/menu-button.js +1 -1
- package/dist/menu/menu-button.js.map +1 -1
- package/dist/menu/menu-context.d.ts +10 -3
- package/dist/menu/menu-context.d.ts.map +1 -1
- package/dist/menu/menu-context.js +8 -1
- package/dist/menu/menu-context.js.map +1 -1
- package/dist/menu/menu-description.d.ts +2 -2
- package/dist/menu/menu-description.d.ts.map +1 -1
- package/dist/menu/menu-dismiss.d.ts +2 -2
- package/dist/menu/menu-dismiss.d.ts.map +1 -1
- package/dist/menu/menu-group-label.d.ts +2 -2
- package/dist/menu/menu-group-label.d.ts.map +1 -1
- package/dist/menu/menu-group.d.ts +2 -2
- package/dist/menu/menu-group.d.ts.map +1 -1
- package/dist/menu/menu-heading.d.ts +2 -2
- package/dist/menu/menu-heading.d.ts.map +1 -1
- package/dist/menu/menu-item-check.d.ts +2 -2
- package/dist/menu/menu-item-check.d.ts.map +1 -1
- package/dist/menu/menu-item-checkbox.d.ts +2 -2
- package/dist/menu/menu-item-checkbox.d.ts.map +1 -1
- package/dist/menu/menu-item-checkbox.js +1 -1
- package/dist/menu/menu-item-checkbox.js.map +1 -1
- package/dist/menu/menu-item-radio.d.ts +2 -2
- package/dist/menu/menu-item-radio.d.ts.map +1 -1
- package/dist/menu/menu-item-radio.js +1 -1
- package/dist/menu/menu-item-radio.js.map +1 -1
- package/dist/menu/menu-item.d.ts +5 -5
- package/dist/menu/menu-item.d.ts.map +1 -1
- package/dist/menu/menu-item.js +8 -4
- package/dist/menu/menu-item.js.map +1 -1
- package/dist/menu/menu-list.d.ts +4 -4
- package/dist/menu/menu-list.d.ts.map +1 -1
- package/dist/menu/menu-list.js +6 -2
- package/dist/menu/menu-list.js.map +1 -1
- package/dist/menu/menu-provider.d.ts +1 -1
- package/dist/menu/menu-separator.d.ts +2 -2
- package/dist/menu/menu-separator.d.ts.map +1 -1
- package/dist/menu/menu-store.d.ts +1 -1
- package/dist/menu/menu.js +1 -1
- package/dist/menu/menu.js.map +1 -1
- package/dist/{menu-store-0CKKmNek.d.ts → menu-store-BpTJdcL8.d.ts} +2 -2
- package/dist/{menu-store-0CKKmNek.d.ts.map → menu-store-BpTJdcL8.d.ts.map} +1 -1
- package/dist/menubar/menubar-context.d.ts +2 -3
- package/dist/menubar/menubar-context.d.ts.map +1 -1
- package/dist/menubar/menubar-context.js +1 -3
- package/dist/menubar/menubar-context.js.map +1 -1
- package/dist/menubar/menubar-provider.d.ts +1 -1
- package/dist/menubar/menubar-store.d.ts +1 -1
- package/dist/menubar/menubar-store.js +2 -2
- package/dist/menubar/menubar-store.js.map +1 -1
- package/dist/menubar/menubar.d.ts +3 -3
- package/dist/menubar/menubar.d.ts.map +1 -1
- package/dist/{menubar-store-3h0eNIbS.d.ts → menubar-store-C553OKBw.d.ts} +3 -3
- package/dist/{menubar-store-3h0eNIbS.d.ts.map → menubar-store-C553OKBw.d.ts.map} +1 -1
- package/dist/popover/popover-anchor.d.ts +1 -1
- package/dist/popover/popover-arrow.d.ts +1 -1
- package/dist/popover/popover-arrow.d.ts.map +1 -1
- package/dist/popover/popover-arrow.js +4 -4
- package/dist/popover/popover-arrow.js.map +1 -1
- package/dist/popover/popover-description.d.ts +1 -1
- package/dist/popover/popover-disclosure-arrow.d.ts +1 -1
- package/dist/popover/popover-disclosure-arrow.d.ts.map +1 -1
- package/dist/popover/popover-disclosure-arrow.js +1 -1
- package/dist/popover/popover-disclosure-arrow.js.map +1 -1
- package/dist/popover/popover-disclosure.d.ts +3 -3
- package/dist/popover/popover-disclosure.d.ts.map +1 -1
- package/dist/popover/popover-disclosure.js +1 -1
- package/dist/popover/popover-disclosure.js.map +1 -1
- package/dist/popover/popover-dismiss.d.ts +1 -1
- package/dist/popover/popover-heading.d.ts +1 -1
- package/dist/popover/popover.d.ts +1 -1
- package/dist/popover/popover.js +2 -2
- package/dist/popover/popover.js.map +1 -1
- package/dist/{popover-CCqiRKqg.d.ts → popover-B9PxE5iP.d.ts} +10 -2
- package/dist/popover-B9PxE5iP.d.ts.map +1 -0
- package/dist/{popover-anchor-PgfeXyzs.d.ts → popover-anchor-W18KUmuM.d.ts} +2 -2
- package/dist/{popover-anchor-PgfeXyzs.d.ts.map → popover-anchor-W18KUmuM.d.ts.map} +1 -1
- package/dist/{popover-description-DU753dah.d.ts → popover-description-DbW4mVBb.d.ts} +3 -3
- package/dist/{popover-description-DU753dah.d.ts.map → popover-description-DbW4mVBb.d.ts.map} +1 -1
- package/dist/{popover-dismiss-DPeI6Zse.d.ts → popover-dismiss-CQFvuLzJ.d.ts} +3 -3
- package/dist/{popover-dismiss-DPeI6Zse.d.ts.map → popover-dismiss-CQFvuLzJ.d.ts.map} +1 -1
- package/dist/{popover-heading-DGsr6D5W.d.ts → popover-heading-DC8rYnwo.d.ts} +3 -3
- package/dist/{popover-heading-DGsr6D5W.d.ts.map → popover-heading-DC8rYnwo.d.ts.map} +1 -1
- package/dist/portal/portal.d.ts +1 -1
- package/dist/{portal-CMBWiayp.d.ts → portal-CKFTfCWH.d.ts} +2 -2
- package/dist/{portal-CMBWiayp.d.ts.map → portal-CKFTfCWH.d.ts.map} +1 -1
- package/dist/radio/radio-group.d.ts +2 -2
- package/dist/radio/radio-group.d.ts.map +1 -1
- package/dist/radio/radio-group.js +1 -1
- package/dist/radio/radio-group.js.map +1 -1
- package/dist/radio/radio.d.ts +2 -2
- package/dist/radio/radio.d.ts.map +1 -1
- package/dist/select/select-arrow.d.ts +1 -1
- package/dist/select/select-arrow.d.ts.map +1 -1
- package/dist/select/select-dismiss.d.ts +2 -2
- package/dist/select/select-dismiss.d.ts.map +1 -1
- package/dist/select/select-group-label.d.ts +1 -1
- package/dist/select/select-group-label.d.ts.map +1 -1
- package/dist/select/select-group.d.ts +1 -1
- package/dist/select/select-group.d.ts.map +1 -1
- package/dist/select/select-heading.d.ts +2 -2
- package/dist/select/select-heading.d.ts.map +1 -1
- package/dist/select/select-item-check.d.ts +1 -1
- package/dist/select/select-item-check.d.ts.map +1 -1
- package/dist/select/select-item.d.ts +3 -3
- package/dist/select/select-item.d.ts.map +1 -1
- package/dist/select/select-item.js +1 -1
- package/dist/select/select-item.js.map +1 -1
- package/dist/select/select-label.d.ts +1 -1
- package/dist/select/select-label.d.ts.map +1 -1
- package/dist/select/select-label.js +1 -1
- package/dist/select/select-label.js.map +1 -1
- package/dist/select/select-list.d.ts +3 -3
- package/dist/select/select-list.d.ts.map +1 -1
- package/dist/select/select-list.js +1 -1
- package/dist/select/select-list.js.map +1 -1
- package/dist/select/select-popover.d.ts +1 -1
- package/dist/select/select-renderer.d.ts +2 -2
- package/dist/select/select-renderer.d.ts.map +1 -1
- package/dist/select/select-row.d.ts +1 -1
- package/dist/select/select-row.d.ts.map +1 -1
- package/dist/select/select-row.js +1 -1
- package/dist/select/select-row.js.map +1 -1
- package/dist/select/select-separator.d.ts +1 -1
- package/dist/select/select-separator.d.ts.map +1 -1
- package/dist/select/select.d.ts +2 -2
- package/dist/select/select.d.ts.map +1 -1
- package/dist/select/select.js +1 -1
- package/dist/select/select.js.map +1 -1
- package/dist/separator/separator.d.ts +1 -1
- package/dist/{separator--ozQfMcK.d.ts → separator-BnvSVwBa.d.ts} +2 -2
- package/dist/{separator--ozQfMcK.d.ts.map → separator-BnvSVwBa.d.ts.map} +1 -1
- package/dist/tab/tab-list.d.ts +2 -2
- package/dist/tab/tab-list.d.ts.map +1 -1
- package/dist/tab/tab-list.js +1 -1
- package/dist/tab/tab-list.js.map +1 -1
- package/dist/tab/tab-panel.d.ts +3 -3
- package/dist/tab/tab-panel.d.ts.map +1 -1
- package/dist/tab/tab-panel.js +2 -3
- package/dist/tab/tab-panel.js.map +1 -1
- package/dist/tab/tab.d.ts +2 -2
- package/dist/tab/tab.d.ts.map +1 -1
- package/dist/tab/tab.js +1 -1
- package/dist/tab/tab.js.map +1 -1
- package/dist/tag/tag-input.d.ts +2 -2
- package/dist/tag/tag-input.d.ts.map +1 -1
- package/dist/tag/tag-input.js +1 -2
- package/dist/tag/tag-input.js.map +1 -1
- package/dist/tag/tag-list-label.d.ts +2 -2
- package/dist/tag/tag-list-label.d.ts.map +1 -1
- package/dist/tag/tag-list-label.js +1 -1
- package/dist/tag/tag-list-label.js.map +1 -1
- package/dist/tag/tag-list.d.ts +2 -2
- package/dist/tag/tag-list.d.ts.map +1 -1
- package/dist/tag/tag-list.js +1 -1
- package/dist/tag/tag-list.js.map +1 -1
- package/dist/tag/tag-remove.d.ts +1 -1
- package/dist/tag/tag-remove.d.ts.map +1 -1
- package/dist/tag/tag-remove.js +1 -2
- package/dist/tag/tag-remove.js.map +1 -1
- package/dist/tag/tag-value.js +1 -1
- package/dist/tag/tag-value.js.map +1 -1
- package/dist/tag/tag-values.js +1 -1
- package/dist/tag/tag-values.js.map +1 -1
- package/dist/tag/tag.d.ts +2 -2
- package/dist/tag/tag.d.ts.map +1 -1
- package/dist/tag/tag.js +1 -1
- package/dist/tag/tag.js.map +1 -1
- package/dist/toolbar/toolbar-container.d.ts +1 -1
- package/dist/toolbar/toolbar-container.d.ts.map +1 -1
- package/dist/toolbar/toolbar-input.d.ts +1 -1
- package/dist/toolbar/toolbar-input.d.ts.map +1 -1
- package/dist/toolbar/toolbar-item.d.ts +2 -2
- package/dist/toolbar/toolbar-item.d.ts.map +1 -1
- package/dist/toolbar/toolbar-separator.d.ts +1 -1
- package/dist/toolbar/toolbar-separator.d.ts.map +1 -1
- package/dist/toolbar/toolbar.d.ts +2 -2
- package/dist/toolbar/toolbar.d.ts.map +1 -1
- package/dist/tooltip/tooltip-anchor.d.ts +1 -1
- package/dist/tooltip/tooltip-anchor.d.ts.map +1 -1
- package/dist/tooltip/tooltip-anchor.js +15 -4
- package/dist/tooltip/tooltip-anchor.js.map +1 -1
- package/dist/tooltip/tooltip-arrow.d.ts +1 -1
- package/dist/tooltip/tooltip-arrow.d.ts.map +1 -1
- package/dist/tooltip/tooltip-arrow.js +1 -1
- package/dist/tooltip/tooltip-arrow.js.map +1 -1
- package/dist/tooltip/tooltip.js +1 -1
- package/dist/tooltip/tooltip.js.map +1 -1
- package/dist/visually-hidden/visually-hidden.d.ts +1 -1
- package/dist/visually-hidden/visually-hidden.d.ts.map +1 -1
- package/package.json +8 -8
- package/src/collection/collection-item-offscreen.tsx +1 -1
- package/src/combobox/combobox.tsx +47 -1
- package/src/composite/composite-container.tsx +2 -2
- package/src/composite/composite-hover.tsx +8 -14
- package/src/composite/composite-item-offscreen.tsx +2 -2
- package/src/composite/composite-item.tsx +2 -2
- package/src/composite/composite-renderer.tsx +2 -2
- package/src/composite/composite-row.tsx +2 -2
- package/src/composite/composite-separator.tsx +2 -2
- package/src/composite/composite-typeahead.tsx +2 -2
- package/src/composite/composite.tsx +3 -3
- package/src/dialog/dialog.tsx +33 -10
- package/src/dialog/utils/disable-accessibility-tree-outside.ts +0 -25
- package/src/dialog/utils/use-hide-on-interact-outside.ts +3 -2
- package/src/focusable/focusable.tsx +53 -10
- package/src/form/form-remove.tsx +14 -10
- package/src/form/form.tsx +3 -1
- package/src/heading/heading.tsx +2 -5
- package/src/hovercard/hovercard-disclosure.tsx +18 -4
- package/src/hovercard/hovercard.tsx +1 -1
- package/src/menu/menu-bar-store.ts +2 -2
- package/src/menu/menu-context.tsx +8 -0
- package/src/menu/menu-item.tsx +18 -1
- package/src/menu/menu-list.tsx +15 -0
- package/src/menubar/menubar-context.tsx +0 -5
- package/src/menubar/menubar-store.ts +2 -2
- package/src/popover/popover-arrow.tsx +3 -3
- package/src/popover/popover.tsx +8 -0
- package/src/tab/tab-panel.tsx +1 -1
- package/src/tag/tag-input.tsx +0 -1
- package/src/tag/tag-remove.tsx +0 -1
- package/src/tooltip/tooltip-anchor.tsx +23 -8
- package/dist/collection-renderer-DsPD9ksD.d.ts.map +0 -1
- package/dist/popover-CCqiRKqg.d.ts.map +0 -1
- package/src/hovercard/utils/__tests__/polygon-test.ts +0 -66
|
@@ -3,7 +3,7 @@ import { useDialogDisclosure } from "../dialog/dialog-disclosure.js";
|
|
|
3
3
|
import { useVisuallyHidden } from "../visually-hidden/visually-hidden.js";
|
|
4
4
|
import { useHovercardProviderContext } from "./hovercard-context.js";
|
|
5
5
|
import { createElement, createHook, forwardRef, useEvent, useMergeRefs } from "@ariakit/react-utils";
|
|
6
|
-
import { addGlobalEventListener, contains, invariant } from "@ariakit/utils";
|
|
6
|
+
import { addGlobalEventListener, contains, invariant, isElement, isNode } from "@ariakit/utils";
|
|
7
7
|
import { useEffect, useState } from "react";
|
|
8
8
|
import { jsx } from "react/jsx-runtime";
|
|
9
9
|
import { sync } from "@ariakit/store";
|
|
@@ -24,19 +24,19 @@ const TagName = "button";
|
|
|
24
24
|
const useHovercardDisclosure = createHook(function useHovercardDisclosure({ store, ...props }) {
|
|
25
25
|
const context = useHovercardProviderContext();
|
|
26
26
|
store = store || context;
|
|
27
|
-
invariant(store, "HovercardDisclosure must receive a `store` prop or be wrapped in a HovercardProvider component.");
|
|
27
|
+
invariant(store, process.env.NODE_ENV !== "production" && "HovercardDisclosure must receive a `store` prop or be wrapped in a HovercardProvider component.");
|
|
28
28
|
const [visible, setVisible] = useState(false);
|
|
29
29
|
useEffect(() => {
|
|
30
30
|
if (!visible) return;
|
|
31
31
|
const onBlur = (event) => {
|
|
32
32
|
if (!store) return;
|
|
33
33
|
const nextActiveElement = event.relatedTarget;
|
|
34
|
-
if (nextActiveElement) {
|
|
34
|
+
if (isNode(nextActiveElement)) {
|
|
35
35
|
const { anchorElement: anchor, popoverElement: popover, disclosureElement: disclosure } = store.getState();
|
|
36
36
|
if (anchor && contains(anchor, nextActiveElement)) return;
|
|
37
37
|
if (popover && contains(popover, nextActiveElement)) return;
|
|
38
38
|
if (disclosure && contains(disclosure, nextActiveElement)) return;
|
|
39
|
-
if (nextActiveElement.hasAttribute("data-focus-trap")) return;
|
|
39
|
+
if (isElement(nextActiveElement) && nextActiveElement.hasAttribute("data-focus-trap")) return;
|
|
40
40
|
}
|
|
41
41
|
setVisible(false);
|
|
42
42
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hovercard-disclosure.js","names":[],"sources":["../../src/hovercard/hovercard-disclosure.tsx"],"sourcesContent":["import {\n useEvent,\n useMergeRefs,\n createElement,\n createHook,\n forwardRef,\n} from \"@ariakit/react-utils\";\nimport type { Props } from \"@ariakit/react-utils\";\nimport { sync } from \"@ariakit/store\";\nimport {
|
|
1
|
+
{"version":3,"file":"hovercard-disclosure.js","names":[],"sources":["../../src/hovercard/hovercard-disclosure.tsx"],"sourcesContent":["import {\n useEvent,\n useMergeRefs,\n createElement,\n createHook,\n forwardRef,\n} from \"@ariakit/react-utils\";\nimport type { Props } from \"@ariakit/react-utils\";\nimport { sync } from \"@ariakit/store\";\nimport {\n contains,\n addGlobalEventListener,\n invariant,\n isElement,\n isNode,\n} from \"@ariakit/utils\";\nimport type {\n ElementType,\n MouseEvent,\n FocusEvent as ReactFocusEvent,\n} from \"react\";\nimport { useEffect, useState } from \"react\";\nimport type { DialogDisclosureOptions } from \"../dialog/dialog-disclosure.tsx\";\nimport { useDialogDisclosure } from \"../dialog/dialog-disclosure.tsx\";\nimport { useVisuallyHidden } from \"../visually-hidden/visually-hidden.tsx\";\nimport { useHovercardProviderContext } from \"./hovercard-context.tsx\";\nimport type { HovercardStore } from \"./hovercard-store.ts\";\n\nconst TagName = \"button\" satisfies ElementType;\ntype TagName = typeof TagName;\ntype HTMLType = HTMLElementTagNameMap[TagName];\n\n/**\n * Returns props to create a `HovercardDisclosure` component.\n * @see https://ariakit.com/components/hovercard\n * @example\n * ```jsx\n * const store = useHovercardStore();\n * const props = useHovercardDisclosure({ store });\n * <HovercardAnchor store={store}>@username</HovercardAnchor>\n * <Role {...props} />\n * <Hovercard store={store}>Details</Hovercard>\n * ```\n */\nexport const useHovercardDisclosure = createHook<\n TagName,\n HovercardDisclosureOptions\n>(function useHovercardDisclosure({ store, ...props }) {\n const context = useHovercardProviderContext();\n store = store || context;\n\n invariant(\n store,\n process.env.NODE_ENV !== \"production\" &&\n \"HovercardDisclosure must receive a `store` prop or be wrapped in a HovercardProvider component.\",\n );\n\n const [visible, setVisible] = useState(false);\n\n // Listens to blur events on the whole document and hides the hovercard\n // disclosure if either the hovercard, the anchor or the disclosure button\n // itself loses focus.\n useEffect(() => {\n if (!visible) return;\n const onBlur = (event: FocusEvent) => {\n if (!store) return;\n const nextActiveElement = event.relatedTarget;\n // `isNode` rather than `isElement` so non-element nodes keep working with\n // `contains` (as before); a non-node relatedTarget (e.g. window) would\n // make `contains` throw, so it falls through to hiding the disclosure.\n if (isNode(nextActiveElement)) {\n const {\n anchorElement: anchor,\n popoverElement: popover,\n disclosureElement: disclosure,\n } = store.getState();\n if (anchor && contains(anchor, nextActiveElement)) return;\n if (popover && contains(popover, nextActiveElement)) return;\n if (disclosure && contains(disclosure, nextActiveElement)) return;\n // When the portal prop is set to true on the Hovercard component,\n // it's going to render focus trap elements outside of the portal.\n // These elements may transfer focus to the disclosure button, so we\n // also ignore them here.\n if (\n isElement(nextActiveElement) &&\n nextActiveElement.hasAttribute(\"data-focus-trap\")\n ) {\n return;\n }\n }\n setVisible(false);\n };\n return addGlobalEventListener(\"focusout\", onBlur, true);\n }, [visible, store]);\n\n // Shows the hovercard disclosure when the anchor receives keyboard focus.\n useEffect(() => {\n return sync(store, [\"anchorElement\"], (state) => {\n const anchor = state.anchorElement;\n if (!anchor) return;\n const observer = new MutationObserver(() => {\n if (!anchor.hasAttribute(\"data-focus-visible\")) return;\n setVisible(true);\n });\n observer.observe(anchor, { attributeFilter: [\"data-focus-visible\"] });\n return () => observer.disconnect();\n });\n }, [store]);\n\n const onClickProp = props.onClick;\n\n // By default, hovercards don't receive focus when they are shown. When the\n // disclosure element is clicked, though, we want it to behave like a\n // popover, so we set the autoFocusOnShow prop to true.\n const onClick = useEvent((event: MouseEvent<HTMLType>) => {\n onClickProp?.(event);\n if (event.defaultPrevented) return;\n store?.setAutoFocusOnShow(true);\n });\n\n const onFocusProp = props.onFocus;\n\n // Since the disclosure button is only visually hidden, it may receive focus\n // when the user tabs to it. So we make sure it's visible when that happens.\n const onFocus = useEvent((event: ReactFocusEvent<HTMLType>) => {\n onFocusProp?.(event);\n if (event.defaultPrevented) return;\n setVisible(true);\n });\n\n const { style } = useVisuallyHidden();\n\n if (!visible) {\n props = {\n ...props,\n style: {\n ...style,\n ...props.style,\n },\n };\n }\n\n const children = (\n <svg\n display=\"block\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={1.5}\n viewBox=\"0 0 16 16\"\n height=\"1em\"\n width=\"1em\"\n >\n <polyline points=\"4,6 8,10 12,6\" />\n </svg>\n );\n\n props = {\n children,\n ...props,\n ref: useMergeRefs(store.setDisclosureElement, props.ref),\n onClick,\n onFocus,\n };\n\n props = useDialogDisclosure({ store, ...props });\n\n return props;\n});\n\n/**\n * Renders a hidden disclosure button that will be visible when the\n * [`HovercardAnchor`](https://ariakit.com/reference/hovercard-anchor) receives\n * keyboard focus. The user can then navigate to the button to open the\n * hovercard when using the keyboard.\n * @see https://ariakit.com/components/hovercard\n * @example\n * ```jsx {3}\n * <HovercardProvider>\n * <HovercardAnchor>@username</HovercardAnchor>\n * <HovercardDisclosure />\n * <Hovercard>Details</Hovercard>\n * </HovercardProvider>\n * ```\n */\nexport const HovercardDisclosure = forwardRef(function HovercardDisclosure(\n props: HovercardDisclosureProps,\n) {\n const htmlProps = useHovercardDisclosure(props);\n return createElement(TagName, htmlProps);\n});\n\nexport interface HovercardDisclosureOptions<\n T extends ElementType = TagName,\n> extends DialogDisclosureOptions<T> {\n /**\n * Object returned by the\n * [`useHovercardStore`](https://ariakit.com/reference/use-hovercard-store)\n * hook. If not provided, the closest\n * [`HovercardProvider`](https://ariakit.com/reference/hovercard-provider)\n * component's context will be used.\n */\n store?: HovercardStore;\n}\n\nexport type HovercardDisclosureProps<T extends ElementType = TagName> = Props<\n T,\n HovercardDisclosureOptions<T>\n>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;MAgDE,yBAAgB,WAAA,SAA4B,uBAAA,EAAA,OAAA,GAAA,SAAA;CAC5C,MAAA,UAAQ,4BAAS;CAEjB,QAAA,SAEE;CAIF,UAAO,OAAS,QAAA,IAAA,aAAuB,gBAAK,iGAAA;CAK5C,MAAA,CAAA,SAAgB,cAAA,SAAA,KAAA;iBACA;EACd,IAAA,CAAA,SAAM;QACC,UAAO,UAAA;GACZ,IAAA,CAAA,OAAM;GAIN,MAAI,oBAAO,MAAoB;OAC7B,OACE,iBAAe,GAAA;IAIjB,MAAI,EAAA,eAAmB,QAAQ,gBAAA,SAAoB,mBAAA,eAAA,MAAA,SAAA;IACnD,IAAI,UAAA,SAAW,QAAS,iBAAS,GAAiB;IAClD,IAAI,WAAA,SAAc,SAAS,iBAAY,GAAA;IAKvC,IACE,cAAU,SAAA,YACV,iBAAkB,GAAA;IAItB,IAAA,UAAA,iBAAA,KAAA,kBAAA,aAAA,iBAAA,GAAA;GACA;GACF,WAAA,KAAA;EACA;EACF,OAAI,uBAAe,YAAA,QAAA,IAAA;CAGnB,GAAA,CAAA,SAAA,KAAgB,CAAA;iBACF;SACJ,KAAA,OAAS,CAAA,eAAM,IAAA,UAAA;GACrB,MAAK,SAAQ,MAAA;GACb,IAAA,CAAA,QAAM;SACC,WAAO,IAAA,uBAAa;IACzB,IAAA,CAAA,OAAW,aAAI,oBAAA,GAAA;IAChB,WAAA,IAAA;GACD,CAAA;GACA,SAAA,QAAa,QAAS,EAAA,iBAAW,CAAA,oBAAA,EAAA,CAAA;GAClC,aAAA,SAAA,WAAA;EACH,CAAA;CAEA,GAAA,CAAA,KAAM,CAAA;CAKN,MAAM,cAAU,MAAU;OACxB,UAAc,UAAK,UAAA;EACnB,cAAU,KAAA;EACV,IAAA,MAAO,kBAAmB;EAC3B,OAAA,mBAAA,IAAA;CAED,CAAA;CAIA,MAAM,cAAU,MAAU;OACxB,UAAc,UAAK,UAAA;EACnB,cAAU,KAAA;EACV,IAAA,MAAA,kBAAe;EAChB,WAAA,IAAA;CAED,CAAA;CAEA,MAAK,EAAA,UACH,kBAAQ;KACH,CAAA,SAAA,QAAA;EACH,GAAA;SACK;GACH,GAAG;GACL,GAAA,MAAA;EACF;CAmBF;SACE;YAfU,oBAAA,OAAA;GACR,SAAK;GACL,MAAA;GACA,QAAA;GACA,eAAA;GACA,gBAAa;GACb,aAAQ;GACR,SAAO;GACP,QAAM;;GAOD,UAAA,oBAAA,YAAA,EAAA,QAAA,gBAAA,CAAA;EACP,CAAA;EACA,GAAA;EACA,KAAA,aAAA,MAAA,sBAAA,MAAA,GAAA;EACA;EACF;CAEA;SAA8B,oBAAA;EAAO;EAAU,GAAA;CAE/C,CAAA;CACD,OAAA;;;;;;;;;;;;;;;;;MAqBC,sBAAqB,WADH,SAAA,oBACqB,OAAA;CACxC,OAAA,cAAA,SAAA,uBAAA,KAAA,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as HovercardStore } from "../hovercard-store-gIeoQEn_.js";
|
|
2
|
-
import { n as PopoverDismissOptions } from "../popover-dismiss-
|
|
2
|
+
import { n as PopoverDismissOptions } from "../popover-dismiss-CQFvuLzJ.js";
|
|
3
3
|
import { Props } from "@ariakit/react-utils";
|
|
4
4
|
import { ElementType } from "react";
|
|
5
5
|
|
|
@@ -32,7 +32,7 @@ declare const useHovercardDismiss: import("@ariakit/react-utils").Hook<"button",
|
|
|
32
32
|
* </HovercardProvider>
|
|
33
33
|
* ```
|
|
34
34
|
*/
|
|
35
|
-
declare const HovercardDismiss: (props: HovercardDismissProps) => import("react").ReactElement<
|
|
35
|
+
declare const HovercardDismiss: (props: HovercardDismissProps) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
36
36
|
interface HovercardDismissOptions<T extends ElementType = TagName> extends PopoverDismissOptions<T> {
|
|
37
37
|
/**
|
|
38
38
|
* Object returned by the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hovercard-dismiss.d.ts","names":["Props","ElementType","PopoverDismissOptions","HovercardStore","TagName","useHovercardDismiss","HovercardDismissOptions","Hook","HovercardDismiss","HovercardDismissProps","props","ReactElement","JSXElementConstructor","T","store"],"sources":["../../src/hovercard/hovercard-dismiss.d.ts"],"mappings":";;;;;;cAIcI,OAAAA;AAAAA,KACTA,OAAAA,UAAiBA,OAAO;AAF8B;;;;AACtC;AAAA;;;;AACQ;AAa7B;;AAf2D,cAetCC,mBAAAA,iCAAoDE,IAAAA,WAAeD,uBAAuB;;AAAA;AAc/G;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"hovercard-dismiss.d.ts","names":["Props","ElementType","PopoverDismissOptions","HovercardStore","TagName","useHovercardDismiss","HovercardDismissOptions","Hook","HovercardDismiss","HovercardDismissProps","props","ReactElement","JSXElementConstructor","T","store"],"sources":["../../src/hovercard/hovercard-dismiss.d.ts"],"mappings":";;;;;;cAIcI,OAAAA;AAAAA,KACTA,OAAAA,UAAiBA,OAAO;AAF8B;;;;AACtC;AAAA;;;;AACQ;AAa7B;;AAf2D,cAetCC,mBAAAA,iCAAoDE,IAAAA,WAAeD,uBAAuB;;AAAA;AAc/G;;;;;;;;;AAA6J;AAC7J;cADqBE,gBAAAA,GAAmBE,KAAAA,EAAOD,qBAAqB,qBAAqBE,YAAAA,mCAA+CC,qBAAAA;AAAAA,UACvHN,uBAAAA,WAAkCL,WAAAA,GAAcG,OAAAA,UAAiBF,qBAAAA,CAAsBW,CAAAA;EAArDZ;;;;;;;;EAS/Ca,KAAAA,GAAQX,cAAAA;AAAAA;AAAAA,KAEAM,qBAAAA,WAAgCR,WAAAA,GAAcG,OAAAA,IAAWJ,KAAAA,CAAMa,CAAAA,EAAGP,uBAAAA,CAAwBO,CAAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { t as HovercardStore } from "../hovercard-store-gIeoQEn_.js";
|
|
2
|
-
import { n as PopoverHeadingOptions } from "../popover-heading-
|
|
2
|
+
import { n as PopoverHeadingOptions } from "../popover-heading-DC8rYnwo.js";
|
|
3
3
|
import { Props } from "@ariakit/react-utils";
|
|
4
4
|
import { ElementType } from "react";
|
|
5
5
|
|
|
@@ -33,7 +33,7 @@ declare const useHovercardHeading: import("@ariakit/react-utils").Hook<"h1", Hov
|
|
|
33
33
|
* </HovercardProvider>
|
|
34
34
|
* ```
|
|
35
35
|
*/
|
|
36
|
-
declare const HovercardHeading: (props: HovercardHeadingProps) => import("react").ReactElement<
|
|
36
|
+
declare const HovercardHeading: (props: HovercardHeadingProps) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
37
37
|
interface HovercardHeadingOptions<T extends ElementType = TagName> extends PopoverHeadingOptions<T> {
|
|
38
38
|
/**
|
|
39
39
|
* Object returned by the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hovercard-heading.d.ts","names":["Props","ElementType","PopoverHeadingOptions","HovercardStore","TagName","useHovercardHeading","HovercardHeadingOptions","Hook","HovercardHeading","HovercardHeadingProps","props","ReactElement","JSXElementConstructor","T","store"],"sources":["../../src/hovercard/hovercard-heading.d.ts"],"mappings":";;;;;;cAIcI,OAAAA;AAAAA,KACTA,OAAAA,UAAiBA,OAAO;AAF8B;;;;AACtC;AAAA;;;;AACQ;AAa7B;;AAf2D,cAetCC,mBAAAA,iCAAoDE,IAAAA,OAAWD,uBAAuB;;AAAA;AAe3G;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"hovercard-heading.d.ts","names":["Props","ElementType","PopoverHeadingOptions","HovercardStore","TagName","useHovercardHeading","HovercardHeadingOptions","Hook","HovercardHeading","HovercardHeadingProps","props","ReactElement","JSXElementConstructor","T","store"],"sources":["../../src/hovercard/hovercard-heading.d.ts"],"mappings":";;;;;;cAIcI,OAAAA;AAAAA,KACTA,OAAAA,UAAiBA,OAAO;AAF8B;;;;AACtC;AAAA;;;;AACQ;AAa7B;;AAf2D,cAetCC,mBAAAA,iCAAoDE,IAAAA,OAAWD,uBAAuB;;AAAA;AAe3G;;;;;;;;;AAA6J;AAC7J;;cADqBE,gBAAAA,GAAmBE,KAAAA,EAAOD,qBAAqB,qBAAqBE,YAAAA,mCAA+CC,qBAAAA;AAAAA,UACvHN,uBAAAA,WAAkCL,WAAAA,GAAcG,OAAAA,UAAiBF,qBAAAA,CAAsBW,CAAAA;EAAvCT;;;;;;;;EAS7DU,KAAAA,GAAQX,cAAAA;AAAAA;AAAAA,KAEAM,qBAAAA,WAAgCR,WAAAA,GAAcG,OAAAA,IAAWJ,KAAAA,CAAMa,CAAAA,EAAGP,uBAAAA,CAAwBO,CAAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { n as PopoverOptions } from "../popover-
|
|
1
|
+
import { n as PopoverOptions } from "../popover-B9PxE5iP.js";
|
|
2
2
|
import { t as HovercardStore } from "../hovercard-store-gIeoQEn_.js";
|
|
3
3
|
import { Props } from "@ariakit/react-utils";
|
|
4
4
|
import { ElementType } from "react";
|
|
@@ -16,7 +16,7 @@ function isMovingOnHovercard(target, card, anchor, nested) {
|
|
|
16
16
|
if (!target) return false;
|
|
17
17
|
if (contains(card, target)) return true;
|
|
18
18
|
if (anchor && contains(anchor, target)) return true;
|
|
19
|
-
if (nested?.some((card) =>
|
|
19
|
+
if (nested?.some((card) => hasFocusWithin(card) || contains(card, target))) return true;
|
|
20
20
|
return false;
|
|
21
21
|
}
|
|
22
22
|
function useAutoFocusOnHide({ store, ...props }) {
|
|
@@ -60,7 +60,7 @@ const NestedHovercardContext = createContext(null);
|
|
|
60
60
|
const useHovercard = createHook(function useHovercard({ store, modal = false, portal = modal, hideOnEscape = true, hideOnHoverOutside = true, disablePointerEventsOnApproach = !!hideOnHoverOutside, ...props }) {
|
|
61
61
|
const context = useHovercardProviderContext();
|
|
62
62
|
store = store || context;
|
|
63
|
-
invariant(store, "Hovercard must receive a `store` prop or be wrapped in a HovercardProvider component.");
|
|
63
|
+
invariant(store, process.env.NODE_ENV !== "production" && "Hovercard must receive a `store` prop or be wrapped in a HovercardProvider component.");
|
|
64
64
|
const ref = useRef(null);
|
|
65
65
|
const [nestedHovercards, setNestedHovercards] = useState([]);
|
|
66
66
|
const hideTimeoutRef = useRef(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hovercard.js","names":[],"sources":["../../src/hovercard/hovercard.tsx"],"sourcesContent":["import { useStoreState } from \"@ariakit/react-store\";\nimport {\n useBooleanEvent,\n useEvent,\n useIsMouseMoving,\n useLiveRef,\n useMergeRefs,\n usePortalRef,\n useSafeLayoutEffect,\n useWrapElement,\n createElement,\n createHook,\n forwardRef,\n} from \"@ariakit/react-utils\";\nimport type { Props } from \"@ariakit/react-utils\";\nimport { sync } from \"@ariakit/store\";\nimport {\n contains,\n addGlobalEventListener,\n hasFocusWithin,\n chain,\n invariant,\n isFalsyBooleanCallback,\n} from \"@ariakit/utils\";\nimport type { BooleanOrCallback } from \"@ariakit/utils\";\nimport type { ElementType, FocusEvent } from \"react\";\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { createDialogComponent } from \"../dialog/dialog.tsx\";\nimport type { PopoverOptions } from \"../popover/popover.tsx\";\nimport { usePopover } from \"../popover/popover.tsx\";\nimport {\n HovercardScopedContextProvider,\n useHovercardProviderContext,\n} from \"./hovercard-context.tsx\";\nimport type { HovercardStore } from \"./hovercard-store.ts\";\nimport type { Point } from \"./utils/polygon.ts\";\nimport {\n getElementPolygon,\n getEventPoint,\n isPointInPolygon,\n} from \"./utils/polygon.ts\";\n\nconst TagName = \"div\" satisfies ElementType;\ntype TagName = typeof TagName;\ntype HTMLType = HTMLElementTagNameMap[TagName];\n\nfunction isMovingOnHovercard(\n target: Node | null | undefined,\n card: HTMLElement,\n anchor: HTMLElement | null,\n nested?: HTMLElement[],\n) {\n // The hovercard element has focus so we should keep it visible.\n if (hasFocusWithin(card)) return true;\n if (!target) return false;\n // The mouse is moving on an element inside the hovercard.\n if (contains(card, target)) return true;\n // The mouse is moving on an element inside the anchor element.\n if (anchor && contains(anchor, target)) return true;\n // The mouse is moving on an element inside a nested hovercard.\n if (nested?.some((card) => isMovingOnHovercard(target, card, anchor))) {\n return true;\n }\n return false;\n}\n\n// When the hovercard element has focus, we should move focus back to the anchor\n// element when the hovercard gets hidden (or unmounted).\nfunction useAutoFocusOnHide({\n store,\n ...props\n}: HovercardProps & { store: HovercardStore }) {\n const [autoFocusOnHide, setAutoFocusOnHide] = useState(false);\n const mounted = useStoreState(store, \"mounted\");\n\n // Resets autoFocusOnHide\n useEffect(() => {\n if (!mounted) {\n setAutoFocusOnHide(false);\n }\n }, [mounted]);\n\n const onFocusProp = props.onFocus;\n\n const onFocus = useEvent((event: FocusEvent<HTMLType>) => {\n onFocusProp?.(event);\n if (event.defaultPrevented) return;\n setAutoFocusOnHide(true);\n });\n\n // TODO: Maybe use state.anchorElement directly?\n const finalFocusRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n return sync(store, [\"anchorElement\"], (state) => {\n finalFocusRef.current = state.anchorElement;\n });\n }, [store]);\n\n props = {\n autoFocusOnHide,\n finalFocus: finalFocusRef,\n ...props,\n onFocus,\n };\n\n return props;\n}\n\nconst NestedHovercardContext = createContext<\n ((element: HTMLElement) => () => void) | null\n>(null);\n\n/**\n * Returns props to create a `Hovercard` component.\n * @see https://ariakit.com/components/hovercard\n * @example\n * ```jsx\n * const store = useHovercardStore();\n * const props = useHovercard({ store });\n * <HovercardAnchor store={store}>@username</HovercardAnchor>\n * <Role {...props}>Details</Role>\n * ```\n */\nexport const useHovercard = createHook<TagName, HovercardOptions>(\n function useHovercard({\n store,\n modal = false,\n portal = modal,\n hideOnEscape = true,\n hideOnHoverOutside = true,\n disablePointerEventsOnApproach = !!hideOnHoverOutside,\n ...props\n }) {\n const context = useHovercardProviderContext();\n store = store || context;\n\n invariant(\n store,\n process.env.NODE_ENV !== \"production\" &&\n \"Hovercard must receive a `store` prop or be wrapped in a HovercardProvider component.\",\n );\n\n const ref = useRef<HTMLType>(null);\n const [nestedHovercards, setNestedHovercards] = useState<HTMLElement[]>([]);\n const hideTimeoutRef = useRef(0);\n const enterPointRef = useRef<Point | null>(null);\n const { portalRef, domReady } = usePortalRef(portal, props.portalRef);\n\n const isMouseMoving = useIsMouseMoving();\n\n const mayHideOnHoverOutside = !!hideOnHoverOutside;\n const hideOnHoverOutsideProp = useBooleanEvent(hideOnHoverOutside);\n const mayDisablePointerEvents = !!disablePointerEventsOnApproach;\n const disablePointerEventsProp = useBooleanEvent(\n disablePointerEventsOnApproach,\n );\n\n const open = useStoreState(store, \"open\");\n const mounted = useStoreState(store, \"mounted\");\n\n // Checks whether the mouse is moving toward the hovercard. If not, hide the\n // card after a short delay (hideTimeout).\n useEffect(() => {\n if (!domReady) return;\n if (!mounted) return;\n if (!mayHideOnHoverOutside && !mayDisablePointerEvents) return;\n const element = ref.current;\n if (!element) return;\n const onMouseMove = (event: MouseEvent) => {\n if (!store) return;\n if (!isMouseMoving()) return;\n const { anchorElement, hideTimeout, timeout } = store.getState();\n const enterPoint = enterPointRef.current;\n const [target] = event.composedPath() as Node[];\n const anchor = anchorElement;\n // Checks whether the hovercard element has focus or the mouse is moving\n // through valid hovercard elements.\n if (isMovingOnHovercard(target, element, anchor, nestedHovercards)) {\n // While the mouse is moving over the anchor element while the hover\n // card is open, keep track of the mouse position so we can use the\n // last point before the mouse leaves the anchor element.\n enterPointRef.current =\n target && anchor && contains(anchor, target)\n ? getEventPoint(event)\n : null;\n window.clearTimeout(hideTimeoutRef.current);\n hideTimeoutRef.current = 0;\n return;\n }\n // If there's already a scheduled timeout to hide the hovercard, we do\n // nothing.\n if (hideTimeoutRef.current) return;\n // Enter point will be null when the user hovers over the hovercard\n // element.\n if (enterPoint) {\n const currentPoint = getEventPoint(event);\n const polygon = getElementPolygon(element, enterPoint);\n // If the current event's mouse position is inside the transit\n // polygon, this means that the mouse is moving toward the hover card,\n // so we disable this event. This is necessary because the mousemove\n // event may trigger focus on other elements and close the hovercard.\n if (isPointInPolygon(currentPoint, polygon)) {\n // Refreshes the enter point.\n enterPointRef.current = currentPoint;\n if (!disablePointerEventsProp(event)) return;\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n }\n if (!hideOnHoverOutsideProp(event)) return;\n // Otherwise, hide the hovercard after a short delay (hideTimeout).\n hideTimeoutRef.current = window.setTimeout(() => {\n hideTimeoutRef.current = 0;\n store?.hide();\n }, hideTimeout ?? timeout);\n };\n return chain(addGlobalEventListener(\"mousemove\", onMouseMove, true), () =>\n clearTimeout(hideTimeoutRef.current),\n );\n }, [\n store,\n isMouseMoving,\n domReady,\n mounted,\n mayHideOnHoverOutside,\n mayDisablePointerEvents,\n nestedHovercards,\n disablePointerEventsProp,\n hideOnHoverOutsideProp,\n ]);\n\n // Disable mouse events while the mouse is moving toward the hovercard. This\n // is necessary because these events may trigger focus on other elements and\n // close the hovercard while the user is moving the mouse toward it.\n useEffect(() => {\n if (!domReady) return;\n if (!mounted) return;\n if (!mayDisablePointerEvents) return;\n const disableEvent = (event: MouseEvent) => {\n const element = ref.current;\n if (!element) return;\n const enterPoint = enterPointRef.current;\n if (!enterPoint) return;\n const polygon = getElementPolygon(element, enterPoint);\n if (isPointInPolygon(getEventPoint(event), polygon)) {\n if (!disablePointerEventsProp(event)) return;\n event.preventDefault();\n event.stopPropagation();\n }\n };\n return chain(\n // Note: we may need to add pointer events here in the future.\n addGlobalEventListener(\"mouseenter\", disableEvent, true),\n addGlobalEventListener(\"mouseover\", disableEvent, true),\n addGlobalEventListener(\"mouseout\", disableEvent, true),\n addGlobalEventListener(\"mouseleave\", disableEvent, true),\n );\n }, [domReady, mounted, mayDisablePointerEvents, disablePointerEventsProp]);\n\n // The autoFocusOnShow state will be set to true when the hovercard\n // disclosure element is clicked. We have to reset it to false when the\n // hovercard element gets hidden.\n useEffect(() => {\n if (!domReady) return;\n if (open) return;\n store?.setAutoFocusOnShow(false);\n }, [store, domReady, open]);\n\n // On unmount as well.\n const openRef = useLiveRef(open);\n useEffect(() => {\n if (!domReady) return;\n return () => {\n // oxlint-disable-next-line exhaustive-deps\n if (!openRef.current) {\n store?.setAutoFocusOnShow(false);\n }\n };\n // This cleanup intentionally reads the live ref so it can observe the\n // latest open state at unmount time.\n // oxlint-disable-next-line exhaustive-deps\n }, [store, domReady]);\n\n const registerOnParent = useContext(NestedHovercardContext);\n\n // Register the hovercard as a nested hovercard on the parent hovercard if\n // it's not a modal, is portal and is mounted. We don't need to register\n // non-portal hovercards because they will be captured by the contains\n // function in the isMovingOnHovercard function above. This must be a layout\n // effect so we don't lose mouse move events right after the nested\n // hovercard has been mounted (for example, a submenu that's overlapping its\n // menu button and we keep moving the mouse while the submenu is due to\n // open).\n useSafeLayoutEffect(() => {\n if (modal) return;\n if (!portal) return;\n if (!mounted) return;\n if (!domReady) return;\n const element = ref.current;\n if (!element) return;\n return registerOnParent?.(element);\n }, [modal, portal, mounted, domReady]);\n\n const registerNestedHovercard = useCallback(\n (element: any) => {\n setNestedHovercards((prevElements) => [...prevElements, element]);\n const parentUnregister = registerOnParent?.(element);\n return () => {\n setNestedHovercards((prevElements) =>\n prevElements.filter((item) => item !== element),\n );\n parentUnregister?.();\n };\n },\n [registerOnParent],\n );\n\n props = useWrapElement(\n props,\n (element) => (\n <HovercardScopedContextProvider value={store}>\n <NestedHovercardContext.Provider value={registerNestedHovercard}>\n {element}\n </NestedHovercardContext.Provider>\n </HovercardScopedContextProvider>\n ),\n [store, registerNestedHovercard],\n );\n\n props = {\n ...props,\n ref: useMergeRefs(ref, props.ref),\n };\n\n props = useAutoFocusOnHide({ store, ...props });\n\n // If the hovercard is modal, we should always autoFocus on show.\n const autoFocusOnShow = useStoreState(\n store,\n (state) => modal || state.autoFocusOnShow,\n );\n\n props = usePopover({\n store,\n modal,\n portal,\n autoFocusOnShow,\n ...props,\n portalRef,\n hideOnEscape(event) {\n if (isFalsyBooleanCallback(hideOnEscape, event)) return false;\n // Hide again on the next frame to avoid the popover being shown again\n // when the user presses the escape key and trigger focusVisible on the\n // anchor element (which is the case of tooltip anchor).\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n store?.hide();\n });\n });\n return true;\n },\n });\n\n return props;\n },\n);\n\n/**\n * Renders a hovercard element, which is a popover that's usually made visible\n * by hovering the mouse cursor over a\n * [`HovercardAnchor`](https://ariakit.com/reference/hovercard-anchor).\n * @see https://ariakit.com/components/hovercard\n * @example\n * ```jsx {3}\n * <HovercardProvider>\n * <HovercardAnchor>@username</HovercardAnchor>\n * <Hovercard>Details</Hovercard>\n * </HovercardProvider>\n * ```\n */\nexport const Hovercard = createDialogComponent(\n forwardRef(function Hovercard(props: HovercardProps) {\n const htmlProps = useHovercard(props);\n return createElement(TagName, htmlProps);\n }),\n useHovercardProviderContext,\n);\n\nexport interface HovercardOptions<\n T extends ElementType = TagName,\n> extends PopoverOptions<T> {\n /**\n * Object returned by the\n * [`useHovercardStore`](https://ariakit.com/reference/use-hovercard-store)\n * hook. If not provided, the closest\n * [`HovercardProvider`](https://ariakit.com/reference/hovercard-provider)\n * component's context will be used.\n */\n store?: HovercardStore;\n /**\n * Determines whether the popover should hide when the mouse leaves the\n * popover or the anchor element and there's no _hover intent_, meaning, the\n * mouse isn't moving toward the popover.\n *\n * This can be either a boolean or a callback receiving the mouse move event\n * that initiated the behavior. The callback should return a boolean.\n *\n * **Note**: This behavior won't be triggered when the popover or any of its\n * descendants are in focus.\n * @default true\n */\n hideOnHoverOutside?: BooleanOrCallback<MouseEvent>;\n /**\n * Determines if the pointer events outside of the popover and its anchor\n * element should be disabled during _hover intent_, that is, when the mouse\n * is moving toward the popover.\n *\n * This is required as these external events may trigger focus on other\n * elements and close the popover while the user is attempting to hover over\n * it.\n *\n * This can be either a boolean or a callback receiving the mouse event\n * happening during hover intent. The callback should return a boolean.\n * @default true\n */\n disablePointerEventsOnApproach?: BooleanOrCallback<MouseEvent>;\n /**\n * @default false\n */\n modal?: PopoverOptions<T>[\"modal\"];\n}\n\nexport type HovercardProps<T extends ElementType = TagName> = Props<\n T,\n HovercardOptions<T>\n>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hovercard.js","names":[],"sources":["../../src/hovercard/hovercard.tsx"],"sourcesContent":["import { useStoreState } from \"@ariakit/react-store\";\nimport {\n useBooleanEvent,\n useEvent,\n useIsMouseMoving,\n useLiveRef,\n useMergeRefs,\n usePortalRef,\n useSafeLayoutEffect,\n useWrapElement,\n createElement,\n createHook,\n forwardRef,\n} from \"@ariakit/react-utils\";\nimport type { Props } from \"@ariakit/react-utils\";\nimport { sync } from \"@ariakit/store\";\nimport {\n contains,\n addGlobalEventListener,\n hasFocusWithin,\n chain,\n invariant,\n isFalsyBooleanCallback,\n} from \"@ariakit/utils\";\nimport type { BooleanOrCallback } from \"@ariakit/utils\";\nimport type { ElementType, FocusEvent } from \"react\";\nimport {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { createDialogComponent } from \"../dialog/dialog.tsx\";\nimport type { PopoverOptions } from \"../popover/popover.tsx\";\nimport { usePopover } from \"../popover/popover.tsx\";\nimport {\n HovercardScopedContextProvider,\n useHovercardProviderContext,\n} from \"./hovercard-context.tsx\";\nimport type { HovercardStore } from \"./hovercard-store.ts\";\nimport type { Point } from \"./utils/polygon.ts\";\nimport {\n getElementPolygon,\n getEventPoint,\n isPointInPolygon,\n} from \"./utils/polygon.ts\";\n\nconst TagName = \"div\" satisfies ElementType;\ntype TagName = typeof TagName;\ntype HTMLType = HTMLElementTagNameMap[TagName];\n\nfunction isMovingOnHovercard(\n target: Node | null | undefined,\n card: HTMLElement,\n anchor: HTMLElement | null,\n nested?: HTMLElement[],\n) {\n // The hovercard element has focus so we should keep it visible.\n if (hasFocusWithin(card)) return true;\n if (!target) return false;\n // The mouse is moving on an element inside the hovercard.\n if (contains(card, target)) return true;\n // The mouse is moving on an element inside the anchor element.\n if (anchor && contains(anchor, target)) return true;\n // The mouse is moving on an element inside a nested hovercard.\n if (nested?.some((card) => hasFocusWithin(card) || contains(card, target))) {\n return true;\n }\n return false;\n}\n\n// When the hovercard element has focus, we should move focus back to the anchor\n// element when the hovercard gets hidden (or unmounted).\nfunction useAutoFocusOnHide({\n store,\n ...props\n}: HovercardProps & { store: HovercardStore }) {\n const [autoFocusOnHide, setAutoFocusOnHide] = useState(false);\n const mounted = useStoreState(store, \"mounted\");\n\n // Resets autoFocusOnHide\n useEffect(() => {\n if (!mounted) {\n setAutoFocusOnHide(false);\n }\n }, [mounted]);\n\n const onFocusProp = props.onFocus;\n\n const onFocus = useEvent((event: FocusEvent<HTMLType>) => {\n onFocusProp?.(event);\n if (event.defaultPrevented) return;\n setAutoFocusOnHide(true);\n });\n\n // TODO: Maybe use state.anchorElement directly?\n const finalFocusRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n return sync(store, [\"anchorElement\"], (state) => {\n finalFocusRef.current = state.anchorElement;\n });\n }, [store]);\n\n props = {\n autoFocusOnHide,\n finalFocus: finalFocusRef,\n ...props,\n onFocus,\n };\n\n return props;\n}\n\nconst NestedHovercardContext = createContext<\n ((element: HTMLElement) => () => void) | null\n>(null);\n\n/**\n * Returns props to create a `Hovercard` component.\n * @see https://ariakit.com/components/hovercard\n * @example\n * ```jsx\n * const store = useHovercardStore();\n * const props = useHovercard({ store });\n * <HovercardAnchor store={store}>@username</HovercardAnchor>\n * <Role {...props}>Details</Role>\n * ```\n */\nexport const useHovercard = createHook<TagName, HovercardOptions>(\n function useHovercard({\n store,\n modal = false,\n portal = modal,\n hideOnEscape = true,\n hideOnHoverOutside = true,\n disablePointerEventsOnApproach = !!hideOnHoverOutside,\n ...props\n }) {\n const context = useHovercardProviderContext();\n store = store || context;\n\n invariant(\n store,\n process.env.NODE_ENV !== \"production\" &&\n \"Hovercard must receive a `store` prop or be wrapped in a HovercardProvider component.\",\n );\n\n const ref = useRef<HTMLType>(null);\n const [nestedHovercards, setNestedHovercards] = useState<HTMLElement[]>([]);\n const hideTimeoutRef = useRef(0);\n const enterPointRef = useRef<Point | null>(null);\n const { portalRef, domReady } = usePortalRef(portal, props.portalRef);\n\n const isMouseMoving = useIsMouseMoving();\n\n const mayHideOnHoverOutside = !!hideOnHoverOutside;\n const hideOnHoverOutsideProp = useBooleanEvent(hideOnHoverOutside);\n const mayDisablePointerEvents = !!disablePointerEventsOnApproach;\n const disablePointerEventsProp = useBooleanEvent(\n disablePointerEventsOnApproach,\n );\n\n const open = useStoreState(store, \"open\");\n const mounted = useStoreState(store, \"mounted\");\n\n // Checks whether the mouse is moving toward the hovercard. If not, hide the\n // card after a short delay (hideTimeout).\n useEffect(() => {\n if (!domReady) return;\n if (!mounted) return;\n if (!mayHideOnHoverOutside && !mayDisablePointerEvents) return;\n const element = ref.current;\n if (!element) return;\n const onMouseMove = (event: MouseEvent) => {\n if (!store) return;\n if (!isMouseMoving()) return;\n const { anchorElement, hideTimeout, timeout } = store.getState();\n const enterPoint = enterPointRef.current;\n const [target] = event.composedPath() as Node[];\n const anchor = anchorElement;\n // Checks whether the hovercard element has focus or the mouse is moving\n // through valid hovercard elements.\n if (isMovingOnHovercard(target, element, anchor, nestedHovercards)) {\n // While the mouse is moving over the anchor element while the hover\n // card is open, keep track of the mouse position so we can use the\n // last point before the mouse leaves the anchor element.\n enterPointRef.current =\n target && anchor && contains(anchor, target)\n ? getEventPoint(event)\n : null;\n window.clearTimeout(hideTimeoutRef.current);\n hideTimeoutRef.current = 0;\n return;\n }\n // If there's already a scheduled timeout to hide the hovercard, we do\n // nothing.\n if (hideTimeoutRef.current) return;\n // Enter point will be null when the user hovers over the hovercard\n // element.\n if (enterPoint) {\n const currentPoint = getEventPoint(event);\n const polygon = getElementPolygon(element, enterPoint);\n // If the current event's mouse position is inside the transit\n // polygon, this means that the mouse is moving toward the hover card,\n // so we disable this event. This is necessary because the mousemove\n // event may trigger focus on other elements and close the hovercard.\n if (isPointInPolygon(currentPoint, polygon)) {\n // Refreshes the enter point.\n enterPointRef.current = currentPoint;\n if (!disablePointerEventsProp(event)) return;\n event.preventDefault();\n event.stopPropagation();\n return;\n }\n }\n if (!hideOnHoverOutsideProp(event)) return;\n // Otherwise, hide the hovercard after a short delay (hideTimeout).\n hideTimeoutRef.current = window.setTimeout(() => {\n hideTimeoutRef.current = 0;\n store?.hide();\n }, hideTimeout ?? timeout);\n };\n return chain(addGlobalEventListener(\"mousemove\", onMouseMove, true), () =>\n clearTimeout(hideTimeoutRef.current),\n );\n }, [\n store,\n isMouseMoving,\n domReady,\n mounted,\n mayHideOnHoverOutside,\n mayDisablePointerEvents,\n nestedHovercards,\n disablePointerEventsProp,\n hideOnHoverOutsideProp,\n ]);\n\n // Disable mouse events while the mouse is moving toward the hovercard. This\n // is necessary because these events may trigger focus on other elements and\n // close the hovercard while the user is moving the mouse toward it.\n useEffect(() => {\n if (!domReady) return;\n if (!mounted) return;\n if (!mayDisablePointerEvents) return;\n const disableEvent = (event: MouseEvent) => {\n const element = ref.current;\n if (!element) return;\n const enterPoint = enterPointRef.current;\n if (!enterPoint) return;\n const polygon = getElementPolygon(element, enterPoint);\n if (isPointInPolygon(getEventPoint(event), polygon)) {\n if (!disablePointerEventsProp(event)) return;\n event.preventDefault();\n event.stopPropagation();\n }\n };\n return chain(\n // Note: we may need to add pointer events here in the future.\n addGlobalEventListener(\"mouseenter\", disableEvent, true),\n addGlobalEventListener(\"mouseover\", disableEvent, true),\n addGlobalEventListener(\"mouseout\", disableEvent, true),\n addGlobalEventListener(\"mouseleave\", disableEvent, true),\n );\n }, [domReady, mounted, mayDisablePointerEvents, disablePointerEventsProp]);\n\n // The autoFocusOnShow state will be set to true when the hovercard\n // disclosure element is clicked. We have to reset it to false when the\n // hovercard element gets hidden.\n useEffect(() => {\n if (!domReady) return;\n if (open) return;\n store?.setAutoFocusOnShow(false);\n }, [store, domReady, open]);\n\n // On unmount as well.\n const openRef = useLiveRef(open);\n useEffect(() => {\n if (!domReady) return;\n return () => {\n // oxlint-disable-next-line exhaustive-deps\n if (!openRef.current) {\n store?.setAutoFocusOnShow(false);\n }\n };\n // This cleanup intentionally reads the live ref so it can observe the\n // latest open state at unmount time.\n // oxlint-disable-next-line exhaustive-deps\n }, [store, domReady]);\n\n const registerOnParent = useContext(NestedHovercardContext);\n\n // Register the hovercard as a nested hovercard on the parent hovercard if\n // it's not a modal, is portal and is mounted. We don't need to register\n // non-portal hovercards because they will be captured by the contains\n // function in the isMovingOnHovercard function above. This must be a layout\n // effect so we don't lose mouse move events right after the nested\n // hovercard has been mounted (for example, a submenu that's overlapping its\n // menu button and we keep moving the mouse while the submenu is due to\n // open).\n useSafeLayoutEffect(() => {\n if (modal) return;\n if (!portal) return;\n if (!mounted) return;\n if (!domReady) return;\n const element = ref.current;\n if (!element) return;\n return registerOnParent?.(element);\n }, [modal, portal, mounted, domReady]);\n\n const registerNestedHovercard = useCallback(\n (element: any) => {\n setNestedHovercards((prevElements) => [...prevElements, element]);\n const parentUnregister = registerOnParent?.(element);\n return () => {\n setNestedHovercards((prevElements) =>\n prevElements.filter((item) => item !== element),\n );\n parentUnregister?.();\n };\n },\n [registerOnParent],\n );\n\n props = useWrapElement(\n props,\n (element) => (\n <HovercardScopedContextProvider value={store}>\n <NestedHovercardContext.Provider value={registerNestedHovercard}>\n {element}\n </NestedHovercardContext.Provider>\n </HovercardScopedContextProvider>\n ),\n [store, registerNestedHovercard],\n );\n\n props = {\n ...props,\n ref: useMergeRefs(ref, props.ref),\n };\n\n props = useAutoFocusOnHide({ store, ...props });\n\n // If the hovercard is modal, we should always autoFocus on show.\n const autoFocusOnShow = useStoreState(\n store,\n (state) => modal || state.autoFocusOnShow,\n );\n\n props = usePopover({\n store,\n modal,\n portal,\n autoFocusOnShow,\n ...props,\n portalRef,\n hideOnEscape(event) {\n if (isFalsyBooleanCallback(hideOnEscape, event)) return false;\n // Hide again on the next frame to avoid the popover being shown again\n // when the user presses the escape key and trigger focusVisible on the\n // anchor element (which is the case of tooltip anchor).\n requestAnimationFrame(() => {\n requestAnimationFrame(() => {\n store?.hide();\n });\n });\n return true;\n },\n });\n\n return props;\n },\n);\n\n/**\n * Renders a hovercard element, which is a popover that's usually made visible\n * by hovering the mouse cursor over a\n * [`HovercardAnchor`](https://ariakit.com/reference/hovercard-anchor).\n * @see https://ariakit.com/components/hovercard\n * @example\n * ```jsx {3}\n * <HovercardProvider>\n * <HovercardAnchor>@username</HovercardAnchor>\n * <Hovercard>Details</Hovercard>\n * </HovercardProvider>\n * ```\n */\nexport const Hovercard = createDialogComponent(\n forwardRef(function Hovercard(props: HovercardProps) {\n const htmlProps = useHovercard(props);\n return createElement(TagName, htmlProps);\n }),\n useHovercardProviderContext,\n);\n\nexport interface HovercardOptions<\n T extends ElementType = TagName,\n> extends PopoverOptions<T> {\n /**\n * Object returned by the\n * [`useHovercardStore`](https://ariakit.com/reference/use-hovercard-store)\n * hook. If not provided, the closest\n * [`HovercardProvider`](https://ariakit.com/reference/hovercard-provider)\n * component's context will be used.\n */\n store?: HovercardStore;\n /**\n * Determines whether the popover should hide when the mouse leaves the\n * popover or the anchor element and there's no _hover intent_, meaning, the\n * mouse isn't moving toward the popover.\n *\n * This can be either a boolean or a callback receiving the mouse move event\n * that initiated the behavior. The callback should return a boolean.\n *\n * **Note**: This behavior won't be triggered when the popover or any of its\n * descendants are in focus.\n * @default true\n */\n hideOnHoverOutside?: BooleanOrCallback<MouseEvent>;\n /**\n * Determines if the pointer events outside of the popover and its anchor\n * element should be disabled during _hover intent_, that is, when the mouse\n * is moving toward the popover.\n *\n * This is required as these external events may trigger focus on other\n * elements and close the popover while the user is attempting to hover over\n * it.\n *\n * This can be either a boolean or a callback receiving the mouse event\n * happening during hover intent. The callback should return a boolean.\n * @default true\n */\n disablePointerEventsOnApproach?: BooleanOrCallback<MouseEvent>;\n /**\n * @default false\n */\n modal?: PopoverOptions<T>[\"modal\"];\n}\n\nexport type HovercardProps<T extends ElementType = TagName> = Props<\n T,\n HovercardOptions<T>\n>;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PopoverArrowOptions } from "../popover/popover-arrow.js";
|
|
2
|
-
import { t as MenuStore } from "../menu-store-
|
|
2
|
+
import { t as MenuStore } from "../menu-store-BpTJdcL8.js";
|
|
3
3
|
import { Props } from "@ariakit/react-utils";
|
|
4
4
|
import { ElementType } from "react";
|
|
5
5
|
|
|
@@ -35,7 +35,7 @@ declare const useMenuArrow: import("@ariakit/react-utils").Hook<"div", MenuArrow
|
|
|
35
35
|
* </MenuProvider>
|
|
36
36
|
* ```
|
|
37
37
|
*/
|
|
38
|
-
declare const MenuArrow: (props: MenuArrowProps) => import("react").ReactElement<
|
|
38
|
+
declare const MenuArrow: (props: MenuArrowProps) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
39
39
|
interface MenuArrowOptions<T extends ElementType = TagName> extends PopoverArrowOptions<T> {
|
|
40
40
|
/**
|
|
41
41
|
* Object returned by the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-arrow.d.ts","names":["Props","ElementType","PopoverArrowOptions","MenuStore","TagName","useMenuArrow","MenuArrowOptions","Hook","MenuArrow","MenuArrowProps","props","ReactElement","JSXElementConstructor","T","store"],"sources":["../../src/menu/menu-arrow.d.ts"],"mappings":";;;;;;cAIcI,OAAAA;AAAAA,KACTA,OAAAA,UAAiBA,OAAO;AAFoB;;;;AAC5B;AAAA;;;;AACQ;AAc7B;;;AAhBiD,cAgB5BC,YAAAA,iCAA6CE,IAAAA,QAAYD,gBAAgB;AAAA;AAgB9F;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"menu-arrow.d.ts","names":["Props","ElementType","PopoverArrowOptions","MenuStore","TagName","useMenuArrow","MenuArrowOptions","Hook","MenuArrow","MenuArrowProps","props","ReactElement","JSXElementConstructor","T","store"],"sources":["../../src/menu/menu-arrow.d.ts"],"mappings":";;;;;;cAIcI,OAAAA;AAAAA,KACTA,OAAAA,UAAiBA,OAAO;AAFoB;;;;AAC5B;AAAA;;;;AACQ;AAc7B;;;AAhBiD,cAgB5BC,YAAAA,iCAA6CE,IAAAA,QAAYD,gBAAgB;AAAA;AAgB9F;;;;;;;;;AAA+I;AAC/I;;;;AAjB8F,cAgBzEE,SAAAA,GAAYE,KAAAA,EAAOD,cAAc,qBAAqBE,YAAAA,mCAA+CC,qBAAAA;AAAAA,UACzGN,gBAAAA,WAA2BL,WAAAA,GAAcG,OAAAA,UAAiBF,mBAAAA,CAAoBW,CAAAA;EAQnFV;;;;;;;EAARW,KAAAA,GAAQX,SAAAA;AAAAA;AAAAA,KAEAM,cAAAA,WAAyBR,WAAAA,GAAcG,OAAAA,IAAWJ,KAAAA,CAAMa,CAAAA,EAAGP,gBAAAA,CAAiBO,CAAAA"}
|
|
@@ -32,7 +32,7 @@ import { jsx } from "react/jsx-runtime";
|
|
|
32
32
|
*/
|
|
33
33
|
function MenuBarProvider(props = {}) {
|
|
34
34
|
useEffect(() => {
|
|
35
|
-
console.warn("MenuBarProvider is deprecated. Use MenubarProvider instead.", "See https://ariakit.com/reference/menubar-provider");
|
|
35
|
+
if (process.env.NODE_ENV !== "production") console.warn("MenuBarProvider is deprecated. Use MenubarProvider instead.", "See https://ariakit.com/reference/menubar-provider");
|
|
36
36
|
}, []);
|
|
37
37
|
return /* @__PURE__ */ jsx(MenubarProvider, { ...props });
|
|
38
38
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-bar-provider.js","names":[],"sources":["../../src/menu/menu-bar-provider.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport type { MenubarProviderProps } from \"../menubar/menubar-provider.tsx\";\nimport { MenubarProvider } from \"../menubar/menubar-provider.tsx\";\n\n/**\n * Provides a menubar store to MenuBar components.\n * @deprecated\n * Use [`MenubarProvider`](https://ariakit.com/reference/menubar-provider)\n * instead.\n * @example\n * ```jsx\n * <MenuBarProvider>\n * <MenuBar>\n * <MenuProvider>\n * <MenuItem render={<MenuButton />}>File</MenuItem>\n * <Menu>\n * <MenuItem>New File</MenuItem>\n * <MenuItem>New Window</MenuItem>\n * </Menu>\n * </MenuProvider>\n * <MenuProvider>\n * <MenuItem render={<MenuButton />}>Edit</MenuItem>\n * <Menu>\n * <MenuItem>Undo</MenuItem>\n * <MenuItem>Redo</MenuItem>\n * </Menu>\n * </MenuProvider>\n * </MenuBar>\n * </MenuBarProvider>\n * ```\n */\nexport function MenuBarProvider(props: MenuBarProviderProps = {}) {\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n \"MenuBarProvider is deprecated. Use MenubarProvider instead.\",\n \"See https://ariakit.com/reference/menubar-provider\",\n );\n }\n }, []);\n return <MenubarProvider {...props} />;\n}\n\nexport interface MenuBarProviderProps extends MenubarProviderProps {}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAgCE,gBAAgB,QAAA,CAAA,GAAA;
|
|
1
|
+
{"version":3,"file":"menu-bar-provider.js","names":[],"sources":["../../src/menu/menu-bar-provider.tsx"],"sourcesContent":["import { useEffect } from \"react\";\nimport type { MenubarProviderProps } from \"../menubar/menubar-provider.tsx\";\nimport { MenubarProvider } from \"../menubar/menubar-provider.tsx\";\n\n/**\n * Provides a menubar store to MenuBar components.\n * @deprecated\n * Use [`MenubarProvider`](https://ariakit.com/reference/menubar-provider)\n * instead.\n * @example\n * ```jsx\n * <MenuBarProvider>\n * <MenuBar>\n * <MenuProvider>\n * <MenuItem render={<MenuButton />}>File</MenuItem>\n * <Menu>\n * <MenuItem>New File</MenuItem>\n * <MenuItem>New Window</MenuItem>\n * </Menu>\n * </MenuProvider>\n * <MenuProvider>\n * <MenuItem render={<MenuButton />}>Edit</MenuItem>\n * <Menu>\n * <MenuItem>Undo</MenuItem>\n * <MenuItem>Redo</MenuItem>\n * </Menu>\n * </MenuProvider>\n * </MenuBar>\n * </MenuBarProvider>\n * ```\n */\nexport function MenuBarProvider(props: MenuBarProviderProps = {}) {\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n \"MenuBarProvider is deprecated. Use MenubarProvider instead.\",\n \"See https://ariakit.com/reference/menubar-provider\",\n );\n }\n }, []);\n return <MenubarProvider {...props} />;\n}\n\nexport interface MenuBarProviderProps extends MenubarProviderProps {}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAgCE,gBAAgB,QAAA,CAAA,GAAA;iBACF;EAMd,IAAK,QAAA,IAAA,aAAA,cAAA,QAAA,KAAA,+DAAA,oDAAA;CACL,GAAA,CAAA,CAAA;CACF,OAAA,oBAAA,iBAAA,EAAA,GAAA,MAAA,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as MenubarStoreState, i as MenubarStoreProps, n as MenubarStoreFunctions, r as MenubarStoreOptions, t as MenubarStore } from "../menubar-store-
|
|
1
|
+
import { a as MenubarStoreState, i as MenubarStoreProps, n as MenubarStoreFunctions, r as MenubarStoreOptions, t as MenubarStore } from "../menubar-store-C553OKBw.js";
|
|
2
2
|
import * as Core from "@ariakit/components/menu/menu-bar-store";
|
|
3
3
|
|
|
4
4
|
//#region src/menu/menu-bar-store.d.ts
|
|
@@ -10,8 +10,8 @@ declare function useMenuBarStoreProps<T extends Core.MenuBarStore>(store: T, upd
|
|
|
10
10
|
* instead.
|
|
11
11
|
* @example
|
|
12
12
|
* ```jsx
|
|
13
|
-
* const
|
|
14
|
-
* <MenuBar store={
|
|
13
|
+
* const menubar = useMenuBarStore();
|
|
14
|
+
* <MenuBar store={menubar} />
|
|
15
15
|
* ```
|
|
16
16
|
*/
|
|
17
17
|
declare function useMenuBarStore(props?: MenuBarStoreProps): MenuBarStore;
|
|
@@ -12,13 +12,13 @@ function useMenuBarStoreProps(store, update, props) {
|
|
|
12
12
|
* instead.
|
|
13
13
|
* @example
|
|
14
14
|
* ```jsx
|
|
15
|
-
* const
|
|
16
|
-
* <MenuBar store={
|
|
15
|
+
* const menubar = useMenuBarStore();
|
|
16
|
+
* <MenuBar store={menubar} />
|
|
17
17
|
* ```
|
|
18
18
|
*/
|
|
19
19
|
function useMenuBarStore(props = {}) {
|
|
20
20
|
useEffect(() => {
|
|
21
|
-
console.warn("useMenuBarStore is deprecated. Use useMenubarStore instead.", "See https://ariakit.com/reference/use-menubar-store");
|
|
21
|
+
if (process.env.NODE_ENV !== "production") console.warn("useMenuBarStore is deprecated. Use useMenubarStore instead.", "See https://ariakit.com/reference/use-menubar-store");
|
|
22
22
|
}, []);
|
|
23
23
|
return useMenubarStore(props);
|
|
24
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-bar-store.js","names":[],"sources":["../../src/menu/menu-bar-store.ts"],"sourcesContent":["import type * as Core from \"@ariakit/components/menu/menu-bar-store\";\nimport { useEffect } from \"react\";\nimport type {\n MenubarStore,\n MenubarStoreFunctions,\n MenubarStoreOptions,\n MenubarStoreProps,\n MenubarStoreState,\n} from \"../menubar/menubar-store.ts\";\nimport {\n useMenubarStore,\n useMenubarStoreProps,\n} from \"../menubar/menubar-store.ts\";\n\nexport function useMenuBarStoreProps<T extends Core.MenuBarStore>(\n store: T,\n update: () => void,\n props: MenuBarStoreProps,\n) {\n return useMenubarStoreProps(store, update, props);\n}\n\n/**\n * Creates a menu bar store.\n * @deprecated\n * Use [`useMenubarStore`](https://ariakit.com/reference/use-menubar-store)\n * instead.\n * @example\n * ```jsx\n * const
|
|
1
|
+
{"version":3,"file":"menu-bar-store.js","names":[],"sources":["../../src/menu/menu-bar-store.ts"],"sourcesContent":["import type * as Core from \"@ariakit/components/menu/menu-bar-store\";\nimport { useEffect } from \"react\";\nimport type {\n MenubarStore,\n MenubarStoreFunctions,\n MenubarStoreOptions,\n MenubarStoreProps,\n MenubarStoreState,\n} from \"../menubar/menubar-store.ts\";\nimport {\n useMenubarStore,\n useMenubarStoreProps,\n} from \"../menubar/menubar-store.ts\";\n\nexport function useMenuBarStoreProps<T extends Core.MenuBarStore>(\n store: T,\n update: () => void,\n props: MenuBarStoreProps,\n) {\n return useMenubarStoreProps(store, update, props);\n}\n\n/**\n * Creates a menu bar store.\n * @deprecated\n * Use [`useMenubarStore`](https://ariakit.com/reference/use-menubar-store)\n * instead.\n * @example\n * ```jsx\n * const menubar = useMenuBarStore();\n * <MenuBar store={menubar} />\n * ```\n */\nexport function useMenuBarStore(props: MenuBarStoreProps = {}): MenuBarStore {\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n \"useMenuBarStore is deprecated. Use useMenubarStore instead.\",\n \"See https://ariakit.com/reference/use-menubar-store\",\n );\n }\n }, []);\n return useMenubarStore(props);\n}\n\nexport interface MenuBarStoreState extends MenubarStoreState {}\n\nexport interface MenuBarStoreFunctions extends MenubarStoreFunctions {}\n\nexport interface MenuBarStoreOptions extends MenubarStoreOptions {}\n\nexport interface MenuBarStoreProps extends MenubarStoreProps {}\n\nexport interface MenuBarStore extends MenubarStore {}\n"],"mappings":";;;;SAmBS,qBAAqB,OAAO,QAAQ,OAAK;CAClD,OAAA,qBAAA,OAAA,QAAA,KAAA;;;;;;;;;;;;;SAcE,gBAAgB,QAAA,CAAA,GAAA;iBACF;EAMd,IAAK,QAAA,IAAA,aAAA,cAAA,QAAA,KAAA,+DAAA,qDAAA;CACL,GAAA,CAAA,CAAA;CACF,OAAA,gBAAA,KAAA"}
|
package/dist/menu/menu-bar.d.ts
CHANGED
|
@@ -53,7 +53,7 @@ declare const useMenuBar: import("@ariakit/react-utils").Hook<"div", MenuBarOpti
|
|
|
53
53
|
* </MenuBarProvider>
|
|
54
54
|
* ```
|
|
55
55
|
*/
|
|
56
|
-
declare const MenuBar: (props: MenuBarProps) => import("react").ReactElement<
|
|
56
|
+
declare const MenuBar: (props: MenuBarProps) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
57
57
|
interface MenuBarOptions<T extends ElementType = TagName> extends MenubarOptions<T> {}
|
|
58
58
|
type MenuBarProps<T extends ElementType = TagName> = Props<T, MenuBarOptions<T>>;
|
|
59
59
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-bar.d.ts","names":["Props","ElementType","MenubarOptions","TagName","useMenuBar","MenuBarOptions","Hook","MenuBar","MenuBarProps","props","ReactElement","JSXElementConstructor","T"],"sources":["../../src/menu/menu-bar.d.ts"],"mappings":";;;;;cAGcG,OAAAA;AAAAA,KACTA,OAAAA,UAAiBA,OAAO;AAFgC;;;;AACxC;AAAA;;;;AACQ;AAqB7B;;;;AAA0F;AA4B1F;;;;;AAnD6D,cAuBxCC,UAAAA,iCAA2CE,IAAAA,QAAYD,cAAc;;;;
|
|
1
|
+
{"version":3,"file":"menu-bar.d.ts","names":["Props","ElementType","MenubarOptions","TagName","useMenuBar","MenuBarOptions","Hook","MenuBar","MenuBarProps","props","ReactElement","JSXElementConstructor","T"],"sources":["../../src/menu/menu-bar.d.ts"],"mappings":";;;;;cAGcG,OAAAA;AAAAA,KACTA,OAAAA,UAAiBA,OAAO;AAFgC;;;;AACxC;AAAA;;;;AACQ;AAqB7B;;;;AAA0F;AA4B1F;;;;;AAnD6D,cAuBxCC,UAAAA,iCAA2CE,IAAAA,QAAYD,cAAc;;;;AA4BiD;AAC3I;;;;;;;;;;;;;;;AAAyF;AAEzF;;;;;;;cAHqBE,OAAAA,GAAUE,KAAAA,EAAOD,YAAY,qBAAqBE,YAAAA,mCAA+CC,qBAAAA;AAAAA,UACrGN,cAAAA,WAAyBJ,WAAAA,GAAcE,OAAAA,UAAiBD,cAAAA,CAAeU,CAAAA;AAAAA,KAE5EJ,YAAAA,WAAuBP,WAAAA,GAAcE,OAAAA,IAAWH,KAAAA,CAAMY,CAAAA,EAAGP,cAAAA,CAAeO,CAAAA"}
|
package/dist/menu/menu-bar.js
CHANGED
|
@@ -26,7 +26,7 @@ const TagName = "div";
|
|
|
26
26
|
*/
|
|
27
27
|
const useMenuBar = createHook(function useMenuBar(props) {
|
|
28
28
|
useEffect(() => {
|
|
29
|
-
console.warn("MenuBar is deprecated. Use Menubar instead.", "See https://ariakit.com/reference/menubar");
|
|
29
|
+
if (process.env.NODE_ENV !== "production") console.warn("MenuBar is deprecated. Use Menubar instead.", "See https://ariakit.com/reference/menubar");
|
|
30
30
|
}, []);
|
|
31
31
|
return useMenubar(props);
|
|
32
32
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-bar.js","names":[],"sources":["../../src/menu/menu-bar.tsx"],"sourcesContent":["import { createElement, createHook, forwardRef } from \"@ariakit/react-utils\";\nimport type { Props } from \"@ariakit/react-utils\";\nimport type { ElementType } from \"react\";\nimport { useEffect } from \"react\";\nimport type { MenubarOptions } from \"../menubar/menubar.tsx\";\nimport { useMenubar } from \"../menubar/menubar.tsx\";\n\nconst TagName = \"div\" satisfies ElementType;\ntype TagName = typeof TagName;\n\n/**\n * Returns props to create a `MenuBar` component.\n * @deprecated Use `useMenubar` instead.\n * @example\n * ```jsx\n * const store = useMenuBarStore();\n * const menuBarProps = useMenuBar({ store });\n * const fileProps = useMenuItem({ store });\n * const fileMenu = useMenuStore();\n * <Role {...menuBarProps}>\n * <MenuButton {...fileProps} store={fileMenu}>\n * File\n * </MenuButton>\n * <Menu store={fileMenu}>\n * <MenuItem>New File</MenuItem>\n * <MenuItem>New Window</MenuItem>\n * </Menu>\n * </Role>\n * ```\n */\nexport const useMenuBar = createHook<TagName, MenuBarOptions>(\n function useMenuBar(props) {\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n \"MenuBar is deprecated. Use Menubar instead.\",\n \"See https://ariakit.com/reference/menubar\",\n );\n }\n }, []);\n return useMenubar(props);\n },\n);\n\n/**\n * Renders a menu bar that may contain a group of menu items that control other\n * submenus.\n * @deprecated\n * Use [`Menubar`](https://ariakit.com/reference/menubar) instead.\n * @example\n * ```jsx\n * <MenuBarProvider>\n * <MenuBar>\n * <MenuProvider>\n * <MenuItem render={<MenuButton />}>File</MenuItem>\n * <Menu>\n * <MenuItem>New File</MenuItem>\n * <MenuItem>New Window</MenuItem>\n * </Menu>\n * </MenuProvider>\n * <MenuProvider>\n * <MenuItem render={<MenuButton />}>Edit</MenuItem>\n * <Menu>\n * <MenuItem>Undo</MenuItem>\n * <MenuItem>Redo</MenuItem>\n * </Menu>\n * </MenuProvider>\n * </MenuBar>\n * </MenuBarProvider>\n * ```\n */\nexport const MenuBar = forwardRef(function MenuBar(props: MenuBarProps) {\n const htmlProps = useMenuBar(props);\n return createElement(TagName, htmlProps);\n});\n\nexport interface MenuBarOptions<\n T extends ElementType = TagName,\n> extends MenubarOptions<T> {}\n\nexport type MenuBarProps<T extends ElementType = TagName> = Props<\n T,\n MenuBarOptions<T>\n>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;MAgCI,aAAgB,WAAA,SAAA,WAAA,OAAA;
|
|
1
|
+
{"version":3,"file":"menu-bar.js","names":[],"sources":["../../src/menu/menu-bar.tsx"],"sourcesContent":["import { createElement, createHook, forwardRef } from \"@ariakit/react-utils\";\nimport type { Props } from \"@ariakit/react-utils\";\nimport type { ElementType } from \"react\";\nimport { useEffect } from \"react\";\nimport type { MenubarOptions } from \"../menubar/menubar.tsx\";\nimport { useMenubar } from \"../menubar/menubar.tsx\";\n\nconst TagName = \"div\" satisfies ElementType;\ntype TagName = typeof TagName;\n\n/**\n * Returns props to create a `MenuBar` component.\n * @deprecated Use `useMenubar` instead.\n * @example\n * ```jsx\n * const store = useMenuBarStore();\n * const menuBarProps = useMenuBar({ store });\n * const fileProps = useMenuItem({ store });\n * const fileMenu = useMenuStore();\n * <Role {...menuBarProps}>\n * <MenuButton {...fileProps} store={fileMenu}>\n * File\n * </MenuButton>\n * <Menu store={fileMenu}>\n * <MenuItem>New File</MenuItem>\n * <MenuItem>New Window</MenuItem>\n * </Menu>\n * </Role>\n * ```\n */\nexport const useMenuBar = createHook<TagName, MenuBarOptions>(\n function useMenuBar(props) {\n useEffect(() => {\n if (process.env.NODE_ENV !== \"production\") {\n console.warn(\n \"MenuBar is deprecated. Use Menubar instead.\",\n \"See https://ariakit.com/reference/menubar\",\n );\n }\n }, []);\n return useMenubar(props);\n },\n);\n\n/**\n * Renders a menu bar that may contain a group of menu items that control other\n * submenus.\n * @deprecated\n * Use [`Menubar`](https://ariakit.com/reference/menubar) instead.\n * @example\n * ```jsx\n * <MenuBarProvider>\n * <MenuBar>\n * <MenuProvider>\n * <MenuItem render={<MenuButton />}>File</MenuItem>\n * <Menu>\n * <MenuItem>New File</MenuItem>\n * <MenuItem>New Window</MenuItem>\n * </Menu>\n * </MenuProvider>\n * <MenuProvider>\n * <MenuItem render={<MenuButton />}>Edit</MenuItem>\n * <Menu>\n * <MenuItem>Undo</MenuItem>\n * <MenuItem>Redo</MenuItem>\n * </Menu>\n * </MenuProvider>\n * </MenuBar>\n * </MenuBarProvider>\n * ```\n */\nexport const MenuBar = forwardRef(function MenuBar(props: MenuBarProps) {\n const htmlProps = useMenuBar(props);\n return createElement(TagName, htmlProps);\n});\n\nexport interface MenuBarOptions<\n T extends ElementType = TagName,\n> extends MenubarOptions<T> {}\n\nexport type MenuBarProps<T extends ElementType = TagName> = Props<\n T,\n MenuBarOptions<T>\n>;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;MAgCI,aAAgB,WAAA,SAAA,WAAA,OAAA;iBACF;EAMd,IAAK,QAAA,IAAA,aAAA,cAAA,QAAA,KAAA,+CAAA,2CAAA;CACL,GAAA,CAAA,CAAA;CAEJ,OAAA,WAAA,KAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MA+BE,UAAO,WAAc,SADH,QAAW,OACU;CACxC,OAAA,cAAA,SAAA,WAAA,KAAA,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as MenuStore } from "../menu-store-
|
|
1
|
+
import { t as MenuStore } from "../menu-store-BpTJdcL8.js";
|
|
2
2
|
import { PopoverDisclosureArrowOptions } from "../popover/popover-disclosure-arrow.js";
|
|
3
3
|
import { Props } from "@ariakit/react-utils";
|
|
4
4
|
import { ElementType } from "react";
|
|
@@ -47,7 +47,7 @@ declare const useMenuButtonArrow: import("@ariakit/react-utils").Hook<"span", Me
|
|
|
47
47
|
* </MenuProvider>
|
|
48
48
|
* ```
|
|
49
49
|
*/
|
|
50
|
-
declare const MenuButtonArrow: (props: MenuButtonArrowProps) => import("react").ReactElement<
|
|
50
|
+
declare const MenuButtonArrow: (props: MenuButtonArrowProps) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
51
51
|
interface MenuButtonArrowOptions<T extends ElementType = TagName> extends PopoverDisclosureArrowOptions<T> {
|
|
52
52
|
/**
|
|
53
53
|
* Object returned by the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-button-arrow.d.ts","names":["Props","ElementType","PopoverDisclosureArrowOptions","MenuStore","TagName","useMenuButtonArrow","MenuButtonArrowOptions","Hook","MenuButtonArrow","MenuButtonArrowProps","props","ReactElement","JSXElementConstructor","T","store"],"sources":["../../src/menu/menu-button-arrow.d.ts"],"mappings":";;;;;;cAIcI,OAAAA;AAAAA,KACTA,OAAAA,UAAiBA,OAAO;AAFoB;;;;AAC5B;AAAA;;;;AACQ;AAkB7B;;;;AAA2G;AAwB3G;;AA5CiD,cAoB5BC,kBAAAA,iCAAmDE,IAAAA,SAAaD,sBAAsB;;;;;;;
|
|
1
|
+
{"version":3,"file":"menu-button-arrow.d.ts","names":["Props","ElementType","PopoverDisclosureArrowOptions","MenuStore","TagName","useMenuButtonArrow","MenuButtonArrowOptions","Hook","MenuButtonArrow","MenuButtonArrowProps","props","ReactElement","JSXElementConstructor","T","store"],"sources":["../../src/menu/menu-button-arrow.d.ts"],"mappings":";;;;;;cAIcI,OAAAA;AAAAA,KACTA,OAAAA,UAAiBA,OAAO;AAFoB;;;;AAC5B;AAAA;;;;AACQ;AAkB7B;;;;AAA2G;AAwB3G;;AA5CiD,cAoB5BC,kBAAAA,iCAAmDE,IAAAA,SAAaD,sBAAsB;;;;;;;AAwBgD;AAC3J;;;;;;;;;;;;;;;;cADqBE,eAAAA,GAAkBE,KAAAA,EAAOD,oBAAoB,qBAAqBE,YAAAA,mCAA+CC,qBAAAA;AAAAA,UACrHN,sBAAAA,WAAiCL,WAAAA,GAAcG,OAAAA,UAAiBF,6BAAAA,CAA8BW,CAAAA;EAS1F;AAErB;;;;;;;EAFIC,KAAAA,GAAQX,SAAAA;AAAAA;AAAAA,KAEAM,oBAAAA,WAA+BR,WAAAA,GAAcG,OAAAA,IAAWJ,KAAAA,CAAMa,CAAAA,EAAGP,sBAAAA,CAAuBO,CAAAA"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { PopoverDisclosureOptions } from "../popover/popover-disclosure.js";
|
|
2
|
-
import { n as CompositeTypeaheadOptions } from "../composite-typeahead-
|
|
2
|
+
import { n as CompositeTypeaheadOptions } from "../composite-typeahead-0euW43GU.js";
|
|
3
3
|
import { HovercardAnchorOptions } from "../hovercard/hovercard-anchor.js";
|
|
4
|
-
import { t as MenuStore } from "../menu-store-
|
|
4
|
+
import { t as MenuStore } from "../menu-store-BpTJdcL8.js";
|
|
5
5
|
import { Props } from "@ariakit/react-utils";
|
|
6
6
|
import { ElementType } from "react";
|
|
7
7
|
|
|
@@ -39,7 +39,7 @@ declare const useMenuButton: import("@ariakit/react-utils").Hook<TagName, MenuBu
|
|
|
39
39
|
* </MenuProvider>
|
|
40
40
|
* ```
|
|
41
41
|
*/
|
|
42
|
-
declare const MenuButton: (props: MenuButtonProps) => import("react").ReactElement<
|
|
42
|
+
declare const MenuButton: (props: MenuButtonProps) => import("react").ReactElement<unknown, string | import("react").JSXElementConstructor<any>>;
|
|
43
43
|
interface MenuButtonOptions<T extends ElementType = TagName> extends HovercardAnchorOptions<T>, PopoverDisclosureOptions<T>, CompositeTypeaheadOptions<T> {
|
|
44
44
|
/**
|
|
45
45
|
* Object returned by the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-button.d.ts","names":["Props","ElementType","CompositeTypeaheadOptions","HovercardAnchorOptions","PopoverDisclosureOptions","MenuStore","TagName","useMenuButton","MenuButtonOptions","Hook","MenuButton","MenuButtonProps","props","ReactElement","JSXElementConstructor","T","store","typeahead"],"sources":["../../src/menu/menu-button.d.ts"],"mappings":";;;;;;;;cAMcM,OAAAA;AAAAA,KACTA,OAAAA,UAAiBA,OAAO;AAFoB;;;;AAC5B;AAAA;;;;AACQ;AAe7B;;;;AAjBiD,cAiB5BC,aAAAA,iCAA8CE,IAAAA,CAAKH,OAAAA,EAASE,iBAAAA,CAAkBF,OAAAA;;;;;;;;;AAAO;AAiB1G;;;;;;;cAAqBI,UAAAA,GAAaE,KAAAA,EAAOD,eAAe,qBAAqBE,YAAAA
|
|
1
|
+
{"version":3,"file":"menu-button.d.ts","names":["Props","ElementType","CompositeTypeaheadOptions","HovercardAnchorOptions","PopoverDisclosureOptions","MenuStore","TagName","useMenuButton","MenuButtonOptions","Hook","MenuButton","MenuButtonProps","props","ReactElement","JSXElementConstructor","T","store","typeahead"],"sources":["../../src/menu/menu-button.d.ts"],"mappings":";;;;;;;;cAMcM,OAAAA;AAAAA,KACTA,OAAAA,UAAiBA,OAAO;AAFoB;;;;AAC5B;AAAA;;;;AACQ;AAe7B;;;;AAjBiD,cAiB5BC,aAAAA,iCAA8CE,IAAAA,CAAKH,OAAAA,EAASE,iBAAAA,CAAkBF,OAAAA;;;;;;;;;AAAO;AAiB1G;;;;;;;cAAqBI,UAAAA,GAAaE,KAAAA,EAAOD,eAAe,qBAAqBE,YAAAA,mCAA+CC,qBAAAA;AAAAA,UAC3GN,iBAAAA,WAA4BP,WAAAA,GAAcK,OAAAA,UAAiBH,sBAAAA,CAAuBY,CAAAA,GAAIX,wBAAAA,CAAyBW,CAAAA,GAAIb,yBAAAA,CAA0Ba,CAAAA;EADb;AACjJ;;;;;;EAQIC,KAAAA,GAAQX,SAAAA;EARkJU;;;;;;;;;;EAmB1JE,SAAAA;AAAAA;AAAAA,KAEQN,eAAAA,WAA0BV,WAAAA,GAAcK,OAAAA,IAAWN,KAAAA,CAAMe,CAAAA,EAAGP,iBAAAA,CAAkBO,CAAAA"}
|
package/dist/menu/menu-button.js
CHANGED
|
@@ -43,7 +43,7 @@ function hasActiveItem(items, excludeElement) {
|
|
|
43
43
|
const useMenuButton = createHook(function useMenuButton({ store, focusable, accessibleWhenDisabled, showOnHover, ...props }) {
|
|
44
44
|
const context = useMenuProviderContext();
|
|
45
45
|
store = store || context;
|
|
46
|
-
invariant(store, "MenuButton must receive a `store` prop or be wrapped in a MenuProvider component.");
|
|
46
|
+
invariant(store, process.env.NODE_ENV !== "production" && "MenuButton must receive a `store` prop or be wrapped in a MenuProvider component.");
|
|
47
47
|
const ref = useRef(null);
|
|
48
48
|
const parentMenu = store.parent;
|
|
49
49
|
const parentMenubar = store.menubar;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-button.js","names":[],"sources":["../../src/menu/menu-button.tsx"],"sourcesContent":["import { useStoreState } from \"@ariakit/react-store\";\nimport {\n useEvent,\n useId,\n useMergeRefs,\n useWrapElement,\n createElement,\n createHook,\n forwardRef,\n} from \"@ariakit/react-utils\";\nimport type { Props } from \"@ariakit/react-utils\";\nimport {\n getPopupItemRole,\n getPopupRole,\n disabledFromElement,\n disabledFromProps,\n invariant,\n} from \"@ariakit/utils\";\nimport type { ElementType, FocusEvent, KeyboardEvent, MouseEvent } from \"react\";\nimport { useRef } from \"react\";\nimport type { CompositeTypeaheadOptions } from \"../composite/composite-typeahead.tsx\";\nimport { useCompositeTypeahead } from \"../composite/composite-typeahead.tsx\";\nimport type { HovercardAnchorOptions } from \"../hovercard/hovercard-anchor.tsx\";\nimport { useHovercardAnchor } from \"../hovercard/hovercard-anchor.tsx\";\nimport type { PopoverDisclosureOptions } from \"../popover/popover-disclosure.tsx\";\nimport { usePopoverDisclosure } from \"../popover/popover-disclosure.tsx\";\nimport { Role } from \"../role/role.tsx\";\nimport {\n MenuContextProvider,\n useMenuProviderContext,\n} from \"./menu-context.tsx\";\nimport type { MenuStore, MenuStoreState } from \"./menu-store.ts\";\n\nconst TagName = \"button\" satisfies ElementType;\ntype TagName = typeof TagName | \"div\";\ntype HTMLType = HTMLElementTagNameMap[TagName];\ntype BasePlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nfunction getInitialFocus(event: KeyboardEvent, dir: BasePlacement) {\n const keyMap = {\n ArrowDown: dir === \"bottom\" || dir === \"top\" ? \"first\" : false,\n ArrowUp: dir === \"bottom\" || dir === \"top\" ? \"last\" : false,\n ArrowRight: dir === \"right\" ? \"first\" : false,\n ArrowLeft: dir === \"left\" ? \"first\" : false,\n } as const;\n return keyMap[event.key as keyof typeof keyMap];\n}\n\nfunction hasActiveItem(\n items?: MenuStoreState[\"items\"],\n excludeElement?: Element | null,\n) {\n return !!items?.some((item) => {\n if (!item.element) return false;\n if (item.element === excludeElement) return false;\n return item.element.getAttribute(\"aria-expanded\") === \"true\";\n });\n}\n\n/**\n * Returns props to create a `MenuButton` component.\n * @see https://ariakit.com/components/menu\n * @example\n * ```jsx\n * const store = useMenuStore();\n * const props = useMenuButton({ store });\n * <Role {...props}>Edit</Role>\n * <Menu store={store}>\n * <MenuItem>Undo</MenuItem>\n * <MenuItem>Redo</MenuItem>\n * </Menu>\n * ```\n */\nexport const useMenuButton = createHook<TagName, MenuButtonOptions>(\n function useMenuButton({\n store,\n focusable,\n accessibleWhenDisabled,\n showOnHover,\n ...props\n }) {\n const context = useMenuProviderContext();\n store = store || context;\n\n invariant(\n store,\n process.env.NODE_ENV !== \"production\" &&\n \"MenuButton must receive a `store` prop or be wrapped in a MenuProvider component.\",\n );\n\n const ref = useRef<HTMLElement>(null);\n const parentMenu = store.parent;\n const parentMenubar = store.menubar;\n const hasParentMenu = !!parentMenu;\n const parentIsMenubar = !!parentMenubar && !hasParentMenu;\n const disabled = disabledFromProps(props);\n const isDisabled = (element: Element) =>\n disabled || disabledFromElement(element);\n\n const showMenu = () => {\n const trigger = ref.current;\n if (!trigger) return;\n store?.setDisclosureElement(trigger);\n store?.setAnchorElement(trigger);\n store?.show();\n };\n\n const onFocusProp = props.onFocus;\n\n const onFocus = useEvent((event: FocusEvent<HTMLType>) => {\n onFocusProp?.(event as any);\n if (isDisabled(event.currentTarget)) return;\n if (event.defaultPrevented) return;\n // Reset the autoFocusOnShow state so we can focus the menu button while\n // the menu is open and press arrow keys to move focus to the menu items.\n store?.setAutoFocusOnShow(false);\n // We need to unset the active menu item so no menu item appears active\n // while the menu button is focused.\n store?.setActiveId(null);\n // When the menu button is focused, we'll only show its menu if it's in a\n // menu bar\n if (!parentMenubar) return;\n if (!parentIsMenubar) return;\n const { items } = parentMenubar.getState();\n // and there's already another expanded menu button or the previously\n // focused element is another menu item.\n if (hasActiveItem(items, event.currentTarget)) {\n showMenu();\n }\n });\n\n const dir = useStoreState(\n store,\n (state) => state.placement.split(\"-\")[0] as BasePlacement,\n );\n\n const onKeyDownProp = props.onKeyDown;\n\n const onKeyDown = useEvent((event: KeyboardEvent<HTMLType>) => {\n onKeyDownProp?.(event as any);\n if (isDisabled(event.currentTarget)) return;\n if (event.defaultPrevented) return;\n const initialFocus = getInitialFocus(event, dir);\n if (initialFocus) {\n event.preventDefault();\n const { open } = store.getState();\n if (open) {\n const id = initialFocus === \"last\" ? store.last() : store.first();\n store.move(id);\n return;\n }\n showMenu();\n store?.setAutoFocusOnShow(true);\n store?.setInitialFocus(initialFocus);\n }\n });\n\n const onClickProp = props.onClick;\n\n const onClick = useEvent((event: MouseEvent<HTMLType>) => {\n onClickProp?.(event as any);\n if (event.defaultPrevented) return;\n if (!store) return;\n const isKeyboardClick = !event.detail;\n const { open } = store.getState();\n // When the menu button is clicked, if the menu is hidden or if it's a\n // keyboard click (enter or space),\n if (!open || isKeyboardClick) {\n // we'll only automatically focus on the menu if it's not a submenu\n // button, or if it's a keyboard click.\n if (!hasParentMenu || isKeyboardClick) {\n store.setAutoFocusOnShow(true);\n }\n store.setInitialFocus(isKeyboardClick ? \"first\" : \"container\");\n }\n // On submenu buttons, we can't hide the submenu by clicking on the menu\n // button again.\n if (hasParentMenu) {\n showMenu();\n }\n });\n\n props = useWrapElement(\n props,\n (element) => (\n <MenuContextProvider value={store}>{element}</MenuContextProvider>\n ),\n [store],\n );\n\n if (hasParentMenu) {\n // On Safari, VO+Space triggers a click twice on native button elements\n // with role menuitem (https://bugs.webkit.org/show_bug.cgi?id=228318).\n // So, if the menu button is rendered within a menu, we need to render it\n // as another element.\n props = {\n ...props,\n render: <Role.div render={props.render} />,\n };\n }\n\n // We'll use this id to render the aria-labelledby attribute on the menu.\n const id = useId(props.id);\n\n const parentContentElement = useStoreState(\n parentMenu?.combobox || parentMenu,\n \"contentElement\",\n );\n\n // When the menu button is rendered inside another menu, we set the role\n // attribute here so it doesn't get overridden by the button component with\n // role=\"button\".\n const role =\n hasParentMenu || parentIsMenubar\n ? getPopupItemRole(parentContentElement, \"menuitem\")\n : undefined;\n\n const contentElement = useStoreState(store, \"contentElement\");\n\n // Use the combobox presence to pick the correct fallback so\n // aria-haspopup stays stable before the content element mounts.\n // See https://github.com/ariakit/ariakit/issues/4443\n const hasCombobox = !!store.combobox;\n const popupRole = getPopupRole(\n contentElement,\n hasCombobox ? \"dialog\" : \"menu\",\n );\n\n props = {\n role,\n \"aria-haspopup\": popupRole,\n ...props,\n id,\n ref: useMergeRefs(ref, props.ref),\n onFocus,\n onKeyDown,\n onClick,\n };\n\n props = useHovercardAnchor<TagName>({\n store,\n focusable,\n accessibleWhenDisabled,\n ...props,\n showOnHover: (event) => {\n const getShowOnHover = () => {\n if (typeof showOnHover === \"function\") return showOnHover(event);\n if (showOnHover != null) return showOnHover;\n if (hasParentMenu) return true;\n if (!parentMenubar) return false;\n const { items } = parentMenubar.getState();\n return parentIsMenubar && hasActiveItem(items);\n };\n const canShowOnHover = getShowOnHover();\n if (!canShowOnHover) return false;\n const parent = parentIsMenubar ? parentMenubar : parentMenu;\n if (!parent) return true;\n // When hovering over a menu button shows a menu and the menu button is\n // part of another menu or menubar, it's not guaranteed that the button\n // will get focused. That's why we make sure the active item is updated\n // on the parent menu store. See \"moving between menus with arrow keys\n // after hovering over subitems\" test.\n parent.setActiveId(event.currentTarget.id);\n return true;\n },\n });\n\n props = usePopoverDisclosure<TagName>({\n store,\n toggleOnClick: !hasParentMenu,\n focusable,\n accessibleWhenDisabled,\n ...props,\n });\n\n props = useCompositeTypeahead<TagName>({\n store,\n typeahead: parentIsMenubar,\n ...props,\n });\n\n return props;\n },\n);\n\n/**\n * Renders a menu button that toggles the visibility of a\n * [`Menu`](https://ariakit.com/reference/menu) component when clicked or when\n * using arrow keys.\n * @see https://ariakit.com/components/menu\n * @example\n * ```jsx {2}\n * <MenuProvider>\n * <MenuButton>Edit</MenuButton>\n * <Menu>\n * <MenuItem>Undo</MenuItem>\n * <MenuItem>Redo</MenuItem>\n * </Menu>\n * </MenuProvider>\n * ```\n */\nexport const MenuButton = forwardRef(function MenuButton(\n props: MenuButtonProps,\n) {\n const htmlProps = useMenuButton(props);\n return createElement(TagName, htmlProps);\n});\n\nexport interface MenuButtonOptions<T extends ElementType = TagName>\n extends\n HovercardAnchorOptions<T>,\n PopoverDisclosureOptions<T>,\n CompositeTypeaheadOptions<T> {\n /**\n * Object returned by the\n * [`useMenuStore`](https://ariakit.com/reference/use-menu-store) hook. If not\n * provided, the closest\n * [`MenuProvider`](https://ariakit.com/reference/menu-provider) component's\n * context will be used.\n */\n store?: MenuStore;\n /**\n * Determines whether pressing a character key while focusing on the\n * [`MenuButton`](https://ariakit.com/reference/menu-button) should move focus\n * to the [`MenuItem`](https://ariakit.com/reference/menu-item) starting with\n * that character.\n *\n * By default, it's `true` for menu buttons in a\n * [`Menubar`](https://ariakit.com/reference/menubar), but `false` for other\n * menu buttons.\n */\n typeahead?: boolean;\n}\n\nexport type MenuButtonProps<T extends ElementType = TagName> = Props<\n T,\n MenuButtonOptions<T>\n>;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"menu-button.js","names":[],"sources":["../../src/menu/menu-button.tsx"],"sourcesContent":["import { useStoreState } from \"@ariakit/react-store\";\nimport {\n useEvent,\n useId,\n useMergeRefs,\n useWrapElement,\n createElement,\n createHook,\n forwardRef,\n} from \"@ariakit/react-utils\";\nimport type { Props } from \"@ariakit/react-utils\";\nimport {\n getPopupItemRole,\n getPopupRole,\n disabledFromElement,\n disabledFromProps,\n invariant,\n} from \"@ariakit/utils\";\nimport type { ElementType, FocusEvent, KeyboardEvent, MouseEvent } from \"react\";\nimport { useRef } from \"react\";\nimport type { CompositeTypeaheadOptions } from \"../composite/composite-typeahead.tsx\";\nimport { useCompositeTypeahead } from \"../composite/composite-typeahead.tsx\";\nimport type { HovercardAnchorOptions } from \"../hovercard/hovercard-anchor.tsx\";\nimport { useHovercardAnchor } from \"../hovercard/hovercard-anchor.tsx\";\nimport type { PopoverDisclosureOptions } from \"../popover/popover-disclosure.tsx\";\nimport { usePopoverDisclosure } from \"../popover/popover-disclosure.tsx\";\nimport { Role } from \"../role/role.tsx\";\nimport {\n MenuContextProvider,\n useMenuProviderContext,\n} from \"./menu-context.tsx\";\nimport type { MenuStore, MenuStoreState } from \"./menu-store.ts\";\n\nconst TagName = \"button\" satisfies ElementType;\ntype TagName = typeof TagName | \"div\";\ntype HTMLType = HTMLElementTagNameMap[TagName];\ntype BasePlacement = \"top\" | \"bottom\" | \"left\" | \"right\";\n\nfunction getInitialFocus(event: KeyboardEvent, dir: BasePlacement) {\n const keyMap = {\n ArrowDown: dir === \"bottom\" || dir === \"top\" ? \"first\" : false,\n ArrowUp: dir === \"bottom\" || dir === \"top\" ? \"last\" : false,\n ArrowRight: dir === \"right\" ? \"first\" : false,\n ArrowLeft: dir === \"left\" ? \"first\" : false,\n } as const;\n return keyMap[event.key as keyof typeof keyMap];\n}\n\nfunction hasActiveItem(\n items?: MenuStoreState[\"items\"],\n excludeElement?: Element | null,\n) {\n return !!items?.some((item) => {\n if (!item.element) return false;\n if (item.element === excludeElement) return false;\n return item.element.getAttribute(\"aria-expanded\") === \"true\";\n });\n}\n\n/**\n * Returns props to create a `MenuButton` component.\n * @see https://ariakit.com/components/menu\n * @example\n * ```jsx\n * const store = useMenuStore();\n * const props = useMenuButton({ store });\n * <Role {...props}>Edit</Role>\n * <Menu store={store}>\n * <MenuItem>Undo</MenuItem>\n * <MenuItem>Redo</MenuItem>\n * </Menu>\n * ```\n */\nexport const useMenuButton = createHook<TagName, MenuButtonOptions>(\n function useMenuButton({\n store,\n focusable,\n accessibleWhenDisabled,\n showOnHover,\n ...props\n }) {\n const context = useMenuProviderContext();\n store = store || context;\n\n invariant(\n store,\n process.env.NODE_ENV !== \"production\" &&\n \"MenuButton must receive a `store` prop or be wrapped in a MenuProvider component.\",\n );\n\n const ref = useRef<HTMLElement>(null);\n const parentMenu = store.parent;\n const parentMenubar = store.menubar;\n const hasParentMenu = !!parentMenu;\n const parentIsMenubar = !!parentMenubar && !hasParentMenu;\n const disabled = disabledFromProps(props);\n const isDisabled = (element: Element) =>\n disabled || disabledFromElement(element);\n\n const showMenu = () => {\n const trigger = ref.current;\n if (!trigger) return;\n store?.setDisclosureElement(trigger);\n store?.setAnchorElement(trigger);\n store?.show();\n };\n\n const onFocusProp = props.onFocus;\n\n const onFocus = useEvent((event: FocusEvent<HTMLType>) => {\n onFocusProp?.(event as any);\n if (isDisabled(event.currentTarget)) return;\n if (event.defaultPrevented) return;\n // Reset the autoFocusOnShow state so we can focus the menu button while\n // the menu is open and press arrow keys to move focus to the menu items.\n store?.setAutoFocusOnShow(false);\n // We need to unset the active menu item so no menu item appears active\n // while the menu button is focused.\n store?.setActiveId(null);\n // When the menu button is focused, we'll only show its menu if it's in a\n // menu bar\n if (!parentMenubar) return;\n if (!parentIsMenubar) return;\n const { items } = parentMenubar.getState();\n // and there's already another expanded menu button or the previously\n // focused element is another menu item.\n if (hasActiveItem(items, event.currentTarget)) {\n showMenu();\n }\n });\n\n const dir = useStoreState(\n store,\n (state) => state.placement.split(\"-\")[0] as BasePlacement,\n );\n\n const onKeyDownProp = props.onKeyDown;\n\n const onKeyDown = useEvent((event: KeyboardEvent<HTMLType>) => {\n onKeyDownProp?.(event as any);\n if (isDisabled(event.currentTarget)) return;\n if (event.defaultPrevented) return;\n const initialFocus = getInitialFocus(event, dir);\n if (initialFocus) {\n event.preventDefault();\n const { open } = store.getState();\n if (open) {\n const id = initialFocus === \"last\" ? store.last() : store.first();\n store.move(id);\n return;\n }\n showMenu();\n store?.setAutoFocusOnShow(true);\n store?.setInitialFocus(initialFocus);\n }\n });\n\n const onClickProp = props.onClick;\n\n const onClick = useEvent((event: MouseEvent<HTMLType>) => {\n onClickProp?.(event as any);\n if (event.defaultPrevented) return;\n if (!store) return;\n const isKeyboardClick = !event.detail;\n const { open } = store.getState();\n // When the menu button is clicked, if the menu is hidden or if it's a\n // keyboard click (enter or space),\n if (!open || isKeyboardClick) {\n // we'll only automatically focus on the menu if it's not a submenu\n // button, or if it's a keyboard click.\n if (!hasParentMenu || isKeyboardClick) {\n store.setAutoFocusOnShow(true);\n }\n store.setInitialFocus(isKeyboardClick ? \"first\" : \"container\");\n }\n // On submenu buttons, we can't hide the submenu by clicking on the menu\n // button again.\n if (hasParentMenu) {\n showMenu();\n }\n });\n\n props = useWrapElement(\n props,\n (element) => (\n <MenuContextProvider value={store}>{element}</MenuContextProvider>\n ),\n [store],\n );\n\n if (hasParentMenu) {\n // On Safari, VO+Space triggers a click twice on native button elements\n // with role menuitem (https://bugs.webkit.org/show_bug.cgi?id=228318).\n // So, if the menu button is rendered within a menu, we need to render it\n // as another element.\n props = {\n ...props,\n render: <Role.div render={props.render} />,\n };\n }\n\n // We'll use this id to render the aria-labelledby attribute on the menu.\n const id = useId(props.id);\n\n const parentContentElement = useStoreState(\n parentMenu?.combobox || parentMenu,\n \"contentElement\",\n );\n\n // When the menu button is rendered inside another menu, we set the role\n // attribute here so it doesn't get overridden by the button component with\n // role=\"button\".\n const role =\n hasParentMenu || parentIsMenubar\n ? getPopupItemRole(parentContentElement, \"menuitem\")\n : undefined;\n\n const contentElement = useStoreState(store, \"contentElement\");\n\n // Use the combobox presence to pick the correct fallback so\n // aria-haspopup stays stable before the content element mounts.\n // See https://github.com/ariakit/ariakit/issues/4443\n const hasCombobox = !!store.combobox;\n const popupRole = getPopupRole(\n contentElement,\n hasCombobox ? \"dialog\" : \"menu\",\n );\n\n props = {\n role,\n \"aria-haspopup\": popupRole,\n ...props,\n id,\n ref: useMergeRefs(ref, props.ref),\n onFocus,\n onKeyDown,\n onClick,\n };\n\n props = useHovercardAnchor<TagName>({\n store,\n focusable,\n accessibleWhenDisabled,\n ...props,\n showOnHover: (event) => {\n const getShowOnHover = () => {\n if (typeof showOnHover === \"function\") return showOnHover(event);\n if (showOnHover != null) return showOnHover;\n if (hasParentMenu) return true;\n if (!parentMenubar) return false;\n const { items } = parentMenubar.getState();\n return parentIsMenubar && hasActiveItem(items);\n };\n const canShowOnHover = getShowOnHover();\n if (!canShowOnHover) return false;\n const parent = parentIsMenubar ? parentMenubar : parentMenu;\n if (!parent) return true;\n // When hovering over a menu button shows a menu and the menu button is\n // part of another menu or menubar, it's not guaranteed that the button\n // will get focused. That's why we make sure the active item is updated\n // on the parent menu store. See \"moving between menus with arrow keys\n // after hovering over subitems\" test.\n parent.setActiveId(event.currentTarget.id);\n return true;\n },\n });\n\n props = usePopoverDisclosure<TagName>({\n store,\n toggleOnClick: !hasParentMenu,\n focusable,\n accessibleWhenDisabled,\n ...props,\n });\n\n props = useCompositeTypeahead<TagName>({\n store,\n typeahead: parentIsMenubar,\n ...props,\n });\n\n return props;\n },\n);\n\n/**\n * Renders a menu button that toggles the visibility of a\n * [`Menu`](https://ariakit.com/reference/menu) component when clicked or when\n * using arrow keys.\n * @see https://ariakit.com/components/menu\n * @example\n * ```jsx {2}\n * <MenuProvider>\n * <MenuButton>Edit</MenuButton>\n * <Menu>\n * <MenuItem>Undo</MenuItem>\n * <MenuItem>Redo</MenuItem>\n * </Menu>\n * </MenuProvider>\n * ```\n */\nexport const MenuButton = forwardRef(function MenuButton(\n props: MenuButtonProps,\n) {\n const htmlProps = useMenuButton(props);\n return createElement(TagName, htmlProps);\n});\n\nexport interface MenuButtonOptions<T extends ElementType = TagName>\n extends\n HovercardAnchorOptions<T>,\n PopoverDisclosureOptions<T>,\n CompositeTypeaheadOptions<T> {\n /**\n * Object returned by the\n * [`useMenuStore`](https://ariakit.com/reference/use-menu-store) hook. If not\n * provided, the closest\n * [`MenuProvider`](https://ariakit.com/reference/menu-provider) component's\n * context will be used.\n */\n store?: MenuStore;\n /**\n * Determines whether pressing a character key while focusing on the\n * [`MenuButton`](https://ariakit.com/reference/menu-button) should move focus\n * to the [`MenuItem`](https://ariakit.com/reference/menu-item) starting with\n * that character.\n *\n * By default, it's `true` for menu buttons in a\n * [`Menubar`](https://ariakit.com/reference/menubar), but `false` for other\n * menu buttons.\n */\n typeahead?: boolean;\n}\n\nexport type MenuButtonProps<T extends ElementType = TagName> = Props<\n T,\n MenuButtonOptions<T>\n>;\n"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as MenubarStore } from "../menubar-store-
|
|
2
|
-
import { t as MenuStore } from "../menu-store-
|
|
1
|
+
import { t as MenubarStore } from "../menubar-store-C553OKBw.js";
|
|
2
|
+
import { t as MenuStore } from "../menu-store-BpTJdcL8.js";
|
|
3
3
|
|
|
4
4
|
//#region src/menu/menu-context.d.ts
|
|
5
5
|
/**
|
|
@@ -42,6 +42,13 @@ declare const useMenuBarProviderContext: () => MenubarStore | undefined;
|
|
|
42
42
|
declare const MenuBarContextProvider: (props: import("react").ProviderProps<MenubarStore | undefined>) => import("react/jsx-runtime").JSX.Element;
|
|
43
43
|
declare const MenuBarScopedContextProvider: (props: import("react").ProviderProps<MenubarStore | undefined>) => import("react/jsx-runtime").JSX.Element;
|
|
44
44
|
declare const MenuItemCheckedContext: import("react").Context<boolean | undefined>;
|
|
45
|
+
/**
|
|
46
|
+
* Whether the enclosing menu list is currently hidden (e.g. a closed menu
|
|
47
|
+
* rendered without `unmountOnHide`). `MenuItem` uses it to skip registering
|
|
48
|
+
* items that aren't shown yet. Defaults to `false` so items without a menu list
|
|
49
|
+
* ancestor (such as menubar items) keep registering.
|
|
50
|
+
*/
|
|
51
|
+
declare const MenuListHiddenContext: import("react").Context<boolean>;
|
|
45
52
|
//#endregion
|
|
46
|
-
export { MenuBarContextProvider, MenuBarScopedContextProvider, MenuContextProvider, MenuItemCheckedContext, MenuScopedContextProvider, useMenuBarContext, useMenuBarProviderContext, useMenuBarScopedContext, useMenuContext, useMenuProviderContext, useMenuScopedContext };
|
|
53
|
+
export { MenuBarContextProvider, MenuBarScopedContextProvider, MenuContextProvider, MenuItemCheckedContext, MenuListHiddenContext, MenuScopedContextProvider, useMenuBarContext, useMenuBarProviderContext, useMenuBarScopedContext, useMenuContext, useMenuProviderContext, useMenuScopedContext };
|
|
47
54
|
//# sourceMappingURL=menu-context.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu-context.d.ts","names":["MenuStore","useMenuContext","MenuStoreValues","useMenuScopedContext","onlyScoped","useMenuProviderContext","MenuContextProvider","ProviderProps","props","JSX","Element","MenuScopedContextProvider","useMenuBarContext","_$___menubar_menubar_store_ts0","MenubarStore","useMenuBarScopedContext","useMenuBarProviderContext","MenuBarContextProvider","MenuBarScopedContextProvider","MenuItemCheckedContext","Context"],"sources":["../../src/menu/menu-context.d.ts"],"mappings":";;;;;;;AAcA;;;;AAAkH;AAClH;;;;;cADqBC,cAAAA,QAAsBD,SAAS,+CAA+CE,eAAe;AAAA,cAC7FC,oBAAAA,GAAuBC,UAAAA,eAAyBJ,SAAS,+CAA+CE,eAAAA;AAAAA,cACxGG,sBAAAA,QAA8BL,SAAS,+CAA+CE,eAAe;AAAA,cACrGI,mBAAAA,GAAsBE,KAAAA,kBAAuBD,aAAAA,CAAcP,SAAS,+CAA+CE,eAAAA,+CAA8DO,GAAAA,CAAIC,OAAAA;AAAAA,cACrLC,yBAAAA,GAA4BH,KAAAA,kBAAuBD,aAAAA,CAAcP,SAAS,+CAA+CE,eAAAA,+CAA8DO,GAAAA,CAAIC,OAAAA;;;;AAFtF;AAC1H;;;;;;;;;;;AAAiN;cAkB5LE,iBAAAA,QAAuFC,YAAZ;AAAA,cAC3EE,uBAAAA,GAA0BX,UAAAA,eAAuFS,YAAZ;AAAA,cACrGG,yBAAAA,QAA+FH,YAAZ;AAAA,cACnFI,sBAAAA,GAAyBT,KAAAA,kBAAuBD,aAAAA,CAAyHM,YAAzD,8CAA8CJ,GAAAA,CAAIC,OAAAA;AAAAA,cAClKQ,4BAAAA,GAA+BV,KAAAA,kBAAuBD,aAAAA,CAAyHM,YAAzD,8CAA8CJ,GAAAA,CAAIC,OAAAA;AAAAA,cACxKS,sBAAAA,kBAAwCC,OAAO"}
|
|
1
|
+
{"version":3,"file":"menu-context.d.ts","names":["MenuStore","useMenuContext","MenuStoreValues","useMenuScopedContext","onlyScoped","useMenuProviderContext","MenuContextProvider","ProviderProps","props","JSX","Element","MenuScopedContextProvider","useMenuBarContext","_$___menubar_menubar_store_ts0","MenubarStore","useMenuBarScopedContext","useMenuBarProviderContext","MenuBarContextProvider","MenuBarScopedContextProvider","MenuItemCheckedContext","Context","MenuListHiddenContext"],"sources":["../../src/menu/menu-context.d.ts"],"mappings":";;;;;;;AAcA;;;;AAAkH;AAClH;;;;;cADqBC,cAAAA,QAAsBD,SAAS,+CAA+CE,eAAe;AAAA,cAC7FC,oBAAAA,GAAuBC,UAAAA,eAAyBJ,SAAS,+CAA+CE,eAAAA;AAAAA,cACxGG,sBAAAA,QAA8BL,SAAS,+CAA+CE,eAAe;AAAA,cACrGI,mBAAAA,GAAsBE,KAAAA,kBAAuBD,aAAAA,CAAcP,SAAS,+CAA+CE,eAAAA,+CAA8DO,GAAAA,CAAIC,OAAAA;AAAAA,cACrLC,yBAAAA,GAA4BH,KAAAA,kBAAuBD,aAAAA,CAAcP,SAAS,+CAA+CE,eAAAA,+CAA8DO,GAAAA,CAAIC,OAAAA;;;;AAFtF;AAC1H;;;;;;;;;;;AAAiN;cAkB5LE,iBAAAA,QAAuFC,YAAZ;AAAA,cAC3EE,uBAAAA,GAA0BX,UAAAA,eAAuFS,YAAZ;AAAA,cACrGG,yBAAAA,QAA+FH,YAAZ;AAAA,cACnFI,sBAAAA,GAAyBT,KAAAA,kBAAuBD,aAAAA,CAAyHM,YAAzD,8CAA8CJ,GAAAA,CAAIC,OAAAA;AAAAA,cAClKQ,4BAAAA,GAA+BV,KAAAA,kBAAuBD,aAAAA,CAAyHM,YAAzD,8CAA8CJ,GAAAA,CAAIC,OAAAA;AAAAA,cACxKS,sBAAAA,kBAAwCC,OAAO;;;;;;AAtBmJ;cA6BlMC,qBAAAA,kBAAuCD,OAAO"}
|
|
@@ -46,7 +46,14 @@ const useMenuBarProviderContext = useMenubarProviderContext;
|
|
|
46
46
|
const MenuBarContextProvider = MenubarContextProvider;
|
|
47
47
|
const MenuBarScopedContextProvider = MenubarScopedContextProvider;
|
|
48
48
|
const MenuItemCheckedContext = createContext(void 0);
|
|
49
|
+
/**
|
|
50
|
+
* Whether the enclosing menu list is currently hidden (e.g. a closed menu
|
|
51
|
+
* rendered without `unmountOnHide`). `MenuItem` uses it to skip registering
|
|
52
|
+
* items that aren't shown yet. Defaults to `false` so items without a menu list
|
|
53
|
+
* ancestor (such as menubar items) keep registering.
|
|
54
|
+
*/
|
|
55
|
+
const MenuListHiddenContext = createContext(false);
|
|
49
56
|
//#endregion
|
|
50
|
-
export { MenuBarContextProvider, MenuBarScopedContextProvider, MenuContextProvider, MenuItemCheckedContext, MenuScopedContextProvider, useMenuBarContext, useMenuBarProviderContext, useMenuBarScopedContext, useMenuContext, useMenuProviderContext, useMenuScopedContext };
|
|
57
|
+
export { MenuBarContextProvider, MenuBarScopedContextProvider, MenuContextProvider, MenuItemCheckedContext, MenuListHiddenContext, MenuScopedContextProvider, useMenuBarContext, useMenuBarProviderContext, useMenuBarScopedContext, useMenuContext, useMenuProviderContext, useMenuScopedContext };
|
|
51
58
|
|
|
52
59
|
//# sourceMappingURL=menu-context.js.map
|