{
  "mixins": [
    "composables/private.use-anchor/use-anchor",

    {
      "from": "components/menu/QMenu",
      "include": { "props": "all", "events": "all" },
      "exclude": { "props": ["separate-close-popup"] },
      "overrideAll": {
        "props": {
          "passthrough": true,
          "category": "menu",
          "__desc__suffix": "; Only applies when a Menu is used (see 'breakpoint')"
        },
        "events": {
          "passthrough": true
        }
      },
      "overrides": {
        "props": {
          "max-height": {
            "type": "String",
            "default": "'99vh'"
          },

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

          "no-esc-dismiss": {
            "desc": "User cannot dismiss the popup by hitting ESC key; No need to set it if 'persistent' prop is also set",
            "category": "dialog|menu",
            "__delete": ["addedIn"]
          },

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

          "auto-close": {
            "desc": "Any click/tap inside of the popup will close it",
            "category": "dialog|menu"
          },

          "square": {
            "desc": "Forces content to have squared borders",
            "category": "dialog|menu"
          },

          "no-refocus": {
            "desc": "(Accessibility) When the popup gets hidden, do not refocus on the DOM element that previously had focus",
            "category": "dialog|menu"
          },

          "no-focus": {
            "desc": "(Accessibility) When the popup gets shown, do not switch focus on it",
            "category": "dialog|menu"
          },

          "transition-show": {
            "desc": "One of Quasar's embedded transitions; When a Menu is used it defaults to 'fade'; When a Dialog is used the default depends on 'position' (see 'breakpoint')",
            "category": "dialog|menu",
            "__delete": ["default"]
          },

          "transition-hide": {
            "desc": "One of Quasar's embedded transitions; When a Menu is used it defaults to 'fade'; When a Dialog is used the default depends on 'position' (see 'breakpoint')",
            "category": "dialog|menu",
            "__delete": ["default"]
          },

          "transition-duration": {
            "desc": "Transition duration (in milliseconds, without unit)",
            "category": "dialog|menu"
          }
        },

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

    {
      "from": "components/dialog/QDialog",
      "include": { "props": "all", "events": "all" },
      "exclude": {
        "props": [
          "persistent",
          "no-esc-dismiss",
          "no-route-dismiss",
          "auto-close",
          "square",
          "no-refocus",
          "no-focus",
          "transition-show",
          "transition-hide",
          "transition-duration"
        ],
        "events": ["escape-key"]
      },
      "overrideAll": {
        "props": {
          "passthrough": true,
          "category": "dialog",
          "__desc__suffix": "; Only applies when a Dialog is used (see 'breakpoint')"
        },
        "events": {
          "passthrough": true,
          "__desc__suffix": "; Only applies when a Dialog is used (see 'breakpoint')"
        }
      }
    }
  ],

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

  "props": {
    "model-value": {
      "extends": "model-value",
      "type": "Boolean",
      "desc": "Defines the state of the component (shown/hidden); Either use this property (along with a listener for 'update:modelValue' event) OR use v-model directive",
      "required": false,
      "category": "dialog|menu",
      "passthrough": true
    },

    "breakpoint": {
      "type": ["Number", "String"],
      "desc": "Breakpoint (in pixels) of window width/height (whichever is smaller) from where a Menu will get to be used instead of a Dialog",
      "default": "450",
      "category": "behavior"
    }
  },

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

  "events": {
    "update:model-value": {
      "extends": "update:model-value",
      "passthrough": true
    },

    "before-show": {
      "extends": "before-show",
      "passthrough": true
    },

    "show": {
      "extends": "show"
    },

    "before-hide": {
      "extends": "before-hide",
      "passthrough": true
    },

    "hide": {
      "extends": "hide"
    }
  },

  "methods": {
    "show": {
      "extends": "show"
    },

    "hide": {
      "extends": "hide"
    },

    "toggle": {
      "extends": "toggle"
    }
  },

  "computedProps": {
    "currentComponent": {
      "type": "Object",
      "desc": "Access current underlying component (QMenu or QDialog)",
      "definition": {
        "type": {
          "type": "String",
          "desc": "Component type",
          "values": ["'dialog'", "'menu'"]
        },
        "ref": {
          "type": "ComponentInstance",
          "tsType": "QPopupProxyInnerComponent",
          "desc": "The actual component (QMenu or QDialog); Access it directly, without '.value'"
        }
      }
    }
  }
}
