{
  "schemaVersion": "1.0.0",
  "readme": "",
  "modules": [
    {
      "kind": "javascript-module",
      "path": "src/content/accordion-item.js",
      "declarations": [
        {
          "kind": "class",
          "description": "An individual collapsible section inside an Accordion. The question attribute supplies the\nclickable header text, and slotted children become the expandable body content.",
          "name": "ArcAccordionItem",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "answer",
              "description": "Answer content from slotted children",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "question",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The heading text displayed on the trigger button. Should be a concise, scannable label or question.",
              "attribute": "question",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "question",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The heading text displayed on the trigger button. Should be a concise, scannable label or question.",
              "fieldName": "question"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-accordion-item",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcAccordionItem",
          "declaration": {
            "name": "ArcAccordionItem",
            "module": "src/content/accordion-item.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/accordion.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Expandable content sections with smooth height animations. Ideal for FAQs, settings panels, and\nany UI that benefits from progressive disclosure.",
          "name": "ArcAccordion",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "accordion"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "multiple",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, allows multiple accordion panels to be open simultaneously. When false (default), opening one panel closes any other open panel.",
              "attribute": "multiple",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "multiple",
              "type": {
                "text": "boolean"
              },
              "description": "When true, allows multiple accordion panels to be open simultaneously. When false (default), opening one panel closes any other open panel.",
              "fieldName": "multiple",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-accordion",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcAccordion",
          "declaration": {
            "name": "ArcAccordion",
            "module": "src/content/accordion.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/aspect-ratio.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Container that enforces a consistent width-to-height ratio on its content, ideal for images,\nvideos, and embedded media.",
          "name": "ArcAspectRatio",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "container"
            },
            {
              "name": "inner"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "DEFAULT_RATIO",
              "type": {
                "text": "string"
              },
              "static": true,
              "default": "'16/9'",
              "description": "The documented default, and what anything unusable normalises to."
            },
            {
              "kind": "method",
              "name": "parseRatio",
              "static": true,
              "parameters": [
                {
                  "name": "value"
                }
              ],
              "description": "`W/H` if the string is a usable ratio, else null.\n\nA zero on either side is rejected rather than passed through: `0/5` matched\nthe old format check, reached the CSS as `aspect-ratio: 0 / 5`, and\ncollapsed the box. The guard for exactly that (`if (w === 0) …`) existed —\ninside `_paddingFallback`, a getter the render never called, so the check\nhad been written and then stranded. That getter is gone; its docstring\npromised a padding-top fallback \"for browsers that don't support the\naspect-ratio CSS property\" and nothing rendered one, which is the same\ndoc/code drift as the rest of this batch."
            },
            {
              "kind": "field",
              "name": "ratio",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'16/9'",
              "description": "Aspect ratio as a `W/H` string. Supports integers and decimals. An unparseable value, or one with a zero on either side, is normalised **on the property** to `16/9` — so reading `ratio` back always gives the ratio the component is actually using.",
              "attribute": "ratio",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "ratio",
              "type": {
                "text": "string"
              },
              "default": "'16/9'",
              "description": "Aspect ratio as a `W/H` string. Supports integers and decimals. An unparseable value, or one with a zero on either side, is normalised **on the property** to `16/9` — so reading `ratio` back always gives the ratio the component is actually using.",
              "fieldName": "ratio"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-aspect-ratio",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcAspectRatio",
          "declaration": {
            "name": "ArcAspectRatio",
            "module": "src/content/aspect-ratio.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/avatar-group.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Stack of avatars with overflow count badge.",
          "name": "ArcAvatarGroup",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "group"
            },
            {
              "name": "overflow"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "max",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "Infinity",
              "description": "Maximum number of avatars to display. Excess avatars are hidden and a \"+N\" overflow badge is shown.",
              "attribute": "max"
            },
            {
              "kind": "field",
              "name": "overlap",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Overlap density preset. sm = -8px, md = -12px, lg = -16px negative margin between avatars.",
              "attribute": "overlap",
              "default": "'md'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "max",
              "type": {
                "text": "number"
              },
              "default": "Infinity",
              "description": "Maximum number of avatars to display. Excess avatars are hidden and a \"+N\" overflow badge is shown.",
              "fieldName": "max"
            },
            {
              "name": "overlap",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Overlap density preset. sm = -8px, md = -12px, lg = -16px negative margin between avatars.",
              "fieldName": "overlap",
              "default": "'md'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-avatar-group",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcAvatarGroup",
          "declaration": {
            "name": "ArcAvatarGroup",
            "module": "src/content/avatar-group.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/avatar.js",
      "declarations": [
        {
          "kind": "class",
          "description": "User avatar with image or initials fallback.",
          "name": "ArcAvatar",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "img"
            },
            {
              "name": "initials"
            },
            {
              "name": "avatar"
            },
            {
              "name": "status"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "src",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Image URL for the avatar. When provided, renders an `<img>` element. When empty, displays initials derived from the `name` prop.",
              "attribute": "src"
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "User name used to generate initials (first letter, uppercased) and as the `alt` text / `aria-label` for the avatar.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls avatar dimensions: `sm` (32px), `md` (40px), `lg` (56px).",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "status",
              "privacy": "public",
              "type": {
                "text": "'' | 'online' | 'offline' | 'busy' | 'away'"
              },
              "description": "Shows a status indicator dot. Empty (the default) shows none. An unrecognised value falls back to empty rather than rendering an uncoloured dot that screen readers announce by its bogus name.",
              "attribute": "status",
              "default": "''",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "shape",
              "privacy": "public",
              "type": {
                "text": "'circle' | 'square' | 'rounded'"
              },
              "description": "Controls the avatar shape. Options: 'circle', 'square', 'rounded'.",
              "attribute": "shape",
              "default": "'circle'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "src",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Image URL for the avatar. When provided, renders an `<img>` element. When empty, displays initials derived from the `name` prop.",
              "fieldName": "src"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "User name used to generate initials (first letter, uppercased) and as the `alt` text / `aria-label` for the avatar.",
              "fieldName": "name"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls avatar dimensions: `sm` (32px), `md` (40px), `lg` (56px).",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "shape",
              "type": {
                "text": "'circle' | 'square' | 'rounded'"
              },
              "description": "Controls the avatar shape. Options: 'circle', 'square', 'rounded'.",
              "fieldName": "shape",
              "default": "'circle'"
            },
            {
              "name": "status",
              "type": {
                "text": "'' | 'online' | 'offline' | 'busy' | 'away'"
              },
              "description": "Shows a status indicator dot. Empty (the default) shows none. An unrecognised value falls back to empty rather than rendering an uncoloured dot that screen readers announce by its bogus name.",
              "fieldName": "status",
              "default": "''"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-avatar",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcAvatar",
          "declaration": {
            "name": "ArcAvatar",
            "module": "src/content/avatar.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/card.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Content container with subtle border styling and hover effects. Links the entire card surface\nwhen an href is provided, creating a seamless clickable area with an animated gradient border.",
          "name": "ArcCard",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "body"
            },
            {
              "name": "footer"
            },
            {
              "name": "card"
            },
            {
              "name": "inner"
            }
          ],
          "slots": [
            {
              "description": "Default content. Wrapping the content in a single `<a>` adopts it as the card's link — the recommended form for cards that must work before hydration or without JavaScript. The anchor fills the padded surface; the `footer` slot stays outside it so footer actions remain separately clickable.",
              "name": ""
            },
            {
              "name": "footer"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "href",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "When set, renders the card as an anchor element, making the entire card surface a clickable link. On hover, the border transitions to a blue-to-violet gradient and the inner surface gains a lift shadow.",
              "attribute": "href"
            },
            {
              "kind": "field",
              "name": "padding",
              "privacy": "public",
              "type": {
                "text": "'none' | 'sm' | 'md' | 'lg'"
              },
              "description": "Controls internal spacing. Options: 'none', 'sm', 'md', 'lg'.",
              "attribute": "padding",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "interactive",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Enables hover effects for clickable cards that trigger JS instead of navigating via href.",
              "attribute": "interactive",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "href",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "When set, renders the card as an anchor element, making the entire card surface a clickable link. On hover, the border transitions to a blue-to-violet gradient and the inner surface gains a lift shadow.",
              "fieldName": "href"
            },
            {
              "name": "padding",
              "type": {
                "text": "'none' | 'sm' | 'md' | 'lg'"
              },
              "description": "Controls internal spacing. Options: 'none', 'sm', 'md', 'lg'.",
              "fieldName": "padding",
              "default": "'md'"
            },
            {
              "name": "interactive",
              "type": {
                "text": "boolean"
              },
              "description": "Enables hover effects for clickable cards that trigger JS instead of navigating via href.",
              "fieldName": "interactive",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-card",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcCard",
          "declaration": {
            "name": "ArcCard",
            "module": "src/content/card.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/carousel.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A scrollable slide container with navigation arrows, dot indicators, auto-play, looping, and\nkeyboard controls.",
          "name": "ArcCarousel",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "carousel"
            },
            {
              "name": "viewport"
            },
            {
              "name": "arrow-prev"
            },
            {
              "name": "arrow-next"
            },
            {
              "name": "dots"
            },
            {
              "name": "dot"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "autoPlay",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Enables automatic slide advancement on a timer. Pauses on hover and focus, respects prefers-reduced-motion.",
              "attribute": "autoPlay",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "interval",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Auto-play interval in milliseconds between slide transitions.",
              "attribute": "interval",
              "default": "5000"
            },
            {
              "kind": "field",
              "name": "loop",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Enables wrapping at the edges so the last slide connects to the first and vice versa.",
              "attribute": "loop",
              "default": "true",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "showDots",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Shows dot indicators below the viewport for direct slide navigation.",
              "attribute": "showDots",
              "default": "true",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "showArrows",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Shows previous/next arrow buttons on the left and right edges of the viewport.",
              "attribute": "showArrows",
              "default": "true",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when the active slide changes"
            }
          ],
          "attributes": [
            {
              "name": "autoPlay",
              "type": {
                "text": "boolean"
              },
              "description": "Enables automatic slide advancement on a timer. Pauses on hover and focus, respects prefers-reduced-motion.",
              "fieldName": "autoPlay",
              "default": "false"
            },
            {
              "name": "interval",
              "type": {
                "text": "number"
              },
              "description": "Auto-play interval in milliseconds between slide transitions.",
              "fieldName": "interval",
              "default": "5000"
            },
            {
              "name": "loop",
              "type": {
                "text": "boolean"
              },
              "description": "Enables wrapping at the edges so the last slide connects to the first and vice versa.",
              "fieldName": "loop",
              "default": "true"
            },
            {
              "name": "showDots",
              "type": {
                "text": "boolean"
              },
              "description": "Shows dot indicators below the viewport for direct slide navigation.",
              "fieldName": "showDots",
              "default": "true"
            },
            {
              "name": "showArrows",
              "type": {
                "text": "boolean"
              },
              "description": "Shows previous/next arrow buttons on the left and right edges of the viewport.",
              "fieldName": "showArrows",
              "default": "true"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-carousel",
          "customElement": true,
          "group": "marketing",
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcCarousel",
          "declaration": {
            "name": "ArcCarousel",
            "module": "src/content/carousel.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/collapsible.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A disclosure widget with a clickable heading that toggles the visibility of its slotted content\nusing a smooth CSS grid animation.",
          "name": "ArcCollapsible",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "collapsible"
            },
            {
              "name": "trigger"
            },
            {
              "name": "heading"
            },
            {
              "name": "body"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "heading",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text displayed in the clickable trigger row. Also used as the ARIA label for the content region.",
              "attribute": "heading"
            },
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the content is visible. Reflected as an attribute and toggleable by clicking the heading.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-toggle",
              "type": {
                "text": "CustomEvent<{ open: boolean }>"
              },
              "description": "Fired when the collapsible expands or collapses"
            }
          ],
          "attributes": [
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the content is visible. Reflected as an attribute and toggleable by clicking the heading.",
              "fieldName": "open",
              "default": "false"
            },
            {
              "name": "heading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text displayed in the clickable trigger row. Also used as the ARIA label for the content region.",
              "fieldName": "heading"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-collapsible",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcCollapsible",
          "declaration": {
            "name": "ArcCollapsible",
            "module": "src/content/collapsible.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/color-swatch.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Color sample square with label — useful for token docs.",
          "name": "ArcColorSwatch",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "swatch"
            },
            {
              "name": "color"
            },
            {
              "name": "label"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "color",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'#4d7ef7'",
              "description": "Any valid CSS color value applied as the swatch background",
              "attribute": "color"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Display label below the swatch; falls back to the color value if empty",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls swatch dimensions: sm (32px), md (48px), lg (64px)",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "color",
              "type": {
                "text": "string"
              },
              "default": "'#4d7ef7'",
              "description": "Any valid CSS color value applied as the swatch background",
              "fieldName": "color"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Display label below the swatch; falls back to the color value if empty",
              "fieldName": "label"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls swatch dimensions: sm (32px), md (48px), lg (64px)",
              "fieldName": "size",
              "default": "'md'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-color-swatch",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcColorSwatch",
          "declaration": {
            "name": "ArcColorSwatch",
            "module": "src/content/color-swatch.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/cta-banner.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Full-width call-to-action banner with gradient background, eyebrow text, headline, body copy,\nand action buttons. Ideal for landing page CTAs, marketing sections, and page closers.",
          "name": "ArcCtaBanner",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "container"
            },
            {
              "name": "background"
            },
            {
              "name": "inner"
            },
            {
              "name": "eyebrow"
            },
            {
              "name": "headline"
            },
            {
              "name": "body"
            },
            {
              "name": "actions"
            }
          ],
          "slots": [
            {
              "name": "eyebrow"
            },
            {
              "name": "headline"
            },
            {
              "description": "Default content.",
              "name": ""
            },
            {
              "name": "actions"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "eyebrow",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Small label text displayed above the headline. Typically a short phrase like \"Ready to build?\" that sets context.",
              "attribute": "eyebrow"
            },
            {
              "kind": "field",
              "name": "headline",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Main headline text rendered with gradient display styling. Keep it concise and action-oriented.",
              "attribute": "headline"
            },
            {
              "kind": "field",
              "name": "nogradient",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, disables the radial gradient background effect for quieter contexts.",
              "attribute": "nogradient",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "eyebrow",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Small label text displayed above the headline. Typically a short phrase like \"Ready to build?\" that sets context.",
              "fieldName": "eyebrow"
            },
            {
              "name": "headline",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Main headline text rendered with gradient display styling. Keep it concise and action-oriented.",
              "fieldName": "headline"
            },
            {
              "name": "nogradient",
              "type": {
                "text": "boolean"
              },
              "description": "When true, disables the radial gradient background effect for quieter contexts.",
              "fieldName": "nogradient",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-cta-banner",
          "customElement": true,
          "group": "marketing",
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcCtaBanner",
          "declaration": {
            "name": "ArcCtaBanner",
            "module": "src/content/cta-banner.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/divider.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Horizontal rule with multiple visual styles from subtle to glowing.",
          "name": "ArcDivider",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "divider"
            },
            {
              "name": "line"
            },
            {
              "name": "label"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text displayed in the center of the divider, splitting it into two lines. Common use: 'OR' between form options. Only applies to horizontal dividers.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'subtle' | 'glow' | 'line-white' | 'line-primary' | 'line-gradient' | 'dashed' | 'dotted' | 'fade' | 'line'"
              },
              "description": "Visual style. `subtle`, `glow` and the three `line-*` styles are the illuminated set. `dashed`, `dotted` and `fade` are the plain rule styles absorbed from `arc-separator` when it was merged here, along with `line`, its flat single-color rule. `fade` is the flat edge-to-edge fade, as distinct from `subtle`, which is the token gradient; `line` is the flat rule with no fade at all.",
              "attribute": "variant",
              "default": "'subtle'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "align",
              "privacy": "public",
              "type": {
                "text": "'' | 'left' | 'right'"
              },
              "description": "Shifts the gradient origin so it fades from one edge instead of both. Empty (the default) fades from both edges. Useful for asymmetric layouts where the divider should visually connect to content on one side.",
              "attribute": "align",
              "default": "''",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "vertical",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Renders the divider as a vertical line. Switches to `inline-flex` display and rotates gradient directions to run top-to-bottom. Use inside flex rows to separate inline content.",
              "attribute": "vertical",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "variant",
              "type": {
                "text": "'subtle' | 'glow' | 'line-white' | 'line-primary' | 'line-gradient' | 'dashed' | 'dotted' | 'fade' | 'line'"
              },
              "description": "Visual style. `subtle`, `glow` and the three `line-*` styles are the illuminated set. `dashed`, `dotted` and `fade` are the plain rule styles absorbed from `arc-separator` when it was merged here, along with `line`, its flat single-color rule. `fade` is the flat edge-to-edge fade, as distinct from `subtle`, which is the token gradient; `line` is the flat rule with no fade at all.",
              "fieldName": "variant",
              "default": "'subtle'"
            },
            {
              "name": "align",
              "type": {
                "text": "'' | 'left' | 'right'"
              },
              "description": "Shifts the gradient origin so it fades from one edge instead of both. Empty (the default) fades from both edges. Useful for asymmetric layouts where the divider should visually connect to content on one side.",
              "fieldName": "align",
              "default": "''"
            },
            {
              "name": "vertical",
              "type": {
                "text": "boolean"
              },
              "description": "Renders the divider as a vertical line. Switches to `inline-flex` display and rotates gradient directions to run top-to-bottom. Use inside flex rows to separate inline content.",
              "fieldName": "vertical",
              "default": "false"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text displayed in the center of the divider, splitting it into two lines. Common use: 'OR' between form options. Only applies to horizontal dividers.",
              "fieldName": "label"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-divider",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcDivider",
          "declaration": {
            "name": "ArcDivider",
            "module": "src/content/divider.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/empty-state.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Placeholder for empty lists or search results.",
          "name": "ArcEmptyState",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "container"
            },
            {
              "name": "icon"
            },
            {
              "name": "heading"
            },
            {
              "name": "description"
            },
            {
              "name": "actions"
            }
          ],
          "slots": [
            {
              "name": "icon"
            },
            {
              "name": "actions"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "heading",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Main heading text displayed below the icon",
              "attribute": "heading"
            },
            {
              "kind": "field",
              "name": "description",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Supporting text displayed below the heading, max-width 360px",
              "attribute": "description"
            }
          ],
          "attributes": [
            {
              "name": "heading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Main heading text displayed below the icon",
              "fieldName": "heading"
            },
            {
              "name": "description",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Supporting text displayed below the heading, max-width 360px",
              "fieldName": "description"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-empty-state",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcEmptyState",
          "declaration": {
            "name": "ArcEmptyState",
            "module": "src/content/empty-state.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/feature-card.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Card with icon, heading, description, and animated hover effects.",
          "name": "ArcFeatureCard",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "inner"
            },
            {
              "name": "icon"
            },
            {
              "name": "title"
            },
            {
              "name": "description"
            },
            {
              "name": "action"
            },
            {
              "name": "card"
            }
          ],
          "slots": [
            {
              "name": "icon"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "icon",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Icon text or emoji displayed in the icon box",
              "attribute": "icon"
            },
            {
              "kind": "field",
              "name": "heading",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Card title",
              "attribute": "heading"
            },
            {
              "kind": "field",
              "name": "description",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Card body text",
              "attribute": "description"
            },
            {
              "kind": "field",
              "name": "href",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Makes the card a link",
              "attribute": "href"
            },
            {
              "kind": "field",
              "name": "action",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Action label (e.g. \"Learn more\") shown at the bottom of the card when href is set. Hidden when empty or when no href is provided.",
              "attribute": "action",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "icon",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Icon text or emoji displayed in the icon box",
              "fieldName": "icon"
            },
            {
              "name": "heading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Card title",
              "fieldName": "heading"
            },
            {
              "name": "description",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Card body text",
              "fieldName": "description"
            },
            {
              "name": "href",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Makes the card a link",
              "fieldName": "href"
            },
            {
              "name": "action",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Action label (e.g. \"Learn more\") shown at the bottom of the card when href is set. Hidden when empty or when no href is provided.",
              "fieldName": "action"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-feature-card",
          "customElement": true,
          "group": "marketing",
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcFeatureCard",
          "declaration": {
            "name": "ArcFeatureCard",
            "module": "src/content/feature-card.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/hotspot.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A single glowing pin inside an Image Hotspots surface. The pin sits at percentage coordinates\nover the slotted image and opens a small anchored popover holding the slotted detail content.\nInside an arc-image-hotspots parent, opening one pin closes any other open pin.",
          "name": "ArcHotspot",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "pin"
            },
            {
              "name": "panel"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "method",
              "name": "close",
              "parameters": [
                {
                  "name": "restoreFocus",
                  "default": "true",
                  "description": "Return focus to the pin that opened it.\nPass false when closing as a side effect of opening another pin, so\nfocus lands on the new one instead of bouncing back.",
                  "optional": true,
                  "type": {
                    "text": "boolean"
                  }
                }
              ],
              "description": "Close the popover, firing the cancelable `arc-close` first — so a listener\nthat calls `preventDefault()` keeps it open, whoever asked for the close.\n\narc-image-hotspots calls this to enforce one-open-at-a-time, which is why\na consumer's veto is honoured there too and not only on a manual close.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the pin button, repeated as the heading of the popover. Always set it — without a label the pin announces nothing useful to a screen reader.",
              "attribute": "label",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "x",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Horizontal position of the pin as a percentage of the image width, from 0 (left edge) to 100 (right edge). Values outside the range are clamped; a non-numeric value falls back to 50.",
              "attribute": "x",
              "default": "50",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "y",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Vertical position of the pin as a percentage of the image height, from 0 (top edge) to 100 (bottom edge). Values outside the range are clamped; a non-numeric value falls back to 50.",
              "attribute": "y",
              "default": "50",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the pin's popover is currently visible. Reflected as an attribute. Opens on click; closes on Escape, outside click, or a second click on the pin.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-open",
              "type": {
                "text": "CustomEvent<{value: string | number}>"
              },
              "description": "Fired when the popover opens. detail.value carries the label, or the pin's index within its parent when no label is set."
            },
            {
              "name": "arc-close",
              "type": {
                "text": "CustomEvent<{value: string | number}>"
              },
              "description": "Fired before the popover closes and cancelable — preventDefault() vetoes the close. detail.value matches arc-open."
            }
          ],
          "attributes": [
            {
              "name": "x",
              "type": {
                "text": "number"
              },
              "description": "Horizontal position of the pin as a percentage of the image width, from 0 (left edge) to 100 (right edge). Values outside the range are clamped; a non-numeric value falls back to 50.",
              "fieldName": "x",
              "default": "50"
            },
            {
              "name": "y",
              "type": {
                "text": "number"
              },
              "description": "Vertical position of the pin as a percentage of the image height, from 0 (top edge) to 100 (bottom edge). Values outside the range are clamped; a non-numeric value falls back to 50.",
              "fieldName": "y",
              "default": "50"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the pin button, repeated as the heading of the popover. Always set it — without a label the pin announces nothing useful to a screen reader.",
              "fieldName": "label"
            },
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the pin's popover is currently visible. Reflected as an attribute. Opens on click; closes on Escape, outside click, or a second click on the pin.",
              "fieldName": "open",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-hotspot",
          "customElement": true,
          "group": "marketing",
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcHotspot",
          "declaration": {
            "name": "ArcHotspot",
            "module": "src/content/hotspot.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/icon-library.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Switches the icon set every arc-icon on the page resolves against. Renders nothing itself —\nput one anywhere in the document and it applies globally.",
          "name": "ArcIconLibrary",
          "members": [
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Which registered icon library to resolve names against — `phosphor` or `lucide` from `@arclux/arc-ui-icons`, or the name a custom library was registered under.",
              "attribute": "name",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Which registered icon library to resolve names against — `phosphor` or `lucide` from `@arclux/arc-ui-icons`, or the name a custom library was registered under.",
              "fieldName": "name"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-icon-library",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcIconLibrary",
          "declaration": {
            "name": "ArcIconLibrary",
            "module": "src/content/icon-library.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/icon-registry.js",
      "declarations": [
        {
          "kind": "variable",
          "name": "iconRegistry",
          "type": {
            "text": "object"
          },
          "default": "{ /** * Register an icon library under a name. * * @param {string} name - What `use()` and `<arc-icon-library>` will call it. * @param {object} library * @param {Record<string, string | (() => Promise<{default: string}>)>} library.icons - * Name → SVG source, or a thunk that imports it. A thunk is what the built-in * packs pass, one per glyph, so a bundler can split them; a plain string is * the easy shape for a small hand-rolled set. * @param {Record<string, string>} [library.aliases] - ARC UI's canonical icon * name → this library's spelling. Built-in components ask for Lucide names; * supply this and they resolve against a library that calls them something * else. See @arclux/arc-ui-icons/aliases. * * Selects this library if nothing is selected yet, so a single * `import '@arclux/arc-ui-icons/phosphor'` is a complete setup. * Registering a second pack never takes the choice back from a page that has * already made one — which does mean that importing both packs and calling * neither `use()` nor `<arc-icon-library>` leaves the first-imported one * active. Say which you want. */ register(name, library) { if (typeof name !== 'string' || !name) { throw new Error('iconRegistry.register: a library needs a name.'); } if (!library?.icons || typeof library.icons !== 'object') { throw new Error( `iconRegistry.register(\"${name}\"): expected { icons } mapping icon names to SVG ` + 'sources or to functions that import them.', ); } _libraries.set(name, { icons: library.icons, aliases: library.aliases ?? {} }); if (_libraryName === null) _libraryName = name; }, /** Names of every registered library, in registration order. */ libraries() { return [..._libraries.keys()]; }, /** * Whether the active library is registered — the question arc-icon asks * before blaming a missing glyph on its name. False also means `get()` has * already said the useful thing about it. */ hasLibrary() { return _libraryName !== null && _libraries.has(_libraryName); }, /** * Select which registered library names resolve against. * * Takes any name, including one whose pack has not been imported yet — see * `_libraryName` above for why this no longer throws. */ use(library) { if (typeof library !== 'string' || !library) { throw new Error('iconRegistry.use: expected a library name.'); } _libraryName = library; }, /** Register additional custom icons (merged on top of the active library). */ set(icons) { for (const [key, val] of Object.entries(icons)) { const kebab = key .replace(/([A-Z]+)([A-Z][a-z])/g, '$1-$2') .replace(/([a-z])([A-Z])/g, '$1-$2') .toLowerCase(); _custom[kebab] = val; } }, /** Look up an icon by kebab-case name. Returns a Promise<string|null>. */ async get(name) { readInlinePayload(); // 1. Custom icons first, and before any complaint about a library: a page // whose icons are all registered by hand, or inlined by a server build, // is a working page with no library at all. if (_custom[name]) return _custom[name]; // 2. Otherwise the active library's entry for the name, aliased. const library = activeLibrary(name); if (!library) return null; try { const entry = library.icons[library.aliases[name] ?? name] ?? library.icons[name]; if (!entry) return null; const svg = typeof entry === 'function' ? (await entry()).default : entry; if (typeof svg !== 'string') return null; _resolved.set(`${_libraryName}:${name}`, svg); return svg; } catch { return null; } }, /** * Look up an icon without awaiting — the source string if it is already in * memory, otherwise null. * * `get()` is async because the icon packs are code-split one file per glyph, * and 1,900 icons have no business being in anyone's bundle. But rendering is * synchronous, and on the server there is no second chance: `updated()` never * runs there, so an icon that is not resolvable *during render* is an icon * that does not appear in the server's HTML at all. * * So this reads the cache that `get()` fills, plus anything registered * through `set()`. Server-side, warm it with `preload()` first. Client-side * it is a fast path — and, on a hydrated page whose icons were inlined at * build time, the thing that makes the client's first render match the * server's. * * Never warns: a miss here is the ordinary \"not loaded yet\" case, which * happens once per icon on every page that works correctly. */ getSync(name) { if (!name) return null; readInlinePayload(); if (_custom[name]) return _custom[name]; return _resolved.get(`${_libraryName}:${name}`) ?? null; }, /** * Resolve icons into the synchronous cache, for rendering that cannot await. * * Names that do not exist are skipped rather than throwing: a page listing * the icons it uses should not fail to build over one typo. */ async preload(names) { await Promise.all([...new Set(names)].filter(Boolean).map((name) => this.get(name))); }, /** * List all icon names in a library (defaults to active). Returns a * Promise<string[]>. * * Async for compatibility rather than necessity — it used to import a * generated manifest, and now reads keys off a registration that is already in * memory. Callers all `await` it and would keep working if it were made * synchronous, but nothing is gained by making them change. */ async list(library) { const name = library ?? _libraryName; const entry = name === null ? null : _libraries.get(name); if (!entry) { warnNoLibrary(name); return Object.keys(_custom); } return [...Object.keys(_custom), ...Object.keys(entry.icons)]; }, }"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "iconRegistry",
          "declaration": {
            "name": "iconRegistry",
            "module": "src/content/icon-registry.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/icon.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Renders icons by name from any registered library — Phosphor (1,500+) and Lucide (1,900+) ship in\n`@arclux/arc-ui-icons` — with one-line library switching and custom icon registration.",
          "name": "ArcIcon",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "icon"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Icon name to look up in the icon registry. When provided, renders the matching SVG. When empty, falls back to slotted content.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'xs' | 'sm' | 'md' | 'lg' | 'xl'"
              },
              "default": "'sm'",
              "description": "Icon dimensions: `xs` (12px), `sm` (16px), `md` (20px), `lg` (24px), `xl` (32px).",
              "attribute": "size",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessibility label. When provided, sets `role=\"img\"` and `aria-label`. When empty, sets `role=\"presentation\"` and `aria-hidden=\"true\"`.",
              "attribute": "label"
            }
          ],
          "attributes": [
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Icon name to look up in the icon registry. When provided, renders the matching SVG. When empty, falls back to slotted content.",
              "fieldName": "name"
            },
            {
              "name": "size",
              "type": {
                "text": "'xs' | 'sm' | 'md' | 'lg' | 'xl'"
              },
              "default": "'sm'",
              "description": "Icon dimensions: `xs` (12px), `sm` (16px), `md` (20px), `lg` (24px), `xl` (32px).",
              "fieldName": "size"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessibility label. When provided, sets `role=\"img\"` and `aria-label`. When empty, sets `role=\"presentation\"` and `aria-hidden=\"true\"`.",
              "fieldName": "label"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-icon",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcIcon",
          "declaration": {
            "name": "ArcIcon",
            "module": "src/content/icon.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/image-compare.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Before/after image comparison: two layered images with a draggable divider revealing one over\nthe other. The `before` layer sits on top, clipped to the region between the start edge and the\ndivider; dragging the handle (or pressing arrow keys on it) moves the reveal line.\n\nThe clip is pure CSS driven by a private custom property, so the component server-renders at\nits initial position with no client-side measurement.\n\n`orientation` is named for the axis the divider *moves* along: `horizontal` (the default)\nslides a vertical divider line left and right; `vertical` slides a horizontal divider line up\nand down.\n\nThe position axis is logical: 0 is the inline-start edge (left in LTR, right in RTL) for\nhorizontal orientation, and the block-start edge (top) for vertical. Before/after has no\ninherent screen direction — unlike an audio timeline there is no convention fixing it — so the\ncontrol mirrors with the document like the rest of the reading order. Arrow keys follow the\ndivider's visible motion.",
          "name": "ArcImageCompare",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "description": "The clipping frame wrapping both layers.",
              "name": "container"
            },
            {
              "description": "The clipped before layer.",
              "name": "before"
            },
            {
              "description": "The base after layer.",
              "name": "after"
            },
            {
              "description": "The hairline divider.",
              "name": "divider"
            },
            {
              "description": "The circular grab handle (the focusable slider).",
              "name": "handle"
            },
            {
              "description": "The before caption chip.",
              "name": "label-before"
            },
            {
              "description": "The after caption chip.",
              "name": "label-after"
            }
          ],
          "slots": [
            {
              "description": "The \"before\" image (`<img>` or `<arc-image>`), revealed between the start edge and the divider.",
              "name": "before"
            },
            {
              "description": "The \"after\" image (`<img>` or `<arc-image>`). Sits underneath and sizes the component.",
              "name": "after"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "beforeLabel",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional caption for the before layer, rendered as a floating chip in the start corner.",
              "attribute": "before-label"
            },
            {
              "kind": "field",
              "name": "afterLabel",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional caption for the after layer, rendered as a floating chip in the end corner.",
              "attribute": "after-label"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the divider handle, announced as the slider label.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "position",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Divider position as a percentage, 0 to 100. 0 shows only the after layer, 100 only the before layer. Clamped, reflected, and updated as the user drags.",
              "attribute": "position",
              "default": "50",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "orientation",
              "privacy": "public",
              "type": {
                "text": "'horizontal' | 'vertical'"
              },
              "description": "Axis the divider moves along. `horizontal` (default) moves a vertical divider line left-right; `vertical` moves a horizontal line up-down.",
              "attribute": "orientation",
              "default": "'horizontal'",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent<{ value: number }>"
              },
              "description": "Fired continuously while dragging (every pointer move) and on each keyboard nudge. `value` is the position, 0-100. Use for live readouts."
            },
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: number }>"
              },
              "description": "Fired once when the position commits: on pointer release, or with each keyboard nudge. Use for persisting the position."
            }
          ],
          "attributes": [
            {
              "name": "position",
              "type": {
                "text": "number"
              },
              "description": "Divider position as a percentage, 0 to 100. 0 shows only the after layer, 100 only the before layer. Clamped, reflected, and updated as the user drags.",
              "fieldName": "position",
              "default": "50"
            },
            {
              "name": "orientation",
              "type": {
                "text": "'horizontal' | 'vertical'"
              },
              "description": "Axis the divider moves along. `horizontal` (default) moves a vertical divider line left-right; `vertical` moves a horizontal line up-down.",
              "fieldName": "orientation",
              "default": "'horizontal'"
            },
            {
              "name": "before-label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional caption for the before layer, rendered as a floating chip in the start corner.",
              "fieldName": "beforeLabel"
            },
            {
              "name": "after-label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional caption for the after layer, rendered as a floating chip in the end corner.",
              "fieldName": "afterLabel"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the divider handle, announced as the slider label.",
              "fieldName": "label"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-image-compare",
          "customElement": true,
          "group": "marketing",
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcImageCompare",
          "declaration": {
            "name": "ArcImageCompare",
            "module": "src/content/image-compare.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/image-hotspots.js",
      "declarations": [
        {
          "kind": "class",
          "description": "An annotated image: glowing pins positioned over a slotted picture, each opening a small\npopover of detail content. Built for product-feature callouts, annotated screenshots, and\nsimple maps. Slot the image and the arc-hotspot pins together as children — the pins position\nthemselves by percentage coordinates, so source order never matters. The parent keeps one\npopover open at a time; open and close activity arrives as the arc-open and arc-close events\nbubbling up from each arc-hotspot child, with detail.value naming the hotspot.",
          "name": "ArcImageHotspots",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "container"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-image-hotspots",
          "customElement": true,
          "group": "marketing",
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcImageHotspots",
          "declaration": {
            "name": "ArcImageHotspots",
            "module": "src/content/image-hotspots.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/image.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Enhanced image component with shimmer loading skeleton, smooth fade-in transition, error\nfallback, and aspect ratio presets.",
          "name": "ArcImage",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "wrapper"
            },
            {
              "name": "fallback"
            },
            {
              "name": "image"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "src",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Image source URL.",
              "attribute": "src"
            },
            {
              "kind": "field",
              "name": "alt",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Alt text for the image. Used as the accessible description.",
              "attribute": "alt"
            },
            {
              "kind": "field",
              "name": "fallback",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "URL of a fallback image to display if the primary `src` fails to load.",
              "attribute": "fallback"
            },
            {
              "kind": "field",
              "name": "aspect",
              "privacy": "public",
              "type": {
                "text": "'' | '1/1' | '4/3' | '16/9' | '21/9' | '3/4' | '9/16'"
              },
              "description": "Constrains the container to a fixed aspect ratio, preventing layout shift during loading. Empty (the default) leaves the container unconstrained; an unrecognised ratio falls back to it.",
              "attribute": "aspect",
              "default": "''",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "fit",
              "privacy": "public",
              "type": {
                "text": "'cover' | 'contain' | 'fill' | 'none' | 'scale-down'"
              },
              "description": "CSS object-fit mode controlling how the image fills its container.",
              "attribute": "fit",
              "default": "'cover'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "loading",
              "privacy": "public",
              "type": {
                "text": "'lazy' | 'eager'"
              },
              "description": "Native loading strategy. Lazy defers off-screen images until they approach the viewport.",
              "attribute": "loading",
              "default": "'lazy'"
            }
          ],
          "events": [
            {
              "name": "arc-load",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the image successfully loads."
            },
            {
              "name": "arc-error",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the image fails to load."
            }
          ],
          "attributes": [
            {
              "name": "src",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Image source URL.",
              "fieldName": "src"
            },
            {
              "name": "alt",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Alt text for the image. Used as the accessible description.",
              "fieldName": "alt"
            },
            {
              "name": "aspect",
              "type": {
                "text": "'' | '1/1' | '4/3' | '16/9' | '21/9' | '3/4' | '9/16'"
              },
              "description": "Constrains the container to a fixed aspect ratio, preventing layout shift during loading. Empty (the default) leaves the container unconstrained; an unrecognised ratio falls back to it.",
              "fieldName": "aspect",
              "default": "''"
            },
            {
              "name": "fit",
              "type": {
                "text": "'cover' | 'contain' | 'fill' | 'none' | 'scale-down'"
              },
              "description": "CSS object-fit mode controlling how the image fills its container.",
              "fieldName": "fit",
              "default": "'cover'"
            },
            {
              "name": "loading",
              "type": {
                "text": "'lazy' | 'eager'"
              },
              "description": "Native loading strategy. Lazy defers off-screen images until they approach the viewport.",
              "fieldName": "loading",
              "default": "'lazy'"
            },
            {
              "name": "fallback",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "URL of a fallback image to display if the primary `src` fails to load.",
              "fieldName": "fallback"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-image",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcImage",
          "declaration": {
            "name": "ArcImage",
            "module": "src/content/image.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/infinite-scroll.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Intersection Observer-powered container that fires a load event when the user scrolls near the\nbottom, with built-in loading spinner and end-of-list state.",
          "name": "ArcInfiniteScroll",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "container"
            },
            {
              "name": "content"
            },
            {
              "name": "footer"
            },
            {
              "name": "end-text"
            },
            {
              "name": "spinner"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "threshold",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "200",
              "description": "Distance in pixels from the bottom of the content at which `arc-load-more` fires. Controls how eagerly new data is requested.",
              "attribute": "threshold"
            },
            {
              "kind": "field",
              "name": "loading",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, displays a spinner in the footer and suppresses additional `arc-load-more` events.",
              "attribute": "loading",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "finished",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, disconnects the observer and displays \"No more items\" text in the footer.",
              "attribute": "finished",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Disables the component, disconnects the observer, and reduces opacity to 40%.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the scroll sentinel enters the viewport, signaling more content should load",
              "name": "arc-load-more"
            }
          ],
          "attributes": [
            {
              "name": "threshold",
              "type": {
                "text": "number"
              },
              "default": "200",
              "description": "Distance in pixels from the bottom of the content at which `arc-load-more` fires. Controls how eagerly new data is requested.",
              "fieldName": "threshold"
            },
            {
              "name": "loading",
              "type": {
                "text": "boolean"
              },
              "description": "When true, displays a spinner in the footer and suppresses additional `arc-load-more` events.",
              "fieldName": "loading",
              "default": "false"
            },
            {
              "name": "finished",
              "type": {
                "text": "boolean"
              },
              "description": "When true, disconnects the observer and displays \"No more items\" text in the footer.",
              "fieldName": "finished",
              "default": "false"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "Disables the component, disconnects the observer, and reduces opacity to 40%.",
              "fieldName": "disabled",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-infinite-scroll",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcInfiniteScroll",
          "declaration": {
            "name": "ArcInfiniteScroll",
            "module": "src/content/infinite-scroll.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/lightbox.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Full-screen image viewer on the overlay stack: open from a thumbnail, step through a gallery\nwith wrapping prev/next navigation, zoom to 2x with drag-to-pan, and dismiss with Escape or a\nbackdrop click.\n\nThe gallery is data, not layout: images are supplied through the `images` property rather than\nslotted children, so the closed component renders nothing. Entries may be plain `src` strings or\n`{ src, alt, caption }` objects; the two forms mix freely. The server render stays empty either\nway — a property is one it never sees, and the static JSON attribute form it does see is skipped\nas a closed overlay, which is what keeps a full-size photograph from being fetched for a first\npaint that cannot show it.",
          "name": "ArcLightbox",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "backdrop"
            },
            {
              "name": "bar"
            },
            {
              "name": "counter"
            },
            {
              "name": "zoom"
            },
            {
              "name": "close"
            },
            {
              "name": "prev"
            },
            {
              "name": "next"
            },
            {
              "name": "figure"
            },
            {
              "name": "image"
            },
            {
              "name": "caption"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "method",
              "name": "show",
              "parameters": [
                {
                  "name": "index",
                  "description": "Zero-based; wraps, so -1 opens the last image.",
                  "optional": true,
                  "type": {
                    "text": "number"
                  }
                }
              ],
              "description": "Open the viewer, optionally jumping to a specific image first.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "close",
              "description": "Closes the viewer through the cancelable arc-close contract.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "next",
              "description": "Advances to the next image, wrapping past the end.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "prev",
              "description": "Steps to the previous image, wrapping past the start.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "images",
              "privacy": "public",
              "type": {
                "text": "Array"
              },
              "description": "The gallery to display. Each entry is either a `src` string or an object of shape `{ src, alt, caption }`; `alt` and `caption` are optional. Set as a property, or as a JSON attribute for a gallery that is static.",
              "attribute": "images",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "index",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Index of the image currently displayed. Navigation wraps at both ends, so setting it out of range shows the nearest valid image.",
              "attribute": "index",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Controls the visible state of the viewer. Set to `true` to open at the current `index` and activate the focus trap; set to `false` to close and restore focus to the previously-focused element.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{value: number, index: number}>"
              },
              "description": "Fired when the displayed image changes. `detail.value` is the new index."
            },
            {
              "name": "arc-close",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the lightbox closes. Cancelable: call `preventDefault()` to veto the close."
            },
            {
              "name": "arc-open",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the lightbox opens"
            }
          ],
          "attributes": [
            {
              "name": "images",
              "type": {
                "text": "Array"
              },
              "description": "The gallery to display. Each entry is either a `src` string or an object of shape `{ src, alt, caption }`; `alt` and `caption` are optional. Set as a property, or as a JSON attribute for a gallery that is static.",
              "fieldName": "images",
              "default": "[]"
            },
            {
              "name": "index",
              "type": {
                "text": "number"
              },
              "description": "Index of the image currently displayed. Navigation wraps at both ends, so setting it out of range shows the nearest valid image.",
              "fieldName": "index",
              "default": "0"
            },
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Controls the visible state of the viewer. Set to `true` to open at the current `index` and activate the focus trap; set to `false` to close and restore focus to the previously-focused element.",
              "fieldName": "open",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-lightbox",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcLightbox",
          "declaration": {
            "name": "ArcLightbox",
            "module": "src/content/lightbox.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/marquee.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Continuously scrolling content strip with configurable speed, direction, gap, and pause-on-hover\nbehavior for logos, testimonials, and announcements.",
          "name": "ArcMarquee",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "track"
            },
            {
              "name": "group"
            },
            {
              "name": "group-duplicate"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "gap",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'var(--space-xl)'",
              "description": "CSS length value for the gap between slotted items. Accepts any valid CSS length or custom property.",
              "attribute": "gap"
            },
            {
              "kind": "field",
              "name": "speed",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Scroll speed in pixels per second. The animation duration is calculated from the content width divided by this value.",
              "attribute": "speed",
              "default": "40"
            },
            {
              "kind": "field",
              "name": "direction",
              "privacy": "public",
              "type": {
                "text": "'left' | 'right'"
              },
              "description": "Scroll direction. `left` scrolls content from right to left (default), `right` reverses the direction.",
              "attribute": "direction",
              "default": "'left'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "pauseOnHover",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, the animation pauses while the cursor hovers over the marquee.",
              "attribute": "pauseOnHover",
              "default": "true",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "speed",
              "type": {
                "text": "number"
              },
              "description": "Scroll speed in pixels per second. The animation duration is calculated from the content width divided by this value.",
              "fieldName": "speed",
              "default": "40"
            },
            {
              "name": "direction",
              "type": {
                "text": "'left' | 'right'"
              },
              "description": "Scroll direction. `left` scrolls content from right to left (default), `right` reverses the direction.",
              "fieldName": "direction",
              "default": "'left'"
            },
            {
              "name": "pauseOnHover",
              "type": {
                "text": "boolean"
              },
              "description": "When true, the animation pauses while the cursor hovers over the marquee.",
              "fieldName": "pauseOnHover",
              "default": "true"
            },
            {
              "name": "gap",
              "type": {
                "text": "string"
              },
              "default": "'var(--space-xl)'",
              "description": "CSS length value for the gap between slotted items. Accepts any valid CSS length or custom property.",
              "fieldName": "gap"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-marquee",
          "customElement": true,
          "group": "marketing",
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcMarquee",
          "declaration": {
            "name": "ArcMarquee",
            "module": "src/content/marquee.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/qr-code.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Client-side QR code renderer that encodes any string into a crisp inline SVG. Themes\nautomatically via currentColor, with an optional contrast card for guaranteed scanability on\ndark backgrounds.",
          "name": "ArcQrCode",
          "cssParts": [
            {
              "description": "The root element. Which element that is depends on `contrast`: the card wrapper when it is set, the svg otherwise — which is the case `base` exists for.",
              "name": "base"
            },
            {
              "name": "svg"
            },
            {
              "name": "card"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The content to encode (URL, text, Wi-Fi string, 2FA URI, …). Empty values render nothing. Values exceeding QR capacity for the chosen level also render nothing.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "160",
              "description": "Rendered width and height of the SVG in pixels. The code is vector-based and stays crisp at any size.",
              "attribute": "size"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible description announced to screen readers (falls back to \"QR code\"). Describe the purpose, not the encoded value — the value is never exposed by default since it may be a secret.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "level",
              "privacy": "public",
              "type": {
                "text": "'L' | 'M' | 'Q' | 'H'"
              },
              "description": "Error-correction level: L (~7% recovery), M (~15%), Q (~25%), H (~30%). Higher levels tolerate more damage/occlusion but produce denser codes.",
              "attribute": "level",
              "default": "'M'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "quietZone",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Width of the empty border around the code, measured in modules. Scanners rely on this margin to find the code; keep at least 2 against busy backgrounds.",
              "attribute": "quietZone",
              "default": "2"
            },
            {
              "kind": "field",
              "name": "contrast",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Renders the code on a white rounded card with forced dark modules, guaranteeing dark-on-light scanability in both themes. Overrides --qr-fg/--qr-bg. Recommended for scan-critical codes.",
              "attribute": "contrast",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The content to encode (URL, text, Wi-Fi string, 2FA URI, …). Empty values render nothing. Values exceeding QR capacity for the chosen level also render nothing.",
              "fieldName": "value"
            },
            {
              "name": "size",
              "type": {
                "text": "number"
              },
              "default": "160",
              "description": "Rendered width and height of the SVG in pixels. The code is vector-based and stays crisp at any size.",
              "fieldName": "size"
            },
            {
              "name": "level",
              "type": {
                "text": "'L' | 'M' | 'Q' | 'H'"
              },
              "description": "Error-correction level: L (~7% recovery), M (~15%), Q (~25%), H (~30%). Higher levels tolerate more damage/occlusion but produce denser codes.",
              "fieldName": "level",
              "default": "'M'"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible description announced to screen readers (falls back to \"QR code\"). Describe the purpose, not the encoded value — the value is never exposed by default since it may be a secret.",
              "fieldName": "label"
            },
            {
              "name": "quietZone",
              "type": {
                "text": "number"
              },
              "description": "Width of the empty border around the code, measured in modules. Scanners rely on this margin to find the code; keep at least 2 against busy backgrounds.",
              "fieldName": "quietZone",
              "default": "2"
            },
            {
              "name": "contrast",
              "type": {
                "text": "boolean"
              },
              "description": "Renders the code on a white rounded card with forced dark modules, guaranteeing dark-on-light scanability in both themes. Overrides --qr-fg/--qr-bg. Recommended for scan-critical codes.",
              "fieldName": "contrast",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-qr-code",
          "customElement": true,
          "group": null,
          "status": "beta"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcQrCode",
          "declaration": {
            "name": "ArcQrCode",
            "module": "src/content/qr-code.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/sanitize-svg.js",
      "declarations": [
        {
          "kind": "function",
          "name": "sanitizeSvg",
          "parameters": [
            {
              "name": "source"
            }
          ],
          "description": "Sanitize an SVG source string, returning markup safe to pass to `unsafeHTML`,\nor `null` if it contains no `<svg>` root.\n\nEverything outside the outermost `<svg>…</svg>` is discarded, which drops the\nXML declaration and doctype that some icon sets ship with."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "sanitizeSvg",
          "declaration": {
            "name": "sanitizeSvg",
            "module": "src/content/sanitize-svg.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/scroll-area.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Styled scrollable container with custom thin scrollbar styling for Webkit and Firefox,\nconfigurable orientation, and optional max-height constraint.",
          "name": "ArcScrollArea",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "scroll-area"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "maxHeight",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "CSS max-height value applied to the scrollable container. Use any valid CSS length (e.g. `300px`, `50vh`).",
              "attribute": "max-height",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "orientation",
              "privacy": "public",
              "type": {
                "text": "'vertical' | 'horizontal' | 'both'"
              },
              "description": "Scroll direction. `vertical` shows a vertical scrollbar, `horizontal` shows a horizontal scrollbar, `both` shows both.",
              "attribute": "orientation",
              "default": "'vertical'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "max-height",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "CSS max-height value applied to the scrollable container. Use any valid CSS length (e.g. `300px`, `50vh`).",
              "fieldName": "maxHeight"
            },
            {
              "name": "orientation",
              "type": {
                "text": "'vertical' | 'horizontal' | 'both'"
              },
              "description": "Scroll direction. `vertical` shows a vertical scrollbar, `horizontal` shows a horizontal scrollbar, `both` shows both.",
              "fieldName": "orientation",
              "default": "'vertical'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-scroll-area",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcScrollArea",
          "declaration": {
            "name": "ArcScrollArea",
            "module": "src/content/scroll-area.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/scroll-indicator.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Thin progress bar that tracks scroll position of the page or a target container. Sticks to the\ntop or bottom edge with accent or gradient fill.",
          "name": "ArcScrollIndicator",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "bar"
            },
            {
              "name": "fill"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "target",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "CSS selector for the scroll container to track. Defaults to the window when empty.",
              "attribute": "target"
            },
            {
              "kind": "field",
              "name": "position",
              "privacy": "public",
              "type": {
                "text": "'top' | 'bottom'"
              },
              "description": "Which edge the indicator sticks to.",
              "attribute": "position",
              "default": "'top'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Bar thickness: sm (2px), md (3px), lg (4px).",
              "attribute": "size",
              "default": "'sm'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "color",
              "privacy": "public",
              "type": {
                "text": "'accent' | 'gradient'"
              },
              "description": "Fill color mode. Accent uses `--accent-primary`. Gradient blends from primary to secondary.",
              "attribute": "color",
              "default": "'accent'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "target",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "CSS selector for the scroll container to track. Defaults to the window when empty.",
              "fieldName": "target"
            },
            {
              "name": "position",
              "type": {
                "text": "'top' | 'bottom'"
              },
              "description": "Which edge the indicator sticks to.",
              "fieldName": "position",
              "default": "'top'"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Bar thickness: sm (2px), md (3px), lg (4px).",
              "fieldName": "size",
              "default": "'sm'"
            },
            {
              "name": "color",
              "type": {
                "text": "'accent' | 'gradient'"
              },
              "description": "Fill color mode. Accent uses `--accent-primary`. Gradient blends from primary to secondary.",
              "fieldName": "color",
              "default": "'accent'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-scroll-indicator",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcScrollIndicator",
          "declaration": {
            "name": "ArcScrollIndicator",
            "module": "src/content/scroll-indicator.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/skeleton.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Loading placeholder with shimmer animation.",
          "name": "ArcSkeleton",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "skeleton"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "width",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "CSS width value (e.g. \"200px\", \"100%\")",
              "attribute": "width"
            },
            {
              "kind": "field",
              "name": "height",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "CSS height value; circle auto-matches width when omitted",
              "attribute": "height"
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'text' | 'circle' | 'rect'"
              },
              "description": "Shape of the skeleton: text for lines, circle for avatars, rect for blocks",
              "attribute": "variant",
              "default": "'text'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "count",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Renders multiple skeleton items stacked vertically with spacing. Useful for placeholder lists.",
              "attribute": "count",
              "default": "1"
            }
          ],
          "attributes": [
            {
              "name": "variant",
              "type": {
                "text": "'text' | 'circle' | 'rect'"
              },
              "description": "Shape of the skeleton: text for lines, circle for avatars, rect for blocks",
              "fieldName": "variant",
              "default": "'text'"
            },
            {
              "name": "width",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "CSS width value (e.g. \"200px\", \"100%\")",
              "fieldName": "width"
            },
            {
              "name": "height",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "CSS height value; circle auto-matches width when omitted",
              "fieldName": "height"
            },
            {
              "name": "count",
              "type": {
                "text": "number"
              },
              "description": "Renders multiple skeleton items stacked vertically with spacing. Useful for placeholder lists.",
              "fieldName": "count",
              "default": "1"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-skeleton",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSkeleton",
          "declaration": {
            "name": "ArcSkeleton",
            "module": "src/content/skeleton.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/spinner.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Animated loading spinner in three sizes.",
          "name": "ArcSpinner",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "spinner"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Spinner dimensions: sm (16px), md (24px), lg (40px)",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'primary' | 'secondary' | 'white'"
              },
              "description": "Color of the spinner ring",
              "attribute": "variant",
              "default": "'primary'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Spinner dimensions: sm (16px), md (24px), lg (40px)",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "variant",
              "type": {
                "text": "'primary' | 'secondary' | 'white'"
              },
              "description": "Color of the spinner ring",
              "fieldName": "variant",
              "default": "'primary'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-spinner",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSpinner",
          "declaration": {
            "name": "ArcSpinner",
            "module": "src/content/spinner.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/stack.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Flexbox layout component for vertical or horizontal stacking with token-based spacing.",
          "name": "ArcStack",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "direction",
              "privacy": "public",
              "type": {
                "text": "'vertical' | 'horizontal'"
              },
              "description": "Flex direction — vertical is column, horizontal is row",
              "attribute": "direction",
              "default": "'vertical'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "gap",
              "privacy": "public",
              "type": {
                "text": "'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'"
              },
              "description": "Gap between children, maps to --space-* tokens",
              "attribute": "gap",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "align",
              "privacy": "public",
              "type": {
                "text": "'start' | 'center' | 'end' | 'stretch'"
              },
              "description": "Cross-axis alignment (align-items)",
              "attribute": "align",
              "default": "'stretch'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "justify",
              "privacy": "public",
              "type": {
                "text": "'start' | 'center' | 'end' | 'between' | 'around'"
              },
              "description": "Main-axis alignment (justify-content)",
              "attribute": "justify",
              "default": "'start'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "wrap",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Enable flex-wrap for responsive wrapping",
              "attribute": "wrap",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "direction",
              "type": {
                "text": "'vertical' | 'horizontal'"
              },
              "description": "Flex direction — vertical is column, horizontal is row",
              "fieldName": "direction",
              "default": "'vertical'"
            },
            {
              "name": "gap",
              "type": {
                "text": "'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'"
              },
              "description": "Gap between children, maps to --space-* tokens",
              "fieldName": "gap",
              "default": "'md'"
            },
            {
              "name": "align",
              "type": {
                "text": "'start' | 'center' | 'end' | 'stretch'"
              },
              "description": "Cross-axis alignment (align-items)",
              "fieldName": "align",
              "default": "'stretch'"
            },
            {
              "name": "justify",
              "type": {
                "text": "'start' | 'center' | 'end' | 'between' | 'around'"
              },
              "description": "Main-axis alignment (justify-content)",
              "fieldName": "justify",
              "default": "'start'"
            },
            {
              "name": "wrap",
              "type": {
                "text": "boolean"
              },
              "description": "Enable flex-wrap for responsive wrapping",
              "fieldName": "wrap",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-stack",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcStack",
          "declaration": {
            "name": "ArcStack",
            "module": "src/content/stack.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/video.js",
      "declarations": [
        {
          "kind": "class",
          "description": "House-styled video player. Before the first play it shows the poster with a large glowing\nplay button; once playback starts, a minimal custom control bar rides the native video —\nplay/pause, a mono time readout, a scrub bar that seeks directly, a mute toggle, and a\nfullscreen button. During playback the bar dims after two seconds of idle rather than\nleaving — it stays visible and clickable, and returns to full strength when the pointer is\nanywhere over the player or a control takes focus. Standard player\nkeys work on the focused player: Space or K toggles playback, the arrow keys seek five\nseconds, M toggles mute, F toggles fullscreen.\n\nTakes a single `src` — there is no source-element fallback chain for multiple formats.\nServe one broadly supported encoding (H.264/MP4 plays everywhere), or reach for the native\nvideo element directly when you need format negotiation or adaptive streaming.",
          "name": "ArcVideo",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "description": "The player frame.",
              "name": "wrapper"
            },
            {
              "description": "The native video element.",
              "name": "video"
            },
            {
              "description": "The pre-play overlay covering the poster.",
              "name": "overlay"
            },
            {
              "description": "The large centered play button inside the overlay.",
              "name": "play-button"
            },
            {
              "description": "The control bar.",
              "name": "controls"
            },
            {
              "description": "The play/pause button in the control bar.",
              "name": "play-toggle"
            },
            {
              "description": "The current/total time readout.",
              "name": "time"
            },
            {
              "description": "The seek range input.",
              "name": "scrubber"
            },
            {
              "description": "The mute toggle button.",
              "name": "mute-button"
            },
            {
              "description": "The fullscreen button.",
              "name": "fullscreen-button"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "src",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Video source URL. A single source only; no multi-format machinery.",
              "attribute": "src"
            },
            {
              "kind": "field",
              "name": "poster",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Poster image URL shown before the first play.",
              "attribute": "poster"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the player region. Falls back to a generic label when empty.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "controls",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Shows the custom control bar once playback has started, and enables the player keyboard shortcuts. Defaults to true; set `controls=\"false\"` for ambient or presentation video.",
              "attribute": "controls",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "autoplay",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Starts playback as soon as the browser allows. Browsers only honor autoplay when the video is muted, so pair it with `muted`; when autoplay is blocked, the play overlay simply remains and the user starts playback themselves.",
              "attribute": "autoplay",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "loop",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Restarts playback from the beginning when the video ends.",
              "attribute": "loop",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "muted",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Mutes the audio track. Toggled live by the mute button and the M key.",
              "attribute": "muted",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "preload",
              "privacy": "public",
              "type": {
                "text": "'none' | 'metadata' | 'auto'"
              },
              "description": "Passed through to the native video element. The default `metadata` loads dimensions and duration without buffering content.",
              "attribute": "preload",
              "default": "'metadata'"
            }
          ],
          "events": [
            {
              "name": "arc-play",
              "type": {
                "text": "CustomEvent<{ value: number }>"
              },
              "description": "Fired when playback starts or resumes. `detail.value` is the current time in seconds."
            },
            {
              "name": "arc-pause",
              "type": {
                "text": "CustomEvent<{ value: number }>"
              },
              "description": "Fired when playback pauses. `detail.value` is the current time in seconds."
            },
            {
              "name": "arc-ended",
              "type": {
                "text": "CustomEvent<{ value: number }>"
              },
              "description": "Fired when playback reaches the end. `detail.value` is the final time in seconds."
            }
          ],
          "attributes": [
            {
              "name": "src",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Video source URL. A single source only; no multi-format machinery.",
              "fieldName": "src"
            },
            {
              "name": "poster",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Poster image URL shown before the first play.",
              "fieldName": "poster"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the player region. Falls back to a generic label when empty.",
              "fieldName": "label"
            },
            {
              "name": "autoplay",
              "type": {
                "text": "boolean"
              },
              "description": "Starts playback as soon as the browser allows. Browsers only honor autoplay when the video is muted, so pair it with `muted`; when autoplay is blocked, the play overlay simply remains and the user starts playback themselves.",
              "fieldName": "autoplay",
              "default": "false"
            },
            {
              "name": "loop",
              "type": {
                "text": "boolean"
              },
              "description": "Restarts playback from the beginning when the video ends.",
              "fieldName": "loop",
              "default": "false"
            },
            {
              "name": "muted",
              "type": {
                "text": "boolean"
              },
              "description": "Mutes the audio track. Toggled live by the mute button and the M key.",
              "fieldName": "muted",
              "default": "false"
            },
            {
              "name": "controls",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Shows the custom control bar once playback has started, and enables the player keyboard shortcuts. Defaults to true; set `controls=\"false\"` for ambient or presentation video.",
              "fieldName": "controls"
            },
            {
              "name": "preload",
              "type": {
                "text": "'none' | 'metadata' | 'auto'"
              },
              "description": "Passed through to the native video element. The default `metadata` loads dimensions and duration without buffering content.",
              "fieldName": "preload",
              "default": "'metadata'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-video",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcVideo",
          "declaration": {
            "name": "ArcVideo",
            "module": "src/content/video.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/content/virtual-list.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Windowed list that renders only the visible slice of a large array.\nFixed row height with configurable overscan.\n\nTwo ways to supply rows, because \"render a row\" means something different\ninside a framework than it does outside one:\n\n  - `renderItem` — a callback returning the row's content. The component\n    mounts only the visible rows, so a million-row array puts a screenful of\n    nodes in the DOM. This is the direct path: plain JS, HTML, Lit.\n  - windowed slots — the component renders an `item-N` slot for each index in\n    the visible range only, and announces that range as it scrolls. (Spelled\n    without the tag on purpose: prism scans this whole file for slot markup,\n    and a literal one in a comment invents a slot named `item-N`.)\n    Whoever owns\n    the light DOM supplies just those rows. This is how the framework\n    wrappers do it, so a React consumer writes JSX and a Svelte consumer\n    writes markup, rather than a callback returning nodes their framework\n    didn't create.\n\nBoth paths share one geometry engine, so scrolling behaves identically.\n`renderItem` wins if both are present.",
          "name": "ArcVirtualList",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "spacer"
            },
            {
              "name": "item"
            }
          ],
          "slots": [
            {
              "name": "item-${index}"
            }
          ],
          "members": [
            {
              "kind": "method",
              "name": "scrollToIndex",
              "parameters": [
                {
                  "name": "index",
                  "description": "Zero-based, clamped to the list rather than ignored,\nso an index past the end scrolls to the last row.",
                  "type": {
                    "text": "number"
                  }
                }
              ],
              "description": "Scroll a row into view.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "visibleRange",
              "description": "The range of currently rendered indices. `end` is exclusive.",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "renderItem",
              "privacy": "public",
              "type": {
                "text": "Function"
              },
              "default": "null",
              "description": "`(item, index) => unknown` returning one row's content. Anything Lit can render: a template, a DOM node, a string. When set, rows come from here and the slots are not used."
            },
            {
              "kind": "field",
              "name": "itemHeight",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "40",
              "description": "Height in pixels of each row. Must match what actually renders, and must be at least 1 — it is a divisor, so a zero would put NaN through every window calculation.",
              "attribute": "itemHeight"
            },
            {
              "kind": "field",
              "name": "overscan",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "5",
              "description": "Rows rendered above and below the visible window to cover fast scrolling. Never negative.",
              "attribute": "overscan"
            },
            {
              "kind": "field",
              "name": "items",
              "privacy": "public",
              "type": {
                "text": "Array"
              },
              "description": "The full data array. Only the visible slice is rendered at any given time.",
              "attribute": "items",
              "default": "[]"
            }
          ],
          "events": [
            {
              "type": {
                "text": "CustomEvent<{value: {start: number, end: number}, start: number, end: number}>"
              },
              "description": "Fired when the visible range changes. `end` is exclusive.",
              "name": "arc-range-change"
            }
          ],
          "attributes": [
            {
              "name": "items",
              "type": {
                "text": "Array"
              },
              "description": "The full data array. Only the visible slice is rendered at any given time.",
              "fieldName": "items",
              "default": "[]"
            },
            {
              "name": "itemHeight",
              "type": {
                "text": "number"
              },
              "default": "40",
              "description": "Height in pixels of each row. Must match what actually renders, and must be at least 1 — it is a divisor, so a zero would put NaN through every window calculation.",
              "fieldName": "itemHeight"
            },
            {
              "name": "overscan",
              "type": {
                "text": "number"
              },
              "default": "5",
              "description": "Rows rendered above and below the visible window to cover fast scrolling. Never negative.",
              "fieldName": "overscan"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-virtual-list",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcVirtualList",
          "declaration": {
            "name": "ArcVirtualList",
            "module": "src/content/virtual-list.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/activity-heatmap.js",
      "declarations": [
        {
          "kind": "class",
          "description": "GitHub-style contribution calendar: a year of day cells laid out as one\ncolumn per week, each cell tinted by that day's activity on a five-step\naccent ramp. Hovering or arrow-keying a cell raises it with the house glow\nand shows its detail — the date and the day's label or value — in the same\nbuilt-in bubble arc-uptime carries. Month labels run along the top, sparse\nweekday labels down the side, and a Less→More legend sits below.\n\nThe grid is a pure function of its props. When `end-date` is unset the\nanchor is today, adopted in the browser one render after the first; before\nthat — the server render, and the client render that hydrates it — the\nanchor is derived from the newest date present in `data`, so both are\ndeterministic and identical. Pin `end-date` explicitly whenever server and\nclient must agree exactly.",
          "name": "ArcActivityHeatmap",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "heatmap"
            },
            {
              "name": "months"
            },
            {
              "name": "month"
            },
            {
              "name": "weekdays"
            },
            {
              "name": "weekday"
            },
            {
              "name": "grid"
            },
            {
              "name": "cell"
            },
            {
              "name": "detail"
            },
            {
              "name": "legend"
            },
            {
              "name": "swatch"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "endDate",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The newest day shown, as an ISO string (YYYY-MM-DD). Unset: today in the browser; on the server, the newest date in `data` (see above).",
              "attribute": "end-date"
            },
            {
              "kind": "field",
              "name": "weeks",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "52",
              "description": "How many week columns to render, counting back from the week containing the end date (default 52), at least 1. The last column is truncated after the end date, so the newest cell is always the end date itself.",
              "attribute": "weeks"
            },
            {
              "kind": "field",
              "name": "weekStart",
              "privacy": "public",
              "type": {
                "text": "'sunday' | 'monday'"
              },
              "default": "'sunday'",
              "description": "Which day starts each column: \"sunday\" (default, the GitHub convention) or \"monday\". An unrecognised value falls back to sunday.",
              "attribute": "weekStart",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "legend",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether to render the Less→More swatch strip under the grid. Default true; disable from markup with either `no-legend` or `legend=\"false\"`.",
              "attribute": "legend",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "data",
              "privacy": "public",
              "type": {
                "text": "Array<{date: string, value: number, label?: string}>"
              },
              "description": "One entry per day with activity: an ISO `date` (YYYY-MM-DD), a numeric `value` mapped to the intensity ramp, and an optional `label` shown in the hover detail in place of the bare value (e.g. \"7 commits\"). Days in the rendered span with no entry render as empty cells, so sparse data is fine. Set it from script, a framework binding, or a JSON attribute.",
              "attribute": "data",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "max",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "When set, intensity is a linear scale from 0 to this value instead of the default quartile mapping: each nonzero value lands on step 1-4 by `value / max`. Values at or above `max` render as step 4.",
              "attribute": "max",
              "default": "0"
            }
          ],
          "attributes": [
            {
              "name": "data",
              "type": {
                "text": "Array<{date: string, value: number, label?: string}>"
              },
              "description": "One entry per day with activity: an ISO `date` (YYYY-MM-DD), a numeric `value` mapped to the intensity ramp, and an optional `label` shown in the hover detail in place of the bare value (e.g. \"7 commits\"). Days in the rendered span with no entry render as empty cells, so sparse data is fine. Set it from script, a framework binding, or a JSON attribute.",
              "fieldName": "data",
              "default": "[]"
            },
            {
              "name": "end-date",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The newest day shown, as an ISO string (YYYY-MM-DD). Unset: today in the browser; on the server, the newest date in `data` (see above).",
              "fieldName": "endDate"
            },
            {
              "name": "weeks",
              "type": {
                "text": "number"
              },
              "default": "52",
              "description": "How many week columns to render, counting back from the week containing the end date (default 52), at least 1. The last column is truncated after the end date, so the newest cell is always the end date itself.",
              "fieldName": "weeks"
            },
            {
              "name": "weekStart",
              "type": {
                "text": "'sunday' | 'monday'"
              },
              "default": "'sunday'",
              "description": "Which day starts each column: \"sunday\" (default, the GitHub convention) or \"monday\". An unrecognised value falls back to sunday.",
              "fieldName": "weekStart"
            },
            {
              "name": "max",
              "type": {
                "text": "number"
              },
              "description": "When set, intensity is a linear scale from 0 to this value instead of the default quartile mapping: each nonzero value lands on step 1-4 by `value / max`. Values at or above `max` render as step 4.",
              "fieldName": "max",
              "default": "0"
            },
            {
              "name": "legend",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether to render the Less→More swatch strip under the grid. Default true; disable from markup with either `no-legend` or `legend=\"false\"`.",
              "fieldName": "legend"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-activity-heatmap",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcActivityHeatmap",
          "declaration": {
            "name": "ArcActivityHeatmap",
            "module": "src/data/activity-heatmap.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/animated-number.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Smooth count-up/down number animation with formatting options.",
          "name": "ArcAnimatedNumber",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "value"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Target number to animate to",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "prefix",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "String prepended before the number (e.g., \"$\")",
              "attribute": "prefix"
            },
            {
              "kind": "field",
              "name": "suffix",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "String appended after the number (e.g., \"%\")",
              "attribute": "suffix"
            },
            {
              "kind": "field",
              "name": "decimals",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Number of fixed decimal places",
              "attribute": "decimals"
            },
            {
              "kind": "field",
              "name": "locale",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'en-US'",
              "description": "BCP 47 locale tag passed to Intl.NumberFormat for locale-aware number formatting (thousands separators, decimal marks).",
              "attribute": "locale"
            },
            {
              "kind": "field",
              "name": "duration",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Animation duration in milliseconds",
              "attribute": "duration",
              "default": "1000"
            },
            {
              "kind": "field",
              "name": "format",
              "privacy": "public",
              "type": {
                "text": "'number' | 'currency' | 'percent'"
              },
              "description": "Controls how the number is formatted using Intl.NumberFormat. Use currency with a prefix like $ or percent with a suffix like %.",
              "attribute": "format",
              "default": "'number'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Target number to animate to",
              "fieldName": "value"
            },
            {
              "name": "duration",
              "type": {
                "text": "number"
              },
              "description": "Animation duration in milliseconds",
              "fieldName": "duration",
              "default": "1000"
            },
            {
              "name": "format",
              "type": {
                "text": "'number' | 'currency' | 'percent'"
              },
              "description": "Controls how the number is formatted using Intl.NumberFormat. Use currency with a prefix like $ or percent with a suffix like %.",
              "fieldName": "format",
              "default": "'number'"
            },
            {
              "name": "prefix",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "String prepended before the number (e.g., \"$\")",
              "fieldName": "prefix"
            },
            {
              "name": "suffix",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "String appended after the number (e.g., \"%\")",
              "fieldName": "suffix"
            },
            {
              "name": "decimals",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Number of fixed decimal places",
              "fieldName": "decimals"
            },
            {
              "name": "locale",
              "type": {
                "text": "string"
              },
              "default": "'en-US'",
              "description": "BCP 47 locale tag passed to Intl.NumberFormat for locale-aware number formatting (thousands separators, decimal marks).",
              "fieldName": "locale"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-animated-number",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcAnimatedNumber",
          "declaration": {
            "name": "ArcAnimatedNumber",
            "module": "src/data/animated-number.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/badge.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Compact pill-shaped label for status indicators, category tags, and notification counts. Seven\ncolor variants let you encode meaning at a glance across dashboards, tables, and card layouts.",
          "name": "ArcBadge",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "badge"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "color",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Custom RGB color value (e.g. `\"255, 100, 50\"`) that overrides the variant color. Sets the border, text, background tint, and hover glow to the specified color.",
              "attribute": "color"
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info'"
              },
              "description": "Controls the badge color scheme. Default renders a neutral gray. Primary and secondary use the accent token colors. Success, warning, error, and info map to the corresponding semantic color tokens for status-oriented labels.",
              "attribute": "variant",
              "default": "'default'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the badge size. Options: 'sm', 'md', 'lg'.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "variant",
              "type": {
                "text": "'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info'"
              },
              "description": "Controls the badge color scheme. Default renders a neutral gray. Primary and secondary use the accent token colors. Success, warning, error, and info map to the corresponding semantic color tokens for status-oriented labels.",
              "fieldName": "variant",
              "default": "'default'"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the badge size. Options: 'sm', 'md', 'lg'.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "color",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Custom RGB color value (e.g. `\"255, 100, 50\"`) that overrides the variant color. Sets the border, text, background tint, and hover glow to the specified color.",
              "fieldName": "color"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-badge",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcBadge",
          "declaration": {
            "name": "ArcBadge",
            "module": "src/data/badge.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/chart.js",
      "declarations": [
        {
          "kind": "class",
          "description": "An SVG chart component for dashboards with line, area, bar, and donut types. Data-driven from a\nseries array, with automatic nice-tick scales, a legend, hover crosshair and tooltips, and a\nvisually-hidden data table for assistive technology.",
          "name": "ArcChart",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "axis"
            },
            {
              "name": "tooltip"
            },
            {
              "name": "chart"
            },
            {
              "name": "legend"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "currency",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'USD'",
              "description": "ISO 4217 currency code used when value-format=\"currency\".",
              "attribute": "currency"
            },
            {
              "kind": "field",
              "name": "type",
              "privacy": "public",
              "type": {
                "text": "'line' | 'area' | 'bar' | 'donut'"
              },
              "description": "The chart form. Line and area share the x axis across all series; bar renders grouped columns (or stacked with the `stacked` attribute); donut renders one segment per series (or per category when a single series is given).",
              "attribute": "type",
              "default": "'line'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "series",
              "privacy": "public",
              "type": {
                "text": "Array<{label:string,data:number[]}>"
              },
              "description": "The data that drives the chart. Each entry is one series; all series share the x axis defined by `labels`. Set as a property, or as a JSON attribute for a chart that is static. Colors are assigned in fixed order from --chart-1 to --chart-6; series beyond six are summed into an \"Other\" series noted in the legend.",
              "attribute": "series",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "labels",
              "privacy": "public",
              "type": {
                "text": "string[]"
              },
              "description": "Category labels for the x axis (or donut segment names when a single series is given). Labels that would collide are automatically thinned — every Nth label renders based on available width.",
              "attribute": "labels",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "stacked",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Bar type only. Stacks series segments on a shared baseline with 2px surface gaps between segments; only the outermost segment gets the rounded value end. Assumes non-negative data.",
              "attribute": "stacked",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "hideLegend",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Suppresses the legend. By default the legend renders for two or more series and is omitted for a single series.",
              "attribute": "hideLegend",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "hideAxis",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Removes the axis layer — gridlines, y tick labels, and x category labels — for compact trend panels where exact values are read from the tooltip.",
              "attribute": "hideAxis",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "height",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Chart height in pixels. Width is fluid and tracked with a ResizeObserver.",
              "attribute": "height",
              "default": "260"
            },
            {
              "kind": "field",
              "name": "valueFormat",
              "privacy": "public",
              "type": {
                "text": "'number' | 'percent' | 'currency'"
              },
              "description": "How values are formatted in tooltips, the axis, and the accessible data table, via Intl.NumberFormat. Percent expects fractional data (0.24 → 24%). Axis numbers are abbreviated (1.2k, 3.4M).",
              "attribute": "valueFormat",
              "default": "'number'"
            }
          ],
          "events": [
            {
              "name": "arc-mark-click",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when a mark (bar, stacked segment, line point column, or donut segment) is clicked. detail: { seriesIndex, index, value }. Indices refer to displayed series after any \"Other\" folding; a folded donut segment reports seriesIndex -1."
            }
          ],
          "attributes": [
            {
              "name": "type",
              "type": {
                "text": "'line' | 'area' | 'bar' | 'donut'"
              },
              "description": "The chart form. Line and area share the x axis across all series; bar renders grouped columns (or stacked with the `stacked` attribute); donut renders one segment per series (or per category when a single series is given).",
              "fieldName": "type",
              "default": "'line'"
            },
            {
              "name": "series",
              "type": {
                "text": "Array<{label:string,data:number[]}>"
              },
              "description": "The data that drives the chart. Each entry is one series; all series share the x axis defined by `labels`. Set as a property, or as a JSON attribute for a chart that is static. Colors are assigned in fixed order from --chart-1 to --chart-6; series beyond six are summed into an \"Other\" series noted in the legend.",
              "fieldName": "series",
              "default": "[]"
            },
            {
              "name": "labels",
              "type": {
                "text": "string[]"
              },
              "description": "Category labels for the x axis (or donut segment names when a single series is given). Labels that would collide are automatically thinned — every Nth label renders based on available width.",
              "fieldName": "labels",
              "default": "[]"
            },
            {
              "name": "stacked",
              "type": {
                "text": "boolean"
              },
              "description": "Bar type only. Stacks series segments on a shared baseline with 2px surface gaps between segments; only the outermost segment gets the rounded value end. Assumes non-negative data.",
              "fieldName": "stacked",
              "default": "false"
            },
            {
              "name": "hideLegend",
              "type": {
                "text": "boolean"
              },
              "description": "Suppresses the legend. By default the legend renders for two or more series and is omitted for a single series.",
              "fieldName": "hideLegend",
              "default": "false"
            },
            {
              "name": "hideAxis",
              "type": {
                "text": "boolean"
              },
              "description": "Removes the axis layer — gridlines, y tick labels, and x category labels — for compact trend panels where exact values are read from the tooltip.",
              "fieldName": "hideAxis",
              "default": "false"
            },
            {
              "name": "height",
              "type": {
                "text": "number"
              },
              "description": "Chart height in pixels. Width is fluid and tracked with a ResizeObserver.",
              "fieldName": "height",
              "default": "260"
            },
            {
              "name": "valueFormat",
              "type": {
                "text": "'number' | 'percent' | 'currency'"
              },
              "description": "How values are formatted in tooltips, the axis, and the accessible data table, via Intl.NumberFormat. Percent expects fractional data (0.24 → 24%). Axis numbers are abbreviated (1.2k, 3.4M).",
              "fieldName": "valueFormat",
              "default": "'number'"
            },
            {
              "name": "currency",
              "type": {
                "text": "string"
              },
              "default": "'USD'",
              "description": "ISO 4217 currency code used when value-format=\"currency\".",
              "fieldName": "currency"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-chart",
          "customElement": true,
          "group": null,
          "status": "beta"
        },
        {
          "kind": "variable",
          "name": "left"
        },
        {
          "kind": "function",
          "name": "y",
          "parameters": [
            {
              "name": "v"
            }
          ]
        },
        {
          "kind": "variable",
          "name": "band"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcChart",
          "declaration": {
            "name": "ArcChart",
            "module": "src/data/chart.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/clock.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Live clock with a digital or analog face, optionally pinned to an IANA timezone.",
          "name": "ArcClock",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "container"
            },
            {
              "name": "face"
            },
            {
              "name": "time"
            },
            {
              "name": "timezone"
            },
            {
              "name": "label"
            },
            {
              "name": "svg"
            },
            {
              "name": "hand-hour"
            },
            {
              "name": "hand-minute"
            },
            {
              "name": "hand-second"
            },
            {
              "name": "pin"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "timezone",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "IANA timezone name (e.g. \"Asia/Tokyo\"). Defaults to the viewer's local timezone; an unrecognized value falls back to local.",
              "attribute": "timezone"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional caption rendered under the face.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'digital' | 'analog'"
              },
              "description": "Which face to render. Digital shows a mono-spaced time string; analog shows an SVG dial with hands.",
              "attribute": "variant",
              "default": "'digital'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "showSeconds",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Show seconds on the digital face, or the second hand on the analog face.",
              "attribute": "showSeconds",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "hour12",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Force 12-hour display on the digital face. When unset, the viewer's locale decides. Set the property to false to force 24-hour display.",
              "attribute": "hour12",
              "default": "false"
            },
            {
              "kind": "field",
              "name": "showTimezone",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Render the timezone abbreviation, muted, beside the digital time.",
              "attribute": "showTimezone",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "variant",
              "type": {
                "text": "'digital' | 'analog'"
              },
              "description": "Which face to render. Digital shows a mono-spaced time string; analog shows an SVG dial with hands.",
              "fieldName": "variant",
              "default": "'digital'"
            },
            {
              "name": "timezone",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "IANA timezone name (e.g. \"Asia/Tokyo\"). Defaults to the viewer's local timezone; an unrecognized value falls back to local.",
              "fieldName": "timezone"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional caption rendered under the face.",
              "fieldName": "label"
            },
            {
              "name": "showSeconds",
              "type": {
                "text": "boolean"
              },
              "description": "Show seconds on the digital face, or the second hand on the analog face.",
              "fieldName": "showSeconds",
              "default": "false"
            },
            {
              "name": "hour12",
              "type": {
                "text": "boolean"
              },
              "description": "Force 12-hour display on the digital face. When unset, the viewer's locale decides. Set the property to false to force 24-hour display.",
              "fieldName": "hour12",
              "default": "false"
            },
            {
              "name": "showTimezone",
              "type": {
                "text": "boolean"
              },
              "description": "Render the timezone abbreviation, muted, beside the digital time.",
              "fieldName": "showTimezone",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-clock",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcClock",
          "declaration": {
            "name": "ArcClock",
            "module": "src/data/clock.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/comparison-column.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Data-holder child element that defines a single column in the comparison grid. Renders nothing\nvisible — it provides heading, highlight, and values data to the parent.",
          "name": "ArcComparisonColumn",
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "heading",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Column header text displayed at the top of this column (e.g., \"Free\", \"Pro\").",
              "attribute": "heading",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "highlight",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, adds an accent background to the header and all cells in this column.",
              "attribute": "highlight",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "values",
              "privacy": "public",
              "type": {
                "text": "string[]"
              },
              "description": "Values matching the features order. Settable as a property, or as a JSON array in markup. Use \"true\"/\"false\" for check/cross icons, or any string for text values.",
              "attribute": "values",
              "default": "[]"
            }
          ],
          "attributes": [
            {
              "name": "heading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Column header text displayed at the top of this column (e.g., \"Free\", \"Pro\").",
              "fieldName": "heading"
            },
            {
              "name": "highlight",
              "type": {
                "text": "boolean"
              },
              "description": "When true, adds an accent background to the header and all cells in this column.",
              "fieldName": "highlight",
              "default": "false"
            },
            {
              "name": "values",
              "type": {
                "text": "string[]"
              },
              "description": "Values matching the features order. Settable as a property, or as a JSON array in markup. Use \"true\"/\"false\" for check/cross icons, or any string for text values.",
              "fieldName": "values",
              "default": "[]"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-comparison-column",
          "customElement": true,
          "group": "marketing",
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcComparisonColumn",
          "declaration": {
            "name": "ArcComparisonColumn",
            "module": "src/data/comparison-column.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/comparison.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A two-column or multi-column comparison table for pricing tiers, feature breakdowns, or\nbefore/after comparisons. Each column is defined with an arc-comparison-column child element.",
          "name": "ArcComparison",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "table"
            },
            {
              "name": "header"
            },
            {
              "name": "feature"
            },
            {
              "name": "cell"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "features",
              "privacy": "public",
              "type": {
                "text": "string[]"
              },
              "description": "Feature label strings, one row each. Settable as a property, or as a JSON array in markup: `features='[\"Storage\",\"Bandwidth\"]'`. A malformed value falls back to an empty list rather than throwing.",
              "attribute": "features",
              "default": "[]"
            }
          ],
          "attributes": [
            {
              "name": "features",
              "type": {
                "text": "string[]"
              },
              "description": "Feature label strings, one row each. Settable as a property, or as a JSON array in markup: `features='[\"Storage\",\"Bandwidth\"]'`. A malformed value falls back to an empty list rather than throwing.",
              "fieldName": "features",
              "default": "[]"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-comparison",
          "customElement": true,
          "group": "marketing",
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcComparison",
          "declaration": {
            "name": "ArcComparison",
            "module": "src/data/comparison.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/countdown-timer.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Live countdown to a target date/time with days, hours, minutes, and seconds segments.",
          "name": "ArcCountdownTimer",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "separator"
            },
            {
              "name": "segment"
            },
            {
              "name": "number"
            },
            {
              "name": "label"
            },
            {
              "name": "container"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "target",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "ISO date string or parseable date for the countdown target",
              "attribute": "target"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional label displayed above the countdown",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "expired",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Expired'",
              "description": "Text shown when the countdown reaches zero",
              "attribute": "expired"
            },
            {
              "kind": "field",
              "name": "hideZeroSegments",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Hide leading segments that are zero",
              "attribute": "hideZeroSegments",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-expired",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the countdown reaches zero"
            }
          ],
          "attributes": [
            {
              "name": "target",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "ISO date string or parseable date for the countdown target",
              "fieldName": "target"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional label displayed above the countdown",
              "fieldName": "label"
            },
            {
              "name": "expired",
              "type": {
                "text": "string"
              },
              "default": "'Expired'",
              "description": "Text shown when the countdown reaches zero",
              "fieldName": "expired"
            },
            {
              "name": "hideZeroSegments",
              "type": {
                "text": "boolean"
              },
              "description": "Hide leading segments that are zero",
              "fieldName": "hideZeroSegments",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-countdown-timer",
          "customElement": true,
          "group": "marketing",
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcCountdownTimer",
          "declaration": {
            "name": "ArcCountdownTimer",
            "module": "src/data/countdown-timer.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/data-grid.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A spreadsheet-grade grid for working with tabular data: inline cell editing, multi-column\nsorting, pinned columns, row selection, and virtualized rendering. Columns are defined as a\nJavaScript array, and the grid implements the full WAI-ARIA grid keyboard pattern with a single\ntab stop.",
          "name": "ArcDataGrid",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "header-cell"
            },
            {
              "name": "cell"
            },
            {
              "name": "editor"
            },
            {
              "name": "row"
            },
            {
              "name": "wrapper"
            },
            {
              "name": "table"
            },
            {
              "name": "header"
            },
            {
              "name": "body"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "columns",
              "privacy": "public",
              "type": {
                "text": "Array<{key:string,label:string,sortable?:boolean,editable?:boolean,pinned?:boolean,width?:string,align?:string}>"
              },
              "description": "Column definitions. Each entry maps a `key` in your row objects to a rendered column with a `label` header. Optional flags enable sorting, inline editing, and inline-start-edge pinning per column; `width` sets a fixed CSS width (required for accurate pinned offsets) and `align` controls text alignment. Pinned columns are always displayed first. Set via JavaScript property.",
              "attribute": "columns",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "rows",
              "privacy": "public",
              "type": {
                "text": "Array<Record<string, any>>"
              },
              "description": "The data array. Each object becomes a row keyed by column `key`. The grid works on an internal shallow copy — sorting and inline edits never mutate the array you pass in. Set via JavaScript property; reassigning it resets selection and any open editor.",
              "attribute": "rows",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "sort",
              "privacy": "public",
              "type": {
                "text": "Array<{key:string,direction:'asc'|'desc'}>"
              },
              "description": "Multi-sort state in priority order. Clicking a sortable header cycles it asc → desc → none; Shift+click appends it as a secondary sort. When more than one sort is active, headers show a direction arrow plus priority number. Set this property to pre-sort the grid.",
              "attribute": "sort",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "manualSort",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Skips internal sorting. Rows render in the order given, while headers still cycle the `sort` state and emit `arc-sort` — use this to implement server-side sorting.",
              "attribute": "manualSort",
              "default": "false"
            },
            {
              "kind": "field",
              "name": "selectable",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Adds a checkbox column with a select-all header checkbox (indeterminate when partially selected). Space toggles selection from the keyboard. Emits `arc-select` with the selected row indices.",
              "attribute": "selectable",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "virtual",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Enables virtual scrolling for large datasets. Only visible rows plus an overscan buffer are rendered, keeping performance constant regardless of row count.",
              "attribute": "virtual",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "rowHeight",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Height in pixels of each row when virtual scrolling is enabled. Must match the actual rendered row height for correct scroll calculations.",
              "attribute": "rowHeight",
              "default": "40"
            },
            {
              "kind": "field",
              "name": "overscan",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Rows rendered above and below the visible window when `virtual` is on, to cover fast scrolling. Raising it trades DOM nodes for fewer blank rows on a fling; lowering it does the reverse. Never negative.",
              "attribute": "overscan",
              "default": "5"
            },
            {
              "kind": "field",
              "name": "density",
              "privacy": "public",
              "type": {
                "text": "'default' | 'compact'"
              },
              "description": "Row density. `compact` reduces cell padding for dense data displays. Absorbed from `arc-table`.",
              "attribute": "density",
              "default": "'default'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "striped",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Alternating row backgrounds. On by default, which is what this grid has always drawn; `no-striped` turns them off, which is what an unstriped `arc-table` looked like.",
              "attribute": "striped",
              "default": "true",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-sort",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when the user changes sorting. detail: { sort } with the full multi-sort array in priority order"
            },
            {
              "name": "arc-select",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when row selection changes. detail: { value, selectedIndices } — sorted indices into the original rows array"
            },
            {
              "name": "arc-cell-change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when an inline cell edit is committed. detail: { rowIndex, key, value, row } — rowIndex refers to the original rows array"
            }
          ],
          "attributes": [
            {
              "name": "columns",
              "type": {
                "text": "Array<{key:string,label:string,sortable?:boolean,editable?:boolean,pinned?:boolean,width?:string,align?:string}>"
              },
              "description": "Column definitions. Each entry maps a `key` in your row objects to a rendered column with a `label` header. Optional flags enable sorting, inline editing, and inline-start-edge pinning per column; `width` sets a fixed CSS width (required for accurate pinned offsets) and `align` controls text alignment. Pinned columns are always displayed first. Set via JavaScript property.",
              "fieldName": "columns",
              "default": "[]"
            },
            {
              "name": "rows",
              "type": {
                "text": "Array<Record<string, any>>"
              },
              "description": "The data array. Each object becomes a row keyed by column `key`. The grid works on an internal shallow copy — sorting and inline edits never mutate the array you pass in. Set via JavaScript property; reassigning it resets selection and any open editor.",
              "fieldName": "rows",
              "default": "[]"
            },
            {
              "name": "sort",
              "type": {
                "text": "Array<{key:string,direction:'asc'|'desc'}>"
              },
              "description": "Multi-sort state in priority order. Clicking a sortable header cycles it asc → desc → none; Shift+click appends it as a secondary sort. When more than one sort is active, headers show a direction arrow plus priority number. Set this property to pre-sort the grid.",
              "fieldName": "sort",
              "default": "[]"
            },
            {
              "name": "manualSort",
              "type": {
                "text": "boolean"
              },
              "description": "Skips internal sorting. Rows render in the order given, while headers still cycle the `sort` state and emit `arc-sort` — use this to implement server-side sorting.",
              "fieldName": "manualSort",
              "default": "false"
            },
            {
              "name": "selectable",
              "type": {
                "text": "boolean"
              },
              "description": "Adds a checkbox column with a select-all header checkbox (indeterminate when partially selected). Space toggles selection from the keyboard. Emits `arc-select` with the selected row indices.",
              "fieldName": "selectable",
              "default": "false"
            },
            {
              "name": "virtual",
              "type": {
                "text": "boolean"
              },
              "description": "Enables virtual scrolling for large datasets. Only visible rows plus an overscan buffer are rendered, keeping performance constant regardless of row count.",
              "fieldName": "virtual",
              "default": "false"
            },
            {
              "name": "rowHeight",
              "type": {
                "text": "number"
              },
              "description": "Height in pixels of each row when virtual scrolling is enabled. Must match the actual rendered row height for correct scroll calculations.",
              "fieldName": "rowHeight",
              "default": "40"
            },
            {
              "name": "overscan",
              "type": {
                "text": "number"
              },
              "description": "Rows rendered above and below the visible window when `virtual` is on, to cover fast scrolling. Raising it trades DOM nodes for fewer blank rows on a fling; lowering it does the reverse. Never negative.",
              "fieldName": "overscan",
              "default": "5"
            },
            {
              "name": "density",
              "type": {
                "text": "'default' | 'compact'"
              },
              "description": "Row density. `compact` reduces cell padding for dense data displays. Absorbed from `arc-table`.",
              "fieldName": "density",
              "default": "'default'"
            },
            {
              "name": "striped",
              "type": {
                "text": "boolean"
              },
              "description": "Alternating row backgrounds. On by default, which is what this grid has always drawn; `no-striped` turns them off, which is what an unstriped `arc-table` looked like.",
              "fieldName": "striped",
              "default": "true"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-data-grid",
          "customElement": true,
          "group": null,
          "status": "beta"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcDataGrid",
          "declaration": {
            "name": "ArcDataGrid",
            "module": "src/data/data-grid.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/description-item.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A single term/detail pair within a description list. The term is rendered as an uppercase label,\nand the default slot holds the detail content.",
          "name": "ArcDescriptionItem",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "item"
            },
            {
              "name": "term"
            },
            {
              "name": "detail"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "term",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The key or label for this description entry, displayed as an uppercase heading.",
              "attribute": "term"
            }
          ],
          "attributes": [
            {
              "name": "term",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The key or label for this description entry, displayed as an uppercase heading.",
              "fieldName": "term"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-description-item",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcDescriptionItem",
          "declaration": {
            "name": "ArcDescriptionItem",
            "module": "src/data/description-item.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/description-list.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Structured term/detail pair list in a responsive grid layout with optional dividers.",
          "name": "ArcDescriptionList",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "list"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "columns",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Number of grid columns for laying out items side by side.",
              "attribute": "columns",
              "default": "1",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "layout",
              "privacy": "public",
              "type": {
                "text": "'stacked' | 'horizontal'"
              },
              "description": "How each item arranges its own term and detail. `stacked` (the default) puts the term above the detail; `horizontal` puts them side by side on a shared two-column grid, so terms align down the list. This composes with `columns`, which is about how many *items* sit across — one item can be horizontal inside a three-column list.",
              "attribute": "layout",
              "default": "'stacked'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "dividers",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Show horizontal dividers between rows and vertical dividers between columns.",
              "attribute": "dividers",
              "default": "true",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "columns",
              "type": {
                "text": "number"
              },
              "description": "Number of grid columns for laying out items side by side.",
              "fieldName": "columns",
              "default": "1"
            },
            {
              "name": "layout",
              "type": {
                "text": "'stacked' | 'horizontal'"
              },
              "description": "How each item arranges its own term and detail. `stacked` (the default) puts the term above the detail; `horizontal` puts them side by side on a shared two-column grid, so terms align down the list. This composes with `columns`, which is about how many *items* sit across — one item can be horizontal inside a three-column list.",
              "fieldName": "layout",
              "default": "'stacked'"
            },
            {
              "name": "dividers",
              "type": {
                "text": "boolean"
              },
              "description": "Show horizontal dividers between rows and vertical dividers between columns.",
              "fieldName": "dividers",
              "default": "true"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-description-list",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcDescriptionList",
          "declaration": {
            "name": "ArcDescriptionList",
            "module": "src/data/description-list.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/diff.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Line-based text diff viewer with inline and side-by-side display modes.",
          "name": "ArcDiff",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "line"
            },
            {
              "name": "line-number"
            },
            {
              "name": "prefix"
            },
            {
              "name": "container"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "original",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The original text to compare (split by newlines).",
              "attribute": "original"
            },
            {
              "kind": "field",
              "name": "revised",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The modified text to compare (split by newlines).",
              "attribute": "revised"
            },
            {
              "kind": "field",
              "name": "mode",
              "privacy": "public",
              "type": {
                "text": "'inline' | 'side-by-side'"
              },
              "description": "Display mode: 'inline' renders changes in a single column, 'side-by-side' renders two panes in a grid.",
              "attribute": "mode",
              "default": "'inline'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "original",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The original text to compare (split by newlines).",
              "fieldName": "original"
            },
            {
              "name": "revised",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The modified text to compare (split by newlines).",
              "fieldName": "revised"
            },
            {
              "name": "mode",
              "type": {
                "text": "'inline' | 'side-by-side'"
              },
              "description": "Display mode: 'inline' renders changes in a single column, 'side-by-side' renders two panes in a grid.",
              "fieldName": "mode",
              "default": "'inline'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-diff",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcDiff",
          "declaration": {
            "name": "ArcDiff",
            "module": "src/data/diff.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/gauge.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Radial gauge displaying a scalar value on an arc with color-coded zones (success, warning,\nerror) and an animated sweep. The radial companion to arc-meter: same threshold semantics,\nwith the reading rendered center-stage.",
          "name": "ArcGauge",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "gauge"
            },
            {
              "name": "svg"
            },
            {
              "name": "track"
            },
            {
              "name": "arc"
            },
            {
              "name": "readout"
            },
            {
              "name": "value"
            },
            {
              "name": "unit"
            },
            {
              "name": "label"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed beneath the value and used as the accessible name.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "unit",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Unit suffix rendered after the value (e.g. \"%\", \"ms\", \"GB\").",
              "attribute": "unit"
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Current gauge value. Clamped between `min` and `max`. Reflected as an attribute.",
              "attribute": "value",
              "default": "0",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "min",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Minimum value representing the empty end of the arc.",
              "attribute": "min",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "max",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Maximum value representing the full end of the arc.",
              "attribute": "max",
              "default": "100"
            },
            {
              "kind": "field",
              "name": "low",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Threshold below which the value is considered low. Used for color zone calculation.",
              "attribute": "low",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "high",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Threshold above which the value is considered high. Used for color zone calculation.",
              "attribute": "high",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "optimum",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "The optimal value. Determines which end of the range is \"good\" for color zone logic.",
              "attribute": "optimum",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'full' | 'half'"
              },
              "description": "Arc shape: `full` is a 270-degree horseshoe, `half` a 180-degree semicircle.",
              "attribute": "variant",
              "default": "'full'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "showValue",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Whether to render the numeric value in the center of the arc. Defaults to true; disable via the `showValue` property.",
              "attribute": "showValue",
              "default": "true",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "number"
              },
              "description": "Current gauge value. Clamped between `min` and `max`. Reflected as an attribute.",
              "fieldName": "value",
              "default": "0"
            },
            {
              "name": "min",
              "type": {
                "text": "number"
              },
              "description": "Minimum value representing the empty end of the arc.",
              "fieldName": "min",
              "default": "0"
            },
            {
              "name": "max",
              "type": {
                "text": "number"
              },
              "description": "Maximum value representing the full end of the arc.",
              "fieldName": "max",
              "default": "100"
            },
            {
              "name": "low",
              "type": {
                "text": "number"
              },
              "description": "Threshold below which the value is considered low. Used for color zone calculation.",
              "fieldName": "low",
              "default": "0"
            },
            {
              "name": "high",
              "type": {
                "text": "number"
              },
              "description": "Threshold above which the value is considered high. Used for color zone calculation.",
              "fieldName": "high",
              "default": "0"
            },
            {
              "name": "optimum",
              "type": {
                "text": "number"
              },
              "description": "The optimal value. Determines which end of the range is \"good\" for color zone logic.",
              "fieldName": "optimum",
              "default": "0"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed beneath the value and used as the accessible name.",
              "fieldName": "label"
            },
            {
              "name": "unit",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Unit suffix rendered after the value (e.g. \"%\", \"ms\", \"GB\").",
              "fieldName": "unit"
            },
            {
              "name": "variant",
              "type": {
                "text": "'full' | 'half'"
              },
              "description": "Arc shape: `full` is a 270-degree horseshoe, `half` a 180-degree semicircle.",
              "fieldName": "variant",
              "default": "'full'"
            },
            {
              "name": "showValue",
              "type": {
                "text": "boolean"
              },
              "description": "Whether to render the numeric value in the center of the arc. Defaults to true; disable via the `showValue` property.",
              "fieldName": "showValue",
              "default": "true"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-gauge",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcGauge",
          "declaration": {
            "name": "ArcGauge",
            "module": "src/data/gauge.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/json-tree.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Collapsible JSON explorer with house syntax coloring — the dev-tools\ninspector for API payloads, configuration objects, and structured state.\nPure recursive rendering with zero dependencies: unlike arc-code-block it\nloads no highlighter, so it ships in the register barrel.",
          "name": "ArcJsonTree",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "container"
            },
            {
              "name": "item"
            },
            {
              "name": "row"
            },
            {
              "name": "key"
            },
            {
              "name": "value"
            },
            {
              "name": "preview"
            },
            {
              "name": "error"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "data",
              "privacy": "public",
              "type": {
                "text": "object"
              },
              "default": "undefined",
              "description": "The value to render. Set as a property for objects and arrays; takes precedence over the json attribute when both are set."
            },
            {
              "kind": "field",
              "name": "json",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "JSON string alternative to the data property, for attribute-only use. Parsed with try/catch; invalid input renders a small inline error state instead of throwing.",
              "attribute": "json"
            },
            {
              "kind": "field",
              "name": "expanded",
              "privacy": "public",
              "type": {
                "text": "number | boolean"
              },
              "default": "1",
              "description": "How many levels open initially (default 1). As a bare boolean attribute, every level opens.",
              "attribute": "expanded"
            },
            {
              "kind": "field",
              "name": "keysQuoted",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Render object keys with quotes. Off by default, matching devtools.",
              "attribute": "keysQuoted",
              "default": "false"
            }
          ],
          "events": [
            {
              "name": "arc-toggle",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when a node is expanded or collapsed, with the node path and new expanded state"
            }
          ],
          "attributes": [
            {
              "name": "json",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "JSON string alternative to the data property, for attribute-only use. Parsed with try/catch; invalid input renders a small inline error state instead of throwing.",
              "fieldName": "json"
            },
            {
              "name": "expanded",
              "type": {
                "text": "number | boolean"
              },
              "default": "1",
              "description": "How many levels open initially (default 1). As a bare boolean attribute, every level opens.",
              "fieldName": "expanded"
            },
            {
              "name": "keysQuoted",
              "type": {
                "text": "boolean"
              },
              "description": "Render object keys with quotes. Off by default, matching devtools.",
              "fieldName": "keysQuoted",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-json-tree",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcJsonTree",
          "declaration": {
            "name": "ArcJsonTree",
            "module": "src/data/json-tree.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/kanban.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A drag-and-drop kanban board driven by a `columns` data array. Cards can be dragged between and\nwithin columns with the pointer, or moved entirely from the keyboard with live screen-reader\nannouncements. Column limits, tags, and descriptions are supported per card, and every move\nemits an `arc-card-move` event so the consumer can sync its source of truth.",
          "name": "ArcKanban",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "card-label"
            },
            {
              "name": "card-description"
            },
            {
              "name": "card"
            },
            {
              "name": "column"
            },
            {
              "name": "column-header"
            },
            {
              "name": "column-title"
            },
            {
              "name": "column-count"
            },
            {
              "name": "list"
            },
            {
              "name": "dropzone"
            },
            {
              "name": "board"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "columns",
              "privacy": "public",
              "type": {
                "text": "Array<{id:string,title?:string,limit?:number,items:Array<{id:string,label:string,description?:string,tag?:string,variant?:string}>}>"
              },
              "description": "The data array that drives the board. Each entry becomes a column with a header (title plus count badge) and a list of cards. `limit` renders the count as `count/limit` and turns it error-colored when exceeded. Each card needs a unique `id` and a `label`; `description` renders below the label with a two-line clamp, and `tag` renders an arc-tag chip styled by `variant`. Set as a property, or as a JSON attribute for a board that is static. The component works on an internal copy for immediate drag feedback; sync your source of truth from `arc-card-move` and assign a new array to re-render.",
              "attribute": "columns",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Disables all pointer and keyboard interaction and dims the board.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-card-move",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when a card is dropped in a new position (pointer or keyboard). detail: { cardId, fromColumn, toColumn, index } where index is the final position in the target column."
            },
            {
              "name": "arc-card-click",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when a card is clicked without being dragged. detail: { cardId, columnId }."
            }
          ],
          "attributes": [
            {
              "name": "columns",
              "type": {
                "text": "Array<{id:string,title?:string,limit?:number,items:Array<{id:string,label:string,description?:string,tag?:string,variant?:string}>}>"
              },
              "description": "The data array that drives the board. Each entry becomes a column with a header (title plus count badge) and a list of cards. `limit` renders the count as `count/limit` and turns it error-colored when exceeded. Each card needs a unique `id` and a `label`; `description` renders below the label with a two-line clamp, and `tag` renders an arc-tag chip styled by `variant`. Set as a property, or as a JSON attribute for a board that is static. The component works on an internal copy for immediate drag feedback; sync your source of truth from `arc-card-move` and assign a new array to re-render.",
              "fieldName": "columns",
              "default": "[]"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "Disables all pointer and keyboard interaction and dims the board.",
              "fieldName": "disabled",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-kanban",
          "customElement": true,
          "group": null,
          "status": "beta"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcKanban",
          "declaration": {
            "name": "ArcKanban",
            "module": "src/data/kanban.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/level-meter.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Segmented audio level meter with peak-hold — the live vertical sibling of arc-meter,\nbuilt for signal-rate updates (audio levels, buffer fill, realtime telemetry).\nSegments below the warn threshold render success-tinted, between warn and clip\nwarning-tinted, and above clip error-tinted, with the house glow on lit segments.\nA thin peak-hold line rides the highest recent level and decays toward the\ncurrent value; feed the `peak` property to drive it yourself instead.\n\nOne element is one channel. There is deliberately no stereo mode — compose two\nmeters side by side for a stereo pair, one per channel, so channel count is the\nconsumer's decision rather than a prop fork.",
          "name": "ArcLevelMeter",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "description": "The outer wrapper carrying role=\"meter\".",
              "name": "meter"
            },
            {
              "description": "The tinted track containing segments or the continuous fill.",
              "name": "track"
            },
            {
              "description": "Each discrete segment (segmented mode only).",
              "name": "segment"
            },
            {
              "description": "The continuous fill bar (segments=0 only).",
              "name": "fill"
            },
            {
              "description": "The thin peak-hold line.",
              "name": "peak"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name applied as aria-label on the meter. The component renders no visible text, so this is the only name screen readers get — use something like \"Master left\" rather than \"Level\".",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Current level. Interpreted against `min` and `max`, so with the defaults (0 and 1) it is a linear fraction, and with `min=\"-60\" max=\"0\"` it is a dB reading. Values outside the range are clamped.",
              "attribute": "value",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "min",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Value at the empty end of the meter. Defaults to 0.",
              "attribute": "min",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "max",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Value at the full end of the meter. Defaults to 1. Use -60..0 (or your headroom of choice) for dB scales.",
              "attribute": "max",
              "default": "1"
            },
            {
              "kind": "field",
              "name": "peak",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Externally supplied peak-hold level, in the same units as `value`. When set, the component renders the hold line exactly there and does no tracking of its own. When absent, the meter tracks its own peak from incoming values, holds it briefly, then decays it toward the current level.",
              "attribute": "peak",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "orientation",
              "privacy": "public",
              "type": {
                "text": "'vertical' | 'horizontal'"
              },
              "description": "Meter direction. Vertical (the default) fills bottom-up like a channel strip; horizontal fills from the inline start. Unknown values fall back to vertical.",
              "attribute": "orientation",
              "default": "'vertical'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "segments",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Number of discrete segments. Defaults to 20. Set 0 for a continuous, unsegmented bar.",
              "attribute": "segments",
              "default": "20"
            },
            {
              "kind": "field",
              "name": "warn",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Fraction of the range (0..1) where the warning zone begins, regardless of units. Defaults to 0.75.",
              "attribute": "warn",
              "default": "0.75"
            },
            {
              "kind": "field",
              "name": "clip",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Fraction of the range (0..1) where the clip (error) zone begins. Defaults to 0.9.",
              "attribute": "clip",
              "default": "0.9"
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "number"
              },
              "description": "Current level. Interpreted against `min` and `max`, so with the defaults (0 and 1) it is a linear fraction, and with `min=\"-60\" max=\"0\"` it is a dB reading. Values outside the range are clamped.",
              "fieldName": "value",
              "default": "0"
            },
            {
              "name": "min",
              "type": {
                "text": "number"
              },
              "description": "Value at the empty end of the meter. Defaults to 0.",
              "fieldName": "min",
              "default": "0"
            },
            {
              "name": "max",
              "type": {
                "text": "number"
              },
              "description": "Value at the full end of the meter. Defaults to 1. Use -60..0 (or your headroom of choice) for dB scales.",
              "fieldName": "max",
              "default": "1"
            },
            {
              "name": "peak",
              "type": {
                "text": "number"
              },
              "description": "Externally supplied peak-hold level, in the same units as `value`. When set, the component renders the hold line exactly there and does no tracking of its own. When absent, the meter tracks its own peak from incoming values, holds it briefly, then decays it toward the current level.",
              "fieldName": "peak",
              "default": "0"
            },
            {
              "name": "orientation",
              "type": {
                "text": "'vertical' | 'horizontal'"
              },
              "description": "Meter direction. Vertical (the default) fills bottom-up like a channel strip; horizontal fills from the inline start. Unknown values fall back to vertical.",
              "fieldName": "orientation",
              "default": "'vertical'"
            },
            {
              "name": "segments",
              "type": {
                "text": "number"
              },
              "description": "Number of discrete segments. Defaults to 20. Set 0 for a continuous, unsegmented bar.",
              "fieldName": "segments",
              "default": "20"
            },
            {
              "name": "warn",
              "type": {
                "text": "number"
              },
              "description": "Fraction of the range (0..1) where the warning zone begins, regardless of units. Defaults to 0.75.",
              "fieldName": "warn",
              "default": "0.75"
            },
            {
              "name": "clip",
              "type": {
                "text": "number"
              },
              "description": "Fraction of the range (0..1) where the clip (error) zone begins. Defaults to 0.9.",
              "fieldName": "clip",
              "default": "0.9"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name applied as aria-label on the meter. The component renders no visible text, so this is the only name screen readers get — use something like \"Master left\" rather than \"Level\".",
              "fieldName": "label"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-level-meter",
          "customElement": true,
          "group": "media",
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcLevelMeter",
          "declaration": {
            "name": "ArcLevelMeter",
            "module": "src/data/level-meter.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/list-item.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Individual row within an arc-list. Supports prefix/suffix slots, a description slot for\nsecondary text, links, and selection state.",
          "name": "ArcListItem",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "label"
            },
            {
              "name": "description"
            },
            {
              "name": "item"
            }
          ],
          "slots": [
            {
              "name": "prefix"
            },
            {
              "description": "Default content.",
              "name": ""
            },
            {
              "name": "description"
            },
            {
              "name": "suffix"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Unique identifier used for selection tracking.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "href",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "When set, renders the item as an anchor tag for navigation.",
              "attribute": "href"
            },
            {
              "kind": "field",
              "name": "selected",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Whether this item is currently selected. Managed automatically by the parent list.",
              "attribute": "selected",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents interaction and dims the item.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-select",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired when the item is activated by click. The parent arc-list dispatches the same event from this element for Enter and Space."
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Unique identifier used for selection tracking.",
              "fieldName": "value"
            },
            {
              "name": "selected",
              "type": {
                "text": "boolean"
              },
              "description": "Whether this item is currently selected. Managed automatically by the parent list.",
              "fieldName": "selected",
              "default": "false"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents interaction and dims the item.",
              "fieldName": "disabled",
              "default": "false"
            },
            {
              "name": "href",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "When set, renders the item as an anchor tag for navigation.",
              "fieldName": "href"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-list-item",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcListItem",
          "declaration": {
            "name": "ArcListItem",
            "module": "src/data/list-item.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/list.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Structured list container with optional selection, keyboard navigation, and multiple visual\nvariants. Pairs with arc-list-item for rich content rows.",
          "name": "ArcList",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "list"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The currently selected value(s). Comma-separated when `multiple` is true. The selection itself is held as a list of values, so a value containing a comma is selected and rendered correctly; only the *serialised* multi-select string cannot represent one, since the comma is its separator. Single-select is exact for any value.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the list, applied as `aria-label`. Required when `selectable` is set so the listbox has an accessible name.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'default' | 'bordered' | 'separated'"
              },
              "description": "Visual style. Bordered wraps the list in an outlined container. Separated adds bottom borders between items.",
              "attribute": "variant",
              "default": "'default'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the base font size for the list and its children.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "selectable",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Enables selection mode. Sets `role=\"listbox\"` and manages `aria-selected` on child items.",
              "attribute": "selectable",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "multiple",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Allows multiple items to be selected simultaneously. Only applies when `selectable` is true.",
              "attribute": "multiple",
              "default": "false"
            }
          ],
          "events": [
            {
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired from the activated arc-list-item when a selectable list is driven by Enter or Space.",
              "name": "arc-select"
            },
            {
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired when the selection changes. `event.detail.value` contains the new value string.",
              "name": "arc-change"
            }
          ],
          "attributes": [
            {
              "name": "variant",
              "type": {
                "text": "'default' | 'bordered' | 'separated'"
              },
              "description": "Visual style. Bordered wraps the list in an outlined container. Separated adds bottom borders between items.",
              "fieldName": "variant",
              "default": "'default'"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the base font size for the list and its children.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "selectable",
              "type": {
                "text": "boolean"
              },
              "description": "Enables selection mode. Sets `role=\"listbox\"` and manages `aria-selected` on child items.",
              "fieldName": "selectable",
              "default": "false"
            },
            {
              "name": "multiple",
              "type": {
                "text": "boolean"
              },
              "description": "Allows multiple items to be selected simultaneously. Only applies when `selectable` is true.",
              "fieldName": "multiple",
              "default": "false"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The currently selected value(s). Comma-separated when `multiple` is true. The selection itself is held as a list of values, so a value containing a comma is selected and rendered correctly; only the *serialised* multi-select string cannot represent one, since the comma is its separator. Single-select is exact for any value.",
              "fieldName": "value"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the list, applied as `aria-label`. Required when `selectable` is set so the listbox has an accessible name.",
              "fieldName": "label"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-list",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcList",
          "declaration": {
            "name": "ArcList",
            "module": "src/data/list.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/meter.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Semantic gauge display with color-coded fill zones (success, warning, error) based on\nconfigurable low/high/optimum thresholds.",
          "name": "ArcMeter",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "meter"
            },
            {
              "name": "header"
            },
            {
              "name": "label"
            },
            {
              "name": "value"
            },
            {
              "name": "track"
            },
            {
              "name": "fill"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed in the header row alongside the current percentage.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Current meter value. Clamped between `min` and `max`. Reflected as an attribute.",
              "attribute": "value",
              "default": "0",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "min",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Minimum value representing the left edge (empty) of the meter.",
              "attribute": "min",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "max",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Maximum value representing the right edge (full) of the meter.",
              "attribute": "max",
              "default": "100"
            },
            {
              "kind": "field",
              "name": "low",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Threshold below which the value is considered low. Used for color zone calculation.",
              "attribute": "low",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "high",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Threshold above which the value is considered high. Used for color zone calculation.",
              "attribute": "high",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "optimum",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "The optimal value. Determines which end of the range is \"good\" for color zone logic.",
              "attribute": "optimum",
              "default": "0"
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "number"
              },
              "description": "Current meter value. Clamped between `min` and `max`. Reflected as an attribute.",
              "fieldName": "value",
              "default": "0"
            },
            {
              "name": "min",
              "type": {
                "text": "number"
              },
              "description": "Minimum value representing the left edge (empty) of the meter.",
              "fieldName": "min",
              "default": "0"
            },
            {
              "name": "max",
              "type": {
                "text": "number"
              },
              "description": "Maximum value representing the right edge (full) of the meter.",
              "fieldName": "max",
              "default": "100"
            },
            {
              "name": "low",
              "type": {
                "text": "number"
              },
              "description": "Threshold below which the value is considered low. Used for color zone calculation.",
              "fieldName": "low",
              "default": "0"
            },
            {
              "name": "high",
              "type": {
                "text": "number"
              },
              "description": "Threshold above which the value is considered high. Used for color zone calculation.",
              "fieldName": "high",
              "default": "0"
            },
            {
              "name": "optimum",
              "type": {
                "text": "number"
              },
              "description": "The optimal value. Determines which end of the range is \"good\" for color zone logic.",
              "fieldName": "optimum",
              "default": "0"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed in the header row alongside the current percentage.",
              "fieldName": "label"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-meter",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcMeter",
          "declaration": {
            "name": "ArcMeter",
            "module": "src/data/meter.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/sparkline.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Tiny inline SVG chart for embedding lightweight line or bar visualizations inside tables, stat\ncards, and dashboards. Renders from a simple comma-separated data string with no external\ncharting dependencies.",
          "name": "ArcSparkline",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "area"
            },
            {
              "name": "line"
            },
            {
              "name": "bar"
            },
            {
              "name": "svg"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "data",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Comma-separated numeric values that define the chart data points (e.g. \"10,25,18,30,22,35,28\"). Parsed into a number array at render time. Non-numeric entries are silently dropped.",
              "attribute": "data"
            },
            {
              "kind": "field",
              "name": "color",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "CSS color override applied to strokes and fills. Accepts any valid CSS color value. Defaults to var(--accent-primary) when not set.",
              "attribute": "color"
            },
            {
              "kind": "field",
              "name": "type",
              "privacy": "public",
              "type": {
                "text": "'line' | 'bar'"
              },
              "description": "Chart type. Line renders a polyline with optional area fill; bar renders evenly spaced rectangles.",
              "attribute": "type",
              "default": "'line'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "width",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "SVG viewport width in pixels.",
              "attribute": "width",
              "default": "120"
            },
            {
              "kind": "field",
              "name": "height",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "SVG viewport height in pixels.",
              "attribute": "height",
              "default": "32"
            },
            {
              "kind": "field",
              "name": "fill",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true and type is \"line\", fills the area beneath the curve with a semi-transparent accent color.",
              "attribute": "fill",
              "default": "false"
            }
          ],
          "attributes": [
            {
              "name": "data",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Comma-separated numeric values that define the chart data points (e.g. \"10,25,18,30,22,35,28\"). Parsed into a number array at render time. Non-numeric entries are silently dropped.",
              "fieldName": "data"
            },
            {
              "name": "type",
              "type": {
                "text": "'line' | 'bar'"
              },
              "description": "Chart type. Line renders a polyline with optional area fill; bar renders evenly spaced rectangles.",
              "fieldName": "type",
              "default": "'line'"
            },
            {
              "name": "color",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "CSS color override applied to strokes and fills. Accepts any valid CSS color value. Defaults to var(--accent-primary) when not set.",
              "fieldName": "color"
            },
            {
              "name": "width",
              "type": {
                "text": "number"
              },
              "description": "SVG viewport width in pixels.",
              "fieldName": "width",
              "default": "120"
            },
            {
              "name": "height",
              "type": {
                "text": "number"
              },
              "description": "SVG viewport height in pixels.",
              "fieldName": "height",
              "default": "32"
            },
            {
              "name": "fill",
              "type": {
                "text": "boolean"
              },
              "description": "When true and type is \"line\", fills the area beneath the curve with a semi-transparent accent color.",
              "fieldName": "fill",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-sparkline",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSparkline",
          "declaration": {
            "name": "ArcSparkline",
            "module": "src/data/sparkline.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/stat.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Numeric statistic display with gradient value and label.",
          "name": "ArcStat",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "stat"
            },
            {
              "name": "value"
            },
            {
              "name": "label"
            },
            {
              "name": "trend"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The stat value (e.g. \"99%\")",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label below the value",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "trend",
              "privacy": "public",
              "type": {
                "text": "'' | 'up' | 'down' | 'neutral'"
              },
              "default": "''",
              "description": "Shows a trend indicator arrow below the label. Empty (the default) shows none; an unrecognised value falls back to empty rather than rendering an uncoloured dash that no `:host([trend=...])` rule matches.",
              "attribute": "trend",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "change",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text displayed next to the trend arrow, typically a percentage like '+12%' or '-3.5%'.",
              "attribute": "change"
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The stat value (e.g. \"99%\")",
              "fieldName": "value"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label below the value",
              "fieldName": "label"
            },
            {
              "name": "trend",
              "type": {
                "text": "'' | 'up' | 'down' | 'neutral'"
              },
              "default": "''",
              "description": "Shows a trend indicator arrow below the label. Empty (the default) shows none; an unrecognised value falls back to empty rather than rendering an uncoloured dash that no `:host([trend=...])` rule matches.",
              "fieldName": "trend"
            },
            {
              "name": "change",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text displayed next to the trend arrow, typically a percentage like '+12%' or '-3.5%'.",
              "fieldName": "change"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-stat",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcStat",
          "declaration": {
            "name": "ArcStat",
            "module": "src/data/stat.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/step.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Individual step within a Stepper.",
          "name": "ArcStep",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Step label text",
              "attribute": "label",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Step label text",
              "fieldName": "label"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-step",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcStep",
          "declaration": {
            "name": "ArcStep",
            "module": "src/data/step.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/stepper.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Step indicator for multi-step workflows.",
          "name": "ArcStepper",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "stepper"
            },
            {
              "name": "step"
            },
            {
              "name": "line"
            },
            {
              "name": "circle"
            },
            {
              "name": "label"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "active",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Zero-indexed active step — steps before this index show as completed. Clamped to the range of rendered steps.",
              "attribute": "active",
              "default": "0",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "active",
              "type": {
                "text": "number"
              },
              "description": "Zero-indexed active step — steps before this index show as completed. Clamped to the range of rendered steps.",
              "fieldName": "active",
              "default": "0"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-stepper",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcStepper",
          "declaration": {
            "name": "ArcStepper",
            "module": "src/data/stepper.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/tag.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Compact pill-shaped label with color variants, custom color support, and an optional remove\nbutton, for categorisation, filtering, and selection feedback.",
          "name": "ArcTag",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "tag"
            },
            {
              "name": "label"
            },
            {
              "name": "remove"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "color",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Custom color as an RGB triplet (e.g. `\"77, 126, 247\"`). When set, overrides the variant colors for border, text, background, and hover glow. Useful for data-driven category colors.",
              "attribute": "color"
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info'"
              },
              "description": "Color variant. Default is neutral. Primary and secondary use accent tints. Success, warning, error and info provide semantic status colors.",
              "attribute": "variant",
              "default": "'default'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the tag size.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "removable",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, shows a close button that fires `arc-remove` when clicked.",
              "attribute": "removable",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Disables the tag, reducing opacity to 40% and blocking pointer events including the remove button.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-remove",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the remove button on a removable tag is clicked"
            }
          ],
          "attributes": [
            {
              "name": "variant",
              "type": {
                "text": "'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error' | 'info'"
              },
              "description": "Color variant. Default is neutral. Primary and secondary use accent tints. Success, warning, error and info provide semantic status colors.",
              "fieldName": "variant",
              "default": "'default'"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the tag size.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "removable",
              "type": {
                "text": "boolean"
              },
              "description": "When true, shows a close button that fires `arc-remove` when clicked.",
              "fieldName": "removable",
              "default": "false"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "Disables the tag, reducing opacity to 40% and blocking pointer events including the remove button.",
              "fieldName": "disabled",
              "default": "false"
            },
            {
              "name": "color",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Custom color as an RGB triplet (e.g. `\"77, 126, 247\"`). When set, overrides the variant colors for border, text, background, and hover glow. Useful for data-driven category colors.",
              "fieldName": "color"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-tag",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTag",
          "declaration": {
            "name": "ArcTag",
            "module": "src/data/tag.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/timeline-item.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Individual event within a Timeline.",
          "name": "ArcTimelineItem",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "description",
              "description": "Description from slotted text content",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "heading",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Event heading",
              "attribute": "heading",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "date",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Date string to display",
              "attribute": "date",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "heading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Event heading",
              "fieldName": "heading"
            },
            {
              "name": "date",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Date string to display",
              "fieldName": "date"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-timeline-item",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTimelineItem",
          "declaration": {
            "name": "ArcTimelineItem",
            "module": "src/data/timeline-item.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/timeline.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Vertical timeline with dated events.",
          "name": "ArcTimeline",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "timeline"
            },
            {
              "name": "item"
            },
            {
              "name": "marker"
            },
            {
              "name": "dot"
            },
            {
              "name": "line"
            },
            {
              "name": "content"
            },
            {
              "name": "title"
            },
            {
              "name": "description"
            },
            {
              "name": "date"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "headingLevel",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "ARIA heading level for each event title. Clamped to 1 or greater: `aria-level` below 1 is invalid and is dropped by assistive technology.",
              "attribute": "headingLevel",
              "default": "3"
            }
          ],
          "attributes": [
            {
              "name": "headingLevel",
              "type": {
                "text": "number"
              },
              "description": "ARIA heading level for each event title. Clamped to 1 or greater: `aria-level` below 1 is invalid and is dropped by assistive technology.",
              "fieldName": "headingLevel",
              "default": "3"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-timeline",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTimeline",
          "declaration": {
            "name": "ArcTimeline",
            "module": "src/data/timeline.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/uptime.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Status-page uptime history strip: one slim tick per period, colored by\nstatus. Hovering or arrow-keying across the strip raises a tick with the\nhouse status glow and shows its detail in a small built-in bubble. Accepts\nplain uptime fractions (thresholds decide the status) or explicit status\nobjects, and renders the computed overall percentage above the track.",
          "name": "ArcUptime",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "uptime"
            },
            {
              "name": "summary"
            },
            {
              "name": "track"
            },
            {
              "name": "tick"
            },
            {
              "name": "detail"
            },
            {
              "name": "caption"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "thresholds",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ up: 0.99, degraded: 0.95 }",
              "description": "Uptime fraction at or above `up` reads as up; at or above `degraded`, degraded; below, down."
            },
            {
              "kind": "method",
              "name": "statusOf",
              "static": true,
              "parameters": [
                {
                  "name": "value"
                }
              ],
              "description": "Map an uptime fraction to a status name; anything non-finite is none."
            },
            {
              "kind": "field",
              "name": "#STATUSES",
              "privacy": "private",
              "static": true,
              "default": "new Set(['up', 'degraded', 'down', 'none'])"
            },
            {
              "kind": "field",
              "name": "#STATUS_TEXT",
              "privacy": "private",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ up: 'Operational', degraded: 'Degraded', down: 'Outage', none: 'No data', }"
            },
            {
              "kind": "field",
              "name": "startLabel",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Caption under the oldest end of the track (e.g. \"90 days ago\").",
              "attribute": "start-label"
            },
            {
              "kind": "field",
              "name": "endLabel",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Caption under the newest end of the track (e.g. \"Today\").",
              "attribute": "end-label"
            },
            {
              "kind": "field",
              "name": "summary",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether to render the overall percentage above the track (default true; set the attribute to the string \"false\" to disable from markup). The percentage is the mean of every finite value in the data; when no entry carries a value the line is omitted regardless.",
              "attribute": "summary",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "data",
              "privacy": "public",
              "type": {
                "text": "Array<number | {value?: number, status?: 'up' | 'degraded' | 'down' | 'none', label?: string}>"
              },
              "description": "One entry per period, oldest first. A number is an uptime fraction from 0 to 1, mapped to a status by threshold (0.99 and up is \"up\", 0.95 and up is \"degraded\", below is \"down\"). An object may carry an explicit `status` (which wins over any threshold), a `value` used for the summary math, and a `label` shown in the hover detail. An entry with neither a finite value nor a status renders as the neutral \"none\" track. Set it from script, a framework binding, or a JSON attribute.",
              "attribute": "data",
              "default": "[]"
            }
          ],
          "attributes": [
            {
              "name": "data",
              "type": {
                "text": "Array<number | {value?: number, status?: 'up' | 'degraded' | 'down' | 'none', label?: string}>"
              },
              "description": "One entry per period, oldest first. A number is an uptime fraction from 0 to 1, mapped to a status by threshold (0.99 and up is \"up\", 0.95 and up is \"degraded\", below is \"down\"). An object may carry an explicit `status` (which wins over any threshold), a `value` used for the summary math, and a `label` shown in the hover detail. An entry with neither a finite value nor a status renders as the neutral \"none\" track. Set it from script, a framework binding, or a JSON attribute.",
              "fieldName": "data",
              "default": "[]"
            },
            {
              "name": "start-label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Caption under the oldest end of the track (e.g. \"90 days ago\").",
              "fieldName": "startLabel"
            },
            {
              "name": "end-label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Caption under the newest end of the track (e.g. \"Today\").",
              "fieldName": "endLabel"
            },
            {
              "name": "summary",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether to render the overall percentage above the track (default true; set the attribute to the string \"false\" to disable from markup). The percentage is the mean of every finite value in the data; when no entry carries a value the line is omitted regardless.",
              "fieldName": "summary"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-uptime",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcUptime",
          "declaration": {
            "name": "ArcUptime",
            "module": "src/data/uptime.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/value-card.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Horizontal card with icon and text, for values or features lists.",
          "name": "ArcValueCard",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "card"
            },
            {
              "name": "icon"
            },
            {
              "name": "title"
            },
            {
              "name": "description"
            }
          ],
          "slots": [
            {
              "name": "icon"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "icon",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Icon text displayed beside content",
              "attribute": "icon"
            },
            {
              "kind": "field",
              "name": "heading",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Card title",
              "attribute": "heading"
            },
            {
              "kind": "field",
              "name": "description",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Card body text",
              "attribute": "description"
            }
          ],
          "attributes": [
            {
              "name": "icon",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Icon text displayed beside content",
              "fieldName": "icon"
            },
            {
              "name": "heading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Card title",
              "fieldName": "heading"
            },
            {
              "name": "description",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Card body text",
              "fieldName": "description"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-value-card",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcValueCard",
          "declaration": {
            "name": "ArcValueCard",
            "module": "src/data/value-card.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/data/waveform.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Audio waveform visualization that doubles as a scrubber. Renders a peaks array as an SVG\nwaveform — the played region in accent with a soft glow, the unplayed region muted, and a\nglowing playhead line at the current position. With `interactive` set it becomes a seek\ncontrol: pointer scrubbing and keyboard arrows move the playhead, emitting `arc-input`\nwhile the gesture is in flight and `arc-change` when the value commits.\n\nThe component never touches audio itself — no AudioContext, no decoding. The consumer\ncomputes peak amplitudes (one number per bar, 0 to 1) however it likes and hands them\nover as an array. This keeps the component a pure function of its props, so it\nserver-renders and stays cheap enough for a lane of clips in a DAW timeline.\n\nThe time axis is deliberately direction-fixed: audio time flows left-to-right even in\nRTL contexts, matching every DAW, player, and editor convention.",
          "name": "ArcWaveform",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "description": "The interactive track region wrapping the SVG and playhead.",
              "name": "waveform"
            },
            {
              "description": "The SVG element.",
              "name": "svg"
            },
            {
              "description": "The unplayed (muted) waveform layer. Named `base` before v4, which is the name the root element takes across every component now.",
              "name": "unplayed"
            },
            {
              "description": "The played (accent) waveform layer.",
              "name": "played"
            },
            {
              "description": "The playhead line.",
              "name": "playhead"
            },
            {
              "description": "The time readout row (renders only when duration is set).",
              "name": "time"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the waveform. Announced as the slider label when interactive, or as the image description otherwise.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "peaks",
              "privacy": "public",
              "type": {
                "text": "Array"
              },
              "description": "Peak amplitudes as a number array, each value 0 to 1. Set it from script, a framework binding, or a JSON attribute. Values outside the range are clamped. An empty or missing array renders an empty track.",
              "attribute": "peaks",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "position",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Current playhead position as a fraction of the total, 0 to 1. Not seconds: multiply by `duration` yourself if you track seconds. Updated by the component during scrubbing and reflected as an attribute.",
              "attribute": "position",
              "default": "0",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "duration",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Total duration in seconds. Optional; when set, time readouts render below the waveform and the slider announces times instead of percentages.",
              "attribute": "duration",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "interactive",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Enables scrubbing. The waveform becomes a focusable slider: click or drag to seek, arrow keys to nudge, Home/End to jump. Without it the waveform is a static image.",
              "attribute": "interactive",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'bars' | 'mirror'"
              },
              "description": "Rendering style. `bars` draws discrete bar pairs mirrored around the center line; `mirror` draws a filled min/max envelope.",
              "attribute": "variant",
              "default": "'bars'",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent<{ value: number, time: number | null }>"
              },
              "description": "Fired continuously while scrubbing (every pointer move and each keyboard nudge). `value` is the position fraction 0-1; `time` is seconds when `duration` is set, otherwise null. Use for live preview — updating a time display or audibly scrubbing."
            },
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: number, time: number | null }>"
              },
              "description": "Fired once when the seek commits: on pointer release, or with each keyboard nudge. Use for the actual seek on your audio source."
            }
          ],
          "attributes": [
            {
              "name": "peaks",
              "type": {
                "text": "Array"
              },
              "description": "Peak amplitudes as a number array, each value 0 to 1. Set it from script, a framework binding, or a JSON attribute. Values outside the range are clamped. An empty or missing array renders an empty track.",
              "fieldName": "peaks",
              "default": "[]"
            },
            {
              "name": "position",
              "type": {
                "text": "number"
              },
              "description": "Current playhead position as a fraction of the total, 0 to 1. Not seconds: multiply by `duration` yourself if you track seconds. Updated by the component during scrubbing and reflected as an attribute.",
              "fieldName": "position",
              "default": "0"
            },
            {
              "name": "duration",
              "type": {
                "text": "number"
              },
              "description": "Total duration in seconds. Optional; when set, time readouts render below the waveform and the slider announces times instead of percentages.",
              "fieldName": "duration",
              "default": "0"
            },
            {
              "name": "interactive",
              "type": {
                "text": "boolean"
              },
              "description": "Enables scrubbing. The waveform becomes a focusable slider: click or drag to seek, arrow keys to nudge, Home/End to jump. Without it the waveform is a static image.",
              "fieldName": "interactive",
              "default": "false"
            },
            {
              "name": "variant",
              "type": {
                "text": "'bars' | 'mirror'"
              },
              "description": "Rendering style. `bars` draws discrete bar pairs mirrored around the center line; `mirror` draws a filled min/max envelope.",
              "fieldName": "variant",
              "default": "'bars'"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the waveform. Announced as the slider label when interactive, or as the image description otherwise.",
              "fieldName": "label"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-waveform",
          "customElement": true,
          "group": "media",
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcWaveform",
          "declaration": {
            "name": "ArcWaveform",
            "module": "src/data/waveform.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/alert.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Contextual alert banner with five semantic variants and optional dismiss button for delivering\ntimely, prominent feedback to users.",
          "name": "ArcAlert",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "alert"
            },
            {
              "name": "icon"
            },
            {
              "name": "heading"
            },
            {
              "name": "content"
            },
            {
              "name": "dismiss"
            }
          ],
          "slots": [
            {
              "description": "Replaces the built-in status glyph. Absorbed from arc-callout, whose icon was slottable.",
              "name": "icon"
            },
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "ROLES",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ error: 'alert', warning: 'alert', success: 'status', info: 'note', tip: 'note', }",
              "description": "Severity → ARIA role. V4-SCOPE §3.2, ratified 2026-08-13.\n\n`arc-alert` already implemented role-follows-severity, so most of this is a\nratification of what the component did. The exception is `info`, and it is\nthe reason the row needed a decision at all: `info` used to map to\n`role=\"status\"`, which *is* a polite live region. `arc-callout`'s default\nvariant is `info` and it was a static `role=\"note\"` box — so a naive merge\nwould have upgraded every informational callout on every page into an\nannouncement, landing the regression on the single most common variant.\n\n**So `info` is `note` now, and that is a behaviour change for existing\n`arc-alert` users too**, not only for callout's. The reasoning: `info` is\nthe variant most likely to be static page furniture, and an alert that\ngenuinely needs announcing has two ways to say so — pick a severity that\ncarries one, or set `live`."
            },
            {
              "kind": "field",
              "name": "heading",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional bold heading rendered above the body slot. Use it for a scannable one-line summary so users can quickly gauge the alert's importance before reading the full message.",
              "attribute": "heading"
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'info' | 'tip' | 'success' | 'warning' | 'error'"
              },
              "description": "Controls the semantic color palette, the icon, and — through the `ROLES` table — the ARIA role and whether the alert is announced. Use \"info\" for neutral guidance, \"tip\" for advice, \"success\" for confirmations, \"warning\" for caution states, and \"error\" for failures or blocking issues.",
              "attribute": "variant",
              "default": "'info'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "live",
              "privacy": "public",
              "description": "Announcement behaviour. `auto` (the default) derives it from `variant`: error and warning are assertive, success is polite, info and tip are not announced at all. Set it explicitly when severity and urgency disagree — an `info` alert injected after a background save wants `polite`; a `warning` rendered in the initial page probably wants `off`.",
              "type": {
                "text": "'auto' | 'off' | 'polite' | 'assertive'"
              },
              "attribute": "live",
              "default": "'auto'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "dismissible",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, renders a close button in the top-right corner. Clicking it removes the alert from the DOM and fires an \"arc-close\" event that parent components can listen to.",
              "attribute": "dismissible",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "density",
              "privacy": "public",
              "type": {
                "text": "'default' | 'compact'"
              },
              "description": "Visual density. 'compact' reduces padding and font sizes for inline or space-constrained usage.",
              "attribute": "density",
              "default": "'default'",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-close",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when a dismissible alert is closed"
            }
          ],
          "attributes": [
            {
              "name": "variant",
              "type": {
                "text": "'info' | 'tip' | 'success' | 'warning' | 'error'"
              },
              "description": "Controls the semantic color palette, the icon, and — through the `ROLES` table — the ARIA role and whether the alert is announced. Use \"info\" for neutral guidance, \"tip\" for advice, \"success\" for confirmations, \"warning\" for caution states, and \"error\" for failures or blocking issues.",
              "fieldName": "variant",
              "default": "'info'"
            },
            {
              "name": "live",
              "description": "Announcement behaviour. `auto` (the default) derives it from `variant`: error and warning are assertive, success is polite, info and tip are not announced at all. Set it explicitly when severity and urgency disagree — an `info` alert injected after a background save wants `polite`; a `warning` rendered in the initial page probably wants `off`.",
              "type": {
                "text": "'auto' | 'off' | 'polite' | 'assertive'"
              },
              "fieldName": "live",
              "default": "'auto'"
            },
            {
              "name": "density",
              "type": {
                "text": "'default' | 'compact'"
              },
              "description": "Visual density. 'compact' reduces padding and font sizes for inline or space-constrained usage.",
              "fieldName": "density",
              "default": "'default'"
            },
            {
              "name": "dismissible",
              "type": {
                "text": "boolean"
              },
              "description": "When true, renders a close button in the top-right corner. Clicking it removes the alert from the DOM and fires an \"arc-close\" event that parent components can listen to.",
              "fieldName": "dismissible",
              "default": "false"
            },
            {
              "name": "heading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional bold heading rendered above the body slot. Use it for a scannable one-line summary so users can quickly gauge the alert's importance before reading the full message.",
              "fieldName": "heading"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-alert",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcAlert",
          "declaration": {
            "name": "ArcAlert",
            "module": "src/feedback/alert.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/announcement.js",
      "declarations": [
        {
          "kind": "class",
          "description": "ARIA live-region wrapper with no visual output. Announces dynamic content changes to screen\nreaders. Zero visual footprint — pure accessibility utility.",
          "name": "ArcAnnouncement",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "region"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "message",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The text to announce to screen readers. Each time this property changes, a new announcement is triggered.",
              "attribute": "message"
            },
            {
              "kind": "field",
              "name": "politeness",
              "privacy": "public",
              "type": {
                "text": "'polite' | 'assertive'"
              },
              "description": "Controls the ARIA live region politeness level. Polite waits for the screen reader to finish before announcing; assertive interrupts immediately.",
              "attribute": "politeness",
              "default": "'polite'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "politeness",
              "type": {
                "text": "'polite' | 'assertive'"
              },
              "description": "Controls the ARIA live region politeness level. Polite waits for the screen reader to finish before announcing; assertive interrupts immediately.",
              "fieldName": "politeness",
              "default": "'polite'"
            },
            {
              "name": "message",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The text to announce to screen readers. Each time this property changes, a new announcement is triggered.",
              "fieldName": "message"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-announcement",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcAnnouncement",
          "declaration": {
            "name": "ArcAnnouncement",
            "module": "src/feedback/announcement.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/banner.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Full-width persistent strip pinned to viewport or section top. Uses semantic variants like alert\nbut edge-to-edge with no border-radius and a subtle gradient wash.",
          "name": "ArcBanner",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "banner"
            },
            {
              "name": "icon"
            },
            {
              "name": "message"
            },
            {
              "name": "dismiss"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'info' | 'success' | 'warning' | 'error'"
              },
              "description": "Controls the semantic color palette and icon. Use \"info\" for neutral announcements, \"success\" for positive confirmations, \"warning\" for caution states, and \"error\" for outages or critical failures.",
              "attribute": "variant",
              "default": "'info'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "dismissible",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, renders a close button on the right side. Clicking it collapses the banner and fires an \"arc-close\" event.",
              "attribute": "dismissible",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "sticky",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, pins the banner to the top of the viewport with position: sticky so it remains visible as the user scrolls.",
              "attribute": "sticky",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-close",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when a dismissible banner is closed by the user"
            }
          ],
          "attributes": [
            {
              "name": "variant",
              "type": {
                "text": "'info' | 'success' | 'warning' | 'error'"
              },
              "description": "Controls the semantic color palette and icon. Use \"info\" for neutral announcements, \"success\" for positive confirmations, \"warning\" for caution states, and \"error\" for outages or critical failures.",
              "fieldName": "variant",
              "default": "'info'"
            },
            {
              "name": "dismissible",
              "type": {
                "text": "boolean"
              },
              "description": "When true, renders a close button on the right side. Clicking it collapses the banner and fires an \"arc-close\" event.",
              "fieldName": "dismissible",
              "default": "false"
            },
            {
              "name": "sticky",
              "type": {
                "text": "boolean"
              },
              "description": "When true, pins the banner to the top of the viewport with position: sticky so it remains visible as the user scrolls.",
              "fieldName": "sticky",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-banner",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcBanner",
          "declaration": {
            "name": "ArcBanner",
            "module": "src/feedback/banner.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/command-group.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Groups CommandItems under a small uppercase heading in the results list. Items inside a group\nstill filter and keyboard-navigate as one flat list; headings disappear when none of their items\nmatch.",
          "name": "ArcCommandGroup",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "heading",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Heading text displayed above the group’s items.",
              "attribute": "heading",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "heading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Heading text displayed above the group’s items.",
              "fieldName": "heading"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-command-group",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcCommandGroup",
          "declaration": {
            "name": "ArcCommandGroup",
            "module": "src/feedback/command-group.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/command-item.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Action item inside a CommandPalette.",
          "name": "ArcCommandItem",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "label",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "selectionValue",
              "description": "What arc-select reports. Falls back to the label so an item that never sets\n`value` behaves as it always did.",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "shortcut",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Keyboard shortcut hint",
              "attribute": "shortcut",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "icon",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Name of the icon to display before the item label.",
              "attribute": "icon"
            },
            {
              "kind": "field",
              "name": "keywords",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Extra space-separated terms the search filter matches against but never displays — e.g. keywords=\"dialog popup\" on a Modal item.",
              "attribute": "keywords"
            },
            {
              "kind": "field",
              "name": "description",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Secondary line shown under the label and matched by search. Use it for the sentence that tells two similar results apart; a docs site can put the matching passage here so a query finds page content rather than only page titles.",
              "attribute": "description"
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Stable identifier carried on the arc-select detail. Defaults to the label, which is fine until two items share one — give anything a handler must act on its own value rather than matching against display text.",
              "attribute": "value"
            }
          ],
          "attributes": [
            {
              "name": "shortcut",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Keyboard shortcut hint",
              "fieldName": "shortcut"
            },
            {
              "name": "icon",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Name of the icon to display before the item label.",
              "fieldName": "icon"
            },
            {
              "name": "keywords",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Extra space-separated terms the search filter matches against but never displays — e.g. keywords=\"dialog popup\" on a Modal item.",
              "fieldName": "keywords"
            },
            {
              "name": "description",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Secondary line shown under the label and matched by search. Use it for the sentence that tells two similar results apart; a docs site can put the matching passage here so a query finds page content rather than only page titles.",
              "fieldName": "description"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Stable identifier carried on the arc-select detail. Defaults to the label, which is fine until two items share one — give anything a handler must act on its own value rather than matching against display text.",
              "fieldName": "value"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-command-item",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcCommandItem",
          "declaration": {
            "name": "ArcCommandItem",
            "module": "src/feedback/command-item.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/command-palette.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Spotlight-style command palette with fuzzy search and keyboard shortcuts.\n\nMatching is fuzzy and ranked — see shared/fuzzy-match.js for the scoring.\n\"cmdpal\" finds \"Command Palette\", terms may be typed in any order, and\nresults come back best-first rather than in DOM order, with the matched\ncharacters marked. Items are searched on their label, their `keywords`, and\ntheir `description`; the description is also the second line the palette\nrenders, which is what lets a consumer search page content rather than only\npage titles.",
          "name": "ArcCommandPalette",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "item"
            },
            {
              "name": "match"
            },
            {
              "name": "description"
            },
            {
              "description": "The palette panel. The scrim is `::backdrop`, which is not an element and so cannot be a part — style it with the `--palette-backdrop` custom property.",
              "name": "dialog"
            },
            {
              "name": "search"
            },
            {
              "name": "input"
            },
            {
              "name": "results"
            },
            {
              "name": "empty"
            },
            {
              "name": "group-heading"
            },
            {
              "name": "footer"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "placeholder",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Type a command...'",
              "description": "Placeholder text displayed in the search input when the query is empty.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "maxResults",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "50",
              "description": "How many ranked results to render. Truncation happens after ranking, so what survives is the best of the set. Raise it for a short command list; the default suits a large one.",
              "attribute": "max-results"
            },
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the palette is visible. When set to true, the dialog animates in, the search input auto-focuses, and body scroll is locked. Set to false to close.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-select",
              "type": {
                "text": "CustomEvent<{ value: string, item: { label: string, shortcut: string, value: string } }>"
              },
              "description": "Fired when a command item is selected. `detail.value` is the item's `value`, falling back to its label."
            },
            {
              "name": "arc-close",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the palette closes"
            }
          ],
          "attributes": [
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the palette is visible. When set to true, the dialog animates in, the search input auto-focuses, and body scroll is locked. Set to false to close.",
              "fieldName": "open",
              "default": "false"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "default": "'Type a command...'",
              "description": "Placeholder text displayed in the search input when the query is empty.",
              "fieldName": "placeholder"
            },
            {
              "name": "max-results",
              "type": {
                "text": "number"
              },
              "default": "50",
              "description": "How many ranked results to render. Truncation happens after ranking, so what survives is the best of the set. Raise it for a short command list; the default suits a large one.",
              "fieldName": "maxResults"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-command-palette",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcCommandPalette",
          "declaration": {
            "name": "ArcCommandPalette",
            "module": "src/feedback/command-palette.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/confirm.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Confirmation prompt, in both of the shapes a confirmation needs.\n\n**Imperative:** `ArcConfirm.open({ heading, message, variant })` returns a `Promise<boolean>` —\nthe shape you want at a call site that has to decide something before continuing.\n**Declarative:** the element itself, with `open` bound and `arc-confirm`/`arc-cancel` listened\nfor — the shape you want when the prompt is part of a template.\n\nV4-SCOPE §3.3: those two are different shapes rather than duplicates of each other, which is why\nboth survive. The duplicate was the old `<arc-dialog>` — a third spelling of this same prompt,\nwith a strict subset of these props and no slot — and it merged in here. The `arc-dialog` tag\nnow names the modal primitive this is built on (renamed from `arc-modal`), and that component\nthrows in dev if it is handed `message` or `confirmLabel`, so the reuse of the name cannot fail\nquietly.",
          "name": "ArcConfirm",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "message"
            },
            {
              "name": "cancel"
            },
            {
              "name": "confirm"
            }
          ],
          "slots": [
            {
              "description": "Body content, for when the confirmation needs markup the `message` string cannot carry — a filename in `<code>`, an emphasized consequence, a short list of what is about to change. Falls back to `message` when nothing is slotted.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "static": true,
              "parameters": [],
              "description": "Controls whether the confirmation dialog is visible. For declarative usage; the imperative API manages this automatically.",
              "type": {
                "text": "boolean"
              },
              "attribute": "open",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "heading",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The heading text displayed at the top of the confirmation dialog.",
              "attribute": "heading"
            },
            {
              "kind": "field",
              "name": "message",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The body message explaining what the user is confirming. Used as the fallback for the default slot, so it is the simplest way to set the body and the only one available to the imperative `ArcConfirm.open()` API.",
              "attribute": "message"
            },
            {
              "kind": "field",
              "name": "confirmLabel",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Confirm'",
              "description": "Label for the confirm button. Use a specific verb like \"Delete\" or \"Publish\" instead of generic \"OK\".",
              "attribute": "confirm-label"
            },
            {
              "kind": "field",
              "name": "cancelLabel",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Cancel'",
              "description": "Label for the cancel button. Use a specific alternative like \"Keep\" or \"Go back\" when possible.",
              "attribute": "cancel-label"
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'default' | 'error'"
              },
              "description": "Controls the confirm button style. Use \"error\" for destructive actions — the confirm button renders in the error color.",
              "attribute": "variant",
              "default": "'default'",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-confirm",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the user clicks the confirm button"
            },
            {
              "name": "arc-cancel",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the user clicks cancel, presses Escape, or clicks the backdrop"
            }
          ],
          "attributes": [
            {
              "name": "open",
              "parameters": [
                {
                  "name": "{ heading, message, confirmLabel, cancelLabel, variant }",
                  "default": "{}"
                }
              ],
              "description": "Controls whether the confirmation dialog is visible. For declarative usage; the imperative API manages this automatically.",
              "type": {
                "text": "boolean"
              },
              "fieldName": "open",
              "default": "false"
            },
            {
              "name": "heading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The heading text displayed at the top of the confirmation dialog.",
              "fieldName": "heading"
            },
            {
              "name": "message",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The body message explaining what the user is confirming. Used as the fallback for the default slot, so it is the simplest way to set the body and the only one available to the imperative `ArcConfirm.open()` API.",
              "fieldName": "message"
            },
            {
              "name": "confirm-label",
              "type": {
                "text": "string"
              },
              "default": "'Confirm'",
              "description": "Label for the confirm button. Use a specific verb like \"Delete\" or \"Publish\" instead of generic \"OK\".",
              "fieldName": "confirmLabel"
            },
            {
              "name": "cancel-label",
              "type": {
                "text": "string"
              },
              "default": "'Cancel'",
              "description": "Label for the cancel button. Use a specific alternative like \"Keep\" or \"Go back\" when possible.",
              "fieldName": "cancelLabel"
            },
            {
              "name": "variant",
              "type": {
                "text": "'default' | 'error'"
              },
              "description": "Controls the confirm button style. Use \"error\" for destructive actions — the confirm button renders in the error color.",
              "fieldName": "variant",
              "default": "'default'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-confirm",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcConfirm",
          "declaration": {
            "name": "ArcConfirm",
            "module": "src/feedback/confirm.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/connection-status.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Auto-detects online/offline via navigator API. Offline triggers a persistent warning bar with\namber glow pulse. Reconnection auto-dismisses with success flash.",
          "name": "ArcConnectionStatus",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "status"
            },
            {
              "name": "dot"
            },
            {
              "name": "label"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "online",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "attribute": "online"
            }
          ],
          "events": [
            {
              "name": "arc-online",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the browser regains network connectivity"
            },
            {
              "name": "arc-offline",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the browser loses network connectivity"
            }
          ],
          "attributes": [
            {
              "name": "online",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "fieldName": "online"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-connection-status",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcConnectionStatus",
          "declaration": {
            "name": "ArcConnectionStatus",
            "module": "src/feedback/connection-status.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/context-menu.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Right-click context menu with keyboard shortcuts.",
          "name": "ArcContextMenu",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "menu"
            },
            {
              "name": "divider"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            },
            {
              "name": "content"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Controls the visibility of the context menu. Set to true when the contextmenu event fires; set to false when the user selects an item, clicks the backdrop, or presses Escape.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-open",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the context menu opens"
            },
            {
              "name": "arc-close",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the context menu closes"
            },
            {
              "name": "arc-select",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when a menu item is selected"
            }
          ],
          "attributes": [
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Controls the visibility of the context menu. Set to true when the contextmenu event fires; set to false when the user selects an item, clicks the backdrop, or presses Escape.",
              "fieldName": "open",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-context-menu",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcContextMenu",
          "declaration": {
            "name": "ArcContextMenu",
            "module": "src/feedback/context-menu.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/conversation.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A chat transcript: the scrollable column that holds arc-message children. Built for AI\nassistant panels — the layout, the role alignment, and the scroll behavior all assume messages\narrive while the user is reading. While the reader sits near the bottom, new or growing\nmessages keep the view pinned to the latest; once they scroll up to re-read, the transcript\nnever yanks them back down. The arc-scroll-away and arc-scroll-return events report those\ntransitions with the distance from the bottom, so a consumer can float a \"jump to latest\" chip\nand wire it to scrollToEnd().",
          "name": "ArcConversation",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "conversation"
            }
          ],
          "slots": [
            {
              "description": "Default content: the arc-message children making up the transcript.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "method",
              "name": "scrollToEnd",
              "description": "Scroll the transcript to its newest message.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "autoScroll",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Follow new content: when a message is added or grows while the reader is near the bottom, scroll to keep the latest visible. A reader who has scrolled up is never pulled back down. Defaults to true; set the property to false to leave scrolling entirely to the consumer.",
              "attribute": "autoScroll",
              "default": "true",
              "reflects": true
            }
          ],
          "events": [
            {
              "type": {
                "text": "CustomEvent<{value: number}>"
              },
              "description": "Fired once when the reader scrolls up out of the near-bottom zone of the transcript. detail.value is the distance from the bottom in pixels.",
              "name": "arc-scroll-away"
            },
            {
              "type": {
                "text": "CustomEvent<{value: number}>"
              },
              "description": "Fired once when the reader comes back within the near-bottom zone. detail.value is the distance from the bottom in pixels.",
              "name": "arc-scroll-return"
            }
          ],
          "attributes": [
            {
              "name": "autoScroll",
              "type": {
                "text": "boolean"
              },
              "description": "Follow new content: when a message is added or grows while the reader is near the bottom, scroll to keep the latest visible. A reader who has scrolled up is never pulled back down. Defaults to true; set the property to false to leave scrolling entirely to the consumer.",
              "fieldName": "autoScroll",
              "default": "true"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-conversation",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcConversation",
          "declaration": {
            "name": "ArcConversation",
            "module": "src/feedback/conversation.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/dialog.js",
      "declarations": [
        {
          "kind": "class",
          "description": "General-purpose modal overlay on the platform's `<dialog>`: the browser's focus containment,\ninert background, Escape handling and top layer, with the library's sizing, header/body/footer\nstructure and cancelable close contract on top.\n\nNamed `arc-modal` before v4. The rename is V4-SCOPE §2.4 — the element is a dialog, the platform\ncalls it a dialog, and `modal` names one of its behaviours rather than what it is. `arc-modal`\nstays as a deprecated alias for the whole of v4.\n\n**This is not the confirm prompt that used to be called `arc-dialog`.** That one is\n`<arc-confirm>` now, and it absorbed both of its old spellings. The tag name is reused here for\na different component, so this one throws in dev when it is handed `message` or `confirmLabel` —\nthe two props that would otherwise be silently ignored, leaving an empty panel.",
          "name": "ArcDialog",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "description": "The dialog panel. Same element as `base`; the scrim is `::backdrop`, which is not an element and so cannot be a part — style it with the `--dialog-backdrop` and `--dialog-backdrop-filter` custom properties.",
              "name": "dialog"
            },
            {
              "name": "header"
            },
            {
              "name": "close"
            },
            {
              "name": "body"
            },
            {
              "name": "footer"
            }
          ],
          "slots": [
            {
              "name": "header"
            },
            {
              "description": "Default content.",
              "name": ""
            },
            {
              "name": "footer"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "REUSED_TAG_PROPS",
              "type": {
                "text": "array"
              },
              "static": true,
              "default": "['message', 'confirmLabel', 'cancelLabel']",
              "description": "The props that belonged to the *old* `arc-dialog`.\n\nV4-SCOPE §3.3 requires this and says why: the old `arc-dialog` was a confirm\nprompt with `heading`, `message` and `confirmLabel`, and it merged into\n`arc-confirm`. Anyone still writing that markup upgrades into this\nprimitive, which knows `heading` and would silently ignore the other two —\nrendering an empty panel with a title. That is the quietest possible\nfailure, and a line in MIGRATION.md is not a fix for it.\n\n`heading` is deliberately not in the list: it means the same thing in both\ncomponents, so its presence is not evidence of the mistake."
            },
            {
              "kind": "field",
              "name": "heading",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text displayed in the header bar, and the dialog's accessible name. Keep it short and action-oriented (e.g. \"Delete Project\" rather than \"Are you sure?\").",
              "attribute": "heading"
            },
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Controls the visible state of the dialog. Set to `true` to open it and move focus inside; set to `false` to run the exit animation and restore focus to wherever it came from.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the maximum width of the dialog panel. `sm` (400px) is ideal for simple confirmations, `md` (560px) for standard forms, and `lg` (720px) for content-heavy dialogs with tables or multi-column layouts.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "dismissible",
              "privacy": "public",
              "description": "When `true`, renders the built-in X close button and allows dismissal via Escape key and backdrop click. Set to `false` for critical decisions the user must resolve through the footer buttons. Note the default: a dialog is dismissible unless you say otherwise, where an alert is not dismissible unless you say so — the name is the convention, the default belongs to the component.",
              "type": {
                "text": "boolean"
              },
              "attribute": "dismissible",
              "default": "true",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "fullscreen",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Makes the dialog fill the entire viewport. Useful for mobile forms or complex workflows.",
              "attribute": "fullscreen",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-close",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the dialog closes. Cancelable: `preventDefault()` vetoes the close."
            },
            {
              "name": "arc-open",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the dialog opens"
            }
          ],
          "attributes": [
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Controls the visible state of the dialog. Set to `true` to open it and move focus inside; set to `false` to run the exit animation and restore focus to wherever it came from.",
              "fieldName": "open",
              "default": "false"
            },
            {
              "name": "heading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text displayed in the header bar, and the dialog's accessible name. Keep it short and action-oriented (e.g. \"Delete Project\" rather than \"Are you sure?\").",
              "fieldName": "heading"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the maximum width of the dialog panel. `sm` (400px) is ideal for simple confirmations, `md` (560px) for standard forms, and `lg` (720px) for content-heavy dialogs with tables or multi-column layouts.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "fullscreen",
              "type": {
                "text": "boolean"
              },
              "description": "Makes the dialog fill the entire viewport. Useful for mobile forms or complex workflows.",
              "fieldName": "fullscreen",
              "default": "false"
            },
            {
              "name": "dismissible",
              "description": "When `true`, renders the built-in X close button and allows dismissal via Escape key and backdrop click. Set to `false` for critical decisions the user must resolve through the footer buttons. Note the default: a dialog is dismissible unless you say otherwise, where an alert is not dismissible unless you say so — the name is the convention, the default belongs to the component.",
              "type": {
                "text": "boolean"
              },
              "fieldName": "dismissible",
              "default": "true"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-dialog",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcDialog",
          "declaration": {
            "name": "ArcDialog",
            "module": "src/feedback/dialog.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/dropdown-menu.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Menu dropdown triggered by a button with keyboard navigation.",
          "name": "ArcDropdownMenu",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "divider"
            },
            {
              "name": "item"
            },
            {
              "name": "shortcut"
            },
            {
              "name": "trigger"
            },
            {
              "name": "panel"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            },
            {
              "name": "trigger"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the menu panel is visible. Toggled by clicking the trigger. Set to false when the user selects an item, clicks outside, or presses Escape.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-close",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the dropdown closes"
            },
            {
              "name": "arc-select",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when a menu item is selected"
            }
          ],
          "attributes": [
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the menu panel is visible. Toggled by clicking the trigger. Set to false when the user selects an item, clicks outside, or presses Escape.",
              "fieldName": "open",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-dropdown-menu",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcDropdownMenu",
          "declaration": {
            "name": "ArcDropdownMenu",
            "module": "src/feedback/dropdown-menu.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/hover-card.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Card that appears on hover with a delay.",
          "name": "ArcHoverCard",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "trigger"
            },
            {
              "name": "card"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            },
            {
              "name": "content"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "openDelay",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "400",
              "description": "Milliseconds to wait after hover/focus before showing the card. Prevents accidental activation during fast cursor movement.",
              "attribute": "open-delay"
            },
            {
              "kind": "field",
              "name": "closeDelay",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "300",
              "description": "Milliseconds to wait after the cursor leaves the trigger before hiding the card. Moving into the card cancels this timer.",
              "attribute": "close-delay"
            },
            {
              "kind": "field",
              "name": "position",
              "privacy": "public",
              "type": {
                "text": "'bottom' | 'top' | 'left' | 'right'"
              },
              "description": "Controls which side of the trigger the card appears on. The card is centered along the perpendicular axis using CSS transforms.",
              "attribute": "position",
              "default": "'bottom'",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-open",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the hover card becomes visible"
            },
            {
              "name": "arc-close",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the hover card hides"
            }
          ],
          "attributes": [
            {
              "name": "position",
              "type": {
                "text": "'bottom' | 'top' | 'left' | 'right'"
              },
              "description": "Controls which side of the trigger the card appears on. The card is centered along the perpendicular axis using CSS transforms.",
              "fieldName": "position",
              "default": "'bottom'"
            },
            {
              "name": "open-delay",
              "type": {
                "text": "number"
              },
              "default": "400",
              "description": "Milliseconds to wait after hover/focus before showing the card. Prevents accidental activation during fast cursor movement.",
              "fieldName": "openDelay"
            },
            {
              "name": "close-delay",
              "type": {
                "text": "number"
              },
              "default": "300",
              "description": "Milliseconds to wait after the cursor leaves the trigger before hiding the card. Moving into the card cancels this timer.",
              "fieldName": "closeDelay"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-hover-card",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcHoverCard",
          "declaration": {
            "name": "ArcHoverCard",
            "module": "src/feedback/hover-card.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/loading-overlay.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Semi-transparent surface-overlay with backdrop blur covering a container or page. Centers a\nspinner with optional progress text.",
          "name": "ArcLoadingOverlay",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "overlay"
            },
            {
              "name": "spinner"
            },
            {
              "name": "message"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "message",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional text displayed below the spinner. Use it to communicate what is loading or the current progress step.",
              "attribute": "message"
            },
            {
              "kind": "field",
              "name": "active",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the loading overlay is visible. When true, the overlay fades in and blocks interaction with the content behind it.",
              "attribute": "active",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "global",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, the overlay uses fixed positioning to cover the entire viewport instead of just its parent container. Includes a focus trap in this mode.",
              "attribute": "global",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "active",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the loading overlay is visible. When true, the overlay fades in and blocks interaction with the content behind it.",
              "fieldName": "active",
              "default": "false"
            },
            {
              "name": "message",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional text displayed below the spinner. Use it to communicate what is loading or the current progress step.",
              "fieldName": "message"
            },
            {
              "name": "global",
              "type": {
                "text": "boolean"
              },
              "description": "When true, the overlay uses fixed positioning to cover the entire viewport instead of just its parent container. Includes a focus trap in this mode.",
              "fieldName": "global",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-loading-overlay",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcLoadingOverlay",
          "declaration": {
            "name": "ArcLoadingOverlay",
            "module": "src/feedback/loading-overlay.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/message.js",
      "declarations": [
        {
          "kind": "class",
          "description": "One message in a conversation transcript. The speaker attribute decides the voice: user messages\nsit at the inline end on a faint accent tint, assistant messages sit at the inline start on a\nneutral surface, and system messages run centered, muted and small. The default slot is the\nmessage body — append text to it to stream a reply in — and with the markdown attribute set,\nthat slotted text renders through arc-markdown, re-rendering as the text grows. A pending\nmessage shows the typing indicator in place of its body. Slot an avatar for either speaker if\nthe product wants faces; none is built in.",
          "name": "ArcMessage",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "message"
            },
            {
              "name": "meta"
            },
            {
              "name": "bubble"
            }
          ],
          "slots": [
            {
              "description": "The message body. Text when markdown is set; any markup otherwise.",
              "name": ""
            },
            {
              "description": "An optional avatar beside the bubble; the component ships none of its own.",
              "name": "avatar"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "author",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Display name shown in the muted meta line above the bubble. Omit it and the meta line only appears when a timestamp is set.",
              "attribute": "author"
            },
            {
              "kind": "field",
              "name": "timestamp",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "When the message was sent, as an ISO 8601 string. Rendered as house relative time (\"3 minutes ago\") through arc-time-ago, with the absolute date on its title.",
              "attribute": "timestamp"
            },
            {
              "kind": "field",
              "name": "speaker",
              "privacy": "public",
              "type": {
                "text": "'user' | 'assistant' | 'system'"
              },
              "description": "Whose message this is. \"user\" aligns to the inline end on an accent-tinted surface, \"assistant\" to the inline start on a neutral surface, and \"system\" runs centered and muted for notices in the transcript's own voice. An unrecognized value renders as \"user\".",
              "attribute": "speaker",
              "default": "'user'"
            },
            {
              "kind": "field",
              "name": "pending",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Renders the typing indicator — three pulsing dots — in place of the body while a reply is being produced. Under prefers-reduced-motion the dots give way to a static ellipsis.",
              "attribute": "pending",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "markdown",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Render the slotted text through the house markdown renderer. The slot's text content is the source; it re-parses whenever the slot changes, so streaming into the slot streams through the renderer. When false, slotted content renders as-is.",
              "attribute": "markdown",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "speaker",
              "type": {
                "text": "'user' | 'assistant' | 'system'"
              },
              "description": "Whose message this is. \"user\" aligns to the inline end on an accent-tinted surface, \"assistant\" to the inline start on a neutral surface, and \"system\" runs centered and muted for notices in the transcript's own voice. An unrecognized value renders as \"user\".",
              "fieldName": "speaker",
              "default": "'user'"
            },
            {
              "name": "author",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Display name shown in the muted meta line above the bubble. Omit it and the meta line only appears when a timestamp is set.",
              "fieldName": "author"
            },
            {
              "name": "timestamp",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "When the message was sent, as an ISO 8601 string. Rendered as house relative time (\"3 minutes ago\") through arc-time-ago, with the absolute date on its title.",
              "fieldName": "timestamp"
            },
            {
              "name": "pending",
              "type": {
                "text": "boolean"
              },
              "description": "Renders the typing indicator — three pulsing dots — in place of the body while a reply is being produced. Under prefers-reduced-motion the dots give way to a static ellipsis.",
              "fieldName": "pending",
              "default": "false"
            },
            {
              "name": "markdown",
              "type": {
                "text": "boolean"
              },
              "description": "Render the slotted text through the house markdown renderer. The slot's text content is the source; it re-parses whenever the slot changes, so streaming into the slot streams through the renderer. When false, slotted content renders as-is.",
              "fieldName": "markdown",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-message",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcMessage",
          "declaration": {
            "name": "ArcMessage",
            "module": "src/feedback/message.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/notification-panel.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Notification dropdown panel triggered by a button.",
          "name": "ArcNotificationPanel",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "trigger"
            },
            {
              "name": "panel"
            },
            {
              "name": "header"
            },
            {
              "name": "body"
            },
            {
              "name": "footer"
            }
          ],
          "slots": [
            {
              "name": "trigger"
            },
            {
              "name": "header"
            },
            {
              "description": "Default content.",
              "name": ""
            },
            {
              "name": "footer"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "maxHeight",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'400px'",
              "description": "Maximum height of the scrollable body area. Prevents long notification lists from overflowing the viewport.",
              "attribute": "max-height"
            },
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the notification panel is visible. Toggle this programmatically or let the built-in trigger click handler manage it.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "position",
              "privacy": "public",
              "type": {
                "text": "'top-right' | 'top-left'"
              },
              "description": "Horizontal alignment of the panel relative to the trigger element. Use top-right when the trigger is near the right edge of the viewport.",
              "attribute": "position",
              "default": "'top-right'",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-open",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the notification panel opens"
            },
            {
              "name": "arc-close",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the notification panel closes"
            }
          ],
          "attributes": [
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the notification panel is visible. Toggle this programmatically or let the built-in trigger click handler manage it.",
              "fieldName": "open",
              "default": "false"
            },
            {
              "name": "position",
              "type": {
                "text": "'top-right' | 'top-left'"
              },
              "description": "Horizontal alignment of the panel relative to the trigger element. Use top-right when the trigger is near the right edge of the viewport.",
              "fieldName": "position",
              "default": "'top-right'"
            },
            {
              "name": "max-height",
              "type": {
                "text": "string"
              },
              "default": "'400px'",
              "description": "Maximum height of the scrollable body area. Prevents long notification lists from overflowing the viewport.",
              "fieldName": "maxHeight"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-notification-panel",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcNotificationPanel",
          "declaration": {
            "name": "ArcNotificationPanel",
            "module": "src/feedback/notification-panel.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/popover.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Floating content panel anchored to a trigger element, with four placement positions and\nautomatic outside-click dismissal.",
          "name": "ArcPopover",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "trigger"
            },
            {
              "name": "panel"
            }
          ],
          "slots": [
            {
              "name": "trigger"
            },
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "trigger",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Reserved for future trigger-mode configuration (click, hover, manual).",
              "attribute": "trigger"
            },
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the popover panel is currently visible. Reflected as an attribute.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "position",
              "privacy": "public",
              "type": {
                "text": "'top' | 'bottom' | 'left' | 'right'"
              },
              "description": "Placement of the panel relative to the trigger element.",
              "attribute": "position",
              "default": "'bottom'",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-open",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when the popover opens."
            },
            {
              "name": "arc-close",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the popover closes."
            }
          ],
          "attributes": [
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the popover panel is currently visible. Reflected as an attribute.",
              "fieldName": "open",
              "default": "false"
            },
            {
              "name": "position",
              "type": {
                "text": "'top' | 'bottom' | 'left' | 'right'"
              },
              "description": "Placement of the panel relative to the trigger element.",
              "fieldName": "position",
              "default": "'bottom'"
            },
            {
              "name": "trigger",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Reserved for future trigger-mode configuration (click, hover, manual).",
              "fieldName": "trigger"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-popover",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcPopover",
          "declaration": {
            "name": "ArcPopover",
            "module": "src/feedback/popover.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/progress.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Progress indicator as a bar or spinner, with determinate and indeterminate modes. Shows\ncompletion state for uploads, installations, and long-running operations.",
          "name": "ArcProgress",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "progress"
            },
            {
              "name": "label"
            },
            {
              "name": "spinner"
            },
            {
              "name": "value"
            },
            {
              "name": "track"
            },
            {
              "name": "fill"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible label text applied as aria-label on the underlying progressbar role element. This is the only way screen readers can convey the purpose of the indicator. Always provide a meaningful label such as \"Uploading report.pdf\" rather than a generic \"Loading\".",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Current completion percentage from 0 to 100. Only meaningful in determinate mode. The bar fills proportionally and aria-valuenow updates to match, giving screen readers a live reading.",
              "attribute": "value",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'bar' | 'spinner'"
              },
              "description": "Selects the visual shape. Bar renders a horizontal track with a fill that grows from left to right — best for wide containers and known percentages. Spinner renders a circular indicator suited to compact inline or button contexts.",
              "attribute": "variant",
              "default": "'bar'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the thickness of the bar track or the diameter of the spinner. Small (sm) fits inside table cells and tight layouts. Medium (md) is the standard default. Large (lg) is appropriate for page-level or hero loading states.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "indeterminate",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, the bar pulses or the spinner loops without a fixed endpoint. Use this when the total work is unknown. Switch to determinate (indeterminate=false) and set a value as soon as real progress data becomes available.",
              "attribute": "indeterminate",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "showValue",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Displays the current percentage value next to the label.",
              "attribute": "showValue",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "number"
              },
              "description": "Current completion percentage from 0 to 100. Only meaningful in determinate mode. The bar fills proportionally and aria-valuenow updates to match, giving screen readers a live reading.",
              "fieldName": "value",
              "default": "0"
            },
            {
              "name": "variant",
              "type": {
                "text": "'bar' | 'spinner'"
              },
              "description": "Selects the visual shape. Bar renders a horizontal track with a fill that grows from left to right — best for wide containers and known percentages. Spinner renders a circular indicator suited to compact inline or button contexts.",
              "fieldName": "variant",
              "default": "'bar'"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the thickness of the bar track or the diameter of the spinner. Small (sm) fits inside table cells and tight layouts. Medium (md) is the standard default. Large (lg) is appropriate for page-level or hero loading states.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "indeterminate",
              "type": {
                "text": "boolean"
              },
              "description": "When true, the bar pulses or the spinner loops without a fixed endpoint. Use this when the total work is unknown. Switch to determinate (indeterminate=false) and set a value as soon as real progress data becomes available.",
              "fieldName": "indeterminate",
              "default": "false"
            },
            {
              "name": "showValue",
              "type": {
                "text": "boolean"
              },
              "description": "Displays the current percentage value next to the label.",
              "fieldName": "showValue",
              "default": "false"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible label text applied as aria-label on the underlying progressbar role element. This is the only way screen readers can convey the purpose of the indicator. Always provide a meaningful label such as \"Uploading report.pdf\" rather than a generic \"Loading\".",
              "fieldName": "label"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-progress",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcProgress",
          "declaration": {
            "name": "ArcProgress",
            "module": "src/feedback/progress.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/sheet.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A sliding overlay panel that emerges from the bottom or right edge of the viewport, with a\nblurred backdrop, header, scrollable body, and footer slot.",
          "name": "ArcSheet",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "close"
            },
            {
              "description": "The sliding panel. The scrim is `::backdrop`, which is not an element and so cannot be a part — style it with the `--sheet-backdrop` and `--sheet-backdrop-filter` custom properties.",
              "name": "panel"
            },
            {
              "name": "handle"
            },
            {
              "name": "header"
            },
            {
              "name": "body"
            },
            {
              "name": "footer"
            }
          ],
          "slots": [
            {
              "name": "header"
            },
            {
              "description": "Default content.",
              "name": ""
            },
            {
              "name": "footer"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "heading",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text displayed in the header row. Also used as the `aria-label` for the dialog panel.",
              "attribute": "heading"
            },
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the sheet is visible. Reflected as an attribute and toggleable programmatically.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "side",
              "privacy": "public",
              "type": {
                "text": "'bottom' | 'right'"
              },
              "description": "Which edge the panel slides in from. Bottom sheets have a max-height of 80vh; right sheets are 400px wide.",
              "attribute": "side",
              "default": "'bottom'",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-close",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the sheet closes"
            },
            {
              "name": "arc-open",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the sheet opens"
            }
          ],
          "attributes": [
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the sheet is visible. Reflected as an attribute and toggleable programmatically.",
              "fieldName": "open",
              "default": "false"
            },
            {
              "name": "side",
              "type": {
                "text": "'bottom' | 'right'"
              },
              "description": "Which edge the panel slides in from. Bottom sheets have a max-height of 80vh; right sheets are 400px wide.",
              "fieldName": "side",
              "default": "'bottom'"
            },
            {
              "name": "heading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text displayed in the header row. Also used as the `aria-label` for the dialog panel.",
              "fieldName": "heading"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-sheet",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSheet",
          "declaration": {
            "name": "ArcSheet",
            "module": "src/feedback/sheet.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/toast.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Stack-managed notification toasts with auto-dismiss, variant-colored indicators, configurable\nposition, smooth enter/exit animations, and the stacking policy that used to live in a separate\narc-toast-manager: a cap on how many show at once, a FIFO queue for the overflow, and\ndeduplication of repeated messages.\n\nQueueing belongs here rather than in a wrapper. As a separate component it could only reach\narc-toast's public surface, so a duplicate of a *visible* toast had to be dismissed and re-shown\nto gain its \"(×N)\" suffix — a visible flicker for what is conceptually a counter increment. Owning\nthe render state makes that an in-place update.\n\nEvery method has a document-level event beside it, so a consumer who cannot\nreach the element — a framework wrapper that exposes no handle, a module with\nno reference to the page's toast host — can still drive it:\n`arc-toast` (show), `arc-toast-update`, `arc-toast-complete`,\n`arc-toast-dismiss` and `arc-toast-clear`. Pass `detail.id` to `arc-toast` to\nname the toast yourself; the other four take that id back. A CustomEvent's\n`detail` is never cloned, so an `action` callback survives the trip.",
          "name": "ArcToast",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "container"
            },
            {
              "name": "toast"
            },
            {
              "name": "action"
            },
            {
              "name": "dismiss"
            },
            {
              "name": "track"
            },
            {
              "name": "fill"
            },
            {
              "name": "cancel"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "method",
              "name": "show",
              "parameters": [
                {
                  "name": "options",
                  "default": "{}",
                  "description": "`duration` overrides the element's own for this toast alone and\n`persistent` pins it until something dismisses it; progress mode ignores\nboth, being persistent by definition.",
                  "optional": true,
                  "type": {
                    "text": "{ id?: number|string, message?: string, variant?: 'info' | 'success' | 'warning' | 'error', duration?: number, persistent?: boolean, progress?: number, action?: () => void, actionLabel?: string, onCancel?: () => void }"
                  }
                }
              ],
              "description": "Show a toast, or coalesce it into an identical one that is already showing.\n\nPassing `progress` puts the toast in progress mode, absorbed from\narc-progress-toast in 4.2: it renders a track beneath the message, exempts\nitself from dedupe and from the auto-dismiss timer, and — given `onCancel`\n— offers a cancel button that fires `arc-cancel`. Move the bar with\n`updateToast(id, { progress })` and end it with `complete(id)`, which fires\n`arc-complete`. The mode is chosen here and is not switchable afterwards: a\ntrack appearing mid-life would relayout a notification the reader is\nalready reading.\n\n`action` and `actionLabel` arrive from arc-snackbar the same way. The label\nrenders a ghost button; a click runs the callback and fires `arc-action`\nbefore the toast dismisses.",
              "return": {
                "type": {
                  "text": "number|string"
                }
              }
            },
            {
              "kind": "method",
              "name": "dismiss",
              "parameters": [
                {
                  "name": "id",
                  "type": {
                    "text": "number|string"
                  }
                }
              ],
              "description": "Dismiss a toast by the id show() returned, whether it is visible or still\nqueued. Unknown ids are ignored.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "clear",
              "description": "Dismiss everything on screen and discard the queue.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "updateToast",
              "parameters": [
                {
                  "name": "id",
                  "type": {
                    "text": "number|string"
                  }
                },
                {
                  "name": "changes",
                  "type": {
                    "text": "{ progress?: number, message?: string }"
                  }
                }
              ],
              "description": "Move a progress toast's bar, its message, or both. Unknown ids are ignored,\nmatching dismiss().\n\nNamed `updateToast` rather than `update` because `update` is Lit's — the\nname arc-progress-toast used, and the reason it also carried a do-nothing\n`update(changedProps) { super.update(changedProps); }` override that read\nas if it meant something.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "complete",
              "parameters": [
                {
                  "name": "id",
                  "type": {
                    "text": "number|string"
                  }
                }
              ],
              "description": "Finish a progress toast: dismiss it and fire `arc-complete`.\n\nDistinct from `dismiss()` on purpose — the operation finishing and the user\nclosing the toast are different events, and a consumer waiting on the first\nshould not be woken by the second.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "duration",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "4000",
              "description": "Time in milliseconds before a toast auto-dismisses. Applies as the default for every show() call but can be overridden per-toast via the duration option in the show() payload. Set to 0 to disable auto-dismiss entirely, requiring the user to click the close button.",
              "attribute": "duration"
            },
            {
              "kind": "field",
              "name": "maxVisible",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "3",
              "description": "Maximum toasts on screen at once (attribute: max-visible). Further show() calls queue FIFO and release as visible toasts dismiss. Set to 0 for no cap.",
              "attribute": "max-visible"
            },
            {
              "kind": "field",
              "name": "position",
              "privacy": "public",
              "type": {
                "text": "'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center'"
              },
              "description": "Anchors the toast stack to a fixed edge of the viewport. Top-right is the most conventional position for web applications. Bottom positions work well for media players or editors where the top area is occupied by toolbars.",
              "attribute": "position",
              "default": "'top-right'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "dedupe",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, a show() whose message and variant match a visible or queued toast is coalesced: the existing toast gains a \"(×N)\" counter and a fresh timer instead of a second toast appearing. Set the property to false from JS to disable.",
              "attribute": "dedupe",
              "default": "true"
            },
            {
              "kind": "field",
              "name": "queueLimit",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Maximum queued (not visible) toasts (attribute: queue-limit). Beyond it the oldest queued entries are dropped and arc-queue-overflow fires with the drop count.",
              "attribute": "queueLimit",
              "default": "20"
            }
          ],
          "events": [
            {
              "name": "arc-queue-overflow",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when the queue exceeds queueLimit and the oldest queued entries are dropped. detail: { dropped }."
            },
            {
              "name": "arc-queue-change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired whenever the visible or queued count changes. detail: { visible, queued }."
            },
            {
              "name": "arc-complete",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when a progress toast is completed with complete(id). detail: { id }."
            },
            {
              "name": "arc-cancel",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when the user clicks a progress toast's cancel button. detail: { id }."
            },
            {
              "name": "arc-action",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when the user clicks a toast's action button, before it dismisses. detail: { id }. Absorbed from arc-snackbar, whose action was reachable as an event as well as the `action` callback — a callback cannot be attached declaratively."
            },
            {
              "name": "arc-close",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when a toast notification is dismissed. detail: { id } — the id show() returned."
            }
          ],
          "attributes": [
            {
              "name": "position",
              "type": {
                "text": "'top-right' | 'top-left' | 'top-center' | 'bottom-right' | 'bottom-left' | 'bottom-center'"
              },
              "description": "Anchors the toast stack to a fixed edge of the viewport. Top-right is the most conventional position for web applications. Bottom positions work well for media players or editors where the top area is occupied by toolbars.",
              "fieldName": "position",
              "default": "'top-right'"
            },
            {
              "name": "duration",
              "type": {
                "text": "number"
              },
              "default": "4000",
              "description": "Time in milliseconds before a toast auto-dismisses. Applies as the default for every show() call but can be overridden per-toast via the duration option in the show() payload. Set to 0 to disable auto-dismiss entirely, requiring the user to click the close button.",
              "fieldName": "duration"
            },
            {
              "name": "max-visible",
              "type": {
                "text": "number"
              },
              "default": "3",
              "description": "Maximum toasts on screen at once (attribute: max-visible). Further show() calls queue FIFO and release as visible toasts dismiss. Set to 0 for no cap.",
              "fieldName": "maxVisible"
            },
            {
              "name": "dedupe",
              "type": {
                "text": "boolean"
              },
              "description": "When true, a show() whose message and variant match a visible or queued toast is coalesced: the existing toast gains a \"(×N)\" counter and a fresh timer instead of a second toast appearing. Set the property to false from JS to disable.",
              "fieldName": "dedupe",
              "default": "true"
            },
            {
              "name": "queueLimit",
              "type": {
                "text": "number"
              },
              "description": "Maximum queued (not visible) toasts (attribute: queue-limit). Beyond it the oldest queued entries are dropped and arc-queue-overflow fires with the drop count.",
              "fieldName": "queueLimit",
              "default": "20"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-toast",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcToast",
          "declaration": {
            "name": "ArcToast",
            "module": "src/feedback/toast.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/feedback/tooltip.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Contextual hint that appears on hover or focus, providing supplementary information without\ncluttering the UI. Supports four placement positions and a configurable show delay.",
          "name": "ArcTooltip",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "trigger"
            },
            {
              "name": "popup"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "content",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The plain-text string displayed inside the tooltip popup. Keep this concise — one short phrase that describes the trigger element or provides a supplementary hint. HTML is not supported; for rich content, use the Popover component instead.",
              "attribute": "content"
            },
            {
              "kind": "field",
              "name": "delay",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "200",
              "description": "Time in milliseconds to wait after mouseenter or focusin before the tooltip becomes visible. The default of 200 ms prevents accidental activation during casual pointer movement. Increase to 400-600 ms in dense toolbars; avoid setting to 0 as it creates a jittery experience.",
              "attribute": "delay"
            },
            {
              "kind": "field",
              "name": "position",
              "privacy": "public",
              "type": {
                "text": "'top' | 'bottom' | 'left' | 'right'"
              },
              "description": "Controls which side of the trigger the tooltip appears on. Top is the most common default. Switch to bottom, left, or right when the trigger sits near a viewport edge or when the surrounding layout makes another direction more natural.",
              "attribute": "position",
              "default": "'top'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "content",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The plain-text string displayed inside the tooltip popup. Keep this concise — one short phrase that describes the trigger element or provides a supplementary hint. HTML is not supported; for rich content, use the Popover component instead.",
              "fieldName": "content"
            },
            {
              "name": "position",
              "type": {
                "text": "'top' | 'bottom' | 'left' | 'right'"
              },
              "description": "Controls which side of the trigger the tooltip appears on. Top is the most common default. Switch to bottom, left, or right when the trigger sits near a viewport edge or when the surrounding layout makes another direction more natural.",
              "fieldName": "position",
              "default": "'top'"
            },
            {
              "name": "delay",
              "type": {
                "text": "number"
              },
              "default": "200",
              "description": "Time in milliseconds to wait after mouseenter or focusin before the tooltip becomes visible. The default of 200 ms prevents accidental activation during casual pointer movement. Increase to 400-600 ms in dense toolbars; avoid setting to 0 as it creates a jittery experience.",
              "fieldName": "delay"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-tooltip",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTooltip",
          "declaration": {
            "name": "ArcTooltip",
            "module": "src/feedback/tooltip.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/generated/breakpoints.js",
      "declarations": [
        {
          "kind": "variable",
          "name": "breakpoints",
          "type": {
            "text": "object"
          },
          "default": "{ xs: 480, sm: 640, md: 768, lg: 1024, xl: 1280, '2xl': 1536, navCollapse: 900, navFit: 480, }",
          "description": "Breakpoint widths in pixels, unitless.\n\nFor media queries inside a `css` template, interpolate with a unit:\n  css`@media (max-width: ${breakpoints.navCollapse}px) { … }`\nFor width comparisons in JS, use the number directly:\n  if (window.innerWidth > breakpoints.navCollapse) …"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "breakpoints",
          "declaration": {
            "name": "breakpoints",
            "module": "src/generated/breakpoints.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/generated/host-tokens.js",
      "declarations": [
        {
          "kind": "variable",
          "name": "hostTokens",
          "default": "css` /* Generated from shared/tokens.js by scripts/generate/host-tokens.js. */ /* Do not edit by hand — edit the token tree instead. */ --font-body: var(--font-body-family, 'Host Grotesk'), var(--font-body-fallback, system-ui, sans-serif); --font-label: var(--font-label-family, 'Tomorrow'), var(--font-label-fallback, system-ui, -apple-system, Segoe UI, sans-serif); --font-mono: var(--font-mono-family, 'JetBrains Mono'), var(--font-mono-fallback, ui-monospace, monospace); --font-quote: var(--font-quote-family, Georgia), var(--font-quote-fallback, serif); --font-display: var(--font-display-family, var(--font-body-family, 'Host Grotesk')), var(--font-display-fallback, var(--font-body-fallback, system-ui, sans-serif)); --font-accent: var(--font-label); /* Private mirrors: components read these, consumers override --text-*. */ --_text-xs: var(--text-xs, 12px); --_text-sm: var(--text-sm, 16px); --_text-md: var(--text-md, 17px); --_text-lg: var(--text-lg, clamp(18px, 1.5vw, 20px)); --_text-xl: var(--text-xl, clamp(22px, 2.5vw, 26px)); --_text-2xl: var(--text-2xl, clamp(28px, 3vw, 36px)); --_text-3xl: var(--text-3xl, clamp(36px, 5vw, 52px)); --display-xl-size: var(--_text-3xl); --display-xl-weight: var(--font-display-weight, 500); --display-xl-spacing: -1px; --heading-size: var(--_text-xl); --heading-weight: var(--font-display-weight, 500); --heading-lh: 1.2; --body-size: var(--_text-md); --body-weight: var(--font-body-weight, 500); --body-lh: 1.7; --wordmark-size: clamp(20px, 2.5vw, 28px); --wordmark-weight: var(--font-display-weight, 500); --wordmark-spacing: clamp(8px, 1.2vw, 14px); --glyph-lh: 1; --ui-lh: 1.4; --numeral-size: clamp(24px, 3vw, 36px); --numeral-weight: 200; --label-size: var(--_text-xs); --label-weight: var(--font-label-weight, 600); --label-spacing: 2px; --section-title-size: var(--label-size); --section-title-weight: var(--label-weight); --section-title-spacing: var(--label-spacing); --ui-accent-size: 16px; --ui-accent-weight: var(--font-label-weight, 600); --ui-accent-spacing: 0.5px; --code-size: 14px; --code-lh: 1.8; --label-inline-size: 10px; --label-inline-spacing: 0.75px; /* Spacing */ --space-xs: 4px; --space-sm: 8px; --space-md: 16px; --space-lg: 24px; --space-xl: 40px; --space-2xl: 64px; --space-3xl: 96px; --space-4xl: 128px; /* Radii */ --radius-xs: 2px; --radius-sm: 4px; --radius-md: 10px; --radius-lg: 14px; --radius-xl: 20px; --radius-full: 9999px; /* Transitions and motion */ --transition-fast: var(--duration-fast) var(--ease-standard); --transition-base: var(--duration-base) var(--ease-standard); --transition-slow: var(--duration-slow) var(--ease-standard); --transition-enter: var(--duration-enter) var(--ease-out); --transition-exit: var(--duration-exit) var(--ease-in); --ease-standard: cubic-bezier(0.4, 0, 0.2, 1); --ease-out: cubic-bezier(0.16, 1, 0.3, 1); --ease-in: cubic-bezier(0.7, 0, 0.84, 0); --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1); --duration-fast: 120ms; --duration-base: 200ms; --duration-slow: 400ms; --duration-enter: 500ms; --duration-exit: 300ms; --ease-out-expo: var(--ease-out); --ease-in-out: var(--ease-standard); /* Z-index */ --z-base: 0; --z-dropdown: 1000; --z-tooltip: 1100; --z-overlay: 1200; --z-modal: 1300; --z-toast: 1400; --z-max: 9999; /* Glow and focus */ --glow-xs: 0 0 6px rgba(var(--accent-primary-rgb), 0.3); --glow-sm: 0 0 8px rgba(var(--accent-primary-rgb), 0.3); --glow-md: 0 0 12px rgba(var(--accent-primary-rgb), 0.25); --glow-status: 0 0 12px rgba(var(--_status-rgb), var(--glow-status-alpha, 0.15)); --glow-status-alpha: 0.15; --glow-hover: 0 0 12px rgba(var(--accent-primary-rgb), 0.15); --focus-ring: 0 0 0 1px rgba(var(--accent-primary-rgb),0.25); --focus-glow: 0 0 0 1px rgba(var(--accent-primary-rgb),0.2), 0 0 6px rgba(var(--accent-primary-rgb),0.35), 0 0 16px rgba(var(--accent-primary-rgb),0.2), 0 0 40px rgba(var(--accent-secondary-rgb),0.12); --focus-error: 0 0 0 2px var(--surface-base), 0 0 0 4px var(--color-error), 0 0 16px rgba(var(--color-error-rgb), 0.2); --focus-inset: inset 0 0 0 2px var(--interactive); --focus-thumb: 0 0 8px rgba(var(--interactive-rgb), 0.5), 0 0 20px rgba(var(--interactive-rgb), 0.25); /* Decorative presets */ --gradient-sunset: linear-gradient(135deg, #ff6b6b, #ffa500, #ff4757); --gradient-ocean: linear-gradient(135deg, #00d2ff, #3a7bd5, #6dd5fa); --orb-close: #ff5f57; --orb-minimize: #febc2e; --orb-maximize: #28c840; /* Lobes of light */ --lobe-line: linear-gradient(var(--lobe-axis, 90deg), rgba(var(--lobe-rgb, var(--border-default-rgb)), 0), rgba(var(--lobe-rgb, var(--border-default-rgb)), var(--lobe-alpha, 1)), rgba(var(--lobe-rgb, var(--border-default-rgb)), 0)); --lobe-start: linear-gradient(var(--lobe-axis, 90deg), rgba(var(--lobe-rgb, var(--border-default-rgb)), var(--lobe-alpha, 1)), rgba(var(--lobe-rgb, var(--border-default-rgb)), 0)); --lobe-end: linear-gradient(var(--lobe-axis, 90deg), rgba(var(--lobe-rgb, var(--border-default-rgb)), 0), rgba(var(--lobe-rgb, var(--border-default-rgb)), var(--lobe-alpha, 1))); --lobe-ambient: radial-gradient(var(--lobe-shape, ellipse), rgba(var(--lobe-rgb, var(--border-default-rgb)), var(--lobe-alpha, 0.08)) 0%, rgba(var(--lobe-rgb, var(--border-default-rgb)), 0) var(--lobe-extent, 70%)); /* Semantic aliases */ --interactive: var(--accent-primary); --interactive-rgb: var(--accent-primary-rgb); --interactive-hover: var(--glow-hover); --interactive-active: var(--glow-primary); --interactive-focus: var(--focus-glow); --interactive-focus-ring: var(--focus-ring); --interactive-focus-error: var(--focus-error); --interactive-focus-inset: var(--focus-inset); --interactive-focus-thumb: var(--focus-thumb); --interactive-muted: var(--text-ghost); --surface-base: var(--bg-deep); --surface-primary: var(--bg-surface); --surface-raised: var(--bg-card); --surface-overlay: var(--bg-elevated); --surface-hover: var(--bg-hover); --divider: var(--border-subtle); --on-accent: var(--surface-base); /* Interactive and layout */ --touch-min: 24px; --touch-pad: 4px; --max-width: 1120px; --max-width-sm: 720px; --nav-height: 64px; --nav-row-inset: var(--space-sm); `",
          "description": "The static token layer every component adopts into its shadow root.\n\nThese are what make a component render correctly with no base.css loaded at\nall, which is the documented quick start. Colors are deliberately absent: they\nare themed, and a literal here would pin a component to one theme."
        },
        {
          "kind": "variable",
          "name": "hostTouchTokens",
          "default": "css` @media (pointer: coarse) { :host { --touch-min: 36px; --touch-pad: 8px; } } `",
          "description": "Touch targets grow on coarse pointers. Kept separate because it is a media\nquery rather than a declaration list, so it cannot live inside :host { }."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "hostTokens",
          "declaration": {
            "name": "hostTokens",
            "module": "src/generated/host-tokens.js"
          }
        },
        {
          "kind": "js",
          "name": "hostTouchTokens",
          "declaration": {
            "name": "hostTouchTokens",
            "module": "src/generated/host-tokens.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/hydrate.js",
      "declarations": [],
      "exports": []
    },
    {
      "kind": "javascript-module",
      "path": "src/input/button-group.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Connects multiple buttons into a single visual unit with shared borders and collapsed radii.\nSupports horizontal and vertical orientations.",
          "name": "ArcButtonGroup",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "group"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Button variant cascaded to all children (e.g., \"ghost\", \"outline\").",
              "attribute": "variant",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "orientation",
              "privacy": "public",
              "type": {
                "text": "'horizontal' | 'vertical'"
              },
              "description": "Layout direction. Vertical stacks buttons top-to-bottom.",
              "attribute": "orientation",
              "default": "'horizontal'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Size cascaded to all child buttons.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "orientation",
              "type": {
                "text": "'horizontal' | 'vertical'"
              },
              "description": "Layout direction. Vertical stacks buttons top-to-bottom.",
              "fieldName": "orientation",
              "default": "'horizontal'"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Size cascaded to all child buttons.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "variant",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Button variant cascaded to all children (e.g., \"ghost\", \"outline\").",
              "fieldName": "variant"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-button-group",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcButtonGroup",
          "declaration": {
            "name": "ArcButtonGroup",
            "module": "src/input/button-group.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/button.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Primary call-to-action element with three visual variants that map to action hierarchy. Supports\nprefix and suffix slots for icons. Renders as an anchor when given an href, making it ideal for\nnavigation-driven actions across landing pages, toolbars, and forms.",
          "name": "ArcButton",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "button"
            }
          ],
          "slots": [
            {
              "name": "prefix"
            },
            {
              "description": "Default content. Slotting a single `<a>` as the only child adopts it as the button's control — the recommended form for links that must work before hydration or without JavaScript, since the anchor is real HTML in the initial markup. Put any icons inside that anchor; the `prefix`/`suffix` slots and `::part(button)` do not apply in this form.",
              "name": ""
            },
            {
              "name": "suffix"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "href",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "When provided, the button renders as an <a> element instead of a <button>, making it a navigational link. This is the recommended approach for any action that takes the user to a new page or section.",
              "attribute": "href"
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'primary' | 'secondary' | 'ghost'"
              },
              "description": "Controls the visual weight and emphasis. Primary is a filled button with a neon glow hover suited for the top-level CTA. Secondary uses a bordered outline for supporting actions. Ghost renders with no border or background, ideal for low-priority or tertiary actions.",
              "attribute": "variant",
              "default": "'primary'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Sets the button size. Large (lg) is intended for hero sections and high-impact areas. Medium (md) is the default for general UI. Small (sm) fits compact toolbars, table rows, and inline contexts.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, dims the button and prevents all pointer and keyboard interaction. Applies reduced opacity and removes hover/focus effects. Consider pairing with a tooltip that explains why the action is unavailable.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "loading",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Shows a spinner and disables the button. Use for async operations like form submission or API calls.",
              "attribute": "loading",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "type",
              "privacy": "public",
              "type": {
                "text": "'button' | 'submit' | 'reset'"
              },
              "description": "Sets the HTML button type attribute. Use `submit` inside forms to trigger native form submission, or `reset` to clear form fields. Only applies when no `href` is set (link buttons ignore this).",
              "attribute": "type",
              "default": "'button'"
            }
          ],
          "attributes": [
            {
              "name": "variant",
              "type": {
                "text": "'primary' | 'secondary' | 'ghost'"
              },
              "description": "Controls the visual weight and emphasis. Primary is a filled button with a neon glow hover suited for the top-level CTA. Secondary uses a bordered outline for supporting actions. Ghost renders with no border or background, ideal for low-priority or tertiary actions.",
              "fieldName": "variant",
              "default": "'primary'"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Sets the button size. Large (lg) is intended for hero sections and high-impact areas. Medium (md) is the default for general UI. Small (sm) fits compact toolbars, table rows, and inline contexts.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "href",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "When provided, the button renders as an <a> element instead of a <button>, making it a navigational link. This is the recommended approach for any action that takes the user to a new page or section.",
              "fieldName": "href"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "When true, dims the button and prevents all pointer and keyboard interaction. Applies reduced opacity and removes hover/focus effects. Consider pairing with a tooltip that explains why the action is unavailable.",
              "fieldName": "disabled",
              "default": "false"
            },
            {
              "name": "loading",
              "type": {
                "text": "boolean"
              },
              "description": "Shows a spinner and disables the button. Use for async operations like form submission or API calls.",
              "fieldName": "loading",
              "default": "false"
            },
            {
              "name": "type",
              "type": {
                "text": "'button' | 'submit' | 'reset'"
              },
              "description": "Sets the HTML button type attribute. Use `submit` inside forms to trigger native form submission, or `reset` to clear form fields. Only applies when no `href` is set (link buttons ignore this).",
              "fieldName": "type",
              "default": "'button'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-button",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcButton",
          "declaration": {
            "name": "ArcButton",
            "module": "src/input/button.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/calendar.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Interactive month-view calendar grid for date selection with min/max constraints, keyboard\nnavigation, and today highlighting.",
          "name": "ArcCalendar",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "calendar"
            },
            {
              "name": "header"
            },
            {
              "name": "nav-prev"
            },
            {
              "name": "title"
            },
            {
              "name": "nav-next"
            },
            {
              "name": "grid"
            },
            {
              "name": "dow"
            },
            {
              "name": "day"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "locale",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "BCP 47 tag used for month and weekday names. Defaults to the document's `lang`, then the browser's language.",
              "attribute": "locale"
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The selected date as an ISO string (YYYY-MM-DD). Empty string means no date is selected.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "min",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Minimum selectable date as an ISO string. Days before this date are disabled.",
              "attribute": "min"
            },
            {
              "kind": "field",
              "name": "max",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Maximum selectable date as an ISO string. Days after this date are disabled.",
              "attribute": "max"
            },
            {
              "kind": "field",
              "name": "month",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "The currently displayed month (0-based, 0=January). Defaults to the current month. Clamped to 0-11: an out-of-range month reached `new Date(year, month)`, which silently rolls into another year.",
              "attribute": "month"
            },
            {
              "kind": "field",
              "name": "year",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "The currently displayed year. Defaults to the current year.",
              "attribute": "year"
            },
            {
              "kind": "field",
              "name": "firstDayOfWeek",
              "privacy": "public",
              "type": {
                "text": "0|1|2|3|4|5|6|7"
              },
              "description": "Which day the week starts on, 1 = Monday … 7 = Sunday. 0 (the default) follows the locale's own convention. An unrecognised value falls back to 0 rather than reaching weekdayOffset() and reordering the week arbitrarily.",
              "attribute": "firstDayOfWeek",
              "default": "0",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-month-change",
              "type": {
                "text": "CustomEvent<{ month: number, year: number }>"
              },
              "description": "Fired when the visible month or year changes via the navigation buttons."
            },
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when a date is selected. `event.detail.value` contains the ISO date string (YYYY-MM-DD)."
            }
          ],
          "attributes": [
            {
              "name": "locale",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "BCP 47 tag used for month and weekday names. Defaults to the document's `lang`, then the browser's language.",
              "fieldName": "locale"
            },
            {
              "name": "firstDayOfWeek",
              "type": {
                "text": "0|1|2|3|4|5|6|7"
              },
              "description": "Which day the week starts on, 1 = Monday … 7 = Sunday. 0 (the default) follows the locale's own convention. An unrecognised value falls back to 0 rather than reaching weekdayOffset() and reordering the week arbitrarily.",
              "fieldName": "firstDayOfWeek",
              "default": "0"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The selected date as an ISO string (YYYY-MM-DD). Empty string means no date is selected.",
              "fieldName": "value"
            },
            {
              "name": "min",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Minimum selectable date as an ISO string. Days before this date are disabled.",
              "fieldName": "min"
            },
            {
              "name": "max",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Maximum selectable date as an ISO string. Days after this date are disabled.",
              "fieldName": "max"
            },
            {
              "name": "month",
              "type": {
                "text": "number"
              },
              "description": "The currently displayed month (0-based, 0=January). Defaults to the current month. Clamped to 0-11: an out-of-range month reached `new Date(year, month)`, which silently rolls into another year.",
              "fieldName": "month"
            },
            {
              "name": "year",
              "type": {
                "text": "number"
              },
              "description": "The currently displayed year. Defaults to the current year.",
              "fieldName": "year"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-calendar",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcCalendar",
          "declaration": {
            "name": "ArcCalendar",
            "module": "src/input/calendar.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/checkbox.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Multi-select form control supporting checked, indeterminate, and disabled states. Ideal for\npreferences, bulk-selection patterns, and consent forms where users need to toggle one or more\nindependent options.",
          "name": "ArcCheckbox",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "checkbox"
            },
            {
              "name": "box"
            },
            {
              "name": "label"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Prevents all pointer and keyboard interaction and applies a dimmed visual treatment. Use this for options that are unavailable due to unmet prerequisites. Pair with a tooltip or helper text to explain why the option is locked.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible text rendered beside the checkbox. Clicking the label toggles the checkbox, matching native HTML behavior. Keep labels short, affirmative, and action-oriented for the best readability.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The form field name submitted when the checkbox lives inside a <form>. Required for native form submission and useful for serializing checkbox group values on the server.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The value sent with the form when the checkbox is checked. Defaults to \"on\" if omitted, matching native checkbox behavior. Set explicit values when multiple checkboxes share the same name to distinguish them in the submitted data.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "checked",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the checkbox is in its checked (selected) state. When true, a checkmark icon is rendered inside the box. Bind to this property for two-way state management in frameworks that support it.",
              "attribute": "checked",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "indeterminate",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, displays a horizontal dash instead of a checkmark, representing a mixed or partially-selected state. Commonly used on a parent \"select all\" checkbox when only some children are checked. Clicking an indeterminate checkbox resolves it to fully checked.",
              "attribute": "indeterminate",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the checkbox size.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ checked: boolean }>"
              },
              "description": "Fired when the checked state changes"
            }
          ],
          "attributes": [
            {
              "name": "checked",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the checkbox is in its checked (selected) state. When true, a checkmark icon is rendered inside the box. Bind to this property for two-way state management in frameworks that support it.",
              "fieldName": "checked",
              "default": "false"
            },
            {
              "name": "indeterminate",
              "type": {
                "text": "boolean"
              },
              "description": "When true, displays a horizontal dash instead of a checkmark, representing a mixed or partially-selected state. Commonly used on a parent \"select all\" checkbox when only some children are checked. Clicking an indeterminate checkbox resolves it to fully checked.",
              "fieldName": "indeterminate",
              "default": "false"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Prevents all pointer and keyboard interaction and applies a dimmed visual treatment. Use this for options that are unavailable due to unmet prerequisites. Pair with a tooltip or helper text to explain why the option is locked.",
              "fieldName": "disabled"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the checkbox size.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible text rendered beside the checkbox. Clicking the label toggles the checkbox, matching native HTML behavior. Keep labels short, affirmative, and action-oriented for the best readability.",
              "fieldName": "label"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The form field name submitted when the checkbox lives inside a <form>. Required for native form submission and useful for serializing checkbox group values on the server.",
              "fieldName": "name"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The value sent with the form when the checkbox is checked. Defaults to \"on\" if omitted, matching native checkbox behavior. Set explicit values when multiple checkboxes share the same name to distinguish them in the submitted data.",
              "fieldName": "value"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-checkbox",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcCheckbox",
          "declaration": {
            "name": "ArcCheckbox",
            "module": "src/input/checkbox.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/chip.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A toggleable pill-shaped element for filters, tags, or multi-select options, with a selected\nstate highlighted in accent-primary.",
          "name": "ArcChip",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "chip"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Machine-readable identifier for this chip, included in the `arc-change` event detail.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "selected",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the chip is currently selected. Reflected as an attribute and toggled on click or keypress.",
              "attribute": "selected",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Disables interaction, reducing opacity to 40% and blocking pointer events.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string, selected: boolean }>"
              },
              "description": "Fired when the chip selected state changes"
            }
          ],
          "attributes": [
            {
              "name": "selected",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the chip is currently selected. Reflected as an attribute and toggled on click or keypress.",
              "fieldName": "selected",
              "default": "false"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "Disables interaction, reducing opacity to 40% and blocking pointer events.",
              "fieldName": "disabled",
              "default": "false"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Machine-readable identifier for this chip, included in the `arc-change` event detail.",
              "fieldName": "value"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-chip",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcChip",
          "declaration": {
            "name": "ArcChip",
            "module": "src/input/chip.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/color-picker.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Full-featured color picker with a saturation/lightness area, hue slider, hex input, and optional\npreset swatches.",
          "name": "ArcColorPicker",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "picker"
            },
            {
              "name": "label"
            },
            {
              "name": "area"
            },
            {
              "name": "hue-track"
            },
            {
              "name": "hex-row"
            },
            {
              "name": "preview"
            },
            {
              "name": "hex-input"
            },
            {
              "name": "presets"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'#4d7ef7'",
              "description": "Current color as a 6-digit hex string (e.g. `#4d7ef7`). Reflected as an attribute.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables all interaction, reducing opacity to 40% and blocking pointer events.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed above the picker in uppercase accent font.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "presets",
              "privacy": "public",
              "type": {
                "text": "string[]"
              },
              "description": "Array of hex color strings to display as quick-select swatches below the hex input.",
              "attribute": "presets",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents changing the color via the area, hue slider, hex input, or swatches while the picker stays focusable and the value still submits.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the swatch and trigger.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired continuously as the color changes, including every frame of a drag across the saturation area or hue track. Use for live previews. `event.detail.value` contains the hex string."
            },
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired once the color is committed: the pointer released after a drag, a preset clicked, or a valid hex typed and blurred. Use for anything expensive. `event.detail.value` contains the hex string."
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the swatch and trigger.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "'#4d7ef7'",
              "description": "Current color as a 6-digit hex string (e.g. `#4d7ef7`). Reflected as an attribute.",
              "fieldName": "value"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "fieldName": "name"
            },
            {
              "name": "presets",
              "type": {
                "text": "string[]"
              },
              "description": "Array of hex color strings to display as quick-select swatches below the hex input.",
              "fieldName": "presets",
              "default": "[]"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables all interaction, reducing opacity to 40% and blocking pointer events.",
              "fieldName": "disabled"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed above the picker in uppercase accent font.",
              "fieldName": "label"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-color-picker",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcColorPicker",
          "declaration": {
            "name": "ArcColorPicker",
            "module": "src/input/color-picker.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/combobox.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Searchable dropdown with type-ahead filtering.",
          "name": "ArcCombobox",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "label"
            },
            {
              "name": "wrapper"
            },
            {
              "name": "input"
            },
            {
              "name": "listbox"
            },
            {
              "name": "option"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The currently selected option value. Reflected as an attribute so it can be read from the DOM. Updated automatically when the user selects an option.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "placeholder",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Placeholder text shown in the input when no value is entered.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the input. Also used as the accessible label for the combobox.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the input and prevents interaction. The host element receives reduced opacity and pointer-events: none.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents typing and selecting an option while the input stays focusable; the list can still be opened for viewing and the value still submits.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the field padding.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired on every keystroke in the filter input. `event.detail.value` contains the current query text."
            },
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when an option is selected. `event.detail.value` contains the selected option value."
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the field padding.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The currently selected option value. Reflected as an attribute so it can be read from the DOM. Updated automatically when the user selects an option.",
              "fieldName": "value"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Placeholder text shown in the input when no value is entered.",
              "fieldName": "placeholder"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the input. Also used as the accessible label for the combobox.",
              "fieldName": "label"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "fieldName": "name"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the input and prevents interaction. The host element receives reduced opacity and pointer-events: none.",
              "fieldName": "disabled"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-combobox",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcCombobox",
          "declaration": {
            "name": "ArcCombobox",
            "module": "src/input/combobox.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/copy-button.js",
      "declarations": [
        {
          "kind": "class",
          "description": "One-click copy-to-clipboard button with confirmation.",
          "name": "ArcCopyButton",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "button"
            },
            {
              "name": "icon"
            },
            {
              "name": "label"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The text string to copy to the clipboard when the button is clicked.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Disables the button, preventing clicks and reducing visual opacity.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-copy",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired when text is successfully copied to the clipboard. `event.detail.value` contains the copied string."
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The text string to copy to the clipboard when the button is clicked.",
              "fieldName": "value"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "Disables the button, preventing clicks and reducing visual opacity.",
              "fieldName": "disabled",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-copy-button",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcCopyButton",
          "declaration": {
            "name": "ArcCopyButton",
            "module": "src/input/copy-button.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/date-picker.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Calendar-based date picker with keyboard navigation.",
          "name": "ArcDatePicker",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "wrapper"
            },
            {
              "name": "label"
            },
            {
              "name": "input-wrapper"
            },
            {
              "name": "input"
            },
            {
              "name": "dropdown"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The selected date as an ISO string (YYYY-MM-DD). Set this to pre-select a date. Updated when the user picks a date from the calendar.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "min",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Minimum selectable date as an ISO string. Dates before this are visually dimmed and non-interactive.",
              "attribute": "min"
            },
            {
              "kind": "field",
              "name": "max",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Maximum selectable date as an ISO string. Dates after this are visually dimmed and non-interactive.",
              "attribute": "max"
            },
            {
              "kind": "field",
              "name": "placeholder",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Select date'",
              "description": "Placeholder text displayed in the input when no date is selected.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the date picker, reducing opacity and preventing the calendar from opening.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text rendered above the input in uppercase accent font styling.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "locale",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "BCP 47 tag used for month and weekday names. Defaults to the document's `lang`, then the browser's language.",
              "attribute": "locale"
            },
            {
              "kind": "field",
              "name": "firstDayOfWeek",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Which day the week starts on, 1 = Monday … 7 = Sunday. Defaults to the locale's own convention, so most of the world gets Monday and the US gets Sunday without configuring anything.",
              "attribute": "first-day-of-week"
            },
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the calendar dropdown is visible. Reflected so it can be opened programmatically or styled from CSS. Held at `false` while `disabled`.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the field padding.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired when a date is selected"
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the field padding.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The selected date as an ISO string (YYYY-MM-DD). Set this to pre-select a date. Updated when the user picks a date from the calendar.",
              "fieldName": "value"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "fieldName": "name"
            },
            {
              "name": "min",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Minimum selectable date as an ISO string. Dates before this are visually dimmed and non-interactive.",
              "fieldName": "min"
            },
            {
              "name": "max",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Maximum selectable date as an ISO string. Dates after this are visually dimmed and non-interactive.",
              "fieldName": "max"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "default": "'Select date'",
              "description": "Placeholder text displayed in the input when no date is selected.",
              "fieldName": "placeholder"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the date picker, reducing opacity and preventing the calendar from opening.",
              "fieldName": "disabled"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text rendered above the input in uppercase accent font styling.",
              "fieldName": "label"
            },
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the calendar dropdown is visible. Reflected so it can be opened programmatically or styled from CSS. Held at `false` while `disabled`.",
              "fieldName": "open",
              "default": "false"
            },
            {
              "name": "locale",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "BCP 47 tag used for month and weekday names. Defaults to the document's `lang`, then the browser's language.",
              "fieldName": "locale"
            },
            {
              "name": "first-day-of-week",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Which day the week starts on, 1 = Monday … 7 = Sunday. Defaults to the locale's own convention, so most of the world gets Monday and the US gets Sunday without configuring anything.",
              "fieldName": "firstDayOfWeek"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-date-picker",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcDatePicker",
          "declaration": {
            "name": "ArcDatePicker",
            "module": "src/input/date-picker.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/date-range-picker.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Dual-calendar picker for selecting a start/end date range with presets and full keyboard\nnavigation.",
          "name": "ArcDateRangePicker",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "calendar"
            },
            {
              "name": "panel-title"
            },
            {
              "name": "day"
            },
            {
              "name": "wrapper"
            },
            {
              "name": "label"
            },
            {
              "name": "input-wrapper"
            },
            {
              "name": "input"
            },
            {
              "name": "panel"
            },
            {
              "name": "presets"
            },
            {
              "name": "preset"
            },
            {
              "name": "header"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "false",
              "description": "Runs its own constraint logic — owns the whole validity flag set.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "value",
              "description": "Read-derived ISO 8601 interval (\"start/end\") when both dates are set, otherwise an empty string. This is the value submitted with forms. Assigning \"start/end\" sets both dates.",
              "type": {
                "text": "string"
              }
            },
            {
              "kind": "field",
              "name": "locale",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "BCP 47 tag used for month and weekday names. Defaults to the document's `lang`, then the browser's language.",
              "attribute": "locale"
            },
            {
              "kind": "field",
              "name": "firstDayOfWeek",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Which day the week starts on, 1 = Monday … 7 = Sunday. Defaults to the locale's own convention.",
              "attribute": "first-day-of-week"
            },
            {
              "kind": "field",
              "name": "start",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Range start date as an ISO string (YYYY-MM-DD). Empty when unset. Set both start and end to pre-select a range.",
              "attribute": "start"
            },
            {
              "kind": "field",
              "name": "end",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Range end date as an ISO string (YYYY-MM-DD). Empty when unset or while an end date is pending.",
              "attribute": "end"
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form field name used when the interval value is submitted with a form.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "min",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Minimum selectable date as an ISO string. Earlier days are dimmed and non-interactive.",
              "attribute": "min"
            },
            {
              "kind": "field",
              "name": "max",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Maximum selectable date as an ISO string. Later days are dimmed and non-interactive.",
              "attribute": "max"
            },
            {
              "kind": "field",
              "name": "placeholder",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Select date range'",
              "description": "Placeholder text shown in the input when no range is selected.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the picker, reducing opacity and preventing the popup from opening.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text rendered above the input in uppercase accent font styling.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "months",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Number of month panels shown in the popup. Panels sit side by side and stack vertically when the popup is too narrow.",
              "attribute": "months",
              "default": "2"
            },
            {
              "kind": "field",
              "name": "presets",
              "privacy": "public",
              "type": {
                "text": "Array<{label:string,days:number}>"
              },
              "description": "Quick ranges rendered as a left rail. Each preset selects the last N days ending today and closes the popup. Hidden when empty.",
              "attribute": "presets",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "type": {
                "text": "boolean"
              },
              "description": "Marks the control invalid (valueMissing) until a complete range is selected.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the calendar dropdown is visible. Reflected so it can be opened programmatically or styled from CSS. Held at `false` while `disabled`.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the field padding.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string, start: string, end: string }>"
              },
              "description": "Fired when a complete range is committed (second day clicked or preset applied). `detail.value` is the ISO 8601 interval string, the same shape as the `value` property; `start` and `end` carry the two ends separately."
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the field padding.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "locale",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "BCP 47 tag used for month and weekday names. Defaults to the document's `lang`, then the browser's language.",
              "fieldName": "locale"
            },
            {
              "name": "first-day-of-week",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Which day the week starts on, 1 = Monday … 7 = Sunday. Defaults to the locale's own convention.",
              "fieldName": "firstDayOfWeek"
            },
            {
              "name": "start",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Range start date as an ISO string (YYYY-MM-DD). Empty when unset. Set both start and end to pre-select a range.",
              "fieldName": "start"
            },
            {
              "name": "end",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Range end date as an ISO string (YYYY-MM-DD). Empty when unset or while an end date is pending.",
              "fieldName": "end"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form field name used when the interval value is submitted with a form.",
              "fieldName": "name"
            },
            {
              "name": "min",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Minimum selectable date as an ISO string. Earlier days are dimmed and non-interactive.",
              "fieldName": "min"
            },
            {
              "name": "max",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Maximum selectable date as an ISO string. Later days are dimmed and non-interactive.",
              "fieldName": "max"
            },
            {
              "name": "months",
              "type": {
                "text": "number"
              },
              "description": "Number of month panels shown in the popup. Panels sit side by side and stack vertically when the popup is too narrow.",
              "fieldName": "months",
              "default": "2"
            },
            {
              "name": "presets",
              "type": {
                "text": "Array<{label:string,days:number}>"
              },
              "description": "Quick ranges rendered as a left rail. Each preset selects the last N days ending today and closes the popup. Hidden when empty.",
              "fieldName": "presets",
              "default": "[]"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "default": "'Select date range'",
              "description": "Placeholder text shown in the input when no range is selected.",
              "fieldName": "placeholder"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the picker, reducing opacity and preventing the popup from opening.",
              "fieldName": "disabled"
            },
            {
              "name": "required",
              "fieldName": "required",
              "type": {
                "text": "boolean"
              },
              "description": "Marks the control invalid (valueMissing) until a complete range is selected.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text rendered above the input in uppercase accent font styling.",
              "fieldName": "label"
            },
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the calendar dropdown is visible. Reflected so it can be opened programmatically or styled from CSS. Held at `false` while `disabled`.",
              "fieldName": "open",
              "default": "false"
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-date-range-picker",
          "customElement": true,
          "group": null,
          "status": "beta"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcDateRangePicker",
          "declaration": {
            "name": "ArcDateRangePicker",
            "module": "src/input/date-range-picker.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/fieldset.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Grouped form section with legend, description, error message, and optional card variant. Wraps\nrelated inputs with native fieldset semantics.",
          "name": "ArcFieldset",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "fieldset"
            },
            {
              "name": "legend"
            },
            {
              "name": "description"
            },
            {
              "name": "content"
            },
            {
              "name": "error"
            }
          ],
          "slots": [
            {
              "name": "legend"
            },
            {
              "name": "actions"
            },
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "legend",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text displayed in the `<legend>` element. Also available via the `legend` slot for rich content.",
              "attribute": "legend"
            },
            {
              "kind": "field",
              "name": "description",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Helper text displayed below the legend.",
              "attribute": "description"
            },
            {
              "kind": "field",
              "name": "error",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message displayed below the content with `role=\"alert\"`.",
              "attribute": "error"
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Disables all child controls and dims the fieldset.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'default' | 'card'"
              },
              "description": "Visual style. Card adds a surface background and shadow.",
              "attribute": "variant",
              "default": "'default'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "legend",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text displayed in the `<legend>` element. Also available via the `legend` slot for rich content.",
              "fieldName": "legend"
            },
            {
              "name": "description",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Helper text displayed below the legend.",
              "fieldName": "description"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "Disables all child controls and dims the fieldset.",
              "fieldName": "disabled",
              "default": "false"
            },
            {
              "name": "error",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message displayed below the content with `role=\"alert\"`.",
              "fieldName": "error"
            },
            {
              "name": "variant",
              "type": {
                "text": "'default' | 'card'"
              },
              "description": "Visual style. Card adds a surface background and shadow.",
              "fieldName": "variant",
              "default": "'default'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-fieldset",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcFieldset",
          "declaration": {
            "name": "ArcFieldset",
            "module": "src/input/fieldset.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/file-upload.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Drag-and-drop file upload zone with preview.",
          "name": "ArcFileUpload",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "wrapper"
            },
            {
              "name": "dropzone"
            },
            {
              "name": "error"
            },
            {
              "name": "file-list"
            },
            {
              "name": "file-item"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "accept",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Comma-separated list of accepted file types, passed directly to the native file input accept attribute. Examples: \"image/*\", \".pdf,.docx\", \"audio/mp3\".",
              "attribute": "accept"
            },
            {
              "kind": "field",
              "name": "multiple",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, allows selecting multiple files. Each drop or browse interaction appends to the existing file list rather than replacing it.",
              "attribute": "multiple",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "maxSize",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Maximum file size in bytes. Files exceeding this limit are rejected with an inline error message. Set to 0 for no limit.",
              "attribute": "maxSize",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Disables the dropzone, preventing drag-and-drop and click interactions. Reduces opacity to 0.4.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when files are added or dropped"
            },
            {
              "name": "arc-remove",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when a file is removed from the list"
            }
          ],
          "attributes": [
            {
              "name": "accept",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Comma-separated list of accepted file types, passed directly to the native file input accept attribute. Examples: \"image/*\", \".pdf,.docx\", \"audio/mp3\".",
              "fieldName": "accept"
            },
            {
              "name": "multiple",
              "type": {
                "text": "boolean"
              },
              "description": "When true, allows selecting multiple files. Each drop or browse interaction appends to the existing file list rather than replacing it.",
              "fieldName": "multiple",
              "default": "false"
            },
            {
              "name": "maxSize",
              "type": {
                "text": "number"
              },
              "description": "Maximum file size in bytes. Files exceeding this limit are rejected with an inline error message. Set to 0 for no limit.",
              "fieldName": "maxSize",
              "default": "0"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "Disables the dropzone, preventing drag-and-drop and click interactions. Reduces opacity to 0.4.",
              "fieldName": "disabled",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-file-upload",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcFileUpload",
          "declaration": {
            "name": "ArcFileUpload",
            "module": "src/input/file-upload.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/form.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Form wrapper with built-in validation, error aggregation, and submit handling. Composes Input,\nTextarea, and Button into a cohesive data-entry workflow.",
          "name": "ArcForm",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "form"
            },
            {
              "name": "layout"
            },
            {
              "name": "errors"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "method",
              "name": "submit",
              "description": "Submit the form as though its submit button had been pressed: validation\nruns, and `arc-submit` fires cancelably.\n\nThe path for a submit control the form cannot own — a wizard's \"Next\" in a\nparent toolbar, a keyboard shortcut — since a button outside the form does\nnot trigger it. Routed through the real `<form>` so action-mode submits\nstill navigate.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "reset",
              "description": "Reset every child control to the state it had when it first connected,\nand clear error display.\n\nDelegates to each control's formResetCallback — the same path a native\nform.reset() takes, which never reaches these controls because they live\nin this element's light DOM rather than inside the shadow <form>. The form\nused to blank them instead (`value = ''`, `checked = false`), which is not\nwhat reset means: a control that shipped with a default lost it, and a\nnon-string value (a multi-select's array, a date range's object) was left\nuntouched entirely.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "action",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form action URL for native form submission. When set, the form submits to this URL using the browser's built-in mechanism.",
              "attribute": "action"
            },
            {
              "kind": "field",
              "name": "method",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "HTTP method for native form submission (GET or POST). Only applies when action is set.",
              "attribute": "method"
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the entire form, propagating the disabled state to every child field. Useful for read-only previews or while awaiting permissions.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "novalidate",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, skips built-in constraint validation on submit. Use this when you need to implement a fully custom validation flow while still leveraging Form for data serialisation.",
              "attribute": "novalidate",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "loading",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Indicates an asynchronous submission is in progress. Disables the submit button and shows a loading indicator to prevent duplicate requests.",
              "attribute": "loading",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "errorSummary",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, renders an aggregated list of validation errors above the submit area after a failed submission attempt. Set to false to handle error display manually.",
              "attribute": "errorSummary",
              "default": "true",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-invalid",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when validation fails, with error details"
            },
            {
              "name": "arc-submit",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired on valid form submission with serialized form data"
            },
            {
              "name": "arc-reset",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the form is reset via the .reset() method"
            }
          ],
          "attributes": [
            {
              "name": "action",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form action URL for native form submission. When set, the form submits to this URL using the browser's built-in mechanism.",
              "fieldName": "action"
            },
            {
              "name": "method",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "HTTP method for native form submission (GET or POST). Only applies when action is set.",
              "fieldName": "method"
            },
            {
              "name": "novalidate",
              "type": {
                "text": "boolean"
              },
              "description": "When true, skips built-in constraint validation on submit. Use this when you need to implement a fully custom validation flow while still leveraging Form for data serialisation.",
              "fieldName": "novalidate",
              "default": "false"
            },
            {
              "name": "loading",
              "type": {
                "text": "boolean"
              },
              "description": "Indicates an asynchronous submission is in progress. Disables the submit button and shows a loading indicator to prevent duplicate requests.",
              "fieldName": "loading",
              "default": "false"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the entire form, propagating the disabled state to every child field. Useful for read-only previews or while awaiting permissions.",
              "fieldName": "disabled"
            },
            {
              "name": "errorSummary",
              "type": {
                "text": "boolean"
              },
              "description": "When true, renders an aggregated list of validation errors above the submit area after a failed submission attempt. Set to false to handle error display manually.",
              "fieldName": "errorSummary",
              "default": "true"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-form",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcForm",
          "declaration": {
            "name": "ArcForm",
            "module": "src/input/form.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/hotkey.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Invisible keyboard shortcut listener that supports modifier combos (Ctrl+K) and chord sequences\n(g i). Fires an event when the key pattern is matched.\n\nInvisible keyboard shortcut listener. Supports modifier combos (\"ctrl+k\", \"meta+shift+p\") and\nchord sequences (\"g i\" = press g, then i).",
          "name": "ArcHotkey",
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "keys",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Key pattern to match. Modifier combos use \"+\" (e.g., \"ctrl+k\"). Chords use spaces (e.g., \"g i\").",
              "attribute": "keys"
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Temporarily suspends the shortcut listener.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "global",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, attaches to `window` instead of `document` and skips input/textarea filtering.",
              "attribute": "global",
              "default": "false"
            }
          ],
          "events": [
            {
              "name": "arc-hotkey-trigger",
              "type": {
                "text": "CustomEvent<{ keys: string }>"
              },
              "description": "Fired when the full key pattern is matched. `event.detail.keys` contains the matched pattern string."
            }
          ],
          "attributes": [
            {
              "name": "keys",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Key pattern to match. Modifier combos use \"+\" (e.g., \"ctrl+k\"). Chords use spaces (e.g., \"g i\").",
              "fieldName": "keys"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "Temporarily suspends the shortcut listener.",
              "fieldName": "disabled",
              "default": "false"
            },
            {
              "name": "global",
              "type": {
                "text": "boolean"
              },
              "description": "When true, attaches to `window` instead of `document` and skips input/textarea filtering.",
              "fieldName": "global",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-hotkey",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcHotkey",
          "declaration": {
            "name": "ArcHotkey",
            "module": "src/input/hotkey.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/icon-button.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Compact button that renders an icon with optional text label, supporting ghost, secondary, and\nprimary variants.",
          "name": "ArcIconButton",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "button"
            }
          ],
          "slots": [
            {
              "description": "Default content. Slotting a single `<a>` as the only child adopts it as the button's control — the recommended form for links that must work before hydration or without JavaScript. Put the icon inside that anchor; `::part(button)` does not apply in this form.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Name of the arc-icon to render. When empty, the default slot is used for custom icon content.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "text",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional text label displayed next to the icon. When provided, the button expands from a square to a wider labeled button with uppercase styling.",
              "attribute": "text"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible label for the button. Falls back to `text` if not provided. Required for icon-only usage.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "href",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "When set, renders the button as an anchor tag for navigation links.",
              "attribute": "href"
            },
            {
              "kind": "field",
              "name": "type",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'button'",
              "description": "HTML button type attribute. Only applies when `href` is not set.",
              "attribute": "type"
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'ghost' | 'secondary' | 'primary'"
              },
              "description": "Visual style variant. Ghost is transparent, secondary has a border with glow, primary has a solid accent-primary fill.",
              "attribute": "variant",
              "default": "'ghost'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'xs' | 'sm' | 'md' | 'lg'"
              },
              "description": "Button size controlling dimensions and icon scale. Icon-only sizes are circular: xs=28px, sm=32px, md=36px, lg=44px. The labeled form stays a rounded rectangle.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Disables the button, reducing opacity to 40% and blocking pointer events.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Name of the arc-icon to render. When empty, the default slot is used for custom icon content.",
              "fieldName": "name"
            },
            {
              "name": "text",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional text label displayed next to the icon. When provided, the button expands from a square to a wider labeled button with uppercase styling.",
              "fieldName": "text"
            },
            {
              "name": "variant",
              "type": {
                "text": "'ghost' | 'secondary' | 'primary'"
              },
              "description": "Visual style variant. Ghost is transparent, secondary has a border with glow, primary has a solid accent-primary fill.",
              "fieldName": "variant",
              "default": "'ghost'"
            },
            {
              "name": "size",
              "type": {
                "text": "'xs' | 'sm' | 'md' | 'lg'"
              },
              "description": "Button size controlling dimensions and icon scale. Icon-only sizes are circular: xs=28px, sm=32px, md=36px, lg=44px. The labeled form stays a rounded rectangle.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible label for the button. Falls back to `text` if not provided. Required for icon-only usage.",
              "fieldName": "label"
            },
            {
              "name": "href",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "When set, renders the button as an anchor tag for navigation links.",
              "fieldName": "href"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "Disables the button, reducing opacity to 40% and blocking pointer events.",
              "fieldName": "disabled",
              "default": "false"
            },
            {
              "name": "type",
              "type": {
                "text": "string"
              },
              "default": "'button'",
              "description": "HTML button type attribute. Only applies when `href` is not set.",
              "fieldName": "type"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-icon-button",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcIconButton",
          "declaration": {
            "name": "ArcIconButton",
            "module": "src/input/icon-button.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/image-cropper.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Crop-before-upload control with a draggable, resizable crop rectangle, aspect-ratio locking,\nzoom, and canvas export at natural image resolution.\n\nCrop-before-upload for avatar/media flows. The crop rect lives in stage coordinates; zoom scales\nthe letterboxed image around its center underneath. `getCroppedBlob()`/`getCroppedDataUrl()`\nrequire `src` to be same-origin or CORS-enabled — a tainted canvas throws with a clear message.",
          "name": "ArcImageCropper",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "stage"
            },
            {
              "name": "image"
            },
            {
              "name": "skeleton"
            },
            {
              "name": "error"
            },
            {
              "name": "crop"
            },
            {
              "name": "handle"
            },
            {
              "name": "zoom"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "method",
              "name": "getCrop",
              "description": "Current crop in natural image pixels, or null before the image has loaded.",
              "return": {
                "type": {
                  "text": "{ x: number, y: number, width: number, height: number } | null"
                }
              }
            },
            {
              "kind": "method",
              "name": "getCroppedBlob",
              "parameters": [
                {
                  "name": "type",
                  "default": "'image/png'",
                  "description": "MIME type, `image/png` by default.",
                  "optional": true,
                  "type": {
                    "text": "string"
                  }
                },
                {
                  "name": "quality",
                  "description": "Encoder quality 0–1, for the lossy types.",
                  "optional": true,
                  "type": {
                    "text": "number"
                  }
                }
              ],
              "description": "Export the crop as a Blob at natural resolution.",
              "return": {
                "type": {
                  "text": "Promise<Blob>"
                }
              }
            },
            {
              "kind": "method",
              "name": "getCroppedDataUrl",
              "parameters": [
                {
                  "name": "type",
                  "default": "'image/png'",
                  "description": "MIME type, `image/png` by default.",
                  "optional": true,
                  "type": {
                    "text": "string"
                  }
                },
                {
                  "name": "quality",
                  "description": "Encoder quality 0–1, for the lossy types.",
                  "optional": true,
                  "type": {
                    "text": "number"
                  }
                }
              ],
              "description": "Export the crop as a data URL at natural resolution.",
              "return": {
                "type": {
                  "text": "Promise<string>"
                }
              }
            },
            {
              "kind": "field",
              "name": "src",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Image URL, object URL, or data URL to crop. Must be same-origin or CORS-enabled for canvas export.",
              "attribute": "src",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "height",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "320",
              "description": "Fixed stage height in pixels. The image is letterboxed to fit.",
              "attribute": "height",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "aspect",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Crop aspect ratio as width/height (e.g. `1`, `16/9`). `0` allows free-form cropping.",
              "attribute": "aspect",
              "default": "0",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "zoom",
              "privacy": "public",
              "description": "Image zoom factor, clamped to 1-4 on the property as well as on the slider. Scales the image around its center; also settable via the built-in slider.",
              "type": {
                "text": "number"
              },
              "attribute": "zoom",
              "default": "1",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-crop-change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when the crop changes (drag, resize, keyboard, zoom, stage resize). `event.detail` is `{ x, y, width, height }` in natural image pixels, debounced to animation frames."
            }
          ],
          "attributes": [
            {
              "name": "src",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Image URL, object URL, or data URL to crop. Must be same-origin or CORS-enabled for canvas export.",
              "fieldName": "src"
            },
            {
              "name": "height",
              "type": {
                "text": "number"
              },
              "default": "320",
              "description": "Fixed stage height in pixels. The image is letterboxed to fit.",
              "fieldName": "height"
            },
            {
              "name": "aspect",
              "type": {
                "text": "number"
              },
              "description": "Crop aspect ratio as width/height (e.g. `1`, `16/9`). `0` allows free-form cropping.",
              "fieldName": "aspect",
              "default": "0"
            },
            {
              "name": "zoom",
              "description": "Image zoom factor, clamped to 1-4 on the property as well as on the slider. Scales the image around its center; also settable via the built-in slider.",
              "type": {
                "text": "number"
              },
              "fieldName": "zoom",
              "default": "1"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-image-cropper",
          "customElement": true,
          "group": null,
          "status": "beta"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcImageCropper",
          "declaration": {
            "name": "ArcImageCropper",
            "module": "src/input/image-cropper.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/inline-edit.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Click-to-edit text: renders as plain text until activated, then swaps to a\npre-filled field. Enter or blur commits, Escape cancels. Built for track\nrenames, document titles, and other fields where a permanent input box would\nbe visual noise.\n\nThe display text inherits the surrounding typography (`font: inherit`) and\nthe edit field matches it, so the swap never changes the text's metrics —\nan inline-edit inside a heading edits at heading size, one in a table cell\nedits at cell size. This is why there is no `size` prop: sizing comes from\ncontext, and a fixed scale would fight it.\n\nWhile editing, keystrokes accumulate in an internal draft. `value` — and the\nvalue a form submits — only changes on commit, so Escape can always revert\nand a half-typed rename is never submitted. Committing an unchanged value\nfires no event at all.",
          "name": "ArcInlineEdit",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "description": "The display-state button wrapping the text and pencil affordance.",
              "name": "display"
            },
            {
              "description": "The input or textarea shown while editing.",
              "name": "field"
            },
            {
              "description": "The pencil affordance icon.",
              "name": "icon"
            }
          ],
          "members": [
            {
              "kind": "method",
              "name": "focus",
              "parameters": [
                {
                  "name": "options",
                  "optional": true,
                  "type": {
                    "text": "FocusOptions"
                  }
                }
              ],
              "description": "Move focus to whichever element is currently the control: the field while\nediting, the display row otherwise.\n\nThe host sets no `delegatesFocus` and everything focusable lives in the\nshadow root, so `el.focus()` used to do nothing at all — silently, which\ncost a consumer a \"Rename\" menu item that appeared dead. `edit()` is the\nway *into* editing and stays that way; this is only the obvious call\nlanding where a caller expects it.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "edit",
              "description": "Enter edit mode: focus the field and select its text. No-op when disabled, readonly, or already editing.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "commit",
              "description": "Commit the current draft and leave edit mode. Fires arc-change only if the value changed.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "cancel",
              "description": "Discard the draft, keep the previous value, and leave edit mode. Fires arc-cancel.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The committed text. Updated only when an edit commits (Enter or blur); keystrokes accumulate in an internal draft until then.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the control. The display state announces as \"Edit {label}\" and the edit field is labeled with it. Always provide one.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The `name` attribute sent with form data on submission. The submitted value is the committed `value`, never an in-progress draft.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "placeholder",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Empty'",
              "description": "Text shown in muted italic when `value` is empty, and as the field placeholder while editing. Defaults to \"Empty\".",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Prevents activation and applies a muted treatment. The value is excluded from form submission while disabled.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "multiline",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, editing uses a `<textarea>`: Enter inserts a newline and Cmd/Ctrl+Enter commits. Single-line commits on plain Enter.",
              "attribute": "multiline",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "type": {
                "text": "boolean"
              },
              "description": "Marks the field as required. An empty committed value is invalid — including in display state, which shows a subtle error tint.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "type": {
                "text": "boolean"
              },
              "description": "Renders the display state only: the text remains focusable for reading order, but activation is inert and no pencil affordance appears.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired once on commit when the value actually changed, with the new value in detail.value."
            },
            {
              "name": "arc-cancel",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired when an edit is canceled (Escape or cancel()), with the retained value in detail.value. No arc-change accompanies it."
            },
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired on each keystroke while editing, with the draft text in detail.value."
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The committed text. Updated only when an edit commits (Enter or blur); keystrokes accumulate in an internal draft until then.",
              "fieldName": "value"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the control. The display state announces as \"Edit {label}\" and the edit field is labeled with it. Always provide one.",
              "fieldName": "label"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The `name` attribute sent with form data on submission. The submitted value is the committed `value`, never an in-progress draft.",
              "fieldName": "name"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "default": "'Empty'",
              "description": "Text shown in muted italic when `value` is empty, and as the field placeholder while editing. Defaults to \"Empty\".",
              "fieldName": "placeholder"
            },
            {
              "name": "multiline",
              "type": {
                "text": "boolean"
              },
              "description": "When true, editing uses a `<textarea>`: Enter inserts a newline and Cmd/Ctrl+Enter commits. Single-line commits on plain Enter.",
              "fieldName": "multiline",
              "default": "false"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Prevents activation and applies a muted treatment. The value is excluded from form submission while disabled.",
              "fieldName": "disabled"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-inline-edit",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcInlineEdit",
          "declaration": {
            "name": "ArcInlineEdit",
            "module": "src/input/inline-edit.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/input-group.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Combines an input with prefix and suffix addon slots for labels, icons, or buttons attached to\nthe input border.",
          "name": "ArcInputGroup",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "group"
            },
            {
              "name": "prefix"
            },
            {
              "name": "content"
            },
            {
              "name": "suffix"
            }
          ],
          "slots": [
            {
              "name": "prefix"
            },
            {
              "description": "Default content.",
              "name": ""
            },
            {
              "name": "suffix"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls addon padding and font size.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls addon padding and font size.",
              "fieldName": "size",
              "default": "'md'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-input-group",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcInputGroup",
          "declaration": {
            "name": "ArcInputGroup",
            "module": "src/input/input-group.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/input.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Versatile form control supporting single-line text, email, password, and multiline textarea\nmodes with built-in label, placeholder, and validation states. Pairs with Form for complete\ndata-entry workflows.",
          "name": "ArcInput",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "field"
            },
            {
              "name": "label"
            },
            {
              "name": "wrapper"
            },
            {
              "name": "prefix"
            },
            {
              "name": "suffix"
            },
            {
              "name": "error"
            }
          ],
          "slots": [
            {
              "name": "prefix"
            },
            {
              "name": "suffix"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "false",
              "description": "Runs its own constraint logic — owns the whole validity flag set.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The `name` attribute sent with form data on submission. Also used by the Form component to track field state and validation.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the input. Automatically associated with the field via a generated id, ensuring screen readers announce it correctly.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "placeholder",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Hint text displayed inside the field when it is empty. Use it to show an example value -- never as a substitute for the label.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The current value of the input. Can be set programmatically to pre-fill the field or used for controlled-component patterns. Updated internally on each keystroke.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Prevents user interaction and applies a muted visual treatment. The field value is excluded from form submission when disabled.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "error",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message displayed below the input. When set, the input border turns red and the error text appears.",
              "attribute": "error"
            },
            {
              "kind": "field",
              "name": "rows",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "5",
              "description": "Number of visible text rows when `multiline` is true. Controls the initial height of the textarea. Ignored for single-line inputs.",
              "attribute": "rows"
            },
            {
              "kind": "field",
              "name": "type",
              "privacy": "public",
              "type": {
                "text": "'text' | 'email' | 'tel' | 'url' | 'password'"
              },
              "description": "The HTML input type. Controls browser validation behavior and which virtual keyboard appears on mobile devices. Ignored when `multiline` is true.",
              "attribute": "type",
              "default": "'text'"
            },
            {
              "kind": "field",
              "name": "multiline",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, renders a `<textarea>` instead of an `<input>`, allowing multi-row text entry. The textarea is vertically resizable by default.",
              "attribute": "multiline",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "type": {
                "text": "boolean"
              },
              "description": "Marks the field as required. Displays a required indicator next to the label and triggers native constraint validation on form submission.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents the user from editing the value while keeping the field focusable, and the value is still submitted with the form.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the input size. Options: 'sm', 'md', 'lg'.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            }
          ],
          "events": [
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired on each keystroke with { value } detail"
            },
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired on blur when value has changed"
            }
          ],
          "attributes": [
            {
              "name": "type",
              "type": {
                "text": "'text' | 'email' | 'tel' | 'url' | 'password'"
              },
              "description": "The HTML input type. Controls browser validation behavior and which virtual keyboard appears on mobile devices. Ignored when `multiline` is true.",
              "fieldName": "type",
              "default": "'text'"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The `name` attribute sent with form data on submission. Also used by the Form component to track field state and validation.",
              "fieldName": "name"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the input. Automatically associated with the field via a generated id, ensuring screen readers announce it correctly.",
              "fieldName": "label"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Hint text displayed inside the field when it is empty. Use it to show an example value -- never as a substitute for the label.",
              "fieldName": "placeholder"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The current value of the input. Can be set programmatically to pre-fill the field or used for controlled-component patterns. Updated internally on each keystroke.",
              "fieldName": "value"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Prevents user interaction and applies a muted visual treatment. The field value is excluded from form submission when disabled.",
              "fieldName": "disabled"
            },
            {
              "name": "required",
              "fieldName": "required",
              "type": {
                "text": "boolean"
              },
              "description": "Marks the field as required. Displays a required indicator next to the label and triggers native constraint validation on form submission.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false"
            },
            {
              "name": "error",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message displayed below the input. When set, the input border turns red and the error text appears.",
              "fieldName": "error"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the input size. Options: 'sm', 'md', 'lg'.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "multiline",
              "type": {
                "text": "boolean"
              },
              "description": "When true, renders a `<textarea>` instead of an `<input>`, allowing multi-row text entry. The textarea is vertically resizable by default.",
              "fieldName": "multiline",
              "default": "false"
            },
            {
              "name": "rows",
              "type": {
                "text": "number"
              },
              "default": "5",
              "description": "Number of visible text rows when `multiline` is true. Controls the initial height of the textarea. Ignored for single-line inputs.",
              "fieldName": "rows"
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-input",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcInput",
          "declaration": {
            "name": "ArcInput",
            "module": "src/input/input.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/knob.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Rotary knob input for continuous parameters — the control a slider can't be when the panel\nis a rack of channel strips. A 270-degree arc track fills from min to the current value with\na glowing indicator line, a monospace readout below, and synth-style interaction: vertical\ndrag to turn (Shift for fine adjustment), mouse wheel and arrow keys to step, optional\nmagnetic detents at named values.",
          "name": "ArcKnob",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "knob"
            },
            {
              "name": "label"
            },
            {
              "name": "dial"
            },
            {
              "name": "track"
            },
            {
              "name": "fill"
            },
            {
              "name": "indicator"
            },
            {
              "name": "value"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "SWEEP",
              "type": {
                "text": "number"
              },
              "static": true,
              "default": "270",
              "description": "Degrees of arc the knob sweeps; the remaining 90 stay open at the bottom."
            },
            {
              "kind": "field",
              "name": "DRAG_THROW",
              "type": {
                "text": "number"
              },
              "static": true,
              "default": "150",
              "description": "Pixels of vertical drag that cover the full range."
            },
            {
              "kind": "field",
              "name": "DETENT_WINDOW",
              "type": {
                "text": "number"
              },
              "static": true,
              "default": "0.025",
              "description": "Fraction of the range within which a drag snaps to a detent."
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Current knob value. Reflected as an attribute and updated on user interaction.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables interaction, reducing opacity and blocking pointer events.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed above the knob in the label typography role.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "format",
              "privacy": "public",
              "default": "undefined",
              "type": {
                "text": "Function"
              },
              "description": "`(value) => string` shaping the readout and the accessible value text, for example adding a unit suffix. Defaults to the plain number."
            },
            {
              "kind": "field",
              "name": "min",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Minimum allowed value at the start of the arc sweep.",
              "attribute": "min",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "max",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Maximum allowed value at the end of the arc sweep.",
              "attribute": "max",
              "default": "100"
            },
            {
              "kind": "field",
              "name": "step",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Increment granularity. The value snaps to multiples of this number.",
              "attribute": "step",
              "default": "1"
            },
            {
              "kind": "field",
              "name": "detents",
              "privacy": "public",
              "type": {
                "text": "number[]"
              },
              "description": "Snap values, as an array from script or a comma-separated attribute (for example \"0,50,100\"). While dragging, the value snaps magnetically to a detent within 2.5% of the range, and each detent renders as a tick mark around the dial. Keyboard and wheel stepping ignore detents.",
              "attribute": "detents",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents dragging, wheel, and key changes while the dial stays focusable and the value still submits.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the dial.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent<{ value: number }>"
              },
              "description": "Fired continuously while the knob is turning — every drag movement, wheel notch, or key step. Use for real-time preview such as a filter cutoff or gain applied live."
            },
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: number }>"
              },
              "description": "Fired once when a turn commits: on drag release, and after each discrete wheel or key step. Use for persisting the value or triggering an expensive operation."
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the dial.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "value",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Current knob value. Reflected as an attribute and updated on user interaction.",
              "fieldName": "value"
            },
            {
              "name": "min",
              "type": {
                "text": "number"
              },
              "description": "Minimum allowed value at the start of the arc sweep.",
              "fieldName": "min",
              "default": "0"
            },
            {
              "name": "max",
              "type": {
                "text": "number"
              },
              "description": "Maximum allowed value at the end of the arc sweep.",
              "fieldName": "max",
              "default": "100"
            },
            {
              "name": "step",
              "type": {
                "text": "number"
              },
              "description": "Increment granularity. The value snaps to multiples of this number.",
              "fieldName": "step",
              "default": "1"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "fieldName": "name"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables interaction, reducing opacity and blocking pointer events.",
              "fieldName": "disabled"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed above the knob in the label typography role.",
              "fieldName": "label"
            },
            {
              "name": "detents",
              "type": {
                "text": "number[]"
              },
              "description": "Snap values, as an array from script or a comma-separated attribute (for example \"0,50,100\"). While dragging, the value snaps magnetically to a detent within 2.5% of the range, and each detent renders as a tick mark around the dial. Keyboard and wheel stepping ignore detents.",
              "fieldName": "detents",
              "default": "[]"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-knob",
          "customElement": true,
          "group": "media",
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcKnob",
          "declaration": {
            "name": "ArcKnob",
            "module": "src/input/knob.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/label.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Form label with required indicator, optional description text, and tooltip slot. Pairs with any\ninput component via the `for` attribute.",
          "name": "ArcLabel",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "label"
            },
            {
              "name": "description"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            },
            {
              "name": "tooltip"
            },
            {
              "name": "description"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "for",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "ID of the target input element. Clicking the label focuses the associated control.",
              "attribute": "for",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Shows a red asterisk (*) after the label text.",
              "attribute": "required",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the label font size.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Reduces opacity and blocks pointer events.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "for",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "ID of the target input element. Clicking the label focuses the associated control.",
              "fieldName": "for"
            },
            {
              "name": "required",
              "type": {
                "text": "boolean"
              },
              "description": "Shows a red asterisk (*) after the label text.",
              "fieldName": "required",
              "default": "false"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the label font size.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "Reduces opacity and blocks pointer events.",
              "fieldName": "disabled",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-label",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcLabel",
          "declaration": {
            "name": "ArcLabel",
            "module": "src/input/label.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/masked-input.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Text field that enforces a character mask as you type — dates, card numbers,\nphone numbers, license keys. The mask's literals are typed for the user;\n`value` holds only the raw characters, and the raw value is what forms\nreceive, so the mask stays presentation.",
          "name": "ArcMaskedInput",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "field"
            },
            {
              "name": "label"
            },
            {
              "name": "wrapper"
            },
            {
              "name": "prefix"
            },
            {
              "name": "suffix"
            },
            {
              "name": "hint"
            },
            {
              "name": "error"
            }
          ],
          "slots": [
            {
              "name": "prefix"
            },
            {
              "name": "suffix"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "false",
              "description": "Runs its own constraint logic — owns the whole validity flag set.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "formattedValue",
              "description": "The formatted presentation string — raw characters interleaved with mask\nliterals, e.g. raw 12042026 under a date mask reads 12/04/2026. Read-only:\nit is derived from value and mask, never stored, and never submitted.",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "mask",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The mask pattern. `#` accepts a digit, `A` an uppercase letter (lowercase input is uppercased), `a` any letter, `*` a letter or digit; every other character is a literal typed for the user. Examples: `##/##/####`, `#### #### #### ####`, `AAA-###`.",
              "attribute": "mask"
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The RAW accepted characters only, with no mask literals — `12042026`, never `12/04/2026`. The formatted string is presentation; read it from `formattedValue`. Programmatic values are conformed against the mask, so setting a formatted string keeps only the characters the mask accepts.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "placeholderChar",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'_'",
              "description": "Character rendered in unfilled positions of the in-field hint once typing starts (for example `12/__/____`). Before any input, the native placeholder shows the full mask shape. Defaults to `_`.",
              "attribute": "placeholder-char"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the field. Automatically associated with the field via a generated id, ensuring screen readers announce it correctly.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The `name` attribute sent with form data on submission. The submitted value is the RAW value, without mask literals.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Prevents user interaction and applies a muted visual treatment. The field value is excluded from form submission when disabled.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "autocomplete",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Passed through to the inner input, e.g. `cc-number` on a card field so browser autofill can offer saved cards.",
              "attribute": "autocomplete"
            },
            {
              "kind": "field",
              "name": "error",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message displayed below the input. When set, the input border turns red and the error text appears.",
              "attribute": "error"
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "type": {
                "text": "boolean"
              },
              "description": "Marks the field as required. An empty field fails validation with valueMissing; a partially filled one fails with an \"Incomplete value\" pattern error.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents the user from editing the value while keeping the field focusable, and the value is still submitted with the form.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the input size. Options: 'sm', 'md', 'lg'.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            }
          ],
          "events": [
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent<{ value: string, formatted: string }>"
              },
              "description": "Fired on each accepted edit. `value` is the raw characters; `formatted` is the presentation string. A rejected character fires nothing."
            },
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string, formatted: string }>"
              },
              "description": "Fired on blur or Enter when the value changed, and immediately when the last mask position fills — a complete mask is a committed value, the fixed-length precedent set by OTP Input."
            }
          ],
          "attributes": [
            {
              "name": "mask",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The mask pattern. `#` accepts a digit, `A` an uppercase letter (lowercase input is uppercased), `a` any letter, `*` a letter or digit; every other character is a literal typed for the user. Examples: `##/##/####`, `#### #### #### ####`, `AAA-###`.",
              "fieldName": "mask"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The RAW accepted characters only, with no mask literals — `12042026`, never `12/04/2026`. The formatted string is presentation; read it from `formattedValue`. Programmatic values are conformed against the mask, so setting a formatted string keeps only the characters the mask accepts.",
              "fieldName": "value"
            },
            {
              "name": "placeholder-char",
              "type": {
                "text": "string"
              },
              "default": "'_'",
              "description": "Character rendered in unfilled positions of the in-field hint once typing starts (for example `12/__/____`). Before any input, the native placeholder shows the full mask shape. Defaults to `_`.",
              "fieldName": "placeholderChar"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the field. Automatically associated with the field via a generated id, ensuring screen readers announce it correctly.",
              "fieldName": "label"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The `name` attribute sent with form data on submission. The submitted value is the RAW value, without mask literals.",
              "fieldName": "name"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Prevents user interaction and applies a muted visual treatment. The field value is excluded from form submission when disabled.",
              "fieldName": "disabled"
            },
            {
              "name": "required",
              "fieldName": "required",
              "type": {
                "text": "boolean"
              },
              "description": "Marks the field as required. An empty field fails validation with valueMissing; a partially filled one fails with an \"Incomplete value\" pattern error.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false"
            },
            {
              "name": "autocomplete",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Passed through to the inner input, e.g. `cc-number` on a card field so browser autofill can offer saved cards.",
              "fieldName": "autocomplete"
            },
            {
              "name": "error",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message displayed below the input. When set, the input border turns red and the error text appears.",
              "fieldName": "error"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the input size. Options: 'sm', 'md', 'lg'.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-masked-input",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcMaskedInput",
          "declaration": {
            "name": "ArcMaskedInput",
            "module": "src/input/masked-input.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/multi-select.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Multi-value select with tag chips, inline search filtering, and keyboard navigation.",
          "name": "ArcMultiSelect",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "label"
            },
            {
              "name": "control"
            },
            {
              "name": "tag"
            },
            {
              "name": "input"
            },
            {
              "name": "dropdown"
            },
            {
              "name": "option"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "placeholder",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Hint text shown inside the control when no items are selected and the input is empty.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the control in a small uppercase style.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the control, preventing interaction and reducing opacity to 50%.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string[]"
              },
              "description": "Array of selected option values. Updated when items are toggled and emitted via `arc-change`.",
              "attribute": "value",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents toggling options or removing chips while the control stays focusable; the dropdown can still be opened for viewing and the values still submit.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the control height and padding.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string[] }>"
              },
              "description": "Fired when the selected values change"
            },
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired on every keystroke in the filter input. `event.detail.value` contains the current query text."
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the control height and padding.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "value",
              "type": {
                "text": "string[]"
              },
              "description": "Array of selected option values. Updated when items are toggled and emitted via `arc-change`.",
              "fieldName": "value",
              "default": "[]"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Hint text shown inside the control when no items are selected and the input is empty.",
              "fieldName": "placeholder"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the control in a small uppercase style.",
              "fieldName": "label"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "fieldName": "name"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the control, preventing interaction and reducing opacity to 50%.",
              "fieldName": "disabled"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-multi-select",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcMultiSelect",
          "declaration": {
            "name": "ArcMultiSelect",
            "module": "src/input/multi-select.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/number-input.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A numeric stepper input with decrement and increment buttons flanking a central text field,\nsupporting min/max clamping, step increments, and keyboard shortcuts.",
          "name": "ArcNumberInput",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "wrapper"
            },
            {
              "name": "label"
            },
            {
              "name": "controls"
            },
            {
              "name": "decrement"
            },
            {
              "name": "field"
            },
            {
              "name": "increment"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Current numeric value. Reflected as an attribute and updated on user interaction.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "step",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "1",
              "description": "Increment and decrement step size. Arrow keys use this value, Shift+Arrow uses 10x this value.",
              "attribute": "step"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed above the control in uppercase accent font.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables interaction, reducing opacity to 40% and blocking pointer events.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "min",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Minimum allowed value. The decrement button is disabled when the value reaches this limit.",
              "attribute": "min",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "max",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Maximum allowed value. The increment button is disabled when the value reaches this limit.",
              "attribute": "max",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents value changes from typing, stepper buttons, and arrow keys while keeping the field focusable and its value submitted.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the field padding.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent<{ value: number }>"
              },
              "description": "Fired on every edit, including each keystroke while typing. Use for live previews."
            },
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: number }>"
              },
              "description": "Fired when the value is committed: blur or Enter after typing, or immediately on a stepper click or arrow key, which are edit and commit in one gesture."
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the field padding.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "value",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Current numeric value. Reflected as an attribute and updated on user interaction.",
              "fieldName": "value"
            },
            {
              "name": "min",
              "type": {
                "text": "number"
              },
              "description": "Minimum allowed value. The decrement button is disabled when the value reaches this limit.",
              "fieldName": "min",
              "default": "0"
            },
            {
              "name": "max",
              "type": {
                "text": "number"
              },
              "description": "Maximum allowed value. The increment button is disabled when the value reaches this limit.",
              "fieldName": "max",
              "default": "0"
            },
            {
              "name": "step",
              "type": {
                "text": "number"
              },
              "default": "1",
              "description": "Increment and decrement step size. Arrow keys use this value, Shift+Arrow uses 10x this value.",
              "fieldName": "step"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed above the control in uppercase accent font.",
              "fieldName": "label"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "fieldName": "name"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables interaction, reducing opacity to 40% and blocking pointer events.",
              "fieldName": "disabled"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-number-input",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcNumberInput",
          "declaration": {
            "name": "ArcNumberInput",
            "module": "src/input/number-input.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/password-input.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Password entry field with a built-in visibility toggle and an optional four-segment strength\nmeter. Shares its styling and form behavior with Input, so mixed forms stay visually uniform.\n\nTrue when the password contains a 4+ run of consecutive chars (abcd, 4321). *\\/ function\nhasSequentialRun(pw) { const s = pw.toLowerCase(); let asc = 1; let desc = 1; for (let i = 1; i\n< s.length; i++) { const d = s.charCodeAt(i) - s.charCodeAt(i - 1); asc = d === 1 ? asc + 1 : 1;\ndesc = d === -1 ? desc + 1 : 1; if (asc >= 4 || desc >= 4) return true; } return false; }\nSelf-contained heuristic: 0 = empty, 1–4 = Weak…Strong. *\\/ function scorePassword(pw) { if\n(!pw) return 0; if (COMMON_PASSWORDS.has(pw.toLowerCase())) return 1; let score = 0; if\n(pw.length >= 8) score += 1; if (pw.length >= 12) score += 1; if (pw.length >= 16) score += 1;\nconst classes = (/[a-z]/.test(pw) ? 1 : 0) + (/[A-Z]/.test(pw) ? 1 : 0) + (/\\d/.test(pw) ? 1 :\n0) + (/[^A-Za-z0-9]/.test(pw) ? 1 : 0); if (classes >= 2) score += 1; if (classes >= 4) score +=\n1; if (/(.)\\1\\1/.test(pw)) score -= 1; if (hasSequentialRun(pw)) score -= 1; return Math.min(4,\nMath.max(1, score)); }",
          "name": "ArcPasswordInput",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "strength"
            },
            {
              "name": "label"
            },
            {
              "name": "field"
            },
            {
              "name": "input"
            },
            {
              "name": "toggle"
            },
            {
              "name": "error"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "false",
              "description": "Runs its own constraint logic — owns the whole validity flag set.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The `name` attribute sent with form data on submission. Also used by the Form component to track field state.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the field. Automatically associated with the input via a generated id.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "placeholder",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Hint text displayed when the field is empty. Use it for guidance, never as a substitute for the label.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The current value of the field. Can be set programmatically; updated internally on each keystroke.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Prevents interaction (including the visibility toggle) and applies a muted visual treatment.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "error",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message displayed below the field. When set, the border turns red and the message is announced.",
              "attribute": "error"
            },
            {
              "kind": "field",
              "name": "autocomplete",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'current-password'",
              "description": "Passed through to the inner input. Use `new-password` on registration or change-password forms so password managers offer generation.",
              "attribute": "autocomplete"
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "type": {
                "text": "boolean"
              },
              "description": "Marks the field as required and enables native constraint validation on form submission.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the field size. Options: 'sm', 'md', 'lg'.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "showStrength",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Renders a four-segment strength meter with a Weak / Fair / Good / Strong label under the field, scored by a built-in heuristic (length, character variety, common-pattern penalties).",
              "attribute": "showStrength",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-strength-change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when the strength score changes (only while show-strength is set), with { score } detail (0-4)"
            },
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired on each keystroke with { value } detail"
            },
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired on blur when value has changed, with { value } detail"
            }
          ],
          "attributes": [
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The `name` attribute sent with form data on submission. Also used by the Form component to track field state.",
              "fieldName": "name"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the field. Automatically associated with the input via a generated id.",
              "fieldName": "label"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Hint text displayed when the field is empty. Use it for guidance, never as a substitute for the label.",
              "fieldName": "placeholder"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The current value of the field. Can be set programmatically; updated internally on each keystroke.",
              "fieldName": "value"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Prevents interaction (including the visibility toggle) and applies a muted visual treatment.",
              "fieldName": "disabled"
            },
            {
              "name": "required",
              "fieldName": "required",
              "type": {
                "text": "boolean"
              },
              "description": "Marks the field as required and enables native constraint validation on form submission.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false"
            },
            {
              "name": "error",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message displayed below the field. When set, the border turns red and the message is announced.",
              "fieldName": "error"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the field size. Options: 'sm', 'md', 'lg'.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "autocomplete",
              "type": {
                "text": "string"
              },
              "default": "'current-password'",
              "description": "Passed through to the inner input. Use `new-password` on registration or change-password forms so password managers offer generation.",
              "fieldName": "autocomplete"
            },
            {
              "name": "showStrength",
              "type": {
                "text": "boolean"
              },
              "description": "Renders a four-segment strength meter with a Weak / Fair / Good / Strong label under the field, scored by a built-in heuristic (length, character variety, common-pattern penalties).",
              "fieldName": "showStrength",
              "default": "false"
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-password-input",
          "customElement": true,
          "group": null,
          "status": "beta"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcPasswordInput",
          "declaration": {
            "name": "ArcPasswordInput",
            "module": "src/input/password-input.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/pin-input.js",
      "declarations": [
        {
          "kind": "class",
          "description": "One-character-per-box input for PINs, OTPs, and verification codes with auto-advance, paste\nsupport, and optional masking.",
          "name": "ArcPinInput",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "pin"
            },
            {
              "name": "label"
            },
            {
              "name": "boxes"
            },
            {
              "name": "box"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Current combined value across all boxes. Reflected as an attribute.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables all boxes, reducing opacity to 40% and blocking input.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "separator",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Inserts a visual dash separator every N boxes. Set to 0 to disable separators.",
              "attribute": "separator"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed above the input boxes in uppercase accent font.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "length",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Number of input boxes to render. Determines the expected code length.",
              "attribute": "length",
              "default": "4"
            },
            {
              "kind": "field",
              "name": "type",
              "privacy": "public",
              "type": {
                "text": "'number' | 'alphanumeric' | 'text'"
              },
              "description": "Character validation mode. `number` allows digits only, `alphanumeric` allows letters and digits, `text` allows any character.",
              "attribute": "type",
              "default": "'number'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "mask",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, obscures entered characters with dots for sensitive codes.",
              "attribute": "mask",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents entering, deleting, or pasting characters while the boxes stay focusable and the value still submits.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the digit boxes.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired on every character entry or deletion. `event.detail.value` contains the current partial value."
            },
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when the pin is complete — every box filled. That is the commit for a fixed-length value."
            },
            {
              "name": "arc-complete",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired alongside arc-change when all boxes are filled. The more specific name, kept for consumers that auto-submit."
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the digit boxes.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "length",
              "type": {
                "text": "number"
              },
              "description": "Number of input boxes to render. Determines the expected code length.",
              "fieldName": "length",
              "default": "4"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Current combined value across all boxes. Reflected as an attribute.",
              "fieldName": "value"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "fieldName": "name"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables all boxes, reducing opacity to 40% and blocking input.",
              "fieldName": "disabled"
            },
            {
              "name": "mask",
              "type": {
                "text": "boolean"
              },
              "description": "When true, obscures entered characters with dots for sensitive codes.",
              "fieldName": "mask",
              "default": "false"
            },
            {
              "name": "type",
              "type": {
                "text": "'number' | 'alphanumeric' | 'text'"
              },
              "description": "Character validation mode. `number` allows digits only, `alphanumeric` allows letters and digits, `text` allows any character.",
              "fieldName": "type",
              "default": "'number'"
            },
            {
              "name": "separator",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Inserts a visual dash separator every N boxes. Set to 0 to disable separators.",
              "fieldName": "separator"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed above the input boxes in uppercase accent font.",
              "fieldName": "label"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-pin-input",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcPinInput",
          "declaration": {
            "name": "ArcPinInput",
            "module": "src/input/pin-input.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/radio-group.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Single-select option group with arrow-key navigation and ARIA radiogroup semantics. Ideal for\npricing tiers, settings panels, and any context where exactly one choice must be made from a\nvisible set of options.",
          "name": "ArcRadioGroup",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "group"
            },
            {
              "name": "circle"
            },
            {
              "name": "label"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The currently selected value. Must match one of the child arc-radio value attributes. Setting this property programmatically updates the visual selection and the internal aria-checked state.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The form field name submitted with the selected value. Required for native form integration — without it, the selection will not appear in FormData.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "When true, disables all options in the group. The component becomes non-interactive: arrow-key navigation is suppressed, click events are ignored, and the group is excluded from the Tab order.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "orientation",
              "privacy": "public",
              "type": {
                "text": "'vertical' | 'horizontal'"
              },
              "description": "Controls the layout direction of the radio options. Vertical stacks options top-to-bottom and maps Arrow Up/Down to navigation. Horizontal places options in a row and maps Arrow Left/Right.",
              "attribute": "orientation",
              "default": "'vertical'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the radio button and label size.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired when the selected radio value changes"
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The currently selected value. Must match one of the child arc-radio value attributes. Setting this property programmatically updates the visual selection and the internal aria-checked state.",
              "fieldName": "value"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The form field name submitted with the selected value. Required for native form integration — without it, the selection will not appear in FormData.",
              "fieldName": "name"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "When true, disables all options in the group. The component becomes non-interactive: arrow-key navigation is suppressed, click events are ignored, and the group is excluded from the Tab order.",
              "fieldName": "disabled"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the radio button and label size.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "orientation",
              "type": {
                "text": "'vertical' | 'horizontal'"
              },
              "description": "Controls the layout direction of the radio options. Vertical stacks options top-to-bottom and maps Arrow Up/Down to navigation. Horizontal places options in a row and maps Arrow Left/Right.",
              "fieldName": "orientation",
              "default": "'vertical'"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-radio-group",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcRadioGroup",
          "declaration": {
            "name": "ArcRadioGroup",
            "module": "src/input/radio-group.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/radio.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Individual radio option rendered inside a RadioGroup. Each Radio represents a single selectable\nchoice with its own label and value. Can be independently disabled while the rest of the group\nremains interactive.",
          "name": "ArcRadio",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "label",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The value submitted when this option is selected. Must be unique within the parent RadioGroup.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, dims this individual option and removes it from keyboard navigation. The option cannot be selected by click or arrow keys.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The value submitted when this option is selected. Must be unique within the parent RadioGroup.",
              "fieldName": "value"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "When true, dims this individual option and removes it from keyboard navigation. The option cannot be selected by click or arrow keys.",
              "fieldName": "disabled",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-radio",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcRadio",
          "declaration": {
            "name": "ArcRadio",
            "module": "src/input/radio.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/range-slider.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Dual-thumb range slider for selecting a numeric interval within a defined range, with\naccent-primary fill between the thumbs and live value display.",
          "name": "ArcRangeSlider",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "range-slider"
            },
            {
              "name": "header"
            },
            {
              "name": "label"
            },
            {
              "name": "values"
            },
            {
              "name": "track"
            },
            {
              "name": "rail"
            },
            {
              "name": "fill"
            },
            {
              "name": "thumb-low"
            },
            {
              "name": "thumb-high"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "max",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "100",
              "description": "Maximum allowed value at the right edge of the track.",
              "attribute": "max"
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables interaction, reducing opacity and blocking pointer events.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed above the slider with the range values shown on the right.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "min",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Minimum allowed value at the left edge of the track.",
              "attribute": "min",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "step",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Increment granularity. Values snap to multiples of this number.",
              "attribute": "step",
              "default": "1"
            },
            {
              "kind": "field",
              "name": "low",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Lower bound value of the selected range. Reflected as an attribute.",
              "attribute": "low",
              "default": "0",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "high",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Upper bound value of the selected range. Reflected as an attribute.",
              "attribute": "high",
              "default": "100",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "showValues",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Whether to display the numeric \"low – high\" readout in the header.",
              "attribute": "showValues",
              "default": "true",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the track and thumbs.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent<{ value: [number, number], low: number, high: number }>"
              },
              "description": "Fired continuously as the user drags either thumb. Detail contains the canonical `value` as `[low, high]`, plus `low` and `high` named separately. Use for real-time filtering or preview. Not fired when a key press leaves the range unchanged."
            },
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: [number, number], low: number, high: number }>"
              },
              "description": "Fired once when the user releases a thumb, indicating the final committed range. Detail contains the canonical `value` as `[low, high]`, plus `low` and `high` named separately. Use for persisting to a database or triggering an expensive operation. Not fired when a key press leaves the range unchanged."
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the track and thumbs.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "min",
              "type": {
                "text": "number"
              },
              "description": "Minimum allowed value at the left edge of the track.",
              "fieldName": "min",
              "default": "0"
            },
            {
              "name": "max",
              "type": {
                "text": "number"
              },
              "default": "100",
              "description": "Maximum allowed value at the right edge of the track.",
              "fieldName": "max"
            },
            {
              "name": "step",
              "type": {
                "text": "number"
              },
              "description": "Increment granularity. Values snap to multiples of this number.",
              "fieldName": "step",
              "default": "1"
            },
            {
              "name": "low",
              "type": {
                "text": "number"
              },
              "description": "Lower bound value of the selected range. Reflected as an attribute.",
              "fieldName": "low",
              "default": "0"
            },
            {
              "name": "high",
              "type": {
                "text": "number"
              },
              "description": "Upper bound value of the selected range. Reflected as an attribute.",
              "fieldName": "high",
              "default": "100"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "fieldName": "name"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables interaction, reducing opacity and blocking pointer events.",
              "fieldName": "disabled"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed above the slider with the range values shown on the right.",
              "fieldName": "label"
            },
            {
              "name": "showValues",
              "type": {
                "text": "boolean"
              },
              "description": "Whether to display the numeric \"low – high\" readout in the header.",
              "fieldName": "showValues",
              "default": "true"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-range-slider",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcRangeSlider",
          "declaration": {
            "name": "ArcRangeSlider",
            "module": "src/input/range-slider.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/rating.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A star-based rating input with hover preview, keyboard navigation, filled/unfilled SVG stars,\nand configurable max value.",
          "name": "ArcRating",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "star"
            },
            {
              "name": "rating"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the control. Several ratings on one page are indistinguishable without it. Defaults to \"Rating\".",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables interaction, reducing opacity to 40% and blocking pointer events.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Current rating value, 0 to `max`. **0 means unrated** — it is a legal state of the control, not a rating of zero: it submits nothing, announces as \"No rating\", and is what Home and a left-arrow at the first star return to. Clicking the star that is already selected also clears back to it. Reflected as an attribute and updated on user interaction.",
              "attribute": "value",
              "default": "0",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "max",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Maximum number of stars to render. Determines the upper bound of the rating scale.",
              "attribute": "max",
              "default": "5",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents interaction while maintaining full visual appearance. Useful for displaying existing ratings.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the star glyphs.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: number }>"
              },
              "description": "Fired when the rating value changes"
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the star glyphs.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "value",
              "type": {
                "text": "number"
              },
              "description": "Current rating value, 0 to `max`. **0 means unrated** — it is a legal state of the control, not a rating of zero: it submits nothing, announces as \"No rating\", and is what Home and a left-arrow at the first star return to. Clicking the star that is already selected also clears back to it. Reflected as an attribute and updated on user interaction.",
              "fieldName": "value",
              "default": "0"
            },
            {
              "name": "max",
              "type": {
                "text": "number"
              },
              "description": "Maximum number of stars to render. Determines the upper bound of the rating scale.",
              "fieldName": "max",
              "default": "5"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "fieldName": "name"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the control. Several ratings on one page are indistinguishable without it. Defaults to \"Rating\".",
              "fieldName": "label"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables interaction, reducing opacity to 40% and blocking pointer events.",
              "fieldName": "disabled"
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents interaction while maintaining full visual appearance. Useful for displaying existing ratings.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-rating",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcRating",
          "declaration": {
            "name": "ArcRating",
            "module": "src/input/rating.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/search.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Search input with a magnifying glass icon, clear button, loading spinner, and autocomplete\nsuggestions dropdown.",
          "name": "ArcSearch",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "label"
            },
            {
              "name": "wrapper"
            },
            {
              "name": "icon"
            },
            {
              "name": "input"
            },
            {
              "name": "spinner"
            },
            {
              "name": "clear"
            },
            {
              "name": "suggestions"
            },
            {
              "name": "suggestion"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Current text content of the search input.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "placeholder",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Search...'",
              "description": "Hint text displayed when the input is empty.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible label for the search field. Rendered visually above the input when provided.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Disables the input, reducing opacity and blocking interaction.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "loading",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Shows a spinning indicator in place of the clear button to signal in-progress loading.",
              "attribute": "loading",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the suggestion dropdown is visible. Reflected so it can be opened programmatically or styled from CSS.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired on each keystroke in the search field"
            },
            {
              "name": "arc-clear",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the clear button is clicked"
            },
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired when the value is committed: Enter in the field, or a suggestion selected by click or keyboard"
            },
            {
              "name": "arc-select",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when a suggestion is selected (before the accompanying arc-change)"
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Current text content of the search input.",
              "fieldName": "value"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "default": "'Search...'",
              "description": "Hint text displayed when the input is empty.",
              "fieldName": "placeholder"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible label for the search field. Rendered visually above the input when provided.",
              "fieldName": "label"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "Disables the input, reducing opacity and blocking interaction.",
              "fieldName": "disabled",
              "default": "false"
            },
            {
              "name": "loading",
              "type": {
                "text": "boolean"
              },
              "description": "Shows a spinning indicator in place of the clear button to signal in-progress loading.",
              "fieldName": "loading",
              "default": "false"
            },
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the suggestion dropdown is visible. Reflected so it can be opened programmatically or styled from CSS.",
              "fieldName": "open",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-search",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSearch",
          "declaration": {
            "name": "ArcSearch",
            "module": "src/input/search.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/segmented-control.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A radio-group-style toggle bar that renders slotted arc-option elements as a row of mutually\nexclusive buttons with an active highlight.",
          "name": "ArcSegmentedControl",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "control"
            },
            {
              "name": "option"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The value of the currently selected option. Reflected as an attribute and auto-set to the first selectable option if empty.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The form field name submitted with the selected value. Required for native form integration — without it, the selection will not appear in FormData.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Disables the entire control, reducing opacity to 40% and blocking pointer events.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired when the selected segment changes"
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The value of the currently selected option. Reflected as an attribute and auto-set to the first selectable option if empty.",
              "fieldName": "value"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The form field name submitted with the selected value. Required for native form integration — without it, the selection will not appear in FormData.",
              "fieldName": "name"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "Disables the entire control, reducing opacity to 40% and blocking pointer events.",
              "fieldName": "disabled",
              "default": "false"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-segmented-control",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSegmentedControl",
          "declaration": {
            "name": "ArcSegmentedControl",
            "module": "src/input/segmented-control.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/select.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Dropdown select with searchable options, keyboard navigation, and full ARIA listbox semantics\nfor accessible form inputs.",
          "name": "ArcSelect",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "select"
            },
            {
              "name": "label"
            },
            {
              "name": "trigger"
            },
            {
              "name": "dropdown"
            },
            {
              "name": "error"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The currently selected value. Must match one of the child `arc-option` value attributes. Setting this programmatically updates the displayed label and internal selection state.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "placeholder",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Select...'",
              "description": "Hint text displayed inside the trigger button when no option is selected. Use it to communicate what kind of choice the user should make, such as \"Choose a team member...\" or \"Pick a status\". The placeholder disappears once a value is chosen.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the select trigger. Also serves as the accessible name for assistive technologies. Always provide a label for accessibility compliance.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form field name submitted with the selected value. Required for native form integration via ElementInternals.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "When true, the select trigger becomes non-interactive: it cannot be opened, focused via keyboard, or clicked. The component renders with reduced opacity to visually convey the unavailable state.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "error",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message displayed below the select. When set, the trigger border turns red.",
              "attribute": "error"
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the select trigger size.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the dropdown is visible. Set programmatically to open or close the dropdown. Automatically set to `false` when an option is selected or the user clicks outside. Held at `false` while `disabled`.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when the selected option changes"
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The currently selected value. Must match one of the child `arc-option` value attributes. Setting this programmatically updates the displayed label and internal selection state.",
              "fieldName": "value"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "default": "'Select...'",
              "description": "Hint text displayed inside the trigger button when no option is selected. Use it to communicate what kind of choice the user should make, such as \"Choose a team member...\" or \"Pick a status\". The placeholder disappears once a value is chosen.",
              "fieldName": "placeholder"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the select trigger. Also serves as the accessible name for assistive technologies. Always provide a label for accessibility compliance.",
              "fieldName": "label"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form field name submitted with the selected value. Required for native form integration via ElementInternals.",
              "fieldName": "name"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "When true, the select trigger becomes non-interactive: it cannot be opened, focused via keyboard, or clicked. The component renders with reduced opacity to visually convey the unavailable state.",
              "fieldName": "disabled"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the select trigger size.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "error",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message displayed below the select. When set, the trigger border turns red.",
              "fieldName": "error"
            },
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the dropdown is visible. Set programmatically to open or close the dropdown. Automatically set to `false` when an option is selected or the user clicks outside. Held at `false` while `disabled`.",
              "fieldName": "open",
              "default": "false"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-select",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSelect",
          "declaration": {
            "name": "ArcSelect",
            "module": "src/input/select.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/signature-pad.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Canvas signature capture that participates in forms. A bordered drawing surface with a muted\n\"Sign here\" baseline while empty, a velocity-scaled pen line for a natural stroke, and a ghost\nclear button once ink is down. Each completed stroke serializes the whole canvas to a PNG\ndata-URL and submits it as the field value; required-and-blank reports `valueMissing` like any\nother input.\n\nSigning by hand is inherently a pointer gesture: the pad itself offers no keyboard path to\nproduce a signature (the clear button is keyboard-reachable, the canvas is focusable so its\nsigned/empty state is announced). A consumer collecting signatures must offer keyboard users an\nequivalent — a type-to-sign field, an upload — alongside this control; the pad does not\nsimulate one.",
          "name": "ArcSignaturePad",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "pad"
            },
            {
              "name": "label"
            },
            {
              "name": "canvas"
            },
            {
              "name": "placeholder"
            },
            {
              "name": "clear"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "SPEED_FULL",
              "type": {
                "text": "number"
              },
              "static": true,
              "default": "1.5",
              "description": "Stroke speed (CSS px per ms) at which the pen reaches its thinnest."
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "description": "Restore only what could plausibly be a serialized signature.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "clear",
              "description": "Wipe the canvas, empty the value, and bring the placeholder back.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "toDataURL",
              "parameters": [
                {
                  "name": "type",
                  "default": "'image/png'",
                  "description": "MIME type, `image/png` by default.",
                  "optional": true,
                  "type": {
                    "text": "string"
                  }
                }
              ],
              "description": "The current canvas as a data-URL in the requested format (PNG by\ndefault). Unlike `value`, this reads the canvas directly, so a blank pad\nreturns a blank image rather than an empty string.",
              "return": {
                "type": {
                  "text": "string"
                }
              }
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The signature as a PNG data-URL, empty string while the pad is blank. Updated after every completed stroke. Setting it from script draws the image onto the canvas (client-side only). Not reflected — a data-URL is far too large to live in an attribute.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form field name the data-URL submits under.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed above the pad in the label typography role. Also feeds the canvas's accessible name.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables interaction, reducing opacity and blocking pointer events. The pad leaves the tab order.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "penColor",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Pen color as any CSS color, including a `var()` expression, resolved against the canvas at stroke time. Attribute: `pen-color`. Defaults to the resolved value of `--text-primary`.",
              "attribute": "pen-color"
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents drawing and hides the clear button while the pad stays focusable and the value still submits.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "type": {
                "text": "boolean"
              },
              "description": "When true and the pad is blank, the control is invalid with `valueMissing`.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "penWidth",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Base pen width in CSS pixels. The drawn line scales with stroke velocity — up to 40% thicker on slow, deliberate movement and 40% thinner on fast flicks. Attribute: `pen-width`. Default 2.",
              "attribute": "penWidth",
              "default": "2"
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            }
          ],
          "events": [
            {
              "name": "arc-clear",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the pad is cleared, via the clear button or the clear() method."
            },
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired once per completed stroke with the serialized data-URL. A stroke is the edit unit — nothing fires per point while the pen is down."
            },
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired when the pointer session ends and the value serializes. A stroke is a discrete gesture, so each stroke end fires arc-input then arc-change together."
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The signature as a PNG data-URL, empty string while the pad is blank. Updated after every completed stroke. Setting it from script draws the image onto the canvas (client-side only). Not reflected — a data-URL is far too large to live in an attribute.",
              "fieldName": "value"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form field name the data-URL submits under.",
              "fieldName": "name"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed above the pad in the label typography role. Also feeds the canvas's accessible name.",
              "fieldName": "label"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables interaction, reducing opacity and blocking pointer events. The pad leaves the tab order.",
              "fieldName": "disabled"
            },
            {
              "name": "pen-color",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Pen color as any CSS color, including a `var()` expression, resolved against the canvas at stroke time. Attribute: `pen-color`. Defaults to the resolved value of `--text-primary`.",
              "fieldName": "penColor"
            },
            {
              "name": "penWidth",
              "type": {
                "text": "number"
              },
              "description": "Base pen width in CSS pixels. The drawn line scales with stroke velocity — up to 40% thicker on slow, deliberate movement and 40% thinner on fast flicks. Attribute: `pen-width`. Default 2.",
              "fieldName": "penWidth",
              "default": "2"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-signature-pad",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSignaturePad",
          "declaration": {
            "name": "ArcSignaturePad",
            "module": "src/input/signature-pad.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/slider.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Range input slider with a label, live numeric value display, accent-primary fill track, and\ncustomisable min/max/step.",
          "name": "ArcSlider",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "slider"
            },
            {
              "name": "header"
            },
            {
              "name": "label"
            },
            {
              "name": "value"
            },
            {
              "name": "track"
            },
            {
              "name": "input"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Current slider value. Reflected as an attribute and updated on user interaction.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "min",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Minimum allowed value at the left edge of the track.",
              "attribute": "min"
            },
            {
              "kind": "field",
              "name": "max",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "100",
              "description": "Maximum allowed value at the right edge of the track.",
              "attribute": "max"
            },
            {
              "kind": "field",
              "name": "step",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "1",
              "description": "Increment granularity. The value snaps to multiples of this number.",
              "attribute": "step"
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables interaction, reducing opacity to 40% and blocking pointer events.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed above the slider with the current value shown on the right.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents dragging and arrow-key changes while the thumb stays focusable and the value still submits.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the track and thumb.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent<{ value: number }>"
              },
              "description": "Fired continuously as the user drags the thumb. Use for real-time preview updates like adjusting opacity, volume, or a CSS property live."
            },
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: number }>"
              },
              "description": "Fired once when the user releases the thumb, indicating the final committed value. Use for persisting the value to a database or triggering an expensive operation."
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the track and thumb.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "value",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Current slider value. Reflected as an attribute and updated on user interaction.",
              "fieldName": "value"
            },
            {
              "name": "min",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Minimum allowed value at the left edge of the track.",
              "fieldName": "min"
            },
            {
              "name": "max",
              "type": {
                "text": "number"
              },
              "default": "100",
              "description": "Maximum allowed value at the right edge of the track.",
              "fieldName": "max"
            },
            {
              "name": "step",
              "type": {
                "text": "number"
              },
              "default": "1",
              "description": "Increment granularity. The value snaps to multiples of this number.",
              "fieldName": "step"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "fieldName": "name"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables interaction, reducing opacity to 40% and blocking pointer events.",
              "fieldName": "disabled"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text displayed above the slider with the current value shown on the right.",
              "fieldName": "label"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-slider",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSlider",
          "declaration": {
            "name": "ArcSlider",
            "module": "src/input/slider.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/sortable-list.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Drag-and-drop reorderable list with grip handles, keyboard reordering support, and visual\ninsertion indicators.",
          "name": "ArcSortableList",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "list"
            },
            {
              "name": "item"
            },
            {
              "name": "handle"
            },
            {
              "name": "content"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Disables all interaction, reducing opacity to 40% and blocking pointer events.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when items are reordered, with updated order in detail"
            }
          ],
          "attributes": [
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "Disables all interaction, reducing opacity to 40% and blocking pointer events.",
              "fieldName": "disabled",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-sortable-list",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSortableList",
          "declaration": {
            "name": "ArcSortableList",
            "module": "src/input/sortable-list.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/suggestion.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Autocomplete suggestion item inside a Search component.",
          "name": "ArcSuggestion",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "label",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Suggestion value",
              "attribute": "value",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Suggestion value",
              "fieldName": "value"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-suggestion",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSuggestion",
          "declaration": {
            "name": "ArcSuggestion",
            "module": "src/input/suggestion.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/switch-group.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Groups multiple toggle switches under a shared label with consistent sizing and disabled state.\nSupports vertical and horizontal layouts.",
          "name": "ArcSwitchGroup",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "fieldset"
            },
            {
              "name": "legend"
            },
            {
              "name": "group"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Group heading rendered as a `<legend>` element.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "orientation",
              "privacy": "public",
              "type": {
                "text": "'vertical' | 'horizontal'"
              },
              "description": "Layout direction. Vertical stacks toggles, horizontal arranges them in a row.",
              "attribute": "orientation",
              "default": "'vertical'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Size cascaded to all child arc-toggle elements.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Disables all child toggles and dims the group.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Group heading rendered as a `<legend>` element.",
              "fieldName": "label"
            },
            {
              "name": "orientation",
              "type": {
                "text": "'vertical' | 'horizontal'"
              },
              "description": "Layout direction. Vertical stacks toggles, horizontal arranges them in a row.",
              "fieldName": "orientation",
              "default": "'vertical'"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Size cascaded to all child arc-toggle elements.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "Disables all child toggles and dims the group.",
              "fieldName": "disabled",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-switch-group",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSwitchGroup",
          "declaration": {
            "name": "ArcSwitchGroup",
            "module": "src/input/switch-group.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/tag-input.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Free-text token entry field with optional autocomplete suggestions, delimiter splitting, and\nduplicate rejection.",
          "name": "ArcTagInput",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "label"
            },
            {
              "name": "field"
            },
            {
              "name": "tag"
            },
            {
              "name": "input"
            },
            {
              "name": "dropdown"
            },
            {
              "name": "option"
            },
            {
              "name": "error"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "delimiter",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "','",
              "description": "Character that commits the current text as a tag when typed; pasted text is split on it.",
              "attribute": "delimiter"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the field in a small uppercase style.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "placeholder",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Hint text shown inside the field when no tags exist and the input is empty.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form field name. Each tag is submitted as its own FormData entry under this name.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the control, preventing interaction and reducing opacity to 50%.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "error",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message shown below the field; also applies error styling to the border.",
              "attribute": "error"
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string[]"
              },
              "description": "Array of current tags. Updated on add/remove and emitted via `arc-change`.",
              "attribute": "value",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "suggestions",
              "privacy": "public",
              "type": {
                "text": "string[]"
              },
              "description": "Autocomplete candidates. When non-empty, typing filters them into a dropdown listbox.",
              "attribute": "suggestions",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "maxTags",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Maximum number of tags (0 = unlimited). At the limit, entry is disabled with a \"-- max reached\" hint.",
              "attribute": "maxTags",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "allowCustom",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When false, only values from `suggestions` can be added; free text is rejected.",
              "attribute": "allowCustom",
              "default": "true"
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents adding or removing tags while the field stays focusable and the tags still submit with the form.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the field height and padding.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string[] }>"
              },
              "description": "Fired when a tag is added or removed; detail contains `{ value }`"
            },
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired as the user types; detail contains `{ query }`"
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the field height and padding.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "value",
              "type": {
                "text": "string[]"
              },
              "description": "Array of current tags. Updated on add/remove and emitted via `arc-change`.",
              "fieldName": "value",
              "default": "[]"
            },
            {
              "name": "suggestions",
              "type": {
                "text": "string[]"
              },
              "description": "Autocomplete candidates. When non-empty, typing filters them into a dropdown listbox.",
              "fieldName": "suggestions",
              "default": "[]"
            },
            {
              "name": "delimiter",
              "type": {
                "text": "string"
              },
              "default": "','",
              "description": "Character that commits the current text as a tag when typed; pasted text is split on it.",
              "fieldName": "delimiter"
            },
            {
              "name": "maxTags",
              "type": {
                "text": "number"
              },
              "description": "Maximum number of tags (0 = unlimited). At the limit, entry is disabled with a \"-- max reached\" hint.",
              "fieldName": "maxTags",
              "default": "0"
            },
            {
              "name": "allowCustom",
              "type": {
                "text": "boolean"
              },
              "description": "When false, only values from `suggestions` can be added; free text is rejected.",
              "fieldName": "allowCustom",
              "default": "true"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the field in a small uppercase style.",
              "fieldName": "label"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Hint text shown inside the field when no tags exist and the input is empty.",
              "fieldName": "placeholder"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form field name. Each tag is submitted as its own FormData entry under this name.",
              "fieldName": "name"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the control, preventing interaction and reducing opacity to 50%.",
              "fieldName": "disabled"
            },
            {
              "name": "error",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message shown below the field; also applies error styling to the border.",
              "fieldName": "error"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-tag-input",
          "customElement": true,
          "group": null,
          "status": "beta"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTagInput",
          "declaration": {
            "name": "ArcTagInput",
            "module": "src/input/tag-input.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/textarea.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Multi-line text input with integrated label, placeholder, resize control, and live character\ncount that turns red at the limit.",
          "name": "ArcTextarea",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "wrapper"
            },
            {
              "name": "label"
            },
            {
              "name": "textarea"
            },
            {
              "name": "error"
            },
            {
              "name": "counter"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The current text content of the textarea. Updated on every keystroke and emitted via `arc-input` and `arc-change` events.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form field name submitted with the value. Required for native form integration via ElementInternals.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "placeholder",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Hint text displayed inside the field when it is empty. Use it to show example input -- never as a substitute for the label.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the textarea in uppercase. Automatically linked to the field via `aria-labelledby`, ensuring screen readers announce it correctly.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "rows",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "4",
              "description": "The number of visible text rows that set the initial height of the textarea. Does not limit content length -- the user can scroll or resize beyond this height.",
              "attribute": "rows"
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Prevents user interaction and applies a muted visual treatment at 40% opacity. The field value is excluded from form submission when disabled.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "error",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message string. When non-empty, the textarea border turns red and the message is displayed below the field with `role=\"alert\"` for screen reader announcement.",
              "attribute": "error"
            },
            {
              "kind": "field",
              "name": "maxlength",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Maximum number of characters allowed. When set to a value greater than 0, a live counter appears below the field showing current length vs. limit, turning red when the limit is reached.",
              "attribute": "maxlength",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "resize",
              "privacy": "public",
              "type": {
                "text": "'none' | 'vertical' | 'horizontal' | 'both'"
              },
              "description": "Controls whether and in which direction the user can drag to resize the textarea. Defaults to vertical-only resizing.",
              "attribute": "resize",
              "default": "'vertical'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "type": {
                "text": "boolean"
              },
              "description": "Allows the user to select and copy text but prevents editing. The field has a subtle background change to indicate its read-only state.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the textarea size. Options: 'sm', 'md', 'lg'.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "autoResize",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Automatically grows the textarea height to fit its content. Disables manual resize when enabled.",
              "attribute": "autoResize",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired on each keystroke with { value } detail"
            },
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired on blur when value has changed"
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The current text content of the textarea. Updated on every keystroke and emitted via `arc-input` and `arc-change` events.",
              "fieldName": "value"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form field name submitted with the value. Required for native form integration via ElementInternals.",
              "fieldName": "name"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Hint text displayed inside the field when it is empty. Use it to show example input -- never as a substitute for the label.",
              "fieldName": "placeholder"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the textarea in uppercase. Automatically linked to the field via `aria-labelledby`, ensuring screen readers announce it correctly.",
              "fieldName": "label"
            },
            {
              "name": "rows",
              "type": {
                "text": "number"
              },
              "default": "4",
              "description": "The number of visible text rows that set the initial height of the textarea. Does not limit content length -- the user can scroll or resize beyond this height.",
              "fieldName": "rows"
            },
            {
              "name": "maxlength",
              "type": {
                "text": "number"
              },
              "description": "Maximum number of characters allowed. When set to a value greater than 0, a live counter appears below the field showing current length vs. limit, turning red when the limit is reached.",
              "fieldName": "maxlength",
              "default": "0"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Prevents user interaction and applies a muted visual treatment at 40% opacity. The field value is excluded from form submission when disabled.",
              "fieldName": "disabled"
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "type": {
                "text": "boolean"
              },
              "description": "Allows the user to select and copy text but prevents editing. The field has a subtle background change to indicate its read-only state.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false"
            },
            {
              "name": "resize",
              "type": {
                "text": "'none' | 'vertical' | 'horizontal' | 'both'"
              },
              "description": "Controls whether and in which direction the user can drag to resize the textarea. Defaults to vertical-only resizing.",
              "fieldName": "resize",
              "default": "'vertical'"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the textarea size. Options: 'sm', 'md', 'lg'.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "autoResize",
              "type": {
                "text": "boolean"
              },
              "description": "Automatically grows the textarea height to fit its content. Disables manual resize when enabled.",
              "fieldName": "autoResize",
              "default": "false"
            },
            {
              "name": "error",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message string. When non-empty, the textarea border turns red and the message is displayed below the field with `role=\"alert\"` for screen reader announcement.",
              "fieldName": "error"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-textarea",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTextarea",
          "declaration": {
            "name": "ArcTextarea",
            "module": "src/input/textarea.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/theme-toggle.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Three-state theme toggle cycling through dark, light, and auto modes with animated icon\ntransitions and localStorage persistence.",
          "name": "ArcThemeToggle",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "button"
            },
            {
              "name": "icon"
            },
            {
              "name": "label"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "theme",
              "privacy": "public",
              "type": {
                "text": "'dark' | 'light' | 'auto'"
              },
              "description": "The current theme mode. Synced in both directions: changing it — by click, by key, or by assigning the property — writes the document root's `data-theme` and localStorage, and a change to that attribute from anywhere else is adopted back, so every toggle on the page agrees.",
              "attribute": "theme",
              "default": "'auto'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents cycling and reduces opacity to 40%.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "iconOnly",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Renders the button as a compact square without the theme name label, matching an icon-only arc-icon-button of the same size. Attribute name is `icon-only`.",
              "attribute": "iconOnly",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'xs' | 'sm' | 'md' | 'lg'"
              },
              "description": "Box size when `icon-only`, on the same scale as arc-icon-button: xs=28px, sm=32px, md=36px, lg=44px. Set both controls to the same value when they sit side by side. Ignored by the labeled form, which is sized by its text.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: 'dark' | 'light' | 'auto' }>"
              },
              "description": "Fired when the theme is toggled, with { theme } detail"
            }
          ],
          "attributes": [
            {
              "name": "theme",
              "type": {
                "text": "'dark' | 'light' | 'auto'"
              },
              "description": "The current theme mode. Synced in both directions: changing it — by click, by key, or by assigning the property — writes the document root's `data-theme` and localStorage, and a change to that attribute from anywhere else is adopted back, so every toggle on the page agrees.",
              "fieldName": "theme",
              "default": "'auto'"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents cycling and reduces opacity to 40%.",
              "fieldName": "disabled",
              "default": "false"
            },
            {
              "name": "iconOnly",
              "type": {
                "text": "boolean"
              },
              "description": "Renders the button as a compact square without the theme name label, matching an icon-only arc-icon-button of the same size. Attribute name is `icon-only`.",
              "fieldName": "iconOnly",
              "default": "false"
            },
            {
              "name": "size",
              "type": {
                "text": "'xs' | 'sm' | 'md' | 'lg'"
              },
              "description": "Box size when `icon-only`, on the same scale as arc-icon-button: xs=28px, sm=32px, md=36px, lg=44px. Set both controls to the same value when they sit side by side. Ignored by the labeled form, which is sized by its text.",
              "fieldName": "size",
              "default": "'md'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-theme-toggle",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcThemeToggle",
          "declaration": {
            "name": "ArcThemeToggle",
            "module": "src/input/theme-toggle.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/time-picker.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Scrollable column-based time picker with 12h/24h format support.",
          "name": "ArcTimePicker",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "wrapper"
            },
            {
              "name": "label"
            },
            {
              "name": "input-wrapper"
            },
            {
              "name": "input"
            },
            {
              "name": "dropdown"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The selected time in 24-hour \"HH:MM\" format (e.g. \"14:30\"). Set this to pre-select a time. Updated when the user picks a time.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "min",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Minimum selectable time in \"HH:MM\" 24-hour format. Times before this are visually dimmed and non-interactive.",
              "attribute": "min"
            },
            {
              "kind": "field",
              "name": "max",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Maximum selectable time in \"HH:MM\" 24-hour format. Times after this are visually dimmed and non-interactive.",
              "attribute": "max"
            },
            {
              "kind": "field",
              "name": "placeholder",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Select time'",
              "description": "Placeholder text displayed in the input when no time is selected.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the time picker, reducing opacity and preventing the dropdown from opening.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text rendered above the input in uppercase accent font styling.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "step",
              "privacy": "public",
              "type": {
                "text": "1 | 5 | 15 | 30"
              },
              "description": "Minute step increment. Controls the granularity of minute options shown in the dropdown. Unrecognised values fall back to 1.",
              "attribute": "step",
              "default": "1",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "format",
              "privacy": "public",
              "type": {
                "text": "'12h' | '24h'"
              },
              "description": "Display format: \"12h\" shows hours 1-12 with an AM/PM column, \"24h\" shows hours 0-23 without AM/PM. Unrecognised values fall back to \"12h\".",
              "attribute": "format",
              "default": "'12h'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the time dropdown is visible. Reflected so it can be opened programmatically or styled from CSS. Held at `false` while `disabled`.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the field padding.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired when a time is selected. Detail contains { value: \"HH:MM\" } in 24-hour format."
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the field padding.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The selected time in 24-hour \"HH:MM\" format (e.g. \"14:30\"). Set this to pre-select a time. Updated when the user picks a time.",
              "fieldName": "value"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "fieldName": "name"
            },
            {
              "name": "min",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Minimum selectable time in \"HH:MM\" 24-hour format. Times before this are visually dimmed and non-interactive.",
              "fieldName": "min"
            },
            {
              "name": "max",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Maximum selectable time in \"HH:MM\" 24-hour format. Times after this are visually dimmed and non-interactive.",
              "fieldName": "max"
            },
            {
              "name": "step",
              "type": {
                "text": "1 | 5 | 15 | 30"
              },
              "description": "Minute step increment. Controls the granularity of minute options shown in the dropdown. Unrecognised values fall back to 1.",
              "fieldName": "step",
              "default": "1"
            },
            {
              "name": "format",
              "type": {
                "text": "'12h' | '24h'"
              },
              "description": "Display format: \"12h\" shows hours 1-12 with an AM/PM column, \"24h\" shows hours 0-23 without AM/PM. Unrecognised values fall back to \"12h\".",
              "fieldName": "format",
              "default": "'12h'"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "default": "'Select time'",
              "description": "Placeholder text displayed in the input when no time is selected.",
              "fieldName": "placeholder"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the time picker, reducing opacity and preventing the dropdown from opening.",
              "fieldName": "disabled"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Label text rendered above the input in uppercase accent font styling.",
              "fieldName": "label"
            },
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the time dropdown is visible. Reflected so it can be opened programmatically or styled from CSS. Held at `false` while `disabled`.",
              "fieldName": "open",
              "default": "false"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-time-picker",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTimePicker",
          "declaration": {
            "name": "ArcTimePicker",
            "module": "src/input/time-picker.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/toggle.js",
      "declarations": [
        {
          "kind": "class",
          "description": "On/off switch with smooth animation, glow effect, and ARIA switch role.",
          "name": "ArcToggle",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "toggle"
            },
            {
              "name": "track"
            },
            {
              "name": "thumb"
            },
            {
              "name": "label"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Prevents user interaction. The toggle appears at reduced opacity and ignores pointer and keyboard events.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible text rendered beside the toggle. Clicking the label also toggles the switch, matching native `<label>` behavior.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form field name submitted with the toggle value. When set, the component participates in native `<form>` submission.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "checked",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the toggle is in the on position. When set, the thumb slides to the active side and the track displays the accent glow.",
              "attribute": "checked",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the toggle size.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ checked: boolean }>"
              },
              "description": "Fired when the toggle state changes"
            }
          ],
          "attributes": [
            {
              "name": "checked",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the toggle is in the on position. When set, the thumb slides to the active side and the track displays the accent glow.",
              "fieldName": "checked",
              "default": "false"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Prevents user interaction. The toggle appears at reduced opacity and ignores pointer and keyboard events.",
              "fieldName": "disabled"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the toggle size.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible text rendered beside the toggle. Clicking the label also toggles the switch, matching native `<label>` behavior.",
              "fieldName": "label"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form field name submitted with the toggle value. When set, the component participates in native `<form>` submission.",
              "fieldName": "name"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-toggle",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcToggle",
          "declaration": {
            "name": "ArcToggle",
            "module": "src/input/toggle.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/transfer-list.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Dual-listbox for moving items between an available and a selected pane, ideal for permissions\nand settings UIs.",
          "name": "ArcTransferList",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "pane"
            },
            {
              "name": "pane-header"
            },
            {
              "name": "search"
            },
            {
              "name": "listbox"
            },
            {
              "name": "option"
            },
            {
              "name": "controls"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form field name. When set, the component submits one form entry per selected value.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the whole control, preventing interaction and reducing opacity.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "sourceLabel",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Available'",
              "description": "Heading for the left (available) pane. Attribute: `source-label`.",
              "attribute": "source-label"
            },
            {
              "kind": "field",
              "name": "targetLabel",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Selected'",
              "description": "Heading for the right (selected) pane. Attribute: `target-label`.",
              "attribute": "target-label"
            },
            {
              "kind": "field",
              "name": "options",
              "privacy": "public",
              "type": {
                "text": "Array<{value:string,label:string,disabled?:boolean}>"
              },
              "description": "The full universe of items. Items whose value is in `value` render in the Selected pane; the rest render in Available.",
              "attribute": "options",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string[]"
              },
              "description": "Values currently in the Selected pane, kept in options order. Updated after every move and emitted via `arc-change`.",
              "attribute": "value",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "searchable",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Adds a filter input to each pane that narrows that pane only, case-insensitively. Move-all respects the filter.",
              "attribute": "searchable",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "type": {
                "text": "boolean"
              },
              "description": "Prevents moving items between panes while the lists stay focusable and filterable; the selected values still submit with the form.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the row height and list panels.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string[] }>"
              },
              "description": "Fired after every move with `{ value }` -- the current array of selected values."
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Control size. `md` is the default; `sm` and `lg` scale the row height and list panels.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "options",
              "type": {
                "text": "Array<{value:string,label:string,disabled?:boolean}>"
              },
              "description": "The full universe of items. Items whose value is in `value` render in the Selected pane; the rest render in Available.",
              "fieldName": "options",
              "default": "[]"
            },
            {
              "name": "value",
              "type": {
                "text": "string[]"
              },
              "description": "Values currently in the Selected pane, kept in options order. Updated after every move and emitted via `arc-change`.",
              "fieldName": "value",
              "default": "[]"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form field name. When set, the component submits one form entry per selected value.",
              "fieldName": "name"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "Disables the whole control, preventing interaction and reducing opacity.",
              "fieldName": "disabled"
            },
            {
              "name": "searchable",
              "type": {
                "text": "boolean"
              },
              "description": "Adds a filter input to each pane that narrows that pane only, case-insensitively. Move-all respects the filter.",
              "fieldName": "searchable",
              "default": "false"
            },
            {
              "name": "source-label",
              "type": {
                "text": "string"
              },
              "default": "'Available'",
              "description": "Heading for the left (available) pane. Attribute: `source-label`.",
              "fieldName": "sourceLabel"
            },
            {
              "name": "target-label",
              "type": {
                "text": "string"
              },
              "default": "'Selected'",
              "description": "Heading for the right (selected) pane. Attribute: `target-label`.",
              "fieldName": "targetLabel"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-transfer-list",
          "customElement": true,
          "group": null,
          "status": "beta"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTransferList",
          "declaration": {
            "name": "ArcTransferList",
            "module": "src/input/transfer-list.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/input/tree-select.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Dropdown select whose panel is a hierarchical tree — categories, instrument banks, folder\npickers. Group nodes expand and collapse; only leaf nodes are selectable, which keeps\nsingle-select semantics clean.",
          "name": "ArcTreeSelect",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "tree-select"
            },
            {
              "name": "label"
            },
            {
              "name": "trigger"
            },
            {
              "name": "panel"
            },
            {
              "name": "row"
            },
            {
              "name": "error"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The selected leaf's value. Setting it programmatically updates the trigger's breadcrumb label, and the branches containing it auto-expand the next time the panel opens.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "placeholder",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Select...'",
              "description": "Hint text displayed inside the trigger when no leaf is selected. It disappears once a value is chosen.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the trigger. Also serves as the accessible name. Always provide one for accessibility compliance.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "name",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form field name submitted with the selected leaf value via ElementInternals.",
              "attribute": "name",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "When true, the trigger becomes non-interactive: it cannot be opened, focused, or clicked, and renders with reduced opacity.",
              "attribute": "disabled",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "error",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message displayed below the trigger. When set, the trigger border turns red.",
              "attribute": "error"
            },
            {
              "kind": "field",
              "name": "items",
              "privacy": "public",
              "type": {
                "text": "Array<{value: string, label: string, children?: Array<object>, disabled?: boolean}>"
              },
              "description": "Recursive tree of nodes. A node with a non-empty `children` array is a group header: it expands and collapses but can never be selected. A node without children is a selectable leaf. `disabled` nodes render but cannot be reached by keyboard or selected, and a disabled group hides its children.",
              "attribute": "items",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "expandedValues",
              "privacy": "public",
              "type": {
                "text": "string[]"
              },
              "description": "Values of group nodes to render initially expanded. Attribute: `expanded-values` (JSON array). Branches containing the selected value auto-expand on open regardless of this list.",
              "attribute": "expandedValues",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the trigger size.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the tree panel is visible. Automatically set to false when a leaf is selected, Escape is pressed, or the user clicks outside. Held at `false` while `disabled`.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state).",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead.",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formResetCallback",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ],
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true,
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              },
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when a leaf is selected. `detail.value` is the leaf value, `detail.label` its label, and `detail.path` the array of ancestor group values from root to parent."
            }
          ],
          "attributes": [
            {
              "name": "items",
              "type": {
                "text": "Array<{value: string, label: string, children?: Array<object>, disabled?: boolean}>"
              },
              "description": "Recursive tree of nodes. A node with a non-empty `children` array is a group header: it expands and collapses but can never be selected. A node without children is a selectable leaf. `disabled` nodes render but cannot be reached by keyboard or selected, and a disabled group hides its children.",
              "fieldName": "items",
              "default": "[]"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The selected leaf's value. Setting it programmatically updates the trigger's breadcrumb label, and the branches containing it auto-expand the next time the panel opens.",
              "fieldName": "value"
            },
            {
              "name": "expandedValues",
              "type": {
                "text": "string[]"
              },
              "description": "Values of group nodes to render initially expanded. Attribute: `expanded-values` (JSON array). Branches containing the selected value auto-expand on open regardless of this list.",
              "fieldName": "expandedValues",
              "default": "[]"
            },
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "default": "'Select...'",
              "description": "Hint text displayed inside the trigger when no leaf is selected. It disappears once a value is chosen.",
              "fieldName": "placeholder"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Visible label rendered above the trigger. Also serves as the accessible name. Always provide one for accessibility compliance.",
              "fieldName": "label"
            },
            {
              "name": "name",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Form field name submitted with the selected leaf value via ElementInternals.",
              "fieldName": "name"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "default": "false",
              "description": "When true, the trigger becomes non-interactive: it cannot be opened, focused, or clicked, and renders with reduced opacity.",
              "fieldName": "disabled"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the trigger size.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "error",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Error message displayed below the trigger. When set, the trigger border turns red.",
              "fieldName": "error"
            },
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the tree panel is visible. Automatically set to false when a leaf is selected, Escape is pressed, or the user clicks outside. Held at `false` while `disabled`.",
              "fieldName": "open",
              "default": "false"
            },
            {
              "name": "required",
              "fieldName": "required",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "inheritedFrom": {
                "name": "FormControlMixin",
                "module": "src/shared/form-control-mixin.js"
              },
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            },
            {
              "name": "FormControlMixin",
              "module": "/src/shared/form-control-mixin.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-tree-select",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTreeSelect",
          "declaration": {
            "name": "ArcTreeSelect",
            "module": "src/input/tree-select.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/app-shell.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Full-page layout scaffold that composes a TopBar, Sidebar, and scrollable content area into a\ncohesive application frame. Handles responsive collapse, sidebar toggling, and optional\ntable-of-contents rail out of the box.\n\nA slotted `arc-top-bar` is put out of flow for you — the body already\nreserves `--nav-height` of padding for it — and whatever is slotted into the\nsidebar is stretched to the full height of the rail, `arc-sidebar` or a plain\n`<nav>` alike, so anything drawing an edge draws it the whole way down. The\nrail is 280px wide; set `--sidebar-width` on the shell to change it, which\nmoves the wrapper and the sidebar inside it together.\n\nBy default the shell is a page layout: at least `100vh` tall, with the page\nas the scroll context and a sticky sidebar rail. Set `embedded` to put the\nsame layout inside a box — a card, a dashboard cell, a split pane, a preview\n— where it takes its height from the container you give it and scrolls\ninside itself instead of moving the page.",
          "name": "ArcAppShell",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "shell"
            },
            {
              "name": "body"
            },
            {
              "name": "sidebar"
            },
            {
              "name": "main"
            },
            {
              "name": "content"
            },
            {
              "name": "toc"
            }
          ],
          "slots": [
            {
              "name": "topbar"
            },
            {
              "name": "sidebar"
            },
            {
              "description": "Default content.",
              "name": ""
            },
            {
              "name": "toc"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "breakpoint",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Viewport width in pixels at which the layout switches between mobile and desktop modes.",
              "attribute": "breakpoint"
            },
            {
              "kind": "field",
              "name": "sidebarOpen",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the sidebar is visible on mobile viewports (below 768 px). On desktop the sidebar is always shown regardless of this attribute. Toggle it from a hamburger button in your TopBar to give mobile users access to navigation.",
              "attribute": "sidebarOpen",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "embedded",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Fills the container instead of the viewport. The shell takes the height you give it (`height: 100%` of a bounded parent, or any length), its content area becomes the scroll context rather than the page, and the sidebar rail is stretched by the body rather than sized from the screen — a sticky rail has nothing to stick against once the page is not what scrolls. Use it for a shell inside a card, a dashboard cell, a split pane, or a documentation preview; leave it off for the full-page layout, which is what the component is for.",
              "attribute": "embedded",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-sidebar-toggle",
              "type": {
                "text": "CustomEvent<{ value: boolean }>"
              },
              "description": "Fired when the shell itself opens or closes the mobile sidebar — on a backdrop click, on Escape, on navigation, or when the viewport widens past the breakpoint and the drawer stops existing. Listened to by arc-top-bar so its hamburger stays in step, and by any wrapper binding `sidebarOpen`. Not fired for a toggle the shell merely received, so the two cannot echo each other."
            }
          ],
          "attributes": [
            {
              "name": "sidebarOpen",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether the sidebar is visible on mobile viewports (below 768 px). On desktop the sidebar is always shown regardless of this attribute. Toggle it from a hamburger button in your TopBar to give mobile users access to navigation.",
              "fieldName": "sidebarOpen",
              "default": "false"
            },
            {
              "name": "embedded",
              "type": {
                "text": "boolean"
              },
              "description": "Fills the container instead of the viewport. The shell takes the height you give it (`height: 100%` of a bounded parent, or any length), its content area becomes the scroll context rather than the page, and the sidebar rail is stretched by the body rather than sized from the screen — a sticky rail has nothing to stick against once the page is not what scrolls. Use it for a shell inside a card, a dashboard cell, a split pane, or a documentation preview; leave it off for the full-page layout, which is what the component is for.",
              "fieldName": "embedded",
              "default": "false"
            },
            {
              "name": "breakpoint",
              "type": {
                "text": "number"
              },
              "description": "Viewport width in pixels at which the layout switches between mobile and desktop modes.",
              "fieldName": "breakpoint"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-app-shell",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcAppShell",
          "declaration": {
            "name": "ArcAppShell",
            "module": "src/layout/app-shell.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/aspect-grid.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Uniform aspect-ratio cell grid with configurable columns and ratio.",
          "name": "ArcAspectGrid",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "grid"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "columns",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "3",
              "description": "Number of columns in the grid. Each column is equal width (1fr).",
              "attribute": "columns",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "ratio",
              "privacy": "public",
              "type": {
                "text": "'1/1' | '16/9' | '4/3'"
              },
              "description": "Aspect ratio applied to every cell. 1/1 for squares, 16/9 for widescreen, 4/3 for classic landscape.",
              "attribute": "ratio",
              "default": "'1/1'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "gap",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Spacing between grid cells, mapped to design system spacing tokens (--space-sm, --space-md, --space-lg).",
              "attribute": "gap",
              "default": "'md'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "columns",
              "type": {
                "text": "number"
              },
              "default": "3",
              "description": "Number of columns in the grid. Each column is equal width (1fr).",
              "fieldName": "columns"
            },
            {
              "name": "ratio",
              "type": {
                "text": "'1/1' | '16/9' | '4/3'"
              },
              "description": "Aspect ratio applied to every cell. 1/1 for squares, 16/9 for widescreen, 4/3 for classic landscape.",
              "fieldName": "ratio",
              "default": "'1/1'"
            },
            {
              "name": "gap",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Spacing between grid cells, mapped to design system spacing tokens (--space-sm, --space-md, --space-lg).",
              "fieldName": "gap",
              "default": "'md'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-aspect-grid",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcAspectGrid",
          "declaration": {
            "name": "ArcAspectGrid",
            "module": "src/layout/aspect-grid.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/auth-shell.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Authentication page layout with centered and split variants for sign-in, sign-up,\npassword-reset, and other credential flows. Provides logo, form card, footer, and optional aside\nslots out of the box.",
          "name": "ArcAuthShell",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "shell"
            },
            {
              "name": "form-side"
            },
            {
              "name": "logo"
            },
            {
              "name": "card"
            },
            {
              "name": "footer"
            },
            {
              "name": "aside"
            }
          ],
          "slots": [
            {
              "name": "logo"
            },
            {
              "description": "Default content.",
              "name": ""
            },
            {
              "name": "footer"
            },
            {
              "name": "aside"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'centered' | 'split'"
              },
              "description": "Controls the page layout. Centered places a single card in the middle of the viewport, best for focused credential flows. Split divides the viewport into a form side and an aside panel for marketing content or illustrations. On mobile, split collapses to a single-column centered layout automatically.",
              "attribute": "variant",
              "default": "'centered'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "variant",
              "type": {
                "text": "'centered' | 'split'"
              },
              "description": "Controls the page layout. Centered places a single card in the middle of the viewport, best for focused credential flows. Split divides the viewport into a form side and an aside panel for marketing content or illustrations. On mobile, split collapses to a single-column centered layout automatically.",
              "fieldName": "variant",
              "default": "'centered'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-auth-shell",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcAuthShell",
          "declaration": {
            "name": "ArcAuthShell",
            "module": "src/layout/auth-shell.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/center.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Content centering primitive with max-width, intrinsic centering, and text-center options.",
          "name": "ArcCenter",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "maxWidth",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'60ch'",
              "description": "Maximum width for the centered content block. Accepts any CSS length or custom property. Only applies in default (block) centering mode.",
              "attribute": "max-width",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "intrinsic",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Enables intrinsic centering mode using flexbox, which centers children based on their natural width rather than stretching to max-width.",
              "attribute": "intrinsic",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "text",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Adds text-align: center for centering inline text content within the block.",
              "attribute": "text",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "max-width",
              "type": {
                "text": "string"
              },
              "default": "'60ch'",
              "description": "Maximum width for the centered content block. Accepts any CSS length or custom property. Only applies in default (block) centering mode.",
              "fieldName": "maxWidth"
            },
            {
              "name": "intrinsic",
              "type": {
                "text": "boolean"
              },
              "description": "Enables intrinsic centering mode using flexbox, which centers children based on their natural width rather than stretching to max-width.",
              "fieldName": "intrinsic",
              "default": "false"
            },
            {
              "name": "text",
              "type": {
                "text": "boolean"
              },
              "description": "Adds text-align: center for centering inline text content within the block.",
              "fieldName": "text",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-center",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcCenter",
          "declaration": {
            "name": "ArcCenter",
            "module": "src/layout/center.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/container.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Max-width wrapper for page sections.",
          "name": "ArcContainer",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "container"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "narrow",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Use the narrow max-width (720px vs 1120px)",
              "attribute": "narrow",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg' | 'xl' | 'full'"
              },
              "description": "Controls the maximum width.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "padding",
              "privacy": "public",
              "type": {
                "text": "'none' | 'sm' | 'md' | 'lg'"
              },
              "description": "Controls inline padding.",
              "attribute": "padding",
              "default": "'md'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "narrow",
              "type": {
                "text": "boolean"
              },
              "description": "Use the narrow max-width (720px vs 1120px)",
              "fieldName": "narrow",
              "default": "false"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg' | 'xl' | 'full'"
              },
              "description": "Controls the maximum width.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "padding",
              "type": {
                "text": "'none' | 'sm' | 'md' | 'lg'"
              },
              "description": "Controls inline padding.",
              "fieldName": "padding",
              "default": "'md'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-container",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcContainer",
          "declaration": {
            "name": "ArcContainer",
            "module": "src/layout/container.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/dashboard-grid.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Responsive grid for dashboard metric cards.",
          "name": "ArcDashboardGrid",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "grid"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "gap",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'var(--space-lg)'",
              "description": "Gap between grid cells. Accepts any CSS length value or spacing token. Maps to the --gap CSS custom property.",
              "attribute": "gap"
            },
            {
              "kind": "field",
              "name": "minColumnWidth",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'280px'",
              "description": "Minimum column width in auto-fill mode. Controls the minmax() threshold at which columns wrap to the next row. Maps to the --min-col CSS custom property.",
              "attribute": "min-column-width"
            },
            {
              "kind": "field",
              "name": "columns",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Number of columns when using explicit column mode. When this attribute is set on the element, the grid switches from auto-fill to a fixed repeat(N, 1fr) layout.",
              "attribute": "columns",
              "default": "0"
            }
          ],
          "attributes": [
            {
              "name": "columns",
              "type": {
                "text": "number"
              },
              "description": "Number of columns when using explicit column mode. When this attribute is set on the element, the grid switches from auto-fill to a fixed repeat(N, 1fr) layout.",
              "fieldName": "columns",
              "default": "0"
            },
            {
              "name": "gap",
              "type": {
                "text": "string"
              },
              "default": "'var(--space-lg)'",
              "description": "Gap between grid cells. Accepts any CSS length value or spacing token. Maps to the --gap CSS custom property.",
              "fieldName": "gap"
            },
            {
              "name": "min-column-width",
              "type": {
                "text": "string"
              },
              "default": "'280px'",
              "description": "Minimum column width in auto-fill mode. Controls the minmax() threshold at which columns wrap to the next row. Maps to the --min-col CSS custom property.",
              "fieldName": "minColumnWidth"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-dashboard-grid",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcDashboardGrid",
          "declaration": {
            "name": "ArcDashboardGrid",
            "module": "src/layout/dashboard-grid.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/float-bar.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Viewport-bottom floating toolbar with surface-overlay background, backdrop blur, and spring\neasing. For bulk actions, unsaved-changes prompts.",
          "name": "ArcFloatBar",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "bar"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Controls visibility of the float bar. Set to true when a triggering condition is met (e.g., items selected, form dirty) and false when the condition resolves.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "position",
              "privacy": "public",
              "type": {
                "text": "'bottom' | 'top'"
              },
              "description": "Which edge of the viewport the float bar appears at. Bottom is standard for bulk-action bars; top works for consent banners or global alerts.",
              "attribute": "position",
              "default": "'bottom'",
              "reflects": true
            }
          ],
          "events": [
            {
              "description": "Fired when the float bar becomes visible after the open prop is set to true.",
              "name": "arc-open"
            },
            {
              "description": "Fired when the float bar hides after the open prop is set to false.",
              "name": "arc-close"
            }
          ],
          "attributes": [
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Controls visibility of the float bar. Set to true when a triggering condition is met (e.g., items selected, form dirty) and false when the condition resolves.",
              "fieldName": "open",
              "default": "false"
            },
            {
              "name": "position",
              "type": {
                "text": "'bottom' | 'top'"
              },
              "description": "Which edge of the viewport the float bar appears at. Bottom is standard for bulk-action bars; top works for consent banners or global alerts.",
              "fieldName": "position",
              "default": "'bottom'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-float-bar",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcFloatBar",
          "declaration": {
            "name": "ArcFloatBar",
            "module": "src/layout/float-bar.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/inset.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Padding primitive consuming spacing tokens with optional negative-margin bleed mode.",
          "name": "ArcInset",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "space",
              "privacy": "public",
              "type": {
                "text": "'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'"
              },
              "description": "Padding size mapped to a design system spacing token. Controls all four sides equally.",
              "attribute": "space",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "bleed",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, applies negative margins equal to the space value, allowing children to break out of a parent container's padding for full-bleed layouts.",
              "attribute": "bleed",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "space",
              "type": {
                "text": "'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl'"
              },
              "description": "Padding size mapped to a design system spacing token. Controls all four sides equally.",
              "fieldName": "space",
              "default": "'md'"
            },
            {
              "name": "bleed",
              "type": {
                "text": "boolean"
              },
              "description": "When true, applies negative margins equal to the space value, allowing children to break out of a parent container's padding for full-bleed layouts.",
              "fieldName": "bleed",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-inset",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcInset",
          "declaration": {
            "name": "ArcInset",
            "module": "src/layout/inset.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/masonry.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Pinterest-style vertical-pack grid using CSS columns for efficient masonry layout without\nJavaScript.",
          "name": "ArcMasonry",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "masonry"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "columns",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "3",
              "description": "Number of columns in the masonry grid. The browser distributes children across columns to minimize overall height difference.",
              "attribute": "columns",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "gap",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Spacing between columns and rows, mapped to design system spacing tokens (--space-sm, --space-md, --space-lg).",
              "attribute": "gap",
              "default": "'md'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "columns",
              "type": {
                "text": "number"
              },
              "default": "3",
              "description": "Number of columns in the masonry grid. The browser distributes children across columns to minimize overall height difference.",
              "fieldName": "columns"
            },
            {
              "name": "gap",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Spacing between columns and rows, mapped to design system spacing tokens (--space-sm, --space-md, --space-lg).",
              "fieldName": "gap",
              "default": "'md'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-masonry",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcMasonry",
          "declaration": {
            "name": "ArcMasonry",
            "module": "src/layout/masonry.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/page-header.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Page title area with positional slots for composing breadcrumbs, actions, tabs, or any content\naround a heading and description.",
          "name": "ArcPageHeader",
          "cssParts": [
            {
              "name": "base"
            },
            {
              "name": "above"
            },
            {
              "name": "title-row"
            },
            {
              "name": "heading"
            },
            {
              "name": "aside"
            },
            {
              "name": "description"
            },
            {
              "name": "below"
            },
            {
              "name": "content"
            }
          ],
          "slots": [
            {
              "description": "Content above the title row — breadcrumbs, a back link, a status chip. The space it occupies is reserved only when something is in it.",
              "name": "above"
            },
            {
              "name": "heading"
            },
            {
              "name": "aside"
            },
            {
              "name": "description"
            },
            {
              "name": "below"
            },
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "heading",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The page title rendered as an <h1>. This is the primary text landmark and should clearly describe the current page or view (e.g. \"Team Settings\", \"Order #4021\"). Keep it concise — two to five words is ideal.",
              "attribute": "heading"
            },
            {
              "kind": "field",
              "name": "description",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional supporting text displayed below the title row. Use it to provide a one-line summary of what the page contains or what action the user should take. When empty, the description paragraph is not rendered.",
              "attribute": "description"
            },
            {
              "kind": "field",
              "name": "border",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When set, renders a subtle bottom border below the header to visually separate it from page content.",
              "attribute": "border",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "heading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The page title rendered as an <h1>. This is the primary text landmark and should clearly describe the current page or view (e.g. \"Team Settings\", \"Order #4021\"). Keep it concise — two to five words is ideal.",
              "fieldName": "heading"
            },
            {
              "name": "description",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional supporting text displayed below the title row. Use it to provide a one-line summary of what the page contains or what action the user should take. When empty, the description paragraph is not rendered.",
              "fieldName": "description"
            },
            {
              "name": "border",
              "type": {
                "text": "boolean"
              },
              "description": "When set, renders a subtle bottom border below the header to visually separate it from page content.",
              "fieldName": "border",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-page-header",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcPageHeader",
          "declaration": {
            "name": "ArcPageHeader",
            "module": "src/layout/page-header.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/page-layout.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Page structure primitive that arranges content into sidebar-left, sidebar-right, centered, or\nwide layouts using CSS Grid. Handles responsive collapse, configurable gap and max-width, and\nexposes named slots for sidebar, main, and aside regions.",
          "name": "ArcPageLayout",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "layout"
            },
            {
              "name": "sidebar"
            },
            {
              "name": "main"
            },
            {
              "name": "aside"
            }
          ],
          "slots": [
            {
              "name": "sidebar"
            },
            {
              "description": "Default content.",
              "name": ""
            },
            {
              "name": "aside"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "maxWidth",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'1120px'",
              "description": "Maximum width of the content area when using the centered layout. Accepts any valid CSS length value. Has no effect on sidebar-left, sidebar-right, or wide layouts. Maps to the --max-width CSS custom property.",
              "attribute": "max-width"
            },
            {
              "kind": "field",
              "name": "gap",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'var(--space-xl)'",
              "description": "Gap between the sidebar/aside and main content regions. Accepts any valid CSS length or spacing token. Maps to the --gap CSS custom property and applies to the CSS Grid gap in sidebar layouts.",
              "attribute": "gap"
            },
            {
              "kind": "field",
              "name": "layout",
              "privacy": "public",
              "type": {
                "text": "'sidebar-left' | 'sidebar-right' | 'centered' | 'wide'"
              },
              "description": "Controls the column structure of the page. sidebar-left creates a 240px fixed column on the left for navigation. sidebar-right creates a 300px fixed column on the right for contextual content. centered constrains the main area to max-width with auto margins. wide allows content to stretch the full available width.",
              "attribute": "layout",
              "default": "'centered'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "layout",
              "type": {
                "text": "'sidebar-left' | 'sidebar-right' | 'centered' | 'wide'"
              },
              "description": "Controls the column structure of the page. sidebar-left creates a 240px fixed column on the left for navigation. sidebar-right creates a 300px fixed column on the right for contextual content. centered constrains the main area to max-width with auto margins. wide allows content to stretch the full available width.",
              "fieldName": "layout",
              "default": "'centered'"
            },
            {
              "name": "max-width",
              "type": {
                "text": "string"
              },
              "default": "'1120px'",
              "description": "Maximum width of the content area when using the centered layout. Accepts any valid CSS length value. Has no effect on sidebar-left, sidebar-right, or wide layouts. Maps to the --max-width CSS custom property.",
              "fieldName": "maxWidth"
            },
            {
              "name": "gap",
              "type": {
                "text": "string"
              },
              "default": "'var(--space-xl)'",
              "description": "Gap between the sidebar/aside and main content regions. Accepts any valid CSS length or spacing token. Maps to the --gap CSS custom property and applies to the CSS Grid gap in sidebar layouts.",
              "fieldName": "gap"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-page-layout",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcPageLayout",
          "declaration": {
            "name": "ArcPageLayout",
            "module": "src/layout/page-layout.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/resizable.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Resizable panel with drag handle.",
          "name": "ArcResizable",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "container"
            },
            {
              "name": "handle"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "300",
              "description": "Current size of the panel in pixels. Updated in real time during drag. Maps to the --panel-size CSS custom property.",
              "attribute": "size"
            },
            {
              "kind": "field",
              "name": "direction",
              "privacy": "public",
              "type": {
                "text": "'horizontal' | 'vertical'"
              },
              "description": "Controls which edge the drag handle appears on. Horizontal places the handle on the right edge and resizes width; vertical places it on the bottom edge and resizes height.",
              "attribute": "direction",
              "default": "'horizontal'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "minSize",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Minimum allowed size in pixels. The panel cannot be dragged smaller than this value.",
              "attribute": "minSize",
              "default": "100"
            },
            {
              "kind": "field",
              "name": "maxSize",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Maximum allowed size in pixels. The panel cannot be dragged larger than this value. Defaults to no limit.",
              "attribute": "maxSize",
              "default": "0"
            }
          ],
          "events": [
            {
              "name": "arc-resize",
              "type": {
                "text": "CustomEvent<{ size: number }>"
              },
              "description": "Fired during and after panel resize with { size } detail"
            }
          ],
          "attributes": [
            {
              "name": "direction",
              "type": {
                "text": "'horizontal' | 'vertical'"
              },
              "description": "Controls which edge the drag handle appears on. Horizontal places the handle on the right edge and resizes width; vertical places it on the bottom edge and resizes height.",
              "fieldName": "direction",
              "default": "'horizontal'"
            },
            {
              "name": "minSize",
              "type": {
                "text": "number"
              },
              "description": "Minimum allowed size in pixels. The panel cannot be dragged smaller than this value.",
              "fieldName": "minSize",
              "default": "100"
            },
            {
              "name": "maxSize",
              "type": {
                "text": "number"
              },
              "description": "Maximum allowed size in pixels. The panel cannot be dragged larger than this value. Defaults to no limit.",
              "fieldName": "maxSize",
              "default": "0"
            },
            {
              "name": "size",
              "type": {
                "text": "number"
              },
              "default": "300",
              "description": "Current size of the panel in pixels. Updated in real time during drag. Maps to the --panel-size CSS custom property.",
              "fieldName": "size"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-resizable",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcResizable",
          "declaration": {
            "name": "ArcResizable",
            "module": "src/layout/resizable.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/responsive-switcher.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Container-query-based layout that flips between horizontal and vertical at a threshold width. No\nmedia queries needed.",
          "name": "ArcResponsiveSwitcher",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "switcher"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "threshold",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'600px'",
              "description": "The container width at which the layout switches between horizontal and vertical. Accepts any CSS length value. When the container is wider than this value, children are in a row; below it, they stack.",
              "attribute": "threshold",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "gap",
              "privacy": "public",
              "type": {
                "text": "'xs' | 'sm' | 'md' | 'lg' | 'xl'"
              },
              "description": "Spacing between children in both horizontal and vertical modes, mapped to design system spacing tokens.",
              "attribute": "gap",
              "default": "'md'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "threshold",
              "type": {
                "text": "string"
              },
              "default": "'600px'",
              "description": "The container width at which the layout switches between horizontal and vertical. Accepts any CSS length value. When the container is wider than this value, children are in a row; below it, they stack.",
              "fieldName": "threshold"
            },
            {
              "name": "gap",
              "type": {
                "text": "'xs' | 'sm' | 'md' | 'lg' | 'xl'"
              },
              "description": "Spacing between children in both horizontal and vertical modes, mapped to design system spacing tokens.",
              "fieldName": "gap",
              "default": "'md'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-responsive-switcher",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcResponsiveSwitcher",
          "declaration": {
            "name": "ArcResponsiveSwitcher",
            "module": "src/layout/responsive-switcher.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/section.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Page section with optional uppercase label, consistent spacing.",
          "name": "ArcSection",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "section"
            },
            {
              "name": "label"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Section label displayed in uppercase above content",
              "attribute": "label"
            }
          ],
          "attributes": [
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Section label displayed in uppercase above content",
              "fieldName": "label"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-section",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSection",
          "declaration": {
            "name": "ArcSection",
            "module": "src/layout/section.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/settings-layout.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Settings page with side navigation and content area.",
          "name": "ArcSettingsLayout",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "layout"
            },
            {
              "name": "nav"
            },
            {
              "name": "content"
            }
          ],
          "slots": [
            {
              "name": "nav"
            },
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "navPosition",
              "privacy": "public",
              "type": {
                "text": "'left' | 'top'"
              },
              "description": "Controls whether the navigation panel appears as a left sidebar (220px wide, CSS Grid) or a top bar (full-width, flexbox column). The left layout collapses to stacked on screens narrower than 768px.",
              "attribute": "navPosition",
              "default": "'left'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "navPosition",
              "type": {
                "text": "'left' | 'top'"
              },
              "description": "Controls whether the navigation panel appears as a left sidebar (220px wide, CSS Grid) or a top bar (full-width, flexbox column). The left layout collapses to stacked on screens narrower than 768px.",
              "fieldName": "navPosition",
              "default": "'left'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-settings-layout",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSettingsLayout",
          "declaration": {
            "name": "ArcSettingsLayout",
            "module": "src/layout/settings-layout.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/split-pane.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Resizable split layout with two panes.",
          "name": "ArcSplitPane",
          "cssParts": [
            {
              "name": "base"
            },
            {
              "name": "primary"
            },
            {
              "name": "handle"
            },
            {
              "name": "secondary"
            }
          ],
          "slots": [
            {
              "name": "primary"
            },
            {
              "name": "secondary"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "STEP",
              "type": {
                "text": "number"
              },
              "static": true,
              "default": "0.05",
              "description": "Keyboard step, and the larger Shift step — the same 5-and-20 as arc-resizable."
            },
            {
              "kind": "field",
              "name": "STEP_LARGE",
              "type": {
                "text": "number"
              },
              "static": true,
              "default": "0.2"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the divider, applied as `aria-label`. Defaults to \"Resize panes\".",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "orientation",
              "privacy": "public",
              "type": {
                "text": "'horizontal' | 'vertical'"
              },
              "description": "Controls the split direction. Horizontal places panes side by side with a vertical divider. Vertical stacks panes top and bottom with a horizontal divider.",
              "attribute": "orientation",
              "default": "'horizontal'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "ratio",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "The proportion of space allocated to the primary pane, clamped to `minRatio`..`maxRatio` on every path. The drag handle always honoured those bounds; assigning `ratio` from script used to bypass them entirely. From 0 to 1. A value of 0.4 gives the primary pane 40% of the available width (or height in vertical mode).",
              "attribute": "ratio",
              "default": "0.5"
            },
            {
              "kind": "field",
              "name": "minRatio",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Minimum allowed ratio. The divider cannot be dragged below this value, preventing the primary pane from collapsing.",
              "attribute": "minRatio",
              "default": "0.15"
            },
            {
              "kind": "field",
              "name": "maxRatio",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Maximum allowed ratio. The divider cannot be dragged above this value, preventing the secondary pane from collapsing.",
              "attribute": "maxRatio",
              "default": "0.85"
            }
          ],
          "events": [
            {
              "name": "arc-resize",
              "type": {
                "text": "CustomEvent<{ value: number, ratio: number }>"
              },
              "description": "Fired on every step of a divider drag and on every keyboard step, with the new ratio on both `detail.value` and `detail.ratio`."
            }
          ],
          "attributes": [
            {
              "name": "orientation",
              "type": {
                "text": "'horizontal' | 'vertical'"
              },
              "description": "Controls the split direction. Horizontal places panes side by side with a vertical divider. Vertical stacks panes top and bottom with a horizontal divider.",
              "fieldName": "orientation",
              "default": "'horizontal'"
            },
            {
              "name": "ratio",
              "type": {
                "text": "number"
              },
              "description": "The proportion of space allocated to the primary pane, clamped to `minRatio`..`maxRatio` on every path. The drag handle always honoured those bounds; assigning `ratio` from script used to bypass them entirely. From 0 to 1. A value of 0.4 gives the primary pane 40% of the available width (or height in vertical mode).",
              "fieldName": "ratio",
              "default": "0.5"
            },
            {
              "name": "minRatio",
              "type": {
                "text": "number"
              },
              "description": "Minimum allowed ratio. The divider cannot be dragged below this value, preventing the primary pane from collapsing.",
              "fieldName": "minRatio",
              "default": "0.15"
            },
            {
              "name": "maxRatio",
              "type": {
                "text": "number"
              },
              "description": "Maximum allowed ratio. The divider cannot be dragged above this value, preventing the secondary pane from collapsing.",
              "fieldName": "maxRatio",
              "default": "0.85"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the divider, applied as `aria-label`. Defaults to \"Resize panes\".",
              "fieldName": "label"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-split-pane",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSplitPane",
          "declaration": {
            "name": "ArcSplitPane",
            "module": "src/layout/split-pane.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/status-bar.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Bottom status bar with start, center, and end slots.",
          "name": "ArcStatusBar",
          "cssParts": [
            {
              "name": "base"
            },
            {
              "name": "prefix"
            },
            {
              "name": "center"
            },
            {
              "name": "suffix"
            }
          ],
          "slots": [
            {
              "description": "Content pinned to the inline-start edge of the bar.",
              "name": "prefix"
            },
            {
              "description": "Default content.",
              "name": ""
            },
            {
              "description": "Content pinned to the inline-end edge of the bar.",
              "name": "suffix"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "position",
              "privacy": "public",
              "type": {
                "text": "'static' | 'fixed'"
              },
              "description": "Controls whether the status bar flows with the document (static) or pins to the bottom of the viewport (fixed). Fixed mode sets bottom: 0, left: 0, right: 0 with z-index: 100.",
              "attribute": "position",
              "default": "'static'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "position",
              "type": {
                "text": "'static' | 'fixed'"
              },
              "description": "Controls whether the status bar flows with the document (static) or pins to the bottom of the viewport (fixed). Fixed mode sets bottom: 0, left: 0, right: 0 with z-index: 100.",
              "fieldName": "position",
              "default": "'static'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-status-bar",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcStatusBar",
          "declaration": {
            "name": "ArcStatusBar",
            "module": "src/layout/status-bar.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/sticky.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Wrapper that goes sticky at a configurable offset and emits a stuck attribute/event for visual\nstate changes.",
          "name": "ArcSticky",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "offset",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'0px'",
              "description": "The CSS `top` value for sticky positioning. Set to \"64px\" to stick below a 64px top bar, or \"0px\" to stick flush with the viewport/scroll container edge.",
              "attribute": "offset",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "stuck",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Read-only attribute set by the IntersectionObserver when the element is currently stuck. Use the `[stuck]` CSS selector to style the stuck state.",
              "attribute": "stuck",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-stuck",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when the stuck state changes. Event detail contains `{ stuck: boolean }` indicating whether the element is currently stuck."
            }
          ],
          "attributes": [
            {
              "name": "offset",
              "type": {
                "text": "string"
              },
              "default": "'0px'",
              "description": "The CSS `top` value for sticky positioning. Set to \"64px\" to stick below a 64px top bar, or \"0px\" to stick flush with the viewport/scroll container edge.",
              "fieldName": "offset"
            },
            {
              "name": "stuck",
              "type": {
                "text": "boolean"
              },
              "description": "Read-only attribute set by the IntersectionObserver when the element is currently stuck. Use the `[stuck]` CSS selector to style the stuck state.",
              "fieldName": "stuck",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-sticky",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSticky",
          "declaration": {
            "name": "ArcSticky",
            "module": "src/layout/sticky.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/layout/toolbar.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Horizontal toolbar with prefix, center, and suffix slots.",
          "name": "ArcToolbar",
          "cssParts": [
            {
              "name": "more"
            },
            {
              "name": "overflow-panel"
            },
            {
              "name": "overflow-item"
            },
            {
              "name": "base"
            },
            {
              "name": "prefix"
            },
            {
              "name": "center"
            },
            {
              "name": "suffix"
            }
          ],
          "slots": [
            {
              "description": "Content pinned to the inline-start edge of the bar.",
              "name": "prefix"
            },
            {
              "description": "Default content.",
              "name": ""
            },
            {
              "description": "Content pinned to the inline-end edge of the bar.",
              "name": "suffix"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "sticky",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When set, the toolbar uses position: sticky with top: 0 and z-index: 50, keeping it visible as the user scrolls through content below.",
              "attribute": "sticky",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the toolbar height. `md`, the default, is 48px for primary toolbars; `sm` is 36px for secondary or nested toolbars; `lg` is 60px. The nested arc-icon-button in the overflow menu tracks it.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "border",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Renders a subtle bottom border (--border-subtle) to visually separate the toolbar from the content below. Enabled by default.",
              "attribute": "border",
              "default": "true",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "overflow",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Enables responsive overflow collapse. A ResizeObserver measures available width; slotted items that do not fit are collapsed (hidden via the reversible hidden attribute) from the end of the item list, and a \"More\" trigger opens a menu of proxy items that re-dispatch clicks to the hidden originals. Note: because slotted nodes cannot be moved into the overflow panel, complex custom content is represented in the menu only by its text label (or the label attribute on arc-button / arc-icon-button).",
              "attribute": "overflow",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-overflow-change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when the set of collapsed items changes (only with the overflow prop). detail: { hiddenCount: number }."
            }
          ],
          "attributes": [
            {
              "name": "sticky",
              "type": {
                "text": "boolean"
              },
              "description": "When set, the toolbar uses position: sticky with top: 0 and z-index: 50, keeping it visible as the user scrolls through content below.",
              "fieldName": "sticky",
              "default": "false"
            },
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the toolbar height. `md`, the default, is 48px for primary toolbars; `sm` is 36px for secondary or nested toolbars; `lg` is 60px. The nested arc-icon-button in the overflow menu tracks it.",
              "fieldName": "size",
              "default": "'md'"
            },
            {
              "name": "border",
              "type": {
                "text": "boolean"
              },
              "description": "Renders a subtle bottom border (--border-subtle) to visually separate the toolbar from the content below. Enabled by default.",
              "fieldName": "border",
              "default": "true"
            },
            {
              "name": "overflow",
              "type": {
                "text": "boolean"
              },
              "description": "Enables responsive overflow collapse. A ResizeObserver measures available width; slotted items that do not fit are collapsed (hidden via the reversible hidden attribute) from the end of the item list, and a \"More\" trigger opens a menu of proxy items that re-dispatch clicks to the hidden originals. Note: because slotted nodes cannot be moved into the overflow panel, complex custom content is represented in the menu only by its text label (or the label attribute on arc-button / arc-icon-button).",
              "fieldName": "overflow",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-toolbar",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcToolbar",
          "declaration": {
            "name": "ArcToolbar",
            "module": "src/layout/toolbar.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/anchor-nav.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Vertical or horizontal in-page link bar with active highlight. Active link gets accent-primary\nbackground pill or underline glow.",
          "name": "ArcAnchorNav",
          "cssParts": [
            {
              "name": "base"
            },
            {
              "name": "link"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The value of the currently active link. Controls which item is highlighted.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "items",
              "privacy": "public",
              "type": {
                "text": "Array<{label: string, value: string}>"
              },
              "default": "[]",
              "description": "Declarative list of items to render. Each object needs a label (display text) and value (identifier). Alternative to slotting children.",
              "attribute": "items"
            },
            {
              "kind": "field",
              "name": "orientation",
              "privacy": "public",
              "type": {
                "text": "'vertical' | 'horizontal'"
              },
              "description": "Layout direction. Vertical renders a column of links; horizontal renders a row.",
              "attribute": "orientation",
              "default": "'horizontal'",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when a link is selected with detail: { value }."
            }
          ],
          "attributes": [
            {
              "name": "orientation",
              "type": {
                "text": "'vertical' | 'horizontal'"
              },
              "description": "Layout direction. Vertical renders a column of links; horizontal renders a row.",
              "fieldName": "orientation",
              "default": "'horizontal'"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The value of the currently active link. Controls which item is highlighted.",
              "fieldName": "value"
            },
            {
              "name": "items",
              "type": {
                "text": "Array<{label: string, value: string}>"
              },
              "default": "[]",
              "description": "Declarative list of items to render. Each object needs a label (display text) and value (identifier). Alternative to slotting children.",
              "fieldName": "items"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-anchor-nav",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcAnchorNav",
          "declaration": {
            "name": "ArcAnchorNav",
            "module": "src/navigation/anchor-nav.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/bottom-nav.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Mobile bottom bar with icon + label items. Active item gets accent-primary glow underline with\nsurface-overlay background and backdrop blur.",
          "name": "ArcBottomNav",
          "cssParts": [
            {
              "name": "base"
            },
            {
              "name": "item"
            },
            {
              "name": "icon"
            },
            {
              "name": "label"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "items",
              "privacy": "public",
              "type": {
                "text": "Array<{label: string, icon?: string, value: string}>"
              },
              "default": "[]",
              "description": "Array of navigation items, each with a label, icon name, and value identifier.",
              "attribute": "items"
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The value of the currently active item. Controls which item is highlighted.",
              "attribute": "value",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired when an item is tapped with detail: { value }."
            }
          ],
          "attributes": [
            {
              "name": "items",
              "type": {
                "text": "Array<{label: string, icon?: string, value: string}>"
              },
              "default": "[]",
              "description": "Array of navigation items, each with a label, icon name, and value identifier.",
              "fieldName": "items"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The value of the currently active item. Controls which item is highlighted.",
              "fieldName": "value"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-bottom-nav",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcBottomNav",
          "declaration": {
            "name": "ArcBottomNav",
            "module": "src/navigation/bottom-nav.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/breadcrumb-item.js",
      "declarations": [
        {
          "kind": "class",
          "description": "An individual crumb inside a Breadcrumb trail. Each item represents one level of the page\nhierarchy. Items with an `href` render as clickable links; the item without an `href` (typically\nthe last one) is treated as the current page and lifted to the primary text color.",
          "name": "ArcBreadcrumbItem",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "resolvedHref",
              "description": "Destination, preferring the explicit attribute over an anchor child.\nAuthoring `<arc-breadcrumb-item><a href=\"/docs\">Docs</a></arc-breadcrumb-item>`\nleaves a working trail in the pre-upgrade markup — arc-breadcrumb hides this\nlight DOM only once it has re-rendered it into shadow DOM.",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "label",
              "description": "textContent already reaches through an anchor child, so this needs no special case.",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "href",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Navigation URL for this crumb. When provided, the crumb renders as a clickable link styled in muted text that brightens on hover. Omit this property on the final item to mark it as the current page -- it will receive `aria-current=\"page\"` and the primary text color automatically.",
              "attribute": "href",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "href",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Navigation URL for this crumb. When provided, the crumb renders as a clickable link styled in muted text that brightens on hover. Omit this property on the final item to mark it as the current page -- it will receive `aria-current=\"page\"` and the primary text color automatically.",
              "fieldName": "href"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-breadcrumb-item",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcBreadcrumbItem",
          "declaration": {
            "name": "ArcBreadcrumbItem",
            "module": "src/navigation/breadcrumb-item.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/breadcrumb-menu.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Each breadcrumb segment doubles as a dropdown showing sibling pages at that hierarchy level.\nDropdown panels match dropdown-menu styling.",
          "name": "ArcBreadcrumbMenu",
          "cssParts": [
            {
              "name": "base"
            },
            {
              "name": "separator"
            },
            {
              "name": "item"
            },
            {
              "name": "link"
            },
            {
              "name": "dropdown"
            },
            {
              "name": "dropdown-item"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Breadcrumb'",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "items",
              "privacy": "public",
              "type": {
                "text": "Array<{label: string, href?: string, siblings?: Array<{label: string, href?: string}>}>"
              },
              "default": "[]",
              "description": "Array of breadcrumb items. Each item has a label and href. Optionally include a siblings array to enable a dropdown at that level.",
              "attribute": "items"
            }
          ],
          "events": [
            {
              "name": "arc-navigate",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when a breadcrumb link or dropdown item is clicked with detail: { href }."
            }
          ],
          "attributes": [
            {
              "name": "items",
              "type": {
                "text": "Array<{label: string, href?: string, siblings?: Array<{label: string, href?: string}>}>"
              },
              "default": "[]",
              "description": "Array of breadcrumb items. Each item has a label and href. Optionally include a siblings array to enable a dropdown at that level.",
              "fieldName": "items"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "'Breadcrumb'",
              "fieldName": "label"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-breadcrumb-menu",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcBreadcrumbMenu",
          "declaration": {
            "name": "ArcBreadcrumbMenu",
            "module": "src/navigation/breadcrumb-menu.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/breadcrumb.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Wayfinding navigation trail that shows the user their current location within a hierarchical\npage structure, with separator icons and current-page indication.",
          "name": "ArcBreadcrumb",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "breadcrumb"
            },
            {
              "name": "current"
            },
            {
              "name": "link"
            },
            {
              "name": "separator"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "separator",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'/'",
              "description": "Character used as the separator between breadcrumb items. Common options: '/', '>', '•'.",
              "attribute": "separator"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Breadcrumb'",
              "attribute": "label"
            }
          ],
          "events": [
            {
              "name": "arc-navigate",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when a breadcrumb item is clicked"
            }
          ],
          "attributes": [
            {
              "name": "separator",
              "type": {
                "text": "string"
              },
              "default": "'/'",
              "description": "Character used as the separator between breadcrumb items. Common options: '/', '>', '•'.",
              "fieldName": "separator"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "'Breadcrumb'",
              "fieldName": "label"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-breadcrumb",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcBreadcrumb",
          "declaration": {
            "name": "ArcBreadcrumb",
            "module": "src/navigation/breadcrumb.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/command-bar.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Always-visible search input designed to sit inside a top bar. Accent-primary bottom border on\nfocus with glow ring.",
          "name": "ArcCommandBar",
          "cssParts": [
            {
              "name": "base"
            },
            {
              "name": "icon"
            },
            {
              "name": "input"
            },
            {
              "name": "hint"
            }
          ],
          "slots": [
            {
              "name": "hint"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "placeholder",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Search…'",
              "description": "Placeholder text displayed when the input is empty. Use it to communicate the scope of the search.",
              "attribute": "placeholder"
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The current value of the input. Set externally to control the input state programmatically.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "icon",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'magnifying-glass'",
              "description": "Icon name displayed before the input. Accepts any Phosphor icon name.",
              "attribute": "icon",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the input, applied as `aria-label`. Defaults to \"Search\". A placeholder is not a name: it is announced inconsistently and disappears the moment the user types.",
              "attribute": "label"
            }
          ],
          "events": [
            {
              "name": "arc-input",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired on every keystroke with detail: { value }."
            },
            {
              "name": "arc-submit",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired when the user presses Enter with detail: { value }."
            }
          ],
          "attributes": [
            {
              "name": "placeholder",
              "type": {
                "text": "string"
              },
              "default": "'Search…'",
              "description": "Placeholder text displayed when the input is empty. Use it to communicate the scope of the search.",
              "fieldName": "placeholder"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The current value of the input. Set externally to control the input state programmatically.",
              "fieldName": "value"
            },
            {
              "name": "icon",
              "type": {
                "text": "string"
              },
              "default": "'magnifying-glass'",
              "description": "Icon name displayed before the input. Accepts any Phosphor icon name.",
              "fieldName": "icon"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Accessible name for the input, applied as `aria-label`. Defaults to \"Search\". A placeholder is not a name: it is announced inconsistently and disappears the moment the user types.",
              "fieldName": "label"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-command-bar",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcCommandBar",
          "declaration": {
            "name": "ArcCommandBar",
            "module": "src/navigation/command-bar.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/drawer.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Slide-out panel with backdrop overlay, keyboard dismissal, and left/right positioning for\noff-canvas navigation, filters, and detail views.",
          "name": "ArcDrawer",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "description": "The sliding panel. Same element as `base`; the scrim is `::backdrop`, which is not an element and so cannot be a part — style it with the `--drawer-backdrop` custom property.",
              "name": "panel"
            },
            {
              "name": "header"
            },
            {
              "name": "title"
            },
            {
              "name": "close"
            },
            {
              "name": "body"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "heading",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text displayed in the drawer header bar. Also used as the `aria-label` for the dialog panel, ensuring screen readers announce the panel purpose when it opens.",
              "attribute": "heading"
            },
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Controls the visible state of the drawer. Set to `true` to slide the panel into view and activate the backdrop; set to `false` to run the exit animation, remove the backdrop, and restore body scroll.",
              "attribute": "open",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "position",
              "privacy": "public",
              "type": {
                "text": "'left' | 'right'"
              },
              "description": "Which edge of the viewport the drawer slides in from. Use `left` for primary navigation menus and `right` for contextual detail panels, filter sidebars, or settings trays.",
              "attribute": "position",
              "default": "'left'",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-close",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the drawer closes via backdrop click or escape key"
            }
          ],
          "attributes": [
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Controls the visible state of the drawer. Set to `true` to slide the panel into view and activate the backdrop; set to `false` to run the exit animation, remove the backdrop, and restore body scroll.",
              "fieldName": "open",
              "default": "false"
            },
            {
              "name": "position",
              "type": {
                "text": "'left' | 'right'"
              },
              "description": "Which edge of the viewport the drawer slides in from. Use `left` for primary navigation menus and `right` for contextual detail panels, filter sidebars, or settings trays.",
              "fieldName": "position",
              "default": "'left'"
            },
            {
              "name": "heading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text displayed in the drawer header bar. Also used as the `aria-label` for the dialog panel, ensuring screen readers announce the panel purpose when it opens.",
              "fieldName": "heading"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-drawer",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcDrawer",
          "declaration": {
            "name": "ArcDrawer",
            "module": "src/navigation/drawer.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/footer.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Page footer with branding, link columns, and legal text. Provides a structured layout with slots\nfor a logo, navigational link groups, social icons, and copyright information.",
          "name": "ArcFooter",
          "cssParts": [
            {
              "name": "brand"
            },
            {
              "name": "columns"
            },
            {
              "name": "social"
            },
            {
              "name": "legal"
            },
            {
              "name": "base"
            }
          ],
          "slots": [
            {
              "name": "logo"
            },
            {
              "description": "Default content.",
              "name": ""
            },
            {
              "name": "social"
            },
            {
              "name": "legal"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "contained",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "null",
              "description": "Sets a max-width containment on the footer content. Accepts any CSS length value or named size token.",
              "attribute": "contained",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "density",
              "privacy": "public",
              "type": {
                "text": "'default' | 'compact'"
              },
              "description": "Visual density. 'compact' reduces internal padding and spacing throughout the footer — for dashboard layouts or admin panels where vertical space is limited.",
              "attribute": "density",
              "default": "'default'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "border",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Renders a subtle top border on the footer to visually separate it from the page content above. Enabled by default; disable it only when the footer sits against a dark background where the border would be redundant.",
              "attribute": "border",
              "default": "true",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "align",
              "privacy": "public",
              "type": {
                "text": "'left' | 'center'"
              },
              "description": "Controls footer content alignment.",
              "attribute": "align",
              "default": "'left'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "density",
              "type": {
                "text": "'default' | 'compact'"
              },
              "description": "Visual density. 'compact' reduces internal padding and spacing throughout the footer — for dashboard layouts or admin panels where vertical space is limited.",
              "fieldName": "density",
              "default": "'default'"
            },
            {
              "name": "border",
              "type": {
                "text": "boolean"
              },
              "description": "Renders a subtle top border on the footer to visually separate it from the page content above. Enabled by default; disable it only when the footer sits against a dark background where the border would be redundant.",
              "fieldName": "border",
              "default": "true"
            },
            {
              "name": "contained",
              "type": {
                "text": "string"
              },
              "default": "null",
              "description": "Sets a max-width containment on the footer content. Accepts any CSS length value or named size token.",
              "fieldName": "contained"
            },
            {
              "name": "align",
              "type": {
                "text": "'left' | 'center'"
              },
              "description": "Controls footer content alignment.",
              "fieldName": "align",
              "default": "'left'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-footer",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcFooter",
          "declaration": {
            "name": "ArcFooter",
            "module": "src/navigation/footer.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/link.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Styled anchor with nav, muted, and default variants.",
          "name": "ArcLink",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "link"
            }
          ],
          "slots": [
            {
              "description": "Default content. Slotting a single `<a>` as the only child adopts it as the link — the recommended form for links that must work before hydration or without JavaScript. In this form `external` contributes the marker icon only; put `target`/`rel` on your own anchor, and note that `::part(link)` does not apply.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "href",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "URL destination for the link.",
              "attribute": "href"
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'default' | 'muted' | 'nav'"
              },
              "description": "Link style variant. `default` uses accent-primary color, `muted` uses muted text, `nav` uses secondary text with 14px size and flex layout.",
              "attribute": "variant",
              "default": "'default'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "active",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Active state — applies accent-primary color for navigation highlighting.",
              "attribute": "active",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "external",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, adds `target=\"_blank\"` and `rel=\"noopener noreferrer\"`, and renders an external link icon after the text.",
              "attribute": "external",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "underline",
              "privacy": "public",
              "type": {
                "text": "'hover' | 'always' | 'never'"
              },
              "description": "Controls underline behavior: 'hover' underlines on hover, 'always' keeps it visible, 'never' omits it.",
              "attribute": "underline",
              "default": "'hover'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "href",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "URL destination for the link.",
              "fieldName": "href"
            },
            {
              "name": "variant",
              "type": {
                "text": "'default' | 'muted' | 'nav'"
              },
              "description": "Link style variant. `default` uses accent-primary color, `muted` uses muted text, `nav` uses secondary text with 14px size and flex layout.",
              "fieldName": "variant",
              "default": "'default'"
            },
            {
              "name": "underline",
              "type": {
                "text": "'hover' | 'always' | 'never'"
              },
              "description": "Controls underline behavior: 'hover' underlines on hover, 'always' keeps it visible, 'never' omits it.",
              "fieldName": "underline",
              "default": "'hover'"
            },
            {
              "name": "active",
              "type": {
                "text": "boolean"
              },
              "description": "Active state — applies accent-primary color for navigation highlighting.",
              "fieldName": "active",
              "default": "false"
            },
            {
              "name": "external",
              "type": {
                "text": "boolean"
              },
              "description": "When true, adds `target=\"_blank\"` and `rel=\"noopener noreferrer\"`, and renders an external link icon after the text.",
              "fieldName": "external",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-link",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcLink",
          "declaration": {
            "name": "ArcLink",
            "module": "src/navigation/link.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/menubar.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Desktop-application-style menu bar (File / Edit / View) with nested submenus, keyboard shortcuts\ndisplay, and full WAI-ARIA menubar keyboard navigation.",
          "name": "ArcMenubar",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "menu"
            },
            {
              "name": "divider"
            },
            {
              "name": "item"
            },
            {
              "name": "shortcut"
            },
            {
              "name": "bar"
            },
            {
              "name": "trigger"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "items",
              "privacy": "public",
              "type": {
                "text": "Array<{label:string,disabled?:boolean,items:Array<{label?:string,shortcut?:string,disabled?:boolean,divider?:boolean,items?:Array<{label:string,shortcut?:string,disabled?:boolean}>}>}>"
              },
              "description": "The menu structure. Entries with an `items` array become submenus (one further nesting level supported); `{ divider: true }` renders a separator. Set as a property, or as a JSON attribute for a menu structure that is static.",
              "attribute": "items",
              "default": "[]"
            }
          ],
          "events": [
            {
              "name": "arc-select",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when a leaf menu item is activated. `detail.path` is the array of labels from the top-level menu to the selected leaf, e.g. `[\"File\", \"Export\", \"PNG\"]`."
            }
          ],
          "attributes": [
            {
              "name": "items",
              "type": {
                "text": "Array<{label:string,disabled?:boolean,items:Array<{label?:string,shortcut?:string,disabled?:boolean,divider?:boolean,items?:Array<{label:string,shortcut?:string,disabled?:boolean}>}>}>"
              },
              "description": "The menu structure. Entries with an `items` array become submenus (one further nesting level supported); `{ divider: true }` renders a separator. Set as a property, or as a JSON attribute for a menu structure that is static.",
              "fieldName": "items",
              "default": "[]"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-menubar",
          "customElement": true,
          "group": null,
          "status": "beta"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcMenubar",
          "declaration": {
            "name": "ArcMenubar",
            "module": "src/navigation/menubar.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/nav-item.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A single entry inside NavigationMenu. When used at the top level and containing nested NavItem\nchildren, it becomes a dropdown trigger. When used without children, it renders as a direct\nnavigation link. Nest one level deep to populate a dropdown panel.",
          "name": "ArcNavItem",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "resolvedHref",
              "description": "Destination, preferring the explicit attribute over an anchor child.\n\nAuthoring `<arc-nav-item><a href=\"/docs\">Docs</a></arc-nav-item>` makes the\npre-upgrade markup a working link list, which is what no-JS visitors and\nanyone on a slow connection actually see — arc-navigation-menu hides this\nlight DOM only once it has upgraded and re-rendered it into shadow DOM.",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "label",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "subItems",
              "description": "Nested arc-nav-item children for dropdown menus.",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "hasChildren",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "href",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Destination URL for the nav item. Required for leaf items that navigate. Omit on parent items that serve only as dropdown triggers.",
              "attribute": "href",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "description",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Secondary text displayed below the item label inside a dropdown. Use this to add context like \"Real-time dashboards and metrics\" so users can scan the mega-menu without clicking through.",
              "attribute": "description"
            },
            {
              "kind": "field",
              "name": "active",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Highlights the item with an accent-colored bottom border to indicate the current route. Set this on the top-level NavItem that corresponds to the active page.",
              "attribute": "active",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'default' | 'primary' | 'muted'"
              },
              "description": "Visual style variant. `default` shows a subtle border and muted text with accent glow on active. `primary` uses accent-colored text and border in the resting state with a stronger glow on hover/active. `muted` renders a subdued style with no border and lighter text — ideal for secondary links like \"Blog\" or \"Changelog\".",
              "attribute": "variant",
              "default": "'default'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "href",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Destination URL for the nav item. Required for leaf items that navigate. Omit on parent items that serve only as dropdown triggers.",
              "fieldName": "href"
            },
            {
              "name": "active",
              "type": {
                "text": "boolean"
              },
              "description": "Highlights the item with an accent-colored bottom border to indicate the current route. Set this on the top-level NavItem that corresponds to the active page.",
              "fieldName": "active",
              "default": "false"
            },
            {
              "name": "variant",
              "type": {
                "text": "'default' | 'primary' | 'muted'"
              },
              "description": "Visual style variant. `default` shows a subtle border and muted text with accent glow on active. `primary` uses accent-colored text and border in the resting state with a stronger glow on hover/active. `muted` renders a subdued style with no border and lighter text — ideal for secondary links like \"Blog\" or \"Changelog\".",
              "fieldName": "variant",
              "default": "'default'"
            },
            {
              "name": "description",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Secondary text displayed below the item label inside a dropdown. Use this to add context like \"Real-time dashboards and metrics\" so users can scan the mega-menu without clicking through.",
              "fieldName": "description"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-nav-item",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcNavItem",
          "declaration": {
            "name": "ArcNavItem",
            "module": "src/navigation/nav-item.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/navigation-menu.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Horizontal navigation bar with hover-triggered dropdown sub-menus and full keyboard\naccessibility. Designed for marketing sites, documentation hubs, and product landing pages where\ntop-level sections expand into categorised link lists.",
          "name": "ArcNavigationMenu",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "nav"
            },
            {
              "name": "item"
            },
            {
              "name": "trigger"
            },
            {
              "name": "dropdown"
            },
            {
              "name": "dropdown-item"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Navigation menu'",
              "attribute": "label"
            }
          ],
          "events": [
            {
              "name": "arc-mobile-menu-toggle",
              "type": {
                "text": "CustomEvent<{ value: boolean }>"
              },
              "description": "Fired when the mobile hamburger button is clicked. Bubbles composed from the host, so listening on the element or on document both work."
            },
            {
              "description": "Fired when a navigation item is selected",
              "name": "arc-navigate"
            }
          ],
          "attributes": [
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "'Navigation menu'",
              "fieldName": "label"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-navigation-menu",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcNavigationMenu",
          "declaration": {
            "name": "ArcNavigationMenu",
            "module": "src/navigation/navigation-menu.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/page-indicator.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Dot-based position indicator for page-level navigation or onboarding flows. Active dot fills\nwith accent-primary and scales up.",
          "name": "ArcPageIndicator",
          "cssParts": [
            {
              "name": "base"
            },
            {
              "name": "dot"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "count",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Total number of dots to display.",
              "attribute": "count"
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Zero-based index of the active dot.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "clickable",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, dots become interactive tap targets that dispatch arc-change on click.",
              "attribute": "clickable",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: number }>"
              },
              "description": "Fired when a dot is clicked (clickable mode only) with detail: { value }."
            }
          ],
          "attributes": [
            {
              "name": "count",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Total number of dots to display.",
              "fieldName": "count"
            },
            {
              "name": "value",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Zero-based index of the active dot.",
              "fieldName": "value"
            },
            {
              "name": "clickable",
              "type": {
                "text": "boolean"
              },
              "description": "When true, dots become interactive tap targets that dispatch arc-change on click.",
              "fieldName": "clickable",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-page-indicator",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcPageIndicator",
          "declaration": {
            "name": "ArcPageIndicator",
            "module": "src/navigation/page-indicator.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/pagination.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Page navigation control with previous/next arrows, numbered page buttons, and smart ellipsis\ntruncation.",
          "name": "ArcPagination",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "prev"
            },
            {
              "name": "next"
            },
            {
              "name": "pagination"
            },
            {
              "name": "label"
            },
            {
              "name": "ellipsis"
            },
            {
              "name": "page"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "total",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Total number of pages. At least 1 — a pager with no pages is still a pager showing page 1 of 1.",
              "attribute": "total",
              "default": "1"
            },
            {
              "kind": "field",
              "name": "current",
              "privacy": "public",
              "description": "The currently active page number (1-based). Reflected as an attribute. Clamped to 1..`total`, so a page number past either end lands on the nearest real page rather than stranding the control.",
              "type": {
                "text": "number"
              },
              "attribute": "current",
              "default": "1",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "siblings",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Number of page buttons to show on each side of the current page before ellipsis truncation kicks in. Never negative.",
              "attribute": "siblings",
              "default": "1"
            },
            {
              "kind": "field",
              "name": "compact",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Shows only previous/next buttons with a 'current / total' label. Hides individual page numbers.",
              "attribute": "compact",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: number }>"
              },
              "description": "Fired when the current page changes"
            }
          ],
          "attributes": [
            {
              "name": "total",
              "type": {
                "text": "number"
              },
              "description": "Total number of pages. At least 1 — a pager with no pages is still a pager showing page 1 of 1.",
              "fieldName": "total",
              "default": "1"
            },
            {
              "name": "current",
              "description": "The currently active page number (1-based). Reflected as an attribute. Clamped to 1..`total`, so a page number past either end lands on the nearest real page rather than stranding the control.",
              "type": {
                "text": "number"
              },
              "fieldName": "current",
              "default": "1"
            },
            {
              "name": "siblings",
              "type": {
                "text": "number"
              },
              "description": "Number of page buttons to show on each side of the current page before ellipsis truncation kicks in. Never negative.",
              "fieldName": "siblings",
              "default": "1"
            },
            {
              "name": "compact",
              "type": {
                "text": "boolean"
              },
              "description": "Shows only previous/next buttons with a 'current / total' label. Hides individual page numbers.",
              "fieldName": "compact",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-pagination",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcPagination",
          "declaration": {
            "name": "ArcPagination",
            "module": "src/navigation/pagination.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/rail.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Ultra-narrow icon-only vertical navigation like VS Code's activity bar. Icons use text-muted at\nrest, accent-primary glow on active. Expands on hover.",
          "name": "ArcRail",
          "cssParts": [
            {
              "name": "base"
            },
            {
              "name": "item"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "items",
              "privacy": "public",
              "type": {
                "text": "Array<{icon: string, label: string, value: string}>"
              },
              "default": "[]",
              "description": "Array of navigation items, each with an icon name, text label, and value identifier.",
              "attribute": "items"
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The value of the currently active item. Controls which icon receives the accent glow.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "expanded",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, the Rail widens to show text labels beside each icon. Can be toggled on hover or set permanently.",
              "attribute": "expanded",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ value: string }>"
              },
              "description": "Fired when an item is selected with detail: { value }."
            }
          ],
          "attributes": [
            {
              "name": "items",
              "type": {
                "text": "Array<{icon: string, label: string, value: string}>"
              },
              "default": "[]",
              "description": "Array of navigation items, each with an icon name, text label, and value identifier.",
              "fieldName": "items"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The value of the currently active item. Controls which icon receives the accent glow.",
              "fieldName": "value"
            },
            {
              "name": "expanded",
              "type": {
                "text": "boolean"
              },
              "description": "When true, the Rail widens to show text labels beside each icon. Can be toggled on hover or set permanently.",
              "fieldName": "expanded",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-rail",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcRail",
          "declaration": {
            "name": "ArcRail",
            "module": "src/navigation/rail.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/scroll-spy.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Tracks scroll position and highlights the active navigation link.",
          "name": "ArcScrollSpy",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "scroll-spy"
            },
            {
              "name": "heading"
            },
            {
              "name": "ring"
            },
            {
              "name": "list"
            },
            {
              "name": "link"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "ringRadius",
              "type": {
                "text": "number"
              },
              "static": true,
              "default": "6",
              "description": "Ring geometry. r drives the dasharray, so the two cannot drift apart."
            },
            {
              "kind": "field",
              "name": "active",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The id of the currently active section. Reflects to an attribute and updates automatically as the user scrolls.",
              "attribute": "active",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "offset",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "80",
              "description": "Pixel distance from the top of the viewport at which a section counts as current. Increase it to account for taller sticky headers.",
              "attribute": "offset"
            },
            {
              "kind": "field",
              "name": "progress",
              "privacy": "public",
              "type": {
                "text": "'none' | 'ring' | 'read' | 'both'"
              },
              "description": "How the reader's position through the document is shown. `ring` draws a progress arc beside the heading; `read` recedes the entries already scrolled past; `both` does each. Defaults to `none`, and an unrecognized value lands there too.",
              "attribute": "progress",
              "default": "'none'",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when the active spy target changes during scroll"
            }
          ],
          "attributes": [
            {
              "name": "active",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The id of the currently active section. Reflects to an attribute and updates automatically as the user scrolls.",
              "fieldName": "active"
            },
            {
              "name": "offset",
              "type": {
                "text": "number"
              },
              "default": "80",
              "description": "Pixel distance from the top of the viewport at which a section counts as current. Increase it to account for taller sticky headers.",
              "fieldName": "offset"
            },
            {
              "name": "progress",
              "type": {
                "text": "'none' | 'ring' | 'read' | 'both'"
              },
              "description": "How the reader's position through the document is shown. `ring` draws a progress arc beside the heading; `read` recedes the entries already scrolled past; `both` does each. Defaults to `none`, and an unrecognized value lands there too.",
              "fieldName": "progress",
              "default": "'none'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-scroll-spy",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcScrollSpy",
          "declaration": {
            "name": "ArcScrollSpy",
            "module": "src/navigation/scroll-spy.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/scroll-to-top.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Floating button that appears after scrolling and smoothly returns the user to the top of the\npage.",
          "name": "ArcScrollToTop",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "button"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "threshold",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "300",
              "description": "Scroll distance in pixels before the button becomes visible.",
              "attribute": "threshold"
            },
            {
              "kind": "field",
              "name": "offset",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'var(--space-lg)'",
              "description": "Distance from viewport edges. Accepts any CSS length value.",
              "attribute": "offset"
            },
            {
              "kind": "field",
              "name": "smooth",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Use smooth scrolling animation. Falls back to instant when prefers-reduced-motion is set.",
              "attribute": "smooth",
              "default": "true",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "position",
              "privacy": "public",
              "type": {
                "text": "'bottom-right' | 'bottom-left'"
              },
              "description": "Corner placement.",
              "attribute": "position",
              "default": "'bottom-right'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "threshold",
              "type": {
                "text": "number"
              },
              "default": "300",
              "description": "Scroll distance in pixels before the button becomes visible.",
              "fieldName": "threshold"
            },
            {
              "name": "smooth",
              "type": {
                "text": "boolean"
              },
              "description": "Use smooth scrolling animation. Falls back to instant when prefers-reduced-motion is set.",
              "fieldName": "smooth",
              "default": "true"
            },
            {
              "name": "position",
              "type": {
                "text": "'bottom-right' | 'bottom-left'"
              },
              "description": "Corner placement.",
              "fieldName": "position",
              "default": "'bottom-right'"
            },
            {
              "name": "offset",
              "type": {
                "text": "string"
              },
              "default": "'var(--space-lg)'",
              "description": "Distance from viewport edges. Accepts any CSS length value.",
              "fieldName": "offset"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-scroll-to-top",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcScrollToTop",
          "declaration": {
            "name": "ArcScrollToTop",
            "module": "src/navigation/scroll-to-top.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/sidebar-link.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A navigation link rendered inside a SidebarSection. Supports an active state to indicate the\ncurrent page and provides focus-visible styling for keyboard navigation.",
          "name": "ArcSidebarLink",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "resolvedHref",
              "description": "Destination, preferring the explicit attribute over an anchor child.\nAuthoring `<arc-sidebar-link><a href=\"/docs\">Docs</a></arc-sidebar-link>`\nleaves a working link in the pre-upgrade markup — arc-sidebar hides this\nlight DOM only once it has re-rendered it into shadow DOM.",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "label",
              "description": "textContent already reaches through an anchor child, so this needs no special case.",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "href",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Destination URL for the link. Can be an absolute path, relative path, or hash anchor. The link renders as a standard anchor element for full accessibility and SEO.",
              "attribute": "href",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "level",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Nesting depth for visual indentation. Level 0 links render at default size; level 1+ links are indented and use a smaller font size.",
              "attribute": "level",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "icon",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Name of an icon to render before the label. Use icons consistently within a section — a sidebar where only some links carry one reads as an oversight rather than a hierarchy.",
              "attribute": "icon",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "active",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, applies a highlighted style (accent-colored text and a left-edge indicator) to signal that this link corresponds to the currently viewed page. Only one link should be active at a time.",
              "attribute": "active",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "external",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Marks a destination that leaves the surrounding section — an app on its own route, another site, a repository. The link gains a persistent box-arrow glyph in place of the hover chevron, so the departure is legible before the click rather than after it.",
              "attribute": "external",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "href",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Destination URL for the link. Can be an absolute path, relative path, or hash anchor. The link renders as a standard anchor element for full accessibility and SEO.",
              "fieldName": "href"
            },
            {
              "name": "active",
              "type": {
                "text": "boolean"
              },
              "description": "When true, applies a highlighted style (accent-colored text and a left-edge indicator) to signal that this link corresponds to the currently viewed page. Only one link should be active at a time.",
              "fieldName": "active",
              "default": "false"
            },
            {
              "name": "level",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Nesting depth for visual indentation. Level 0 links render at default size; level 1+ links are indented and use a smaller font size.",
              "fieldName": "level"
            },
            {
              "name": "icon",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Name of an icon to render before the label. Use icons consistently within a section — a sidebar where only some links carry one reads as an oversight rather than a hierarchy.",
              "fieldName": "icon"
            },
            {
              "name": "external",
              "type": {
                "text": "boolean"
              },
              "description": "Marks a destination that leaves the surrounding section — an app on its own route, another site, a repository. The link gains a persistent box-arrow glyph in place of the hover chevron, so the departure is legible before the click rather than after it.",
              "fieldName": "external",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-sidebar-link",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSidebarLink",
          "declaration": {
            "name": "ArcSidebarLink",
            "module": "src/navigation/sidebar-link.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/sidebar-section.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A collapsible group within a Sidebar. Each section renders an optional heading label above its\nchild links, creating a visual and semantic grouping that mirrors your information architecture.\nFires an `arc-toggle` event with `{ open }` detail when the section is expanded or collapsed.",
          "name": "ArcSidebarSection",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "links",
              "description": "Get child arc-sidebar-link elements",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "toggle",
              "description": "Collapse an open section or expand a collapsed one, firing `arc-toggle`.\n\nA no-op unless `collapsible` is set: a section that cannot collapse has\nnothing to toggle, and silently doing nothing is better than a state the\nheader offers no way back from.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "heading",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text label displayed above the group of links. Keep it short (one to three words) so the sidebar stays scannable. When omitted, links render without a heading divider.",
              "attribute": "heading",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "icon",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Name of an icon to render before the heading. Ignored when the section has no heading.",
              "attribute": "icon",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "collapsible",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, the section heading becomes a toggle button that expands/collapses the child links.",
              "attribute": "collapsible",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "open",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether a collapsible section is expanded (true) or collapsed (false). Only relevant when collapsible is true.",
              "attribute": "open",
              "default": "true",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-toggle",
              "type": {
                "text": "CustomEvent<{ open: boolean }>"
              },
              "description": "Fired when a collapsible section expands or collapses."
            }
          ],
          "attributes": [
            {
              "name": "heading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text label displayed above the group of links. Keep it short (one to three words) so the sidebar stays scannable. When omitted, links render without a heading divider.",
              "fieldName": "heading"
            },
            {
              "name": "collapsible",
              "type": {
                "text": "boolean"
              },
              "description": "When true, the section heading becomes a toggle button that expands/collapses the child links.",
              "fieldName": "collapsible",
              "default": "false"
            },
            {
              "name": "open",
              "type": {
                "text": "boolean"
              },
              "description": "Controls whether a collapsible section is expanded (true) or collapsed (false). Only relevant when collapsible is true.",
              "fieldName": "open",
              "default": "true"
            },
            {
              "name": "icon",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Name of an icon to render before the heading. Ignored when the section has no heading.",
              "fieldName": "icon"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-sidebar-section",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSidebarSection",
          "declaration": {
            "name": "ArcSidebarSection",
            "module": "src/navigation/sidebar-section.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/sidebar.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Collapsible navigation sidebar with grouped sections, heading labels, and active link\nhighlighting. Ideal for documentation sites, admin panels, and any layout that needs persistent\nvertical navigation.",
          "name": "ArcSidebar",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "sidebar"
            },
            {
              "name": "section"
            },
            {
              "name": "toggle"
            },
            {
              "name": "heading"
            },
            {
              "name": "links"
            },
            {
              "name": "link"
            },
            {
              "name": "link-icon"
            },
            {
              "name": "heading-icon"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "active",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The href of the currently active sidebar link. Used to highlight the matching link with accent styling.",
              "attribute": "active",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "width",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Width of the sidebar. Accepts any CSS length value. Unset by default, which lets the rail fill whatever container it is placed in — including `arc-app-shell`, whose own rail is 280px wide and reads `--sidebar-width`. Set this only for a standalone sidebar; inside the shell the wrapper wins, and the token is the way to move both together.",
              "attribute": "width"
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'Sidebar navigation'",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "position",
              "privacy": "public",
              "type": {
                "text": "'left' | 'right'"
              },
              "description": "Controls which side the sidebar appears on. Moves the border line to the opposite edge.",
              "attribute": "position",
              "default": "'left'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "collapsed",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, collapses the sidebar away entirely: width 0 with its contents clipped, which is the right behaviour for a rail that slides out of the way but is not an icon-only mode. For a persistent icon rail — the VS Code activity-bar shape — use `arc-rail`, which is a different component with its own labels and tooltips.",
              "attribute": "collapsed",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "glow",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Enables an accent glow effect on the active sidebar link for enhanced visual emphasis.",
              "attribute": "glow",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "description": "Fired when a sidebar link is clicked",
              "name": "arc-navigate"
            }
          ],
          "attributes": [
            {
              "name": "active",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The href of the currently active sidebar link. Used to highlight the matching link with accent styling.",
              "fieldName": "active"
            },
            {
              "name": "collapsed",
              "type": {
                "text": "boolean"
              },
              "description": "When true, collapses the sidebar away entirely: width 0 with its contents clipped, which is the right behaviour for a rail that slides out of the way but is not an icon-only mode. For a persistent icon rail — the VS Code activity-bar shape — use `arc-rail`, which is a different component with its own labels and tooltips.",
              "fieldName": "collapsed",
              "default": "false"
            },
            {
              "name": "position",
              "type": {
                "text": "'left' | 'right'"
              },
              "description": "Controls which side the sidebar appears on. Moves the border line to the opposite edge.",
              "fieldName": "position",
              "default": "'left'"
            },
            {
              "name": "width",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Width of the sidebar. Accepts any CSS length value. Unset by default, which lets the rail fill whatever container it is placed in — including `arc-app-shell`, whose own rail is 280px wide and reads `--sidebar-width`. Set this only for a standalone sidebar; inside the shell the wrapper wins, and the token is the way to move both together.",
              "fieldName": "width"
            },
            {
              "name": "glow",
              "type": {
                "text": "boolean"
              },
              "description": "Enables an accent glow effect on the active sidebar link for enhanced visual emphasis.",
              "fieldName": "glow",
              "default": "false"
            },
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "'Sidebar navigation'",
              "fieldName": "label"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-sidebar",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSidebar",
          "declaration": {
            "name": "ArcSidebar",
            "module": "src/navigation/sidebar.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/skip-link.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Accessible skip-to-content link, invisible until focused. On focus shows as accent-primary\nfilled pill with glow ring above the page.",
          "name": "ArcSkipLink",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "link"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "target",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'#main'",
              "description": "CSS selector for the element that should receive focus when the skip link is activated. Typically an ID like #main.",
              "attribute": "target"
            }
          ],
          "attributes": [
            {
              "name": "target",
              "type": {
                "text": "string"
              },
              "default": "'#main'",
              "description": "CSS selector for the element that should receive focus when the skip link is activated. Typically an ID like #main.",
              "fieldName": "target"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-skip-link",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSkipLink",
          "declaration": {
            "name": "ArcSkipLink",
            "module": "src/navigation/skip-link.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/spy-link.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Navigation anchor that highlights when its target section is in view.",
          "name": "ArcSpyLink",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "label",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "target",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "ID of the section to observe",
              "attribute": "target",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "level",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Nesting depth for visual indentation. Level 0 links render at default size; level 1+ links are indented and use a smaller font size.",
              "attribute": "level",
              "default": "0",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "target",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "ID of the section to observe",
              "fieldName": "target"
            },
            {
              "name": "level",
              "type": {
                "text": "number"
              },
              "description": "Nesting depth for visual indentation. Level 0 links render at default size; level 1+ links are indented and use a smaller font size.",
              "fieldName": "level",
              "default": "0"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-spy-link",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcSpyLink",
          "declaration": {
            "name": "ArcSpyLink",
            "module": "src/navigation/spy-link.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/stepper-nav.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Wizard navigation with back/next/skip controls and step validation gates. Steps connected by\ngradient lines with interactive routing.",
          "name": "ArcStepperNav",
          "cssParts": [
            {
              "name": "base"
            },
            {
              "name": "steps"
            },
            {
              "name": "connector"
            },
            {
              "name": "indicator"
            },
            {
              "name": "panel"
            },
            {
              "name": "controls"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "steps",
              "privacy": "public",
              "type": {
                "text": "Array<string>"
              },
              "default": "[]",
              "description": "Array of step labels displayed along the progress track.",
              "attribute": "steps"
            },
            {
              "kind": "field",
              "name": "active",
              "privacy": "public",
              "description": "Zero-based index of the currently active step. Clamped to the steps that exist, so it can never name a step the wizard does not have.",
              "type": {
                "text": "number"
              },
              "attribute": "active",
              "default": "0",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "linear",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, prevents jumping to future steps — the user must complete each step sequentially.",
              "attribute": "linear",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent<{ step: number }>"
              },
              "description": "Fired when the active step changes with detail: { step }."
            },
            {
              "name": "arc-complete",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the user confirms the final step."
            }
          ],
          "attributes": [
            {
              "name": "steps",
              "type": {
                "text": "Array<string>"
              },
              "default": "[]",
              "description": "Array of step labels displayed along the progress track.",
              "fieldName": "steps"
            },
            {
              "name": "active",
              "description": "Zero-based index of the currently active step. Clamped to the steps that exist, so it can never name a step the wizard does not have.",
              "type": {
                "text": "number"
              },
              "fieldName": "active",
              "default": "0"
            },
            {
              "name": "linear",
              "type": {
                "text": "boolean"
              },
              "description": "When true, prevents jumping to future steps — the user must complete each step sequentially.",
              "fieldName": "linear",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-stepper-nav",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcStepperNav",
          "declaration": {
            "name": "ArcStepperNav",
            "module": "src/navigation/stepper-nav.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/tab.js",
      "declarations": [
        {
          "kind": "class",
          "description": "An individual tab panel within a Tabs group. Each Tab renders a button in the tab bar and owns\nits associated content panel. Use this sub-component when you need fine-grained control over\nindividual tab behavior, such as disabling a specific tab or attaching per-tab event listeners.",
          "name": "ArcTab",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text displayed on the tab button. Keep labels concise — one or two words — to prevent the tab bar from overflowing.",
              "attribute": "label",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, the tab button is dimmed, is skipped by the arrow keys and cannot be selected by click. A disabled tab that is already selected stays visible — disabling is not a way to hide a panel.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text displayed on the tab button. Keep labels concise — one or two words — to prevent the tab bar from overflowing.",
              "fieldName": "label"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "When true, the tab button is dimmed, is skipped by the arrow keys and cannot be selected by click. A disabled tab that is already selected stays visible — disabling is not a way to hide a panel.",
              "fieldName": "disabled",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-tab",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTab",
          "declaration": {
            "name": "ArcTab",
            "module": "src/navigation/tab.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/tabs.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Tabbed content navigation with keyboard support and ARIA roles.",
          "name": "ArcTabs",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "tabs"
            },
            {
              "description": "The light that travels between tabs: the underline in the default variant, the ground behind the selection in `pills` and in vertical bars.",
              "name": "indicator"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "selected",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Zero-based index of the currently active tab. Changing this value programmatically switches the visible panel and updates ARIA attributes. Out-of-range values are clamped to the nearest valid index.",
              "attribute": "selected",
              "default": "0",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "align",
              "privacy": "public",
              "type": {
                "text": "'start' | 'center' | 'end'"
              },
              "description": "Aligns the tab list. Options: 'start', 'center', 'end'.",
              "attribute": "align",
              "default": "'start'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'underline' | 'pills'"
              },
              "description": "Visual style of the tabs. Options: 'underline', 'pills'.",
              "attribute": "variant",
              "default": "'underline'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "orientation",
              "privacy": "public",
              "type": {
                "text": "'horizontal' | 'vertical'"
              },
              "description": "Layout direction of the tab list. Use 'vertical' to place tabs in a sidebar column with the panel to the right. Arrow-key navigation automatically switches to up/down in vertical mode.",
              "attribute": "orientation",
              "default": "'horizontal'",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-change",
              "type": {
                "text": "CustomEvent"
              },
              "description": "Fired when the active tab changes"
            }
          ],
          "attributes": [
            {
              "name": "selected",
              "type": {
                "text": "number"
              },
              "description": "Zero-based index of the currently active tab. Changing this value programmatically switches the visible panel and updates ARIA attributes. Out-of-range values are clamped to the nearest valid index.",
              "fieldName": "selected",
              "default": "0"
            },
            {
              "name": "align",
              "type": {
                "text": "'start' | 'center' | 'end'"
              },
              "description": "Aligns the tab list. Options: 'start', 'center', 'end'.",
              "fieldName": "align",
              "default": "'start'"
            },
            {
              "name": "variant",
              "type": {
                "text": "'underline' | 'pills'"
              },
              "description": "Visual style of the tabs. Options: 'underline', 'pills'.",
              "fieldName": "variant",
              "default": "'underline'"
            },
            {
              "name": "orientation",
              "type": {
                "text": "'horizontal' | 'vertical'"
              },
              "description": "Layout direction of the tab list. Use 'vertical' to place tabs in a sidebar column with the panel to the right. Arrow-key navigation automatically switches to up/down in vertical mode.",
              "fieldName": "orientation",
              "default": "'horizontal'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-tabs",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTabs",
          "declaration": {
            "name": "ArcTabs",
            "module": "src/navigation/tabs.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/top-bar.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Fixed header bar that anchors every page with a brand slot on the left, an optional center\nnavigation area, and a right-aligned actions region for user controls, search, and settings.",
          "name": "ArcTopBar",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "menu-btn"
            },
            {
              "name": "content"
            },
            {
              "name": "brand"
            },
            {
              "name": "center"
            },
            {
              "name": "actions"
            },
            {
              "name": "topbar"
            }
          ],
          "slots": [
            {
              "name": "logo"
            },
            {
              "name": "subtitle"
            },
            {
              "name": "center"
            },
            {
              "name": "actions"
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "heading",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Brand text displayed in the top-left corner next to the optional logo slot. Rendered uppercase with wide letter-spacing at the wordmark size. Keep this to one or two words that identify the application.",
              "attribute": "heading"
            },
            {
              "kind": "field",
              "name": "homeHref",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'/'",
              "description": "Destination of the brand link. Defaults to `/`; set it when the app is mounted under a sub-path, or to an empty string to render the brand as plain text with no link at all.",
              "attribute": "home-href"
            },
            {
              "kind": "field",
              "name": "contained",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "null",
              "description": "Sets a max-width containment on the top bar content area. Accepts any CSS length or named size.",
              "attribute": "contained",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "mobileMenu",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'sidebar'",
              "description": "Controls the mobile menu behavior. When set to a value like \"nav\", the hamburger toggles an inline navigation panel instead of triggering sidebar toggle.",
              "attribute": "mobile-menu"
            },
            {
              "kind": "field",
              "name": "menuPosition",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'left'",
              "description": "Position of the mobile menu panel when mobile-menu is active.",
              "attribute": "menu-position"
            },
            {
              "kind": "field",
              "name": "scrolled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Reflects whether the page has scrolled past the bar's threshold. Set by the component, not by you — read it to style a scrolled state from outside, via `arc-top-bar[scrolled]`.",
              "attribute": "scrolled",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "immersive",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Renders the bar with no background, blur or border until the page is scrolled, so a hero shows through it. Requires `fixed`. Suits marketing pages whose first screen is one composed image; leave it off in an application layout, where the bar should be a fixed edge among the other panels rather than something that appears and disappears.",
              "attribute": "immersive",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "fixed",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, the bar uses position: fixed so it stays at the top of the viewport while content scrolls underneath. Automatically applied when TopBar is placed inside an AppShell. Be sure to add matching top padding to the content below to prevent overlap.",
              "attribute": "fixed",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "menuOpen",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Reflects whether the mobile hamburger menu is open. Toggling this value updates the aria-expanded attribute on the menu button. Typically managed by AppShell in response to the arc-sidebar-toggle event rather than set directly.",
              "attribute": "menuOpen",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "navAlign",
              "privacy": "public",
              "type": {
                "text": "'left' | 'center' | 'right'"
              },
              "description": "Controls the alignment of content in the center slot. Pulls nav toward the brand or actions without reordering DOM.",
              "attribute": "navAlign",
              "default": "'center'"
            }
          ],
          "events": [
            {
              "name": "eventName",
              "type": {
                "text": "CustomEvent"
              }
            },
            {
              "description": "Fired when the mobile menu toggle is clicked (sidebar mode)",
              "name": "arc-sidebar-toggle"
            },
            {
              "description": "Fired when the mobile hamburger button is clicked and mobile-menu mode is active. Use this to toggle your own mobile navigation panel.",
              "name": "arc-mobile-menu-toggle"
            }
          ],
          "attributes": [
            {
              "name": "heading",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Brand text displayed in the top-left corner next to the optional logo slot. Rendered uppercase with wide letter-spacing at the wordmark size. Keep this to one or two words that identify the application.",
              "fieldName": "heading"
            },
            {
              "name": "home-href",
              "type": {
                "text": "string"
              },
              "default": "'/'",
              "description": "Destination of the brand link. Defaults to `/`; set it when the app is mounted under a sub-path, or to an empty string to render the brand as plain text with no link at all.",
              "fieldName": "homeHref"
            },
            {
              "name": "scrolled",
              "type": {
                "text": "boolean"
              },
              "description": "Reflects whether the page has scrolled past the bar's threshold. Set by the component, not by you — read it to style a scrolled state from outside, via `arc-top-bar[scrolled]`.",
              "fieldName": "scrolled",
              "default": "false"
            },
            {
              "name": "immersive",
              "type": {
                "text": "boolean"
              },
              "description": "Renders the bar with no background, blur or border until the page is scrolled, so a hero shows through it. Requires `fixed`. Suits marketing pages whose first screen is one composed image; leave it off in an application layout, where the bar should be a fixed edge among the other panels rather than something that appears and disappears.",
              "fieldName": "immersive",
              "default": "false"
            },
            {
              "name": "fixed",
              "type": {
                "text": "boolean"
              },
              "description": "When true, the bar uses position: fixed so it stays at the top of the viewport while content scrolls underneath. Automatically applied when TopBar is placed inside an AppShell. Be sure to add matching top padding to the content below to prevent overlap.",
              "fieldName": "fixed",
              "default": "false"
            },
            {
              "name": "contained",
              "type": {
                "text": "string"
              },
              "default": "null",
              "description": "Sets a max-width containment on the top bar content area. Accepts any CSS length or named size.",
              "fieldName": "contained"
            },
            {
              "name": "menuOpen",
              "type": {
                "text": "boolean"
              },
              "description": "Reflects whether the mobile hamburger menu is open. Toggling this value updates the aria-expanded attribute on the menu button. Typically managed by AppShell in response to the arc-sidebar-toggle event rather than set directly.",
              "fieldName": "menuOpen",
              "default": "false"
            },
            {
              "name": "mobile-menu",
              "type": {
                "text": "string"
              },
              "default": "'sidebar'",
              "description": "Controls the mobile menu behavior. When set to a value like \"nav\", the hamburger toggles an inline navigation panel instead of triggering sidebar toggle.",
              "fieldName": "mobileMenu"
            },
            {
              "name": "menu-position",
              "type": {
                "text": "string"
              },
              "default": "'left'",
              "description": "Position of the mobile menu panel when mobile-menu is active.",
              "fieldName": "menuPosition"
            },
            {
              "name": "navAlign",
              "type": {
                "text": "'left' | 'center' | 'right'"
              },
              "description": "Controls the alignment of content in the center slot. Pulls nav toward the brand or actions without reordering DOM.",
              "fieldName": "navAlign",
              "default": "'center'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-top-bar",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTopBar",
          "declaration": {
            "name": "ArcTopBar",
            "module": "src/navigation/top-bar.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/tree-item.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Node within a TreeView. Can nest for sub-trees.",
          "name": "ArcTreeItem",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "items",
              "description": "Nested arc-tree-item children",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "hasChildren",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Item label text",
              "attribute": "label",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "icon",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Icon or emoji",
              "attribute": "icon"
            },
            {
              "kind": "field",
              "name": "expanded",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Expand child items",
              "attribute": "expanded",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Item label text",
              "fieldName": "label"
            },
            {
              "name": "icon",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Icon or emoji",
              "fieldName": "icon"
            },
            {
              "name": "expanded",
              "type": {
                "text": "boolean"
              },
              "description": "Expand child items",
              "fieldName": "expanded",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-tree-item",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTreeItem",
          "declaration": {
            "name": "ArcTreeItem",
            "module": "src/navigation/tree-item.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/navigation/tree-view.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Hierarchical tree structure with expandable/collapsible nodes, selection tracking, keyboard\nnavigation, and indentation guide lines.",
          "name": "ArcTreeView",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "description": "The root list. The nested lists at deeper levels are `group`.",
              "name": "tree"
            },
            {
              "description": "A nested list under an expanded branch.",
              "name": "group"
            },
            {
              "name": "item"
            },
            {
              "name": "row"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [],
          "events": [
            {
              "name": "arc-toggle",
              "type": {
                "text": "CustomEvent<{ item: { label: string, icon: string }, path: string[], expanded: boolean }>"
              },
              "description": "Fired when a tree node is expanded or collapsed. `path` is the node's label chain from the root and is what identifies it — two nodes may share a label."
            },
            {
              "name": "arc-select",
              "type": {
                "text": "CustomEvent<{ value: string, item: { label: string, icon: string }, path: string[] }>"
              },
              "description": "Fired when a tree item is selected. `path` is the node's label chain from the root, matching `arc-toggle`."
            }
          ],
          "attributes": [],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-tree-view",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTreeView",
          "declaration": {
            "name": "ArcTreeView",
            "module": "src/navigation/tree-view.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/anchor-adoption.js",
      "declarations": [
        {
          "kind": "function",
          "name": "isLoneSlottedAnchor",
          "parameters": [
            {
              "name": "slot",
              "type": {
                "text": "HTMLSlotElement"
              }
            }
          ],
          "description": "True when a slot's only meaningful content is a single `<a>`.\n\nDeliberately strict: `<arc-button>Read <a href=\"/x\">this</a></arc-button>` is\nan incidental inline link, not a link button, and must stay on the normal\nrender path. Checking assigned *nodes* rather than assigned elements is what\nmakes that distinction — `assignedElements()` drops the surrounding text and\nwould report a lone anchor.",
          "return": {
            "type": {
              "text": "boolean"
            }
          }
        },
        {
          "kind": "function",
          "name": "loneAnchorChild",
          "parameters": [
            {
              "name": "host",
              "type": {
                "text": "Element"
              }
            }
          ],
          "description": "The lone anchor child of a light-DOM carrier element, if there is one.\n\nUsed by the nav carriers (arc-nav-item, arc-breadcrumb-item,\narc-sidebar-link), which hold data their parent reads rather than rendering\na control themselves. They have no slot to inspect at the time the parent\nasks for `href`/`label`, so this walks child nodes directly.",
          "return": {
            "type": {
              "text": "HTMLAnchorElement | null"
            }
          }
        },
        {
          "kind": "function",
          "name": "resolveCarrierHref",
          "parameters": [
            {
              "name": "host",
              "type": {
                "text": "Element"
              }
            },
            {
              "name": "explicitHref",
              "type": {
                "text": "string"
              }
            }
          ],
          "description": "Resolve a carrier's destination, preferring the explicit attribute.\n\nReturns the anchor's literal `href` attribute rather than the resolved\n`.href` property, so a relative path stays relative — the parent renders it\nback into an `<a>` and the browser resolves it there.",
          "return": {
            "type": {
              "text": "string"
            }
          }
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "isLoneSlottedAnchor",
          "declaration": {
            "name": "isLoneSlottedAnchor",
            "module": "src/shared/anchor-adoption.js"
          }
        },
        {
          "kind": "js",
          "name": "loneAnchorChild",
          "declaration": {
            "name": "loneAnchorChild",
            "module": "src/shared/anchor-adoption.js"
          }
        },
        {
          "kind": "js",
          "name": "resolveCarrierHref",
          "declaration": {
            "name": "resolveCarrierHref",
            "module": "src/shared/anchor-adoption.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/contrast.js",
      "declarations": [
        {
          "kind": "function",
          "name": "warnLowContrast",
          "parameters": [
            {
              "name": "host",
              "description": "The component, named in the message.",
              "type": {
                "text": "Element"
              }
            },
            {
              "name": "el",
              "description": "The element whose text to measure.",
              "type": {
                "text": "Element | null | undefined"
              }
            },
            {
              "name": "note",
              "description": "What the consumer set, e.g. the color they passed.",
              "optional": true,
              "type": {
                "text": "string"
              }
            }
          ],
          "description": "Warn once if `el`'s text does not reach AA against what is behind it."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "warnLowContrast",
          "declaration": {
            "name": "warnLowContrast",
            "module": "src/shared/contrast.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/date-names.js",
      "declarations": [
        {
          "kind": "function",
          "name": "defaultLocale",
          "description": "The locale a component should use when it has not been told one."
        },
        {
          "kind": "function",
          "name": "monthNames",
          "parameters": [
            {
              "name": "style",
              "default": "'long'",
              "optional": true,
              "type": {
                "text": "'long' | 'short' | 'narrow'"
              }
            },
            {
              "name": "locale",
              "default": "defaultLocale()",
              "optional": true,
              "type": {
                "text": "string"
              }
            }
          ],
          "description": "Month names.",
          "return": {
            "type": {
              "text": "string[]"
            }
          }
        },
        {
          "kind": "function",
          "name": "weekdayNames",
          "parameters": [
            {
              "name": "style",
              "default": "'short'",
              "optional": true,
              "type": {
                "text": "'long' | 'short' | 'narrow'"
              }
            },
            {
              "name": "locale",
              "default": "defaultLocale()",
              "optional": true,
              "type": {
                "text": "string"
              }
            },
            {
              "name": "firstDay",
              "default": "firstDayOfWeek(locale)",
              "description": "1 = Monday … 7 = Sunday. Defaults to the locale's.",
              "optional": true,
              "type": {
                "text": "number"
              }
            }
          ],
          "description": "Weekday names, ordered from this locale's first day of the week.",
          "return": {
            "type": {
              "text": "string[]"
            }
          }
        },
        {
          "kind": "function",
          "name": "firstDayOfWeek",
          "parameters": [
            {
              "name": "locale",
              "default": "defaultLocale()",
              "optional": true,
              "type": {
                "text": "string"
              }
            }
          ],
          "description": "The locale's first day of the week, 1 = Monday … 7 = Sunday."
        },
        {
          "kind": "function",
          "name": "weekdayOffset",
          "parameters": [
            {
              "name": "date",
              "type": {
                "text": "Date"
              }
            },
            {
              "name": "firstDay",
              "description": "1 = Monday … 7 = Sunday.",
              "type": {
                "text": "number"
              }
            }
          ],
          "description": "How far into the week a date sits, counting from `firstDay`.\n\nThis is the number of blank cells a month grid needs before its first day.\nDoing it here rather than in each calendar is the point: `date.getDay()` is\nSunday-based, and every component that mixed it with a non-Sunday first day\ngot the offset wrong.",
          "return": {
            "type": {
              "text": "number"
            }
          }
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "defaultLocale",
          "declaration": {
            "name": "defaultLocale",
            "module": "src/shared/date-names.js"
          }
        },
        {
          "kind": "js",
          "name": "monthNames",
          "declaration": {
            "name": "monthNames",
            "module": "src/shared/date-names.js"
          }
        },
        {
          "kind": "js",
          "name": "weekdayNames",
          "declaration": {
            "name": "weekdayNames",
            "module": "src/shared/date-names.js"
          }
        },
        {
          "kind": "js",
          "name": "firstDayOfWeek",
          "declaration": {
            "name": "firstDayOfWeek",
            "module": "src/shared/date-names.js"
          }
        },
        {
          "kind": "js",
          "name": "weekdayOffset",
          "declaration": {
            "name": "weekdayOffset",
            "module": "src/shared/date-names.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/dismiss-controller.js",
      "declarations": [
        {
          "kind": "class",
          "description": "DismissController — shared reactive controller for \"the user has left\".\n\nWas `ClickOutsideController`, and the rename is the point of finding #60. An\noverlay is abandoned in two ways, not one:\n\n  - a pointer lands somewhere else\n  - focus moves somewhere else\n\nThe old controller answered only the first, by name and by design. Six\ncomponents built on it, and the three that *open on focus* — arc-multi-select,\narc-combobox, arc-tag-input — never closed for a keyboard user at all: tab\naway and the dropdown stayed open over the rest of the page, with the control\nstill wearing its focus ring. Nobody noticed because the pointer path, the one\nyou test by hand, worked perfectly.\n\nThat is the same shape as finding #55: a shared layer covering part of a\nlifecycle, and every consumer inheriting the gap. So the fix is here rather\nthan an `@focusout` handler in each component — and both halves are on by\ndefault, because the failure mode was precisely that a component *believed* it\nhad dismissal handled.\n\n  this._dismiss = new DismissController(this, {\n    onDismiss: () => this._close(),\n    when: () => this._open,          // optional; checked per event\n  });\n  // in updated(): open ? this._dismiss.activate() : this._dismiss.deactivate()\n\n## Why pointerdown, and why no requestAnimationFrame\n\nComponents that hand-rolled this listened for `click` and had to defer the\nsubscription by a frame, or the very click that opened them closed them again.\npointerdown avoids that entirely: a click-triggered open happens on pointerup,\nso by the time the listener exists the opening gesture is already over and the\nnext pointerdown is a genuinely new interaction.\n\n## focusout has two cases, and only one of them is an answer\n\nWhen `relatedTarget` is a real element, focus genuinely moved and it says\nexactly where — decide immediately.\n\nWhen it is **null**, nothing has been decided yet, and the naive reading of\nthat as \"the user left\" is wrong in both directions at once:\n\n  - **A re-render destroyed the focused node.** These panels rebuild their own\n    contents constantly — arc-date-picker switching from days to months throws\n    away the button you just clicked — so focus falls to `<body>` for an\n    instant before the component puts it back. Dismissing there closes the\n    panel on its own navigation. This is not hypothetical: it broke 16 tests\n    across date-picker, date-range-picker and menubar the first time this\n    controller shipped with a synchronous null check.\n  - **The window lost focus.** Alt-tab or devtools fires focusout with a null\n    `relatedTarget` while `document.activeElement` stays put, so every open\n    panel would collapse on blur and still be collapsed on return.\n\nBoth were tried and rejected as guesses. Deferring a task and re-reading\n`document.activeElement` fixes the window-blur case and *not* the re-render\none, because a panel that orphans focus without restoring it leaves\n`activeElement` on `<body>` indefinitely — arc-date-picker's mode switch does\nexactly that, and it stayed broken.\n\nSo the focus half simply declines to answer when `relatedTarget` is null. It\nloses nothing: the only case it uniquely sees is focus moving to a real\nelement elsewhere on the page, which is the keyboard tab-away that started\nfinding #60, and `relatedTarget` names it precisely. Every other departure is\na pointer landing somewhere, which the pointer half already has. The cost is\nthat tabbing into browser chrome does not dismiss — which is arguably right,\nsince coming back should find the panel where you left it.\n\nShadow DOM needs no special handling: for a listener on the host,\n`relatedTarget` retargets to the host itself when focus moves *within* the\nhost's shadow tree, and `Node.contains` counts a node as containing itself.\n`document.activeElement` likewise reports the host for anything inside it.",
          "name": "DismissController",
          "members": [
            {
              "kind": "method",
              "name": "activate"
            },
            {
              "kind": "method",
              "name": "deactivate"
            },
            {
              "kind": "method",
              "name": "hostConnected",
              "description": "Re-arm after a reparent — finding #72, which is #55 and #64 a third time.\n\nEvery consumer activates from `updated()`, keyed on an open-state *change*.\nMoving an element changes no state and schedules no update, so before this\nexisted `hostDisconnected` was a one-way door: an overlay that was open\nwhen it moved came back rendering normally, answering every property, and\npermanently undismissable by pointer *and* focus.\n\nActivation is state, not structure, so this restores what was torn down\nrather than arming unconditionally — a closed panel must stay inert across\na move, or every reparent re-arms every dismissable component on the page."
            },
            {
              "kind": "method",
              "name": "hostDisconnected"
            },
            {
              "kind": "field",
              "name": "host",
              "default": "host"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "DismissController",
          "declaration": {
            "name": "DismissController",
            "module": "src/shared/dismiss-controller.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/editing-target.js",
      "declarations": [
        {
          "kind": "function",
          "name": "isEditingNode",
          "parameters": [
            {
              "name": "node",
              "type": {
                "text": "EventTarget | null | undefined"
              }
            }
          ],
          "description": "True when `node` is an element the user types or selects text into.",
          "return": {
            "type": {
              "text": "boolean"
            }
          }
        },
        {
          "kind": "function",
          "name": "isEditingTarget",
          "parameters": [
            {
              "name": "eventOrNode",
              "type": {
                "text": "Event | EventTarget | null | undefined"
              }
            }
          ],
          "description": "True when a keyboard event originated in a text-entry element, looking through\nshadow boundaries.\n\nAccepts an event or a node, so it is usable both from an event handler and\nagainst `document.activeElement`.",
          "return": {
            "type": {
              "text": "boolean"
            }
          }
        },
        {
          "kind": "function",
          "name": "setEditingMarker",
          "parameters": [
            {
              "name": "host",
              "type": {
                "text": "HTMLElement"
              }
            },
            {
              "name": "editing",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "description": "Marks `host` while one of its shadow-root controls holds focus, so code\noutside can identify it with a selector.\n\nWired by the input components themselves; consumers do not call this."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "isEditingNode",
          "declaration": {
            "name": "isEditingNode",
            "module": "src/shared/editing-target.js"
          }
        },
        {
          "kind": "js",
          "name": "isEditingTarget",
          "declaration": {
            "name": "isEditingTarget",
            "module": "src/shared/editing-target.js"
          }
        },
        {
          "kind": "js",
          "name": "setEditingMarker",
          "declaration": {
            "name": "setEditingMarker",
            "module": "src/shared/editing-target.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/focus-trap.js",
      "declarations": [
        {
          "kind": "function",
          "name": "collectFocusable",
          "parameters": [
            {
              "name": "node"
            },
            {
              "name": "out",
              "default": "[]"
            }
          ],
          "description": "Collect focusable elements under `node` in composed-tree order.\nWalks into shadow roots and follows slot assignments."
        },
        {
          "kind": "function",
          "name": "deepActiveElement",
          "description": "The actually-focused element, descending through nested shadow roots."
        },
        {
          "kind": "function",
          "name": "trapTabKey",
          "parameters": [
            {
              "name": "e"
            },
            {
              "name": "container"
            }
          ],
          "description": "Handle a Tab keydown so focus cycles within `container`.\nCall from the overlay's keydown handler when open."
        },
        {
          "kind": "function",
          "name": "focusFirst",
          "parameters": [
            {
              "name": "container"
            }
          ],
          "description": "Focus the first focusable element under `container`, else the container."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "collectFocusable",
          "declaration": {
            "name": "collectFocusable",
            "module": "src/shared/focus-trap.js"
          }
        },
        {
          "kind": "js",
          "name": "deepActiveElement",
          "declaration": {
            "name": "deepActiveElement",
            "module": "src/shared/focus-trap.js"
          }
        },
        {
          "kind": "js",
          "name": "trapTabKey",
          "declaration": {
            "name": "trapTabKey",
            "module": "src/shared/focus-trap.js"
          }
        },
        {
          "kind": "js",
          "name": "focusFirst",
          "declaration": {
            "name": "focusFirst",
            "module": "src/shared/focus-trap.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/form-control-mixin.js",
      "declarations": [
        {
          "kind": "mixin",
          "description": "",
          "name": "FormControlMixin",
          "members": [
            {
              "kind": "field",
              "name": "formAssociated",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true"
            },
            {
              "kind": "field",
              "name": "properties",
              "type": {
                "text": "object"
              },
              "static": true,
              "default": "{ // flag(), unlike `disabled`. The exclusion in props.js is specifically // about form-associated *platform* semantics: a `disabled` content // attribute that is merely present makes the element actually disabled // per the HTML spec, and formDisabledCallback assigns the property back, // so no converter can win. Neither of these is platform-mapped — // `required` is enforced by _computeValidity() below and `readonly` by // each component's own interaction handlers — so the stock converter buys // nothing here and costs the usual bug: `required=\"false\"` read as true, // blocking submission of a form the author meant to leave optional. // Finding #48's shape, across all 26 form controls at once. required: flag(false), readonly: flag(false), }",
              "description": "Lit merges static properties up the prototype chain, so every consumer\ngets these without declaring them. `required` participates in constraint\nvalidation below; `readonly` reflects for styling and is enforced by\neach component's interaction handlers (the mixin can't know which\ngestures mutate state)."
            },
            {
              "kind": "field",
              "name": "autoValidates",
              "type": {
                "text": "boolean"
              },
              "static": true,
              "default": "true",
              "description": "Components that run their own constraint-validation logic (pattern\nchecks, range checks) opt out of the automatic required sync by\noverriding this to false, and own the whole validity flag set instead."
            },
            {
              "kind": "method",
              "name": "formDisabledCallback",
              "parameters": [
                {
                  "name": "disabled"
                }
              ]
            },
            {
              "kind": "method",
              "name": "formResetCallback"
            },
            {
              "kind": "method",
              "name": "formStateRestoreCallback",
              "parameters": [
                {
                  "name": "state"
                }
              ]
            },
            {
              "kind": "field",
              "name": "form",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "validity",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "validationMessage",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "checkValidity",
              "description": "Whether the control currently satisfies its constraints, per the native\nconstraint-validation API. Fires `invalid` on the element when it does\nnot, and reports nothing to the user.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              }
            },
            {
              "kind": "method",
              "name": "reportValidity",
              "description": "As checkValidity(), but also shows the browser's validation message\nagainst the control when it fails.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              }
            },
            {
              "kind": "field",
              "name": "required",
              "privacy": "public",
              "attribute": "required",
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            },
            {
              "kind": "field",
              "name": "readonly",
              "privacy": "public",
              "attribute": "readonly",
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "required",
              "fieldName": "required",
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "readonly",
              "fieldName": "readonly",
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "parameters": [
            {
              "name": "superClass"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "FormControlMixin",
          "declaration": {
            "name": "FormControlMixin",
            "module": "src/shared/form-control-mixin.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/fuzzy-match.js",
      "declarations": [
        {
          "kind": "function",
          "name": "matchTerm",
          "parameters": [
            {
              "name": "term"
            },
            {
              "name": "text"
            },
            {
              "name": "{ prose = false }",
              "default": "{}"
            }
          ],
          "description": "Score one term against one string.\n\n`prose` turns off subsequence matching, and it matters more than it sounds.\nSubsequence is the right tool for a name — \"cmdpal\" should find \"Command\nPalette\" — and actively wrong for a paragraph, because in 180 characters of\nEnglish almost any four letters appear in order somewhere. Left on, the query\n\"override a token\" matched 375 of 1,377 indexed sections, ranked prop tables\nabove the theming guide, and highlighted a scatter of single letters that\nread as a rendering bug. Long text has to be matched on contiguous runs.",
          "return": {
            "type": {
              "text": "{score: number, indices: number[]}|null"
            }
          }
        },
        {
          "kind": "function",
          "name": "matchItem",
          "parameters": [
            {
              "name": "query",
              "type": {
                "text": "string"
              }
            },
            {
              "name": "fields",
              "type": {
                "text": "{label?: string, keywords?: string, description?: string}"
              }
            }
          ],
          "description": "Score a query against an item's searchable fields.\n\nThe label is weighted above the rest: an item whose *label* matches should\nbeat one where the same text turned up in prose, however well it scored\nthere. Weighting by multiplication rather than addition keeps that true\nacross tiers rather than only within one.\n\nPositions come back per rendered field, not as one list. Both the label and\nthe description are shown, and a result has to be able to say which of them\nthe query actually hit — a content result that lights up nothing has the same\nproblem as no highlight at all: the reader cannot see why it is in the list.\n`keywords` gets no positions because it is never displayed.",
          "return": {
            "type": {
              "text": "{score: number, label: number[], description: number[]}|null"
            }
          }
        },
        {
          "kind": "function",
          "name": "snippetAround",
          "parameters": [
            {
              "name": "text"
            },
            {
              "name": "indices"
            },
            {
              "name": "width",
              "default": "120"
            }
          ],
          "description": "Window a long string down to the part worth showing, around its first match.\n\nA section snippet is a couple of hundred characters and the match is often\nnot in the first forty, so showing the head of the string shows a result\nwhose relevance is invisible. This centres the window on the first hit and\nre-bases the positions onto the returned text, so highlighting still lines up.\n\nCuts on word boundaries where there is one nearby — a snippet starting\nmid-word reads as damaged rather than as trimmed.",
          "return": {
            "type": {
              "text": "{text: string, indices: number[]}"
            }
          }
        },
        {
          "kind": "function",
          "name": "highlightRuns",
          "parameters": [
            {
              "name": "text"
            },
            {
              "name": "indices"
            }
          ],
          "description": "Split a string into alternating unmatched/matched runs for rendering.\n\nReturns `[{text, matched}]` rather than markup so the caller decides the\nelement — the palette wraps matches in <mark>, and a consumer templating this\ndifferently is not forced through innerHTML."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "matchTerm",
          "declaration": {
            "name": "matchTerm",
            "module": "src/shared/fuzzy-match.js"
          }
        },
        {
          "kind": "js",
          "name": "matchItem",
          "declaration": {
            "name": "matchItem",
            "module": "src/shared/fuzzy-match.js"
          }
        },
        {
          "kind": "js",
          "name": "snippetAround",
          "declaration": {
            "name": "snippetAround",
            "module": "src/shared/fuzzy-match.js"
          }
        },
        {
          "kind": "js",
          "name": "highlightRuns",
          "declaration": {
            "name": "highlightRuns",
            "module": "src/shared/fuzzy-match.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/hydrate-images.js",
      "declarations": [
        {
          "kind": "function",
          "name": "hydrateImages",
          "parameters": [
            {
              "name": "host",
              "description": "Component that renders `<img>` and gates paint on its load.",
              "type": {
                "text": "LitElement"
              }
            }
          ],
          "description": "hydrate-images.js — deliver the `load` that declarative shadow DOM already spent.\n\nThe sibling of hydrate-slots.js, and the same shape of problem: an event the\ncomponent is listening for has already happened by the time it can listen.\n\nEvery image component here paints in two steps — the `<img>` starts at\n`opacity: 0` (or `visibility: hidden`) behind a shimmer, and the `load`\nhandler stores `_loaded`/`_state` and fades it in. Client-side the element is\ncreated by Lit with its listener already attached, so the event always\narrives.\n\nServer-rendered, the parser creates that `<img>` from the declarative shadow\nroot and starts fetching immediately — a display:none `<dialog>` does not\nstop it — while the listener does not exist until the hydrate bundle runs.\nA cached, small or preloaded image finishes first, `load` fires into nothing,\nand the flag never flips: arc-image and arc-avatar hold a transparent picture\nunder a shimmer that never stops, arc-lightbox opens onto its chrome with no\nphotograph in it, and arc-image-cropper keeps every control disabled. Nothing\nerrors, and it is timing-dependent, so it reads as flaky rather than broken —\nnavigating to another image and back re-keys the element, Lit builds that one,\nand it works.\n\nLike hydrateSlots, this dispatches the event the component was already\nlistening for rather than calling its handler: one contract for four\ncomponents, and a handler that changes shape keeps working. Handlers are\nread-and-store, so a second `load` for an image that also fires its own is a\nno-op.\n\nA complete image with pixels in it is unambiguous, and says so synchronously.\nThe 0×0 case is the one that needs `decode()`: an image that failed measures\n0×0, but so does a sizeless SVG that loaded perfectly well, and calling that\nan error would send every one of them to the fallback.\n\nCall from `connectedCallback`, which is where the parser's shadow root can\nstill be told apart from one Lit is about to build."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "hydrateImages",
          "declaration": {
            "name": "hydrateImages",
            "module": "src/shared/hydrate-images.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/hydrate-slots.js",
      "declarations": [
        {
          "kind": "function",
          "name": "hydrateSlots",
          "parameters": [
            {
              "name": "host",
              "description": "Component whose first render just completed.",
              "type": {
                "text": "LitElement"
              }
            }
          ],
          "description": "hydrate-slots.js — deliver the slotchange that declarative shadow DOM eats.\n\nUnder DSD the parser attaches the shadow root and assigns the light-DOM\nchildren to their slots before any script runs. The element then upgrades\nand Lit adopts that tree rather than constructing it, so no new slot element is\ncreated and no assignment ever changes — and `slotchange`, which fires on\nassignment changes, never fires at all.\n\nComponents that mirror their children into their own markup and hide the\noriginals depend on that event for their content. Client-side they build\ntheir own shadow root, the slot is new, the event arrives, everything works\n— which is also why no test caught it. Server-rendered, they upgrade with\nnothing and render an empty mirror over hidden children: arc-segmented-control\nas an 8px sliver, arc-navigation-menu as a top bar with no navigation.\n\nDispatching the event the component was already listening for is deliberately\ndumber than calling its reader directly: there is one contract here, not one\nper component, and a handler that changes shape keeps working. Handlers must\nbe idempotent — they are read-and-store, and re-reading the same assignment\nis a no-op — which they are, since a real slotchange can fire any number of\ntimes for reasons unrelated to hydration.\n\nEnforced by scripts/checks/slot-hydration.js: a component that hides its slot\nhost and reads only on slotchange fails the build."
        },
        {
          "kind": "function",
          "name": "notifyOwner",
          "parameters": [
            {
              "name": "child",
              "description": "The element whose state changed.",
              "type": {
                "text": "Element"
              }
            },
            {
              "name": "changed",
              "description": "Lit's changed-properties map.",
              "type": {
                "text": "Map<string, unknown>"
              }
            },
            {
              "name": "names",
              "description": "Properties the owner renders from.",
              "type": {
                "text": "string[]"
              }
            }
          ],
          "description": "Tell the component that renders this element that its state moved.\n\nThe other half of the same problem this file is about. A component that\nmirrors its light-DOM children into its own markup reads their properties at\n*its* render time — `arc-tabs` reads `label` and `disabled` off its arc-tab\nchildren, `arc-segmented-control` reads `disabled` off its arc-options,\n`arc-context-menu` reads `label` off its arc-menu-items. Those children are\nlight-DOM siblings, not reactive inputs of the owner, so changing one repaints\nnothing: the tab stays clickable after being disabled, the menu row keeps its\nold text.\n\nIt was found three times in one pass (findings #4, #6 and #32) and is the\nsame three lines each time, so it lives here rather than in three components.\n\nGuarded on the previous value being **defined**, which is the part that is\neasy to get wrong: on an element's first update every entry's old value is\n`undefined`, and asking the owner to re-render then would add a second render\nper child on every mount — during the owner's own render, at that."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "hydrateSlots",
          "declaration": {
            "name": "hydrateSlots",
            "module": "src/shared/hydrate-slots.js"
          }
        },
        {
          "kind": "js",
          "name": "notifyOwner",
          "declaration": {
            "name": "notifyOwner",
            "module": "src/shared/hydrate-slots.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/listbox-controller.js",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "ListboxController",
          "members": [
            {
              "kind": "field",
              "name": "activeIndex",
              "description": "The active (virtually focused) option index, or -1 for none.",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "isDisabled",
              "parameters": [
                {
                  "name": "index"
                }
              ],
              "description": "Whether the option at `index` refuses selection."
            },
            {
              "kind": "field",
              "name": "activeDescendantId",
              "description": "The value for `aria-activedescendant` on the focused control, or an empty\nstring when nothing is active. Empty rather than absent because a stale id\npointing at a removed option is worse than none — assistive technology\nannounces nothing at all.",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "setActive",
              "parameters": [
                {
                  "name": "index"
                }
              ],
              "description": "Move virtual focus, and queue a scroll so the option stays visible."
            },
            {
              "kind": "method",
              "name": "reset",
              "description": "Clear virtual focus — on close, or when the option set changes wholesale."
            },
            {
              "kind": "method",
              "name": "clampToCount",
              "description": "Keep the active index inside the current option set.\n\nCall after the options change — filtering a combobox down to fewer items\nthan the active index would otherwise leave `aria-activedescendant` pointing\nat an option that no longer exists."
            },
            {
              "kind": "method",
              "name": "handleKeydown",
              "parameters": [
                {
                  "name": "e",
                  "type": {
                    "text": "KeyboardEvent"
                  }
                }
              ],
              "description": "Handle a listbox navigation key.",
              "return": {
                "type": {
                  "text": "boolean"
                }
              }
            },
            {
              "kind": "method",
              "name": "hostUpdated",
              "description": "Scroll the active option into view after the render that marked it active.\n\n`block: 'nearest'` so an option already on screen doesn't yank the list, and\nscoped to the listbox: scrollIntoView on an element inside a top-layer panel\nwould otherwise be free to scroll the page behind it."
            },
            {
              "kind": "method",
              "name": "hostDisconnected"
            },
            {
              "kind": "field",
              "name": "host",
              "default": "host"
            },
            {
              "kind": "field",
              "name": "opts",
              "default": "opts"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ListboxController",
          "declaration": {
            "name": "ListboxController",
            "module": "src/shared/listbox-controller.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/menu-divider.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A visual separator between groups of menu items.",
          "name": "ArcMenuDivider",
          "slots": [],
          "members": [],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-menu-divider",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcMenuDivider",
          "declaration": {
            "name": "ArcMenuDivider",
            "module": "src/shared/menu-divider.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/menu-item.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A single action entry inside the context menu.",
          "name": "ArcMenuItem",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "displayLabel",
              "description": "The text to draw.\n\n`label` was documented as a prop and implemented as a getter over\ntextContent with no setter and no attribute, so\n`<arc-menu-item label=\"Cut\"></arc-menu-item>` rendered a blank item —\nsilently, and the six generated wrappers exposed a writable `label` that\ndid nothing (finding #32). It is a real property now; the text-content form\nstays the fallback, so every existing consumer is unaffected.",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "selectionValue",
              "description": "What arc-select reports. Falls back to the label so an item that never sets\n`value` behaves as it always did.",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "label",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Display text for the menu item. Settable, and falls back to the element's text content when unset — `<arc-menu-item label=\"Cut\">` and `<arc-menu-item>Cut</arc-menu-item>` are equivalent.",
              "attribute": "label"
            },
            {
              "kind": "field",
              "name": "shortcut",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Keyboard shortcut hint displayed on the right side.",
              "attribute": "shortcut",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "icon",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Name of the icon to display before the label.",
              "attribute": "icon"
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Stable identifier carried on the arc-select detail. Defaults to the label, which is fine until two items share one — give anything a handler must act on its own value rather than matching against display text.",
              "attribute": "value"
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Disables the item, preventing interaction.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "label",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Display text for the menu item. Settable, and falls back to the element's text content when unset — `<arc-menu-item label=\"Cut\">` and `<arc-menu-item>Cut</arc-menu-item>` are equivalent.",
              "fieldName": "label"
            },
            {
              "name": "shortcut",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Keyboard shortcut hint displayed on the right side.",
              "fieldName": "shortcut"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "Disables the item, preventing interaction.",
              "fieldName": "disabled",
              "default": "false"
            },
            {
              "name": "icon",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Name of the icon to display before the label.",
              "fieldName": "icon"
            },
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Stable identifier carried on the arc-select detail. Defaults to the label, which is fine until two items share one — give anything a handler must act on its own value rather than matching against display text.",
              "fieldName": "value"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-menu-item",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcMenuItem",
          "declaration": {
            "name": "ArcMenuItem",
            "module": "src/shared/menu-item.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/option.js",
      "declarations": [
        {
          "kind": "function",
          "name": "isOptionDisabled",
          "parameters": [
            {
              "name": "option",
              "type": {
                "text": "Element | null | undefined"
              }
            }
          ],
          "description": "Whether an `arc-option` element refuses selection.\n\nShared because all four consumers need the same answer and all four had the\nsame wrong one — they read the *group's* `disabled` and never the option's\n(finding #6). Reads the attribute as well as the property: on the slotchange\nthat builds a listbox an arc-option may not have upgraded yet, and an\nun-upgraded element has no `disabled` property at all.",
          "return": {
            "type": {
              "text": "boolean"
            }
          }
        },
        {
          "kind": "class",
          "description": "Individual option element slotted into the segmented control. The `value` attribute identifies\nthe option and the text content becomes the label.\n\nAlso used inside Select and MultiSelect, where each option provides a value for form submission\nand its text content becomes the label shown in the dropdown.",
          "name": "ArcOption",
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "label",
              "description": "Expose text content as label",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The value identifier for this option, used to match against the parent control value.",
              "attribute": "value",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "disabled",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "When true, dims this option and prevents it from being selected.",
              "attribute": "disabled",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "selected",
              "privacy": "public",
              "attribute": "selected",
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The value identifier for this option, used to match against the parent control value.",
              "fieldName": "value"
            },
            {
              "name": "disabled",
              "type": {
                "text": "boolean"
              },
              "description": "When true, dims this option and prevents it from being selected.",
              "fieldName": "disabled",
              "default": "false"
            },
            {
              "name": "selected",
              "fieldName": "selected",
              "default": "false",
              "type": {
                "text": "boolean"
              }
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-option",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "isOptionDisabled",
          "declaration": {
            "name": "isOptionDisabled",
            "module": "src/shared/option.js"
          }
        },
        {
          "kind": "js",
          "name": "ArcOption",
          "declaration": {
            "name": "ArcOption",
            "module": "src/shared/option.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/overlay-controller.js",
      "declarations": [
        {
          "kind": "class",
          "description": "OverlayController — a modal overlay on the platform's `<dialog>`.\n\nReplaces `OverlayMixin`, and V4-PLAN 4.4 makes the change for two separate\nreasons that happen to have the same fix.\n\n## The mechanism reason\n\nThe mixin did its work in an `updated()` override — the exact pattern\n`props.js`'s docstring rejects, and for the reason recorded there: a hook\nonly runs if every component overriding the same method remembers to call\n`super`. It also could not see a reparent, because moving an element changes\nno property and schedules no update, so `connectedCallback` had to re-arm by\nhand (finding #73, and #55/#64/#72 before it). A controller's hooks run\nregardless of what the host overrides, and `hostConnected` is not a special\ncase bolted on afterwards.\n\n## The platform reason, which is the larger one\n\nFive components hand-rolled what a modal `<dialog>` does natively, and every\none of those hand-rolled pieces has a failure mode the platform does not:\n\n| hand-rolled                        | what `showModal()` gives                |\n| ---------------------------------- | --------------------------------------- |\n| `trapTabKey` on a keydown listener | the background is genuinely inert — not |\n|                                    | just untabbable, but unclickable and    |\n|                                    | unreachable by a screen reader's own    |\n|                                    | navigation, which a Tab trap never was  |\n| `focusFirst(panel)`                | focus placed per spec, honouring        |\n|                                    | `autofocus`, delegatesFocus and slotted |\n|                                    | content                                 |\n| `__previousFocus` + restore        | restored by the browser, and correctly  |\n|                                    | when the previous element has since     |\n|                                    | moved or been re-rendered               |\n| `Escape` on a document listener    | the `cancel` event, which cannot be     |\n|                                    | missed by a stopped-propagation keydown |\n| `z-index: var(--z-modal)`          | the top layer: no stacking context, no  |\n|                                    | `overflow: hidden` ancestor, no ladder  |\n\nThe Tab-trap row is the one worth reading twice. `trapTabKey` moved focus\nback into the panel when Tab would have left it, which is a *keyboard*\nbehaviour; it did nothing about a screen reader user browsing the background\nwith virtual-cursor keys, or about a click landing on a button behind the\nscrim. `inert` is what makes those true, and modal `<dialog>` applies it to\neverything else in the document without the library maintaining a list.\n\n## What is still ours\n\n**Scroll lock.** A modal dialog blocks interaction with the page behind it\nbut does not stop it scrolling, so `scroll-lock.js` stays, per-owner as\nbefore.\n\n**The dismissal decision.** `cancel` is preventDefault-ed and routed to the\nhost's `onRequestClose` rather than allowed to close the dialog, because\nwhether Escape closes an overlay is the component's policy: `arc-modal`\nrefuses when `dismissible` is false, and every consumer can veto through the\ncancelable `arc-close` event. Letting the browser close it and reopening\nafterwards would flash.\n\n## Usage\n\n    this._overlay = new OverlayController(this, {\n      dialog: () => this.shadowRoot?.querySelector('dialog'),\n      isOpen: () => this.open,\n      onRequestClose: () => this._close(),\n    });\n\nThe host renders a `<dialog>` and nothing else about opening: no `open`\nattribute in the template, no `showModal` call. The controller reconciles\nafter every render, which is also what makes it correct across a reparent.",
          "name": "OverlayController",
          "members": [
            {
              "kind": "method",
              "name": "hostUpdated",
              "description": "Reconcile after every render.\n\nEvery render rather than on an `open` change, because the dialog element\nitself can be replaced by a re-render while `open` never changes, and a\nfresh `<dialog>` is closed no matter what the host thinks. Both calls\nbelow are no-ops when the state already matches, so the common case costs\ntwo property reads."
            },
            {
              "kind": "method",
              "name": "hostConnected",
              "description": "Reopen after a reparent.\n\nMoving an element in the DOM closes any `<dialog>` inside it — the top\nlayer is a property of the connection, not of the element — and changes no\nproperty, so nothing would schedule the update that `hostUpdated` needs.\nThis is the same finding (#73) the mixin's `connectedCallback` was added\nfor, and it is still a real case; what changed is that the controller has a\nhook for it rather than an override."
            },
            {
              "kind": "method",
              "name": "hostDisconnected"
            },
            {
              "kind": "field",
              "name": "host",
              "default": "host"
            },
            {
              "kind": "field",
              "name": "opts",
              "default": "opts"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "OverlayController",
          "declaration": {
            "name": "OverlayController",
            "module": "src/shared/overlay-controller.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/position-controller.js",
      "declarations": [
        {
          "kind": "class",
          "description": "",
          "name": "PositionController",
          "members": [
            {
              "kind": "field",
              "name": "placement",
              "description": "The resolved side the panel is currently on. Null while hidden.",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "show",
              "description": "Promote the panel to the top layer and position it.\n\nIdempotent: calling it while shown just repositions, which is what a\ncomponent wants when its content changes size (an option list filtering\ndown, a picker switching months)."
            },
            {
              "kind": "method",
              "name": "hide",
              "description": "Demote the panel out of the top layer and stop tracking."
            },
            {
              "kind": "method",
              "name": "hostDisconnected"
            },
            {
              "kind": "field",
              "name": "host",
              "default": "host"
            },
            {
              "kind": "field",
              "name": "opts",
              "default": "opts"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "PositionController",
          "declaration": {
            "name": "PositionController",
            "module": "src/shared/position-controller.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/props.js",
      "declarations": [
        {
          "kind": "variable",
          "name": "ARC",
          "type": {
            "text": "string"
          },
          "default": "'arc'",
          "description": "Marker for the metadata key, so the conformance sweep can find declarations."
        },
        {
          "kind": "function",
          "name": "flag",
          "parameters": [
            {
              "name": "fallback",
              "default": "false",
              "description": "value when no attribute is present",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "{ negative = null, attribute, reflect = true, derived = false, blockedBy, nullable = false }",
              "default": "{}"
            },
            {
              "name": "opts",
              "type": {
                "text": "{negative?: string, attribute?: string, reflect?: boolean, blockedBy?: string}"
              }
            }
          ],
          "description": "A boolean that can actually be turned off from markup.\n\nLit's stock boolean converter is `value !== null` — presence, with the value\nignored — which is correct for native HTML boolean attributes and wrong for\nconfiguration flags. It fails in three directions at once:\n\n  - `<arc-modal closable=\"false\">` cannot express false      (finding #20)\n  - `<arc-input disabled=\"false\">` reads as **true**         (finding #48)\n  - `el.loop = false` does not survive a serialise/re-parse  (finding #49)\n\n`negative` is the answer to the third. Reflection cannot write `=\"false\"`,\nbecause `:host([border])` would then match while the border is off — this\nlibrary styles off attributes heavily, which is why `enum-fallbacks.js`\nexists. Instead a true-defaulting flag reflects its false state as a separate\npresence-only attribute (`no-dots`), which round-trips and keeps CSS simple.\n\n**Not for `disabled` on a form-associated element.** A form-associated custom\nelement whose `disabled` content attribute is merely *present* is \"actually\ndisabled\" per the HTML spec, so the platform calls `formDisabledCallback(true)`\nand FormControlMixin assigns the property straight back — no converter can\nwin that argument. `<arc-input disabled=\"false\">` is a disabled control for\nexactly the reason `<input disabled=\"false\">` is. Those 27 components keep\n`{ type: Boolean, reflect: true }` deliberately; native semantics are the\ncorrect answer there, not a gap in this vocabulary.\n\n`blockedBy` states a constraint in terms of *another* prop: while the named\nprop is truthy this one is held at its declared default, on both paths.\n`open: flag(false, { blockedBy: 'disabled' })` is the case it was added for —\nfive components documented `disabled` as \"preventing the calendar from\nopening\" while guarding only the toggle handler, so `el.open = true` opened a\ndisabled control in all five (finding #58). That is the same shape as findings\n#1, #14 and #47: **a constraint enforced on the interaction rather than on the\nstate**, which is precisely the failure this file exists to remove. Stating it\nhere moves it onto the controller that already runs on every update, and\n`conformance.test.js` derives the assertion from the declaration.\n\nIt is a name, not a predicate. A `normalize: (v, host) => …` escape hatch was\nconsidered and rejected: an opaque function is prose again — the conformance\nsuite could not derive anything from it, prism could not read it, and the\nvocabulary's whole premise is that the constraint is a value.\n\nThere is no override. A blocked prop cannot be forced; if it could, every\ncaller would have to be trusted to not use the escape hatch, which is the\nsituation before this option existed."
        },
        {
          "kind": "function",
          "name": "oneOf",
          "parameters": [
            {
              "name": "values",
              "description": "the legal members; the first is the default unless\n`default` says otherwise",
              "type": {
                "text": "string[]"
              }
            },
            {
              "name": "{ default: fallback = values[0], attribute, reflect = true, derived = false }",
              "default": "{}"
            }
          ],
          "description": "A string constrained to a known set, with a real fallback.\n\nAn unrecognised value currently reaches wherever the prop is used —\n`aria-orientation=\"diagonal\"` (finding #3), a corner selector that matches\nnothing (#17), or a JS ternary landing on the wrong branch (#37). All three\nare the same missing normalisation."
        },
        {
          "kind": "function",
          "name": "num",
          "parameters": [
            {
              "name": "{\n  default: fallback = 0,\n  min,\n  max,\n  step,\n  clamp = null,\n  int = false,\n  nullable = false,\n  attribute,\n  reflect = false,\n}",
              "default": "{}"
            }
          ],
          "description": "A number, optionally clamped to a range.\n\n`clamp: 'toRange'` is the one that matters: it is the difference between\narc-tabs' JSDoc saying \"out-of-range values are clamped to the nearest valid\nindex\" and that being true. `min`/`max` may be numbers or the name of another\nproperty to read the bound from at normalisation time, which is what a\n`selected` bounded by the tab count needs."
        },
        {
          "kind": "function",
          "name": "int",
          "parameters": [
            {
              "name": "opts",
              "default": "{}"
            }
          ],
          "description": "`num({ int: true })`, for indices and counts."
        },
        {
          "kind": "function",
          "name": "list",
          "parameters": [
            {
              "name": "{\n  default: fallback = [],\n  of: member,\n  attribute,\n  reflect = false,\n  derived = false,\n}",
              "default": "{}"
            },
            {
              "name": "opts",
              "optional": true,
              "type": {
                "text": "@param {unknown[]|(() => unknown[])} [opts.default=[]] literal (copied per element) or factory @param {NumberConstructor} [opts.of] member type; `Number` is the only one with a caller, and an unsupported value throws rather than being ignored"
              }
            }
          ],
          "description": "An array-valued prop, parsed from a JSON attribute.\n\nThe library had **four** spellings of this and no term for it, which is why\nV4-PLAN 2.2 creates it before anything else in that item:\n\n  1. `{ type: Array }` — Lit's own converter, which calls `JSON.parse` and\n     lets it **throw**. `<arc-chart series=\"oops\">` raises during attribute\n     processing, where a custom-element reaction's exception is reported\n     globally rather than propagated (finding #79's shape).\n  2. `{ attribute: false }` — property-only, so the prop has no markup form\n     at all and static HTML cannot set it.\n  3. A hand-rolled `converter.fromAttribute` with a try/catch — six copies of\n     the same eight lines in `navigation/`.\n  4. JSON-as-String — `arc-comparison.features` declared `{ type: String }`\n     and parsed by hand at the point of use, so the property held a string\n     and the component held an array.\n\n`list()` is the fifth spelling only in the sense that it is the one the other\nfour collapse into. What it settles:\n\n- **A malformed attribute falls back; it never throws.** That is the whole\n  difference from dialect 1, and it is the reason this cannot be \"just use\n  `type: Array`\".\n- **A removed attribute returns to the declared default**, not to `null`.\n  The six hand-rolled converters got this wrong together: `JSON.parse(null)`\n  coerces to the string `\"null\"`, parses fine, and returns `null` — so\n  removing the attribute left a non-array on a prop typed as an array.\n- **Each element gets its own array.** The default is held as a factory, so\n  two instances of a component cannot share one mutable list. A literal\n  `default: [...]` is accepted and copied per element rather than shared.\n- **`reflect` is off by default.** An array serialises to JSON, and writing a\n  row set back into an attribute on every change is a lot of DOM churn for\n  something no CSS selector can use. Pass `reflect: true` where a component\n  genuinely wants it.\n- **Every list has a markup form.** There is deliberately no\n  `attribute: false` here. Dialect 2 is listed above as a *problem* — a prop\n  static HTML cannot set — and a JSON attribute is the answer to it, so a\n  list opting out of the attribute would be re-adopting the dialect this\n  replaces. A prop that genuinely cannot round-trip is not a list: a render\n  callback is a function, and stays a plain `{ attribute: false }`.\n\n## `of: Number`, and why the vocabulary needs it\n\n`arc-knob.detents` is the one array prop whose attribute is not JSON: it\ntakes `detents=\"0,25,50,100\"`, because a knob's detents read better as the\ncomma list a patch file would carry. That is a decision about *syntax*, not\na fifth dialect, and before this option the vocabulary could not express it —\nso the component kept a hand-rolled converter and dialect 3 was not actually\nretired.\n\n`of: Number` says every member is a number. The attribute then accepts\n**either** spelling — `[0,25]` and `0,25` both parse — since JSON is tried\nfirst and a comma list is what is left when it fails. Non-numeric members are\ndropped rather than kept as `NaN`, on both the attribute path and the\nproperty path, which is the same \"the declaration is the contract on both\npaths\" rule the rest of this file states. It serialises back as the comma\nlist, so a reflected value round-trips to what was written."
        },
        {
          "kind": "function",
          "name": "defaultOf",
          "parameters": [
            {
              "name": "el"
            },
            {
              "name": "meta"
            }
          ],
          "description": "Resolve a declared default, which may be computed.\n\n`arc-calendar` is the case: `month` and `year` default to the *current* month\nand year, so there is no literal to put in the declaration. Before this, such\na prop could not adopt the vocabulary at all — a static default would fight\nthe constructor, and conformance's \"starts on its declared default\" assertion\nwould be wrong by construction.\n\nThe function receives the element, so a default may depend on a sibling prop.\nIt is called at normalisation time rather than cached: \"the current month\" is\nnot a value to freeze at class-definition time."
        },
        {
          "kind": "function",
          "name": "normalizeValue",
          "parameters": [
            {
              "name": "el"
            },
            {
              "name": "meta"
            },
            {
              "name": "value"
            }
          ],
          "description": "Coerce one value to its declared contract. Exported so the conformance suite\ncan assert the component agrees with it, rather than re-implementing it."
        },
        {
          "kind": "function",
          "name": "declaredProps",
          "parameters": [
            {
              "name": "Ctor"
            }
          ],
          "description": "Every declared prop on a class, as [name, meta] pairs."
        },
        {
          "kind": "mixin",
          "description": "Applies the declared contract on every update, for both the attribute path\nand the property path.\n\nThe work runs through a **reactive controller**, not through `willUpdate`\nand `updated` overrides. That is deliberate, and it is what makes rolling\nthis out across 200+ components safe: a mixin hook only runs if every\ncomponent that overrides the same method remembers `super.updated(changed)`,\nand a component that forgets loses its normalisation *silently* — the\ndeclaration still reads correctly and simply stops being enforced. There is\nno such failure mode here. A controller's hooks run regardless of what the\nhost overrides; the only requirement is the `super()` call every class makes\nanyway.",
          "name": "DeclaredPropsMixin",
          "parameters": [
            {
              "name": "superClass"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ARC",
          "declaration": {
            "name": "ARC",
            "module": "src/shared/props.js"
          }
        },
        {
          "kind": "js",
          "name": "flag",
          "declaration": {
            "name": "flag",
            "module": "src/shared/props.js"
          }
        },
        {
          "kind": "js",
          "name": "oneOf",
          "declaration": {
            "name": "oneOf",
            "module": "src/shared/props.js"
          }
        },
        {
          "kind": "js",
          "name": "num",
          "declaration": {
            "name": "num",
            "module": "src/shared/props.js"
          }
        },
        {
          "kind": "js",
          "name": "int",
          "declaration": {
            "name": "int",
            "module": "src/shared/props.js"
          }
        },
        {
          "kind": "js",
          "name": "list",
          "declaration": {
            "name": "list",
            "module": "src/shared/props.js"
          }
        },
        {
          "kind": "js",
          "name": "defaultOf",
          "declaration": {
            "name": "defaultOf",
            "module": "src/shared/props.js"
          }
        },
        {
          "kind": "js",
          "name": "normalizeValue",
          "declaration": {
            "name": "normalizeValue",
            "module": "src/shared/props.js"
          }
        },
        {
          "kind": "js",
          "name": "declaredProps",
          "declaration": {
            "name": "declaredProps",
            "module": "src/shared/props.js"
          }
        },
        {
          "kind": "js",
          "name": "DeclaredPropsMixin",
          "declaration": {
            "name": "DeclaredPropsMixin",
            "module": "src/shared/props.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/sanitize-markup.js",
      "declarations": [
        {
          "kind": "function",
          "name": "normalizeUrl",
          "parameters": [
            {
              "name": "value"
            }
          ],
          "description": "Strip the characters a browser throws away before it resolves a scheme, so\n`java\\tscript:` is recognized for what it is."
        },
        {
          "kind": "function",
          "name": "sanitizeMarkup",
          "parameters": [
            {
              "name": "source",
              "type": {
                "text": "string"
              }
            },
            {
              "name": "config",
              "type": {
                "text": "@param {Set<string>} config.banned Tags dropped with their whole subtree. @param {Set<string>} config.urlAttributes Attributes whose value is a URL. @param {(value: string) => boolean} config.isSafeUrl @param {string} [config.rootTag] Keep only this element and its contents, discarding anything around it. Returns null when it is absent. @param {(tag: {name: string, attributes: Array}) => void} [config.onTag] Last look at a surviving opening tag, for additions like `rel` on links."
              }
            }
          ],
          "description": "Sanitize a markup string.",
          "return": {
            "type": {
              "text": "string|null"
            }
          }
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "normalizeUrl",
          "declaration": {
            "name": "normalizeUrl",
            "module": "src/shared/sanitize-markup.js"
          }
        },
        {
          "kind": "js",
          "name": "sanitizeMarkup",
          "declaration": {
            "name": "sanitizeMarkup",
            "module": "src/shared/sanitize-markup.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/subscriptions.js",
      "declarations": [
        {
          "kind": "function",
          "name": "observeResize",
          "parameters": [
            {
              "name": "host"
            },
            {
              "name": "target"
            },
            {
              "name": "callback"
            }
          ],
          "description": "Observe a rendered element's size for as long as the host is connected.\n\n`callback` receives the observed element, so a component does not have to\nclose over a target that may be replaced between renders — the stale-closure\nvariant of the same bug.\n\nOne `ResizeObserver` per call site, created lazily and reused across\nconnection cycles; `unobserve` rather than `disconnect` on the way out, so the\ninstance stays valid for re-attachment."
        },
        {
          "kind": "function",
          "name": "observeIntersect",
          "parameters": [
            {
              "name": "host"
            },
            {
              "name": "target"
            },
            {
              "name": "callback"
            },
            {
              "name": "options"
            }
          ],
          "description": "Observe a rendered element's intersection with the viewport for as long as the\nhost is connected.\n\nSame contract as `observeResize`, with one addition worth knowing: a `target`\nresolver that returns `null` releases the observation without tearing the\nsubscription down, and returning an element again re-attaches it. That is how\na component turns the observer off for a state rather than a lifecycle —\narc-infinite-scroll stops watching once `finished` or `disabled` — without\nhand-rolling a second teardown path that then has to pair correctly.\n\n`options` are captured when the observer is first created, so a component\nwhose rootMargin depends on a reactive prop needs its own handling; none does\ntoday, and the previous hand-rolled version did not either."
        },
        {
          "kind": "function",
          "name": "listen",
          "parameters": [
            {
              "name": "host"
            },
            {
              "name": "target"
            },
            {
              "name": "type"
            },
            {
              "name": "handler"
            },
            {
              "name": "options"
            }
          ],
          "description": "Listen on a rendered element for as long as the host is connected.\n\n`handler` is subscribed and unsubscribed by identity, so pass a bound method\nheld on the instance — a fresh arrow per attach would still work here, since\nthis controller owns both halves, but it makes the component harder to reason\nabout from the outside."
        },
        {
          "kind": "function",
          "name": "observeAttributes",
          "parameters": [
            {
              "name": "host"
            },
            {
              "name": "target"
            },
            {
              "name": "names"
            },
            {
              "name": "callback"
            }
          ],
          "description": "Observe attribute changes on an element for as long as the host is connected.\n\nThe third kind, added here rather than hand-rolled per this file's own rule.\nIts case is different from the other two in one way worth stating: the target\nis usually **outside** the host — `document.documentElement` for\n`arc-theme-toggle`, which has to follow the page theme rather than only write\nit (finding #15). A subscription to shared global state is exactly the kind\nthat must not survive a disconnect, because every stale instance keeps\nanswering the callback.\n\n`names` is the attribute filter, passed straight to `MutationObserver`.\n`callback` receives the observed element, matching the other two helpers, so\na component never closes over a target that may be replaced.\n\nOne observer per call site, created lazily and reused across connection\ncycles. `disconnect()` rather than an unobserve — MutationObserver has no\nper-target release, and re-`observe()` on the next attach restores it."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "observeResize",
          "declaration": {
            "name": "observeResize",
            "module": "src/shared/subscriptions.js"
          }
        },
        {
          "kind": "js",
          "name": "observeIntersect",
          "declaration": {
            "name": "observeIntersect",
            "module": "src/shared/subscriptions.js"
          }
        },
        {
          "kind": "js",
          "name": "listen",
          "declaration": {
            "name": "listen",
            "module": "src/shared/subscriptions.js"
          }
        },
        {
          "kind": "js",
          "name": "observeAttributes",
          "declaration": {
            "name": "observeAttributes",
            "module": "src/shared/subscriptions.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/time-scale.js",
      "declarations": [
        {
          "kind": "function",
          "name": "createScale",
          "parameters": [
            {
              "name": "{ origin = 0, pixelsPerUnit, invert = false }"
            },
            {
              "name": "spec",
              "type": {
                "text": "{ origin?: number, pixelsPerUnit: number, invert?: boolean }"
              }
            }
          ],
          "description": "Build a scale. Throws on a degenerate `pixelsPerUnit` rather than silently\nproducing NaN downstream — components should default the prop instead of\nconstructing a scale from an unset value.",
          "return": {
            "type": {
              "text": "Scale"
            }
          }
        },
        {
          "kind": "function",
          "name": "rowScale",
          "parameters": [
            {
              "name": "{ high, rowHeight }"
            },
            {
              "name": "spec",
              "type": {
                "text": "{ high: number, rowHeight: number }"
              }
            }
          ],
          "description": "Vertical scale for uniform rows, where `high` sits at pixel 0 and values\ndescend down the screen: `y = (high - value) * rowHeight`.",
          "return": {
            "type": {
              "text": "Scale"
            }
          }
        },
        {
          "kind": "function",
          "name": "toPixels",
          "parameters": [
            {
              "name": "scale",
              "type": {
                "text": "Scale"
              }
            },
            {
              "name": "value",
              "type": {
                "text": "number"
              }
            }
          ],
          "description": "Domain value → pixel offset within the viewport.",
          "return": {
            "type": {
              "text": "number"
            }
          }
        },
        {
          "kind": "function",
          "name": "toValue",
          "parameters": [
            {
              "name": "scale",
              "type": {
                "text": "Scale"
              }
            },
            {
              "name": "px",
              "type": {
                "text": "number"
              }
            }
          ],
          "description": "Pixel offset within the viewport → domain value. Returns an exact\n(fractional) value; apply a snapper if you need it back on the grid.",
          "return": {
            "type": {
              "text": "number"
            }
          }
        },
        {
          "kind": "function",
          "name": "spanToPixels",
          "parameters": [
            {
              "name": "scale",
              "type": {
                "text": "Scale"
              }
            },
            {
              "name": "span",
              "type": {
                "text": "number"
              }
            }
          ],
          "description": "Duration/extent → width in pixels. Always positive, and independent of\n`origin`, so it is safe for element sizing on either axis.",
          "return": {
            "type": {
              "text": "number"
            }
          }
        },
        {
          "kind": "function",
          "name": "visibleRange",
          "parameters": [
            {
              "name": "scale",
              "type": {
                "text": "Scale"
              }
            },
            {
              "name": "viewportPx",
              "type": {
                "text": "number"
              }
            }
          ],
          "description": "Domain range covered by a viewport of `viewportPx`, ordered low→high\nregardless of inversion. Feed this to `gridLines()` and to item windowing so\nneither has to reason about direction.",
          "return": {
            "type": {
              "text": "{ from: number, to: number }"
            }
          }
        },
        {
          "kind": "function",
          "name": "zoomAround",
          "parameters": [
            {
              "name": "scale",
              "type": {
                "text": "Scale"
              }
            },
            {
              "name": "pixelsPerUnit",
              "description": "Target zoom level.",
              "type": {
                "text": "number"
              }
            },
            {
              "name": "anchorPx",
              "default": "0",
              "description": "Viewport pixel to hold fixed. Defaults to 0.",
              "optional": true,
              "type": {
                "text": "number"
              }
            }
          ],
          "description": "Rescale while pinning the value currently under `anchorPx`, which is what\nmakes wheel-zoom track the pointer and zoom-to-selection hold its edge.",
          "return": {
            "type": {
              "text": "Scale"
            }
          }
        },
        {
          "kind": "function",
          "name": "panBy",
          "parameters": [
            {
              "name": "scale",
              "type": {
                "text": "Scale"
              }
            },
            {
              "name": "deltaPx",
              "type": {
                "text": "number"
              }
            }
          ],
          "description": "Shift the viewport by a pixel delta. Positive moves the view toward larger\nvalues on a non-inverted scale. Clamping is the application's job.",
          "return": {
            "type": {
              "text": "Scale"
            }
          }
        },
        {
          "kind": "function",
          "name": "gridSnapper",
          "parameters": [
            {
              "name": "gridUnits",
              "description": "Positive integer grid size in domain units.",
              "type": {
                "text": "number"
              }
            }
          ],
          "description": "Build an exact integer snapper for a fixed grid.\n\nInject the same grid size your validator enforces — an editor that snaps to a\ndifferent grid than the one being validated against authors content that\nfails the moment it is written. Different granularities (notes to a\nsubdivision, clip placements to a bar) are separate snappers, not a concept\nthis module needs to know about.",
          "return": {
            "type": {
              "text": "(value: number) => number"
            }
          }
        },
        {
          "kind": "function",
          "name": "gridLines",
          "parameters": [
            {
              "name": "from",
              "type": {
                "text": "number"
              }
            },
            {
              "name": "to",
              "type": {
                "text": "number"
              }
            },
            {
              "name": "step",
              "type": {
                "text": "number"
              }
            }
          ],
          "description": "Evenly spaced grid positions within `[from, to]`, inclusive of any boundary\nthat lands exactly on an edge. Integer in, integer out.\n\nPass a *visible* range. Generating lines for an entire project is never\ncorrect and throws rather than quietly allocating millions of entries.\n\nWhen boundaries stop being evenly spaced — a per-section meter change, say —\nthis is the function you stop calling; hand the ruler an explicit array via\n`boundariesWithin()` instead. Its subdivision logic does not change.",
          "return": {
            "type": {
              "text": "number[]"
            }
          }
        },
        {
          "kind": "function",
          "name": "boundariesWithin",
          "parameters": [
            {
              "name": "boundaries",
              "description": "Ascending domain positions.",
              "type": {
                "text": "number[]"
              }
            },
            {
              "name": "from",
              "type": {
                "text": "number"
              }
            },
            {
              "name": "to",
              "type": {
                "text": "number"
              }
            }
          ],
          "description": "The subset of an explicit, possibly irregular boundary list that falls within\n`[from, to]`. The escape hatch from `gridLines()` for non-uniform spacing —\nsame return shape, so consumers are agnostic to which one produced it.",
          "return": {
            "type": {
              "text": "number[]"
            }
          }
        },
        {
          "kind": "function",
          "name": "chooseStep",
          "parameters": [
            {
              "name": "scale",
              "type": {
                "text": "Scale"
              }
            },
            {
              "name": "candidates",
              "description": "Descending step sizes, coarsest first.",
              "type": {
                "text": "number[]"
              }
            },
            {
              "name": "minPixelSpacing",
              "type": {
                "text": "number"
              }
            }
          ],
          "description": "Coarsest-to-finest step selection for an adaptive ruler: the first candidate\nwhose on-screen spacing meets `minPixelSpacing`, so labels thin out as you\nzoom out instead of colliding.\n\nCandidates are plain numbers, which is what keeps this meter-agnostic — the\ncaller decides whether they mean bars, beats, or subdivisions.",
          "return": {
            "type": {
              "text": "number | null"
            }
          }
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "createScale",
          "declaration": {
            "name": "createScale",
            "module": "src/shared/time-scale.js"
          }
        },
        {
          "kind": "js",
          "name": "rowScale",
          "declaration": {
            "name": "rowScale",
            "module": "src/shared/time-scale.js"
          }
        },
        {
          "kind": "js",
          "name": "toPixels",
          "declaration": {
            "name": "toPixels",
            "module": "src/shared/time-scale.js"
          }
        },
        {
          "kind": "js",
          "name": "toValue",
          "declaration": {
            "name": "toValue",
            "module": "src/shared/time-scale.js"
          }
        },
        {
          "kind": "js",
          "name": "spanToPixels",
          "declaration": {
            "name": "spanToPixels",
            "module": "src/shared/time-scale.js"
          }
        },
        {
          "kind": "js",
          "name": "visibleRange",
          "declaration": {
            "name": "visibleRange",
            "module": "src/shared/time-scale.js"
          }
        },
        {
          "kind": "js",
          "name": "zoomAround",
          "declaration": {
            "name": "zoomAround",
            "module": "src/shared/time-scale.js"
          }
        },
        {
          "kind": "js",
          "name": "panBy",
          "declaration": {
            "name": "panBy",
            "module": "src/shared/time-scale.js"
          }
        },
        {
          "kind": "js",
          "name": "gridSnapper",
          "declaration": {
            "name": "gridSnapper",
            "module": "src/shared/time-scale.js"
          }
        },
        {
          "kind": "js",
          "name": "gridLines",
          "declaration": {
            "name": "gridLines",
            "module": "src/shared/time-scale.js"
          }
        },
        {
          "kind": "js",
          "name": "boundariesWithin",
          "declaration": {
            "name": "boundariesWithin",
            "module": "src/shared/time-scale.js"
          }
        },
        {
          "kind": "js",
          "name": "chooseStep",
          "declaration": {
            "name": "chooseStep",
            "module": "src/shared/time-scale.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/trigger-aria.js",
      "declarations": [
        {
          "kind": "function",
          "name": "setTriggerAria",
          "parameters": [
            {
              "name": "slotEl",
              "description": "The trigger slot",
              "type": {
                "text": "HTMLSlotElement|null"
              }
            },
            {
              "name": "attrs",
              "description": "Attribute map; null/undefined/'' removes the attribute",
              "type": {
                "text": "Record<string, string|null|undefined>"
              }
            }
          ],
          "description": "Sets (or removes) attributes on the first assigned element of a slot.\nCall on `slotchange` and whenever the forwarded state changes."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "setTriggerAria",
          "declaration": {
            "name": "setTriggerAria",
            "module": "src/shared/trigger-aria.js"
          }
        },
        {
          "kind": "js",
          "name": "deepActiveElement",
          "declaration": {
            "name": "deepActiveElement",
            "module": "./focus-trap.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/shared/virtual-controller.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Fixed-height row windowing, in one place.\n\nThree components implemented this: `arc-virtual-list`, `arc-data-table` and\n`arc-data-grid`. The arithmetic is the same five lines in all three — floor\nthe scroll offset by row height, ceil the viewport by row height, pad both\nends by an overscan, clamp to the row count — and it had drifted in three\nways, each of which is a decision one copy made and the others never saw:\n\n 1. **`arc-data-table` could produce a negative count.** It wrote\n    `this._visibleCount = endIndex - this._startIndex` with no floor, where\n    the other two clamped at zero. `end` is `min(total, …)` and `start` is\n    `max(0, …)`, so any state where the row set shrinks below the current\n    scroll offset — a filter applied, rows removed, `rows` reassigned —\n    inverts them, and the slice that follows renders nothing under a\n    full-height top spacer. A blank table that scrolls.\n 2. **`overscan` was public on one of the three and hardcoded to 5 in the\n    other two.** Same default, no way to change it on a grid.\n 3. **Only `arc-virtual-list` announced the window**, and only when it\n    actually moved — which is the part that matters, since a scroll handler\n    fires every frame of a drag and a consumer re-rendering rows on each one\n    rebuilds an unchanged window sixty times a second.\n\nThe controller takes the union: the clamp, a configurable overscan, and\nchange-only notification. Adopting it is what fixes (1) in `arc-data-table`\nand gives (2) and (3) to both tables.\n\n**The viewport is a getter, not the host.** `arc-virtual-list` scrolls\nitself; the two tables scroll an inner wrapper that does not exist until the\nfirst render. A controller that read `host.scrollTop` would have fit exactly\none of its three consumers, which is how the three copies happened.",
          "name": "VirtualController",
          "members": [
            {
              "kind": "field",
              "name": "end",
              "description": "One past the last rendered row.",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "offsetBefore",
              "description": "Pixels of spacer above the rendered rows.",
              "readonly": true
            },
            {
              "kind": "field",
              "name": "offsetAfter",
              "description": "Pixels of spacer below them.",
              "readonly": true
            },
            {
              "kind": "method",
              "name": "measure",
              "description": "Recompute the window. Returns true when it moved.\n\nReturning the movement rather than only firing `onChange` is what lets a\nhost skip its own `requestUpdate` on a scroll frame that changed nothing —\nthe notification and the re-render are different decisions, and a host that\nre-renders unconditionally is the cost this replaces."
            },
            {
              "kind": "method",
              "name": "schedule",
              "description": "Re-measure on the next frame, coalescing a burst of scroll events into one.\n\nA scroll handler fires far more often than a frame, and measuring in the\nhandler both wastes the work and reads layout mid-scroll."
            },
            {
              "kind": "method",
              "name": "hostConnected",
              "description": "Both halves, because a controller with only a teardown is a one-way door —\na host that is disconnected and reconnected (a list moved in the DOM, a\ntable inside a re-parented panel) would come back with no pending frame and\nno way to schedule one. See HANDOFF."
            },
            {
              "kind": "method",
              "name": "hostDisconnected"
            },
            {
              "kind": "field",
              "name": "host",
              "default": "host"
            },
            {
              "kind": "field",
              "name": "opts",
              "type": {
                "text": "object"
              },
              "default": "{ getViewport, getTotal, getRowHeight, getOverscan, onChange }"
            },
            {
              "kind": "field",
              "name": "start",
              "type": {
                "text": "number"
              },
              "description": "First rendered row index.",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "count",
              "type": {
                "text": "number"
              },
              "description": "How many rows are rendered. Never negative — see (1) above.",
              "default": "0"
            }
          ]
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "VirtualController",
          "declaration": {
            "name": "VirtualController",
            "module": "src/shared/virtual-controller.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/ssr-client-only.js",
      "declarations": [
        {
          "kind": "variable",
          "name": "CLIENT_ONLY",
          "type": {
            "text": "object"
          },
          "default": "{}",
          "description": "Components that cannot be server-rendered *by our own design*, with the reason.\n\n**Empty, and worth keeping empty.** Anything listed here is content a consumer\ncannot get into their initial payload.\n\nIt lives in the package rather than in scripts/ because two things depend on\nit and they are not both build tooling: scripts/check-ssr.js, which asserts\nthe list is neither short nor stale, and src/ssr.js, which must not define a\ncomponent that would throw the moment a page containing it is rendered.\n\n`arc-markdown` was the last entry. Its sanitiser was DOMParser-based and its\nrender used an `.innerHTML` property binding — which the server has nothing\nto serialize, so it emitted an empty div. Both are fixed; see\nsrc/shared/sanitize-markup.js.\n\n**Adding an entry is not just a matter of editing this object.** src/ssr.js\nregisters components through the `./register.js` barrel, which is all-or-\nnothing, so it asserts this list is empty rather than silently defining\nsomething that throws. A new entry has to come with a registration path that\ncan skip it."
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "CLIENT_ONLY",
          "declaration": {
            "name": "CLIENT_ONLY",
            "module": "src/ssr-client-only.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/ssr.js",
      "declarations": [
        {
          "kind": "variable",
          "name": "CLOSED_OVERLAYS",
          "type": {
            "text": "array"
          },
          "default": "[ 'arc-command-palette', 'arc-dialog', 'arc-sheet', 'arc-drawer', 'arc-lightbox', ]",
          "description": "Components closed until something opens them.\n\nThe OverlayController set: everything rendered into the top layer and invisible\nuntil asked for. Nothing inside one can appear in a first paint, so rendering\ntheir contents spends bytes on markup no reader and no metric ever sees. On\narcui.dev that was 174 of a page's 427 roots — the whole ⌘K palette.\n\narc-lightbox was absent from its own set from 3.0 to 4.2: this renderer\nshipped the day before the component did, and nothing since went back for it.\nA gallery passed as a property renders empty anyway, which is what made the\ngap look deliberate — but the documented static form is a JSON `images`\nattribute, and the server can read that. Those pages shipped a full figure,\nfour icon-button roots and an eager fetch of a full-size photograph, inside a\ndisplay:none dialog, on a paint that could never show any of it. display:none\ndoes not stop an image from downloading."
        },
        {
          "kind": "variable",
          "name": "LIST_BUDGETS",
          "type": {
            "text": "object"
          },
          "default": "{ 'arc-sidebar-link': 25, }",
          "description": "Long repeated lists, and how many of each to render.\n\nA navigation sidebar listing every page is real, visible content — unlike a\nclosed overlay — but only the first screenful of it can be in a first paint,\nand the rest scrolls inside its own container. On arcui.dev the sidebar is\n175 `arc-sidebar-link` roots and 30K of the 99K of shadow markup a component\npage carries; the twenty-odd that are actually visible carry the paint.\n\nThe remainder are marked `data-arc-defer`, which keeps the FOUC guard's\n`opacity: 0` — layout is held, so nothing shifts when they upgrade; they fade\nin. That is the opposite treatment from a closed overlay, which must occupy\nnothing, and getting the two confused is measurable: marking deferred\nelements `display: none` would collapse a sidebar mid-paint."
        },
        {
          "kind": "function",
          "name": "renderDeclarativeShadowDOM",
          "parameters": [
            {
              "name": "source",
              "description": "Complete HTML document, or a fragment.",
              "type": {
                "text": "string"
              }
            },
            {
              "name": "options",
              "default": "{}",
              "optional": true,
              "type": {
                "text": "@param {boolean} [options.lift=true] Lift shadow stylesheets into shared files instead of inlining a copy per component instance. Strongly recommended: browsers share one constructable stylesheet per component type, declarative shadow DOM cannot express that, and inlining measured at 89% of all output bytes. @param {string} [options.stylesheetPath='/_arc'] URL prefix the lifted stylesheets are linked with. The caller serves them from here. @param {string[]} [options.closedOverlays=CLOSED_OVERLAYS] Hosts whose contents are left for the client. Pass `[]` to render everything. @param {Record<string, number>} [options.listBudgets=LIST_BUDGETS] How many of each repeated component to render before deferring the rest to the client. Pass {} to render every one. @param {boolean} [options.inlineIcons=true] Embed the icons the page uses, so the client's first render matches the server's instead of falling back to an empty slot while a dynamic import resolves."
              }
            }
          ],
          "description": "Render every ARC component in `source` to declarative shadow DOM.",
          "return": {
            "type": {
              "text": "Promise<{html: string, stylesheets: Map<string, string>, roots: number, deferred: number}>"
            }
          }
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "CLOSED_OVERLAYS",
          "declaration": {
            "name": "CLOSED_OVERLAYS",
            "module": "src/ssr.js"
          }
        },
        {
          "kind": "js",
          "name": "LIST_BUDGETS",
          "declaration": {
            "name": "LIST_BUDGETS",
            "module": "src/ssr.js"
          }
        },
        {
          "kind": "js",
          "name": "renderDeclarativeShadowDOM",
          "declaration": {
            "name": "renderDeclarativeShadowDOM",
            "module": "src/ssr.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/typography/blockquote.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Styled pull-quote with optional citation for editorial emphasis.",
          "name": "ArcBlockquote",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "blockquote"
            },
            {
              "name": "quote"
            },
            {
              "name": "cite"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "cite",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Citation or attribution text displayed beneath the quote with an em dash prefix",
              "attribute": "cite"
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'default' | 'accent'"
              },
              "description": "Visual variant. Accent applies a gradient text fill to the quote content.",
              "attribute": "variant",
              "default": "'default'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "cite",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Citation or attribution text displayed beneath the quote with an em dash prefix",
              "fieldName": "cite"
            },
            {
              "name": "variant",
              "type": {
                "text": "'default' | 'accent'"
              },
              "description": "Visual variant. Accent applies a gradient text fill to the quote content.",
              "fieldName": "variant",
              "default": "'default'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-blockquote",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcBlockquote",
          "declaration": {
            "name": "ArcBlockquote",
            "module": "src/typography/blockquote.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/typography/code-block.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Syntax-highlighted code display with optional filename and copy button.",
          "name": "ArcCodeBlock",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "titlebar"
            },
            {
              "name": "orbs"
            },
            {
              "name": "filename"
            },
            {
              "name": "header"
            },
            {
              "name": "lang"
            },
            {
              "name": "status-bar"
            },
            {
              "name": "lines"
            },
            {
              "name": "code-block"
            },
            {
              "name": "copy"
            },
            {
              "name": "body"
            },
            {
              "name": "pre"
            },
            {
              "name": "code"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "language",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Programming language identifier (e.g. `js`, `css`, `html`). Displayed in uppercase in the header bar.",
              "attribute": "language",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "filename",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional filename displayed in the header in monospace font. When empty, the header shows only the language.",
              "attribute": "filename",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "code",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Code content to display. Used as the `<pre><code>` content and copied to clipboard when the copy button is clicked.",
              "attribute": "code"
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'default' | 'window' | 'basic'"
              },
              "description": "Visual variant. `default` shows the standard layout with optional filename header and status bar. `window` adds a macOS-style title bar with colored orbs and centered filename. `basic` strips all chrome for a compact, minimal display.",
              "attribute": "variant",
              "default": "'default'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "language",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Programming language identifier (e.g. `js`, `css`, `html`). Displayed in uppercase in the header bar.",
              "fieldName": "language"
            },
            {
              "name": "filename",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional filename displayed in the header in monospace font. When empty, the header shows only the language.",
              "fieldName": "filename"
            },
            {
              "name": "code",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Code content to display. Used as the `<pre><code>` content and copied to clipboard when the copy button is clicked.",
              "fieldName": "code"
            },
            {
              "name": "variant",
              "type": {
                "text": "'default' | 'window' | 'basic'"
              },
              "description": "Visual variant. `default` shows the standard layout with optional filename header and status bar. `window` adds a macOS-style title bar with colored orbs and centered filename. `basic` strips all chrome for a compact, minimal display.",
              "fieldName": "variant",
              "default": "'default'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-code-block",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcCodeBlock",
          "declaration": {
            "name": "ArcCodeBlock",
            "module": "src/typography/code-block.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/typography/gradient-text.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Inline text wrapper that applies gradient fills to text declaratively.",
          "name": "ArcGradientText",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "text"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "gradient",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Custom CSS gradient string, used when variant is set to custom",
              "attribute": "gradient"
            },
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'accent' | 'display' | 'sunset' | 'ocean' | 'custom'"
              },
              "description": "Predefined gradient variant to apply",
              "attribute": "variant",
              "default": "'accent'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "animated",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Animate the gradient with a shifting background-position cycle",
              "attribute": "animated",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "variant",
              "type": {
                "text": "'accent' | 'display' | 'sunset' | 'ocean' | 'custom'"
              },
              "description": "Predefined gradient variant to apply",
              "fieldName": "variant",
              "default": "'accent'"
            },
            {
              "name": "gradient",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Custom CSS gradient string, used when variant is set to custom",
              "fieldName": "gradient"
            },
            {
              "name": "animated",
              "type": {
                "text": "boolean"
              },
              "description": "Animate the gradient with a shifting background-position cycle",
              "fieldName": "animated",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-gradient-text",
          "customElement": true,
          "group": "marketing",
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcGradientText",
          "declaration": {
            "name": "ArcGradientText",
            "module": "src/typography/gradient-text.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/typography/highlight.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Text highlighting with search query match markers.",
          "name": "ArcHighlight",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "text"
            },
            {
              "name": "mark"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "text",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The full text to display and search within",
              "attribute": "text"
            },
            {
              "kind": "field",
              "name": "query",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The search query to highlight within the text",
              "attribute": "query"
            },
            {
              "kind": "field",
              "name": "caseSensitive",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Whether matching should be case-sensitive",
              "attribute": "caseSensitive",
              "default": "false",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "text",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The full text to display and search within",
              "fieldName": "text"
            },
            {
              "name": "query",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The search query to highlight within the text",
              "fieldName": "query"
            },
            {
              "name": "caseSensitive",
              "type": {
                "text": "boolean"
              },
              "description": "Whether matching should be case-sensitive",
              "fieldName": "caseSensitive",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-highlight",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcHighlight",
          "declaration": {
            "name": "ArcHighlight",
            "module": "src/typography/highlight.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/typography/kbd.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Keyboard key indicator styled like a physical key.",
          "name": "ArcKbd",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "kbd"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-kbd",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcKbd",
          "declaration": {
            "name": "ArcKbd",
            "module": "src/typography/kbd.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/typography/keyboard-map.js",
      "declarations": [
        {
          "kind": "class",
          "description": "A rendered keyboard with highlighted keys and chords — the visual big\nsibling of arc-kbd and arc-hotkey, for shortcut documentation and editor\ncheat sheets. Every key named in `highlight` lights up with the house\nstate marking: accent tint, glow, accent legend text.\n\nThe board is a stylised diagram, not a keyboard configurator: `compact`\n(the default) is a 60%-style block without nav cluster or numpad — enough\nfor almost all shortcut documentation — and `ansi` adds the F-row and nav\ncluster. There is deliberately no ISO/JIS machinery; a diagram that\nchased physical-layout fidelity would trade its one job (making a chord\nlegible at a glance) for configuration surface.\n\nIt is pure display typography — no slots, no click events, nothing\nfocusable. A shortcut diagram that responded to clicks would imply the\nkeys do something; wiring real shortcuts is arc-hotkey's job.",
          "name": "ArcKeyboardMap",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "board"
            },
            {
              "name": "key"
            },
            {
              "name": "key-highlighted"
            },
            {
              "name": "caption"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "layout",
              "privacy": "public",
              "type": {
                "text": "'compact' | 'ansi'"
              },
              "default": "'compact'",
              "description": "Board shape: \"compact\" (default, a 60%-style block) or \"ansi\" (adds the F-row and nav cluster). Unknown values fall back to compact.",
              "attribute": "layout",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "highlight",
              "privacy": "public",
              "type": {
                "text": "string|string[]"
              },
              "default": "''",
              "description": "Key chords to light up: an array property (e.g. [\"mod+z\", \"mod+shift+z\"]) or a comma- or space-separated attribute string. Each chord joins keys with \"+\" (\"mod+shift+p\"); `mod` resolves to Cmd on mac and Ctrl on win, mirroring arc-hotkey's aliases (cmd/command → meta, option → alt, control → ctrl). Single keys are fine (\"g\", \"escape\"). Unknown key names are ignored.",
              "attribute": "highlight"
            },
            {
              "kind": "field",
              "name": "labels",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether keys render their legends. Default true; disable from markup with either `no-labels` or `labels=\"false\"`.",
              "attribute": "labels",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "platform",
              "privacy": "public",
              "type": {
                "text": "'auto' | 'mac' | 'win'"
              },
              "default": "'auto'",
              "description": "Which platform's modifier legends and `mod` resolution to use: \"auto\" (default — detected in the browser, mac on the server), \"mac\", or \"win\".",
              "attribute": "platform"
            },
            {
              "kind": "field",
              "name": "caption",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional caption rendered below the board in muted text.",
              "attribute": "caption"
            }
          ],
          "attributes": [
            {
              "name": "layout",
              "type": {
                "text": "'compact' | 'ansi'"
              },
              "default": "'compact'",
              "description": "Board shape: \"compact\" (default, a 60%-style block) or \"ansi\" (adds the F-row and nav cluster). Unknown values fall back to compact.",
              "fieldName": "layout"
            },
            {
              "name": "highlight",
              "type": {
                "text": "string|string[]"
              },
              "default": "''",
              "description": "Key chords to light up: an array property (e.g. [\"mod+z\", \"mod+shift+z\"]) or a comma- or space-separated attribute string. Each chord joins keys with \"+\" (\"mod+shift+p\"); `mod` resolves to Cmd on mac and Ctrl on win, mirroring arc-hotkey's aliases (cmd/command → meta, option → alt, control → ctrl). Single keys are fine (\"g\", \"escape\"). Unknown key names are ignored.",
              "fieldName": "highlight"
            },
            {
              "name": "labels",
              "type": {
                "text": "boolean"
              },
              "default": "true",
              "description": "Whether keys render their legends. Default true; disable from markup with either `no-labels` or `labels=\"false\"`.",
              "fieldName": "labels"
            },
            {
              "name": "platform",
              "type": {
                "text": "'auto' | 'mac' | 'win'"
              },
              "default": "'auto'",
              "description": "Which platform's modifier legends and `mod` resolution to use: \"auto\" (default — detected in the browser, mac on the server), \"mac\", or \"win\".",
              "fieldName": "platform"
            },
            {
              "name": "caption",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Optional caption rendered below the board in muted text.",
              "fieldName": "caption"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-keyboard-map",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcKeyboardMap",
          "declaration": {
            "name": "ArcKeyboardMap",
            "module": "src/typography/keyboard-map.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/typography/markdown.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Renders markdown content as styled HTML with zero dependencies. Supports headings, lists, code\nblocks, blockquotes, links, images, and inline formatting.",
          "name": "ArcMarkdown",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "markdown"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "content",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Markdown string to parse and render. Takes precedence over slotted text content.",
              "attribute": "content"
            }
          ],
          "attributes": [
            {
              "name": "content",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Markdown string to parse and render. Takes precedence over slotted text content.",
              "fieldName": "content"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-markdown",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcMarkdown",
          "declaration": {
            "name": "ArcMarkdown",
            "module": "src/typography/markdown.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/typography/number-format.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Locale-aware number, currency, percentage, and compact formatter using Intl.NumberFormat.",
          "name": "ArcNumberFormat",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "number"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "locale",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'en-US'",
              "description": "BCP 47 locale tag for locale-aware formatting",
              "attribute": "locale"
            },
            {
              "kind": "field",
              "name": "currency",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'USD'",
              "description": "ISO 4217 currency code, used when type is \"currency\"",
              "attribute": "currency"
            },
            {
              "kind": "field",
              "name": "value",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "The number to format",
              "attribute": "value",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "type",
              "privacy": "public",
              "type": {
                "text": "'number' | 'currency' | 'percent' | 'compact'"
              },
              "description": "Formatting style to apply",
              "attribute": "type",
              "default": "'number'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "decimals",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "description": "Number of decimal places, 0 to 20 — `Intl.NumberFormat`'s own range. Unset uses a per-format default: 0 for number, 2 for currency, 1 for percent.",
              "attribute": "decimals",
              "default": "0"
            },
            {
              "kind": "field",
              "name": "notation",
              "privacy": "public",
              "type": {
                "text": "'standard' | 'compact'"
              },
              "description": "Number notation — compact gives \"12.3K\", \"1.2M\"",
              "attribute": "notation",
              "default": "'standard'"
            }
          ],
          "attributes": [
            {
              "name": "value",
              "type": {
                "text": "number"
              },
              "description": "The number to format",
              "fieldName": "value",
              "default": "0"
            },
            {
              "name": "type",
              "type": {
                "text": "'number' | 'currency' | 'percent' | 'compact'"
              },
              "description": "Formatting style to apply",
              "fieldName": "type",
              "default": "'number'"
            },
            {
              "name": "locale",
              "type": {
                "text": "string"
              },
              "default": "'en-US'",
              "description": "BCP 47 locale tag for locale-aware formatting",
              "fieldName": "locale"
            },
            {
              "name": "currency",
              "type": {
                "text": "string"
              },
              "default": "'USD'",
              "description": "ISO 4217 currency code, used when type is \"currency\"",
              "fieldName": "currency"
            },
            {
              "name": "decimals",
              "type": {
                "text": "number"
              },
              "description": "Number of decimal places, 0 to 20 — `Intl.NumberFormat`'s own range. Unset uses a per-format default: 0 for number, 2 for currency, 1 for percent.",
              "fieldName": "decimals",
              "default": "0"
            },
            {
              "name": "notation",
              "type": {
                "text": "'standard' | 'compact'"
              },
              "description": "Number notation — compact gives \"12.3K\", \"1.2M\"",
              "fieldName": "notation",
              "default": "'standard'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-number-format",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcNumberFormat",
          "declaration": {
            "name": "ArcNumberFormat",
            "module": "src/typography/number-format.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/typography/prose.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Long-form content container that applies typographic rhythm and styling to slotted HTML\nelements.",
          "name": "ArcProse",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "prose"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "size",
              "privacy": "public",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the base font size of the prose container. Affects paragraph text; headings and code maintain their own scale.",
              "attribute": "size",
              "default": "'md'",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "size",
              "type": {
                "text": "'sm' | 'md' | 'lg'"
              },
              "description": "Controls the base font size of the prose container. Affects paragraph text; headings and code maintain their own scale.",
              "fieldName": "size",
              "default": "'md'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-prose",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcProse",
          "declaration": {
            "name": "ArcProse",
            "module": "src/typography/prose.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/typography/terminal.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Animated terminal window: a chrome'd frame that types commands\ncharacter-by-character and prints their output line by line.\n\nThe typing machinery mirrors arc-typewriter's setTimeout chain rather than\nimporting it — typewriter animates one string, this sequences many lines\nwith three behaviors, and a shared chain would serve neither cleanly.\n\nServer-side the full completed transcript renders (no animation in Node);\non the client, autoplay blanks it before first paint and replays it when\nthe element scrolls into view. Under prefers-reduced-motion the transcript\nrenders complete immediately and nothing animates — the same policy\narc-typewriter follows.",
          "name": "ArcTerminal",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "terminal"
            },
            {
              "name": "titlebar"
            },
            {
              "name": "orbs"
            },
            {
              "name": "title"
            },
            {
              "name": "body"
            },
            {
              "name": "line"
            },
            {
              "name": "prompt"
            },
            {
              "name": "text"
            },
            {
              "name": "cursor"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "method",
              "name": "play",
              "description": "Play the sequence from the beginning.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "method",
              "name": "reset",
              "description": "Return to the blank, pre-animation state without starting playback.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "prompt",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'$'",
              "description": "Prompt glyph rendered before each command line.",
              "attribute": "prompt"
            },
            {
              "kind": "field",
              "name": "title",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text centered in the window chrome bar. Empty hides it, leaving only the orbs.",
              "attribute": "title"
            },
            {
              "kind": "field",
              "name": "speed",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "50",
              "description": "Milliseconds per character when typing command lines.",
              "attribute": "speed"
            },
            {
              "kind": "field",
              "name": "lines",
              "privacy": "public",
              "type": {
                "text": "Array"
              },
              "description": "The transcript, as objects of shape { type: 'command' | 'output' | 'comment', text: string, delay?: number }. Commands get the prompt glyph and type character-by-character; output lines appear whole; comments render muted. `delay` is milliseconds before the line starts (default 500 for commands, 150 otherwise). Set it from script, a framework binding, or a JSON attribute.",
              "attribute": "lines",
              "default": "[]"
            },
            {
              "kind": "field",
              "name": "autoplay",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Start the animation when the element scrolls into view. Defaults to true; disable from JS or a framework wrapper with a false property value, then drive it with play().",
              "attribute": "autoplay",
              "default": "true"
            },
            {
              "kind": "field",
              "name": "loop",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Replay the transcript indefinitely, pausing briefly at the end of each cycle.",
              "attribute": "loop",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-complete",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the whole sequence has finished printing (each cycle, when looping)"
            }
          ],
          "attributes": [
            {
              "name": "lines",
              "type": {
                "text": "Array"
              },
              "description": "The transcript, as objects of shape { type: 'command' | 'output' | 'comment', text: string, delay?: number }. Commands get the prompt glyph and type character-by-character; output lines appear whole; comments render muted. `delay` is milliseconds before the line starts (default 500 for commands, 150 otherwise). Set it from script, a framework binding, or a JSON attribute.",
              "fieldName": "lines",
              "default": "[]"
            },
            {
              "name": "prompt",
              "type": {
                "text": "string"
              },
              "default": "'$'",
              "description": "Prompt glyph rendered before each command line.",
              "fieldName": "prompt"
            },
            {
              "name": "title",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "Text centered in the window chrome bar. Empty hides it, leaving only the orbs.",
              "fieldName": "title"
            },
            {
              "name": "speed",
              "type": {
                "text": "number"
              },
              "default": "50",
              "description": "Milliseconds per character when typing command lines.",
              "fieldName": "speed"
            },
            {
              "name": "autoplay",
              "type": {
                "text": "boolean"
              },
              "description": "Start the animation when the element scrolls into view. Defaults to true; disable from JS or a framework wrapper with a false property value, then drive it with play().",
              "fieldName": "autoplay",
              "default": "true"
            },
            {
              "name": "loop",
              "type": {
                "text": "boolean"
              },
              "description": "Replay the transcript indefinitely, pausing briefly at the end of each cycle.",
              "fieldName": "loop",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-terminal",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTerminal",
          "declaration": {
            "name": "ArcTerminal",
            "module": "src/typography/terminal.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/typography/text.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Typography component with variants matching the arclight type scale.",
          "name": "ArcText",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "text"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "variant",
              "privacy": "public",
              "type": {
                "text": "'display' | 'heading' | 'body' | 'muted' | 'ghost' | 'accent' | 'label' | 'wordmark' | 'code'"
              },
              "description": "Typography variant that controls font size, weight, letter-spacing, line-height, and color.",
              "attribute": "variant",
              "default": "'body'",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "as",
              "privacy": "public",
              "type": {
                "text": "'p' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'span'"
              },
              "description": "The HTML element to render. Allows semantic heading hierarchy to be set independently from the visual variant.",
              "attribute": "as",
              "default": "'p'"
            }
          ],
          "attributes": [
            {
              "name": "variant",
              "type": {
                "text": "'display' | 'heading' | 'body' | 'muted' | 'ghost' | 'accent' | 'label' | 'wordmark' | 'code'"
              },
              "description": "Typography variant that controls font size, weight, letter-spacing, line-height, and color.",
              "fieldName": "variant",
              "default": "'body'"
            },
            {
              "name": "as",
              "type": {
                "text": "'p' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6' | 'span'"
              },
              "description": "The HTML element to render. Allows semantic heading hierarchy to be set independently from the visual variant.",
              "fieldName": "as",
              "default": "'p'"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-text",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcText",
          "declaration": {
            "name": "ArcText",
            "module": "src/typography/text.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/typography/time-ago.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Relative time display that auto-updates (\"3 minutes ago\", \"yesterday\").",
          "name": "ArcTimeAgo",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "time"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "field",
              "name": "datetime",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "ISO 8601 date string or any value parseable by new Date().",
              "attribute": "datetime"
            },
            {
              "kind": "field",
              "name": "locale",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "'en-US'",
              "description": "BCP 47 locale tag for Intl.RelativeTimeFormat output.",
              "attribute": "locale"
            },
            {
              "kind": "field",
              "name": "live",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Auto-update the relative time on an adaptive interval.",
              "attribute": "live",
              "default": "true",
              "reflects": true
            }
          ],
          "attributes": [
            {
              "name": "datetime",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "ISO 8601 date string or any value parseable by new Date().",
              "fieldName": "datetime"
            },
            {
              "name": "live",
              "type": {
                "text": "boolean"
              },
              "description": "Auto-update the relative time on an adaptive interval.",
              "fieldName": "live",
              "default": "true"
            },
            {
              "name": "locale",
              "type": {
                "text": "string"
              },
              "default": "'en-US'",
              "description": "BCP 47 locale tag for Intl.RelativeTimeFormat output.",
              "fieldName": "locale"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-time-ago",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTimeAgo",
          "declaration": {
            "name": "ArcTimeAgo",
            "module": "src/typography/time-ago.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/typography/truncate.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Multi-line text clamping with expandable show-more toggle.",
          "name": "ArcTruncate",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "content"
            },
            {
              "name": "toggle"
            }
          ],
          "slots": [
            {
              "description": "Default content.",
              "name": ""
            }
          ],
          "members": [
            {
              "kind": "field",
              "name": "lines",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "3",
              "description": "Maximum number of visible lines before clamping",
              "attribute": "lines",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "expanded",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the text is fully expanded",
              "attribute": "expanded",
              "default": "false",
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-toggle",
              "type": {
                "text": "CustomEvent<{ expanded: boolean }>"
              },
              "description": "Fired when expand/collapse toggle is clicked, with { expanded } detail"
            }
          ],
          "attributes": [
            {
              "name": "lines",
              "type": {
                "text": "number"
              },
              "default": "3",
              "description": "Maximum number of visible lines before clamping",
              "fieldName": "lines"
            },
            {
              "name": "expanded",
              "type": {
                "text": "boolean"
              },
              "description": "Whether the text is fully expanded",
              "fieldName": "expanded",
              "default": "false"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-truncate",
          "customElement": true,
          "group": null,
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTruncate",
          "declaration": {
            "name": "ArcTruncate",
            "module": "src/typography/truncate.js"
          }
        }
      ]
    },
    {
      "kind": "javascript-module",
      "path": "src/typography/typewriter.js",
      "declarations": [
        {
          "kind": "class",
          "description": "Character-by-character text reveal animation with blinking cursor.",
          "name": "ArcTypewriter",
          "cssParts": [
            {
              "description": "The root element.",
              "name": "base"
            },
            {
              "name": "text"
            }
          ],
          "slots": [],
          "members": [
            {
              "kind": "method",
              "name": "replay",
              "description": "Restart the typing animation from the beginning.",
              "return": {
                "type": {
                  "text": "void"
                }
              }
            },
            {
              "kind": "field",
              "name": "text",
              "privacy": "public",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The text to type out character by character",
              "attribute": "text"
            },
            {
              "kind": "field",
              "name": "speed",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "50",
              "description": "Milliseconds per character",
              "attribute": "speed"
            },
            {
              "kind": "field",
              "name": "delay",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Initial delay in milliseconds before typing starts",
              "attribute": "delay"
            },
            {
              "kind": "field",
              "name": "pauseEnd",
              "privacy": "public",
              "type": {
                "text": "number"
              },
              "default": "2000",
              "description": "Milliseconds to pause at the end before looping",
              "attribute": "pause-end",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "cursor",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Show a blinking cursor during and after typing",
              "attribute": "cursor",
              "default": "true",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "loop",
              "privacy": "public",
              "type": {
                "text": "boolean"
              },
              "description": "Loop the animation indefinitely",
              "attribute": "loop",
              "default": "false",
              "reflects": true
            },
            {
              "kind": "field",
              "name": "nowrap",
              "privacy": "public",
              "attribute": "nowrap",
              "default": "false",
              "type": {
                "text": "boolean"
              },
              "reflects": true
            }
          ],
          "events": [
            {
              "name": "arc-complete",
              "type": {
                "text": "CustomEvent<void>"
              },
              "description": "Fired when the typing animation finishes revealing all characters"
            }
          ],
          "attributes": [
            {
              "name": "text",
              "type": {
                "text": "string"
              },
              "default": "''",
              "description": "The text to type out character by character",
              "fieldName": "text"
            },
            {
              "name": "speed",
              "type": {
                "text": "number"
              },
              "default": "50",
              "description": "Milliseconds per character",
              "fieldName": "speed"
            },
            {
              "name": "delay",
              "type": {
                "text": "number"
              },
              "default": "0",
              "description": "Initial delay in milliseconds before typing starts",
              "fieldName": "delay"
            },
            {
              "name": "cursor",
              "type": {
                "text": "boolean"
              },
              "description": "Show a blinking cursor during and after typing",
              "fieldName": "cursor",
              "default": "true"
            },
            {
              "name": "loop",
              "type": {
                "text": "boolean"
              },
              "description": "Loop the animation indefinitely",
              "fieldName": "loop",
              "default": "false"
            },
            {
              "name": "nowrap",
              "fieldName": "nowrap",
              "default": "false",
              "type": {
                "text": "boolean"
              }
            },
            {
              "name": "pause-end",
              "type": {
                "text": "number"
              },
              "default": "2000",
              "description": "Milliseconds to pause at the end before looping",
              "fieldName": "pauseEnd"
            }
          ],
          "mixins": [
            {
              "name": "DeclaredPropsMixin",
              "module": "/src/shared/props.js"
            }
          ],
          "superclass": {
            "name": "LitElement",
            "package": "lit"
          },
          "tagName": "arc-typewriter",
          "customElement": true,
          "group": "marketing",
          "status": "stable"
        }
      ],
      "exports": [
        {
          "kind": "js",
          "name": "ArcTypewriter",
          "declaration": {
            "name": "ArcTypewriter",
            "module": "src/typography/typewriter.js"
          }
        }
      ]
    }
  ]
}
