{
  "$ref": "#/definitions/Component",
  "$schema": "http://json-schema.org/draft-07/schema#",
  "definitions": {
    "Component": {
      "additionalProperties": false,
      "properties": {
        "actions": {
          "items": {
            "$ref": "#/definitions/IActionButton"
          },
          "type": "array"
        },
        "add_item": {
          "type": "boolean"
        },
        "disable_paginate_sort": {
          "description": "When true, hides the sort select and direction button from the pagination bar",
          "type": "boolean"
        },
        "disablepagination": {
          "type": "boolean"
        },
        "enableselect": {
          "type": "string"
        },
        "externalfilter": {
          "description": "From HTML / `setAttribute`: only **`yes`** or **`no`** (or legacy `\"true\"` / `\"false\"`). Not a boolean attribute.",
          "type": "string"
        },
        "fixed_columns": {
          "description": "When `\"yes\"`, columns use `table-layout: fixed` with text ellipsis on overflow. When `\"no\"` (default), columns size dynamically (`table-layout: auto`).",
          "type": "string"
        },
        "headers": {
          "items": {
            "$ref": "#/definitions/ITableHeader"
          },
          "type": "array"
        },
        "i18nlang": {
          "type": "string"
        },
        "id": {
          "type": "string"
        },
        "is_loading": {
          "description": "When true (or web attribute `\"yes\"` / `\"true\"`), tbody shows Bulma skeleton rows (count matches `size`, capped at 100) and a single `skeleton-block` covers `hb-paginate` (still mounted, hidden).",
          "type": "boolean"
        },
        "page": {
          "description": "Current page index for pagination; **zero-based** (first page is `0`).",
          "type": "number"
        },
        "page_size_options": {
          "description": "Comma-separated list of page size options for select mode (e.g. \"10,25,50,100\")",
          "type": "string"
        },
        "page_size_type": {
          "description": "Type of page size selector: \"number\" for free input, \"select\" for dropdown",
          "enum": [
            "number",
            "select"
          ],
          "type": "string"
        },
        "pages": {
          "description": "Total number of pages (non-negative integer).",
          "type": "number"
        },
        "rows": {
          "items": {
            "$ref": "#/definitions/IRow"
          },
          "type": "array"
        },
        "selectactions": {
          "items": {},
          "type": "array"
        },
        "selected": {
          "type": "string"
        },
        "selectrow": {
          "type": "string"
        },
        "size": {
          "type": "number"
        },
        "sort_default": {
          "description": "Default sort field value — if it matches a sortable column, that column is pre-selected with \"default\" direction (e.g. \"title\")",
          "type": "string"
        },
        "sort_default_label": {
          "description": "Custom label for the \"Default\" sort option in the pagination bar (e.g. \"Relevance\")",
          "type": "string"
        },
        "sort_direction": {
          "description": "Current sort direction",
          "enum": [
            "asc",
            "desc",
            "default"
          ],
          "type": "string"
        },
        "sort_strict_direction": {
          "description": "When true, sort direction only allows \"asc\" and \"desc\" (no \"default\" state)",
          "type": "boolean"
        },
        "style": {
          "type": "string"
        },
        "total": {
          "type": "number"
        }
      },
      "required": [
        "rows",
        "headers"
      ],
      "type": "object"
    },
    "FormSchema": {
      "items": {
        "$ref": "#/definitions/FormSchemaEntry"
      },
      "type": "array"
    },
    "FormSchemaDependency": {
      "additionalProperties": false,
      "properties": {
        "id": {
          "type": "string"
        },
        "values": {
          "items": {
            "type": [
              "string",
              "number",
              "boolean"
            ]
          },
          "type": "array"
        }
      },
      "required": [
        "id"
      ],
      "type": "object"
    },
    "FormSchemaEntry": {
      "additionalProperties": false,
      "properties": {
        "array_style": {
          "description": "For `type: \"arraytags\"` only: forwarded to `hb-input-array-tags` as the host `array_style` attribute (`\"pills\"` | `\"area\"` string). When omitted, **`hb-form` defaults to `\"area\"`**.",
          "type": "string"
        },
        "dependencies": {
          "items": {
            "$ref": "#/definitions/FormSchemaDependency"
          },
          "type": "array"
        },
        "disabled": {
          "type": "boolean"
        },
        "id": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "params": {
          "additionalProperties": {},
          "type": "object"
        },
        "placeholder": {
          "type": "string"
        },
        "readonly": {
          "type": "boolean"
        },
        "required": {
          "type": "boolean"
        },
        "type": {
          "description": "Discriminator for `hb-form` rows (`row`, `text`, `number`, …). May be omitted on a standalone `schemaentry` when implied by the host tag.",
          "type": "string"
        },
        "validationRegex": {
          "type": "string"
        },
        "validationTip": {
          "type": "string"
        },
        "value": {}
      },
      "required": [
        "id",
        "type"
      ],
      "type": "object"
    },
    "IActionButton": {
      "additionalProperties": false,
      "properties": {
        "btnClass": {
          "description": "Bulma colour token; when omitted the button is `is-link`. Outline follows `btnFill` and active theme (see `btnFill`).",
          "type": "string"
        },
        "btnFill": {
          "description": "When `true` / `\"yes\"`, filled (no `is-outlined`). When omitted, `false`, or `\"no\"`, `is-outlined` only while the **resolved** Bulma theme on this host is dark (`getComputedStyle(host)` for `--bulma-scheme-brightness` / related tokens, then `data-theme` / `.theme-*` / `prefers-color-scheme`).",
          "type": "boolean"
        },
        "confirm": {
          "additionalProperties": false,
          "properties": {
            "confirmLabel": {
              "type": "string"
            },
            "content": {
              "type": "string"
            },
            "denyLabel": {
              "type": "string"
            },
            "text": {
              "type": "string"
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "title",
            "confirmLabel",
            "content"
          ],
          "type": "object"
        },
        "disabled": {
          "type": "boolean"
        },
        "edit": {
          "additionalProperties": false,
          "properties": {
            "confirmLabel": {
              "type": "string"
            },
            "denyLabel": {
              "type": "string"
            },
            "description": {
              "type": "string"
            },
            "schema": {
              "anyOf": [
                {
                  "type": "string"
                },
                {
                  "$ref": "#/definitions/FormSchema"
                }
              ],
              "description": "From HTML: JSON string parsed in `$effect`; may be an object when set from JavaScript."
            },
            "text": {
              "type": "string"
            },
            "title": {
              "type": "string"
            }
          },
          "required": [
            "title",
            "confirmLabel",
            "schema"
          ],
          "type": "object"
        },
        "iconOrText": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "tooltip": {
          "$ref": "#/definitions/TTooltip"
        },
        "type": {
          "enum": [
            "icon",
            "text"
          ],
          "type": "string"
        }
      },
      "required": [
        "name",
        "type",
        "iconOrText"
      ],
      "type": "object"
    },
    "IRow": {
      "additionalProperties": {
        "anyOf": [
          {
            "type": "string"
          },
          {
            "items": {
              "$ref": "#/definitions/IActionButton"
            },
            "type": "array"
          },
          {}
        ]
      },
      "properties": {
        "_actions": {
          "items": {
            "$ref": "#/definitions/IActionButton"
          },
          "type": "array"
        },
        "_evidenced": {
          "type": "boolean"
        },
        "_id": {
          "type": "string"
        }
      },
      "required": [
        "_id"
      ],
      "type": "object"
    },
    "ITableHeader": {
      "additionalProperties": false,
      "properties": {
        "centerCell": {
          "description": "When `true`, body cells (and loading skeleton) for this column use horizontal center alignment.",
          "type": "boolean"
        },
        "centerHeader": {
          "description": "When `true`, header cells for this column center the label / filters; the sort control (when present) stays on the **left** of the title row.",
          "type": "boolean"
        },
        "click": {
          "type": "boolean"
        },
        "copyTxt": {
          "type": "boolean"
        },
        "format": {
          "type": "string"
        },
        "key": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "nosort": {
          "type": "boolean"
        },
        "search": {
          "type": "boolean"
        },
        "select": {
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "sortBy": {
          "enum": [
            "asc",
            "desc",
            "none"
          ],
          "type": "string"
        },
        "tooltip": {
          "$ref": "#/definitions/TTooltip"
        },
        "truncateAt": {
          "type": "number"
        },
        "type": {
          "description": "Column value kind. **`ip`**: IPv4 `A.B.C.D` or CIDR `A.B.C.D/p` (`p` 0–32); local sort is numeric on address then prefix.",
          "enum": [
            "datetime",
            "string",
            "enum",
            "actions",
            "number",
            "ip"
          ],
          "type": "string"
        }
      },
      "required": [
        "label",
        "key"
      ],
      "type": "object"
    },
    "TTooltip": {
      "additionalProperties": false,
      "properties": {
        "animation": {
          "type": "boolean"
        },
        "customClass": {
          "type": "string"
        },
        "delay": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "additionalProperties": false,
              "properties": {
                "hide": {
                  "type": "number"
                },
                "show": {
                  "type": "number"
                }
              },
              "required": [
                "show",
                "hide"
              ],
              "type": "object"
            }
          ]
        },
        "description": {
          "type": "string"
        },
        "html": {
          "type": "boolean"
        },
        "maxHeight": {
          "type": "string"
        },
        "maxWidth": {
          "type": "string"
        },
        "offset": {
          "anyOf": [
            {
              "items": {
                "type": "number"
              },
              "maxItems": 2,
              "minItems": 2,
              "type": "array"
            },
            {
              "type": "string"
            }
          ]
        },
        "placement": {
          "enum": [
            "auto",
            "top",
            "bottom",
            "left",
            "right"
          ],
          "type": "string"
        },
        "style": {
          "$ref": "#/definitions/TooltipStyle"
        },
        "title": {
          "type": "string"
        },
        "trigger": {
          "enum": [
            "click",
            "hover",
            "focus",
            "manual",
            "click hover",
            "click focus",
            "hover focus",
            "click hover focus"
          ],
          "type": "string"
        }
      },
      "required": [
        "title"
      ],
      "type": "object"
    },
    "TooltipStyle": {
      "additionalProperties": false,
      "properties": {
        "backgroundColor": {
          "type": "string"
        },
        "borderRadius": {
          "type": "string"
        },
        "color": {
          "type": "string"
        },
        "disableDefaultStyle": {
          "type": "boolean"
        },
        "fontSize": {
          "type": "string"
        },
        "opacity": {
          "type": "number"
        },
        "padding": {
          "type": "string"
        },
        "transitionDuration": {
          "type": "string"
        }
      },
      "type": "object"
    }
  }
}
