[
  {
    "name": "Alert",
    "tagName": "noora-alert",
    "elementClassName": "NooraAlert",
    "className": "noora-alert",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Communicates contextual information with a semantic status.",
    "usage": "<noora-alert status=\"success\" title=\"Project created\"></noora-alert>",
    "attributes": [
      {
        "name": "type",
        "property": "type",
        "type": "string",
        "values": [
          "primary",
          "secondary"
        ],
        "default": "primary",
        "description": "Controls the visual emphasis."
      },
      {
        "name": "status",
        "property": "status",
        "type": "string",
        "values": [
          "information",
          "warning",
          "error",
          "success"
        ],
        "default": "information",
        "description": "Sets the semantic status."
      },
      {
        "name": "size",
        "property": "size",
        "type": "string",
        "values": [
          "small",
          "medium",
          "large"
        ],
        "default": "medium",
        "description": "Controls the alert dimensions and content layout."
      },
      {
        "name": "dismissible",
        "property": "dismissible",
        "type": "boolean",
        "default": false,
        "description": "Shows a dismiss control."
      },
      {
        "name": "show-icon",
        "property": "showIcon",
        "type": "boolean",
        "default": true,
        "description": "Shows the semantic status icon."
      },
      {
        "name": "title",
        "property": "title",
        "type": "string",
        "default": "",
        "description": "Sets the alert title."
      },
      {
        "name": "description",
        "property": "description",
        "type": "string",
        "description": "Sets the description shown by large alerts."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "Rich description content that takes precedence over the description attribute."
      },
      {
        "name": "action",
        "description": "Actions displayed beside or below the title."
      }
    ],
    "cssParts": [
      {
        "name": "alert",
        "description": "The alert container."
      },
      {
        "name": "title",
        "description": "The title."
      },
      {
        "name": "description",
        "description": "The description."
      },
      {
        "name": "actions",
        "description": "The action container."
      }
    ],
    "events": [
      {
        "name": "noora-dismiss",
        "type": "CustomEvent<Record<string, never>>",
        "description": "Emitted after the alert is dismissed."
      }
    ],
    "notes": [
      "A dismiss action emits a `noora-dismiss` event and hides the element."
    ],
    "examples": [
      {
        "id": "types",
        "title": "Types",
        "description": "Use primary alerts by default and secondary alerts for lower emphasis.",
        "markup": "<noora-alert type=\"primary\" status=\"error\" title=\"Insert your text here\"></noora-alert>\n<noora-alert type=\"secondary\" status=\"error\" title=\"Insert your text here\"></noora-alert>"
      },
      {
        "id": "sizes",
        "title": "Sizes",
        "description": "Choose a compact, standard, or descriptive layout.",
        "markup": "<noora-alert size=\"small\" status=\"error\" title=\"Insert your text here\"></noora-alert>\n<noora-alert size=\"medium\" status=\"error\" title=\"Insert your text here\"></noora-alert>\n<noora-alert size=\"large\" status=\"error\" title=\"Insert your text here\" description=\"Insert your description here. Description in this case is usually two lines\"></noora-alert>"
      },
      {
        "id": "primary-statuses",
        "title": "Primary statuses",
        "description": "Primary alerts support error, information, success, and warning states.",
        "markup": "<noora-alert status=\"error\" title=\"Insert your text here\"></noora-alert>\n<noora-alert status=\"information\" title=\"Insert your text here\"></noora-alert>\n<noora-alert status=\"success\" title=\"Insert your text here\"></noora-alert>\n<noora-alert status=\"warning\" title=\"Insert your text here\"></noora-alert>"
      },
      {
        "id": "secondary-statuses",
        "title": "Secondary statuses",
        "description": "Secondary alerts provide the same semantic states with lower emphasis.",
        "markup": "<noora-alert type=\"secondary\" status=\"error\" title=\"Insert your text here\"></noora-alert>\n<noora-alert type=\"secondary\" status=\"information\" title=\"Insert your text here\"></noora-alert>\n<noora-alert type=\"secondary\" status=\"success\" title=\"Insert your text here\"></noora-alert>\n<noora-alert type=\"secondary\" status=\"warning\" title=\"Insert your text here\"></noora-alert>"
      },
      {
        "id": "dismissible",
        "title": "Dismissible",
        "description": "Dismiss controls are available in every alert size.",
        "markup": "<noora-alert dismissible size=\"small\" status=\"error\" title=\"Insert your text here\"></noora-alert>\n<noora-alert dismissible size=\"medium\" status=\"error\" title=\"Insert your text here\"></noora-alert>\n<noora-alert dismissible size=\"large\" status=\"error\" title=\"Insert your text here\" description=\"Insert your description here. Description in this case is usually two lines\"></noora-alert>"
      },
      {
        "id": "actions",
        "title": "Actions",
        "description": "Place related actions in the action slot for compact or descriptive alerts.",
        "markup": "<noora-alert size=\"small\" status=\"error\" title=\"Insert your text here\">\n  <noora-link-button slot=\"action\" size=\"medium\" variant=\"secondary\" underline label=\"Action\"></noora-link-button>\n</noora-alert>\n<noora-alert size=\"large\" status=\"error\" title=\"Insert your text here\" description=\"Insert your description here. Description in this case is usually two lines\">\n  <noora-link-button slot=\"action\" size=\"large\" variant=\"secondary\" underline label=\"Action\"></noora-link-button>\n</noora-alert>"
      },
      {
        "id": "edge-cases",
        "title": "Edge cases",
        "description": "Long content and combined actions preserve the alert layout.",
        "markup": "<noora-alert status=\"information\" title=\"This is a very long title that might wrap to multiple lines in smaller containers or on mobile devices to test text wrapping behavior\"></noora-alert>\n<noora-alert size=\"large\" status=\"warning\" title=\"Important Notice\" description=\"This is a very long description that contains multiple sentences and important information. It should properly wrap and maintain readability even when the content extends beyond the typical two-line description. This helps test the layout behavior with extensive content.\"></noora-alert>\n<noora-alert dismissible size=\"medium\" status=\"success\" title=\"Operation completed successfully\">\n  <noora-link-button slot=\"action\" size=\"medium\" variant=\"secondary\" underline label=\"View Details\"></noora-link-button>\n  <noora-link-button slot=\"action\" size=\"medium\" variant=\"secondary\" underline label=\"Dismiss\"></noora-link-button>\n</noora-alert>"
      }
    ],
    "properties": []
  },
  {
    "name": "Avatar",
    "tagName": "noora-avatar",
    "elementClassName": "NooraAvatar",
    "className": "noora-avatar",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Displays an image, initials, or a placeholder for an account.",
    "usage": "<noora-avatar name=\"Ada Lovelace\"></noora-avatar>",
    "attributes": [
      {
        "name": "name",
        "property": "name",
        "type": "string",
        "default": "",
        "description": "Provides the account name and accessible label."
      },
      {
        "name": "color",
        "property": "color",
        "type": "string",
        "values": [
          "gray",
          "red",
          "orange",
          "yellow",
          "green",
          "azure",
          "blue",
          "purple",
          "pink"
        ],
        "default": "pink",
        "description": "Controls the fallback color."
      },
      {
        "name": "image-href",
        "property": "imageHref",
        "type": "string",
        "description": "Sets the image location."
      },
      {
        "name": "image-decoding",
        "property": "imageDecoding",
        "type": "string",
        "values": [
          "sync",
          "async",
          "auto"
        ],
        "default": "async",
        "description": "Controls image decoding."
      },
      {
        "name": "image-loading",
        "property": "imageLoading",
        "type": "string",
        "values": [
          "eager",
          "lazy"
        ],
        "description": "Controls image loading."
      },
      {
        "name": "fallback",
        "property": "fallback",
        "type": "string",
        "values": [
          "initials",
          "placeholder"
        ],
        "default": "initials",
        "description": "Chooses the fallback when the image is unavailable."
      },
      {
        "name": "size",
        "property": "size",
        "type": "string",
        "values": [
          "2xsmall",
          "small",
          "medium",
          "large",
          "xlarge",
          "2xlarge"
        ],
        "default": "medium",
        "description": "Controls the avatar dimensions."
      }
    ],
    "readonlyProperties": [],
    "slots": [],
    "cssParts": [
      {
        "name": "avatar",
        "description": "The avatar container."
      },
      {
        "name": "image",
        "description": "The image."
      },
      {
        "name": "initials",
        "description": "The initials fallback."
      }
    ],
    "events": [
      {
        "name": "noora-status-change",
        "type": "CustomEvent<{ status: \"loaded\" | \"error\" }>",
        "description": "Emitted when the avatar image loads or fails."
      }
    ],
    "notes": [
      "Image loading changes emit a `noora-status-change` event."
    ],
    "examples": [
      {
        "id": "basic",
        "title": "Basic",
        "description": "Display initials, a remote image, or a placeholder fallback.",
        "markup": "<noora-avatar name=\"Asmit Malakannawar\"></noora-avatar>\n<noora-avatar name=\"Marek Fořt\" image-href=\"https://www.gravatar.com/avatar/292c129cf17a552c08b4d9dcf2c6c1f8\"></noora-avatar>\n<noora-avatar name=\"Marek Fořt\" image-href=\"https://www.invalid.url\" fallback=\"placeholder\"></noora-avatar>"
      },
      {
        "id": "sizes",
        "title": "Sizes",
        "description": "Avatar sizes range from twice-extra-small to twice-extra-large.",
        "markup": "<noora-avatar name=\"Asmit Malakannawar\" size=\"2xsmall\" color=\"gray\"></noora-avatar>\n<noora-avatar name=\"Asmit Malakannawar\" size=\"small\" color=\"orange\"></noora-avatar>\n<noora-avatar name=\"Asmit Malakannawar\" size=\"medium\" color=\"yellow\"></noora-avatar>\n<noora-avatar name=\"Asmit Malakannawar\" size=\"large\" color=\"azure\"></noora-avatar>\n<noora-avatar name=\"Asmit Malakannawar\" size=\"xlarge\" color=\"blue\"></noora-avatar>\n<noora-avatar name=\"Asmit Malakannawar\" size=\"2xlarge\" color=\"purple\"></noora-avatar>"
      },
      {
        "id": "colors",
        "title": "Colors",
        "description": "Use any of the fallback colors available to LiveView avatars.",
        "markup": "<noora-avatar name=\"John Doe\" color=\"gray\"></noora-avatar>\n<noora-avatar name=\"Jane Smith\" color=\"red\"></noora-avatar>\n<noora-avatar name=\"Bob Johnson\" color=\"orange\"></noora-avatar>\n<noora-avatar name=\"Alice Brown\" color=\"yellow\"></noora-avatar>\n<noora-avatar name=\"Charlie Davis\" color=\"azure\"></noora-avatar>\n<noora-avatar name=\"Emma Wilson\" color=\"blue\"></noora-avatar>\n<noora-avatar name=\"Frank Miller\" color=\"purple\"></noora-avatar>\n<noora-avatar name=\"Grace Taylor\" color=\"pink\"></noora-avatar>"
      },
      {
        "id": "edge-cases",
        "title": "Name formats",
        "description": "Initials handle single names, multiple names, separators, and accented characters.",
        "markup": "<noora-avatar name=\"Madonna\" color=\"purple\"></noora-avatar>\n<noora-avatar name=\"Mary Jane Watson\" color=\"red\"></noora-avatar>\n<noora-avatar name=\"Anne-Marie Johnson\" color=\"blue\"></noora-avatar>\n<noora-avatar name=\"john_doe_123\" color=\"gray\"></noora-avatar>\n<noora-avatar name=\"José García\" color=\"orange\"></noora-avatar>\n<noora-avatar name=\"Failed Image Test\" image-href=\"\" fallback=\"initials\"></noora-avatar>"
      }
    ],
    "properties": []
  },
  {
    "name": "Badge",
    "tagName": "noora-badge",
    "elementClassName": "NooraBadge",
    "className": "noora-badge",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Labels an item with compact status or categorization information.",
    "usage": "<noora-badge color=\"success\">Available</noora-badge>",
    "attributes": [
      {
        "name": "aria-label",
        "property": "_ariaLabel",
        "publicProperty": false,
        "type": "string",
        "description": "Provides an accessible name when visible text is unavailable."
      },
      {
        "name": "appearance",
        "property": "appearance",
        "phoenixName": "style",
        "type": "string",
        "values": [
          "fill",
          "light-fill"
        ],
        "default": "fill",
        "description": "Controls whether the badge uses a solid or light fill."
      },
      {
        "name": "color",
        "property": "color",
        "type": "string",
        "values": [
          "neutral",
          "destructive",
          "warning",
          "attention",
          "success",
          "information",
          "focus",
          "primary",
          "secondary"
        ],
        "default": "neutral",
        "description": "Controls the semantic color. Disabled badges ignore this value."
      },
      {
        "name": "size",
        "property": "size",
        "type": "string",
        "values": [
          "small",
          "large"
        ],
        "default": "small",
        "description": "Controls the badge dimensions and text size."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "reflect": true,
        "description": "Uses the disabled presentation regardless of color."
      },
      {
        "name": "dot",
        "property": "dot",
        "type": "boolean",
        "default": false,
        "reflect": true,
        "description": "Displays a dot before the label when the icon slot is empty."
      },
      {
        "name": "icon-only",
        "property": "iconOnly",
        "type": "boolean",
        "default": false,
        "reflect": true,
        "description": "Hides the label and displays only the icon slot."
      },
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Provides fallback text when the default slot is empty."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "The visible label."
      },
      {
        "name": "icon",
        "description": "An icon displayed before the label. It takes precedence over dot."
      }
    ],
    "cssParts": [
      {
        "name": "badge",
        "description": "The badge container."
      },
      {
        "name": "icon",
        "description": "The icon or dot container."
      },
      {
        "name": "label",
        "description": "The visible label."
      }
    ],
    "stylingExample": "noora-badge::part(badge) {\n  text-transform: uppercase;\n}",
    "notes": [
      "The browser component uses appearance for the visual style because style is a native element property. The Phoenix component keeps its existing style attribute, and both map to the same contract value.",
      "A slotted icon takes precedence over the generated dot."
    ],
    "examples": [
      {
        "id": "colors",
        "title": "Colors",
        "description": "Colors communicate semantic meaning while sharing the same compact shape.",
        "markup": "<noora-badge color=\"neutral\">Neutral</noora-badge>\n<noora-badge color=\"destructive\">Destructive</noora-badge>\n<noora-badge color=\"warning\">Warning</noora-badge>\n<noora-badge color=\"attention\">Attention</noora-badge>\n<noora-badge color=\"success\">Success</noora-badge>\n<noora-badge color=\"information\">Information</noora-badge>\n<noora-badge color=\"focus\">Focus</noora-badge>\n<noora-badge color=\"primary\">Primary</noora-badge>\n<noora-badge color=\"secondary\">Secondary</noora-badge>"
      },
      {
        "id": "appearances-and-sizes",
        "title": "Appearances and sizes",
        "description": "Use a light fill for lower emphasis and choose between small and large sizing.",
        "markup": "<noora-badge appearance=\"fill\" size=\"small\" color=\"success\">Small fill</noora-badge>\n<noora-badge appearance=\"light-fill\" size=\"small\" color=\"success\">Small light fill</noora-badge>\n<noora-badge appearance=\"fill\" size=\"large\" color=\"information\">Large fill</noora-badge>\n<noora-badge appearance=\"light-fill\" size=\"large\" color=\"information\">Large light fill</noora-badge>"
      },
      {
        "id": "icons-and-states",
        "title": "Icons and states",
        "description": "Use a generated dot, provide an icon through its named slot, or apply the disabled presentation.",
        "markup": "<noora-badge dot color=\"success\">Online</noora-badge>\n\n<noora-badge appearance=\"light-fill\" color=\"warning\">\n  <svg slot=\"icon\" aria-hidden=\"true\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\">\n    <circle cx=\"12\" cy=\"12\" r=\"9\" stroke-width=\"2\"></circle>\n    <path d=\"M12 7v6\" stroke-width=\"2\"></path>\n    <path d=\"M12 17h.01\" stroke-width=\"2\"></path>\n  </svg>\n  Needs attention\n</noora-badge>\n\n<noora-badge disabled>Disabled</noora-badge>"
      }
    ],
    "properties": [],
    "events": []
  },
  {
    "name": "Banner",
    "tagName": "noora-banner",
    "elementClassName": "NooraBanner",
    "className": "noora-banner",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Displays a page-level message with an optional dismiss action.",
    "usage": "<noora-banner status=\"success\" title=\"Changes saved\"></noora-banner>",
    "attributes": [
      {
        "name": "status",
        "property": "status",
        "type": "string",
        "values": [
          "primary",
          "error",
          "success",
          "warning",
          "information"
        ],
        "default": "primary",
        "description": "Sets the semantic status."
      },
      {
        "name": "title",
        "property": "title",
        "type": "string",
        "default": "",
        "description": "Sets the banner title."
      },
      {
        "name": "description",
        "property": "description",
        "type": "string",
        "description": "Sets the optional description."
      },
      {
        "name": "dismissible",
        "property": "dismissible",
        "type": "boolean",
        "default": false,
        "description": "Shows a dismiss control."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "icon",
        "description": "A custom icon used by primary banners."
      }
    ],
    "cssParts": [
      {
        "name": "banner",
        "description": "The banner container."
      },
      {
        "name": "title",
        "description": "The title."
      },
      {
        "name": "description",
        "description": "The description."
      }
    ],
    "events": [
      {
        "name": "noora-dismiss",
        "type": "CustomEvent<Record<string, never>>",
        "description": "Emitted after the banner is dismissed."
      }
    ],
    "notes": [
      "A dismiss action emits a `noora-dismiss` event and hides the element."
    ],
    "examples": [
      {
        "id": "statuses",
        "title": "Statuses",
        "description": "Banners support primary, error, success, warning, and information states.",
        "markup": "<noora-banner status=\"primary\" title=\"Primary status\" description=\"I am a primary banner\"></noora-banner>\n<noora-banner status=\"error\" title=\"Error status\" description=\"I am an error banner\"></noora-banner>\n<noora-banner status=\"success\" title=\"Success status\" description=\"I am a success banner\"></noora-banner>\n<noora-banner status=\"warning\" title=\"Warning status\" description=\"I am a warning banner\"></noora-banner>\n<noora-banner status=\"information\" title=\"Information status\" description=\"I am an information banner\"></noora-banner>"
      },
      {
        "id": "custom-icon",
        "title": "Custom icon",
        "description": "Primary banners accept a custom icon through the icon slot.",
        "markup": "<noora-banner status=\"primary\" title=\"Primary status\" description=\"I am a primary banner with a custom icon\">\n  <noora-icon slot=\"icon\" name=\"alert_circle\"></noora-icon>\n</noora-banner>"
      },
      {
        "id": "content-variations",
        "title": "Content variations",
        "description": "Descriptions are optional, banners can be dismissible, and long content wraps.",
        "markup": "<noora-banner status=\"primary\" title=\"Title only banner\"></noora-banner>\n<noora-banner dismissible status=\"warning\" title=\"Dismissible banner\" description=\"This banner can be dismissed by the user\"></noora-banner>\n<noora-banner status=\"information\" title=\"Banner with longer content\" description=\"This is a banner with much longer descriptive text that demonstrates how the component handles multiple lines of content and text wrapping behavior\"></noora-banner>"
      }
    ],
    "properties": []
  },
  {
    "name": "BreadcrumbItem",
    "tagName": "noora-breadcrumb-item",
    "elementClassName": "NooraBreadcrumbItem",
    "className": "noora-breadcrumb",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Describes one declarative item inside breadcrumbs.",
    "usage": "<noora-breadcrumb-item href=\"/projects\">Projects</noora-breadcrumb-item>",
    "standalone": false,
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the label instead of using text content."
      },
      {
        "name": "href",
        "property": "href",
        "type": "string",
        "description": "Sets the navigation address."
      },
      {
        "name": "icon",
        "property": "icon",
        "type": "string",
        "description": "Shows an icon before the label."
      },
      {
        "name": "avatar",
        "property": "avatar",
        "type": "boolean",
        "default": false,
        "description": "Shows an avatar before the label."
      },
      {
        "name": "avatar-name",
        "property": "avatarName",
        "type": "string",
        "description": "Sets the avatar name."
      },
      {
        "name": "avatar-color",
        "property": "avatarColor",
        "type": "string",
        "description": "Sets the avatar color."
      },
      {
        "name": "avatar-image-href",
        "property": "avatarImageHref",
        "type": "string",
        "description": "Sets the avatar image address."
      },
      {
        "name": "badge-label",
        "property": "badgeLabel",
        "type": "string",
        "description": "Shows a badge with this label."
      },
      {
        "name": "badge-color",
        "property": "badgeColor",
        "type": "string",
        "description": "Sets the badge color."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "The label followed by optional noora-dropdown-item children."
      }
    ],
    "cssParts": [],
    "notes": [
      "Nested noora-dropdown-item children create the optional breadcrumb menu."
    ],
    "examples": [
      {
        "id": "item",
        "title": "Item",
        "description": "Describe one level in a breadcrumb path.",
        "markup": "<noora-breadcrumb-item href=\"/projects\">Projects</noora-breadcrumb-item>"
      }
    ],
    "events": []
  },
  {
    "name": "Breadcrumbs",
    "tagName": "noora-breadcrumbs",
    "elementClassName": "NooraBreadcrumbs",
    "className": "noora-breadcrumbs",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Shows the current location in a navigational hierarchy.",
    "usage": "<noora-breadcrumbs>\n  <noora-breadcrumb-item href=\"/projects\">Projects</noora-breadcrumb-item>\n  <noora-breadcrumb-item>Tuist</noora-breadcrumb-item>\n</noora-breadcrumbs>",
    "previewLayout": "stack",
    "attributes": [
      {
        "name": "style-variant",
        "property": "styleVariant",
        "type": "string",
        "values": [
          "slash",
          "arrow"
        ],
        "default": "slash",
        "description": "Controls the separator style."
      }
    ],
    "properties": [
      {
        "name": "items",
        "type": "json",
        "typescriptType": "Array<Record<string, unknown>>",
        "default": [],
        "description": "Defines breadcrumbs programmatically when declarative noora-breadcrumb-item children are not used."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "Declarative noora-breadcrumb-item children."
      }
    ],
    "cssParts": [
      {
        "name": "breadcrumbs",
        "description": "The breadcrumb container."
      }
    ],
    "events": [
      {
        "name": "noora-open-change",
        "type": "CustomEvent<{ index: number; open: boolean }>",
        "description": "Emitted when a breadcrumb menu opens or closes."
      },
      {
        "name": "noora-select",
        "type": "CustomEvent<{ index: number; item: Record<string, unknown>; value: unknown }>",
        "description": "Emitted when a breadcrumb menu item is selected."
      }
    ],
    "notes": [],
    "examples": [
      {
        "id": "styles",
        "title": "Styles",
        "description": "Use slash or arrow separators between breadcrumb items.",
        "markup": "<noora-breadcrumbs style-variant=\"slash\">\n  <noora-breadcrumb-item icon=\"smart_home\">Home</noora-breadcrumb-item>\n  <noora-breadcrumb-item label=\"Products\">\n    <noora-dropdown-item value=\"electronics\">Electronics</noora-dropdown-item>\n    <noora-dropdown-item value=\"phones\" selected>Phones</noora-dropdown-item>\n  </noora-breadcrumb-item>\n  <noora-breadcrumb-item>iPhone 15</noora-breadcrumb-item>\n</noora-breadcrumbs>\n<noora-breadcrumbs style-variant=\"arrow\">\n  <noora-breadcrumb-item icon=\"smart_home\">Home</noora-breadcrumb-item>\n  <noora-breadcrumb-item label=\"Products\">\n    <noora-dropdown-item value=\"electronics\">Electronics</noora-dropdown-item>\n    <noora-dropdown-item value=\"phones\" selected>Phones</noora-dropdown-item>\n  </noora-breadcrumb-item>\n  <noora-breadcrumb-item>iPhone 15</noora-breadcrumb-item>\n</noora-breadcrumbs>"
      },
      {
        "id": "configurations",
        "title": "Configurations",
        "description": "Breadcrumb paths can combine icons, avatars, links, and plain labels.",
        "markup": "<noora-breadcrumbs style-variant=\"slash\">\n  <noora-breadcrumb-item avatar avatar-color=\"blue\">Tuist</noora-breadcrumb-item>\n  <noora-breadcrumb-item label=\"iOS App\" avatar avatar-color=\"green\">\n    <noora-dropdown-item value=\"feature\" avatar avatar-color=\"orange\">Features</noora-dropdown-item>\n    <noora-dropdown-item value=\"auth\" avatar avatar-color=\"purple\" selected>Authentication</noora-dropdown-item>\n  </noora-breadcrumb-item>\n  <noora-breadcrumb-item avatar avatar-color=\"red\">Login Screen</noora-breadcrumb-item>\n</noora-breadcrumbs>\n<noora-breadcrumbs style-variant=\"slash\">\n  <noora-breadcrumb-item icon=\"smart_home\">Dashboard</noora-breadcrumb-item>\n  <noora-breadcrumb-item>Settings</noora-breadcrumb-item>\n  <noora-breadcrumb-item>Profile</noora-breadcrumb-item>\n</noora-breadcrumbs>\n<noora-breadcrumbs style-variant=\"arrow\">\n  <noora-breadcrumb-item icon=\"smart_home\">Home</noora-breadcrumb-item>\n  <noora-breadcrumb-item>Documentation</noora-breadcrumb-item>\n  <noora-breadcrumb-item>Guides</noora-breadcrumb-item>\n  <noora-breadcrumb-item>Getting Started</noora-breadcrumb-item>\n</noora-breadcrumbs>"
      },
      {
        "id": "badges",
        "title": "Badges",
        "description": "Add compact technology or category badges next to labels.",
        "markup": "<noora-breadcrumbs style-variant=\"slash\">\n  <noora-breadcrumb-item avatar avatar-color=\"blue\">Tuist</noora-breadcrumb-item>\n  <noora-breadcrumb-item label=\"iOS App\" badge-label=\"Xcode\" badge-color=\"focus\">\n    <noora-dropdown-item value=\"ios\" href=\"#\" badge-label=\"Xcode\" badge-color=\"focus\" selected>iOS App</noora-dropdown-item>\n    <noora-dropdown-item value=\"android\" href=\"#\" badge-label=\"Gradle\" badge-color=\"success\">Android App</noora-dropdown-item>\n  </noora-breadcrumb-item>\n  <noora-breadcrumb-item>Cache</noora-breadcrumb-item>\n</noora-breadcrumbs>\n<noora-breadcrumbs style-variant=\"slash\">\n  <noora-breadcrumb-item icon=\"smart_home\">Organization</noora-breadcrumb-item>\n  <noora-breadcrumb-item label=\"Project\">\n    <noora-dropdown-item value=\"alpha\" href=\"#\" badge-label=\"Xcode\" badge-color=\"focus\">Alpha</noora-dropdown-item>\n    <noora-dropdown-item value=\"beta\" href=\"#\" badge-label=\"Gradle\" badge-color=\"success\" selected>Beta</noora-dropdown-item>\n    <noora-dropdown-item value=\"gamma\" href=\"#\" badge-label=\"Xcode\" badge-color=\"focus\">Gamma</noora-dropdown-item>\n  </noora-breadcrumb-item>\n  <noora-breadcrumb-item>Settings</noora-breadcrumb-item>\n</noora-breadcrumbs>"
      },
      {
        "id": "dropdowns",
        "title": "Dropdowns",
        "description": "Attach selectable alternatives to any breadcrumb item.",
        "markup": "<noora-breadcrumbs style-variant=\"slash\">\n  <noora-breadcrumb-item label=\"Organization\" icon=\"smart_home\">\n    <noora-dropdown-item value=\"team1\">Team Alpha</noora-dropdown-item>\n    <noora-dropdown-item value=\"team2\">Team Beta</noora-dropdown-item>\n    <noora-dropdown-item value=\"team3\">Team Gamma</noora-dropdown-item>\n    <noora-dropdown-item value=\"team4\" selected>Team Delta</noora-dropdown-item>\n  </noora-breadcrumb-item>\n  <noora-breadcrumb-item>Project X</noora-breadcrumb-item>\n</noora-breadcrumbs>\n<noora-breadcrumbs style-variant=\"arrow\">\n  <noora-breadcrumb-item avatar avatar-color=\"blue\">Company</noora-breadcrumb-item>\n  <noora-breadcrumb-item label=\"Engineering\">\n    <noora-dropdown-item value=\"backend\" avatar avatar-color=\"red\">Backend Team</noora-dropdown-item>\n    <noora-dropdown-item value=\"frontend\" avatar avatar-color=\"green\" selected>Frontend Team</noora-dropdown-item>\n  </noora-breadcrumb-item>\n  <noora-breadcrumb-item>React Components</noora-breadcrumb-item>\n</noora-breadcrumbs>"
      }
    ]
  },
  {
    "name": "ButtonDropdown",
    "tagName": "noora-button-dropdown",
    "elementClassName": "NooraButtonDropdown",
    "className": "noora-button-dropdown",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Combines a primary button action with an attached menu.",
    "usage": "<noora-button-dropdown label=\"Create\">\n  <noora-dropdown-item value=\"project\">Project</noora-dropdown-item>\n</noora-button-dropdown>",
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the main action label."
      },
      {
        "name": "size",
        "property": "size",
        "type": "string",
        "values": [
          "medium",
          "large"
        ],
        "default": "large",
        "description": "Controls the dimensions."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Disables both controls."
      },
      {
        "name": "open",
        "property": "open",
        "type": "boolean",
        "default": false,
        "reflect": true,
        "description": "Controls whether the menu is open."
      },
      {
        "name": "close-on-select",
        "property": "closeOnSelect",
        "type": "boolean",
        "default": true,
        "description": "Closes the menu after a selection."
      },
      {
        "name": "keep-open",
        "property": "keepOpen",
        "type": "boolean",
        "default": false,
        "description": "Keeps the menu open after selection."
      },
      {
        "name": "align",
        "property": "align",
        "type": "string",
        "values": [
          "start",
          "end"
        ],
        "default": "start",
        "description": "Aligns the menu to the button."
      }
    ],
    "properties": [
      {
        "name": "items",
        "type": "json",
        "typescriptType": "Array<Record<string, unknown>>",
        "default": [],
        "description": "Defines menu items programmatically when declarative noora-dropdown-item children are not used."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "icon-left",
        "description": "An icon before the main label."
      },
      {
        "name": "icon-right",
        "description": "An icon after the main label."
      },
      {
        "name": "",
        "description": "Declarative noora-dropdown-item children."
      }
    ],
    "cssParts": [
      {
        "name": "main-button",
        "description": "The main action."
      },
      {
        "name": "trigger",
        "description": "The menu trigger."
      },
      {
        "name": "content",
        "description": "The menu content."
      }
    ],
    "events": [
      {
        "name": "noora-action",
        "type": "CustomEvent<Record<string, never>>",
        "description": "Emitted when the primary button is activated."
      },
      {
        "name": "noora-open-change",
        "type": "CustomEvent<{ open: boolean }>",
        "description": "Emitted when the menu opens or closes."
      },
      {
        "name": "noora-select",
        "type": "CustomEvent<{ item: Record<string, unknown>; value: unknown }>",
        "description": "Emitted when a menu item is selected."
      }
    ],
    "notes": [
      "Selections emit a `noora-select` event."
    ],
    "examples": [
      {
        "id": "default",
        "title": "Default",
        "description": "Attach related options to a primary action.",
        "markup": "<noora-button-dropdown label=\"Button\">\n  <noora-dropdown-item value=\"1\">Option 1</noora-dropdown-item>\n  <noora-dropdown-item value=\"2\">Option 2</noora-dropdown-item>\n  <noora-dropdown-item value=\"3\">Option 3</noora-dropdown-item>\n</noora-button-dropdown>"
      },
      {
        "id": "sizes",
        "title": "Sizes",
        "description": "Button dropdowns are available in medium and large sizes.",
        "markup": "<noora-button-dropdown label=\"Button\" size=\"medium\">\n  <noora-dropdown-item value=\"1\">Option 1</noora-dropdown-item>\n  <noora-dropdown-item value=\"2\">Option 2</noora-dropdown-item>\n</noora-button-dropdown>\n<noora-button-dropdown label=\"Button\" size=\"large\">\n  <noora-dropdown-item value=\"1\">Option 1</noora-dropdown-item>\n  <noora-dropdown-item value=\"2\">Option 2</noora-dropdown-item>\n</noora-button-dropdown>"
      },
      {
        "id": "icons",
        "title": "Icons",
        "description": "Place icons on either side of the main action label.",
        "markup": "<noora-button-dropdown label=\"Button\">\n  <noora-icon slot=\"icon-left\" name=\"chevron_left\"></noora-icon>\n  <noora-icon slot=\"icon-right\" name=\"chevron_right\"></noora-icon>\n  <noora-dropdown-item value=\"1\">Option 1</noora-dropdown-item>\n  <noora-dropdown-item value=\"2\">Option 2</noora-dropdown-item>\n</noora-button-dropdown>"
      },
      {
        "id": "disabled",
        "title": "Disabled",
        "description": "The disabled state prevents both action and menu interaction.",
        "markup": "<noora-button-dropdown disabled label=\"Button\">\n  <noora-dropdown-item value=\"1\">Option 1</noora-dropdown-item>\n  <noora-dropdown-item value=\"2\">Option 2</noora-dropdown-item>\n</noora-button-dropdown>"
      }
    ]
  },
  {
    "name": "ButtonGroupItem",
    "tagName": "noora-button-group-item",
    "elementClassName": "NooraButtonGroupItem",
    "className": "noora-button-group-item",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Describes one declarative control inside a button group.",
    "usage": "<noora-button-group-item value=\"day\">Day</noora-button-group-item>",
    "standalone": false,
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the item label instead of using text content."
      },
      {
        "name": "value",
        "property": "value",
        "type": "string",
        "description": "Sets the value emitted when the item is selected."
      },
      {
        "name": "href",
        "property": "href",
        "type": "string",
        "description": "Renders the item as a link."
      },
      {
        "name": "icon",
        "property": "icon",
        "type": "string",
        "description": "Sets the icon for an icon-only item."
      },
      {
        "name": "icon-left",
        "property": "iconLeft",
        "type": "string",
        "description": "Shows an icon before the label."
      },
      {
        "name": "icon-right",
        "property": "iconRight",
        "type": "string",
        "description": "Shows an icon after the label."
      },
      {
        "name": "icon-only",
        "property": "iconOnly",
        "type": "boolean",
        "default": false,
        "description": "Uses the icon as the complete item content."
      },
      {
        "name": "aria-label",
        "property": "ariaLabel",
        "type": "string",
        "description": "Provides an accessible label for an icon-only item."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Disables the item."
      },
      {
        "name": "selected",
        "property": "selected",
        "type": "boolean",
        "default": false,
        "description": "Shows the item in its selected state."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "The item label."
      }
    ],
    "cssParts": [],
    "notes": [
      "Use this element inside noora-button-group."
    ],
    "examples": [
      {
        "id": "item",
        "title": "Item",
        "description": "Describe one button-group control.",
        "markup": "<noora-button-group-item value=\"day\">Day</noora-button-group-item>"
      }
    ],
    "events": []
  },
  {
    "name": "ButtonGroup",
    "tagName": "noora-button-group",
    "elementClassName": "NooraButtonGroup",
    "className": "noora-button-group",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Groups related controls into a compact segmented surface.",
    "usage": "<noora-button-group>\n  <noora-button-group-item value=\"day\">Day</noora-button-group-item>\n  <noora-button-group-item value=\"week\">Week</noora-button-group-item>\n</noora-button-group>",
    "attributes": [
      {
        "name": "size",
        "property": "size",
        "type": "string",
        "values": [
          "small",
          "medium",
          "large"
        ],
        "default": "medium",
        "description": "Controls child dimensions."
      }
    ],
    "properties": [
      {
        "name": "items",
        "type": "json",
        "typescriptType": "Array<Record<string, unknown>>",
        "default": [],
        "description": "Defines group items programmatically when declarative noora-button-group-item children are not used."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "Declarative noora-button-group-item children."
      }
    ],
    "cssParts": [
      {
        "name": "group",
        "description": "The group container."
      }
    ],
    "events": [
      {
        "name": "noora-select",
        "type": "CustomEvent<{ index: number; item: Record<string, unknown>; value: unknown }>",
        "description": "Emitted when an enabled group item is selected."
      }
    ],
    "notes": [
      "Use noora-button-group-item children for declarative groups.",
      "The items property remains available for data-driven rendering."
    ],
    "examples": [
      {
        "id": "sizes",
        "title": "Sizes",
        "description": "Button groups range from small to large.",
        "markup": "<noora-button-group size=\"small\">\n  <noora-button-group-item>First</noora-button-group-item>\n  <noora-button-group-item>Second</noora-button-group-item>\n  <noora-button-group-item>Third</noora-button-group-item>\n</noora-button-group>\n<noora-button-group size=\"medium\">\n  <noora-button-group-item>First</noora-button-group-item>\n  <noora-button-group-item>Second</noora-button-group-item>\n  <noora-button-group-item>Third</noora-button-group-item>\n</noora-button-group>\n<noora-button-group size=\"large\">\n  <noora-button-group-item>First</noora-button-group-item>\n  <noora-button-group-item>Second</noora-button-group-item>\n  <noora-button-group-item>Third</noora-button-group-item>\n</noora-button-group>"
      },
      {
        "id": "icons",
        "title": "Icon configurations",
        "description": "Compare labeled controls with icons, icon-only controls, and a mixture of both.",
        "markup": "<noora-button-group size=\"medium\">\n  <noora-button-group-item icon-left=\"chevron_left\">Previous</noora-button-group-item>\n  <noora-button-group-item icon-left=\"chevron_left\" icon-right=\"chevron_right\">Both</noora-button-group-item>\n  <noora-button-group-item icon-right=\"chevron_right\">Next</noora-button-group-item>\n</noora-button-group>\n\n<noora-button-group size=\"medium\">\n  <noora-button-group-item icon=\"chevron_left\" icon-only aria-label=\"Previous\"></noora-button-group-item>\n  <noora-button-group-item icon=\"chevron_right\" icon-only aria-label=\"Next\"></noora-button-group-item>\n</noora-button-group>\n\n<noora-button-group size=\"medium\">\n  <noora-button-group-item icon=\"chevron_left\" icon-only aria-label=\"Previous\"></noora-button-group-item>\n  <noora-button-group-item>Page 1</noora-button-group-item>\n  <noora-button-group-item>Page 2</noora-button-group-item>\n  <noora-button-group-item icon=\"chevron_right\" icon-only aria-label=\"Next\"></noora-button-group-item>\n</noora-button-group>"
      },
      {
        "id": "states",
        "title": "States",
        "description": "Compare a partially disabled group with a fully disabled group.",
        "markup": "<noora-button-group size=\"medium\">\n  <noora-button-group-item>Available</noora-button-group-item>\n  <noora-button-group-item disabled>Disabled</noora-button-group-item>\n  <noora-button-group-item>Available</noora-button-group-item>\n</noora-button-group>\n\n<noora-button-group size=\"medium\">\n  <noora-button-group-item disabled>First</noora-button-group-item>\n  <noora-button-group-item disabled>Second</noora-button-group-item>\n  <noora-button-group-item disabled>Third</noora-button-group-item>\n</noora-button-group>"
      },
      {
        "id": "practical",
        "title": "Practical examples",
        "description": "Use groups for pagination controls and view switching.",
        "markup": "<noora-button-group size=\"medium\">\n  <noora-button-group-item icon=\"chevron_left\" icon-only aria-label=\"Previous\"></noora-button-group-item>\n  <noora-button-group-item selected>1</noora-button-group-item>\n  <noora-button-group-item>2</noora-button-group-item>\n  <noora-button-group-item>3</noora-button-group-item>\n  <noora-button-group-item icon=\"chevron_right\" icon-only aria-label=\"Next\"></noora-button-group-item>\n</noora-button-group>\n\n<noora-button-group size=\"small\">\n  <noora-button-group-item selected>List</noora-button-group-item>\n  <noora-button-group-item>Grid</noora-button-group-item>\n  <noora-button-group-item>Card</noora-button-group-item>\n</noora-button-group>"
      }
    ]
  },
  {
    "name": "Button",
    "tagName": "noora-button",
    "elementClassName": "NooraButton",
    "className": "noora-button",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Triggers an action, submits a form, or navigates to another location.",
    "usage": "<noora-button type=\"button\">Create project</noora-button>",
    "attributes": [
      {
        "name": "aria-describedby",
        "property": "_ariaDescribedBy",
        "publicProperty": false,
        "type": "string",
        "description": "Identifies the element that describes the button."
      },
      {
        "name": "aria-label",
        "property": "_ariaLabel",
        "publicProperty": false,
        "type": "string",
        "description": "Provides an accessible name when visible text is unavailable."
      },
      {
        "name": "aria-labelledby",
        "property": "_ariaLabelledBy",
        "publicProperty": false,
        "type": "string",
        "description": "Identifies the element that labels the button."
      },
      {
        "name": "title",
        "property": "_title",
        "publicProperty": false,
        "type": "string",
        "description": "Provides advisory information for the button."
      },
      {
        "name": "autofocus",
        "property": "autofocus",
        "type": "boolean",
        "default": false,
        "description": "Focuses the button when the page loads."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "reflect": true,
        "description": "Prevents activation and form submission."
      },
      {
        "name": "download",
        "property": "download",
        "type": "string",
        "description": "Downloads the linked resource, optionally using this value as the filename."
      },
      {
        "name": "form",
        "property": "formId",
        "type": "string",
        "description": "Associates the button with a form by element identifier."
      },
      {
        "name": "formaction",
        "property": "formAction",
        "type": "string",
        "description": "Overrides the associated form action for this submit button."
      },
      {
        "name": "formenctype",
        "property": "formEnctype",
        "type": "string",
        "description": "Overrides the associated form encoding type for this submit button."
      },
      {
        "name": "formmethod",
        "property": "formMethod",
        "type": "string",
        "description": "Overrides the associated form method for this submit button."
      },
      {
        "name": "formnovalidate",
        "property": "formNoValidate",
        "type": "boolean",
        "default": false,
        "description": "Skips validation when this button submits its associated form."
      },
      {
        "name": "formtarget",
        "property": "formTarget",
        "type": "string",
        "description": "Overrides where the associated form response is displayed."
      },
      {
        "name": "href",
        "property": "href",
        "type": "string",
        "default": "",
        "description": "Renders the control as a link to this location."
      },
      {
        "name": "icon-only",
        "property": "iconOnly",
        "type": "boolean",
        "default": false,
        "reflect": true,
        "description": "Uses the default slot as the entire button content. An accessible label is required."
      },
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Provides fallback text when the default slot is empty."
      },
      {
        "name": "name",
        "property": "name",
        "type": "string",
        "default": "",
        "description": "Sets the form field name submitted with the button value."
      },
      {
        "name": "rel",
        "property": "rel",
        "type": "string",
        "description": "Sets the relationship between the current page and a linked resource."
      },
      {
        "name": "size",
        "property": "size",
        "type": "string",
        "values": [
          "small",
          "medium",
          "large"
        ],
        "default": "large",
        "description": "Controls the button dimensions and text size."
      },
      {
        "name": "target",
        "property": "target",
        "type": "string",
        "description": "Controls where a linked resource is opened."
      },
      {
        "name": "type",
        "property": "type",
        "type": "string",
        "values": [
          "button",
          "reset",
          "submit"
        ],
        "default": "submit",
        "description": "Controls native button behavior when href is absent."
      },
      {
        "name": "value",
        "property": "value",
        "type": "string",
        "default": "",
        "description": "Sets the form value submitted with the button name."
      },
      {
        "name": "variant",
        "property": "variant",
        "type": "string",
        "values": [
          "primary",
          "secondary",
          "destructive"
        ],
        "default": "primary",
        "description": "Controls the visual emphasis and semantic intent."
      }
    ],
    "readonlyProperties": [
      {
        "name": "control",
        "type": "HTMLAnchorElement | HTMLButtonElement | null",
        "description": "The native link or button rendered inside the component."
      },
      {
        "name": "form",
        "type": "HTMLFormElement | null",
        "description": "The form associated with the button, if one exists."
      }
    ],
    "slots": [
      {
        "name": "",
        "description": "The visible label, or the complete content when icon-only is present."
      },
      {
        "name": "icon-left",
        "description": "An icon displayed before the label."
      },
      {
        "name": "icon-right",
        "description": "An icon displayed after the label."
      }
    ],
    "cssParts": [
      {
        "name": "control",
        "description": "The native link or button control."
      }
    ],
    "stylingExample": "noora-button::part(control) {\n  inline-size: 100%;\n}",
    "notes": [
      "The component emits the standard browser click event.",
      "It renders a native link when href is present and the component is enabled. Otherwise, it renders a native button and supports form submission and reset."
    ],
    "examples": [
      {
        "id": "variants",
        "title": "Variants",
        "description": "Choose a semantic variant through the variant attribute.",
        "markup": "<noora-button type=\"button\" variant=\"primary\">Primary</noora-button>\n<noora-button type=\"button\" variant=\"secondary\">Secondary</noora-button>\n<noora-button type=\"button\" variant=\"destructive\">Destructive</noora-button>"
      },
      {
        "id": "sizes",
        "title": "Sizes",
        "description": "Compare the large, medium, and small button sizes.",
        "markup": "<noora-button type=\"button\" size=\"large\">Large</noora-button>\n<noora-button type=\"button\" size=\"medium\">Medium</noora-button>\n<noora-button type=\"button\" size=\"small\">Small</noora-button>"
      },
      {
        "id": "disabled",
        "title": "Disabled",
        "description": "Compare the disabled state across every button variant.",
        "markup": "<noora-button type=\"button\" variant=\"primary\" disabled>Disabled</noora-button>\n<noora-button type=\"button\" variant=\"secondary\" disabled>Disabled</noora-button>\n<noora-button type=\"button\" variant=\"destructive\" disabled>Disabled</noora-button>"
      },
      {
        "id": "icons",
        "title": "Icons",
        "description": "Place a chevron on the left, right, or both sides of the label, or render an icon-only button.",
        "markup": "<noora-button type=\"button\">\n  <noora-icon slot=\"icon-left\" name=\"chevron_left\"></noora-icon>\n  Icon\n</noora-button>\n\n<noora-button type=\"button\">\n  Icon\n  <noora-icon slot=\"icon-right\" name=\"chevron_right\"></noora-icon>\n</noora-button>\n\n<noora-button type=\"button\">\n  <noora-icon slot=\"icon-left\" name=\"chevron_left\"></noora-icon>\n  Icon\n  <noora-icon slot=\"icon-right\" name=\"chevron_right\"></noora-icon>\n</noora-button>\n\n<noora-button type=\"button\" icon-only aria-label=\"Previous\">\n  <noora-icon name=\"chevron_left\"></noora-icon>\n</noora-button>"
      }
    ],
    "properties": [],
    "events": []
  },
  {
    "name": "Card",
    "tagName": "noora-card",
    "elementClassName": "NooraCard",
    "className": "noora-card",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Groups related content into a titled surface.",
    "usage": "<noora-card icon=\"layers\" title=\"Overview\">Content</noora-card>",
    "previewLayout": "stack",
    "attributes": [
      {
        "name": "icon",
        "property": "icon",
        "type": "string",
        "description": "Sets a Noora icon in the header."
      },
      {
        "name": "title",
        "property": "title",
        "type": "string",
        "default": "",
        "description": "Sets the card title."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "The card body."
      },
      {
        "name": "icon",
        "description": "A custom icon that takes precedence over the icon attribute."
      },
      {
        "name": "actions",
        "description": "Header actions."
      },
      {
        "name": "section",
        "description": "Additional independently styled card sections."
      }
    ],
    "cssParts": [
      {
        "name": "card",
        "description": "The card container."
      },
      {
        "name": "header",
        "description": "The card header."
      },
      {
        "name": "body",
        "description": "The card body section."
      }
    ],
    "notes": [],
    "examples": [
      {
        "id": "basic",
        "title": "Basic",
        "description": "Basic card configurations with different content arrangements.",
        "markup": "<noora-card style=\"width: 350px\" icon=\"dashboard\" title=\"Dashboard Overview\">\n  <p>This is a simple card with basic content. It contains a title, icon, and some descriptive text.</p>\n</noora-card>\n\n<noora-card style=\"width: 350px\" icon=\"chart_arcs\" title=\"Recent Analytics\">\n  <noora-button slot=\"actions\" variant=\"secondary\" label=\"View Details\" size=\"medium\"></noora-button>\n  <p>This card includes action buttons in the header area. Users can interact with these actions to perform related tasks.</p>\n</noora-card>\n\n<noora-card style=\"width: 400px\" icon=\"settings\" title=\"Project Settings\">\n  <noora-button slot=\"actions\" variant=\"secondary\" label=\"Edit\" size=\"medium\"></noora-button>\n  <noora-button slot=\"actions\" variant=\"primary\" label=\"Save\" size=\"medium\"></noora-button>\n  <p>Cards can contain multiple action buttons for different operations.</p>\n</noora-card>"
      },
      {
        "id": "content",
        "title": "Content variations",
        "description": "Cards with different content structures and multiple sections.",
        "markup": "<noora-card style=\"width: 400px\" icon=\"folders\" title=\"Project Structure\">\n  <section slot=\"section\"><h4>Source Files</h4><p>Contains all the main application source code and modules.</p></section>\n  <section slot=\"section\"><h4>Test Files</h4><p>Unit tests, integration tests, and test utilities.</p></section>\n  <section slot=\"section\"><h4>Documentation</h4><p>API documentation, guides, and project notes.</p></section>\n</noora-card>\n\n<noora-card style=\"width: 450px\" icon=\"chart_donut_4\" title=\"Performance Metrics\">\n  <noora-button slot=\"actions\" variant=\"secondary\" label=\"Export\" size=\"medium\"></noora-button>\n  <section slot=\"section\">\n    <div style=\"margin-bottom: 12px;\"><strong>Response Time:</strong> 245ms</div>\n    <div style=\"margin-bottom: 12px;\"><strong>Throughput:</strong> 1,250 req/sec</div>\n    <div style=\"margin-bottom: 12px;\"><strong>Error Rate:</strong> 0.12%</div>\n  </section>\n  <section slot=\"section\"><em>Last updated: 2 minutes ago</em></section>\n</noora-card>"
      },
      {
        "id": "icons",
        "title": "Different icons",
        "description": "Cards showcasing different icon types and purposes.",
        "markup": "<noora-card style=\"width: 320px\" icon=\"database\" title=\"Database Status\">\n  <p>Current database health and connection status information.</p>\n</noora-card>\n\n<noora-card style=\"width: 320px\" icon=\"user\" title=\"User Profile\">\n  <p>User account information and profile settings.</p>\n</noora-card>\n\n<noora-card style=\"width: 320px\" icon=\"mail\" title=\"Notifications\">\n  <noora-button slot=\"actions\" variant=\"secondary\" label=\"Mark All Read\" size=\"medium\"></noora-button>\n  <p>Recent notifications and system alerts.</p>\n</noora-card>"
      }
    ],
    "properties": [],
    "events": []
  },
  {
    "name": "ChartAxis",
    "tagName": "noora-chart-axis",
    "elementClassName": "NooraChartAxis",
    "className": "noora-chart-axis",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Describes one declarative chart axis.",
    "usage": "<noora-chart-axis dimension=\"x\" type=\"category\"><noora-chart-category>Monday</noora-chart-category></noora-chart-axis>",
    "standalone": false,
    "attributes": [
      {
        "name": "dimension",
        "property": "dimension",
        "type": "string",
        "values": [
          "x",
          "y"
        ],
        "default": "x",
        "description": "Chooses the horizontal or vertical axis."
      },
      {
        "name": "type",
        "property": "type",
        "type": "string",
        "values": [
          "category",
          "value"
        ],
        "default": "value",
        "description": "Chooses a categorical or numeric axis."
      },
      {
        "name": "min",
        "property": "min",
        "type": "number",
        "description": "Sets the minimum numeric value."
      },
      {
        "name": "max",
        "property": "max",
        "type": "number",
        "description": "Sets the maximum numeric value."
      },
      {
        "name": "label-format",
        "property": "labelFormat",
        "type": "string",
        "description": "Formats axis labels using an Apache ECharts value template."
      },
      {
        "name": "label-size",
        "property": "labelSize",
        "type": "number",
        "description": "Sets the axis-label font size."
      },
      {
        "name": "label-margin",
        "property": "labelMargin",
        "type": "number",
        "description": "Sets the distance between labels and the axis."
      },
      {
        "name": "hidden",
        "property": "axisHidden",
        "type": "boolean",
        "default": false,
        "description": "Hides the complete axis."
      },
      {
        "name": "hide-line",
        "property": "hideLine",
        "type": "boolean",
        "default": false,
        "description": "Hides the axis line."
      },
      {
        "name": "hide-ticks",
        "property": "hideTicks",
        "type": "boolean",
        "default": false,
        "description": "Hides axis tick marks."
      },
      {
        "name": "dashed-grid",
        "property": "dashedGrid",
        "type": "boolean",
        "default": false,
        "description": "Uses dashed split lines."
      },
      {
        "name": "no-boundary-gap",
        "property": "noBoundaryGap",
        "type": "boolean",
        "default": false,
        "description": "Removes the category-axis boundary gap."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "Declarative noora-chart-category children."
      }
    ],
    "cssParts": [],
    "notes": [
      "Use this element inside noora-chart."
    ],
    "examples": [
      {
        "id": "axis",
        "title": "Axis",
        "description": "Describe a categorical horizontal axis.",
        "markup": "<noora-chart-axis dimension=\"x\" type=\"category\"><noora-chart-category>Monday</noora-chart-category></noora-chart-axis>"
      }
    ],
    "events": []
  },
  {
    "name": "ChartCategory",
    "tagName": "noora-chart-category",
    "elementClassName": "NooraChartCategory",
    "className": "noora-chart-category",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Describes one declarative category on a chart axis.",
    "usage": "<noora-chart-category>Monday</noora-chart-category>",
    "standalone": false,
    "attributes": [
      {
        "name": "value",
        "property": "value",
        "type": "string",
        "description": "Sets the category value instead of using text content."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "The category value."
      }
    ],
    "cssParts": [],
    "notes": [
      "Use this element inside noora-chart-axis."
    ],
    "examples": [
      {
        "id": "category",
        "title": "Category",
        "description": "Describe one axis category.",
        "markup": "<noora-chart-category>Monday</noora-chart-category>"
      }
    ],
    "events": []
  },
  {
    "name": "ChartGrid",
    "tagName": "noora-chart-grid",
    "elementClassName": "NooraChartGrid",
    "className": "noora-chart-grid",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Describes declarative chart-grid dimensions.",
    "usage": "<noora-chart-grid contain-label height=\"76\" width=\"400\"></noora-chart-grid>",
    "standalone": false,
    "attributes": [
      {
        "name": "contain-label",
        "property": "containLabel",
        "type": "boolean",
        "default": false,
        "description": "Includes axis labels within the grid dimensions."
      },
      {
        "name": "height",
        "property": "height",
        "type": "number",
        "description": "Sets the grid height."
      },
      {
        "name": "width",
        "property": "width",
        "type": "number",
        "description": "Sets the grid width."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [],
    "cssParts": [],
    "notes": [
      "Use this element inside noora-chart."
    ],
    "examples": [
      {
        "id": "grid",
        "title": "Grid",
        "description": "Keep labels within a fixed drawing grid.",
        "markup": "<noora-chart-grid contain-label height=\"76\" width=\"400\"></noora-chart-grid>"
      }
    ],
    "events": []
  },
  {
    "name": "ChartPoint",
    "tagName": "noora-chart-point",
    "elementClassName": "NooraChartPoint",
    "className": "noora-chart-point",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Describes one declarative chart data point.",
    "usage": "<noora-chart-point value=\"28\" color=\"var:noora-chart-primary\"></noora-chart-point>",
    "standalone": false,
    "attributes": [
      {
        "name": "value",
        "property": "value",
        "type": "number",
        "description": "Sets the numeric data value."
      },
      {
        "name": "color",
        "property": "color",
        "type": "string",
        "description": "Overrides the point color, including with a Noora semantic chart color."
      },
      {
        "name": "url",
        "property": "url",
        "type": "string",
        "description": "Navigates to this address when the point is selected."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [],
    "cssParts": [],
    "notes": [
      "Use this element inside noora-chart-series."
    ],
    "examples": [
      {
        "id": "point",
        "title": "Point",
        "description": "Describe one semantically colored value.",
        "markup": "<noora-chart-point value=\"28\" color=\"var:noora-chart-primary\"></noora-chart-point>"
      }
    ],
    "events": []
  },
  {
    "name": "ChartSeries",
    "tagName": "noora-chart-series",
    "elementClassName": "NooraChartSeries",
    "className": "noora-chart-series",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Describes one declarative chart data series.",
    "usage": "<noora-chart-series type=\"line\"><noora-chart-point value=\"2\"></noora-chart-point><noora-chart-point value=\"5\"></noora-chart-point></noora-chart-series>",
    "standalone": false,
    "attributes": [
      {
        "name": "name",
        "property": "name",
        "type": "string",
        "description": "Sets the series name."
      },
      {
        "name": "type",
        "property": "type",
        "type": "string",
        "values": [
          "bar",
          "line"
        ],
        "default": "line",
        "description": "Chooses the series visualization."
      },
      {
        "name": "symbol",
        "property": "symbol",
        "type": "string",
        "description": "Sets the symbol used for line-series points."
      },
      {
        "name": "bar-width",
        "property": "barWidth",
        "type": "number",
        "description": "Sets the width of bars."
      },
      {
        "name": "bar-gap",
        "property": "barGap",
        "type": "string",
        "description": "Sets the gap between bar series."
      },
      {
        "name": "border-radius",
        "property": "borderRadius",
        "type": "number",
        "description": "Rounds bar corners."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "Declarative noora-chart-point children."
      }
    ],
    "cssParts": [],
    "notes": [
      "Use this element inside noora-chart."
    ],
    "examples": [
      {
        "id": "series",
        "title": "Series",
        "description": "Describe one line series.",
        "markup": "<noora-chart-series type=\"line\"><noora-chart-point value=\"2\"></noora-chart-point><noora-chart-point value=\"5\"></noora-chart-point></noora-chart-series>"
      }
    ],
    "events": []
  },
  {
    "name": "Chart",
    "tagName": "noora-chart",
    "elementClassName": "NooraChart",
    "className": "noora-chart",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Renders an Apache ECharts visualization from declarative configuration elements.",
    "usage": "<noora-chart aria-label=\"Build activity\"><noora-chart-axis dimension=\"x\" type=\"category\"><noora-chart-category>Mon</noora-chart-category><noora-chart-category>Tue</noora-chart-category></noora-chart-axis><noora-chart-axis dimension=\"y\" type=\"value\"></noora-chart-axis><noora-chart-series type=\"line\"><noora-chart-point value=\"2\"></noora-chart-point><noora-chart-point value=\"5\"></noora-chart-point></noora-chart-series></noora-chart>",
    "previewLayout": "stack",
    "attributes": [
      {
        "name": "renderer",
        "property": "renderer",
        "type": "string",
        "values": [
          "canvas",
          "svg"
        ],
        "default": "canvas",
        "description": "Chooses the chart renderer."
      },
      {
        "name": "tooltip-trigger",
        "property": "tooltipTrigger",
        "type": "string",
        "values": [
          "axis",
          "item"
        ],
        "default": "axis",
        "description": "Shows a tooltip for an axis or an individual item."
      },
      {
        "name": "hide-tooltip",
        "property": "hideTooltip",
        "type": "boolean",
        "default": false,
        "description": "Hides the chart tooltip."
      },
      {
        "name": "hide-legend",
        "property": "hideLegend",
        "type": "boolean",
        "default": false,
        "description": "Hides the chart legend."
      },
      {
        "name": "aria-label",
        "property": "_ariaLabel",
        "publicProperty": false,
        "type": "string",
        "description": "Provides an accessible chart label."
      }
    ],
    "properties": [
      {
        "name": "options",
        "type": "json",
        "typescriptType": "Record<string, unknown>",
        "default": {},
        "description": "Sets an Apache ECharts configuration object when programmatic configuration is needed."
      }
    ],
    "readonlyProperties": [
      {
        "name": "chart",
        "type": "unknown | null",
        "description": "The underlying Apache ECharts instance."
      }
    ],
    "slots": [
      {
        "name": "",
        "description": "Declarative grid, axis, and series configuration elements."
      }
    ],
    "cssParts": [
      {
        "name": "container",
        "description": "The chart wrapper."
      },
      {
        "name": "chart",
        "description": "The chart drawing surface."
      }
    ],
    "events": [
      {
        "name": "noora-chart-select",
        "type": "CustomEvent<{ item: unknown; parameters: unknown }>",
        "description": "Emitted when an interactive chart item is selected. Prevent the default action to stop navigation for items with a link target."
      }
    ],
    "notes": [
      "Set an explicit block size on the element or its chart part.",
      "Use declarative configuration elements for markup-authored charts.",
      "Declarative charts use the same grid, axis, tooltip, legend, color, and typography defaults as the Phoenix LiveView chart component.",
      "The options property remains available for charts assembled or updated by JavaScript.",
      "Declarative configuration elements take precedence when both forms are provided."
    ],
    "examples": [
      {
        "id": "multi-series-line",
        "title": "Multi-series line",
        "description": "Compare multiple effectiveness series over time.",
        "markup": "<noora-chart hide-legend aria-label=\"Cache and test effectiveness\" style=\"width: 600px; height: 300px\">\n  <noora-chart-axis dimension=\"x\" type=\"category\">\n    <noora-chart-category>Aug</noora-chart-category>\n    <noora-chart-category>Sep</noora-chart-category>\n    <noora-chart-category>Oct</noora-chart-category>\n    <noora-chart-category>Nov</noora-chart-category>\n    <noora-chart-category>Dec</noora-chart-category>\n  </noora-chart-axis>\n  <noora-chart-axis dimension=\"y\" type=\"value\" min=\"0\" max=\"100\" label-format=\"{value}%\"></noora-chart-axis>\n  <noora-chart-series name=\"Binary cache effectiveness\" type=\"line\" symbol=\"none\">\n    <noora-chart-point value=\"32\"></noora-chart-point>\n    <noora-chart-point value=\"38\"></noora-chart-point>\n    <noora-chart-point value=\"42\"></noora-chart-point>\n    <noora-chart-point value=\"48\"></noora-chart-point>\n    <noora-chart-point value=\"64\"></noora-chart-point>\n  </noora-chart-series>\n  <noora-chart-series name=\"Selective test effectiveness\" type=\"line\" symbol=\"none\">\n    <noora-chart-point value=\"48\"></noora-chart-point>\n    <noora-chart-point value=\"52\"></noora-chart-point>\n    <noora-chart-point value=\"45\"></noora-chart-point>\n    <noora-chart-point value=\"56\"></noora-chart-point>\n    <noora-chart-point value=\"62\"></noora-chart-point>\n  </noora-chart-series>\n</noora-chart>"
      },
      {
        "id": "horizontal-bars",
        "title": "Horizontal bar comparison",
        "description": "Compare build optimization durations on a horizontal scale.",
        "markup": "<noora-chart aria-label=\"Optimization duration comparison\" style=\"width: 500px; height: 146px\">\n  <noora-chart-grid height=\"76\" width=\"400\"></noora-chart-grid>\n  <noora-chart-axis dimension=\"x\" type=\"value\" label-format=\"{value}h\" label-margin=\"25\"></noora-chart-axis>\n  <noora-chart-axis dimension=\"y\" type=\"category\" no-boundary-gap>\n    <noora-chart-category>Selective Test</noora-chart-category>\n    <noora-chart-category>Build Cache</noora-chart-category>\n  </noora-chart-axis>\n  <noora-chart-series type=\"bar\" bar-gap=\"-100%\" bar-width=\"24\" border-radius=\"7\">\n    <noora-chart-point value=\"19\"></noora-chart-point>\n    <noora-chart-point value=\"22\"></noora-chart-point>\n  </noora-chart-series>\n  <noora-chart-series type=\"bar\" bar-width=\"24\" border-radius=\"7\">\n    <noora-chart-point value=\"7.2\"></noora-chart-point>\n    <noora-chart-point value=\"9\"></noora-chart-point>\n  </noora-chart-series>\n</noora-chart>"
      },
      {
        "id": "test-duration",
        "title": "Test run duration",
        "description": "Use semantic colors to distinguish successful and failed runs.",
        "markup": "<noora-chart hide-legend hide-tooltip aria-label=\"Test run duration\" style=\"width: 700px; height: 300px\">\n  <noora-chart-axis dimension=\"x\" type=\"category\" hidden></noora-chart-axis>\n  <noora-chart-axis dimension=\"y\" type=\"value\"></noora-chart-axis>\n  <noora-chart-series type=\"bar\" bar-width=\"8\">\n    <noora-chart-point value=\"28\" color=\"var:noora-chart-primary\"></noora-chart-point>\n    <noora-chart-point value=\"23\" color=\"var:noora-chart-primary\"></noora-chart-point>\n    <noora-chart-point value=\"37\" color=\"var:noora-chart-tertiary\"></noora-chart-point>\n    <noora-chart-point value=\"22\" color=\"var:noora-chart-primary\"></noora-chart-point>\n    <noora-chart-point value=\"32\" color=\"var:noora-chart-tertiary\"></noora-chart-point>\n  </noora-chart-series>\n</noora-chart>"
      }
    ]
  },
  {
    "name": "Checkbox",
    "tagName": "noora-checkbox",
    "elementClassName": "NooraCheckbox",
    "className": "noora-checkbox",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Lets a user select one or more independent options.",
    "usage": "<noora-checkbox label=\"Send notifications\" name=\"notifications\"></noora-checkbox>",
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the visible label."
      },
      {
        "name": "description",
        "property": "description",
        "type": "string",
        "description": "Sets supporting text."
      },
      {
        "name": "checked",
        "property": "checked",
        "type": "boolean",
        "default": false,
        "reflect": true,
        "description": "Controls the checked state."
      },
      {
        "name": "indeterminate",
        "property": "indeterminate",
        "type": "boolean",
        "default": false,
        "reflect": true,
        "description": "Controls the mixed state."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "reflect": true,
        "description": "Disables interaction."
      },
      {
        "name": "name",
        "property": "name",
        "type": "string",
        "default": "",
        "description": "Sets the submitted field name."
      },
      {
        "name": "value",
        "property": "value",
        "type": "string",
        "default": "on",
        "description": "Sets the submitted field value."
      },
      {
        "name": "required",
        "property": "required",
        "type": "boolean",
        "default": false,
        "description": "Marks the field as required."
      }
    ],
    "readonlyProperties": [
      {
        "name": "control",
        "type": "HTMLInputElement | null",
        "description": "The native checkbox input."
      },
      {
        "name": "form",
        "type": "HTMLFormElement | null",
        "description": "The associated form."
      }
    ],
    "slots": [],
    "cssParts": [
      {
        "name": "root",
        "description": "The checkbox label."
      },
      {
        "name": "control",
        "description": "The visual checkbox control."
      },
      {
        "name": "label",
        "description": "The label text."
      }
    ],
    "events": [
      {
        "name": "input",
        "type": "InputEvent",
        "description": "Emitted while the checked state changes."
      },
      {
        "name": "change",
        "type": "Event",
        "description": "Emitted after the checked state changes."
      }
    ],
    "notes": [
      "The component emits standard input and change events."
    ],
    "examples": [
      {
        "id": "basic-states",
        "title": "Basic states",
        "description": "Checkboxes support unchecked, checked, and indeterminate states.",
        "markup": "<noora-checkbox label=\"Enable notifications\"></noora-checkbox>\n<noora-checkbox checked label=\"Email alerts\"></noora-checkbox>\n<noora-checkbox indeterminate label=\"Select all items\"></noora-checkbox>"
      },
      {
        "id": "disabled-states",
        "title": "Disabled states",
        "description": "Every selection state has a disabled presentation.",
        "markup": "<noora-checkbox disabled label=\"Disabled unchecked\"></noora-checkbox>\n<noora-checkbox disabled checked label=\"Disabled checked\"></noora-checkbox>\n<noora-checkbox disabled indeterminate label=\"Disabled indeterminate\"></noora-checkbox>"
      },
      {
        "id": "descriptions",
        "title": "Descriptions",
        "description": "Add supporting context below the label.",
        "markup": "<noora-checkbox label=\"Marketing emails\" description=\"Receive updates about new features and promotions\"></noora-checkbox>\n<noora-checkbox checked label=\"Remember my preferences\" description=\"Save your settings for future visits\"></noora-checkbox>"
      },
      {
        "id": "practical",
        "title": "Practical examples",
        "description": "Use checkboxes for agreements, subscriptions, and optional settings.",
        "markup": "<noora-checkbox required label=\"I agree to the Terms of Service\" description=\"By checking this box, you agree to our terms and conditions\"></noora-checkbox>\n<noora-checkbox label=\"Subscribe to our newsletter\" description=\"Get weekly updates delivered to your inbox\"></noora-checkbox>\n<noora-checkbox checked label=\"Enable dark mode\" description=\"Switch to a darker color scheme\"></noora-checkbox>"
      }
    ],
    "properties": []
  },
  {
    "name": "DatePickerPreset",
    "tagName": "noora-date-picker-preset",
    "elementClassName": "NooraDatePickerPreset",
    "className": "noora-date-picker-preset",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Describes one declarative date-range preset.",
    "usage": "<noora-date-picker-preset value=\"7d\" start=\"2026-07-21\" end=\"2026-07-27\">Last 7 days</noora-date-picker-preset>",
    "standalone": false,
    "attributes": [
      {
        "name": "value",
        "property": "value",
        "type": "string",
        "default": "",
        "description": "Sets the preset identifier."
      },
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the preset label instead of using text content."
      },
      {
        "name": "start",
        "property": "start",
        "type": "string",
        "default": "",
        "description": "Sets the start date in year-month-day format."
      },
      {
        "name": "end",
        "property": "end",
        "type": "string",
        "default": "",
        "description": "Sets the end date in year-month-day format."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "The preset label."
      }
    ],
    "cssParts": [],
    "notes": [],
    "examples": [
      {
        "id": "preset",
        "title": "Preset",
        "description": "Describe a quick date range.",
        "markup": "<noora-date-picker-preset value=\"7d\" start=\"2026-07-21\" end=\"2026-07-27\">Last 7 days</noora-date-picker-preset>"
      }
    ],
    "events": []
  },
  {
    "name": "DatePicker",
    "tagName": "noora-date-picker",
    "elementClassName": "NooraDatePicker",
    "className": "noora-date-picker",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Selects a date range with a two-month calendar, optional presets, and editable range fields.",
    "usage": "<noora-date-picker label=\"Select date range\"></noora-date-picker>",
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "Select date range",
        "description": "Sets the trigger label when no range is selected."
      },
      {
        "name": "name",
        "property": "name",
        "type": "string",
        "description": "Sets the submitted field-name prefix for `[start]` and `[end]` values."
      },
      {
        "name": "start",
        "property": "start",
        "type": "string",
        "description": "Sets the start date in year-month-day format."
      },
      {
        "name": "end",
        "property": "end",
        "type": "string",
        "description": "Sets the end date in year-month-day format."
      },
      {
        "name": "min",
        "property": "min",
        "type": "string",
        "description": "Sets the earliest selectable date."
      },
      {
        "name": "max",
        "property": "max",
        "type": "string",
        "description": "Sets the latest selectable date."
      },
      {
        "name": "selected-preset",
        "property": "selectedPreset",
        "type": "string",
        "description": "Identifies the selected preset."
      },
      {
        "name": "start-of-week",
        "property": "startOfWeek",
        "type": "number",
        "default": 0,
        "description": "Sets the first weekday, where zero is Sunday and one is Monday."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Disables interaction."
      },
      {
        "name": "open",
        "property": "open",
        "type": "boolean",
        "default": false,
        "reflect": true,
        "description": "Controls whether the picker is open."
      }
    ],
    "properties": [
      {
        "name": "presets",
        "type": "json",
        "typescriptType": "Array<Record<string, unknown>>",
        "default": [],
        "description": "Defines presets programmatically when declarative noora-date-picker-preset children are not used."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "Declarative noora-date-picker-preset children."
      },
      {
        "name": "actions",
        "description": "Additional footer actions."
      }
    ],
    "cssParts": [
      {
        "name": "trigger",
        "description": "The range trigger."
      },
      {
        "name": "content",
        "description": "The picker content."
      },
      {
        "name": "calendar",
        "description": "The calendar and range controls."
      },
      {
        "name": "month",
        "description": "One calendar month."
      }
    ],
    "events": [
      {
        "name": "noora-open-change",
        "type": "CustomEvent<{ open: boolean }>",
        "description": "Emitted when the date picker opens or closes."
      },
      {
        "name": "noora-period-change",
        "type": "CustomEvent<{ start: string; end: string; preset: string | undefined }>",
        "description": "Emitted when a date range is applied."
      },
      {
        "name": "noora-cancel",
        "type": "CustomEvent<Record<string, never>>",
        "description": "Emitted when date selection is cancelled."
      }
    ],
    "notes": [
      "A picker named `range` submits its dates as `range[start]` and `range[end]`.",
      "Range changes emit a `noora-period-change` event after Apply is selected.",
      "Cancel emits a `noora-cancel` event.",
      "Slotted action buttons can use data-action=\"cancel\" or data-action=\"apply\"."
    ],
    "examples": [
      {
        "id": "default",
        "title": "Default date picker",
        "description": "Open the picker with common presets and footer actions.",
        "markup": "<noora-date-picker selected-preset=\"7d\">\n  <noora-date-picker-preset value=\"1h\" start=\"2026-07-27\" end=\"2026-07-27\">Last 1 hour</noora-date-picker-preset>\n  <noora-date-picker-preset value=\"24h\" start=\"2026-07-26\" end=\"2026-07-27\">Last 24 hours</noora-date-picker-preset>\n  <noora-date-picker-preset value=\"7d\" start=\"2026-07-21\" end=\"2026-07-27\">Last 7 days</noora-date-picker-preset>\n  <noora-date-picker-preset value=\"30d\" start=\"2026-06-28\" end=\"2026-07-27\">Last 30 days</noora-date-picker-preset>\n  <noora-date-picker-preset value=\"custom\">Custom</noora-date-picker-preset>\n  <noora-button slot=\"actions\" type=\"button\" variant=\"secondary\" size=\"medium\" data-action=\"cancel\">Cancel</noora-button>\n  <noora-button slot=\"actions\" type=\"button\" variant=\"primary\" size=\"medium\" data-action=\"apply\">Apply</noora-button>\n</noora-date-picker>"
      }
    ]
  },
  {
    "name": "DigitInput",
    "tagName": "noora-digit-input",
    "elementClassName": "NooraDigitInput",
    "className": "noora-digit-input",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Collects a fixed-length verification or personal identification code.",
    "usage": "<noora-digit-input characters=\"6\" one-time-code></noora-digit-input>",
    "attributes": [
      {
        "name": "type",
        "property": "type",
        "type": "string",
        "values": [
          "alphanumeric",
          "numeric",
          "alphabetic"
        ],
        "default": "numeric",
        "description": "Limits accepted characters."
      },
      {
        "name": "characters",
        "property": "characters",
        "type": "number",
        "default": 6,
        "description": "Sets the number of fields."
      },
      {
        "name": "placeholder",
        "property": "placeholder",
        "type": "string",
        "default": "",
        "description": "Sets each field placeholder."
      },
      {
        "name": "one-time-code",
        "property": "oneTimeCode",
        "type": "boolean",
        "default": false,
        "description": "Enables one-time-code autofill."
      },
      {
        "name": "error",
        "property": "error",
        "type": "boolean",
        "default": false,
        "description": "Shows the error state."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Disables all fields."
      },
      {
        "name": "value",
        "property": "value",
        "type": "string",
        "default": "",
        "description": "Gets or sets the combined value."
      },
      {
        "name": "name",
        "property": "name",
        "type": "string",
        "default": "",
        "description": "Sets the hidden submitted field name."
      }
    ],
    "readonlyProperties": [],
    "slots": [],
    "cssParts": [
      {
        "name": "root",
        "description": "The field group."
      },
      {
        "name": "input",
        "description": "Each character input."
      }
    ],
    "events": [
      {
        "name": "input",
        "type": "InputEvent",
        "description": "Emitted while the entered code changes."
      },
      {
        "name": "change",
        "type": "Event",
        "description": "Emitted when every field contains a valid character."
      },
      {
        "name": "noora-input",
        "type": "CustomEvent<{ value: string }>",
        "description": "Emitted with the current code after a valid input."
      },
      {
        "name": "noora-complete",
        "type": "CustomEvent<{ value: string }>",
        "description": "Emitted when every field contains a valid character."
      },
      {
        "name": "noora-invalid",
        "type": "CustomEvent<{ value: string }>",
        "description": "Emitted when an entered or pasted value is rejected."
      }
    ],
    "notes": [
      "The component emits `noora-complete` when every field contains a character."
    ],
    "examples": [
      {
        "id": "types",
        "title": "Input types",
        "description": "Choose numeric, alphanumeric, or alphabetic validation.",
        "markup": "<noora-digit-input type=\"numeric\" characters=\"6\" placeholder=\"•\"></noora-digit-input>\n<noora-digit-input type=\"alphanumeric\" characters=\"4\" placeholder=\"•\"></noora-digit-input>\n<noora-digit-input type=\"alphabetic\" characters=\"3\" placeholder=\"•\"></noora-digit-input>"
      },
      {
        "id": "character-counts",
        "title": "Character counts",
        "description": "Collect short, medium, and long codes.",
        "markup": "<noora-digit-input characters=\"4\" placeholder=\"•\"></noora-digit-input>\n<noora-digit-input characters=\"6\" placeholder=\"•\"></noora-digit-input>\n<noora-digit-input characters=\"8\" placeholder=\"•\"></noora-digit-input>"
      },
      {
        "id": "one-time-codes",
        "title": "One-time codes",
        "description": "Enable browser-assisted one-time-code entry.",
        "markup": "<noora-digit-input characters=\"6\" one-time-code placeholder=\"•\"></noora-digit-input>\n<noora-digit-input characters=\"4\" one-time-code placeholder=\"0\"></noora-digit-input>"
      },
      {
        "id": "states",
        "title": "States",
        "description": "Compare default, disabled, and error states.",
        "markup": "<noora-digit-input characters=\"4\" placeholder=\"•\"></noora-digit-input>\n<noora-digit-input characters=\"4\" placeholder=\"•\" disabled></noora-digit-input>\n<noora-digit-input characters=\"4\" placeholder=\"•\" error></noora-digit-input>"
      },
      {
        "id": "placeholders",
        "title": "Placeholders",
        "description": "Use dots, dashes, or empty fields.",
        "markup": "<noora-digit-input characters=\"6\" placeholder=\"•\"></noora-digit-input>\n<noora-digit-input characters=\"6\" placeholder=\"-\"></noora-digit-input>\n<noora-digit-input characters=\"6\"></noora-digit-input>"
      }
    ],
    "properties": []
  },
  {
    "name": "DismissIcon",
    "tagName": "noora-dismiss-icon",
    "elementClassName": "NooraDismissIcon",
    "className": "noora-dismiss-icon",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Provides a compact, accessible dismiss button.",
    "usage": "<noora-dismiss-icon></noora-dismiss-icon>",
    "attributes": [
      {
        "name": "size",
        "property": "size",
        "type": "string",
        "values": [
          "small",
          "large"
        ],
        "default": "large",
        "description": "Controls the icon dimensions."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Disables the button."
      },
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "Dismiss",
        "description": "Sets the accessible label."
      }
    ],
    "readonlyProperties": [],
    "slots": [],
    "cssParts": [
      {
        "name": "button",
        "description": "The native button."
      }
    ],
    "events": [
      {
        "name": "noora-dismiss",
        "type": "CustomEvent<Record<string, never>>",
        "description": "Emitted when the dismiss control is activated."
      }
    ],
    "notes": [
      "Activation emits a `noora-dismiss` event."
    ],
    "examples": [
      {
        "id": "sizes",
        "title": "Sizes",
        "description": "Use the size that matches the surrounding surface.",
        "markup": "<noora-dismiss-icon size=\"small\"></noora-dismiss-icon>\n<noora-dismiss-icon size=\"large\"></noora-dismiss-icon>"
      },
      {
        "id": "states",
        "title": "States",
        "description": "Compare enabled and disabled controls.",
        "markup": "<noora-dismiss-icon label=\"Dismiss notification\"></noora-dismiss-icon>\n<noora-dismiss-icon label=\"Dismiss notification\" disabled></noora-dismiss-icon>"
      },
      {
        "id": "events",
        "title": "Dismiss events",
        "description": "Listen for the noora-dismiss event when the control is activated.",
        "markup": "<noora-dismiss-icon size=\"small\" label=\"Remove item\"></noora-dismiss-icon>\n<noora-dismiss-icon size=\"large\" label=\"Close panel\"></noora-dismiss-icon>"
      }
    ],
    "properties": []
  },
  {
    "name": "DropdownItem",
    "tagName": "noora-dropdown-item",
    "elementClassName": "NooraDropdownItem",
    "className": "noora-dropdown-item",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Describes one declarative item inside a dropdown or breadcrumb menu.",
    "usage": "<noora-dropdown-item value=\"edit\" icon=\"edit\">Edit</noora-dropdown-item>",
    "standalone": false,
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the item label instead of using its text content."
      },
      {
        "name": "value",
        "property": "value",
        "type": "string",
        "description": "Sets the value emitted when the item is selected."
      },
      {
        "name": "icon",
        "property": "icon",
        "type": "string",
        "description": "Shows an icon before the label."
      },
      {
        "name": "right-icon",
        "property": "rightIcon",
        "type": "string",
        "description": "Shows an icon after the label."
      },
      {
        "name": "size",
        "property": "size",
        "type": "string",
        "values": [
          "small",
          "large"
        ],
        "default": "small",
        "description": "Controls the item dimensions."
      },
      {
        "name": "href",
        "property": "href",
        "type": "string",
        "description": "Renders the item as a link."
      },
      {
        "name": "secondary-text",
        "property": "secondaryText",
        "type": "string",
        "description": "Adds compact secondary text beside the label."
      },
      {
        "name": "description",
        "property": "description",
        "type": "string",
        "description": "Adds supporting text below the label."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Disables selection."
      },
      {
        "name": "checkable",
        "property": "checkable",
        "type": "boolean",
        "default": false,
        "description": "Shows a checkbox indicator."
      },
      {
        "name": "checked",
        "property": "checked",
        "type": "boolean",
        "default": false,
        "description": "Marks a checkable item as selected."
      },
      {
        "name": "selected",
        "property": "selected",
        "type": "boolean",
        "default": false,
        "description": "Marks a breadcrumb menu item as selected."
      },
      {
        "name": "avatar",
        "property": "avatar",
        "type": "boolean",
        "default": false,
        "description": "Shows an avatar before the label."
      },
      {
        "name": "avatar-name",
        "property": "avatarName",
        "type": "string",
        "description": "Sets the avatar name."
      },
      {
        "name": "avatar-color",
        "property": "avatarColor",
        "type": "string",
        "description": "Sets the avatar color."
      },
      {
        "name": "avatar-image-href",
        "property": "avatarImageHref",
        "type": "string",
        "description": "Sets the avatar image address."
      },
      {
        "name": "badge-label",
        "property": "badgeLabel",
        "type": "string",
        "description": "Shows a badge with this label."
      },
      {
        "name": "badge-color",
        "property": "badgeColor",
        "type": "string",
        "description": "Sets the badge color."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "The item label."
      }
    ],
    "cssParts": [],
    "notes": [
      "Use this element inside noora-dropdown, noora-inline-dropdown, noora-button-dropdown, or noora-breadcrumb-item."
    ],
    "examples": [
      {
        "id": "item",
        "title": "Item",
        "description": "Describe a selectable menu item.",
        "markup": "<noora-dropdown-item value=\"edit\" icon=\"edit\">Edit</noora-dropdown-item>"
      }
    ],
    "events": []
  },
  {
    "name": "Dropdown",
    "tagName": "noora-dropdown",
    "elementClassName": "NooraDropdown",
    "className": "noora-dropdown",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Opens a menu of actions or navigational items.",
    "usage": "<noora-dropdown label=\"Dropdown\">\n  <noora-dropdown-item value=\"1\">Item 1</noora-dropdown-item>\n</noora-dropdown>",
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the trigger label."
      },
      {
        "name": "size",
        "property": "size",
        "type": "string",
        "values": [
          "medium",
          "large"
        ],
        "default": "large",
        "description": "Controls the trigger dimensions."
      },
      {
        "name": "secondary-text",
        "property": "secondaryText",
        "type": "string",
        "description": "Adds text before the main label."
      },
      {
        "name": "icon-only",
        "property": "iconOnly",
        "type": "boolean",
        "default": false,
        "description": "Uses the icon slot as the complete trigger."
      },
      {
        "name": "hint",
        "property": "hint",
        "type": "string",
        "description": "Adds supporting text."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Disables the trigger."
      },
      {
        "name": "open",
        "property": "open",
        "type": "boolean",
        "default": false,
        "reflect": true,
        "description": "Controls whether the menu is open."
      },
      {
        "name": "close-on-select",
        "property": "closeOnSelect",
        "type": "boolean",
        "default": true,
        "description": "Closes the menu after selection."
      },
      {
        "name": "keep-open",
        "property": "keepOpen",
        "type": "boolean",
        "default": false,
        "description": "Keeps the menu open after selection."
      }
    ],
    "properties": [
      {
        "name": "items",
        "type": "json",
        "typescriptType": "Array<Record<string, unknown>>",
        "default": [],
        "description": "Defines menu items programmatically when declarative noora-dropdown-item children are not used."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "icon",
        "description": "The trigger icon."
      },
      {
        "name": "search",
        "description": "Search content above the item list."
      },
      {
        "name": "",
        "description": "Declarative noora-dropdown-item children."
      }
    ],
    "cssParts": [
      {
        "name": "trigger",
        "description": "The menu trigger."
      },
      {
        "name": "content",
        "description": "The menu content."
      },
      {
        "name": "items",
        "description": "The item list."
      }
    ],
    "events": [
      {
        "name": "noora-open-change",
        "type": "CustomEvent<{ open: boolean }>",
        "description": "Emitted when the dropdown opens or closes."
      },
      {
        "name": "noora-select",
        "type": "CustomEvent<{ item: Record<string, unknown>; value: unknown }>",
        "description": "Emitted when an enabled item is selected."
      }
    ],
    "notes": [
      "Selections emit a `noora-select` event with the selected item."
    ],
    "examples": [
      {
        "id": "default",
        "title": "Default",
        "description": "Provide structured action items.",
        "markup": "<noora-dropdown label=\"Dropdown\">\n  <noora-dropdown-item value=\"1\">Item 1</noora-dropdown-item>\n  <noora-dropdown-item value=\"2\" right-icon=\"chevron_right\">Item 2</noora-dropdown-item>\n  <noora-dropdown-item value=\"3\" secondary-text=\"Foo\">Item 3</noora-dropdown-item>\n  <noora-dropdown-item value=\"4\" icon=\"category\">Item 4</noora-dropdown-item>\n  <noora-dropdown-item value=\"5\">Item 5</noora-dropdown-item>\n</noora-dropdown>"
      },
      {
        "id": "disabled",
        "title": "Disabled",
        "description": "Disable the complete menu when its actions are unavailable.",
        "markup": "<noora-dropdown label=\"Dropdown\" disabled></noora-dropdown>"
      },
      {
        "id": "large-items",
        "title": "Large items",
        "description": "Use larger rows for prominent action menus.",
        "markup": "<noora-dropdown label=\"Dropdown with large items\">\n  <noora-dropdown-item value=\"1\" size=\"large\" icon=\"category\">Item 1</noora-dropdown-item>\n  <noora-dropdown-item value=\"2\" size=\"large\" icon=\"category\">Item 2</noora-dropdown-item>\n  <noora-dropdown-item value=\"3\" size=\"large\" icon=\"category\" secondary-text=\"Foo\">Item 3</noora-dropdown-item>\n  <noora-dropdown-item value=\"4\" size=\"large\" icon=\"category\">Item 4</noora-dropdown-item>\n  <noora-dropdown-item value=\"5\" size=\"large\" icon=\"category\">Item 5</noora-dropdown-item>\n</noora-dropdown>"
      },
      {
        "id": "icons",
        "title": "Trigger icon",
        "description": "Add an icon to the dropdown trigger.",
        "markup": "<noora-dropdown label=\"Dropdown\">\n  <noora-icon slot=\"icon\" name=\"category\"></noora-icon>\n  <noora-dropdown-item value=\"1\">Item 1</noora-dropdown-item>\n</noora-dropdown>"
      },
      {
        "id": "secondary-text",
        "title": "Secondary text",
        "description": "Add concise context beside an item label.",
        "markup": "<noora-dropdown label=\"Date\" secondary-text=\"Order by\">\n  <noora-dropdown-item value=\"1\" secondary-text=\"Foo\">Item 1</noora-dropdown-item>\n</noora-dropdown>"
      },
      {
        "id": "icon-and-secondary-text",
        "title": "Icons and secondary text",
        "description": "Combine visual cues with supporting text.",
        "markup": "<noora-dropdown label=\"Date\" secondary-text=\"Order by\">\n  <noora-icon slot=\"icon\" name=\"category\"></noora-icon>\n  <noora-dropdown-item value=\"1\" secondary-text=\"Foo\">Item 1</noora-dropdown-item>\n</noora-dropdown>"
      },
      {
        "id": "hint",
        "title": "Hint",
        "description": "Explain the purpose of the menu below its trigger.",
        "markup": "<noora-dropdown label=\"Dropdown\" hint=\"This is a hint\">\n  <noora-dropdown-item value=\"1\">Item 1</noora-dropdown-item>\n</noora-dropdown>"
      },
      {
        "id": "many-options",
        "title": "Many options",
        "description": "Allow the menu content to scroll when it contains many choices.",
        "markup": "<noora-dropdown label=\"Many Options\">\n  <noora-dropdown-item value=\"1\">Option 1</noora-dropdown-item>\n  <noora-dropdown-item value=\"2\">Option 2</noora-dropdown-item>\n  <noora-dropdown-item value=\"3\">Option 3</noora-dropdown-item>\n  <noora-dropdown-item value=\"4\">Option 4</noora-dropdown-item>\n  <noora-dropdown-item value=\"5\">Option 5</noora-dropdown-item>\n  <noora-dropdown-item value=\"6\">Option 6</noora-dropdown-item>\n  <noora-dropdown-item value=\"7\">Option 7</noora-dropdown-item>\n  <noora-dropdown-item value=\"8\">Option 8</noora-dropdown-item>\n  <noora-dropdown-item value=\"9\">Option 9</noora-dropdown-item>\n  <noora-dropdown-item value=\"10\">Option 10</noora-dropdown-item>\n  <noora-dropdown-item value=\"11\">Option 11</noora-dropdown-item>\n  <noora-dropdown-item value=\"12\">Option 12</noora-dropdown-item>\n  <noora-dropdown-item value=\"13\">Option 13</noora-dropdown-item>\n  <noora-dropdown-item value=\"14\">Option 14</noora-dropdown-item>\n  <noora-dropdown-item value=\"15\">Option 15</noora-dropdown-item>\n  <noora-dropdown-item value=\"16\">Option 16</noora-dropdown-item>\n  <noora-dropdown-item value=\"17\">Option 17</noora-dropdown-item>\n  <noora-dropdown-item value=\"18\">Option 18</noora-dropdown-item>\n  <noora-dropdown-item value=\"19\">Option 19</noora-dropdown-item>\n  <noora-dropdown-item value=\"20\">Option 20</noora-dropdown-item>\n</noora-dropdown>"
      },
      {
        "id": "checkboxes",
        "title": "Checkbox items",
        "description": "Communicate selected items with checkbox indicators.",
        "markup": "<noora-dropdown label=\"Select days\" keep-open>\n  <noora-dropdown-item value=\"monday\" checkable checked>Monday</noora-dropdown-item>\n  <noora-dropdown-item value=\"tuesday\" checkable checked>Tuesday</noora-dropdown-item>\n  <noora-dropdown-item value=\"wednesday\" checkable>Wednesday</noora-dropdown-item>\n  <noora-dropdown-item value=\"thursday\" checkable>Thursday</noora-dropdown-item>\n  <noora-dropdown-item value=\"friday\" checkable checked>Friday</noora-dropdown-item>\n  <noora-dropdown-item value=\"saturday\" checkable>Saturday</noora-dropdown-item>\n  <noora-dropdown-item value=\"sunday\" checkable>Sunday</noora-dropdown-item>\n</noora-dropdown>"
      }
    ]
  },
  {
    "name": "FilterDefinition",
    "tagName": "noora-filter-definition",
    "elementClassName": "NooraFilterDefinition",
    "className": "noora-filter-definition",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Describes one filter that a user can add.",
    "usage": "<noora-filter-definition name=\"status\" label=\"Status\" type=\"option\"><noora-filter-option value=\"active\">Active</noora-filter-option></noora-filter-definition>",
    "standalone": false,
    "attributes": [
      {
        "name": "name",
        "property": "name",
        "type": "string",
        "default": "",
        "description": "Sets the filter identifier."
      },
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the filter label."
      },
      {
        "name": "type",
        "property": "type",
        "type": "string",
        "values": [
          "option",
          "text",
          "number",
          "percentage",
          "list"
        ],
        "default": "option",
        "description": "Sets the filter value type and available operators."
      },
      {
        "name": "operator",
        "property": "operator",
        "type": "string",
        "values": [
          "==",
          "!=",
          "=~",
          "!=~",
          "<",
          ">",
          "<=",
          ">="
        ],
        "description": "Sets the initial comparison operator."
      },
      {
        "name": "default-value",
        "property": "defaultValue",
        "type": "string",
        "description": "Sets the value used when the filter is added."
      },
      {
        "name": "searchable",
        "property": "searchable",
        "type": "boolean",
        "default": false,
        "description": "Adds search to option-value menus."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "The allowed noora-filter-option children."
      }
    ],
    "cssParts": [],
    "notes": [],
    "examples": [
      {
        "id": "definition",
        "title": "Definition",
        "description": "Describe an available filter and its values.",
        "markup": "<noora-filter-definition name=\"status\" label=\"Status\" type=\"option\"><noora-filter-option value=\"active\">Active</noora-filter-option></noora-filter-definition>"
      }
    ],
    "events": []
  },
  {
    "name": "FilterOption",
    "tagName": "noora-filter-option",
    "elementClassName": "NooraFilterOption",
    "className": "noora-filter-option",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Describes one allowed value for a filter definition.",
    "usage": "<noora-filter-option value=\"active\">Active</noora-filter-option>",
    "standalone": false,
    "attributes": [
      {
        "name": "value",
        "property": "value",
        "type": "string",
        "default": "",
        "description": "Sets the option value."
      },
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the option label instead of using text content."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "The option label."
      }
    ],
    "cssParts": [],
    "notes": [],
    "examples": [
      {
        "id": "option",
        "title": "Option",
        "description": "Describe an allowed filter value.",
        "markup": "<noora-filter-option value=\"active\">Active</noora-filter-option>"
      }
    ],
    "events": []
  },
  {
    "name": "FilterValue",
    "tagName": "noora-filter-value",
    "elementClassName": "NooraFilterValue",
    "className": "noora-filter-value",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Describes one initially active filter.",
    "usage": "<noora-filter-value name=\"status\" operator=\"==\" value=\"active\"></noora-filter-value>",
    "standalone": false,
    "attributes": [
      {
        "name": "name",
        "property": "name",
        "type": "string",
        "default": "",
        "description": "Sets the filter identifier."
      },
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "description": "Sets the filter label."
      },
      {
        "name": "type",
        "property": "type",
        "type": "string",
        "values": [
          "option",
          "text",
          "number",
          "percentage",
          "list"
        ],
        "description": "Overrides the matching definition's value type."
      },
      {
        "name": "operator",
        "property": "operator",
        "type": "string",
        "values": [
          "==",
          "!=",
          "=~",
          "!=~",
          "<",
          ">",
          "<=",
          ">="
        ],
        "description": "Sets the active comparison operator."
      },
      {
        "name": "value",
        "property": "value",
        "type": "string",
        "default": "",
        "description": "Sets the active value."
      },
      {
        "name": "display-value",
        "property": "displayValue",
        "type": "string",
        "description": "Sets a human-readable value."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [],
    "cssParts": [],
    "notes": [],
    "examples": [
      {
        "id": "value",
        "title": "Value",
        "description": "Describe an initially active filter.",
        "markup": "<noora-filter-value name=\"status\" operator=\"==\" value=\"active\"></noora-filter-value>"
      }
    ],
    "events": []
  },
  {
    "name": "Filter",
    "tagName": "noora-filter",
    "elementClassName": "NooraFilter",
    "className": "noora-filter",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Builds and displays a set of structured filters.",
    "usage": "<noora-filter>\n  <noora-filter-definition name=\"status\" label=\"Status\" type=\"option\">\n    <noora-filter-option value=\"active\">Active</noora-filter-option>\n    <noora-filter-option value=\"paused\">Paused</noora-filter-option>\n  </noora-filter-definition>\n  <noora-filter-value name=\"status\" operator=\"==\" value=\"active\"></noora-filter-value>\n</noora-filter>",
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "Filter",
        "description": "Sets the add-filter label."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Disables editing."
      }
    ],
    "properties": [
      {
        "name": "availableFilters",
        "type": "json",
        "typescriptType": "Array<Record<string, unknown>>",
        "default": [],
        "description": "Defines available filters programmatically when declarative definitions are not used."
      },
      {
        "name": "filters",
        "type": "json",
        "typescriptType": "Array<Record<string, unknown>>",
        "default": [],
        "description": "Gets or sets active filters programmatically."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "Declarative noora-filter-definition and noora-filter-value children."
      }
    ],
    "cssParts": [
      {
        "name": "filter",
        "description": "The filter container."
      },
      {
        "name": "active-filters",
        "description": "The active-filter list."
      },
      {
        "name": "add",
        "description": "The add-filter control."
      },
      {
        "name": "active-filter",
        "description": "An active filter control."
      }
    ],
    "events": [
      {
        "name": "noora-filter-change",
        "type": "CustomEvent<{ filters: Array<Record<string, unknown>> }>",
        "description": "Emitted when a filter is added, changed, or removed."
      }
    ],
    "notes": [
      "Changes emit a `noora-filter-change` event."
    ],
    "examples": [
      {
        "id": "status",
        "title": "Status filter",
        "description": "Offer a predefined status filter.",
        "markup": "<noora-filter>\n  <noora-filter-definition name=\"status\" label=\"Status\" type=\"option\">\n    <noora-filter-option value=\"active\">Active</noora-filter-option>\n    <noora-filter-option value=\"paused\">Paused</noora-filter-option>\n  </noora-filter-definition>\n  <noora-filter-definition name=\"name\" label=\"Name\" type=\"text\"></noora-filter-definition>\n  <noora-filter-definition name=\"amount\" label=\"Amount\" type=\"number\"></noora-filter-definition>\n  <noora-filter-value name=\"status\" operator=\"==\" value=\"active\"></noora-filter-value>\n</noora-filter>"
      }
    ]
  },
  {
    "name": "HintText",
    "tagName": "noora-hint-text",
    "elementClassName": "NooraHintText",
    "className": "noora-hint-text",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Provides supporting or validation text for a form field.",
    "usage": "<noora-hint-text label=\"Use at least 12 characters\"></noora-hint-text>",
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the hint text."
      },
      {
        "name": "variant",
        "property": "variant",
        "type": "string",
        "values": [
          "default",
          "destructive",
          "disabled"
        ],
        "default": "default",
        "description": "Controls the semantic presentation."
      }
    ],
    "readonlyProperties": [],
    "slots": [],
    "cssParts": [
      {
        "name": "hint",
        "description": "The hint container."
      }
    ],
    "notes": [],
    "examples": [
      {
        "id": "variants",
        "title": "Variants",
        "description": "Communicate default, destructive, and disabled supporting text.",
        "markup": "<noora-hint-text label=\"Use at least eight characters\"></noora-hint-text>\n<noora-hint-text variant=\"destructive\" label=\"This field is required\"></noora-hint-text>\n<noora-hint-text variant=\"disabled\" label=\"Available after setup\"></noora-hint-text>"
      },
      {
        "id": "content",
        "title": "Content examples",
        "description": "Support validation, guidance, limits, and availability messages.",
        "markup": "<noora-hint-text label=\"Your profile is visible to teammates\"></noora-hint-text>\n<noora-hint-text label=\"Maximum 200 characters\"></noora-hint-text>\n<noora-hint-text variant=\"destructive\" label=\"Enter a valid email address\"></noora-hint-text>\n<noora-hint-text variant=\"disabled\" label=\"Connect a project to continue\"></noora-hint-text>"
      }
    ],
    "properties": [],
    "events": []
  },
  {
    "name": "Icon",
    "tagName": "noora-icon",
    "elementClassName": "NooraIcon",
    "className": "noora-icon",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Renders an icon from Noora's shared icon catalog.",
    "usage": "<noora-icon name=\"settings\" label=\"Settings\"></noora-icon>",
    "attributes": [
      {
        "name": "name",
        "property": "name",
        "type": "string",
        "default": "",
        "description": "Selects the icon by its underscore or hyphen-separated name."
      },
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "description": "Provides an accessible label. Omit for decorative icons."
      },
      {
        "name": "size",
        "property": "size",
        "type": "number",
        "default": 24,
        "description": "Sets the width and height in pixels."
      },
      {
        "name": "active-name",
        "property": "activeName",
        "type": "string",
        "description": "Selects the icon shown while the parent element has an open data state."
      },
      {
        "name": "transition",
        "property": "transition",
        "type": "string",
        "values": [
          "morph",
          "crossfade_rotate",
          "auto"
        ],
        "default": "auto",
        "description": "Controls the animated transition between the default and active icons."
      }
    ],
    "readonlyProperties": [],
    "slots": [],
    "cssParts": [
      {
        "name": "icon",
        "description": "The rendered scalable vector graphic."
      }
    ],
    "notes": [
      "Unknown icon names render no graphic.",
      "When active-name is set, the icon observes its parent element's data-state attribute and switches when that state is open."
    ],
    "examples": [
      {
        "id": "transitions",
        "title": "Animated transitions",
        "description": "Click each button to toggle its state and transition between paired icons.",
        "markup": "<button data-state=\"closed\" onclick=\"this.dataset.state = this.dataset.state === 'open' ? 'closed' : 'open'\" aria-label=\"Toggle selector\"><noora-icon name=\"selector\" active-name=\"selector_2\" transition=\"morph\"></noora-icon></button>\n<button data-state=\"closed\" onclick=\"this.dataset.state = this.dataset.state === 'open' ? 'closed' : 'open'\" aria-label=\"Toggle menu\"><noora-icon name=\"menu\" active-name=\"close\" transition=\"crossfade_rotate\"></noora-icon></button>\n<button data-state=\"closed\" onclick=\"this.dataset.state = this.dataset.state === 'open' ? 'closed' : 'open'\" aria-label=\"Toggle theme\"><noora-icon name=\"sun_high\" active-name=\"moon\" transition=\"crossfade_rotate\"></noora-icon></button>\n<button data-state=\"closed\" onclick=\"this.dataset.state = this.dataset.state === 'open' ? 'closed' : 'open'\" aria-label=\"Toggle playback\"><noora-icon name=\"player_play\" active-name=\"player_pause\" transition=\"auto\"></noora-icon></button>"
      }
    ],
    "properties": [],
    "events": []
  },
  {
    "name": "InlineDropdown",
    "tagName": "noora-inline-dropdown",
    "elementClassName": "NooraInlineDropdown",
    "className": "noora-inline-dropdown",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Opens a compact inline menu.",
    "usage": "<noora-inline-dropdown label=\"Sort\">\n  <noora-dropdown-item value=\"newest\">Newest</noora-dropdown-item>\n</noora-inline-dropdown>",
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the trigger label."
      },
      {
        "name": "size",
        "property": "size",
        "type": "string",
        "values": [
          "small",
          "large"
        ],
        "default": "small",
        "description": "Controls the trigger dimensions."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Disables the trigger."
      },
      {
        "name": "open",
        "property": "open",
        "type": "boolean",
        "default": false,
        "reflect": true,
        "description": "Controls whether the menu is open."
      },
      {
        "name": "keep-open",
        "property": "keepOpen",
        "type": "boolean",
        "default": false,
        "description": "Keeps the menu open after selection."
      }
    ],
    "properties": [
      {
        "name": "items",
        "type": "json",
        "typescriptType": "Array<Record<string, unknown>>",
        "default": [],
        "description": "Defines menu items programmatically when declarative noora-dropdown-item children are not used."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "icon",
        "description": "The trigger icon."
      },
      {
        "name": "",
        "description": "Declarative noora-dropdown-item children."
      }
    ],
    "cssParts": [
      {
        "name": "trigger",
        "description": "The menu trigger."
      },
      {
        "name": "content",
        "description": "The menu content."
      }
    ],
    "events": [
      {
        "name": "noora-open-change",
        "type": "CustomEvent<{ open: boolean }>",
        "description": "Emitted when the dropdown opens or closes."
      },
      {
        "name": "noora-select",
        "type": "CustomEvent<{ item: Record<string, unknown>; value: unknown }>",
        "description": "Emitted when an enabled item is selected."
      }
    ],
    "notes": [
      "Selections emit a `noora-select` event."
    ],
    "examples": [
      {
        "id": "default",
        "title": "Default",
        "description": "Use an inline menu for compact choices.",
        "markup": "<noora-inline-dropdown label=\"Sort\">\n  <noora-dropdown-item value=\"newest\">Newest</noora-dropdown-item>\n  <noora-dropdown-item value=\"oldest\">Oldest</noora-dropdown-item>\n</noora-inline-dropdown>"
      },
      {
        "id": "disabled",
        "title": "Disabled",
        "description": "Prevent changes while the choice is unavailable.",
        "markup": "<noora-inline-dropdown label=\"Sort\" disabled>\n  <noora-dropdown-item value=\"newest\">Newest</noora-dropdown-item>\n</noora-inline-dropdown>"
      },
      {
        "id": "large-items",
        "title": "Large items",
        "description": "Use larger item rows for more prominent menus.",
        "markup": "<noora-inline-dropdown label=\"Environment\" size=\"large\">\n  <noora-dropdown-item value=\"production\" size=\"large\">Production</noora-dropdown-item>\n  <noora-dropdown-item value=\"staging\" size=\"large\">Staging</noora-dropdown-item>\n</noora-inline-dropdown>"
      },
      {
        "id": "icons",
        "title": "Items with icons",
        "description": "Pair choices with recognizable icons.",
        "markup": "<noora-inline-dropdown label=\"View\">\n  <noora-dropdown-item value=\"grid\" icon=\"layout_grid\">Grid</noora-dropdown-item>\n  <noora-dropdown-item value=\"list\" icon=\"list\">List</noora-dropdown-item>\n</noora-inline-dropdown>"
      },
      {
        "id": "secondary-text",
        "title": "Secondary text",
        "description": "Add concise context beside each label.",
        "markup": "<noora-inline-dropdown label=\"Branch\">\n  <noora-dropdown-item value=\"main\" secondary-text=\"default\">main</noora-dropdown-item>\n  <noora-dropdown-item value=\"release\" secondary-text=\"protected\">release</noora-dropdown-item>\n</noora-inline-dropdown>"
      }
    ]
  },
  {
    "name": "Label",
    "tagName": "noora-label",
    "elementClassName": "NooraLabel",
    "className": "noora-label",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Labels a form control with optional supporting text.",
    "previewLayout": "stack",
    "usage": "<noora-label label=\"Email\" for=\"email\" required></noora-label>",
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the main label."
      },
      {
        "name": "sublabel",
        "property": "sublabel",
        "type": "string",
        "description": "Sets secondary label text."
      },
      {
        "name": "required",
        "property": "required",
        "type": "boolean",
        "default": false,
        "description": "Shows the required indicator."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Shows the disabled state."
      },
      {
        "name": "for",
        "property": "htmlFor",
        "type": "string",
        "description": "Associates the label with a control identifier."
      }
    ],
    "readonlyProperties": [],
    "slots": [],
    "cssParts": [
      {
        "name": "label",
        "description": "The native label."
      },
      {
        "name": "sublabel",
        "description": "The secondary label."
      }
    ],
    "notes": [],
    "examples": [
      {
        "id": "basic",
        "title": "Basic labels",
        "description": "Show the same simple, required, and supporting-label variations as the LiveView component.",
        "markup": "<noora-label label=\"Email Address\" for=\"email-address\"></noora-label>\n<noora-label label=\"Password\" for=\"password\" required></noora-label>\n<noora-label label=\"Full Name\" for=\"full-name\" sublabel=\"(First and last name)\"></noora-label>\n<noora-label label=\"Company Email\" for=\"company-email\" sublabel=\"(Must be a work email address)\" required></noora-label>"
      },
      {
        "id": "disabled",
        "title": "Disabled labels",
        "description": "Use disabled label colors when the associated control is unavailable.",
        "markup": "<noora-label label=\"Organization\" for=\"organization\" disabled></noora-label>\n<noora-label label=\"Deployment environment\" for=\"deployment-environment\" sublabel=\"Only organization administrators can change this setting\" disabled></noora-label>"
      },
      {
        "id": "edge-cases",
        "title": "Edge cases",
        "description": "Match the LiveView component's long and short label cases.",
        "markup": "<noora-label label=\"Very Long Label That Might Wrap to Multiple Lines in Narrow Containers\" required></noora-label>\n<noora-label label=\"API Key\" sublabel=\"(This is a very long sublabel that provides detailed information about what this field should contain and how it will be used in the application)\"></noora-label>\n<noora-label label=\"ID\" required></noora-label>"
      }
    ],
    "properties": [],
    "events": []
  },
  {
    "name": "LineDivider",
    "tagName": "noora-line-divider",
    "elementClassName": "NooraLineDivider",
    "className": "noora-line-divider",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Separates adjacent content with an optional inline label.",
    "usage": "<noora-line-divider text=\"or\"></noora-line-divider>",
    "attributes": [
      {
        "name": "text",
        "property": "text",
        "type": "string",
        "description": "Sets the optional inline label."
      }
    ],
    "readonlyProperties": [],
    "slots": [],
    "cssParts": [
      {
        "name": "divider",
        "description": "The divider."
      },
      {
        "name": "text",
        "description": "The inline label."
      }
    ],
    "notes": [],
    "examples": [
      {
        "id": "basic",
        "title": "Basic dividers",
        "description": "Match the LiveView component with a plain divider and an inline label.",
        "markup": "<noora-line-divider></noora-line-divider>\n<noora-line-divider text=\"OR\"></noora-line-divider>"
      },
      {
        "id": "text-variations",
        "title": "Text variations",
        "description": "Use the same text variations as the LiveView component.",
        "markup": "<noora-line-divider text=\"AND\"></noora-line-divider>\n<noora-line-divider text=\"Continue with\"></noora-line-divider>\n<noora-line-divider text=\"2\"></noora-line-divider>\n<noora-line-divider text=\"Alternative method\"></noora-line-divider>"
      }
    ],
    "properties": [],
    "events": []
  },
  {
    "name": "LinkButton",
    "tagName": "noora-link-button",
    "elementClassName": "NooraLinkButton",
    "className": "noora-link-button",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Presents a text-oriented button or link.",
    "previewLayout": "stack-center",
    "usage": "<noora-link-button href=\"/docs\" label=\"Documentation\"></noora-link-button>",
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the visible label."
      },
      {
        "name": "variant",
        "property": "variant",
        "type": "string",
        "values": [
          "primary",
          "secondary",
          "destructive"
        ],
        "default": "primary",
        "description": "Controls semantic emphasis."
      },
      {
        "name": "size",
        "property": "size",
        "type": "string",
        "values": [
          "small",
          "medium",
          "large"
        ],
        "default": "large",
        "description": "Controls dimensions."
      },
      {
        "name": "href",
        "property": "href",
        "type": "string",
        "description": "Renders a native link to this location."
      },
      {
        "name": "underline",
        "property": "underline",
        "type": "boolean",
        "default": false,
        "description": "Underlines the label."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Disables activation."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "icon-left",
        "description": "An icon before the label."
      },
      {
        "name": "icon-right",
        "description": "An icon after the label."
      }
    ],
    "cssParts": [
      {
        "name": "control",
        "description": "The native link or button."
      }
    ],
    "notes": [],
    "examples": [
      {
        "id": "variants",
        "title": "Variant",
        "description": "Match the LiveView primary, secondary, and destructive variations.",
        "markup": "<noora-link-button href=\"#\" label=\"Primary\" variant=\"primary\"></noora-link-button>\n<noora-link-button href=\"#\" label=\"Secondary\" variant=\"secondary\"></noora-link-button>\n<noora-link-button href=\"#\" label=\"Destructive\" variant=\"destructive\"></noora-link-button>"
      },
      {
        "id": "sizes",
        "title": "Size",
        "description": "Match the LiveView large, medium, and small variations.",
        "markup": "<noora-link-button href=\"#\" label=\"Large\" size=\"large\"></noora-link-button>\n<noora-link-button href=\"#\" label=\"Medium\" size=\"medium\"></noora-link-button>\n<noora-link-button href=\"#\" label=\"Small\" size=\"small\"></noora-link-button>"
      },
      {
        "id": "disabled",
        "title": "Disabled",
        "description": "Disable the primary link button.",
        "markup": "<noora-link-button label=\"Disabled\" variant=\"primary\" disabled></noora-link-button>"
      },
      {
        "id": "underline",
        "title": "Underline",
        "description": "Render an underlined link button.",
        "markup": "<noora-link-button href=\"#\" label=\"Underline\" underline></noora-link-button>"
      },
      {
        "id": "icons",
        "title": "Icon",
        "description": "Match the LiveView left, right, and two-sided icon variations.",
        "markup": "<noora-link-button href=\"#\" label=\"Icon\"><noora-icon slot=\"icon-left\" name=\"chevron_left\"></noora-icon></noora-link-button>\n<noora-link-button href=\"#\" label=\"Icon\"><noora-icon slot=\"icon-right\" name=\"chevron_right\"></noora-icon></noora-link-button>\n<noora-link-button href=\"#\" label=\"Icon\"><noora-icon slot=\"icon-left\" name=\"chevron_left\"></noora-icon><noora-icon slot=\"icon-right\" name=\"chevron_right\"></noora-icon></noora-link-button>"
      }
    ],
    "properties": [],
    "events": []
  },
  {
    "name": "Modal",
    "tagName": "noora-modal",
    "elementClassName": "NooraModal",
    "className": "noora-modal",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Presents focused content above the current page.",
    "usage": "<noora-modal title=\"Edit profile\"><button slot=\"trigger\">Open</button><p>Profile form</p></noora-modal>",
    "attributes": [
      {
        "name": "title",
        "property": "title",
        "type": "string",
        "description": "Sets the modal title."
      },
      {
        "name": "description",
        "property": "description",
        "type": "string",
        "description": "Sets the large-header description."
      },
      {
        "name": "header-type",
        "property": "headerType",
        "type": "string",
        "values": [
          "default",
          "icon",
          "success",
          "info",
          "warning",
          "error"
        ],
        "default": "default",
        "description": "Controls the header icon and semantics."
      },
      {
        "name": "header-size",
        "property": "headerSize",
        "type": "string",
        "values": [
          "small",
          "large"
        ],
        "default": "large",
        "description": "Controls header dimensions."
      },
      {
        "name": "open",
        "property": "open",
        "type": "boolean",
        "default": false,
        "description": "Controls whether the modal is open."
      },
      {
        "name": "close-on-escape",
        "property": "closeOnEscape",
        "type": "boolean",
        "default": true,
        "description": "Closes the modal when Escape is pressed."
      },
      {
        "name": "close-on-interact-outside",
        "property": "closeOnInteractOutside",
        "type": "boolean",
        "default": true,
        "description": "Closes the modal when its backdrop is activated."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "trigger",
        "description": "The control that opens the modal."
      },
      {
        "name": "header-icon",
        "description": "A custom icon for icon headers."
      },
      {
        "name": "header-button",
        "description": "A custom header action."
      },
      {
        "name": "",
        "description": "The modal body."
      },
      {
        "name": "footer",
        "description": "The modal footer."
      }
    ],
    "cssParts": [
      {
        "name": "backdrop",
        "description": "The page backdrop."
      },
      {
        "name": "content",
        "description": "The modal surface."
      },
      {
        "name": "header",
        "description": "The modal header."
      },
      {
        "name": "body",
        "description": "The modal body."
      },
      {
        "name": "footer",
        "description": "The modal footer."
      }
    ],
    "events": [
      {
        "name": "noora-open-change",
        "type": "CustomEvent<{ open: boolean }>",
        "description": "Emitted when the modal opens or closes."
      },
      {
        "name": "noora-dismiss",
        "type": "CustomEvent<{ reason: \"close-button\" | \"escape\" | \"outside\" | \"action\" }>",
        "description": "Emitted when the modal is dismissed without a direct open-property assignment."
      }
    ],
    "notes": [
      "Opening and closing emits a `noora-open-change` event.",
      "Slotted footer buttons can use `data-action=\"close\"` to close the modal."
    ],
    "examples": [
      {
        "id": "header-types",
        "title": "Header types",
        "description": "Use default, custom-icon, success, information, warning, or error headers.",
        "markup": "<noora-modal title=\"Default Modal\" description=\"A standard modal with default header styling\" header-type=\"default\" header-size=\"large\"><noora-button slot=\"trigger\">Default Modal</noora-button><p>This is a basic modal with default header styling.</p><noora-button slot=\"footer\" variant=\"secondary\" data-action=\"close\">Cancel</noora-button><noora-button slot=\"footer\">Confirm</noora-button></noora-modal>\n<noora-modal title=\"Custom Icon Modal\" description=\"Modal with custom icon in header\" header-type=\"icon\" header-size=\"large\"><noora-button slot=\"trigger\">Icon Modal</noora-button><noora-icon slot=\"header-icon\" name=\"mail\"></noora-icon><noora-text-input label=\"Email\" name=\"email\" value=\"\" type=\"email\" required placeholder=\"hello@tuist.dev\"></noora-text-input><noora-button slot=\"footer\" variant=\"secondary\" data-action=\"close\">Cancel</noora-button><noora-button slot=\"footer\">Send</noora-button></noora-modal>\n<noora-modal title=\"Success\" description=\"Operation completed successfully\" header-type=\"success\" header-size=\"large\"><noora-button slot=\"trigger\">Success Modal</noora-button><p>Your operation has been completed successfully!</p><noora-button slot=\"footer\" data-action=\"close\">Close</noora-button></noora-modal>\n<noora-modal title=\"Information\" description=\"Important information about this action\" header-type=\"info\" header-size=\"large\"><noora-button slot=\"trigger\">Info Modal</noora-button><p>Here's some important information you should know before proceeding.</p><noora-button slot=\"footer\" data-action=\"close\">Got it</noora-button></noora-modal>\n<noora-modal title=\"Warning\" description=\"This action requires your attention\" header-type=\"warning\" header-size=\"large\"><noora-button slot=\"trigger\">Warning Modal</noora-button><p>This action may have consequences. Please review before continuing.</p><noora-button slot=\"footer\" variant=\"secondary\" data-action=\"close\">Cancel</noora-button><noora-button slot=\"footer\" variant=\"destructive\">Continue</noora-button></noora-modal>\n<noora-modal title=\"Error\" description=\"Something went wrong\" header-type=\"error\" header-size=\"large\"><noora-button slot=\"trigger\">Error Modal</noora-button><p>An error occurred while processing your request. Please try again.</p><noora-button slot=\"footer\">Retry</noora-button></noora-modal>"
      },
      {
        "id": "header-sizes",
        "title": "Header sizes",
        "description": "Small headers omit the description while large headers show it.",
        "markup": "<noora-modal title=\"Small Header\" description=\"This description won't be shown because header size is small\" header-type=\"default\" header-size=\"small\"><noora-button slot=\"trigger\">Small Header</noora-button><p>Modal with small header - description is not displayed.</p><noora-button slot=\"footer\" data-action=\"close\">Close</noora-button></noora-modal>\n<noora-modal title=\"Large Header\" description=\"This description is visible because header size is large\" header-type=\"default\" header-size=\"large\"><noora-button slot=\"trigger\">Large Header</noora-button><p>Modal with large header - description is displayed below the title.</p><noora-button slot=\"footer\" data-action=\"close\">Close</noora-button></noora-modal>"
      },
      {
        "id": "footers",
        "title": "Footer variations",
        "description": "Use no footer, one action, or multiple actions.",
        "markup": "<noora-modal title=\"Modal Without Footer\" description=\"This modal has no footer section\" header-type=\"default\" header-size=\"large\"><noora-button slot=\"trigger\">No Footer</noora-button><p>This modal doesn't have a footer. Users can close it using the X button in the header.</p></noora-modal>\n<noora-modal title=\"Single Action\" description=\"Modal with only one action button\" header-type=\"success\" header-size=\"large\"><noora-button slot=\"trigger\">Single Action</noora-button><p>This modal has only one action in the footer.</p><noora-button slot=\"footer\" data-action=\"close\">Got it</noora-button></noora-modal>\n<noora-modal title=\"Multiple Actions\" description=\"Modal with several action buttons\" header-type=\"warning\" header-size=\"large\"><noora-button slot=\"trigger\">Multiple Actions</noora-button><p>This modal demonstrates multiple action buttons in the footer.</p><noora-button slot=\"footer\" variant=\"secondary\">Save Draft</noora-button><noora-button slot=\"footer\" variant=\"secondary\" data-action=\"close\">Cancel</noora-button><noora-button slot=\"footer\">Publish</noora-button></noora-modal>"
      }
    ],
    "properties": []
  },
  {
    "name": "NeutralButton",
    "tagName": "noora-neutral-button",
    "elementClassName": "NooraNeutralButton",
    "className": "noora-neutral-button",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Provides a low-emphasis compact control.",
    "usage": "<noora-neutral-button aria-label=\"Previous page\"><noora-icon name=\"chevron_left\"></noora-icon></noora-neutral-button>",
    "attributes": [
      {
        "name": "size",
        "property": "size",
        "type": "string",
        "values": [
          "small",
          "medium",
          "large"
        ],
        "default": "large",
        "description": "Controls the dimensions."
      },
      {
        "name": "href",
        "property": "href",
        "type": "string",
        "description": "Renders a native link to this location."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Disables activation."
      },
      {
        "name": "aria-label",
        "property": "_ariaLabel",
        "publicProperty": false,
        "type": "string",
        "description": "Provides an accessible name."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "The complete control content."
      }
    ],
    "cssParts": [
      {
        "name": "control",
        "description": "The native link or button."
      }
    ],
    "notes": [],
    "examples": [
      {
        "id": "sizes",
        "title": "Sizes",
        "description": "Use small, medium, or large compact controls.",
        "markup": "<noora-neutral-button size=\"small\" aria-label=\"Next\"><noora-icon name=\"chevron_right\"></noora-icon></noora-neutral-button>\n<noora-neutral-button size=\"medium\" aria-label=\"Next\"><noora-icon name=\"chevron_right\"></noora-icon></noora-neutral-button>\n<noora-neutral-button size=\"large\" aria-label=\"Next\"><noora-icon name=\"chevron_right\"></noora-icon></noora-neutral-button>"
      },
      {
        "id": "states",
        "title": "States",
        "description": "Compare enabled and disabled controls.",
        "markup": "<noora-neutral-button size=\"medium\" aria-label=\"Next\"><noora-icon name=\"chevron_right\"></noora-icon></noora-neutral-button>\n<noora-neutral-button size=\"medium\" aria-label=\"Next\" disabled><noora-icon name=\"chevron_right\"></noora-icon></noora-neutral-button>"
      },
      {
        "id": "icons",
        "title": "Different icons",
        "description": "Use the icon that matches the navigation direction.",
        "markup": "<noora-neutral-button size=\"medium\" aria-label=\"Previous\"><noora-icon name=\"chevron_left\"></noora-icon></noora-neutral-button>\n<noora-neutral-button size=\"medium\" aria-label=\"Next\"><noora-icon name=\"chevron_right\"></noora-icon></noora-neutral-button>"
      }
    ],
    "properties": [],
    "events": []
  },
  {
    "name": "PaginationGroup",
    "tagName": "noora-pagination-group",
    "elementClassName": "NooraPaginationGroup",
    "className": "noora-pagination-group",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Navigates a finite collection of numbered pages.",
    "usage": "<noora-pagination-group current-page=\"2\" number-of-pages=\"10\"></noora-pagination-group>",
    "attributes": [
      {
        "name": "current-page",
        "property": "currentPage",
        "type": "number",
        "default": 1,
        "description": "Sets the selected page."
      },
      {
        "name": "number-of-pages",
        "property": "numberOfPages",
        "type": "number",
        "default": 1,
        "description": "Sets the total page count."
      },
      {
        "name": "href-template",
        "property": "hrefTemplate",
        "type": "string",
        "description": "Sets link locations by replacing `{page}` with the page number."
      }
    ],
    "readonlyProperties": [],
    "slots": [],
    "cssParts": [
      {
        "name": "pagination",
        "description": "The pagination container."
      },
      {
        "name": "page",
        "description": "Each page control."
      },
      {
        "name": "previous",
        "description": "The previous-page control."
      },
      {
        "name": "next",
        "description": "The next-page control."
      }
    ],
    "events": [
      {
        "name": "noora-page-change",
        "type": "CustomEvent<{ page: number }>",
        "description": "Emitted when a page control is activated."
      }
    ],
    "notes": [
      "Page activation emits a `noora-page-change` event."
    ],
    "examples": [
      {
        "id": "basic",
        "title": "Page positions",
        "description": "Compare the first, middle, last, and second page positions.",
        "markup": "<noora-pagination-group current-page=\"1\" number-of-pages=\"12\"></noora-pagination-group>\n<noora-pagination-group current-page=\"6\" number-of-pages=\"12\"></noora-pagination-group>\n<noora-pagination-group current-page=\"12\" number-of-pages=\"12\"></noora-pagination-group>\n<noora-pagination-group current-page=\"2\" number-of-pages=\"12\"></noora-pagination-group>"
      },
      {
        "id": "page-counts",
        "title": "Page counts",
        "description": "Show ellipsis behavior across small and large collections.",
        "markup": "<noora-pagination-group current-page=\"3\" number-of-pages=\"5\"></noora-pagination-group>\n<noora-pagination-group current-page=\"25\" number-of-pages=\"50\"></noora-pagination-group>\n<noora-pagination-group current-page=\"500\" number-of-pages=\"999\"></noora-pagination-group>"
      },
      {
        "id": "edge-cases",
        "title": "Edge cases",
        "description": "Handle one-page, two-page, and near-boundary collections.",
        "markup": "<noora-pagination-group current-page=\"1\" number-of-pages=\"1\"></noora-pagination-group>\n<noora-pagination-group current-page=\"1\" number-of-pages=\"2\"></noora-pagination-group>\n<noora-pagination-group current-page=\"2\" number-of-pages=\"2\"></noora-pagination-group>\n<noora-pagination-group current-page=\"3\" number-of-pages=\"20\"></noora-pagination-group>\n<noora-pagination-group current-page=\"18\" number-of-pages=\"20\"></noora-pagination-group>"
      }
    ],
    "properties": []
  },
  {
    "name": "Popover",
    "tagName": "noora-popover",
    "elementClassName": "NooraPopover",
    "className": "noora-popover",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Displays contextual content anchored to a trigger.",
    "usage": "<noora-popover><button slot=\"trigger\">Settings</button><p>Popover content</p></noora-popover>",
    "attributes": [
      {
        "name": "open",
        "property": "open",
        "type": "boolean",
        "default": false,
        "description": "Controls whether the popover is open."
      },
      {
        "name": "modal",
        "property": "modal",
        "type": "boolean",
        "default": false,
        "description": "Enables modal interaction behavior."
      },
      {
        "name": "auto-focus",
        "property": "autoFocus",
        "type": "boolean",
        "default": true,
        "description": "Focuses the first focusable element after opening."
      },
      {
        "name": "close-on-interact-outside",
        "property": "closeOnInteractOutside",
        "type": "boolean",
        "default": true,
        "description": "Closes after outside interaction."
      },
      {
        "name": "close-on-escape",
        "property": "closeOnEscape",
        "type": "boolean",
        "default": true,
        "description": "Closes when Escape is pressed."
      },
      {
        "name": "placement",
        "property": "placement",
        "type": "string",
        "values": [
          "top",
          "top-start",
          "top-end",
          "bottom",
          "bottom-start",
          "bottom-end"
        ],
        "default": "bottom",
        "description": "Controls the preferred placement."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "trigger",
        "description": "The control that toggles the popover."
      },
      {
        "name": "",
        "description": "The popover content."
      }
    ],
    "cssParts": [
      {
        "name": "trigger",
        "description": "The trigger wrapper."
      },
      {
        "name": "content",
        "description": "The popover surface."
      }
    ],
    "events": [
      {
        "name": "noora-open-change",
        "type": "CustomEvent<{ open: boolean }>",
        "description": "Emitted when the popover opens or closes."
      }
    ],
    "notes": [
      "Opening and closing emits a `noora-open-change` event."
    ],
    "examples": [
      {
        "id": "settings",
        "title": "Default",
        "description": "Show a simple popover with basic content.",
        "markup": "<noora-popover placement=\"bottom\">\n  <button slot=\"trigger\" type=\"button\" style=\"padding: 8px 16px;\">Click me</button>\n  <div style=\"padding: 16px;\">\n    <h3 style=\"margin: 0 0 8px; color: var(--noora-surface-label-primary);\">Popover Title</h3>\n    <p style=\"margin: 0; color: var(--noora-surface-label-secondary);\">This is the content inside the popover.</p>\n  </div>\n</noora-popover>"
      }
    ],
    "properties": []
  },
  {
    "name": "ProgressBar",
    "tagName": "noora-progress-bar",
    "elementClassName": "NooraProgressBar",
    "className": "noora-progress-bar",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Visualizes progress toward a maximum value.",
    "usage": "<noora-progress-bar value=\"75\" max=\"100\" title=\"Upload progress\"></noora-progress-bar>",
    "previewLayout": "stack",
    "attributes": [
      {
        "name": "value",
        "property": "value",
        "type": "number",
        "default": 0,
        "description": "Sets the current value."
      },
      {
        "name": "max",
        "property": "max",
        "type": "number",
        "default": 100,
        "description": "Sets the maximum value."
      },
      {
        "name": "title",
        "property": "title",
        "type": "string",
        "description": "Sets the optional title."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "description",
        "description": "Supporting content below the bar."
      }
    ],
    "cssParts": [
      {
        "name": "progress",
        "description": "The progress container."
      },
      {
        "name": "track",
        "description": "The complete track."
      },
      {
        "name": "value",
        "description": "The filled track."
      }
    ],
    "notes": [],
    "examples": [
      {
        "id": "basic",
        "title": "Basic progress",
        "description": "Show progress with or without a title.",
        "markup": "<noora-progress-bar value=\"75\" max=\"100\"></noora-progress-bar>\n<noora-progress-bar value=\"150\" max=\"200\" title=\"Storage Used:\"></noora-progress-bar>",
        "previewMarkup": "<noora-progress-bar value=\"75\" max=\"100\" style=\"width: 75%\"></noora-progress-bar>\n<noora-progress-bar value=\"150\" max=\"200\" title=\"Storage Used:\" style=\"width: 75%\"></noora-progress-bar>"
      },
      {
        "id": "levels",
        "title": "Progress levels",
        "description": "Compare empty, quarter, half, three-quarter, and complete states.",
        "markup": "<noora-progress-bar value=\"0\" max=\"100\" title=\"Not started\"></noora-progress-bar>\n<noora-progress-bar value=\"25\" max=\"100\" title=\"25% Complete\"></noora-progress-bar>\n<noora-progress-bar value=\"50\" max=\"100\" title=\"Halfway there\"></noora-progress-bar>\n<noora-progress-bar value=\"75\" max=\"100\" title=\"Almost done\"></noora-progress-bar>\n<noora-progress-bar value=\"100\" max=\"100\" title=\"Complete!\"></noora-progress-bar>",
        "previewMarkup": "<noora-progress-bar value=\"0\" max=\"100\" title=\"Not started\" style=\"width: 75%\"></noora-progress-bar>\n<noora-progress-bar value=\"25\" max=\"100\" title=\"25% Complete\" style=\"width: 75%\"></noora-progress-bar>\n<noora-progress-bar value=\"50\" max=\"100\" title=\"Halfway there\" style=\"width: 75%\"></noora-progress-bar>\n<noora-progress-bar value=\"75\" max=\"100\" title=\"Almost done\" style=\"width: 75%\"></noora-progress-bar>\n<noora-progress-bar value=\"100\" max=\"100\" title=\"Complete!\" style=\"width: 75%\"></noora-progress-bar>"
      },
      {
        "id": "scales",
        "title": "Different scales",
        "description": "Use any numeric range that suits the measured quantity.",
        "markup": "<noora-progress-bar value=\"3\" max=\"5\" title=\"Steps completed:\"></noora-progress-bar>\n<noora-progress-bar value=\"750\" max=\"1000\" title=\"Points earned:\"></noora-progress-bar>\n<noora-progress-bar value=\"847\" max=\"1024\" title=\"Download progress (MB):\"></noora-progress-bar>",
        "previewMarkup": "<noora-progress-bar value=\"3\" max=\"5\" title=\"Steps completed:\" style=\"width: 75%\"></noora-progress-bar>\n<noora-progress-bar value=\"750\" max=\"1000\" title=\"Points earned:\" style=\"width: 75%\"></noora-progress-bar>\n<noora-progress-bar value=\"847\" max=\"1024\" title=\"Download progress (MB):\" style=\"width: 75%\"></noora-progress-bar>"
      },
      {
        "id": "edge-cases",
        "title": "Edge cases",
        "description": "Show overflowing, very small, and long-title progress values.",
        "markup": "<noora-progress-bar value=\"120\" max=\"100\" title=\"Exceeded goal:\"></noora-progress-bar>\n<noora-progress-bar value=\"1\" max=\"1000\" title=\"Just started:\"></noora-progress-bar>\n<noora-progress-bar value=\"42\" max=\"100\" title=\"Very Long Progress Bar Title That Might Wrap:\"></noora-progress-bar>",
        "previewMarkup": "<noora-progress-bar value=\"120\" max=\"100\" title=\"Exceeded goal:\" style=\"width: 75%\"></noora-progress-bar>\n<noora-progress-bar value=\"1\" max=\"1000\" title=\"Just started:\" style=\"width: 75%\"></noora-progress-bar>\n<noora-progress-bar value=\"42\" max=\"100\" title=\"Very Long Progress Bar Title That Might Wrap:\" style=\"width: 75%\"></noora-progress-bar>"
      }
    ],
    "properties": [],
    "events": []
  },
  {
    "name": "Select",
    "tagName": "noora-select",
    "elementClassName": "NooraSelect",
    "className": "noora-dropdown",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Selects one value from a list of options.",
    "usage": "<noora-select label=\"Country\" name=\"country\">\n  <option value=\"es\">Spain</option>\n</noora-select>",
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the placeholder label."
      },
      {
        "name": "name",
        "property": "name",
        "type": "string",
        "default": "",
        "description": "Sets the submitted field name."
      },
      {
        "name": "value",
        "property": "value",
        "type": "string",
        "default": "",
        "description": "Gets or sets the selected value."
      },
      {
        "name": "hint",
        "property": "hint",
        "type": "string",
        "description": "Adds supporting text."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Disables the select."
      },
      {
        "name": "required",
        "property": "required",
        "type": "boolean",
        "default": false,
        "description": "Marks the field as required."
      },
      {
        "name": "open",
        "property": "open",
        "type": "boolean",
        "default": false,
        "description": "Controls whether the options menu is open."
      }
    ],
    "properties": [
      {
        "name": "options",
        "type": "json",
        "typescriptType": "Array<Record<string, unknown>>",
        "default": [],
        "description": "Defines options programmatically when declarative option children are not used. Each option can include label, value, icon, and disabled fields."
      }
    ],
    "readonlyProperties": [
      {
        "name": "control",
        "type": "HTMLSelectElement | null",
        "description": "The native select control."
      },
      {
        "name": "form",
        "type": "HTMLFormElement | null",
        "description": "The associated form."
      }
    ],
    "slots": [
      {
        "name": "",
        "description": "Declarative native option children."
      }
    ],
    "cssParts": [
      {
        "name": "select",
        "description": "The visible select trigger."
      },
      {
        "name": "content",
        "description": "The options menu."
      },
      {
        "name": "items",
        "description": "The options list."
      },
      {
        "name": "hint",
        "description": "The supporting text."
      }
    ],
    "events": [
      {
        "name": "input",
        "type": "InputEvent",
        "description": "Emitted while the selected value changes."
      },
      {
        "name": "change",
        "type": "Event",
        "description": "Emitted after the selected value changes."
      },
      {
        "name": "noora-open-change",
        "type": "CustomEvent<{ open: boolean }>",
        "description": "Emitted when the options menu opens or closes."
      },
      {
        "name": "noora-select",
        "type": "CustomEvent<{ item: Record<string, unknown>; value: string }>",
        "description": "Emitted with the selected option and value."
      }
    ],
    "notes": [
      "The component emits standard input and change events.",
      "Use data-icon on a declarative option to show an icon in the menu and selected trigger."
    ],
    "examples": [
      {
        "id": "country",
        "title": "Default",
        "description": "Select a country from structured options.",
        "markup": "<noora-select label=\"Country\" name=\"country\">\n  <option value=\"es\">Spain</option>\n  <option value=\"de\">Germany</option>\n  <option value=\"fr\">France</option>\n</noora-select>"
      },
      {
        "id": "selected",
        "title": "Selected value",
        "description": "Show the current value in the trigger.",
        "markup": "<noora-select label=\"Country\" name=\"country\" value=\"de\">\n  <option value=\"es\">Spain</option>\n  <option value=\"de\">Germany</option>\n  <option value=\"fr\">France</option>\n</noora-select>"
      },
      {
        "id": "icons",
        "title": "Option icons",
        "description": "Add visual context to options and the selected trigger.",
        "markup": "<noora-select label=\"Workspace\" name=\"workspace\" value=\"application\">\n  <option value=\"application\" data-icon=\"category\">Application</option>\n  <option value=\"framework\" data-icon=\"category\">Framework</option>\n  <option value=\"package\" data-icon=\"category\">Package</option>\n</noora-select>"
      },
      {
        "id": "hint",
        "title": "Hint",
        "description": "Explain how the selected value will be used.",
        "markup": "<noora-select label=\"Country\" name=\"country\" hint=\"Used for regional settings.\">\n  <option value=\"es\">Spain</option>\n  <option value=\"de\">Germany</option>\n  <option value=\"fr\">France</option>\n</noora-select>"
      },
      {
        "id": "disabled",
        "title": "Disabled",
        "description": "Disable selection when the field is unavailable.",
        "markup": "<noora-select label=\"Country\" name=\"country\" value=\"de\" disabled>\n  <option value=\"es\">Spain</option>\n  <option value=\"de\">Germany</option>\n  <option value=\"fr\">France</option>\n</noora-select>"
      }
    ]
  },
  {
    "name": "ShortcutKey",
    "tagName": "noora-shortcut-key",
    "elementClassName": "NooraShortcutKey",
    "className": "noora-shortcut-key",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Displays a keyboard shortcut.",
    "usage": "<noora-shortcut-key>⌘K</noora-shortcut-key>",
    "attributes": [
      {
        "name": "size",
        "property": "size",
        "type": "string",
        "values": [
          "small",
          "large"
        ],
        "default": "large",
        "description": "Controls the key dimensions."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "The shortcut text."
      }
    ],
    "cssParts": [
      {
        "name": "key",
        "description": "The keyboard key."
      }
    ],
    "notes": [],
    "examples": [
      {
        "id": "command",
        "title": "Command",
        "description": "Display a command shortcut.",
        "markup": "<noora-shortcut-key>⌘K</noora-shortcut-key>"
      }
    ],
    "properties": [],
    "events": []
  },
  {
    "name": "SidebarGroup",
    "tagName": "noora-sidebar-group",
    "elementClassName": "NooraSidebarGroup",
    "className": "noora-sidebar-group",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Groups declarative sidebar destinations.",
    "usage": "<noora-sidebar-group label=\"Projects\" default-open><noora-sidebar-item href=\"/tuist\">Tuist</noora-sidebar-item></noora-sidebar-group>",
    "standalone": false,
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the group label."
      },
      {
        "name": "default-open",
        "property": "defaultOpen",
        "type": "boolean",
        "default": false,
        "description": "Expands the group initially."
      },
      {
        "name": "fixed",
        "property": "fixed",
        "type": "boolean",
        "default": false,
        "description": "Keeps the group expanded and removes its collapse interaction."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "The noora-sidebar-item children."
      }
    ],
    "cssParts": [],
    "notes": [],
    "examples": [
      {
        "id": "group",
        "title": "Group",
        "description": "Group related sidebar destinations.",
        "markup": "<noora-sidebar-group label=\"Projects\" default-open><noora-sidebar-item href=\"/tuist\">Tuist</noora-sidebar-item></noora-sidebar-group>"
      }
    ],
    "events": []
  },
  {
    "name": "SidebarItem",
    "tagName": "noora-sidebar-item",
    "elementClassName": "NooraSidebarItem",
    "className": "noora-sidebar-item",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Describes one declarative sidebar destination.",
    "usage": "<noora-sidebar-item href=\"/\" icon=\"dashboard\">Dashboard</noora-sidebar-item>",
    "standalone": false,
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the label instead of using text content."
      },
      {
        "name": "href",
        "property": "href",
        "type": "string",
        "default": "#",
        "description": "Sets the navigation address."
      },
      {
        "name": "icon",
        "property": "icon",
        "type": "string",
        "description": "Shows an icon before the label."
      },
      {
        "name": "selected",
        "property": "selected",
        "type": "boolean",
        "default": false,
        "description": "Marks the destination as the current page."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "The destination label."
      }
    ],
    "cssParts": [],
    "notes": [],
    "examples": [
      {
        "id": "item",
        "title": "Item",
        "description": "Describe one sidebar destination.",
        "markup": "<noora-sidebar-item href=\"/\" icon=\"dashboard\">Dashboard</noora-sidebar-item>"
      }
    ],
    "events": []
  },
  {
    "name": "Sidebar",
    "tagName": "noora-sidebar",
    "elementClassName": "NooraSidebar",
    "className": "noora-sidebar",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Provides responsive side navigation.",
    "usage": "<noora-sidebar>\n  <noora-sidebar-item href=\"/\" icon=\"dashboard\">Dashboard</noora-sidebar-item>\n</noora-sidebar>",
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "Primary navigation",
        "description": "Sets the accessible navigation label."
      }
    ],
    "properties": [
      {
        "name": "items",
        "type": "json",
        "typescriptType": "Array<Record<string, unknown>>",
        "default": [],
        "description": "Defines navigation programmatically when declarative sidebar children are not used."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "Declarative noora-sidebar-item and noora-sidebar-group children."
      }
    ],
    "cssParts": [
      {
        "name": "sidebar",
        "description": "The sidebar container."
      },
      {
        "name": "viewport",
        "description": "The scrollable navigation viewport."
      }
    ],
    "notes": [],
    "examples": [
      {
        "id": "navigation",
        "title": "Navigation",
        "description": "Provide structured navigation items.",
        "markup": "<noora-sidebar>\n  <noora-sidebar-item href=\"/\" icon=\"dashboard\" selected>Dashboard</noora-sidebar-item>\n  <noora-sidebar-group label=\"Projects\" default-open>\n    <noora-sidebar-item href=\"/projects/tuist\">Tuist</noora-sidebar-item>\n    <noora-sidebar-item href=\"/projects/noora\">Noora</noora-sidebar-item>\n  </noora-sidebar-group>\n</noora-sidebar>"
      }
    ],
    "events": []
  },
  {
    "name": "StatusBadge",
    "tagName": "noora-status-badge",
    "elementClassName": "NooraStatusBadge",
    "className": "noora-status-badge",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Displays a compact workflow status with a semantic icon or dot.",
    "usage": "<noora-status-badge status=\"success\" label=\"Complete\"></noora-status-badge>",
    "attributes": [
      {
        "name": "type",
        "property": "type",
        "type": "string",
        "values": [
          "icon",
          "dot"
        ],
        "default": "icon",
        "description": "Chooses a semantic icon or a dot indicator."
      },
      {
        "name": "status",
        "property": "status",
        "type": "string",
        "values": [
          "success",
          "error",
          "warning",
          "attention",
          "disabled",
          "in_progress"
        ],
        "default": "success",
        "description": "Sets the semantic status."
      },
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the visible label."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "Custom label content that takes precedence over the label attribute."
      }
    ],
    "cssParts": [
      {
        "name": "badge",
        "description": "The status badge container."
      },
      {
        "name": "icon",
        "description": "The semantic icon or dot."
      },
      {
        "name": "label",
        "description": "The visible label."
      }
    ],
    "notes": [],
    "examples": [
      {
        "id": "statuses",
        "title": "Statuses",
        "description": "Communicate workflow state with a semantic icon.",
        "markup": "<noora-status-badge status=\"success\" label=\"Complete\"></noora-status-badge>\n<noora-status-badge status=\"error\" label=\"Failed\"></noora-status-badge>\n<noora-status-badge status=\"warning\" label=\"Warning\"></noora-status-badge>\n<noora-status-badge status=\"attention\" label=\"Needs attention\"></noora-status-badge>\n<noora-status-badge status=\"in_progress\" label=\"Running\"></noora-status-badge>"
      },
      {
        "id": "dots",
        "title": "Dot indicators",
        "description": "Use dots when the icon shape is unnecessary.",
        "markup": "<noora-status-badge type=\"dot\" status=\"success\" label=\"Complete\"></noora-status-badge>\n<noora-status-badge type=\"dot\" status=\"error\" label=\"Failed\"></noora-status-badge>\n<noora-status-badge type=\"dot\" status=\"warning\" label=\"Pending\"></noora-status-badge>\n<noora-status-badge type=\"dot\" status=\"attention\" label=\"Needs attention\"></noora-status-badge>\n<noora-status-badge type=\"dot\" status=\"in_progress\" label=\"Running\"></noora-status-badge>"
      }
    ],
    "properties": [],
    "events": []
  },
  {
    "name": "TabItem",
    "tagName": "noora-tab-item",
    "elementClassName": "NooraTabItem",
    "className": "noora-tab-item",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Describes one declarative tab item.",
    "usage": "<noora-tab-item value=\"overview\" icon=\"category\">Overview</noora-tab-item>",
    "standalone": false,
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the label instead of using text content."
      },
      {
        "name": "value",
        "property": "value",
        "type": "string",
        "description": "Sets the selected value."
      },
      {
        "name": "icon",
        "property": "icon",
        "type": "string",
        "description": "Shows an icon before the label."
      },
      {
        "name": "right-icon",
        "property": "rightIcon",
        "type": "string",
        "description": "Shows an icon after the label."
      },
      {
        "name": "href",
        "property": "href",
        "type": "string",
        "description": "Renders the tab as a navigation link."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Disables selection."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "The tab label."
      }
    ],
    "cssParts": [],
    "notes": [],
    "examples": [
      {
        "id": "item",
        "title": "Item",
        "description": "Describe one tab.",
        "markup": "<noora-tab-item value=\"overview\" icon=\"category\">Overview</noora-tab-item>"
      }
    ],
    "events": []
  },
  {
    "name": "TabMenu",
    "tagName": "noora-tab-menu",
    "elementClassName": "NooraTabMenu",
    "className": "noora-tab-menu-horizontal",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Switches between related views or navigation destinations.",
    "usage": "<noora-tab-menu value=\"overview\">\n  <noora-tab-item value=\"overview\">Overview</noora-tab-item>\n  <noora-tab-item value=\"settings\">Settings</noora-tab-item>\n</noora-tab-menu>",
    "attributes": [
      {
        "name": "orientation",
        "property": "orientation",
        "type": "string",
        "values": [
          "horizontal",
          "vertical"
        ],
        "default": "horizontal",
        "description": "Controls the menu layout."
      },
      {
        "name": "value",
        "property": "value",
        "type": "string",
        "description": "Gets or sets the selected item value."
      }
    ],
    "properties": [
      {
        "name": "items",
        "type": "json",
        "typescriptType": "Array<Record<string, unknown>>",
        "default": [],
        "description": "Defines tabs programmatically when declarative noora-tab-item children are not used."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "Declarative noora-tab-item children."
      }
    ],
    "cssParts": [
      {
        "name": "menu",
        "description": "The menu container."
      },
      {
        "name": "item",
        "description": "Each tab item."
      }
    ],
    "events": [
      {
        "name": "noora-tab-change",
        "type": "CustomEvent<{ item: Record<string, unknown>; value: unknown }>",
        "description": "Emitted when an enabled tab is selected."
      }
    ],
    "notes": [
      "Selection emits a `noora-tab-change` event."
    ],
    "examples": [
      {
        "id": "horizontal",
        "title": "Horizontal tabs",
        "description": "Switch between sibling views.",
        "markup": "<noora-tab-menu value=\"general\">\n  <noora-tab-item value=\"general\" icon=\"category\">General</noora-tab-item>\n  <noora-tab-item value=\"settings\">Settings</noora-tab-item>\n  <noora-tab-item value=\"members\">Members</noora-tab-item>\n</noora-tab-menu>"
      },
      {
        "id": "vertical",
        "title": "Vertical tabs",
        "description": "Use labels with left, right, or paired icons.",
        "markup": "<noora-tab-menu orientation=\"vertical\">\n  <noora-tab-item value=\"dashboard\">Dashboard</noora-tab-item>\n  <noora-tab-item value=\"analytics\" icon=\"category\">Analytics</noora-tab-item>\n  <noora-tab-item value=\"settings\" right-icon=\"category\">Settings</noora-tab-item>\n  <noora-tab-item value=\"users\" icon=\"category\" right-icon=\"category\">Users</noora-tab-item>\n</noora-tab-menu>"
      },
      {
        "id": "vertical-edge-cases",
        "title": "Vertical edge cases",
        "description": "Handle especially long and short labels.",
        "markup": "<noora-tab-menu orientation=\"vertical\">\n  <noora-tab-item value=\"long\">Very Long Tab Label That Might Wrap</noora-tab-item>\n  <noora-tab-item value=\"short\">A</noora-tab-item>\n</noora-tab-menu>"
      }
    ]
  },
  {
    "name": "TableCell",
    "tagName": "noora-table-cell",
    "elementClassName": "NooraTableCell",
    "className": "noora-table-cell",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Describes one declarative table cell.",
    "usage": "<noora-table-cell column=\"project\">Tuist</noora-table-cell>",
    "standalone": false,
    "attributes": [
      {
        "name": "column",
        "property": "column",
        "type": "string",
        "default": "",
        "description": "Associates the cell with a table column."
      },
      {
        "name": "value",
        "property": "value",
        "type": "string",
        "description": "Sets the cell value instead of using text content."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "The cell value."
      }
    ],
    "cssParts": [],
    "notes": [],
    "examples": [
      {
        "id": "cell",
        "title": "Cell",
        "description": "Describe one table value.",
        "markup": "<noora-table-cell column=\"project\">Tuist</noora-table-cell>"
      }
    ],
    "events": []
  },
  {
    "name": "TableColumn",
    "tagName": "noora-table-column",
    "elementClassName": "NooraTableColumn",
    "className": "noora-table-column",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Describes one declarative table column.",
    "usage": "<noora-table-column name=\"project\">Project</noora-table-column>",
    "standalone": false,
    "attributes": [
      {
        "name": "name",
        "property": "name",
        "type": "string",
        "default": "",
        "description": "Sets the column key."
      },
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the heading instead of using text content."
      },
      {
        "name": "icon",
        "property": "icon",
        "type": "string",
        "description": "Shows an icon in the heading."
      },
      {
        "name": "sort-order",
        "property": "sortOrder",
        "type": "string",
        "values": [
          "asc",
          "desc"
        ],
        "description": "Shows the current sort direction."
      },
      {
        "name": "format",
        "property": "format",
        "type": "string",
        "values": [
          "date",
          "number"
        ],
        "description": "Formats property-driven cell values."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "The column heading."
      }
    ],
    "cssParts": [],
    "notes": [],
    "examples": [
      {
        "id": "column",
        "title": "Column",
        "description": "Describe one table column.",
        "markup": "<noora-table-column name=\"project\">Project</noora-table-column>"
      }
    ],
    "events": []
  },
  {
    "name": "TableRow",
    "tagName": "noora-table-row",
    "elementClassName": "NooraTableRow",
    "className": "noora-table-row",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Describes one declarative table row.",
    "usage": "<noora-table-row row-key=\"tuist\"><noora-table-cell column=\"project\">Tuist</noora-table-cell></noora-table-row>",
    "standalone": false,
    "attributes": [
      {
        "name": "row-key",
        "property": "rowKey",
        "type": "string",
        "description": "Sets the row identifier."
      }
    ],
    "properties": [],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "The noora-table-cell children."
      }
    ],
    "cssParts": [],
    "notes": [],
    "examples": [
      {
        "id": "row",
        "title": "Row",
        "description": "Describe one table row.",
        "markup": "<noora-table-row row-key=\"tuist\"><noora-table-cell column=\"project\">Tuist</noora-table-cell></noora-table-row>"
      }
    ],
    "events": []
  },
  {
    "name": "Table",
    "tagName": "noora-table",
    "elementClassName": "NooraTable",
    "className": "noora-table",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Displays structured rows and columns with optional sorting and expansion.",
    "usage": "<noora-table>\n  <noora-table-column name=\"name\">Name</noora-table-column>\n  <noora-table-row row-key=\"tuist\">\n    <noora-table-cell column=\"name\">Tuist</noora-table-cell>\n  </noora-table-row>\n</noora-table>",
    "attributes": [
      {
        "name": "row-key",
        "property": "rowKey",
        "type": "string",
        "default": "id",
        "description": "Selects the property used as each row key."
      },
      {
        "name": "empty-title",
        "property": "emptyTitle",
        "type": "string",
        "default": "No results",
        "description": "Sets the empty-state title."
      },
      {
        "name": "selectable",
        "property": "selectable",
        "type": "boolean",
        "default": false,
        "description": "Makes rows selectable."
      }
    ],
    "properties": [
      {
        "name": "columns",
        "type": "json",
        "typescriptType": "Array<Record<string, unknown>>",
        "default": [],
        "description": "Defines columns programmatically when declarative noora-table-column children are not used."
      },
      {
        "name": "rows",
        "type": "json",
        "typescriptType": "Record<string, unknown>[]",
        "default": [],
        "description": "Defines rows programmatically when declarative noora-table-row children are not used."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "",
        "description": "Declarative noora-table-column and noora-table-row children."
      },
      {
        "name": "empty",
        "description": "A custom empty state."
      }
    ],
    "cssParts": [
      {
        "name": "table",
        "description": "The native table."
      },
      {
        "name": "row",
        "description": "Each body row."
      },
      {
        "name": "cell",
        "description": "Each body cell."
      }
    ],
    "events": [
      {
        "name": "noora-row-select",
        "type": "CustomEvent<{ index: number; row: Record<string, unknown> }>",
        "description": "Emitted when a selectable row is activated."
      }
    ],
    "notes": [
      "Row activation emits a `noora-row-select` event."
    ],
    "examples": [
      {
        "id": "cell-types",
        "title": "Cell types",
        "description": "Render text, descriptions, tags, badges, status, actions, and time values as structured columns.",
        "markup": "<noora-table>\n  <noora-table-column name=\"label\">Text</noora-table-column>\n  <noora-table-column name=\"description\">Description</noora-table-column>\n  <noora-table-column name=\"tag\">Tag</noora-table-column>\n  <noora-table-column name=\"status\">Status</noora-table-column>\n  <noora-table-column name=\"createdAt\" format=\"date\">Created at</noora-table-column>\n  <noora-table-row row-key=\"1\">\n    <noora-table-cell column=\"label\">Row One</noora-table-cell>\n    <noora-table-cell column=\"description\">An internal identifier</noora-table-cell>\n    <noora-table-cell column=\"tag\">Category</noora-table-cell>\n    <noora-table-cell column=\"status\">Success</noora-table-cell>\n    <noora-table-cell column=\"createdAt\">2023-01-01T12:00:00Z</noora-table-cell>\n  </noora-table-row>\n  <noora-table-row row-key=\"2\">\n    <noora-table-cell column=\"label\">Row Two</noora-table-cell>\n    <noora-table-cell column=\"description\">Another identifier</noora-table-cell>\n    <noora-table-cell column=\"tag\">User</noora-table-cell>\n    <noora-table-cell column=\"status\">Running</noora-table-cell>\n    <noora-table-cell column=\"createdAt\">2023-01-02T12:00:00Z</noora-table-cell>\n  </noora-table-row>\n</noora-table>"
      },
      {
        "id": "example",
        "title": "Command example",
        "description": "Combine common build and test information.",
        "markup": "<noora-table>\n  <noora-table-column name=\"command\">Command</noora-table-column>\n  <noora-table-column name=\"status\">Status</noora-table-column>\n  <noora-table-column name=\"ranBy\">Ran by</noora-table-column>\n  <noora-table-column name=\"duration\" icon=\"square_rounded_arrow_down\">Duration</noora-table-column>\n  <noora-table-column name=\"createdAt\">Created at</noora-table-column>\n  <noora-table-row row-key=\"test\">\n    <noora-table-cell column=\"command\">test TuistKitAcceptanceTests</noora-table-cell>\n    <noora-table-cell column=\"status\">Success</noora-table-cell>\n    <noora-table-cell column=\"ranBy\">Continuous integration</noora-table-cell>\n    <noora-table-cell column=\"duration\">5 seconds</noora-table-cell>\n    <noora-table-cell column=\"createdAt\">2 hours ago</noora-table-cell>\n  </noora-table-row>\n</noora-table>"
      },
      {
        "id": "sorting",
        "title": "Sortable columns",
        "description": "Show ascending and descending sort direction indicators.",
        "markup": "<noora-table>\n  <noora-table-column name=\"name\">Name</noora-table-column>\n  <noora-table-column name=\"duration\" sort-order=\"desc\">Duration (desc)</noora-table-column>\n  <noora-table-column name=\"createdAt\" sort-order=\"asc\">Created at (asc)</noora-table-column>\n  <noora-table-row row-key=\"1\">\n    <noora-table-cell column=\"name\">Row One</noora-table-cell>\n    <noora-table-cell column=\"duration\">5s</noora-table-cell>\n    <noora-table-cell column=\"createdAt\">2 hours ago</noora-table-cell>\n  </noora-table-row>\n  <noora-table-row row-key=\"2\">\n    <noora-table-cell column=\"name\">Row Two</noora-table-cell>\n    <noora-table-cell column=\"duration\">12s</noora-table-cell>\n    <noora-table-cell column=\"createdAt\">2 hours ago</noora-table-cell>\n  </noora-table-row>\n</noora-table>"
      },
      {
        "id": "selectable-rows",
        "title": "Selectable rows",
        "description": "Allow rows to emit selection events for detail or expansion workflows.",
        "markup": "<noora-table selectable>\n  <noora-table-column name=\"task\">Task</noora-table-column>\n  <noora-table-column name=\"hit\">Hit</noora-table-column>\n  <noora-table-column name=\"type\">Type</noora-table-column>\n  <noora-table-row row-key=\"task-1\">\n    <noora-table-cell column=\"task\">GeneratedAssetSymbols.swift</noora-table-cell>\n    <noora-table-cell column=\"hit\">Remote</noora-table-cell>\n    <noora-table-cell column=\"type\">Clang</noora-table-cell>\n  </noora-table-row>\n  <noora-table-row row-key=\"task-2\">\n    <noora-table-cell column=\"task\">CompileSwiftSources.swift</noora-table-cell>\n    <noora-table-cell column=\"hit\">Local</noora-table-cell>\n    <noora-table-cell column=\"type\">Swift</noora-table-cell>\n  </noora-table-row>\n  <noora-table-row row-key=\"task-3\">\n    <noora-table-cell column=\"task\">LinkBinary</noora-table-cell>\n    <noora-table-cell column=\"hit\">Missed</noora-table-cell>\n    <noora-table-cell column=\"type\">Clang</noora-table-cell>\n  </noora-table-row>\n</noora-table>"
      }
    ]
  },
  {
    "name": "Tag",
    "tagName": "noora-tag",
    "elementClassName": "NooraTag",
    "className": "noora-tag",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Displays a compact label with optional icon and dismissal.",
    "usage": "<noora-tag label=\"Active\"></noora-tag>",
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "default": "",
        "description": "Sets the visible label."
      },
      {
        "name": "dismissible",
        "property": "dismissible",
        "type": "boolean",
        "default": false,
        "description": "Shows a dismiss control."
      },
      {
        "name": "dismiss-value",
        "property": "dismissValue",
        "type": "string",
        "description": "Adds a value to the dismiss event."
      },
      {
        "name": "icon",
        "property": "icon",
        "type": "string",
        "description": "Sets a Noora icon before the label."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Disables dismissal."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "icon",
        "description": "A custom icon that takes precedence over the icon attribute."
      }
    ],
    "cssParts": [
      {
        "name": "tag",
        "description": "The tag container."
      },
      {
        "name": "label",
        "description": "The label."
      },
      {
        "name": "dismiss",
        "description": "The dismiss control."
      }
    ],
    "events": [
      {
        "name": "noora-dismiss",
        "type": "CustomEvent<{ value: string | undefined }>",
        "description": "Emitted when the tag dismiss control is activated."
      }
    ],
    "notes": [
      "Dismissal emits a `noora-dismiss` event."
    ],
    "examples": [
      {
        "id": "basic",
        "title": "Basic tags",
        "description": "Render plain tags and tags with different icons.",
        "markup": "<noora-tag label=\"Simple Tag\"></noora-tag>\n<noora-tag label=\"Category\" icon=\"category\"></noora-tag>\n<noora-tag label=\"User\" icon=\"user\"></noora-tag>"
      },
      {
        "id": "dismissible",
        "title": "Dismissible states",
        "description": "Allow removal when a tag represents editable input.",
        "markup": "<noora-tag label=\"Dismissible Tag\" icon=\"category\" dismissible></noora-tag>\n<noora-tag label=\"Fixed Tag\" icon=\"category\"></noora-tag>\n<noora-tag label=\"Remove Me\" dismissible></noora-tag>"
      },
      {
        "id": "disabled",
        "title": "Disabled states",
        "description": "Disable plain, icon, and dismissible tags.",
        "markup": "<noora-tag label=\"Disabled Tag\" disabled></noora-tag>\n<noora-tag label=\"Disabled\" icon=\"category\" disabled></noora-tag>\n<noora-tag label=\"Disabled Dismissible\" icon=\"category\" dismissible disabled></noora-tag>"
      },
      {
        "id": "content",
        "title": "Content variations",
        "description": "Support short, long, version, and status labels.",
        "markup": "<noora-tag label=\"New\" dismissible></noora-tag>\n<noora-tag label=\"Very Long Tag Label That Might Wrap\" icon=\"category\" dismissible></noora-tag>\n<noora-tag label=\"v2.1.0\" icon=\"git_branch\"></noora-tag>\n<noora-tag label=\"In Progress\" icon=\"progress_x\" dismissible></noora-tag>"
      }
    ],
    "properties": []
  },
  {
    "name": "TextArea",
    "tagName": "noora-text-area",
    "elementClassName": "NooraTextArea",
    "className": "noora-text-area",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Collects multi-line text with labels, hints, errors, and character counting.",
    "usage": "<noora-text-area label=\"Description\" name=\"description\"></noora-text-area>",
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "description": "Sets the field label."
      },
      {
        "name": "sublabel",
        "property": "sublabel",
        "type": "string",
        "description": "Sets secondary label text."
      },
      {
        "name": "hint",
        "property": "hint",
        "type": "string",
        "description": "Sets supporting text."
      },
      {
        "name": "hint-variant",
        "property": "hintVariant",
        "type": "string",
        "values": [
          "default",
          "destructive",
          "disabled"
        ],
        "default": "default",
        "description": "Controls hint semantics."
      },
      {
        "name": "error",
        "property": "error",
        "type": "string",
        "description": "Sets the validation error."
      },
      {
        "name": "name",
        "property": "name",
        "type": "string",
        "default": "",
        "description": "Sets the submitted field name."
      },
      {
        "name": "value",
        "property": "value",
        "type": "string",
        "default": "",
        "description": "Gets or sets the field value."
      },
      {
        "name": "placeholder",
        "property": "placeholder",
        "type": "string",
        "description": "Sets placeholder text."
      },
      {
        "name": "required",
        "property": "required",
        "type": "boolean",
        "default": false,
        "description": "Marks the field as required."
      },
      {
        "name": "show-required",
        "property": "showRequired",
        "type": "boolean",
        "default": false,
        "description": "Shows the required indicator."
      },
      {
        "name": "rows",
        "property": "rows",
        "type": "number",
        "default": 4,
        "description": "Sets the visible row count."
      },
      {
        "name": "max-length",
        "property": "maxLength",
        "type": "number",
        "default": 200,
        "description": "Sets the maximum character count."
      },
      {
        "name": "show-character-count",
        "property": "showCharacterCount",
        "type": "boolean",
        "default": true,
        "description": "Shows the current character count."
      },
      {
        "name": "resize",
        "property": "resize",
        "type": "string",
        "values": [
          "none",
          "both",
          "horizontal",
          "vertical"
        ],
        "default": "vertical",
        "description": "Controls native resizing."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Disables the field."
      }
    ],
    "readonlyProperties": [
      {
        "name": "control",
        "type": "HTMLTextAreaElement | null",
        "description": "The native text area."
      },
      {
        "name": "form",
        "type": "HTMLFormElement | null",
        "description": "The associated form."
      }
    ],
    "slots": [],
    "cssParts": [
      {
        "name": "textarea",
        "description": "The native text area."
      },
      {
        "name": "character-count",
        "description": "The character counter."
      }
    ],
    "events": [
      {
        "name": "input",
        "type": "InputEvent",
        "description": "Emitted while the text value changes."
      },
      {
        "name": "change",
        "type": "Event",
        "description": "Emitted after the text value is committed."
      }
    ],
    "notes": [
      "The component emits standard input and change events."
    ],
    "examples": [
      {
        "id": "basic",
        "title": "Basic",
        "description": "Collect longer supporting text.",
        "markup": "<noora-text-area name=\"basic\" placeholder=\"Enter your message...\" max-length=\"200\"></noora-text-area>"
      },
      {
        "id": "required",
        "title": "Required",
        "description": "Mark required fields visibly and semantically.",
        "markup": "<noora-text-area name=\"required\" label=\"Message\" placeholder=\"This field is required\" required show-required></noora-text-area>"
      },
      {
        "id": "hint",
        "title": "With hint",
        "description": "Give supporting guidance below the field.",
        "markup": "<noora-text-area name=\"feedback\" label=\"Feedback\" placeholder=\"Share your feedback...\" hint=\"Please be as detailed as possible\"></noora-text-area>"
      },
      {
        "id": "error",
        "title": "Error",
        "description": "Communicate validation failures.",
        "markup": "<noora-text-area name=\"error\" label=\"Message\" placeholder=\"Enter your message...\" error=\"This field is required\"></noora-text-area>"
      },
      {
        "id": "disabled",
        "title": "Disabled",
        "description": "Prevent editing while preserving context.",
        "markup": "<noora-text-area name=\"disabled\" label=\"Disabled\" placeholder=\"Enter your message...\" disabled></noora-text-area>"
      }
    ],
    "properties": []
  },
  {
    "name": "TextDivider",
    "tagName": "noora-text-divider",
    "elementClassName": "NooraTextDivider",
    "className": "noora-text-divider",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Renders a compact textual section divider.",
    "usage": "<noora-text-divider text=\"OR\"></noora-text-divider>",
    "attributes": [
      {
        "name": "text",
        "property": "text",
        "type": "string",
        "default": "",
        "description": "Sets the divider text."
      }
    ],
    "readonlyProperties": [],
    "slots": [],
    "cssParts": [
      {
        "name": "divider",
        "description": "The text divider."
      }
    ],
    "notes": [],
    "examples": [
      {
        "id": "basic",
        "title": "Basic dividers",
        "description": "Separate alternatives, combined conditions, or sections.",
        "markup": "<noora-text-divider text=\"OR\"></noora-text-divider>\n<noora-text-divider text=\"AND\"></noora-text-divider>\n<noora-text-divider text=\"Section 2\"></noora-text-divider>"
      },
      {
        "id": "content",
        "title": "Content types",
        "description": "Use symbols, numbers, longer labels, or dates.",
        "markup": "<noora-text-divider text=\"•\"></noora-text-divider>\n<noora-text-divider text=\"1\"></noora-text-divider>\n<noora-text-divider text=\"Alternative Options\"></noora-text-divider>\n<noora-text-divider text=\"January 2024\"></noora-text-divider>"
      }
    ],
    "properties": [],
    "events": []
  },
  {
    "name": "TextInput",
    "tagName": "noora-text-input",
    "elementClassName": "NooraTextInput",
    "className": "noora-text-input",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Collects single-line text with Noora labels, hints, prefixes, and suffixes.",
    "usage": "<noora-text-input label=\"Email\" type=\"email\" name=\"email\"></noora-text-input>",
    "attributes": [
      {
        "name": "type",
        "property": "type",
        "type": "string",
        "values": [
          "basic",
          "email",
          "card_number",
          "search",
          "password"
        ],
        "default": "basic",
        "description": "Controls the semantic field presentation."
      },
      {
        "name": "input-type",
        "property": "inputType",
        "type": "string",
        "default": "text",
        "description": "Sets the native input type for basic fields."
      },
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "description": "Sets the field label."
      },
      {
        "name": "sublabel",
        "property": "sublabel",
        "type": "string",
        "description": "Sets secondary label text."
      },
      {
        "name": "hint",
        "property": "hint",
        "type": "string",
        "description": "Sets supporting text."
      },
      {
        "name": "hint-variant",
        "property": "hintVariant",
        "type": "string",
        "values": [
          "default",
          "destructive",
          "disabled"
        ],
        "default": "default",
        "description": "Controls hint semantics."
      },
      {
        "name": "error",
        "property": "error",
        "type": "string",
        "description": "Sets the validation error."
      },
      {
        "name": "name",
        "property": "name",
        "type": "string",
        "default": "",
        "description": "Sets the submitted field name."
      },
      {
        "name": "value",
        "property": "value",
        "type": "string",
        "default": "",
        "description": "Gets or sets the field value."
      },
      {
        "name": "placeholder",
        "property": "placeholder",
        "type": "string",
        "description": "Sets placeholder text."
      },
      {
        "name": "required",
        "property": "required",
        "type": "boolean",
        "default": false,
        "description": "Marks the field as required."
      },
      {
        "name": "show-required",
        "property": "showRequired",
        "type": "boolean",
        "default": false,
        "description": "Shows the required indicator."
      },
      {
        "name": "min",
        "property": "min",
        "type": "string",
        "description": "Sets the native minimum value."
      },
      {
        "name": "max",
        "property": "max",
        "type": "string",
        "description": "Sets the native maximum value."
      },
      {
        "name": "step",
        "property": "step",
        "type": "string",
        "description": "Sets the native step value."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Disables the field."
      }
    ],
    "readonlyProperties": [
      {
        "name": "control",
        "type": "HTMLInputElement | null",
        "description": "The native input."
      },
      {
        "name": "form",
        "type": "HTMLFormElement | null",
        "description": "The associated form."
      }
    ],
    "slots": [
      {
        "name": "prefix",
        "description": "A custom prefix for basic fields."
      },
      {
        "name": "suffix",
        "description": "A custom suffix."
      }
    ],
    "cssParts": [
      {
        "name": "input",
        "description": "The native input."
      },
      {
        "name": "wrapper",
        "description": "The input wrapper."
      }
    ],
    "events": [
      {
        "name": "input",
        "type": "InputEvent",
        "description": "Emitted while the input value changes."
      },
      {
        "name": "change",
        "type": "Event",
        "description": "Emitted after the input value is committed."
      }
    ],
    "notes": [
      "The component emits standard input and change events."
    ],
    "examples": [
      {
        "id": "types",
        "title": "Input types",
        "description": "Use basic, email, card-number, search, and password presentations.",
        "markup": "<noora-text-input name=\"basic\" placeholder=\"Placeholder text...\"><noora-icon slot=\"prefix\" name=\"user\"></noora-icon></noora-text-input>\n<noora-text-input type=\"email\" name=\"email\" placeholder=\"hello@tuist.dev\"></noora-text-input>\n<noora-text-input type=\"card_number\" name=\"card\" placeholder=\"0000 0000 0000 0000\"></noora-text-input>\n<noora-text-input type=\"search\" name=\"search\" placeholder=\"Search...\"></noora-text-input>\n<noora-text-input type=\"password\" name=\"password\"></noora-text-input>"
      },
      {
        "id": "hint",
        "title": "With hint",
        "description": "Give supporting guidance below the input.",
        "markup": "<noora-text-input name=\"username\" placeholder=\"Username\" hint=\"Use letters, numbers, and underscores\"></noora-text-input>"
      },
      {
        "id": "error",
        "title": "Error",
        "description": "Communicate validation failures.",
        "markup": "<noora-text-input name=\"email\" placeholder=\"hello@tuist.dev\" error=\"Enter a valid email address\"></noora-text-input>"
      },
      {
        "id": "custom-suffix",
        "title": "Custom suffix",
        "description": "Provide a custom element after the native input.",
        "markup": "<noora-text-input name=\"assignee\" placeholder=\"Assignee\"><noora-icon slot=\"suffix\" name=\"user\"></noora-icon></noora-text-input>"
      },
      {
        "id": "labels",
        "title": "Labels",
        "description": "Show required and secondary label content.",
        "markup": "<noora-text-input type=\"email\" name=\"email\" label=\"Email\" required show-required></noora-text-input>\n<noora-text-input type=\"password\" name=\"password\" label=\"Password\" sublabel=\"Be safe!\"></noora-text-input>"
      },
      {
        "id": "disabled",
        "title": "Disabled",
        "description": "Compare empty and filled disabled fields.",
        "markup": "<noora-text-input type=\"email\" name=\"empty-email\" label=\"Email\" placeholder=\"hello@tuist.dev\" hint=\"Use a tuist.dev address\" disabled></noora-text-input>\n<noora-text-input type=\"email\" name=\"filled-email\" value=\"hello@tuist.dev\" hint=\"Use a tuist.dev address\" disabled></noora-text-input>"
      }
    ],
    "properties": []
  },
  {
    "name": "Time",
    "tagName": "noora-time",
    "elementClassName": "NooraTime",
    "className": "noora-time",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Formats an absolute or relative date and time.",
    "usage": "<noora-time datetime=\"2026-07-27T09:00:00Z\"></noora-time>",
    "attributes": [
      {
        "name": "datetime",
        "property": "datetime",
        "type": "string",
        "description": "Sets an international date and time string."
      },
      {
        "name": "show-time",
        "property": "showTime",
        "type": "boolean",
        "default": false,
        "description": "Includes the localized time."
      },
      {
        "name": "relative",
        "property": "relative",
        "type": "boolean",
        "default": false,
        "description": "Shows a relative time label."
      }
    ],
    "readonlyProperties": [],
    "slots": [],
    "cssParts": [
      {
        "name": "time",
        "description": "The native time element."
      }
    ],
    "notes": [],
    "examples": [
      {
        "id": "formats",
        "title": "Display formats",
        "description": "Show a date, a date with time, or a relative label.",
        "markup": "<noora-time datetime=\"2023-01-01T12:00:00Z\"></noora-time>\n<noora-time datetime=\"2023-01-01T12:00:00Z\" show-time></noora-time>\n<noora-time datetime=\"2023-01-01T12:00:00Z\" relative></noora-time>"
      },
      {
        "id": "times-of-day",
        "title": "Different times",
        "description": "Format morning, evening, midnight, and noon values.",
        "markup": "<noora-time datetime=\"2023-06-15T08:30:00Z\" show-time></noora-time>\n<noora-time datetime=\"2023-06-15T19:45:00Z\" show-time></noora-time>\n<noora-time datetime=\"2023-06-15T00:00:00Z\" show-time></noora-time>\n<noora-time datetime=\"2023-06-15T12:00:00Z\" show-time></noora-time>"
      },
      {
        "id": "relative",
        "title": "Relative times",
        "description": "Show relative labels with absolute tooltips.",
        "markup": "<noora-time datetime=\"2023-01-01T11:58:00Z\" relative></noora-time>\n<noora-time datetime=\"2022-12-31T12:00:00Z\" relative></noora-time>\n<noora-time datetime=\"2022-12-25T12:00:00Z\" relative></noora-time>\n<noora-time datetime=\"2022-01-01T12:00:00Z\" relative></noora-time>"
      },
      {
        "id": "special-dates",
        "title": "Special dates",
        "description": "Handle new year, leap day, and distant-future dates.",
        "markup": "<noora-time datetime=\"2024-01-01T00:00:00Z\" show-time></noora-time>\n<noora-time datetime=\"2024-02-29T12:00:00Z\"></noora-time>\n<noora-time datetime=\"2030-12-31T23:59:59Z\" show-time></noora-time>"
      }
    ],
    "properties": [],
    "events": []
  },
  {
    "name": "Toggle",
    "tagName": "noora-toggle",
    "elementClassName": "NooraToggle",
    "className": "noora-toggle",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Turns a setting on or off.",
    "usage": "<noora-toggle label=\"Notifications\" name=\"notifications\"></noora-toggle>",
    "attributes": [
      {
        "name": "label",
        "property": "label",
        "type": "string",
        "description": "Sets the visible label."
      },
      {
        "name": "description",
        "property": "description",
        "type": "string",
        "description": "Sets supporting text."
      },
      {
        "name": "checked",
        "property": "checked",
        "type": "boolean",
        "default": false,
        "reflect": true,
        "description": "Controls the checked state."
      },
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "reflect": true,
        "description": "Disables interaction."
      },
      {
        "name": "name",
        "property": "name",
        "type": "string",
        "default": "",
        "description": "Sets the submitted field name."
      },
      {
        "name": "value",
        "property": "value",
        "type": "string",
        "default": "on",
        "description": "Sets the submitted field value."
      }
    ],
    "readonlyProperties": [
      {
        "name": "control",
        "type": "HTMLInputElement | null",
        "description": "The native checkbox input."
      },
      {
        "name": "form",
        "type": "HTMLFormElement | null",
        "description": "The associated form."
      }
    ],
    "slots": [],
    "cssParts": [
      {
        "name": "root",
        "description": "The toggle label."
      },
      {
        "name": "control",
        "description": "The visual switch."
      },
      {
        "name": "label",
        "description": "The label text."
      }
    ],
    "events": [
      {
        "name": "input",
        "type": "InputEvent",
        "description": "Emitted while the checked state changes."
      },
      {
        "name": "change",
        "type": "Event",
        "description": "Emitted after the checked state changes."
      }
    ],
    "notes": [
      "The component emits standard input and change events."
    ],
    "examples": [
      {
        "id": "states",
        "title": "Basic states",
        "description": "Compare off and on settings.",
        "markup": "<noora-toggle label=\"Enable notifications\"></noora-toggle>\n<noora-toggle label=\"Email alerts\" checked></noora-toggle>"
      },
      {
        "id": "disabled",
        "title": "Disabled states",
        "description": "Show disabled settings in both states.",
        "markup": "<noora-toggle label=\"Disabled off\" disabled></noora-toggle>\n<noora-toggle label=\"Disabled on\" checked disabled></noora-toggle>"
      },
      {
        "id": "description",
        "title": "With description",
        "description": "Explain the setting below its label.",
        "markup": "<noora-toggle label=\"Marketing emails\" description=\"Receive updates about new features and promotions\"></noora-toggle>"
      }
    ],
    "properties": []
  },
  {
    "name": "Tooltip",
    "tagName": "noora-tooltip",
    "elementClassName": "NooraTooltip",
    "className": "noora-tooltip",
    "modulePath": "./priv/static/noora-web-components.js",
    "description": "Explains an element on pointer hover or keyboard focus.",
    "usage": "<noora-tooltip title=\"Copy\"><button slot=\"trigger\">Copy</button></noora-tooltip>",
    "attributes": [
      {
        "name": "disabled",
        "property": "disabled",
        "type": "boolean",
        "default": false,
        "description": "Disables the tooltip."
      },
      {
        "name": "size",
        "property": "size",
        "type": "string",
        "values": [
          "small",
          "large"
        ],
        "default": "small",
        "description": "Controls the content layout."
      },
      {
        "name": "title",
        "property": "title",
        "type": "string",
        "default": "",
        "description": "Sets the tooltip title."
      },
      {
        "name": "description",
        "property": "description",
        "type": "string",
        "description": "Sets the large-tooltip description."
      },
      {
        "name": "open",
        "property": "open",
        "type": "boolean",
        "default": false,
        "reflect": true,
        "description": "Controls whether the tooltip is open."
      }
    ],
    "readonlyProperties": [],
    "slots": [
      {
        "name": "trigger",
        "description": "The described element."
      },
      {
        "name": "icon",
        "description": "An icon shown by large tooltips."
      }
    ],
    "cssParts": [
      {
        "name": "trigger",
        "description": "The trigger wrapper."
      },
      {
        "name": "content",
        "description": "The tooltip content."
      }
    ],
    "events": [
      {
        "name": "noora-open-change",
        "type": "CustomEvent<{ open: boolean }>",
        "description": "Emitted when the tooltip opens or closes."
      }
    ],
    "notes": [],
    "examples": [
      {
        "id": "default",
        "title": "Default",
        "description": "Explain an icon or compact action.",
        "markup": "<noora-tooltip title=\"Tooltip\"><noora-icon slot=\"trigger\" name=\"alert_circle\" label=\"More information\"></noora-icon></noora-tooltip>"
      },
      {
        "id": "large",
        "title": "Large",
        "description": "Add an icon and supporting description.",
        "markup": "<noora-tooltip size=\"large\" title=\"Tooltip\" description=\"Insert tooltip description here. Three lines of text would look better.\"><noora-icon slot=\"trigger\" name=\"alert_circle\" label=\"More information\"></noora-icon><noora-icon slot=\"icon\" name=\"category\"></noora-icon></noora-tooltip>"
      }
    ],
    "properties": []
  }
]
