{
  "$schema": "../_schema.json",
  "format": "docx",
  "element": "hyperlink",
  "elementAliases": ["link"],
  "parent": "paragraph",
  "operations": {
    "add": true,
    "set": true,
    "get": true,
    "query": true,
    "remove": true
  },
  "paths": {
    "positional": [
      "/body/p[N]/hyperlink[M]"
    ]
  },
  "note": "Aliases: link. Exactly one of 'url' (external) or 'anchor' (internal bookmark ref) is required. Colors default to theme Hyperlink (or 0563C1 fallback) with single underline.",
  "extends": "_shared/hyperlink",
  "properties": {
    "url": {
      "type": "string",
      "description": "external URL. Aliases: href, link. docx Set accepts all three (url canonical).",
      "aliases": [
        "href",
        "link"
      ],
      "add": true,
      "set": true,
      "get": true,
      "examples": [
        "--prop url=https://example.com"
      ],
      "readback": "URL string",
      "enforcement": "report"
    },
    "anchor": {
      "type": "string",
      "description": "bookmark name for internal links. Set after Add not supported — formatting lives on inner runs (Set the run, not the hyperlink wrapper).",
      "aliases": [
        "bookmark"
      ],
      "add": true,
      "set": false,
      "get": true,
      "examples": [
        "--prop anchor=section1"
      ],
      "readback": "anchor name for internal links",
      "enforcement": "report"
    },
    "tooltip": {
      "type": "string",
      "description": "hover text (w:tooltip / ScreenTip) shown when the cursor rests on the link. Set after Add not supported — supply on Add. Renders as the HTML title attribute in the preview.",
      "add": true,
      "set": false,
      "get": true,
      "examples": [
        "--prop tooltip=\"Opens the report\""
      ],
      "readback": "tooltip text string",
      "enforcement": "report"
    },
    "text": {
      "type": "string",
      "description": "display text. Defaults to url or anchor value if omitted.",
      "add": true,
      "set": true,
      "get": true,
      "examples": [
        "--prop text=\"click here\""
      ],
      "readback": "concatenated run text",
      "enforcement": "report"
    },
    "rStyle": {
      "type": "string",
      "description": "Run style id applied to the hyperlink's run (typically 'Hyperlink' to inherit theme color/underline).",
      "add": true,
      "set": false,
      "get": true,
      "examples": [
        "--prop rStyle=Hyperlink"
      ],
      "readback": "style id",
      "enforcement": "report"
    },
    "color": {
      "type": "color",
      "description": "override link color (default: theme Hyperlink or 0563C1). Set after Add not supported — formatting lives on inner runs (Set the run, not the hyperlink wrapper).",
      "add": true,
      "set": false,
      "get": true,
      "examples": [
        "--prop color=#0000FF"
      ],
      "readback": "#-prefixed uppercase hex, or scheme color name (e.g. 'hyperlink', 'followedhyperlink') when using theme default",
      "enforcement": "report"
    },
    "font": {
      "type": "string",
      "add": true,
      "set": false,
      "get": true,
      "examples": [
        "--prop font=\"Calibri\""
      ],
      "readback": "font name",
      "enforcement": "report",
      "description": " Set after Add not supported — formatting lives on inner runs (Set the run, not the hyperlink wrapper)."
    },
    "size": {
      "type": "length",
      "add": true,
      "set": false,
      "get": true,
      "examples": [
        "--prop size=11"
      ],
      "readback": "unit-qualified pt",
      "enforcement": "report",
      "description": " Set after Add not supported — formatting lives on inner runs (Set the run, not the hyperlink wrapper)."
    },
    "underline": {
      "type": "enum",
      "description": "underline style for the link's run. Defaults to single when omitted (theme Hyperlink look). Set after Add not supported — formatting lives on inner runs (Set the run, not the hyperlink wrapper). Aliases: font.underline.",
      "values": [
        "single",
        "double",
        "dotted",
        "dash",
        "wave",
        "none",
        "thick",
        "dottedHeavy",
        "dashLong",
        "dashLongHeavy",
        "dashDotHeavy",
        "wavyHeavy",
        "wavyDouble"
      ],
      "aliases": [
        "font.underline"
      ],
      "add": true,
      "set": false,
      "get": true,
      "examples": [
        "--prop underline=dotted",
        "--prop underline=wave"
      ],
      "readback": "underline style name",
      "enforcement": "report"
    },
    "bold": {
      "type": "bool",
      "add": true,
      "set": false,
      "get": true,
      "examples": [
        "--prop bold=true"
      ],
      "readback": "true/false",
      "enforcement": "report",
      "description": " Set after Add not supported — formatting lives on inner runs (Set the run, not the hyperlink wrapper)."
    },
    "italic": {
      "type": "bool",
      "add": true,
      "set": false,
      "get": true,
      "examples": [
        "--prop italic=true"
      ],
      "readback": "true/false",
      "enforcement": "report",
      "description": " Set after Add not supported — formatting lives on inner runs (Set the run, not the hyperlink wrapper)."
    },
    "docLocation": {
      "type": "string",
      "description": "w:docLocation — frame name (or location-within-document for non-text-anchor refs). Preserved on dump round-trip. Get only; set via the underlying hyperlink rewrite path on Add.",
      "aliases": ["doclocation"],
      "add": false,
      "set": false,
      "get": true,
      "readback": "doc location string",
      "enforcement": "report"
    }
  }
}
