{
  "props": {
    "virtual-scroll-horizontal": {
      "type": "Boolean",
      "desc": "Make virtual list work in horizontal mode",
      "category": "behavior"
    },

    "virtual-scroll-slice-size": {
      "type": ["Number", "String", "null"],
      "desc": "Minimum number of items to render in the virtual list",
      "default": "10",
      "examples": ["60", "'60'"],
      "category": "virtual-scroll"
    },

    "virtual-scroll-slice-ratio-before": {
      "type": ["Number", "String"],
      "desc": "Ratio of number of items in visible zone to render before it",
      "default": "1",
      "category": "virtual-scroll"
    },

    "virtual-scroll-slice-ratio-after": {
      "type": ["Number", "String"],
      "desc": "Ratio of number of items in visible zone to render after it",
      "default": "1",
      "category": "virtual-scroll"
    },

    "virtual-scroll-item-size": {
      "type": ["Number", "String"],
      "desc": "Default size in pixels (height if vertical, width if horizontal) of an item; This value is used for rendering the initial list; Try to use a value close to the minimum size of an item",
      "default": "24",
      "category": "virtual-scroll"
    },

    "virtual-scroll-sticky-size-start": {
      "type": ["Number", "String"],
      "desc": "Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the start of the list; A correct value will improve scroll precision",
      "default": "0",
      "category": "virtual-scroll"
    },

    "virtual-scroll-sticky-size-end": {
      "type": ["Number", "String"],
      "desc": "Size in pixels (height if vertical, width if horizontal) of the sticky part (if using one) at the end of the list; A correct value will improve scroll precision",
      "default": "0",
      "category": "virtual-scroll"
    },

    "table-colspan": {
      "type": ["Number", "String"],
      "desc": "The number of columns in the table (you need this if you use table-layout: fixed)",
      "category": "virtual-scroll|content"
    }
  },

  "events": {
    "virtual-scroll": {
      "desc": "Emitted when the virtual scroll occurs",
      "params": {
        "details": {
          "type": "Object",
          "desc": "Object of properties on the new scroll position",
          "definition": {
            "index": {
              "type": "Number",
              "required": true,
              "desc": "Index of the list item that was scrolled into view (0 based)"
            },
            "from": {
              "type": "Number",
              "required": true,
              "desc": "The index of the first list item that is rendered (0 based)"
            },
            "to": {
              "type": "Number",
              "required": true,
              "desc": "The index of the last list item that is rendered (0 based)"
            },
            "direction": {
              "type": "String",
              "required": true,
              "desc": "Direction of change",
              "values": ["'increase'", "'decrease'"]
            },
            "ref": {
              "type": "Component",
              "required": true,
              "desc": "Vue reference to the component which triggered the event"
            }
          }
        }
      }
    }
  },

  "methods": {
    "scrollTo": {
      "desc": "Scroll the virtual scroll list to the item with the specified index (0 based)",
      "params": {
        "index": {
          "type": ["Number", "String"],
          "desc": "The index of the list item (0 based)",
          "required": true
        },
        "edge": {
          "type": "String",
          "desc": "The edge to align to if the item is not visible already (by default it aligns to end if scrolling towards the end and to start otherwise); If the '-force' version is used then it always aligns",
          "values": [
            "'start'",
            "'center'",
            "'end'",
            "'start-force'",
            "'center-force'",
            "'end-force'"
          ]
        }
      },
      "returns": null
    },

    "reset": {
      "desc": "Resets the virtual scroll computations; Needed for custom edge-cases",
      "params": null,
      "returns": null
    },

    "refresh": {
      "desc": "Refreshes the virtual scroll list; Use it after appending items",
      "params": {
        "index": {
          "type": ["String", "Number"],
          "desc": "The index of the list item to scroll to after refresh (0 based); If it's not specified the scroll position is not changed; Use a negative value to keep scroll position",
          "examples": ["5"]
        }
      },
      "returns": null
    }
  }
}
