{
  "$schema": "https://raw.githubusercontent.com/microsoft/vscode-html-languageservice/main/docs/customData.schema.json",
  "version": 1.1,
  "tags": [
    {
      "name": "xm-alert",
      "description": "\n---\n\n\n### **Events:**\n - **alert-action** - Fired when the alert's action is activated.\n- **alert-dismiss** - Fired when the alert is dismissed.",
      "attributes": [
        { "name": "severity", "values": [{ "name": "AlertSeverity" }] },
        { "name": "heading", "values": [] },
        { "name": "dismissible", "values": [] },
        { "name": "static", "values": [] },
        { "name": "prominent", "values": [] },
        { "name": "variant", "values": [{ "name": "AlertVariant" }] }
      ],
      "references": []
    },
    {
      "name": "xm-app-bar",
      "description": "\n---\n",
      "attributes": [
        { "name": "size", "values": [{ "name": "AppBarSize" }] },
        { "name": "sticky", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-artifact",
      "description": "\n---\n\n\n### **Events:**\n - **close** - Fired when the element requests to close.\n- **refresh** - Fired when a refresh is requested.\n- **view-change** - Fired when the active view changes.\n\n### **Methods:**\n - **setBodies(preview: _ChildNode[]_, code: _ChildNode[]_): _void_** - Imperatively set the preview/code body nodes from a host. Replaces any\nauthored or previously-set bodies. Used by <xm-chat-shell> to hand the\npanel its slot content; the chat shell can't author them as direct\nchildren of the lit-rendered <xm-artifact> tag without the snapshot\ntiming race that this method sidesteps.",
      "attributes": [
        { "name": "title", "values": [] },
        { "name": "sub-csv", "values": [] },
        { "name": "view", "values": [{ "name": "ArtifactView" }] },
        { "name": "show-refresh", "values": [] },
        { "name": "show-close", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-autocomplete",
      "description": "\n---\n\n\n### **Events:**\n - **change** - Fired on commit with the new value in `detail`.\n- **input** - Fired on each edit with the current value in `detail`.\n\n### **Methods:**\n \n- **setFormDisabled(disabled: _boolean_): _void_** - Down-propagation hook: xm-form (Story 2.10) sets this; it OR's with the\nfield's own disabled and can never re-enable a self-disabled field.\n\n\n",
      "attributes": [
        {
          "name": "placeholder",
          "description": "Native placeholder shown when the query is empty.",
          "values": []
        },
        { "name": "label", "values": [] },
        { "name": "helper", "values": [] },
        {
          "name": "error",
          "description": "Severity copy. Non-empty ⇒ the field is in error (icon + copy, never color).",
          "values": []
        },
        { "name": "size", "values": [{ "name": "FieldSize" }] },
        { "name": "required", "values": [] },
        { "name": "disabled", "values": [] },
        { "name": "readonly", "values": [] },
        { "name": "loading", "values": [] },
        {
          "name": "name",
          "description": "Form-control name — mirrors native <input name>.",
          "values": []
        },
        {
          "name": "value",
          "description": "INITIAL value (uncontrolled-first, AD-6): the `value` attribute seeds the\nlive state once, then never overrides user input. Mapped from attribute\n`value` so authors write `<xm-text-field value=\"…\">`.",
          "values": []
        },
        {
          "name": "checked",
          "description": "INITIAL checked for toggle subclasses; mapped from attribute `checked`.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-avatar",
      "description": "\n---\n",
      "attributes": [
        { "name": "title", "values": [] },
        { "name": "name", "values": [] },
        { "name": "initials", "values": [] },
        { "name": "src", "values": [] },
        { "name": "size", "values": [{ "name": "AvatarSize" }] }
      ],
      "references": []
    },
    {
      "name": "xm-avatar-group",
      "description": "\n---\n",
      "attributes": [
        { "name": "max", "values": [] },
        { "name": "size", "values": [{ "name": "AvatarSize" }] }
      ],
      "references": []
    },
    {
      "name": "xm-badge",
      "description": "\n---\n",
      "attributes": [
        { "name": "count", "values": [] },
        { "name": "dot", "values": [] },
        { "name": "max", "values": [] },
        { "name": "label", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-brand-glyph",
      "description": "\n---\n",
      "attributes": [],
      "references": []
    },
    {
      "name": "xm-brand-mark",
      "description": "\n---\n",
      "attributes": [
        { "name": "size", "values": [{ "name": "BrandSize" }] },
        { "name": "show-glyph", "values": [] },
        { "name": "show-wordmark", "values": [] },
        { "name": "show-tagline", "values": [] },
        { "name": "tagline", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-breadcrumbs",
      "description": "\n---\n",
      "attributes": [
        { "name": "separator", "values": [{ "name": "BreadcrumbSeparator" }] }
      ],
      "references": []
    },
    {
      "name": "xm-bubble-group",
      "description": "\n---\n\n\n### **Events:**\n - **artifact-download** - Fired when an artifact download is requested.\n- **artifact-open** - Fired when an artifact is opened.",
      "attributes": [
        { "name": "variant", "values": [{ "name": "BubbleVariant" }] }
      ],
      "references": []
    },
    {
      "name": "xm-bubble",
      "description": "\n---\n",
      "attributes": [
        { "name": "variant", "values": [{ "name": "BubbleVariant" }] },
        { "name": "download", "values": [] },
        { "name": "text", "values": [] },
        { "name": "body-html", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-bubble-actions",
      "description": "\n---\n",
      "attributes": [
        { "name": "ts", "values": [] },
        { "name": "aria-label", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-artifact-chip",
      "description": "\n---\n",
      "attributes": [{ "name": "download", "values": [] }],
      "references": []
    },
    {
      "name": "xm-button",
      "description": "\n---\n",
      "attributes": [
        { "name": "variant", "values": [{ "name": "ButtonVariant" }] },
        { "name": "size", "values": [{ "name": "ButtonSize" }] },
        { "name": "icon-only", "values": [] },
        { "name": "full-width", "values": [] },
        {
          "name": "selected",
          "description": "Persistent active/selected state — used by toggle/tab buttons. Reuses\nthe same .is-active visual the design canvases trigger via forceState.",
          "values": []
        },
        { "name": "type", "values": [{ "name": "ButtonType" }] },
        { "name": "disabled", "values": [] },
        { "name": "loading", "values": [] },
        { "name": "force-state", "values": [{ "name": "ForceState" }] }
      ],
      "references": []
    },
    {
      "name": "xm-card",
      "description": "\n---\n",
      "attributes": [
        { "name": "elevation", "values": [{ "name": "CardElevation" }] },
        { "name": "size", "values": [{ "name": "CardSize" }] }
      ],
      "references": []
    },
    {
      "name": "xm-chat-shell",
      "description": "\n---\n\n\n### **Events:**\n - **artifact-close** - Fired when the artifact panel is closed.\n- **artifact-open** - Fired when an artifact is opened.\n- **cancel** - Fired when the action is cancelled.\n- **send** - Fired when the user sends the composed content.",
      "attributes": [
        { "name": "processing", "values": [] },
        { "name": "thinking-label", "values": [] },
        { "name": "top-title", "values": [] },
        {
          "name": "full-viewport",
          "description": "Pin the shell to the viewport (height: 100vh). Default is height: 100%\nso the shell sizes to its container — embedded hosts get correct\nsizing for free. Full-bleed previews opt in via the `full-viewport`\nattribute.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-checkbox",
      "description": "\n---\n\n\n### **Events:**\n - **input** - Fired on each edit with the current value in `detail` (inherited by every field).\n- **change** - Fired on commit with the new value in `detail` (inherited by every field).\n\n### **Methods:**\n - **setFormDisabled(disabled: _boolean_): _void_** - Down-propagation hook: xm-form (Story 2.10) sets this; it OR's with the\nfield's own disabled and can never re-enable a self-disabled field.\n\n\n\n",
      "attributes": [
        {
          "name": "indeterminate",
          "description": "Indeterminate (mixed) state — shows the dash mark on the coral fill and\nreports aria-checked=\"mixed\". Cleared on the first user toggle.",
          "values": []
        },
        { "name": "label", "values": [] },
        { "name": "helper", "values": [] },
        {
          "name": "error",
          "description": "Severity copy. Non-empty ⇒ the field is in error (icon + copy, never color).",
          "values": []
        },
        { "name": "size", "values": [{ "name": "FieldSize" }] },
        { "name": "required", "values": [] },
        { "name": "disabled", "values": [] },
        { "name": "readonly", "values": [] },
        { "name": "loading", "values": [] },
        {
          "name": "name",
          "description": "Form-control name — mirrors native <input name>.",
          "values": []
        },
        {
          "name": "value",
          "description": "INITIAL value (uncontrolled-first, AD-6): the `value` attribute seeds the\nlive state once, then never overrides user input. Mapped from attribute\n`value` so authors write `<xm-text-field value=\"…\">`.",
          "values": []
        },
        {
          "name": "checked",
          "description": "INITIAL checked for toggle subclasses; mapped from attribute `checked`.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-chip",
      "description": "\n---\n\n\n### **Events:**\n - **xm-chip-activate** - Fired when the chip is activated.\n- **xm-chip-remove** - Fired when the chip's remove affordance is activated.",
      "attributes": [
        { "name": "value", "values": [] },
        { "name": "size", "values": [{ "name": "ChipSize" }] },
        { "name": "selected", "values": [] },
        { "name": "removable", "values": [] },
        { "name": "disabled", "values": [] },
        { "name": "category", "values": [{ "name": "ChipCategory" }] },
        {
          "name": "count",
          "description": "Trailing figure carried by the chip (a facet count). A real field rather\nthan text baked into the label, so it keeps the tabular/mono typescale,\nsurvives `removable`, and stays out of the remove control's accessible\nname. `null` renders nothing.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-chip-group",
      "description": "\n---\n\n\n### **Events:**\n - **change** - Fired on commit with the new value in `detail`.\n- **xm-chip-group-overflow-toggle** - Fired when the overflow pill folds or unfolds the tail of the set (`detail.open`, `detail.hidden`).",
      "attributes": [
        { "name": "multiple", "values": [] },
        {
          "name": "max",
          "description": "Show at most this many chips; the rest fold behind an overflow pill\n(0 = show everything). Same word, same behaviour as `<xm-avatar-group max>`.\nA selected chip is never folded — an active filter stays visible even past\nthe cap — so the visible count can exceed `max`. Chips the consumer hid\nthemselves are left alone.",
          "values": []
        },
        {
          "name": "overflow-label",
          "description": "Copy for the collapsed overflow pill. `{n}` interpolates the hidden count.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-code",
      "description": "\n---\n",
      "attributes": [{ "name": "block", "values": [] }],
      "references": []
    },
    {
      "name": "xm-composer",
      "description": "\n---\n\n\n### **Events:**\n - **value-change** - Fired when the value changes (`detail.value`).\n- **attachments-change** - Fired when the attachment set changes.\n- **cancel** - Fired when the action is cancelled.\n- **send** - Fired when the user sends the composed content.",
      "attributes": [
        { "name": "initial-value", "values": [] },
        { "name": "initial-focus", "values": [] },
        { "name": "processing", "values": [] },
        { "name": "thinking-label", "values": [] },
        { "name": "max-chars", "values": [] },
        { "name": "counter-at", "values": [] },
        { "name": "placeholder", "values": [] },
        { "name": "show-attachments", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-data-grid",
      "description": "\n---\n\n\n### **Events:**\n - **xm-data-grid-layout-change** - Fired when density, grouping, sort or any column state changes (`detail.layout`).\n- **xm-data-grid-view-change** - Fired when the active view changes or its layout drifts (`detail.view`, `detail.dirty`).\n- **xm-data-grid-search** - Fired when the search query changes (`detail.query`, `detail.matches`).",
      "attributes": [
        { "name": "loading", "values": [] },
        { "name": "page-size", "values": [] },
        { "name": "max-height", "values": [] },
        { "name": "totals-label", "values": [] },
        { "name": "totals", "values": [] },
        {
          "name": "fit-columns",
          "description": "Grow the columns to fill the frame when the declared widths leave room to\nspare. Full page turns this on for as long as it is open, so the grid uses\nthe screen it took; set it to keep the same behaviour in the card.",
          "values": []
        },
        {
          "name": "fill",
          "description": "Stretch the frame to the host's full height instead of collapsing to the\nrows. A grid embedded in a flex column needs this to own its own scroll;\nfull page turns it on regardless, for as long as it is open.",
          "values": []
        },
        {
          "name": "server",
          "description": "Server/controlled mode (ADR 0042): the consumer owns search, sort and\npaging. The grid stops filtering and reordering `rows`, hands them to the\ntable verbatim, and reports search and sort as intents only. Use it when\nthe rows are a page of a larger set, or a shape a local pass would\ndamage — a flattened hierarchy loses its children to either.",
          "values": []
        },
        {
          "name": "total-items",
          "description": "Result count behind `rows` in server mode: the empty state, the search\ncount and the table's paging are all derived from it, never `rows.length`.",
          "values": []
        },
        {
          "name": "row-click",
          "description": "Make rows clickable — the table's `xm-data-table-row-click` is composed,\nso it surfaces on this element.",
          "values": []
        },
        {
          "name": "row-key",
          "description": "Column key whose value is a row's stable identity, handed to the table.",
          "values": []
        },
        {
          "name": "group-by",
          "description": "Column key rows start grouped by, and what the default view restores to.\nThe user can change it from the setup panel or a column's own menu.",
          "values": []
        },
        { "name": "empty-heading", "values": [] },
        { "name": "empty-text", "values": [] },
        { "name": "search-placeholder", "values": [] },
        {
          "name": "toolbar",
          "description": "Drop the whole toolbar. Each cluster below can also be dropped on its own —\nthe toolbar belongs to the grid, so what it carries is per instance.",
          "values": []
        },
        { "name": "no-search", "values": [] },
        { "name": "no-views", "values": [] },
        { "name": "no-grouping", "values": [] },
        { "name": "no-columns", "values": [] },
        { "name": "no-density", "values": [] },
        { "name": "no-full-page", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-data-table",
      "description": "\n---\n\n\n### **Events:**\n - **xm-data-table-page-change** - Fired when the page changes (`detail.page`).\n- **xm-data-table-row-header-toggle** - Fired when a `row-header` row's fold chip is pressed (`detail.row`, `detail.index`, `detail.open`).\n- **type**\n- **xm-data-table-sort-change** - Fired when the sort changes (`detail.key`, `detail.direction`).\n- **xm-data-table-row-click** - Fired when a clickable row is activated (`detail.row`, `detail.index`).\n- **xm-data-table-group-toggle** - Fired when a `group-by` header row folds or unfolds (`detail.key`, `detail.open`, `detail.rows`).\n- **xm-data-table-row-expand** - Fired when a row's detail region opens (`detail.row`, `detail.index`, `detail.key`, `detail.open`).\n- **xm-data-table-row-collapse** - Fired when a row's detail region closes (`detail.row`, `detail.index`, `detail.key`, `detail.open`).\n- **xm-data-table-column-resize** - Fired when a column's width changes (`detail.key`, `detail.width`).\n- **xm-data-table-column-pin** - Fired when a column is pinned or released (`detail.key`, `detail.pinned`).\n- **xm-data-table-column-visibility** - Fired when a column is hidden or restored (`detail.key`, `detail.visible`).\n- **xm-data-table-column-wrap** - Fired when a column's text wrapping is toggled (`detail.key`, `detail.wrapped`).\n\n### **Methods:**\n - **pinColumn(key: _string_, pinned: _boolean_): _void_** - Pin a column to the left edge, or release it. A `locked` column ignores this.\n- **setColumnHidden(key: _string_, hidden: _boolean_): _void_** - Take a column out of the view, or put it back. A `locked` column ignores this.\n- **setColumnWrapped(key: _string_, wrapped: _boolean_): _void_** - Wrap a column's copy to three lines, or return it to one line + ellipsis.\nOnly a `wrappable` column responds.\n- **setColumnWidth(key: _string_, width: _number_): _void_** - Set a column's width in px, clamped to its own floor and the shared cap.\n- **resetColumnWidth(key: _string_): _void_** - Return a column to its declared `width`.\n- **setSort(key: _string | null_, direction: _SortDirection_): _void_** - Set (or clear, with `null`) the sort from outside the header row — a column\noptions menu, or restoring a saved layout. Applies locally in client mode\nand emits either way, exactly like a header click; `sort` stays the\nserver-mode controlled property and is untouched here. A cleared sort\nemits with an empty `key`.",
      "attributes": [
        { "name": "loading", "values": [] },
        { "name": "page-size", "values": [] },
        { "name": "empty-heading", "values": [] },
        { "name": "empty-text", "values": [] },
        {
          "name": "server",
          "description": "Server/controlled mode (AD-14): the consumer owns sort + paging. The table\nrenders `rows` verbatim, never sorts/slices a copy, derives the page count\nfrom `total-items` (not `rows.length`), and emits intents only.",
          "values": []
        },
        {
          "name": "total-items",
          "description": "Total item count for server-mode paging (pages = ceil(total-items/page-size)).",
          "values": []
        },
        {
          "name": "row-click",
          "description": "Make rows clickable — emits xm-data-table-row-click (AD-15).",
          "values": []
        },
        {
          "name": "sticky-header",
          "description": "Pin the header rows while the table body scrolls inside the frame. Pair\nwith `max-height` (or a host height) so the frame actually scrolls.",
          "values": []
        },
        {
          "name": "max-height",
          "description": "Scroll-viewport cap for `sticky-header` — any CSS length (\"360px\", \"50vh\").",
          "values": []
        },
        {
          "name": "fill",
          "description": "Stretch the frame to fill the host's full height instead of collapsing to\ncontent height. Pair with `sticky-header` and a definite-height host so the\ntable reaches the bottom edge and the scrollbar pins there even when the\nrows don't fill the viewport.",
          "values": []
        },
        {
          "name": "flush",
          "description": "Drop the frame's hairline border + corner radius for edge-to-edge\nembedding (the frame becomes flush with its container).",
          "values": []
        },
        {
          "name": "expandable",
          "description": "Enable per-row expansion (ADR 0019): adds a leading expander column whose\nchevron button toggles an in-place detail row under its data row.",
          "values": []
        },
        {
          "name": "expand-mode",
          "description": "`single` (default) keeps at most one row open; `multiple` allows any number.",
          "values": [{ "name": "DataTableExpandMode" }]
        },
        {
          "name": "row-key",
          "description": "Column key whose value is a row's stable expansion identity. Without it,\nidentity falls back to the row's position, which drifts across sort order\nand server-mode page swaps — set it whenever rows have an id.",
          "values": []
        },
        {
          "name": "density",
          "description": "Row rhythm. `compact` tightens the vertical cell padding one step so a\nlong list fits on one screen; the type scale and hairlines are unchanged.",
          "values": [{ "name": "DataTableDensity" }]
        },
        {
          "name": "group-by",
          "description": "Column key whose value groups consecutive rows under a foldable header\nrow (ADR 0030). Grouping runs over the rendered page, after sort.",
          "values": []
        },
        {
          "name": "actions-always",
          "description": "Keep the action rail visible at rest instead of revealing it on hover.",
          "values": []
        },
        {
          "name": "column-layout",
          "description": "Fixed-width column layout (ADR 0034): each column renders at a declared\npixel width via `<colgroup>` + `table-layout: fixed`. This is what makes\nsticky offsets computable, so it also gates pinning and resizing. Off by\ndefault — without it the table auto-sizes exactly as before.",
          "values": []
        },
        {
          "name": "resizable-columns",
          "description": "Drag a header's trailing edge to resize; double-click resets to the\ncolumn's declared `width`. Requires `column-layout`.",
          "values": []
        },
        {
          "name": "fit-columns",
          "description": "Grow the columns to fill the scroll frame whenever the declared widths add\nup to less than the space available. Surplus is shared across the unpinned\ncolumns in proportion to their declared width; an overflowing table is\nuntouched and still scrolls. Requires `column-layout`.",
          "values": []
        },
        {
          "name": "totals",
          "description": "Render the aggregate `<tfoot>` row built from each column's `total`. Under\n`sticky-header` it pins to the bottom of the scroll frame.",
          "values": []
        },
        {
          "name": "totals-label",
          "description": "Copy for the totals row's first cell (e.g. \"18 tools\").",
          "values": []
        },
        {
          "name": "overlay-scroll",
          "description": "Replace the frame's native scrollbars with overlay rails, so nothing\nreserves a band inside the frame. Wheel and trackpad are untouched.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-date-range",
      "description": "\n---\n\n\n### **Events:**\n - **xm-date-range-change** - Fired when the selected date range changes.",
      "attributes": [
        { "name": "from", "values": [] },
        { "name": "to", "values": [] },
        { "name": "placeholder", "values": [] },
        { "name": "open", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-dialog",
      "description": "\n---\n\n\n### **Events:**\n - **close** - Fired when the element requests to close.",
      "attributes": [
        { "name": "open", "values": [] },
        { "name": "no-scrim-close", "values": [] },
        { "name": "static", "values": [] },
        { "name": "label", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-divider",
      "description": "\n---\n",
      "attributes": [
        { "name": "orientation", "values": [{ "name": "DividerOrientation" }] }
      ],
      "references": []
    },
    {
      "name": "xm-empty-state",
      "description": "\n---\n",
      "attributes": [
        { "name": "heading", "values": [] },
        {
          "name": "icon",
          "description": "A primitives icon element name (e.g. \"xm-search-icon\"). Used only when no\nslot=\"icon\" content is supplied.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-expansion-panel",
      "description": "\n---\n\n\n### **Events:**\n - **change** - Fired on commit with the new value in `detail`.\n- **xm-expansion-panel-open** - Coordination event (on document) so sibling panels close in single-open mode.",
      "attributes": [
        { "name": "open", "values": [] },
        { "name": "heading", "values": [] },
        { "name": "disabled", "values": [] },
        { "name": "value", "values": [] },
        { "name": "name", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-file-input",
      "description": "\n---\n\n\n### **Events:**\n - **change** - Fired on commit with the new value in `detail`.\n- **input** - Fired on each edit with the current value in `detail` (inherited by every field).\n\n### **Methods:**\n - **setFormDisabled(disabled: _boolean_): _void_** - Down-propagation hook: xm-form (Story 2.10) sets this; it OR's with the\nfield's own disabled and can never re-enable a self-disabled field.\n\n\n\n",
      "attributes": [
        {
          "name": "accept",
          "description": "Native accept filter (e.g. \".yml,.json,image/*\").",
          "values": []
        },
        {
          "name": "multiple",
          "description": "Allow selecting more than one file.",
          "values": []
        },
        { "name": "label", "values": [] },
        { "name": "helper", "values": [] },
        {
          "name": "error",
          "description": "Severity copy. Non-empty ⇒ the field is in error (icon + copy, never color).",
          "values": []
        },
        { "name": "size", "values": [{ "name": "FieldSize" }] },
        { "name": "required", "values": [] },
        { "name": "disabled", "values": [] },
        { "name": "readonly", "values": [] },
        { "name": "loading", "values": [] },
        {
          "name": "name",
          "description": "Form-control name — mirrors native <input name>.",
          "values": []
        },
        {
          "name": "value",
          "description": "INITIAL value (uncontrolled-first, AD-6): the `value` attribute seeds the\nlive state once, then never overrides user input. Mapped from attribute\n`value` so authors write `<xm-text-field value=\"…\">`.",
          "values": []
        },
        {
          "name": "checked",
          "description": "INITIAL checked for toggle subclasses; mapped from attribute `checked`.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-form",
      "description": "\n---\n\n\n### **Events:**\n - **submit** - Fired when the form is submitted with its values in `detail`.\n\n### **Methods:**\n - **validate(): _FormResult_** - Public read contract: pull each child's live value at read time (children\nare uncontrolled — the form does not drive their renders, AD-6).\n- **submit(): _FormResult_** - Imperative submit — same path the submit button / Enter take.",
      "attributes": [
        { "name": "disabled", "values": [] },
        { "name": "readonly", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-grid",
      "description": "\n---\n",
      "attributes": [
        { "name": "columns", "values": [] },
        { "name": "gap", "values": [{ "name": "GridGap" }] }
      ],
      "references": []
    },
    {
      "name": "xm-icon",
      "description": "\n---\n",
      "attributes": [
        {
          "name": "name",
          "description": "Material Symbol name to render, e.g. \"close\" or \"search\".",
          "values": []
        },
        {
          "name": "size",
          "description": "Rendered edge length in px (square).",
          "values": []
        },
        {
          "name": "title",
          "description": "Accessible label — sets role=\"img\" + <title>; omit for decorative icons.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-kbd",
      "description": "\n---\n",
      "attributes": [],
      "references": []
    },
    {
      "name": "xm-list",
      "description": "\n---\n\n\n### **Events:**\n - **change** - Fired on commit with the new value in `detail`.",
      "attributes": [
        { "name": "interactive", "values": [] },
        { "name": "selectable", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-list-item",
      "description": "\n---\n",
      "attributes": [
        { "name": "value", "values": [] },
        { "name": "selected", "values": [] },
        { "name": "disabled", "values": [] },
        { "name": "secondary", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-menu",
      "description": "\n---\n\n\n### **Events:**\n - **close** - Fired when the element requests to close.\n- **xm-menu-select** - Fired when a menu option is selected.\n- **xm-menu-item-activate** - Fired when a menu item is activated.\n- **xm-menu-item-hover** - Fired when a menu item is hovered.",
      "attributes": [
        { "name": "open", "values": [] },
        { "name": "placement", "values": [{ "name": "OverlayPlacement" }] },
        { "name": "label", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-menu-item",
      "description": "\n---\n",
      "attributes": [
        { "name": "value", "values": [] },
        { "name": "disabled", "values": [] },
        { "name": "active", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-multi-select",
      "description": "\n---\n\n\n### **Events:**\n - **change** - Fired on every toggle; `detail.value` is the full selection as an Array<primitive>.\n- **xm-multi-select-search** - Server mode: debounced search intent (`detail.query`); also fired on open with the current query. The consumer fetches and sets `.options` with the matching set.\n- **xm-multi-select-load-more** - Server mode: fired once per page when the listbox scrolls near its end and `options.length < totalItems` (`detail = { query, offset }`). The consumer appends the next page to `.options`.\n- **input** - Fired on each edit with the current value in `detail` (inherited by every field).\n\n### **Methods:**\n \n- **setFormDisabled(disabled: _boolean_): _void_** - Down-propagation hook: xm-form (Story 2.10) sets this; it OR's with the\nfield's own disabled and can never re-enable a self-disabled field.\n\n\n",
      "attributes": [
        {
          "name": "placeholder",
          "description": "Shown on the trigger when nothing is selected.",
          "values": []
        },
        {
          "name": "max",
          "description": "Selection cap (0 = uncapped). At the cap, unselected options disable; selected stay removable.",
          "values": []
        },
        {
          "name": "searchable",
          "description": "Render the in-panel search filter.",
          "values": []
        },
        {
          "name": "inline",
          "description": "Dock the panel in place of the combobox trigger — an always-open filter\nrail (ADR 0031). Search, bulk actions, recents, sections, virtualization\nand the selection contract are unchanged; only the trigger and the\noverlay drop away, and the listbox becomes the focus target.",
          "values": []
        },
        {
          "name": "bulk-actions",
          "description": "Render the \"Select all\" / \"Clear\" bulk-action row. \"Select all\" operates on the search-filtered set and respects `max`.",
          "values": []
        },
        {
          "name": "server",
          "description": "Server mode (ADR 0023): the backend owns filtering — client-side label matching is off, the search emits `xm-multi-select-search`, and scrolling near the end emits `xm-multi-select-load-more`.",
          "values": []
        },
        {
          "name": "options-loading",
          "description": "Signal a consumer fetch in flight (server-mode search, or any options refresh): rows already present dim to ghost ink, skeleton rows fade in under them, and \"No matches\" is suppressed. Distinct from the inherited field-level `loading`, which disables the whole control.",
          "values": []
        },
        {
          "name": "search-debounce",
          "description": "Debounce for `xm-multi-select-search` in milliseconds.",
          "values": []
        },
        {
          "name": "total-items",
          "description": "Server mode: total backend match count for the current query. Drives the \"Showing N of M matches\" note and load-more paging (0 = unknown/complete).",
          "values": []
        },
        { "name": "label", "values": [] },
        { "name": "helper", "values": [] },
        {
          "name": "error",
          "description": "Severity copy. Non-empty ⇒ the field is in error (icon + copy, never color).",
          "values": []
        },
        { "name": "size", "values": [{ "name": "FieldSize" }] },
        { "name": "required", "values": [] },
        { "name": "disabled", "values": [] },
        { "name": "readonly", "values": [] },
        { "name": "loading", "values": [] },
        {
          "name": "name",
          "description": "Form-control name — mirrors native <input name>.",
          "values": []
        },
        {
          "name": "value",
          "description": "INITIAL value (uncontrolled-first, AD-6): the `value` attribute seeds the\nlive state once, then never overrides user input. Mapped from attribute\n`value` so authors write `<xm-text-field value=\"…\">`.",
          "values": []
        },
        {
          "name": "checked",
          "description": "INITIAL checked for toggle subclasses; mapped from attribute `checked`.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-navigation-drawer",
      "description": "\n---\n\n\n### **Events:**\n - **close** - Fired when the element requests to close.",
      "attributes": [
        { "name": "open", "values": [] },
        { "name": "collapsed", "values": [] },
        { "name": "modal", "values": [] },
        { "name": "label", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-overlay",
      "description": "\n---\n\n\n### **Events:**\n - **xm-overlay-open** - Fired when the overlay opens.\n- **xm-overlay-close** - Fired when the overlay closes.",
      "attributes": [
        { "name": "open", "values": [] },
        { "name": "mode", "values": [{ "name": "OverlayMode" }] },
        { "name": "tier", "values": [{ "name": "OverlayTier" }] },
        { "name": "placement", "values": [{ "name": "OverlayPlacement" }] },
        { "name": "label", "values": [] },
        {
          "name": "match-anchor-width",
          "description": "Non-modal dropdowns: size the surface's border box to exactly the anchor's\nwidth, so a width-matching listbox aligns border-to-border with its trigger\n(ADR 0025). The consumer stops sizing the panel content to the anchor.",
          "values": []
        },
        {
          "name": "arrow",
          "description": "Non-modal overlays: weld a small pointer to the surface edge facing the\nanchor. It tracks the anchor's centre — when the surface is clamped at a\nviewport edge the pointer slides along that edge and keeps pointing at the\ntrigger (ADR 0033). Opt-in, so menus and dialogs are unaffected.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-pagination",
      "description": "\n---\n\n\n### **Events:**\n - **xm-pagination-page-change** - Fired when the page changes (`detail.page`).\n- **change** - Fired on commit with the new value in `detail`.\n- **xm-pagination-offset-change** - Fired in offset/limit mode (`detail.offset`, `detail.limit`).",
      "attributes": [
        { "name": "page", "values": [] },
        { "name": "total", "values": [] },
        { "name": "siblings", "values": [] },
        { "name": "size", "values": [{ "name": "PaginationSize" }] },
        {
          "name": "offset",
          "description": "Offset/limit mode (AD-18): set `limit` + `total-items` (+ `offset`) instead\nof `page` + `total`. The page-based API stays available and unchanged; in\nthis mode the control ALSO emits xm-pagination-offset-change.",
          "values": []
        },
        { "name": "limit", "values": [] },
        { "name": "total-items", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-popover",
      "description": "\n---\n\n\n### **Events:**\n - **xm-popover-open** - Fired when the popover opens.\n- **xm-popover-close** - Fired when the popover closes.",
      "attributes": [
        { "name": "open", "values": [] },
        { "name": "placement", "values": [{ "name": "OverlayPlacement" }] },
        { "name": "label", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-progress",
      "description": "\n---\n",
      "attributes": [
        { "name": "variant", "values": [{ "name": "ProgressVariant" }] },
        { "name": "value", "values": [] },
        { "name": "indeterminate", "values": [] },
        { "name": "size", "values": [{ "name": "ProgressSize" }] },
        { "name": "label", "values": [] },
        { "name": "show-label", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-radio",
      "description": "\n---\n\n\n### **Events:**\n - **change** - Fired on commit with the new value in `detail`.",
      "attributes": [
        {
          "name": "value",
          "description": "The primitive value this radio contributes to the group when selected.",
          "values": []
        },
        {
          "name": "disabled",
          "description": "Own disabled — OR'd with the group's disabled by the group.",
          "values": []
        },
        {
          "name": "checked",
          "description": "Driven by the group; never set directly by authors.",
          "values": []
        },
        {
          "name": "group-disabled",
          "description": "Effective disabled the group computes (group OR own).",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-radio-group",
      "description": "\n---\n\n\n### **Events:**\n - **change** - Fired on commit with the new value in `detail` (inherited by every field).\n- **input** - Fired on each edit with the current value in `detail` (inherited by every field).\n\n### **Methods:**\n - **setFormDisabled(disabled: _boolean_): _void_** - Down-propagation hook: xm-form (Story 2.10) sets this; it OR's with the\nfield's own disabled and can never re-enable a self-disabled field.\n\n\n\n",
      "attributes": [
        { "name": "label", "values": [] },
        { "name": "helper", "values": [] },
        {
          "name": "error",
          "description": "Severity copy. Non-empty ⇒ the field is in error (icon + copy, never color).",
          "values": []
        },
        { "name": "size", "values": [{ "name": "FieldSize" }] },
        { "name": "required", "values": [] },
        { "name": "disabled", "values": [] },
        { "name": "readonly", "values": [] },
        { "name": "loading", "values": [] },
        {
          "name": "name",
          "description": "Form-control name — mirrors native <input name>.",
          "values": []
        },
        {
          "name": "value",
          "description": "INITIAL value (uncontrolled-first, AD-6): the `value` attribute seeds the\nlive state once, then never overrides user input. Mapped from attribute\n`value` so authors write `<xm-text-field value=\"…\">`.",
          "values": []
        },
        {
          "name": "checked",
          "description": "INITIAL checked for toggle subclasses; mapped from attribute `checked`.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-select",
      "description": "\n---\n\n\n### **Events:**\n - **change** - Fired on commit with the new value in `detail`.\n- **input** - Fired on each edit with the current value in `detail` (inherited by every field).\n\n### **Methods:**\n \n- **setFormDisabled(disabled: _boolean_): _void_** - Down-propagation hook: xm-form (Story 2.10) sets this; it OR's with the\nfield's own disabled and can never re-enable a self-disabled field.\n\n\n",
      "attributes": [
        {
          "name": "placeholder",
          "description": "Shown on the closed control when nothing is selected.",
          "values": []
        },
        { "name": "label", "values": [] },
        { "name": "helper", "values": [] },
        {
          "name": "error",
          "description": "Severity copy. Non-empty ⇒ the field is in error (icon + copy, never color).",
          "values": []
        },
        { "name": "size", "values": [{ "name": "FieldSize" }] },
        { "name": "required", "values": [] },
        { "name": "disabled", "values": [] },
        { "name": "readonly", "values": [] },
        { "name": "loading", "values": [] },
        {
          "name": "name",
          "description": "Form-control name — mirrors native <input name>.",
          "values": []
        },
        {
          "name": "value",
          "description": "INITIAL value (uncontrolled-first, AD-6): the `value` attribute seeds the\nlive state once, then never overrides user input. Mapped from attribute\n`value` so authors write `<xm-text-field value=\"…\">`.",
          "values": []
        },
        {
          "name": "checked",
          "description": "INITIAL checked for toggle subclasses; mapped from attribute `checked`.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-side-sheet",
      "description": "\n---\n\n\n### **Events:**\n - **close** - Fired when the sheet requests to close; detail carries the reason (esc, backdrop, api).",
      "attributes": [
        { "name": "open", "values": [] },
        { "name": "modal", "values": [] },
        { "name": "side", "values": [{ "name": "SideSheetSide" }] },
        { "name": "no-scrim-close", "values": [] },
        { "name": "static", "values": [] },
        { "name": "label", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-sidebar-item",
      "description": "\n---\n",
      "attributes": [
        { "name": "title", "values": [] },
        { "name": "layout", "values": [{ "name": "SidebarLayout" }] },
        { "name": "active", "values": [] },
        { "name": "hover", "values": [] },
        { "name": "show-dot", "values": [] },
        { "name": "collapsed", "values": [] },
        {
          "name": "badge",
          "description": "Trailing count on a `row`-layout item (unread, open tickets). On the\ncollapsed rail there is no room for a figure, so the stripe takes the\naccent instead — the signal survives the collapse, the number does not.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-skeleton",
      "description": "\n---\n",
      "attributes": [
        { "name": "variant", "values": [{ "name": "SkeletonVariant" }] },
        { "name": "width", "values": [] },
        { "name": "height", "values": [] },
        { "name": "lines", "values": [] },
        { "name": "radius", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-slider",
      "description": "\n---\n\n\n### **Events:**\n - **input** - Fired on each edit with the current value in `detail`.\n- **change** - Fired on commit with the new value in `detail`.\n\n### **Methods:**\n - **setFormDisabled(disabled: _boolean_): _void_** - Down-propagation hook: xm-form (Story 2.10) sets this; it OR's with the\nfield's own disabled and can never re-enable a self-disabled field.\n\n\n\n",
      "attributes": [
        { "name": "min", "values": [] },
        { "name": "max", "values": [] },
        { "name": "step", "values": [] },
        {
          "name": "show-value",
          "description": "Show the current numeric value as a label beside the track.",
          "values": []
        },
        {
          "name": "unit",
          "description": "Optional unit appended to the displayed value (e.g. \"%\", \"px\").",
          "values": []
        },
        { "name": "label", "values": [] },
        { "name": "helper", "values": [] },
        {
          "name": "error",
          "description": "Severity copy. Non-empty ⇒ the field is in error (icon + copy, never color).",
          "values": []
        },
        { "name": "size", "values": [{ "name": "FieldSize" }] },
        { "name": "required", "values": [] },
        { "name": "disabled", "values": [] },
        { "name": "readonly", "values": [] },
        { "name": "loading", "values": [] },
        {
          "name": "name",
          "description": "Form-control name — mirrors native <input name>.",
          "values": []
        },
        {
          "name": "value",
          "description": "INITIAL value (uncontrolled-first, AD-6): the `value` attribute seeds the\nlive state once, then never overrides user input. Mapped from attribute\n`value` so authors write `<xm-text-field value=\"…\">`.",
          "values": []
        },
        {
          "name": "checked",
          "description": "INITIAL checked for toggle subclasses; mapped from attribute `checked`.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-snackbar",
      "description": "\n---\n\n\n### **Events:**\n - **snackbar-dismiss** - Fired when the snackbar is dismissed.\n- **snackbar-primary** - Fired when the snackbar's primary action is activated.",
      "attributes": [
        { "name": "kind", "values": [{ "name": "SnackKind" }] },
        { "name": "code", "values": [] },
        { "name": "title", "values": [] },
        { "name": "message", "values": [] },
        { "name": "primary-label", "values": [] },
        { "name": "secondary-label", "values": [] },
        { "name": "show-dismiss", "values": [] },
        { "name": "static", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-stack",
      "description": "\n---\n",
      "attributes": [
        { "name": "direction", "values": [{ "name": "StackDirection" }] },
        { "name": "gap", "values": [{ "name": "StackGap" }] },
        { "name": "align", "values": [{ "name": "StackAlign" }] },
        { "name": "justify", "values": [{ "name": "StackJustify" }] },
        { "name": "wrap", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-stat",
      "description": "\n---\n",
      "attributes": [
        {
          "name": "label",
          "description": "Caption above the figure, in the mono label typescale. Sentence case.",
          "values": []
        },
        {
          "name": "value",
          "description": "The figure itself, pre-formatted by the caller (grouping, units, currency).",
          "values": []
        },
        {
          "name": "delta",
          "description": "Change beside the figure, sign included (`\"+18%\"`, `\"-4\"`). Rendered in the\ncoral accent whatever the direction — direction is carried by the sign and\nthe note, never by a red/green hue (POLICIES rule 3a).",
          "values": []
        },
        {
          "name": "delta-note",
          "description": "What the delta is measured against (`\"vs 7-day avg\"`).",
          "values": []
        },
        {
          "name": "size",
          "description": "`hero` for the one figure a screen is about, `md` (default) for the strip\nbeside it, `sm` for a figure inside dense chrome.",
          "values": [{ "name": "StatSize" }]
        }
      ],
      "references": []
    },
    {
      "name": "xm-switch",
      "description": "\n---\n\n\n### **Events:**\n - **input** - Fired on each edit with the current value in `detail` (inherited by every field).\n- **change** - Fired on commit with the new value in `detail` (inherited by every field).\n\n### **Methods:**\n - **setFormDisabled(disabled: _boolean_): _void_** - Down-propagation hook: xm-form (Story 2.10) sets this; it OR's with the\nfield's own disabled and can never re-enable a self-disabled field.\n\n\n\n",
      "attributes": [
        { "name": "label", "values": [] },
        { "name": "helper", "values": [] },
        {
          "name": "error",
          "description": "Severity copy. Non-empty ⇒ the field is in error (icon + copy, never color).",
          "values": []
        },
        { "name": "size", "values": [{ "name": "FieldSize" }] },
        { "name": "required", "values": [] },
        { "name": "disabled", "values": [] },
        { "name": "readonly", "values": [] },
        { "name": "loading", "values": [] },
        {
          "name": "name",
          "description": "Form-control name — mirrors native <input name>.",
          "values": []
        },
        {
          "name": "value",
          "description": "INITIAL value (uncontrolled-first, AD-6): the `value` attribute seeds the\nlive state once, then never overrides user input. Mapped from attribute\n`value` so authors write `<xm-text-field value=\"…\">`.",
          "values": []
        },
        {
          "name": "checked",
          "description": "INITIAL checked for toggle subclasses; mapped from attribute `checked`.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-table",
      "description": "\n---\n",
      "attributes": [{ "name": "caption", "values": [] }],
      "references": []
    },
    {
      "name": "xm-tab",
      "description": "\n---\n\n\n### **Events:**\n - **change** - Fired on commit with the new value in `detail`.",
      "attributes": [
        { "name": "value", "values": [] },
        { "name": "disabled", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-tab-panel",
      "description": "\n---\n",
      "attributes": [{ "name": "value", "values": [] }],
      "references": []
    },
    {
      "name": "xm-tabs",
      "description": "\n---\n\n\n### **Events:**\n - **change**",
      "attributes": [
        { "name": "value", "values": [] },
        { "name": "size", "values": [{ "name": "TabsSize" }] },
        { "name": "inset", "values": [] }
      ],
      "references": []
    },
    {
      "name": "xm-text-field",
      "description": "\n---\n\n\n### **Events:**\n - **input** - Fired on each edit with the current value in `detail` (inherited by every field).\n- **change** - Fired on commit with the new value in `detail` (inherited by every field).\n\n### **Methods:**\n \n- **setFormDisabled(disabled: _boolean_): _void_** - Down-propagation hook: xm-form (Story 2.10) sets this; it OR's with the\nfield's own disabled and can never re-enable a self-disabled field.\n\n\n",
      "attributes": [
        {
          "name": "type",
          "description": "Native input type — single-line text variants only.",
          "values": [{ "name": "TextFieldType" }]
        },
        {
          "name": "placeholder",
          "description": "Native placeholder — shown when the live value is empty.",
          "values": []
        },
        {
          "name": "clearable",
          "description": "Show a trailing clear button when the field has a value (implied for type=\"search\").",
          "values": []
        },
        { "name": "label", "values": [] },
        { "name": "helper", "values": [] },
        {
          "name": "error",
          "description": "Severity copy. Non-empty ⇒ the field is in error (icon + copy, never color).",
          "values": []
        },
        { "name": "size", "values": [{ "name": "FieldSize" }] },
        { "name": "required", "values": [] },
        { "name": "disabled", "values": [] },
        { "name": "readonly", "values": [] },
        { "name": "loading", "values": [] },
        {
          "name": "name",
          "description": "Form-control name — mirrors native <input name>.",
          "values": []
        },
        {
          "name": "value",
          "description": "INITIAL value (uncontrolled-first, AD-6): the `value` attribute seeds the\nlive state once, then never overrides user input. Mapped from attribute\n`value` so authors write `<xm-text-field value=\"…\">`.",
          "values": []
        },
        {
          "name": "checked",
          "description": "INITIAL checked for toggle subclasses; mapped from attribute `checked`.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-textarea",
      "description": "\n---\n\n\n### **Events:**\n - **input** - Fired on each edit with the current value in `detail` (inherited by every field).\n- **change** - Fired on commit with the new value in `detail` (inherited by every field).\n\n### **Methods:**\n \n- **setFormDisabled(disabled: _boolean_): _void_** - Down-propagation hook: xm-form (Story 2.10) sets this; it OR's with the\nfield's own disabled and can never re-enable a self-disabled field.\n\n\n",
      "attributes": [
        {
          "name": "rows",
          "description": "Initial visible height in text rows.",
          "values": []
        },
        {
          "name": "placeholder",
          "description": "Native placeholder — shown when the live value is empty.",
          "values": []
        },
        {
          "name": "auto-grow",
          "description": "Grow the textarea height with content up to `maxRows` (no scroll jitter).",
          "values": []
        },
        {
          "name": "max-rows",
          "description": "Cap for auto-grow, in rows. Beyond it the textarea scrolls.",
          "values": []
        },
        { "name": "label", "values": [] },
        { "name": "helper", "values": [] },
        {
          "name": "error",
          "description": "Severity copy. Non-empty ⇒ the field is in error (icon + copy, never color).",
          "values": []
        },
        { "name": "size", "values": [{ "name": "FieldSize" }] },
        { "name": "required", "values": [] },
        { "name": "disabled", "values": [] },
        { "name": "readonly", "values": [] },
        { "name": "loading", "values": [] },
        {
          "name": "name",
          "description": "Form-control name — mirrors native <input name>.",
          "values": []
        },
        {
          "name": "value",
          "description": "INITIAL value (uncontrolled-first, AD-6): the `value` attribute seeds the\nlive state once, then never overrides user input. Mapped from attribute\n`value` so authors write `<xm-text-field value=\"…\">`.",
          "values": []
        },
        {
          "name": "checked",
          "description": "INITIAL checked for toggle subclasses; mapped from attribute `checked`.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-tooltip",
      "description": "\n---\n",
      "attributes": [
        { "name": "text", "values": [] },
        { "name": "placement", "values": [{ "name": "OverlayPlacement" }] },
        { "name": "open-delay", "values": [] },
        { "name": "open", "values": [] },
        {
          "name": "delegate",
          "description": "Label every `[data-tip]` descendant of the slotted subtree from one\ninstance, instead of labelling a single `slot=\"trigger\"` control.",
          "values": []
        }
      ],
      "references": []
    },
    {
      "name": "xm-file-validation-block",
      "description": "\n---\n\n\n### **Events:**\n - **name**\n- **file-pick** - Fired when the user requests to pick a file.\n- **file-drop** - Fired when a file is dropped (`detail.file`).\n- **copy-path** - Fired when the file path is copied (`detail.path`).\n- **error-dismiss** - Fired when the validation error is dismissed.",
      "attributes": [
        { "name": "state", "values": [{ "name": "ValidationState" }] },
        { "name": "hint", "values": [] },
        { "name": "file-csv", "values": [] },
        { "name": "error-json", "values": [] }
      ],
      "references": []
    }
  ]
}
