{
  "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",
    "composables/private.use-hover/use-hover"
  ],

  "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"
    },

    "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": {
      "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",
      "addedIn": "v2.26"
    },

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

    "hover-hide-delay": {
      "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",
      "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": "The menu follows its target automatically (through any scrolling container) and this method only re-checks whether the intended placement still fits the viewport (which side the menu opens to and its maximum size); call it for the scenarios Quasar cannot detect, e.g. after replacing the menu's content while it is shown",
      "params": null,
      "returns": null
    },

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