{
  "mixins": [
    "composables/private.use-model-toggle/use-model-toggle",
    "composables/private.use-portal/use-portal",
    "composables/private.use-anchor/use-anchor",
    "composables/private.use-transition/use-transition"
  ],

  "meta": {
    "docsUrl": "https://v2.quasar.dev/vue-components/menu"
  },

  "props": {
    "dark": {
      "extends": "dark"
    },

    "fit": {
      "type": "Boolean",
      "desc": "Allows the menu to match at least the full width of its target",
      "category": "position"
    },

    "cover": {
      "type": "Boolean",
      "desc": "Allows the menu to cover its target. When used, the 'self' and 'fit' props are no longer effective",
      "category": "position"
    },

    "anchor": {
      "type": "String",
      "desc": "Two values setting the starting position or anchor point of the menu relative to its target",
      "values": [
        "'top left'",
        "'top middle'",
        "'top right'",
        "'top start'",
        "'top end'",
        "'center left'",
        "'center middle'",
        "'center right'",
        "'center start'",
        "'center end'",
        "'bottom left'",
        "'bottom middle'",
        "'bottom right'",
        "'bottom start'",
        "'bottom end'"
      ],
      "category": "position"
    },

    "self": {
      "type": "String",
      "desc": "Two values setting the menu's own position relative to its target",
      "values": [
        "'top left'",
        "'top middle'",
        "'top right'",
        "'top start'",
        "'top end'",
        "'center left'",
        "'center middle'",
        "'center right'",
        "'center start'",
        "'center end'",
        "'bottom left'",
        "'bottom middle'",
        "'bottom right'",
        "'bottom start'",
        "'bottom end'"
      ],
      "category": "position"
    },

    "offset": {
      "type": "Array",
      "desc": "An array of two numbers (in pixels) which expands the anchor element's bounding box outward horizontally and vertically; the menu is then positioned against the expanded box, so the visible effect depends on the 'anchor'/'self' points in use",
      "examples": ["[8, 8]", "[5, 10]"],
      "category": "position"
    },

    "scroll-target": {
      "extends": "scroll-target"
    },

    "touch-position": {
      "type": "Boolean",
      "desc": "Allows for the target position to be set by the mouse position, when the target of the menu is either clicked or touched",
      "category": "behavior"
    },

    "hover": {
      "type": "Boolean",
      "desc": "Also opens the menu when the pointer hovers its target and closes it when the pointer leaves both the target and the menu; Click/tap and keyboard interactions keep toggling as usual (touch devices fall back to them), so activating the target closes a hover-shown menu, unless it is still animating into view (which keeps a single move-and-click gesture from closing what it just opened); A hover-opened menu does not switch focus on itself and ignores 'touch-position'; Mutually exclusive with 'context-menu', which takes precedence",
      "category": "behavior",
      "addedIn": "v2.26"
    },

    "hover-delay": {
      "type": "Number",
      "desc": "Delay (in milliseconds) between the pointer entering the target and the menu showing up; Requires the 'hover' prop",
      "default": "0",
      "category": "behavior",
      "addedIn": "v2.26"
    },

    "hover-hide-delay": {
      "type": "Number",
      "desc": "Grace period (in milliseconds) in which the pointer can re-enter the target or the menu before it gets closed; Requires the 'hover' prop",
      "default": "150",
      "category": "behavior",
      "addedIn": "v2.26"
    },

    "persistent": {
      "type": "Boolean",
      "desc": "Allows the menu to not be dismissed by a click/tap outside of the menu or by hitting the ESC key; Also, an app route change won't dismiss it",
      "category": "behavior"
    },

    "no-esc-dismiss": {
      "type": "Boolean",
      "desc": "User cannot dismiss the popup by hitting ESC key; No need to set it if 'persistent' prop is also set",
      "category": "behavior",
      "addedIn": "v2.18"
    },

    "no-route-dismiss": {
      "type": "Boolean",
      "desc": "Changing route app won't dismiss the popup; No need to set it if 'persistent' prop is also set",
      "category": "behavior"
    },

    "auto-close": {
      "type": "Boolean",
      "desc": "Allows any click/tap in the menu to close it; Useful instead of attaching events to each menu item that should close the menu on click/tap",
      "category": "behavior"
    },

    "separate-close-popup": {
      "type": "Boolean",
      "desc": "Separate from parent menu, marking it as a separate closing point for v-close-popup (without this, chained menus close all together)",
      "category": "behavior"
    },

    "square": {
      "type": "Boolean",
      "desc": "Forces content to have squared borders",
      "category": "style"
    },

    "no-refocus": {
      "type": "Boolean",
      "desc": "(Accessibility) When Menu gets hidden, do not refocus on the DOM element that previously had focus",
      "category": "behavior"
    },

    "no-focus": {
      "type": "Boolean",
      "desc": "(Accessibility) When Menu gets shown, do not switch focus on it",
      "category": "behavior"
    },

    "max-height": {
      "extends": "size",
      "type": ["String", "null"],
      "default": "null",
      "desc": "The maximum height of the menu; Size in CSS units, including unit name",
      "category": "style"
    },

    "max-width": {
      "extends": "size",
      "type": ["String", "null"],
      "default": "null",
      "desc": "The maximum width of the menu; Size in CSS units, including unit name",
      "category": "style"
    }
  },

  "slots": {
    "default": {
      "extends": "default"
    }
  },

  "events": {
    "escape-key": {
      "desc": "Emitted when ESC key is pressed; Does not get emitted if Menu is 'persistent' or it has 'no-esc-dismiss' set"
    },

    "click": { "internal": true }
  },

  "methods": {
    "updatePosition": {
      "desc": "There are some custom scenarios for which Quasar cannot automatically reposition the menu without significant performance drawbacks so the optimal solution is for you to call this method when you need it",
      "params": null,
      "returns": null
    },

    "focus": {
      "desc": "Focus menu; if you have content with autofocus attribute, it will directly focus it",
      "params": null,
      "returns": null
    }
  }
}
