{
  "ds-app": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-app",
    "description": "Application container component",
    "docUrl": "https://design.soracom.io/design-system/containers/app/",
    "category": "containers",
    "htmlElements": [
      "div",
      "main"
    ],
    "isWebComponent": false,
    "modifiers": {},
    "structure": {
      "parts": {
        "header": {
          "element": "header",
          "selector": "[class*=\"__header\"]",
          "required": true
        },
        "breadcrumb": {
          "element": "nav",
          "alternativeElements": [
            "div"
          ],
          "selector": "[class*=\"__breadcrumb\"]",
          "optional": true
        },
        "notice": {
          "element": "div",
          "selector": "[class*=\"__notice\"]",
          "optional": true
        },
        "main": {
          "element": "article",
          "alternativeElements": [
            "main",
            "div"
          ],
          "selector": "[class*=\"__main\"]",
          "required": true
        },
        "mainContent": {
          "element": "main",
          "alternativeElements": [
            "section",
            "div"
          ],
          "selector": "[class*=\"__main-content\"]",
          "required": true
        },
        "sidebar": {
          "element": "aside",
          "alternativeElements": [
            "iframe",
            "div"
          ],
          "selector": "[class*=\"__sidebar\"]",
          "optional": true
        },
        "footer": {
          "element": "footer",
          "alternativeElements": [
            "div"
          ],
          "selector": "[class*=\"__footer\"]",
          "optional": true
        }
      }
    },
    "attributes": {},
    "dataAttributes": [
      {
        "name": "data-app-state",
        "description": "Space-separated UI state tokens set on body to coordinate modal, sidebar, and AI-button layout.",
        "valueType": "space-separated tokens",
        "values": [
          "modal",
          "modal-right",
          "sidebar"
        ]
      },
      {
        "name": "data-app-page",
        "description": "Current product-page identifier set on body for page-specific application layout adjustments.",
        "valueType": "token",
        "values": [
          "app-harvest-data-intelligence",
          "app-feature-sim-details-page"
        ]
      },
      {
        "name": "data-app-layout",
        "description": "Application layout identifier set on body to activate a supported app-main grid composition.",
        "valueType": "token",
        "values": [
          "vertical-tabs",
          "scrolling-sidebar-with-details",
          "header-two-columns"
        ]
      },
      {
        "name": "data-ds-message",
        "description": "Message text set on the mainContent part to replace its child content with the SDS message state.",
        "valueType": "string"
      }
    ]
  },
  "ds-autocomplete": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-autocomplete",
    "description": "Autocomplete input field with suggestions",
    "docUrl": "https://design.soracom.io/design-system/elements/autocomplete/",
    "category": "elements",
    "htmlElements": [
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "layout": {
        "support": "custom",
        "values": [
          "--inline",
          "--top",
          "--bottom",
          "--viewport"
        ]
      },
      "state": {
        "support": "subset",
        "values": [
          "--loading"
        ]
      }
    },
    "structure": {
      "parts": {
        "inputComponent": {
          "element": "input",
          "alternativeElements": [
            "div"
          ],
          "selector": ".ds-input",
          "required": true,
          "position": [
            "first"
          ]
        },
        "control": {
          "element": "input",
          "selector": "input",
          "required": true
        },
        "toggle": {
          "element": "button",
          "selector": ".ds-button",
          "optional": true,
          "position": [
            "after inputComponent"
          ]
        },
        "options": {
          "element": "ul",
          "alternativeElements": [
            "div"
          ],
          "selector": ".__list, [role=\"listbox\"], [role=\"grid\"]",
          "required": true,
          "position": [
            "last"
          ]
        }
      },
      "patterns": {
        "listbox": "<div class=\"ds-autocomplete\"><div class=\"ds-input\" role=\"combobox\" aria-expanded=\"false\" aria-controls=\"options\" aria-autocomplete=\"list\"><input type=\"text\" autocomplete=\"off\"></div><ul class=\"__list\" id=\"options\" role=\"listbox\"><li role=\"option\">{option}</li></ul></div>",
        "with-toggle": "<div class=\"ds-autocomplete\"><div class=\"ds-input\" role=\"combobox\" aria-expanded=\"false\" aria-controls=\"options\" aria-autocomplete=\"list\"><input type=\"text\" autocomplete=\"off\"></div><button class=\"ds-button --plain --addon --icon-ui-arrow-down\" type=\"button\"><span>Show options</span></button><ul class=\"__list\" id=\"options\" role=\"listbox\"><li role=\"option\">{option}</li></ul></div>"
      }
    },
    "attributes": {
      "type": {
        "description": "Native input type for the autocomplete text control.",
        "values": [
          "text",
          "search"
        ],
        "default": "text",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "name": {
        "description": "Form field name submitted with the selected or entered value.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "value": {
        "description": "Initial value for the autocomplete control.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "placeholder": {
        "description": "Placeholder text shown when the autocomplete control is empty.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "autocomplete": {
        "description": "Browser autocomplete hint for the text control. Use off when SDS suggestions provide the values.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "disabled": {
        "description": "Disables the autocomplete text control.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "readonly": {
        "description": "Makes the autocomplete text control read-only.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "required": {
        "description": "Marks the autocomplete text control as required for native form validation.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      }
    },
    "dataAttributes": [
      {
        "name": "data-ds-message",
        "description": "Displays status or empty-state message text on the autocomplete options list.",
        "valueType": "string"
      }
    ],
    "examples": [
      {
        "name": "basic",
        "html": "<div class=\"ds-autocomplete\"><div class=\"ds-input\" role=\"combobox\" aria-expanded=\"false\" aria-controls=\"ac-list\" aria-autocomplete=\"list\"><input type=\"text\" placeholder=\"Search...\" autocomplete=\"off\"></div><button class=\"ds-button --plain --addon --icon-ui-arrow-down\"></button><ul class=\"__list\" id=\"ac-list\" role=\"listbox\"><li role=\"option\">Option 1</li><li role=\"option\">Option 2</li><li role=\"option\">Option 3</li></ul></div>"
      },
      {
        "name": "with-filter",
        "html": "<div class=\"ds-autocomplete\"><div class=\"ds-input\" role=\"combobox\" aria-expanded=\"true\" aria-controls=\"ac-filter-list\" aria-autocomplete=\"list\"><input type=\"text\" placeholder=\"Filter items...\" autocomplete=\"off\"></div><ul class=\"__list\" id=\"ac-filter-list\" role=\"listbox\"><li role=\"option\">Apple</li><li role=\"option\">Banana</li><li role=\"option\">Cherry</li></ul></div>"
      },
      {
        "name": "inline",
        "html": "<div class=\"ds-autocomplete --inline\"><div class=\"ds-input\" role=\"combobox\" aria-expanded=\"true\" aria-controls=\"ac-inline-list\" aria-autocomplete=\"list\"><input type=\"text\" placeholder=\"Search...\" autocomplete=\"off\"></div><ul class=\"__list\" id=\"ac-inline-list\" role=\"listbox\"><li role=\"option\">Option 1</li><li role=\"option\">Option 2</li></ul></div>"
      },
      {
        "name": "withLabel",
        "html": "<label class=\"ds-field\"><div class=\"ds-text --label\">Select Item</div><div class=\"ds-autocomplete\"><div class=\"ds-input\" role=\"combobox\" aria-expanded=\"false\" aria-controls=\"ac-field-list\" aria-autocomplete=\"list\"><input type=\"text\" placeholder=\"Search...\" autocomplete=\"off\"></div><ul class=\"__list\" id=\"ac-field-list\" role=\"listbox\"><li role=\"option\">Option 1</li><li role=\"option\">Option 2</li></ul></div></label>"
      }
    ]
  },
  "ds-banner": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-banner",
    "description": "Banner for important messages",
    "docUrl": "https://design.soracom.io/design-system/elements/banner/",
    "category": "elements",
    "htmlElements": [
      "header",
      "a",
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "color": {
        "support": "all"
      },
      "gradient": {
        "support": "all"
      },
      "visual-state": {
        "support": "all"
      },
      "notification-state": {
        "support": "all"
      },
      "variant": {
        "support": "custom",
        "values": [
          "--plain",
          "--simple",
          "--hero",
          "--feature",
          "--strong",
          "--divider",
          "--divider-dotted"
        ]
      },
      "layout": {
        "support": "custom",
        "values": [
          "--center",
          "--sticky",
          "--outdent"
        ]
      },
      "shape": {
        "support": "subset",
        "values": [
          "--rounded"
        ]
      },
      "icon": {
        "support": "all"
      },
      "indent": {
        "support": "all"
      },
      "gap": {
        "support": "all"
      }
    },
    "structure": {
      "parts": {
        "icon": {
          "element": "i",
          "selector": ".ds-icon",
          "optional": true,
          "position": [
            "first"
          ]
        },
        "content": {
          "element": "div",
          "alternativeElements": [
            "span"
          ],
          "optional": true
        },
        "action": {
          "element": "a",
          "alternativeElements": [
            "button"
          ],
          "optional": true,
          "position": [
            "last"
          ]
        }
      },
      "patterns": {
        "basic": "<header class=\"ds-banner\"><div><h2>{title}</h2><p>{content}</p></div></header>",
        "with-icon": "<header class=\"ds-banner\"><i class=\"ds-icon {icon}\"></i><div><h2>{title}</h2><p>{content}</p></div></header>",
        "with-action": "<header class=\"ds-banner\"><div><h2>{title}</h2><p>{content}</p></div><button class=\"ds-button\" type=\"button\"><span>{action}</span></button></header>",
        "link": "<a class=\"ds-banner\" href=\"{href}\"><div><h2>{title}</h2><p>{content}</p></div></a>"
      }
    },
    "attributes": {
      "href": {
        "description": "Navigation target when ds-banner is applied to an anchor element.",
        "appliesTo": [
          {
            "elements": [
              "a"
            ]
          }
        ]
      }
    },
    "dataAttributes": [
      {
        "name": "data-notification-counter",
        "description": "Displays a numeric counter badge on the banner root. Used with a --notification modifier.",
        "valueType": "number"
      }
    ],
    "examples": [
      {
        "name": "basic",
        "html": "<header class=\"ds-banner\"><div><h2>Banner Title</h2><p>Banner description text.</p></div></header>"
      },
      {
        "name": "plain",
        "html": "<header class=\"ds-banner --plain\"><div><h2>Plain Banner</h2><p>No background texture.</p></div></header>"
      },
      {
        "name": "simple",
        "html": "<header class=\"ds-banner --simple\"><div><h2>Simple Banner</h2><p>Simplified background.</p></div></header>"
      },
      {
        "name": "hero",
        "html": "<header class=\"ds-banner --hero\"><div><h2>Hero Banner</h2><p>Large hero-style banner with extra padding.</p></div></header>"
      },
      {
        "name": "feature",
        "html": "<header class=\"ds-banner --feature\"><div><h2>Feature Banner</h2><p>Feature-style banner with strong background.</p></div></header>"
      },
      {
        "name": "strong",
        "html": "<header class=\"ds-banner --strong\"><div><h2>Strong Banner</h2><p>Full opacity background with contrasting text.</p></div></header>"
      },
      {
        "name": "divider",
        "html": "<header class=\"ds-banner --divider\"><div><h2>Divider Banner</h2><p>Banner with a bottom divider.</p></div></header>"
      },
      {
        "name": "divider-dotted",
        "html": "<header class=\"ds-banner --divider-dotted\"><div><h2>Dotted Divider Banner</h2><p>Banner with a dotted bottom divider.</p></div></header>"
      },
      {
        "name": "rounded",
        "html": "<header class=\"ds-banner --rounded\"><div><h2>Rounded Banner</h2><p>Banner with rounded corners.</p></div></header>"
      },
      {
        "name": "alert",
        "html": "<header class=\"ds-banner --alert\"><div><h2>Alert</h2><p>Alert banner message.</p></div></header>"
      },
      {
        "name": "success",
        "html": "<header class=\"ds-banner --success\"><div><h2>Success</h2><p>Success banner message.</p></div></header>"
      },
      {
        "name": "with-icon",
        "html": "<header class=\"ds-banner\"><i class=\"ds-icon --icon-star\"></i><div><h2>Banner with Icon</h2><p>Banner with a leading icon.</p></div></header>"
      },
      {
        "name": "with-button",
        "html": "<header class=\"ds-banner\"><div><h2>Banner with Action</h2><p>Banner with an action button.</p></div><button class=\"ds-button --plain\"><span>Action</span></button></header>"
      },
      {
        "name": "color-blue",
        "html": "<header class=\"ds-banner --color-blue\"><div><h2>Blue Banner</h2><p>Blue-themed banner.</p></div></header>"
      },
      {
        "name": "sticky",
        "html": "<header class=\"ds-banner --sticky\"><div><h2>Sticky Banner</h2><p>This banner sticks to the top.</p></div></header>"
      },
      {
        "name": "as-link",
        "html": "<a class=\"ds-banner\" href=\"#\"><i class=\"ds-icon --icon-star\"></i><div><h2>Clickable Banner</h2><p>This entire banner is a link.</p></div></a>"
      }
    ]
  },
  "ds-breadcrumb": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-breadcrumb",
    "description": "Breadcrumb navigation component. Displays the current page location within the site hierarchy.",
    "docUrl": "https://design.soracom.io/design-system/elements/breadcrumb/",
    "category": "elements",
    "htmlElements": [
      "nav",
      "ul",
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "layout": {
        "support": "custom",
        "values": [
          "--sticky",
          "--sticky-0",
          "--sticky-20",
          "--sticky-40",
          "--sticky-60",
          "--sticky-80",
          "--sticky-100",
          "--sticky-120",
          "--sticky-140",
          "--sticky-160",
          "--sticky-180",
          "--sticky-200"
        ]
      }
    },
    "structure": {
      "wrapContent": false,
      "parts": {
        "list": {
          "element": "ul",
          "required": true
        },
        "link": {
          "element": "a",
          "optional": true,
          "repeatable": true
        }
      },
      "patterns": {
        "basic": "<nav class=\"ds-breadcrumb\"><ul><li><a href=\"#\">Home</a></li><li><a href=\"#\">Section</a></li><li>Current Page</li></ul></nav>",
        "list": "<ul class=\"ds-breadcrumb\"><li><a href=\"#\">Home</a></li><li>Current Page</li></ul>",
        "two-level": "<nav class=\"ds-breadcrumb\"><ul><li><a href=\"#\">Home</a></li><li>Current Page</li></ul></nav>"
      }
    },
    "attributes": {
      "href": {
        "description": "Navigation target for a linked breadcrumb item.",
        "appliesTo": [
          {
            "part": "link",
            "elements": [
              "a"
            ]
          }
        ]
      }
    },
    "dataAttributes": [],
    "accessibility": {
      "ariaAttributes": [
        "aria-label"
      ],
      "role": "navigation",
      "notes": [
        "Use <nav> as the root element with aria-label=\"Breadcrumb\" for landmark navigation.",
        "The last item should be plain text (not a link) to indicate the current page.",
        "Use an <ol> or <ul> inside the nav for proper list semantics."
      ]
    },
    "examples": [
      {
        "name": "basic",
        "html": "<nav class=\"ds-breadcrumb\" aria-label=\"Breadcrumb\"><ul><li><a href=\"#\">Home</a></li><li><a href=\"#\">Section</a></li><li>Current Page</li></ul></nav>"
      },
      {
        "name": "two-level",
        "html": "<nav class=\"ds-breadcrumb\" aria-label=\"Breadcrumb\"><ul><li><a href=\"#\">Home</a></li><li>Current Page</li></ul></nav>"
      },
      {
        "name": "sticky",
        "html": "<nav class=\"ds-breadcrumb --sticky\" aria-label=\"Breadcrumb\"><ul><li><a href=\"#\">Home</a></li><li>Current Page</li></ul></nav>"
      }
    ]
  },
  "ds-button": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-button",
    "description": "Button component with various styles, sizes, and icon support. Supports button and anchor elements.",
    "docUrl": "https://design.soracom.io/design-system/elements/buttons/",
    "category": "elements",
    "htmlElements": [
      "button",
      "a"
    ],
    "isWebComponent": false,
    "modifiers": {
      "size": {
        "support": "subset",
        "values": [
          "--xxsmall",
          "--xsmall",
          "--small",
          "--large"
        ]
      },
      "width": {
        "support": "subset",
        "values": [
          "--narrow",
          "--mid",
          "--wide"
        ]
      },
      "color": {
        "support": "all"
      },
      "visual-state": {
        "support": "all"
      },
      "notification-state": {
        "support": "all"
      },
      "variant": {
        "support": "custom",
        "values": [
          "--primary",
          "--plain",
          "--feature",
          "--feature-spaced",
          "--link",
          "--label",
          "--ai",
          "--menu",
          "--secondary-menu",
          "--addon"
        ]
      },
      "state": {
        "support": "subset",
        "values": [
          "--disabled",
          "--loading",
          "--loading-refresh",
          "--active"
        ]
      },
      "shape": {
        "support": "subset",
        "values": [
          "--round",
          "--square",
          "--circle"
        ]
      },
      "animation": {
        "support": "subset",
        "values": [
          "--spin",
          "--pulse",
          "--glow",
          "--blink"
        ]
      },
      "utility": {
        "support": "custom",
        "values": [
          "--close",
          "--hide-label",
          "--in-place",
          "--wrap",
          "--right-icon"
        ]
      },
      "position": {
        "support": "custom",
        "values": [
          "--tip-top-left",
          "--tip-top",
          "--tip-top-right",
          "--tip-bottom-left",
          "--tip-bottom",
          "--tip-bottom-right",
          "--tip-left-top",
          "--tip-left",
          "--tip-left-bottom",
          "--tip-right-top",
          "--tip-right",
          "--tip-right-bottom"
        ]
      },
      "icon": {
        "support": "all"
      }
    },
    "structure": {
      "requiredChildren": [
        "span"
      ],
      "wrapContent": "span",
      "parts": {
        "inlineIcon": {
          "element": "i",
          "optional": true,
          "position": [
            "before",
            "after"
          ]
        },
        "text": {
          "element": "span",
          "required": true
        }
      },
      "patterns": {
        "text-only": "<button class=\"ds-button\" type=\"button\"><span>{content}</span></button>",
        "icon-before": "<button class=\"ds-button {icon} {modifiers}\" type=\"button\"><span>{content}</span></button>",
        "icon-after": "<button class=\"ds-button {icon} --right-icon {modifiers}\" type=\"button\"><span>{content}</span></button>",
        "icon-only": "<button class=\"ds-button {icon} --hide-label {modifiers}\" type=\"button\" aria-label=\"{content}\"><span>{content}</span></button>"
      },
      "defaultAttributes": {
        "type": "button"
      }
    },
    "attributes": {
      "type": {
        "description": "Button-only native type attribute. Use button unless the control intentionally submits or resets a form.",
        "values": [
          "button",
          "submit",
          "reset"
        ],
        "default": "button",
        "appliesTo": [
          {
            "elements": [
              "button"
            ]
          }
        ]
      },
      "disabled": {
        "description": "Disables a button element. The disabled attribute is not valid for anchors.",
        "appliesTo": [
          {
            "elements": [
              "button"
            ]
          }
        ]
      },
      "href": {
        "description": "Navigation target when ds-button is applied to an anchor element.",
        "appliesTo": [
          {
            "elements": [
              "a"
            ]
          }
        ]
      }
    },
    "dataAttributes": [
      {
        "name": "data-notification-counter",
        "description": "Displays a numeric counter badge on the button. Used with --notification modifier.",
        "valueType": "number"
      }
    ],
    "cssCustomProperties": [
      {
        "name": "--ds-button-height",
        "default": "40px",
        "description": "Minimum height of the button"
      },
      {
        "name": "--ds-button-width",
        "default": "var(--ds-button-height)",
        "description": "Minimum width of the button"
      },
      {
        "name": "--ds-button-text-size",
        "default": "var(--ds-text-size-medium)",
        "description": "Font size"
      },
      {
        "name": "--ds-button-text-color",
        "default": "var(--color, var(--color-ink-shade))",
        "description": "Text and icon colour"
      },
      {
        "name": "--ds-button-wrap",
        "default": "nowrap",
        "description": "White-space wrapping behaviour"
      },
      {
        "name": "--ds-button-background-color",
        "default": "var(--color-transparent)",
        "description": "Background colour"
      },
      {
        "name": "--ds-button-indent",
        "default": "12px",
        "description": "Base padding"
      },
      {
        "name": "--ds-button-h-indent",
        "default": "var(--ds-button-indent)",
        "description": "Horizontal padding"
      },
      {
        "name": "--ds-button-v-indent",
        "default": "0px",
        "description": "Vertical padding"
      },
      {
        "name": "--ds-button-gap",
        "default": "8px",
        "description": "Gap between icon and text"
      },
      {
        "name": "--ds-button-icon-size",
        "default": "1.3em",
        "description": "Icon size"
      },
      {
        "name": "--ds-button-border-radius",
        "default": "5px",
        "description": "Border radius"
      },
      {
        "name": "--ds-button-border-width",
        "default": "2px",
        "description": "Border width"
      },
      {
        "name": "--ds-button-border-style",
        "default": "solid",
        "description": "Border style"
      },
      {
        "name": "--ds-button-border-color",
        "default": "var(--color, var(--color-ink-shade))",
        "description": "Border colour"
      }
    ],
    "accessibility": {
      "ariaAttributes": [
        "aria-label",
        "aria-disabled"
      ],
      "notes": [
        "Always include type=\"button\" for buttons that do not submit forms.",
        "For icon-only controls, retain a descriptive span and provide an aria-label. Use --hide-label unless a variant such as --close applies equivalent hidden-label behavior.",
        "Use the disabled attribute for buttons. For disabled anchors, omit href or add --disabled, and set aria-disabled=\"true\".",
        "When using <a> as the element, add role=\"button\" if it does not navigate."
      ]
    },
    "examples": [
      {
        "name": "basic",
        "html": "<button class=\"ds-button\" type=\"button\"><span>Button Text</span></button>"
      },
      {
        "name": "primary",
        "html": "<button class=\"ds-button --primary\" type=\"button\"><span>Primary Button</span></button>"
      },
      {
        "name": "plain",
        "html": "<button class=\"ds-button --plain\" type=\"button\"><span>Plain Button</span></button>"
      },
      {
        "name": "small",
        "html": "<button class=\"ds-button --small\" type=\"button\"><span>Small Button</span></button>"
      },
      {
        "name": "large",
        "html": "<button class=\"ds-button --large\" type=\"button\"><span>Large Button</span></button>"
      },
      {
        "name": "loading",
        "html": "<button class=\"ds-button --loading\" type=\"button\"><span>Loading...</span></button>"
      },
      {
        "name": "disabled",
        "html": "<button class=\"ds-button\" type=\"button\" disabled><span>Disabled Button</span></button>"
      },
      {
        "name": "icon-before",
        "html": "<button class=\"ds-button --icon-plus\" type=\"button\"><span>Add Item</span></button>"
      },
      {
        "name": "icon-after",
        "html": "<button class=\"ds-button --icon-arrow-right --right-icon\" type=\"button\"><span>Continue</span></button>"
      },
      {
        "name": "icon-only-round",
        "html": "<button class=\"ds-button --icon-close --hide-label --round\" type=\"button\" aria-label=\"Close\"><span>Close</span></button>"
      },
      {
        "name": "close",
        "html": "<button class=\"ds-button --close\" type=\"button\" aria-label=\"Close\"><span>Close</span></button>"
      },
      {
        "name": "link",
        "html": "<button class=\"ds-button --link\" type=\"button\"><span>Link Button</span></button>"
      },
      {
        "name": "danger",
        "html": "<button class=\"ds-button --primary --icon-delete --alert\" type=\"button\"><span>Delete...</span></button>"
      },
      {
        "name": "anchor",
        "html": "<a class=\"ds-button --primary\" href=\"#\"><span>Link as Button</span></a>"
      },
      {
        "name": "notification",
        "html": "<button class=\"ds-button --notification --icon-bell --hide-label\" type=\"button\" data-notification-counter=\"3\"><span>Notifications</span></button>"
      }
    ]
  },
  "ds-card": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-card",
    "description": "Card container for content",
    "docUrl": "https://design.soracom.io/design-system/elements/card/",
    "category": "elements",
    "htmlElements": [
      "div",
      "a"
    ],
    "isWebComponent": false,
    "modifiers": {
      "color": {
        "support": "all"
      },
      "visual-state": {
        "support": "all"
      },
      "variant": {
        "support": "custom",
        "values": [
          "--panel",
          "--details",
          "--tiled",
          "--plain",
          "--simple",
          "--diagram",
          "--clickable"
        ]
      },
      "size": {
        "support": "subset",
        "values": [
          "--small",
          "--large"
        ]
      },
      "layout": {
        "support": "custom",
        "values": [
          "--center",
          "--limit"
        ]
      },
      "state": {
        "support": "subset",
        "values": [
          "--loading",
          "--loading-refresh"
        ]
      },
      "icon": {
        "support": "all"
      },
      "indent": {
        "support": "all"
      },
      "gap": {
        "support": "all"
      }
    },
    "structure": {
      "parts": {
        "pinnedTag": {
          "element": "span",
          "alternativeElements": [
            "p"
          ],
          "selector": ".ds-tag.--pinned",
          "optional": true,
          "position": [
            "first"
          ]
        },
        "close": {
          "element": "button",
          "selector": ".__close",
          "optional": true,
          "position": [
            "first"
          ]
        },
        "media": {
          "element": "i",
          "alternativeElements": [
            "img",
            "figure"
          ],
          "optional": true
        },
        "footer": {
          "element": "footer",
          "alternativeElements": [
            "div",
            "button"
          ],
          "selector": "footer, .__footer",
          "optional": true,
          "position": [
            "last"
          ]
        }
      },
      "patterns": {
        "basic": "<div class=\"ds-card\"><div class=\"ds-text --label\">{title}</div><div class=\"ds-text\">{content}</div></div>",
        "with-footer": "<div class=\"ds-card\"><div class=\"ds-text --label\">{title}</div><div class=\"ds-text\">{content}</div><footer>{footer}</footer></div>",
        "link": "<a class=\"ds-card\" href=\"{href}\"><div class=\"ds-text --label\">{title}</div><div class=\"ds-text\">{content}</div></a>"
      }
    },
    "attributes": {
      "href": {
        "description": "Navigation target when ds-card is applied to an anchor element.",
        "appliesTo": [
          {
            "elements": [
              "a"
            ]
          }
        ]
      }
    },
    "dataAttributes": [
      {
        "name": "data-ds-message",
        "description": "Message text that hides the card contents and renders the SDS message state.",
        "valueType": "string"
      }
    ],
    "examples": [
      {
        "name": "basic",
        "html": "<div class=\"ds-card\"><div class=\"ds-text --label\">Card Title</div><div class=\"ds-text\">Card content goes here.</div></div>"
      },
      {
        "name": "with-footer",
        "html": "<div class=\"ds-card\"><div class=\"ds-text --label\">Card Title</div><div class=\"ds-text\">Card content goes here.</div><div class=\"__footer\"><span>Footer</span><i class=\"ds-icon --icon-arrow-right\"></i></div></div>"
      },
      {
        "name": "with-close",
        "html": "<div class=\"ds-card\"><div class=\"ds-text --label\">Card Title</div><div class=\"ds-text\">Card content goes here.</div><button class=\"ds-button --primary --small __close\"><span>Close</span></button></div>"
      },
      {
        "name": "with-pinned-tag",
        "html": "<div class=\"ds-card\"><p class=\"ds-tag --pinned\"><span>Category</span></p><div class=\"ds-text --label\">Card Title</div><div class=\"ds-text\">Card content goes here.</div></div>"
      },
      {
        "name": "alert",
        "html": "<div class=\"ds-card --alert\"><div class=\"ds-text --label\">Alert</div><div class=\"ds-text\">Alert card content.</div></div>"
      },
      {
        "name": "info",
        "html": "<div class=\"ds-card --info\"><div class=\"ds-text --label\">Info</div><div class=\"ds-text\">Info card content.</div></div>"
      },
      {
        "name": "color-magenta",
        "html": "<div class=\"ds-card --color-magenta\"><div class=\"ds-text --label\">Magenta</div><div class=\"ds-text\">Colored card content.</div></div>"
      },
      {
        "name": "color-magenta-lightest",
        "html": "<div class=\"ds-card --color-magenta-lightest\"><div class=\"ds-text --label\">Magenta Lightest</div><div class=\"ds-text\">Light colored card content.</div></div>"
      },
      {
        "name": "indent-large",
        "html": "<div class=\"ds-card --indent-large\"><div class=\"ds-text --label\">Large Indent</div><div class=\"ds-text\">Card with extra padding.</div></div>"
      },
      {
        "name": "indent-small",
        "html": "<div class=\"ds-card --indent-small\"><div class=\"ds-text --label\">Small Indent</div><div class=\"ds-text\">Card with less padding.</div></div>"
      },
      {
        "name": "loading",
        "html": "<div class=\"ds-card --loading\"><div class=\"ds-text --label\">Loading</div><div class=\"ds-text\">Content is loading.</div></div>"
      },
      {
        "name": "loading-with-message",
        "html": "<div class=\"ds-card --loading\" data-ds-message=\"Loading data...\"><div class=\"ds-text --label\">Card</div><div class=\"ds-text\">Content behind overlay.</div></div>"
      },
      {
        "name": "message",
        "html": "<div class=\"ds-card\" data-ds-message=\"No data available\"><div class=\"ds-text --label\">Empty</div><div class=\"ds-text\">Content area.</div></div>"
      },
      {
        "name": "message-with-icon",
        "html": "<div class=\"ds-card --icon-rocket\" data-ds-message=\"Launching soon\"><div class=\"ds-text --label\">Card</div><div class=\"ds-text\">Content area.</div></div>"
      },
      {
        "name": "details",
        "html": "<div class=\"ds-card --details\"><i class=\"ds-icon --massive --icon-sim\"></i><div class=\"ds-heading --large\">Title</div><div class=\"ds-text\">Details card content.</div><button class=\"__footer --label\"><span>Details</span><i class=\"ds-icon --icon-arrow-right\"></i></button></div>"
      },
      {
        "name": "panel",
        "html": "<div class=\"ds-card --panel\"></div>"
      },
      {
        "name": "panel-with-content",
        "html": "<div class=\"ds-card --panel --indent-small\"><p class=\"ds-tag --pinned\"><span>Category</span></p><div class=\"ds-text --label\">Title</div><div class=\"ds-text\">Panel card content.</div></div>"
      },
      {
        "name": "link-card",
        "html": "<a class=\"ds-card --indent-small\" href=\"#\"><div class=\"ds-text --label --xlarge\">Clickable Card</div><hr /><div class=\"ds-text --small\">Card content with link behavior.</div><footer><div><span class=\"ds-tag --small\"><span>Tag</span></span></div></footer></a>"
      }
    ]
  },
  "ds-chart": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-chart",
    "description": "Chart component for data visualization",
    "docUrl": "https://design.soracom.io/design-system/elements/chart/",
    "category": "elements",
    "htmlElements": [
      "div",
      "svg"
    ],
    "isWebComponent": false,
    "modifiers": {
      "variant": {
        "support": "custom",
        "values": [
          "--scaled"
        ]
      },
      "utility": {
        "support": "custom",
        "values": [
          "--clip",
          "--3",
          "--4",
          "--5",
          "--6",
          "--7",
          "--8",
          "--9",
          "--10",
          "--11",
          "--12",
          "--13",
          "--14",
          "--15",
          "--16"
        ]
      }
    },
    "cssCustomProperties": [
      {
        "name": "--ds-chart-indent",
        "default": "0px",
        "description": "Base inset between the chart canvas and its container"
      }
    ],
    "structure": {
      "parts": {
        "canvas": {
          "element": "canvas",
          "optional": true
        },
        "svgContent": {
          "element": "svg",
          "optional": true
        }
      },
      "patterns": {
        "canvas": "<div class=\"ds-chart\"><canvas></canvas></div>",
        "svg": "<svg class=\"ds-chart\" role=\"img\" aria-label=\"{description}\">{content}</svg>"
      }
    },
    "attributes": {},
    "dataAttributes": [],
    "examples": [
      {
        "name": "basic",
        "html": "<div class=\"ds-chart\"><canvas></canvas></div>"
      },
      {
        "name": "scaled",
        "html": "<div class=\"ds-chart --scaled\"><canvas></canvas></div>"
      },
      {
        "name": "clipped",
        "html": "<div class=\"ds-chart --clip --9\"><canvas></canvas></div>"
      }
    ]
  },
  "ds-checkbox": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-checkbox",
    "description": "Checkbox input component",
    "docUrl": "https://design.soracom.io/design-system/elements/checkbox/",
    "category": "elements",
    "htmlElements": [
      "label",
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "size": {
        "support": "subset",
        "values": [
          "--small",
          "--medium",
          "--large"
        ]
      },
      "color": {
        "support": "all"
      },
      "visual-state": {
        "support": "all"
      },
      "state": {
        "support": "subset",
        "values": [
          "--disabled"
        ]
      },
      "variant": {
        "support": "custom",
        "values": [
          "--panel",
          "--panel-simple",
          "--dots",
          "--swatch",
          "--round",
          "--square",
          "--hide-label",
          "--image",
          "--fee"
        ]
      },
      "icon": {
        "support": "all"
      },
      "indent": {
        "support": "all"
      },
      "gap": {
        "support": "all"
      }
    },
    "cssCustomProperties": [
      {
        "name": "--ds-checkbox-color",
        "description": "Custom swatch color used by the --swatch variant"
      }
    ],
    "structure": {
      "parts": {
        "control": {
          "element": "input",
          "selector": "input[type=\"checkbox\"]",
          "attributes": {
            "type": "checkbox"
          },
          "optional": true,
          "position": [
            "first"
          ]
        },
        "label": {
          "element": "div",
          "alternativeElements": [
            "span"
          ],
          "optional": true,
          "position": [
            "after control"
          ]
        },
        "option": {
          "element": "label",
          "optional": true,
          "repeatable": true
        }
      },
      "patterns": {
        "single": "<label class=\"ds-checkbox\"><input type=\"checkbox\"><div>{label}</div></label>",
        "group": "<div class=\"ds-checkbox --panel\"><label><input type=\"checkbox\"><div>{label}</div></label><label><input type=\"checkbox\"><div>{label}</div></label></div>"
      }
    },
    "attributes": {},
    "dataAttributes": [
      {
        "name": "data-ds-message",
        "description": "Message text that hides the checkbox contents and renders the SDS message state.",
        "valueType": "string"
      }
    ],
    "examples": [
      {
        "name": "basic",
        "html": "<label class=\"ds-checkbox\"><input type=\"checkbox\" /><div>Checkbox label</div></label>"
      },
      {
        "name": "checked",
        "html": "<label class=\"ds-checkbox\"><input type=\"checkbox\" checked /><div>Checked</div></label>"
      },
      {
        "name": "small",
        "html": "<label class=\"ds-checkbox --small\"><input type=\"checkbox\" /><div>Small</div></label>"
      },
      {
        "name": "large",
        "html": "<label class=\"ds-checkbox --large\"><input type=\"checkbox\" /><div>Large</div></label>"
      },
      {
        "name": "alert",
        "html": "<label class=\"ds-checkbox --alert\"><input type=\"checkbox\" checked /><div>Alert</div></label>"
      },
      {
        "name": "success",
        "html": "<label class=\"ds-checkbox --success\"><input type=\"checkbox\" checked /><div>Success</div></label>"
      },
      {
        "name": "color-blue",
        "html": "<label class=\"ds-checkbox --color-blue\"><input type=\"checkbox\" checked /><div>Blue</div></label>"
      },
      {
        "name": "with-icon",
        "html": "<label class=\"ds-checkbox --icon-rocket\"><input type=\"checkbox\" /><div>With icon</div></label>"
      },
      {
        "name": "panel",
        "html": "<label class=\"ds-checkbox --panel\"><input type=\"checkbox\" /><div>Panel checkbox</div></label>"
      },
      {
        "name": "panel-simple",
        "html": "<label class=\"ds-checkbox --panel-simple\"><input type=\"checkbox\" /><div>Simple panel</div></label>"
      },
      {
        "name": "grouped-panel",
        "html": "<div class=\"ds-checkbox --panel\"><label><input type=\"checkbox\" /><div>Option 1</div></label><label><input type=\"checkbox\" /><div>Option 2</div></label><label><input type=\"checkbox\" /><div>Option 3</div></label></div>"
      },
      {
        "name": "dots",
        "html": "<label class=\"ds-checkbox --dots\"><input type=\"checkbox\" /><div>A</div></label>"
      },
      {
        "name": "swatch",
        "html": "<label class=\"ds-checkbox --swatch\"><input type=\"checkbox\" /><div>A</div></label>"
      },
      {
        "name": "round",
        "html": "<label class=\"ds-checkbox --round\"><input type=\"checkbox\" /><div>Round</div></label>"
      },
      {
        "name": "hide-label",
        "html": "<label class=\"ds-checkbox --hide-label --tip-right\"><input type=\"checkbox\" /><div>Tooltip text</div></label>"
      },
      {
        "name": "disabled",
        "html": "<label class=\"ds-checkbox\"><input type=\"checkbox\" disabled /><div>Disabled</div></label>"
      }
    ]
  },
  "ds-codeblock": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-codeblock",
    "description": "Preformatted code display block with optional caption",
    "docUrl": "https://design.soracom.io/design-system/elements/codeblock/",
    "category": "elements",
    "htmlElements": [
      "figure",
      "pre",
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "variant": {
        "support": "custom",
        "values": [
          "--wrap",
          "--auto",
          "--light"
        ]
      },
      "indent": {
        "support": "all"
      },
      "gap": {
        "support": "all"
      }
    },
    "structure": {
      "parts": {
        "caption": {
          "element": "figcaption",
          "optional": true,
          "position": [
            "before code"
          ]
        },
        "tag": {
          "element": "span",
          "selector": ".ds-tag.--pinned",
          "optional": true,
          "position": [
            "before code"
          ]
        },
        "preformatted": {
          "element": "pre",
          "required": true
        },
        "code": {
          "element": "code",
          "required": true
        }
      },
      "patterns": {
        "figure": "<figure class=\"ds-codeblock\"><pre><code>{content}</code></pre></figure>",
        "with-caption": "<figure class=\"ds-codeblock\"><figcaption>{caption}</figcaption><pre><code>{content}</code></pre></figure>",
        "pre": "<pre class=\"ds-codeblock\"><code>{content}</code></pre>"
      }
    },
    "attributes": {},
    "dataAttributes": [],
    "examples": [
      {
        "name": "basic",
        "html": "<figure class=\"ds-codeblock\"><pre><code>const greeting = 'Hello, world!';\nconsole.log(greeting);</code></pre></figure>"
      },
      {
        "name": "light",
        "html": "<figure class=\"ds-codeblock --light\"><pre><code>const greeting = 'Hello, world!';\nconsole.log(greeting);</code></pre></figure>"
      },
      {
        "name": "wrap",
        "html": "<figure class=\"ds-codeblock --wrap\"><pre><code>This is a long line of code that will wrap instead of scrolling horizontally when it exceeds the container width.</code></pre></figure>"
      },
      {
        "name": "auto",
        "html": "<figure class=\"ds-codeblock --auto\"><pre><code>// Auto-height adjusts to content\nconst a = 1;\nconst b = 2;</code></pre></figure>"
      },
      {
        "name": "with-caption",
        "html": "<figure class=\"ds-codeblock\"><figcaption>example.js</figcaption><pre><code>function add(a, b) {\n  return a + b;\n}</code></pre></figure>"
      },
      {
        "name": "with-tag",
        "html": "<figure class=\"ds-codeblock\"><span class=\"ds-tag --pinned\"><span>JavaScript</span></span><pre><code>const items = [1, 2, 3];\nitems.forEach(item => console.log(item));</code></pre></figure>"
      }
    ]
  },
  "ds-cols": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-cols",
    "description": "Column-based layout container",
    "docUrl": "https://design.soracom.io/design-system/containers/cols/",
    "category": "containers",
    "htmlElements": [
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "size": {
        "support": "custom",
        "values": [
          "--small",
          "--limit"
        ]
      },
      "width": {
        "support": "custom",
        "values": [
          "--width-narrow",
          "--width-default",
          "--width-medium",
          "--width-wide"
        ]
      },
      "layout": {
        "support": "custom",
        "values": [
          "--center",
          "--middle",
          "--baseline",
          "--top",
          "--bottom",
          "--end",
          "--spaced",
          "--distributed",
          "--reverse",
          "--stretch",
          "--nowrap",
          "--no-wrap",
          "--uniform",
          "--connected",
          "--responsive-md",
          "--responsive-sm"
        ]
      },
      "gap": {
        "support": "all"
      },
      "indent": {
        "support": "all"
      },
      "utility": {
        "support": "custom",
        "values": [
          "--1",
          "--2",
          "--3",
          "--4",
          "--5",
          "--6",
          "--7",
          "--8",
          "--9",
          "--10",
          "--11",
          "--12"
        ]
      }
    },
    "cssCustomProperties": [
      {
        "name": "--ds-cols-width",
        "default": "320px",
        "description": "Minimum column width used by the --uniform layout"
      }
    ],
    "attributes": {},
    "dataAttributes": [],
    "examples": [
      {
        "name": "basic",
        "html": "<div class=\"ds-cols\"><div>Column 1</div><div>Column 2</div><div>Column 3</div></div>"
      },
      {
        "name": "centered",
        "html": "<div class=\"ds-cols --center --middle\"><div>Centered content</div><div>Centered content</div></div>"
      },
      {
        "name": "spaced",
        "html": "<div class=\"ds-cols --spaced\"><div>Left</div><div>Right</div></div>"
      },
      {
        "name": "uniform",
        "html": "<div class=\"ds-cols --uniform\"><div>Equal width</div><div>Equal width</div><div>Equal width</div></div>"
      },
      {
        "name": "responsive",
        "html": "<div class=\"ds-cols --responsive-md\"><div>Column 1</div><div>Column 2</div></div>"
      },
      {
        "name": "limit",
        "html": "<div class=\"ds-cols --limit\"><div>Max-width 1200px content</div><div>Centered</div></div>"
      }
    ]
  },
  "ds-controls": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-controls",
    "description": "Control group container",
    "docUrl": "https://design.soracom.io/design-system/containers/controls/",
    "category": "containers",
    "htmlElements": [
      "section",
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "variant": {
        "support": "custom",
        "values": [
          "--plain"
        ]
      },
      "layout": {
        "support": "custom",
        "values": [
          "--end",
          "--center",
          "--spaced",
          "--distributed",
          "--reverse"
        ]
      },
      "indent": {
        "support": "all"
      },
      "gap": {
        "support": "all"
      }
    },
    "structure": {
      "requiredChildren": [
        "div"
      ],
      "parts": {
        "group": {
          "element": "div",
          "required": true,
          "repeatable": true
        },
        "endGroup": {
          "element": "div",
          "selector": ".--end",
          "optional": true,
          "position": [
            "last"
          ]
        }
      },
      "patterns": {
        "basic": "<section class=\"ds-controls\"><div><button class=\"ds-button --primary\" type=\"button\"><span>{primary}</span></button><button class=\"ds-button\" type=\"button\"><span>{secondary}</span></button></div></section>",
        "split": "<section class=\"ds-controls --spaced\"><div>{start}</div><div>{end}</div></section>"
      }
    },
    "attributes": {},
    "dataAttributes": [],
    "examples": [
      {
        "name": "basic",
        "html": "<section class=\"ds-controls\"><div><button class=\"ds-button --primary\"><span>Save</span></button><button class=\"ds-button --plain\"><span>Cancel</span></button></div></section>"
      },
      {
        "name": "plain",
        "html": "<section class=\"ds-controls --plain\"><div><button class=\"ds-button --primary\"><span>Save</span></button><button class=\"ds-button --plain\"><span>Cancel</span></button></div></section>"
      },
      {
        "name": "end",
        "html": "<section class=\"ds-controls --end\"><div><button class=\"ds-button --primary\"><span>Submit</span></button></div></section>"
      },
      {
        "name": "spaced",
        "html": "<section class=\"ds-controls --spaced\"><div><button class=\"ds-button --plain\"><span>Back</span></button></div><div><button class=\"ds-button --primary\"><span>Next</span></button></div></section>"
      }
    ]
  },
  "ds-counter": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-counter",
    "description": "Numeric counter display",
    "category": "utility",
    "htmlElements": [
      "span",
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {},
    "structure": {
      "parts": {
        "item": {
          "element": "div",
          "alternativeElements": [
            "section",
            "li"
          ],
          "selector": ".__counter",
          "required": true,
          "repeatable": true
        }
      },
      "patterns": {
        "basic": "<div class=\"ds-counter\"><div class=\"__counter\">{content}</div><div class=\"__counter\">{content}</div></div>"
      }
    },
    "attributes": {},
    "dataAttributes": []
  },
  "ds-datatable": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-datatable",
    "description": "Data table component",
    "docUrl": "https://design.soracom.io/design-system/elements/datatable/",
    "category": "elements",
    "htmlElements": [
      "table",
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "variant": {
        "support": "custom",
        "values": [
          "--embedded",
          "--feature",
          "--cards",
          "--spreadsheet",
          "--plain"
        ]
      },
      "state": {
        "support": "custom",
        "values": [
          "--stick-header",
          "--striped",
          "--pin-first",
          "--lazy",
          "--loading",
          "--loading-refresh"
        ]
      },
      "size": {
        "support": "custom",
        "values": [
          "--small",
          "--xsmall",
          "--compact",
          "--condensed"
        ]
      },
      "utility": {
        "support": "custom",
        "values": [
          "--first-min",
          "--solid",
          "--clickable",
          "--selectable",
          "--highlight",
          "--mark",
          "--max",
          "--min",
          "--left",
          "--right",
          "--center",
          "--nowrap",
          "--no-wrap",
          "--wrap",
          "--column",
          "--dashed"
        ]
      },
      "visual-state": {
        "support": "all"
      },
      "indent": {
        "support": "all"
      },
      "icon": {
        "support": "all"
      }
    },
    "structure": {
      "parts": {
        "table": {
          "element": "table",
          "required": true
        },
        "caption": {
          "element": "caption",
          "optional": true,
          "position": [
            "first"
          ]
        },
        "head": {
          "element": "thead",
          "optional": true,
          "position": [
            "before body"
          ]
        },
        "body": {
          "element": "tbody",
          "required": true
        },
        "foot": {
          "element": "tfoot",
          "optional": true,
          "position": [
            "last"
          ]
        },
        "row": {
          "element": "tr",
          "required": true,
          "repeatable": true
        },
        "headerCell": {
          "element": "th",
          "optional": true,
          "repeatable": true
        },
        "cell": {
          "element": "td",
          "required": true,
          "repeatable": true
        }
      },
      "patterns": {
        "table": "<table class=\"ds-datatable\"><thead><tr><th>{heading}</th></tr></thead><tbody><tr><td>{value}</td></tr></tbody></table>",
        "wrapper": "<div class=\"ds-datatable\"><table><thead><tr><th>{heading}</th></tr></thead><tbody><tr><td>{value}</td></tr></tbody></table></div>",
        "responsive": "<table class=\"ds-datatable\"><thead data-label><tr><th>{heading}</th></tr></thead><tbody><tr data-label><td data-label=\"{heading}\">{value}</td></tr></tbody></table>"
      }
    },
    "attributes": {},
    "dataAttributes": [
      {
        "name": "data-label",
        "description": "Enables the responsive stacked layout when present on thead and tbody rows; on cells, its text becomes the mobile column label.",
        "valueType": "string"
      },
      {
        "name": "data-ds-message",
        "description": "Message text that hides the table contents and renders the SDS message state.",
        "valueType": "string"
      }
    ],
    "examples": [
      {
        "name": "basic",
        "html": "<table class=\"ds-datatable\"><thead><tr><th>Name</th><th>Status</th><th>Date</th></tr></thead><tbody><tr><td>Item 1</td><td>Active</td><td>2024-01-01</td></tr><tr><td>Item 2</td><td>Inactive</td><td>2024-01-02</td></tr></tbody></table>"
      },
      {
        "name": "embedded",
        "html": "<table class=\"ds-datatable --embedded\"><thead><tr><th>Name</th><th>Value</th></tr></thead><tbody><tr><td>Setting A</td><td>Enabled</td></tr><tr><td>Setting B</td><td>Disabled</td></tr></tbody></table>"
      },
      {
        "name": "striped",
        "html": "<table class=\"ds-datatable --striped\"><thead><tr><th>Name</th><th>Status</th><th>Date</th></tr></thead><tbody><tr><td>Item 1</td><td>Active</td><td>2024-01-01</td></tr><tr><td>Item 2</td><td>Inactive</td><td>2024-01-02</td></tr><tr><td>Item 3</td><td>Active</td><td>2024-01-03</td></tr></tbody></table>"
      },
      {
        "name": "sticky-header",
        "html": "<table class=\"ds-datatable --stick-header\"><thead><tr><th>Name</th><th>Status</th><th>Date</th></tr></thead><tbody><tr><td>Item 1</td><td>Active</td><td>2024-01-01</td></tr><tr><td>Item 2</td><td>Inactive</td><td>2024-01-02</td></tr></tbody></table>"
      },
      {
        "name": "sticky-thead",
        "html": "<div class=\"--20-h\"><table class=\"ds-datatable\"><thead class=\"--sticky\"><tr><th>Name</th><th>Status</th><th>Date</th></tr></thead><tbody><tr><td>Item 1</td><td>Active</td><td>2024-01-01</td></tr><tr><td>Item 2</td><td>Inactive</td><td>2024-01-02</td></tr><tr><td>Item 3</td><td>Active</td><td>2024-01-03</td></tr><tr><td>Item 4</td><td>Inactive</td><td>2024-01-04</td></tr></tbody></table></div>"
      },
      {
        "name": "with-caption",
        "html": "<table class=\"ds-datatable\"><caption>Data Summary</caption><thead><tr><th>Name</th><th>Value</th></tr></thead><tbody><tr><td>Total</td><td>100</td></tr><tr><td>Average</td><td>50</td></tr></tbody></table>"
      },
      {
        "name": "feature",
        "html": "<table class=\"ds-datatable --feature\"><thead><tr><th>Plan</th><th>Price</th><th>Features</th></tr></thead><tbody><tr><td>Basic</td><td>$10</td><td>5 users</td></tr><tr><td>Pro</td><td>$25</td><td>25 users</td></tr></tbody></table>"
      },
      {
        "name": "compact",
        "html": "<table class=\"ds-datatable --compact\"><thead><tr><th>ID</th><th>Name</th><th>Value</th></tr></thead><tbody><tr><td>1</td><td>Item A</td><td>100</td></tr><tr><td>2</td><td>Item B</td><td>200</td></tr></tbody></table>"
      },
      {
        "name": "condensed",
        "html": "<table class=\"ds-datatable --condensed\"><thead><tr><th>ID</th><th>Name</th><th>Value</th></tr></thead><tbody><tr><td>1</td><td>Item A</td><td>100</td></tr><tr><td>2</td><td>Item B</td><td>200</td></tr></tbody></table>"
      },
      {
        "name": "plain",
        "html": "<table class=\"ds-datatable --plain\"><thead><tr><th>Name</th><th>Status</th><th>Date</th></tr></thead><tbody><tr><td>Item 1</td><td>Active</td><td>2024-01-01</td></tr><tr><td>Item 2</td><td>Inactive</td><td>2024-01-02</td></tr></tbody></table>"
      },
      {
        "name": "loading",
        "html": "<table class=\"ds-datatable --loading\"><thead><tr><th>Name</th><th>Status</th><th>Date</th></tr></thead><tbody><tr><td>Item 1</td><td>Active</td><td>2024-01-01</td></tr></tbody></table>"
      },
      {
        "name": "loading-refresh",
        "html": "<table class=\"ds-datatable --loading-refresh\"><thead><tr><th>Name</th><th>Status</th><th>Date</th></tr></thead><tbody><tr><td>Item 1</td><td>Active</td><td>2024-01-01</td></tr></tbody></table>"
      },
      {
        "name": "with-message",
        "html": "<table class=\"ds-datatable\" data-ds-message=\"No items found\"><thead><tr><th>Name</th><th>Status</th><th>Date</th></tr></thead><tbody><tr><td colspan=\"999\"></td></tr></tbody></table>"
      },
      {
        "name": "clickable",
        "html": "<table class=\"ds-datatable\"><thead><tr><th>Name</th><th>Status</th></tr></thead><tbody><tr class=\"--clickable\"><td>Clickable Row 1</td><td>Active</td></tr><tr class=\"--clickable\"><td>Clickable Row 2</td><td>Inactive</td></tr></tbody></table>"
      },
      {
        "name": "selectable",
        "html": "<table class=\"ds-datatable\"><thead><tr><th>Name</th><th>Status</th></tr></thead><tbody><tr class=\"--selectable --selected\"><td>Selected Row</td><td>Active</td></tr><tr class=\"--selectable\"><td>Unselected Row</td><td>Inactive</td></tr></tbody></table>"
      },
      {
        "name": "spreadsheet",
        "html": "<table class=\"ds-datatable --spreadsheet\"><thead><tr><th>A</th><th>B</th><th>C</th><th>D</th></tr></thead><tbody><tr><td>1</td><td>2</td><td>3</td><td>4</td></tr><tr><td>5</td><td>6</td><td>7</td><td>8</td></tr></tbody></table>"
      },
      {
        "name": "pin-first",
        "html": "<div class=\"--20-h\"><table class=\"ds-datatable --embedded --pin-first\"><thead class=\"--sticky\"><tr><th>Pinned</th><th>Col 2</th><th>Col 3</th><th>Col 4</th><th>Col 5</th></tr></thead><tbody><tr><td>Fixed</td><td>Content</td><td>Content</td><td>Content</td><td>Content</td></tr></tbody></table></div>"
      },
      {
        "name": "responsive",
        "html": "<table class=\"ds-datatable\"><thead data-label><tr><th>Name</th><th>Status</th><th>Date</th></tr></thead><tbody><tr data-label><td data-label=\"Name\">Item 1</td><td data-label=\"Status\">Active</td><td data-label=\"Date\">2024-01-01</td></tr><tr data-label><td data-label=\"Name\">Item 2</td><td data-label=\"Status\">Inactive</td><td data-label=\"Date\">2024-01-02</td></tr></tbody></table>"
      },
      {
        "name": "sortable-headers",
        "html": "<table class=\"ds-datatable\"><thead><tr><th><button class=\"ds-button --label\"><span>Unsorted</span><i class=\"ds-icon --tiny --icon-arrows-top-bottom\"></i></button></th><th><button class=\"ds-button --label\"><span>Ascending</span><i class=\"ds-icon --tiny --icon-arrow-bottom\"></i></button></th><th><button class=\"ds-button --label\"><span>Descending</span><i class=\"ds-icon --tiny --icon-arrow-top\"></i></button></th></tr></thead><tbody><tr><td>A</td><td>1</td><td>X</td></tr><tr><td>B</td><td>2</td><td>Y</td></tr></tbody></table>"
      },
      {
        "name": "with-tfoot",
        "html": "<table class=\"ds-datatable\"><thead><tr><th>Item</th><th>Qty</th><th>Price</th></tr></thead><tbody><tr><td>Widget A</td><td>10</td><td>$100</td></tr><tr><td>Widget B</td><td>5</td><td>$75</td></tr></tbody><tfoot><tr><td>Total</td><td>15</td><td>$175</td></tr></tfoot></table>"
      },
      {
        "name": "cards",
        "html": "<table class=\"ds-datatable --cards\"><thead><tr><th>Name</th><th>Status</th><th>Date</th></tr></thead><tbody><tr><td>Item 1</td><td>Active</td><td>2024-01-01</td></tr><tr><td>Item 2</td><td>Inactive</td><td>2024-01-02</td></tr></tbody></table>"
      }
    ]
  },
  "ds-datetime-panel": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-datetime-panel",
    "description": "Date/time picker panel",
    "docUrl": "https://design.soracom.io/design-system/ux-patterns/datetime-panel/",
    "category": "utility",
    "htmlElements": [
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {},
    "structure": {
      "parts": {
        "range": {
          "element": "div",
          "selector": ".__range",
          "required": true
        },
        "recent": {
          "element": "div",
          "selector": ".__recent",
          "required": true
        },
        "relative": {
          "element": "div",
          "selector": ".__relative",
          "required": true
        },
        "timezone": {
          "element": "div",
          "selector": ".__timezone",
          "optional": true
        }
      },
      "patterns": {
        "basic": "<div class=\"ds-datetime-panel\"><div class=\"__range\">{absoluteControls}</div><div class=\"__recent\">{recentRanges}</div><div class=\"__relative\">{relativeRanges}</div></div>"
      }
    },
    "attributes": {},
    "dataAttributes": []
  },
  "ds-details": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-details",
    "description": "Label/value pair display component using dl or table",
    "docUrl": "https://design.soracom.io/design-system/elements/details/",
    "category": "elements",
    "htmlElements": [
      "div",
      "table",
      "dl"
    ],
    "isWebComponent": false,
    "modifiers": {
      "color": {
        "support": "all"
      },
      "visual-state": {
        "support": "all"
      },
      "variant": {
        "support": "custom",
        "values": [
          "--simple",
          "--plain"
        ]
      },
      "layout": {
        "support": "subset",
        "values": [
          "--vertical"
        ]
      },
      "size": {
        "support": "custom",
        "values": [
          "--wide"
        ]
      },
      "state": {
        "support": "subset",
        "values": [
          "--loading"
        ]
      },
      "indent": {
        "support": "all"
      }
    },
    "structure": {
      "parts": {
        "list": {
          "element": "dl",
          "optional": true
        },
        "table": {
          "element": "table",
          "optional": true
        },
        "label": {
          "element": "dt",
          "alternativeElements": [
            "th"
          ],
          "required": true,
          "repeatable": true
        },
        "value": {
          "element": "dd",
          "alternativeElements": [
            "td"
          ],
          "required": true,
          "repeatable": true
        }
      },
      "patterns": {
        "definition-list-wrapper": "<div class=\"ds-details\"><dl><dt>{label}</dt><dd><div>{value}</div></dd></dl></div>",
        "definition-list-root": "<dl class=\"ds-details\"><dt>{label}</dt><dd><div>{value}</div></dd></dl>",
        "table-root": "<table class=\"ds-details\"><tr><th>{label}</th><td><div>{value}</div></td></tr></table>",
        "table-wrapper": "<div class=\"ds-details\"><table><tr><th>{label}</th><td><div>{value}</div></td></tr></table></div>"
      }
    },
    "attributes": {},
    "dataAttributes": [
      {
        "name": "data-label",
        "description": "Enables the responsive stacked layout when present on thead and rows; on table cells, its text becomes the mobile field label.",
        "valueType": "string"
      },
      {
        "name": "data-ds-message",
        "description": "Message text that hides the details contents and renders the SDS message state.",
        "valueType": "string"
      }
    ],
    "examples": [
      {
        "name": "basic-dl",
        "html": "<div class=\"ds-details\"><dl><dt>Label</dt><dd><div>Value</div></dd><dt>Another Label</dt><dd><div>Another Value</div></dd></dl></div>"
      },
      {
        "name": "basic-table",
        "html": "<table class=\"ds-details\"><tr><th>Label</th><td><div>Value</div></td></tr><tr><th>Another Label</th><td><div>Another Value</div></td></tr></table>"
      },
      {
        "name": "vertical",
        "html": "<div class=\"ds-details --vertical\"><dl><dt>Label</dt><dd><div>Value</div></dd><dt>Another Label</dt><dd><div>Another Value</div></dd></dl></div>"
      },
      {
        "name": "simple",
        "html": "<table class=\"ds-details --simple\"><tr><th>Label</th><td>Value</td></tr><tr><th>Another Label</th><td>Another Value</td></tr></table>"
      },
      {
        "name": "plain",
        "html": "<div class=\"ds-details --plain\"><dl><dt>Label</dt><dd><div>Value</div></dd><dt>Another Label</dt><dd><div>Another Value</div></dd></dl></div>"
      },
      {
        "name": "wide",
        "html": "<div class=\"ds-details --wide\"><dl><dt>Label</dt><dd><div>Value</div></dd><dt>Another Label</dt><dd><div>Another Value</div></dd></dl></div>"
      },
      {
        "name": "alert",
        "html": "<div class=\"ds-details --alert\"><dl><dt>Label</dt><dd><div>Value</div></dd></dl></div>"
      },
      {
        "name": "with-footer",
        "html": "<table class=\"ds-details\"><tr><th>Label</th><td><div>Value</div></td></tr><tfoot><tr><td colspan=\"999\"><button class=\"ds-button --plain\"><span>Add row</span></button></td></tr></tfoot></table>"
      }
    ]
  },
  "ds-dialog": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-dialog",
    "description": "Dialog container component",
    "docUrl": "https://design.soracom.io/design-system/containers/dialog/",
    "category": "containers",
    "htmlElements": [
      "dialog",
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "color": {
        "support": "all"
      },
      "visual-state": {
        "support": "all"
      },
      "variant": {
        "support": "custom",
        "values": [
          "--simple",
          "--plain"
        ]
      },
      "size": {
        "support": "custom",
        "values": [
          "--narrow",
          "--mid",
          "--medium",
          "--wide",
          "--auto",
          "--min"
        ]
      },
      "state": {
        "support": "subset",
        "values": [
          "--loading"
        ]
      }
    },
    "structure": {
      "parts": {
        "promotion": {
          "element": "aside",
          "selector": ".ds-promotion",
          "optional": true,
          "position": [
            "first"
          ]
        },
        "header": {
          "element": "header",
          "alternativeElements": [
            "div"
          ],
          "selector": "header, .__header, .ds-banner",
          "required": true
        },
        "main": {
          "element": "section",
          "alternativeElements": [
            "main",
            "div"
          ],
          "selector": "section, .__main",
          "required": true
        },
        "footer": {
          "element": "footer",
          "alternativeElements": [
            "div"
          ],
          "selector": "footer, .__footer",
          "optional": true,
          "position": [
            "last"
          ]
        }
      },
      "patterns": {
        "basic": "<dialog class=\"ds-dialog\" open><header class=\"ds-banner\"><h2>{title}</h2></header><section>{content}</section><footer>{actions}</footer></dialog>",
        "form": "<dialog class=\"ds-dialog\" open><form method=\"dialog\"><header class=\"ds-banner\"><h2>{title}</h2></header><section>{fields}</section><footer>{actions}</footer></form></dialog>",
        "with-promotion": "<dialog class=\"ds-dialog\" open><aside class=\"ds-promotion\">{promotion}</aside><header class=\"ds-banner\"><h2>{title}</h2></header><section>{content}</section><footer>{actions}</footer></dialog>"
      }
    },
    "attributes": {
      "open": {
        "description": "Controls the visible state when ds-dialog is applied to a dialog element.",
        "appliesTo": [
          {
            "elements": [
              "dialog"
            ]
          }
        ]
      },
      "popup": {
        "description": "Displays ds-dialog when the popup attribute is present on a dialog element.",
        "appliesTo": [
          {
            "elements": [
              "dialog"
            ]
          }
        ]
      }
    },
    "dataAttributes": [
      {
        "name": "data-ds-message",
        "description": "Message text that hides the dialog contents and renders the SDS message state.",
        "valueType": "string"
      }
    ],
    "accessibility": {
      "roleContracts": [
        {
          "name": "dialog",
          "description": "Provides dialog semantics when a div is used instead of the native dialog element.",
          "appliesTo": [
            {
              "elements": [
                "div"
              ]
            }
          ]
        }
      ],
      "ariaAttributeContracts": [
        {
          "name": "aria-modal",
          "description": "Indicates whether interaction is limited to the dialog while it is displayed.",
          "values": [
            "true",
            "false"
          ],
          "appliesTo": [
            {
              "elements": [
                "dialog",
                "div"
              ]
            }
          ]
        },
        {
          "name": "aria-label",
          "description": "Provides an accessible dialog name when no visible title labels it.",
          "appliesTo": [
            {
              "elements": [
                "dialog",
                "div"
              ]
            }
          ]
        },
        {
          "name": "aria-labelledby",
          "description": "References the visible element that names the dialog.",
          "appliesTo": [
            {
              "elements": [
                "dialog",
                "div"
              ]
            }
          ]
        },
        {
          "name": "aria-describedby",
          "description": "References concise supporting content that describes the dialog.",
          "appliesTo": [
            {
              "elements": [
                "dialog",
                "div"
              ]
            }
          ]
        }
      ],
      "notes": [
        "Prefer the native dialog element and showModal() for modal behavior and built-in dialog semantics.",
        "When a div fallback is unavoidable, add role=\"dialog\", provide an accessible name, constrain focus while open, and restore focus when closed."
      ]
    },
    "examples": [
      {
        "name": "basic",
        "html": "<dialog class=\"ds-dialog\" open><header class=\"ds-banner\"><div><h2>Dialog Title</h2><p>Description text.</p></div></header><section><p>Dialog content goes here.</p></section><footer><button class=\"ds-button --primary\"><span>Confirm</span></button><button class=\"ds-button\"><span>Cancel</span></button></footer></dialog>"
      },
      {
        "name": "basic-plain-banner",
        "html": "<dialog class=\"ds-dialog\" open><header class=\"ds-banner --plain\"><h2>Dialog Title</h2></header><section><p>Dialog with a plain banner header (no gradient).</p></section><footer><button class=\"ds-button --primary\"><span>Confirm</span></button><button class=\"ds-button\"><span>Cancel</span></button></footer></dialog>"
      },
      {
        "name": "simple",
        "html": "<dialog class=\"ds-dialog --simple\" open><header class=\"ds-banner\"><h2>Simple Dialog</h2></header><section><p>Dialog without the accent border.</p></section><footer><button class=\"ds-button --primary\"><span>OK</span></button></footer></dialog>"
      },
      {
        "name": "plain",
        "html": "<dialog class=\"ds-dialog --plain\" open><header class=\"ds-banner\"><h2>Plain Dialog</h2></header><section><p>Dialog with dark accent border.</p></section><footer><button class=\"ds-button --primary\"><span>Confirm</span></button><button class=\"ds-button\"><span>Cancel</span></button></footer></dialog>"
      },
      {
        "name": "alert",
        "html": "<dialog class=\"ds-dialog --alert\" open><header class=\"ds-banner\"><div><h2>Delete Confirmation</h2><p>This action cannot be undone.</p></div></header><section><p>Are you sure you want to delete this item?</p></section><footer><button class=\"ds-button --alert\"><span>Delete</span></button><button class=\"ds-button\"><span>Cancel</span></button></footer></dialog>"
      },
      {
        "name": "warning",
        "html": "<dialog class=\"ds-dialog --warning\" open><header class=\"ds-banner\"><h2>Warning</h2></header><section><p>This action may have unintended consequences.</p></section><footer><button class=\"ds-button --warning\"><span>Proceed</span></button><button class=\"ds-button\"><span>Cancel</span></button></footer></dialog>"
      },
      {
        "name": "success",
        "html": "<dialog class=\"ds-dialog --success\" open><header class=\"ds-banner\"><h2>Success</h2></header><section><p>Operation completed successfully.</p></section><footer><button class=\"ds-button --success\"><span>Done</span></button></footer></dialog>"
      },
      {
        "name": "narrow",
        "html": "<dialog class=\"ds-dialog --narrow\" open><header class=\"ds-banner\"><h2>Narrow Dialog</h2></header><section><p>A narrower dialog (max 550px).</p></section><footer><button class=\"ds-button --primary\"><span>OK</span></button></footer></dialog>"
      },
      {
        "name": "wide",
        "html": "<dialog class=\"ds-dialog --wide\" open><header class=\"ds-banner\"><div><h2>Wide Dialog</h2><p>A wider dialog (max 1100px).</p></div></header><section><p>Content for wide dialog.</p></section><footer><button class=\"ds-button --primary\"><span>OK</span></button><button class=\"ds-button\"><span>Cancel</span></button></footer></dialog>"
      },
      {
        "name": "with-icon",
        "html": "<dialog class=\"ds-dialog\" open><header class=\"ds-banner\"><i class=\"ds-icon --icon-settings\"></i><div><h2>Settings</h2><p>Configure your preferences.</p></div></header><section><p>Dialog with icon in the banner header.</p></section><footer><button class=\"ds-button --primary\"><span>Save</span></button><button class=\"ds-button\"><span>Cancel</span></button></footer></dialog>"
      },
      {
        "name": "with-form",
        "html": "<dialog class=\"ds-dialog\" open><header class=\"ds-banner\"><div><h2>Edit Settings</h2><p>Update your configuration.</p></div></header><section><label class=\"ds-field\"><div class=\"ds-text --label\">Name</div><div class=\"ds-input\"><input type=\"text\" placeholder=\"Enter name\" /></div></label><label class=\"ds-field\"><div class=\"ds-text --label\">Region</div><div class=\"ds-select\"><select><option>Select region</option><option>Japan</option><option>US</option></select></div></label></section><footer><button class=\"ds-button --primary\"><span>Save</span></button><button class=\"ds-button\"><span>Cancel</span></button></footer></dialog>"
      },
      {
        "name": "with-promotion",
        "html": "<dialog class=\"ds-dialog\" open><aside class=\"ds-promotion\"><p>Promotional content</p></aside><header class=\"ds-banner\"><div><h2>Dialog Title</h2><p>With aside promotion area.</p></div></header><section><p>Main content area.</p></section><footer><button class=\"ds-button --primary\"><span>Action</span></button></footer></dialog>"
      },
      {
        "name": "footer-start",
        "html": "<dialog class=\"ds-dialog\" open><header class=\"ds-banner\"><h2>Dialog Title</h2></header><section><p>Footer with --start makes buttons flow left-to-right.</p></section><footer class=\"--start\"><button class=\"ds-button --primary\"><span>Confirm</span></button><button class=\"ds-button\"><span>Cancel</span></button></footer></dialog>"
      }
    ]
  },
  "ds-disclosure": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-disclosure",
    "description": "Collapsible disclosure widget",
    "docUrl": "https://design.soracom.io/design-system/elements/disclosure/",
    "category": "elements",
    "htmlElements": [
      "details"
    ],
    "isWebComponent": false,
    "modifiers": {
      "color": {
        "support": "all"
      },
      "visual-state": {
        "support": "all"
      },
      "variant": {
        "support": "custom",
        "values": [
          "--simple",
          "--hide-arrow",
          "--light"
        ]
      },
      "icon": {
        "support": "all"
      },
      "indent": {
        "support": "all"
      },
      "gap": {
        "support": "all"
      }
    },
    "structure": {
      "requiredChildren": [
        "summary"
      ],
      "wrapContent": false
    },
    "attributes": {
      "open": {
        "description": "Expands the native details disclosure when present.",
        "appliesTo": [
          {
            "elements": [
              "details"
            ]
          }
        ]
      }
    },
    "dataAttributes": [],
    "accessibility": {
      "notes": [
        "Use the native details element with a summary as its first direct child to retain built-in disclosure semantics and keyboard behavior.",
        "Do not add button roles or duplicate aria-expanded state to the summary element."
      ]
    },
    "examples": [
      {
        "name": "basic",
        "html": "<details class=\"ds-disclosure\"><summary>Click to expand</summary><p>This content is hidden by default and revealed when the disclosure is opened.</p></details>"
      },
      {
        "name": "opened",
        "html": "<details class=\"ds-disclosure\" open><summary>Already Open</summary><p>This disclosure starts in the open state.</p></details>"
      },
      {
        "name": "alert",
        "html": "<details class=\"ds-disclosure --alert\"><summary>Alert Information</summary><p>Important alert content that needs attention.</p></details>"
      },
      {
        "name": "warning",
        "html": "<details class=\"ds-disclosure --warning\"><summary>Warning Notice</summary><p>Warning content that users should be aware of.</p></details>"
      },
      {
        "name": "success",
        "html": "<details class=\"ds-disclosure --success\"><summary>Success Details</summary><p>Additional details about the successful operation.</p></details>"
      },
      {
        "name": "info",
        "html": "<details class=\"ds-disclosure --info\"><summary>More Information</summary><p>Additional information that might be helpful.</p></details>"
      },
      {
        "name": "simple",
        "html": "<details class=\"ds-disclosure --simple\"><summary>Simple Style</summary><p>Simplified disclosure without border.</p></details>"
      },
      {
        "name": "hide-arrow",
        "html": "<details class=\"ds-disclosure --hide-arrow\"><summary>No Arrow</summary><p>This disclosure has no arrow indicator, uses underline text instead.</p></details>"
      },
      {
        "name": "light",
        "html": "<details class=\"ds-disclosure --light\"><summary>Light Disclosure</summary><p>Light disclosure with reduced background opacity.</p></details>"
      },
      {
        "name": "color-blue",
        "html": "<details class=\"ds-disclosure --color-blue\"><summary>Blue Disclosure</summary><p>Content with blue color theme.</p></details>"
      },
      {
        "name": "with-icon",
        "html": "<details class=\"ds-disclosure\"><summary class=\"--icon --icon-question\">FAQ Item</summary><p>Frequently asked question content.</p></details>"
      },
      {
        "name": "with-rich-content",
        "html": "<details class=\"ds-disclosure\"><summary>Advanced Content</summary><h4>Heading</h4><p>Text content</p><div><button class=\"ds-button --primary\"><span>Action</span></button></div></details>"
      }
    ]
  },
  "ds-field": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-field",
    "description": "Form field wrapper container",
    "docUrl": "https://design.soracom.io/design-system/containers/field/",
    "category": "containers",
    "htmlElements": [
      "label",
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "layout": {
        "support": "custom",
        "values": [
          "--start",
          "--bottom",
          "--top-spacer"
        ]
      },
      "notification-state": {
        "support": "all"
      },
      "indent": {
        "support": "all"
      },
      "gap": {
        "support": "all"
      }
    },
    "structure": {
      "parts": {
        "label": {
          "element": "label",
          "alternativeElements": [
            "div"
          ],
          "selector": "label, .ds-label, .ds-text.--label",
          "optional": true,
          "position": [
            "first"
          ]
        },
        "control": {
          "element": "input",
          "alternativeElements": [
            "textarea",
            "select",
            "div",
            "label",
            "details"
          ],
          "selector": ".ds-input, .ds-select, .ds-checkbox, .ds-radio, .ds-range, .ds-switch, .ds-autocomplete, .ds-menubutton",
          "optional": true
        },
        "help": {
          "element": "div",
          "alternativeElements": [
            "p"
          ],
          "selector": ".ds-text, .ds-notice",
          "optional": true,
          "position": [
            "last"
          ]
        }
      },
      "patterns": {
        "label": "<label class=\"ds-field\"><div class=\"ds-text --label\">{label}</div><div class=\"ds-input\"><input type=\"text\"></div></label>",
        "wrapper": "<div class=\"ds-field\"><label class=\"ds-text --label\" for=\"{id}\">{label}</label><div class=\"ds-input\"><input id=\"{id}\" type=\"text\"></div><div class=\"ds-text\">{help}</div></div>"
      }
    },
    "attributes": {
      "for": {
        "description": "Associates the label with a form control when ds-field is applied to a label element.",
        "appliesTo": [
          {
            "elements": [
              "label"
            ]
          },
          {
            "part": "label",
            "elements": [
              "label"
            ]
          }
        ]
      }
    },
    "dataAttributes": [
      {
        "name": "data-notification-counter",
        "description": "Displays a numeric counter badge on the field root. Used with a --notification modifier.",
        "valueType": "number"
      }
    ],
    "examples": [
      {
        "name": "basic",
        "html": "<label class=\"ds-field\"><div class=\"ds-text --label\">Label</div><div class=\"ds-input\"><input type=\"text\" placeholder=\"Enter text\"></div></label>"
      },
      {
        "name": "div-wrapper",
        "html": "<div class=\"ds-field\"><label for=\"field-1\" class=\"ds-text --label\">Label content</label><div class=\"ds-input\"><input id=\"field-1\" type=\"text\"></div><div class=\"ds-text\">Helper text</div></div>"
      },
      {
        "name": "with-select",
        "html": "<label class=\"ds-field\"><div class=\"ds-text --label\">Country</div><div class=\"ds-select\"><select><option>Select country</option><option>Japan</option><option>United States</option></select></div></label>"
      },
      {
        "name": "with-checkbox",
        "html": "<div class=\"ds-field\"><div class=\"ds-text --label\">Agreement</div><label class=\"ds-checkbox\"><input type=\"checkbox\"><span>I agree to the terms</span></label></div>"
      },
      {
        "name": "with-textarea",
        "html": "<label class=\"ds-field\"><div class=\"ds-text --label\">Description</div><div class=\"ds-input\"><textarea placeholder=\"Enter description\"></textarea></div></label>"
      },
      {
        "name": "inline-addon",
        "html": "<label class=\"ds-field\"><div class=\"ds-text --label\">Search</div><div><div class=\"ds-input\"><input type=\"text\" placeholder=\"Search...\"></div><button class=\"ds-button --primary\" type=\"button\"><span>Go</span></button></div></label>"
      },
      {
        "name": "with-notice",
        "html": "<label class=\"ds-field\"><div class=\"ds-text --label\">Email</div><div class=\"ds-input\"><input type=\"email\" placeholder=\"email@example.com\"></div><div class=\"ds-notice --alert\">Please enter a valid email address.</div></label>"
      },
      {
        "name": "file-upload",
        "html": "<label class=\"ds-field\"><div class=\"ds-text --label\">Upload File</div><div class=\"ds-input\"><input type=\"file\"></div></label>"
      },
      {
        "name": "start",
        "html": "<label class=\"ds-field --start\"><div class=\"ds-text --label\">Narrow</div><div class=\"ds-input\"><input type=\"text\" placeholder=\"Min width\"></div></label>"
      }
    ]
  },
  "ds-group": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-group",
    "description": "Generic grouping container",
    "docUrl": "https://design.soracom.io/design-system/containers/group/",
    "category": "containers",
    "htmlElements": [
      "div",
      "fieldset",
      "details"
    ],
    "isWebComponent": false,
    "modifiers": {
      "color": {
        "support": "all"
      },
      "visual-state": {
        "support": "all"
      },
      "notification-state": {
        "support": "all"
      },
      "variant": {
        "support": "custom",
        "values": [
          "--fee",
          "--flow-down"
        ]
      },
      "state": {
        "support": "subset",
        "values": [
          "--loading",
          "--loading-refresh"
        ]
      },
      "icon": {
        "support": "all"
      },
      "gap": {
        "support": "all"
      },
      "indent": {
        "support": "all"
      }
    },
    "structure": {
      "parts": {
        "title": {
          "element": "header",
          "alternativeElements": [
            "legend",
            "summary",
            "div"
          ],
          "selector": "header, legend, summary, .__title",
          "optional": true,
          "position": [
            "first"
          ]
        }
      },
      "patterns": {
        "div": "<div class=\"ds-group\"><header>{title}</header>{content}</div>",
        "fieldset": "<fieldset class=\"ds-group\"><legend>{title}</legend>{content}</fieldset>",
        "disclosure": "<details class=\"ds-group\"><summary>{title}</summary>{content}</details>"
      }
    },
    "attributes": {
      "open": {
        "description": "Controls the expanded state when ds-group is applied to a details element.",
        "appliesTo": [
          {
            "elements": [
              "details"
            ]
          }
        ]
      },
      "disabled": {
        "description": "Disables descendant form controls when ds-group is applied to a fieldset element.",
        "appliesTo": [
          {
            "elements": [
              "fieldset"
            ]
          }
        ]
      }
    },
    "dataAttributes": [
      {
        "name": "data-ds-message",
        "description": "Message text that hides the group contents and renders the SDS message state.",
        "valueType": "string"
      },
      {
        "name": "data-notification-counter",
        "description": "Displays a numeric counter badge on the group. Used with a --notification modifier.",
        "valueType": "number"
      }
    ],
    "examples": [
      {
        "name": "basic",
        "html": "<div class=\"ds-group\"><header>Group Title</header><p class=\"ds-text\">This is a group container that provides proper spacing and organization for related content elements.</p></div>"
      },
      {
        "name": "with-header",
        "html": "<div class=\"ds-group\"><header>Main Heading</header><p class=\"ds-text\">Content paragraph with proper text styling.</p><p class=\"ds-text\">Additional paragraph content.</p></div>"
      },
      {
        "name": "with-banner-header",
        "html": "<div class=\"ds-group\"><header class=\"ds-banner --info\"><p>Important information header</p></header><p class=\"ds-text\">Group content follows the banner header.</p></div>"
      },
      {
        "name": "with-footer",
        "html": "<div class=\"ds-group\"><header>Group with Footer</header><p class=\"ds-text\">Main content area with important information.</p><div class=\"ds-notice --warning\"><p>This is a footer notice providing additional context.</p></div></div>"
      },
      {
        "name": "complete-structure",
        "html": "<div class=\"ds-group\"><header class=\"ds-heading --large\">Complete Group</header><p class=\"ds-text\">Body content with various elements.</p><button class=\"ds-button --primary\">Action Button</button><div class=\"ds-notice --success\"><p>Success footer message</p></div></div>"
      },
      {
        "name": "with-modifiers",
        "html": "<div class=\"ds-group --small --alert --gap-large\"><header>Alert Group</header><p class=\"ds-text\">This group demonstrates size, state, and gap modifiers.</p></div>"
      },
      {
        "name": "with-loading",
        "html": "<div class=\"ds-group --loading --icon-refresh\" data-ds-message=\"Loading content...\"><header>Loading Group</header><p class=\"ds-text\">Content is being loaded.</p></div>"
      },
      {
        "name": "with-notification",
        "html": "<div class=\"ds-group --notification-alert\" data-notification-counter=\"3\"><header>Notifications</header><p class=\"ds-text\">You have important notifications.</p></div>"
      },
      {
        "name": "color-theme",
        "html": "<div class=\"ds-group --color-blue-light\"><header>Themed Group</header><p class=\"ds-text\">This group has a light blue color theme applied.</p></div>"
      },
      {
        "name": "with-allowed-children",
        "html": "<div class=\"ds-group\"><header>Group with Various Children</header><label class=\"ds-field\"><div class=\"ds-text --label\">Input Field</div><div class=\"ds-input\"><input type=\"text\" placeholder=\"Enter text\"></div></label><div class=\"ds-cols\"><div>Column 1</div><div>Column 2</div></div><button class=\"ds-button --primary\">Submit</button></div>"
      }
    ]
  },
  "ds-header": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-header",
    "description": "Page or section header component",
    "docUrl": "https://design.soracom.io/design-system/elements/header/",
    "category": "elements",
    "htmlElements": [
      "header",
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "color": {
        "support": "all"
      },
      "layout": {
        "support": "custom",
        "values": [
          "--sticky",
          "--sticky-0",
          "--sticky-20",
          "--sticky-40",
          "--sticky-60",
          "--sticky-80",
          "--sticky-100",
          "--sticky-120",
          "--sticky-140",
          "--sticky-160",
          "--sticky-180",
          "--sticky-200"
        ]
      },
      "variant": {
        "support": "custom",
        "values": [
          "--dark"
        ]
      }
    },
    "structure": {
      "parts": {
        "logo": {
          "element": "div",
          "alternativeElements": [
            "span"
          ],
          "selector": ".ds-logo",
          "optional": true,
          "position": [
            "first"
          ]
        },
        "title": {
          "element": "span",
          "alternativeElements": [
            "div",
            "h1",
            "h2"
          ],
          "selector": ".ds-text, .ds-heading",
          "optional": true
        },
        "link": {
          "element": "a",
          "selector": ":is(.ds-header, [class*=\"ds-header--\"]) > a",
          "optional": true
        },
        "controls": {
          "element": "aside",
          "alternativeElements": [
            "div"
          ],
          "selector": ".__controls",
          "optional": true,
          "position": [
            "last"
          ]
        }
      },
      "patterns": {
        "basic": "<header class=\"ds-header\"><div class=\"ds-logo\"></div><span class=\"ds-text\">{title}</span></header>",
        "with-controls": "<header class=\"ds-header\"><div class=\"ds-logo\"></div><span class=\"ds-text\">{title}</span><aside class=\"__controls\">{controls}</aside></header>",
        "linked": "<header class=\"ds-header\"><a href=\"{href}\"><div class=\"ds-logo\"></div><span class=\"ds-text\">{title}</span></a></header>"
      }
    },
    "attributes": {
      "href": {
        "description": "Navigation target for the direct header link that wraps the logo and title.",
        "appliesTo": [
          {
            "part": "link",
            "elements": [
              "a"
            ]
          }
        ]
      }
    },
    "dataAttributes": [
      {
        "name": "data-coverage",
        "description": "Selects the Global or Japan coverage theme when set on the header root.",
        "valueType": "token",
        "values": [
          "g",
          "jp"
        ]
      }
    ],
    "examples": [
      {
        "name": "basic",
        "html": "<header class=\"ds-header\"><div class=\"ds-logo\"></div><span class=\"ds-text\">App Title</span></header>"
      },
      {
        "name": "with-controls",
        "html": "<header class=\"ds-header\"><div class=\"ds-logo\"></div><span class=\"ds-text\">App Title</span><aside class=\"__controls\"><button class=\"ds-button --plain --icon-settings\"><span>Settings</span></button></aside></header>"
      },
      {
        "name": "dark",
        "html": "<header class=\"ds-header --dark\"><div class=\"ds-logo\"></div><span class=\"ds-text\">Dark Header</span></header>"
      },
      {
        "name": "color",
        "html": "<header class=\"ds-header --color-blue\"><div class=\"ds-logo\"></div><span class=\"ds-text\">Blue Header</span></header>"
      },
      {
        "name": "sticky",
        "html": "<header class=\"ds-header --sticky\"><div class=\"ds-logo\"></div><span class=\"ds-text\">Sticky Header</span></header>"
      },
      {
        "name": "global-coverage",
        "html": "<header class=\"ds-header\" data-coverage=\"g\"><a href=\"/\"><div class=\"ds-logo\"></div><span class=\"ds-text\">Global Console</span></a></header>"
      }
    ]
  },
  "ds-heading": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-heading",
    "description": "Heading component with hierarchy",
    "docUrl": "https://design.soracom.io/design-system/elements/heading/",
    "category": "elements",
    "htmlElements": [
      "h1",
      "h2",
      "h3",
      "h4",
      "h5",
      "h6",
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "size": {
        "support": "custom",
        "values": [
          "--4xsmall",
          "--3xsmall",
          "--2xsmall",
          "--xsmall",
          "--small",
          "--medium",
          "--large",
          "--xlarge",
          "--2xlarge",
          "--3xlarge",
          "--4xlarge",
          "--huge",
          "--xhuge",
          "--2xhuge",
          "--3xhuge",
          "--4xhuge",
          "--xxsmall",
          "--xxlarge",
          "--xxhuge"
        ]
      },
      "color": {
        "support": "all"
      },
      "visual-state": {
        "support": "all"
      },
      "notification-state": {
        "support": "all"
      },
      "icon": {
        "support": "all"
      },
      "indent": {
        "support": "all"
      }
    },
    "attributes": {},
    "dataAttributes": [
      {
        "name": "data-notification-counter",
        "description": "Displays a numeric counter badge on the heading root. Used with a --notification modifier.",
        "valueType": "number"
      }
    ],
    "examples": [
      {
        "name": "basic",
        "html": "<h2>Heading Text</h2>"
      },
      {
        "name": "h1",
        "html": "<h1>Heading 1</h1>"
      },
      {
        "name": "h3",
        "html": "<h3>Heading 3</h3>"
      },
      {
        "name": "h4",
        "html": "<h4>Heading 4</h4>"
      },
      {
        "name": "small",
        "html": "<h2 class=\"--small\">Small Heading</h2>"
      },
      {
        "name": "large",
        "html": "<h2 class=\"--large\">Large Heading</h2>"
      },
      {
        "name": "xlarge",
        "html": "<h2 class=\"--xlarge\">Extra Large Heading</h2>"
      },
      {
        "name": "2xlarge",
        "html": "<h2 class=\"--2xlarge\">2XL Heading</h2>"
      },
      {
        "name": "color-blue",
        "html": "<h2 class=\"--color-blue\">Blue Heading</h2>"
      },
      {
        "name": "alert",
        "html": "<h2 class=\"--alert\">Alert Heading</h2>"
      },
      {
        "name": "with-icon",
        "html": "<h2 class=\"--icon-star\">Starred Heading</h2>"
      },
      {
        "name": "ds-heading-class",
        "html": "<div class=\"ds-heading --large\">Div as heading</div>"
      }
    ]
  },
  "ds-icon": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-icon",
    "description": "Icon component with SDS icon set",
    "docUrl": "https://design.soracom.io/design-system/images/icons/",
    "category": "elements",
    "htmlElements": [
      "i",
      "ds-icon"
    ],
    "isWebComponent": true,
    "modifiers": {
      "size": {
        "support": "custom",
        "values": [
          "--4xsmall",
          "--3xsmall",
          "--2xsmall",
          "--xsmall",
          "--small",
          "--medium",
          "--large",
          "--xlarge",
          "--2xlarge",
          "--3xlarge",
          "--4xlarge",
          "--huge",
          "--xhuge",
          "--2xhuge",
          "--3xhuge",
          "--4xhuge",
          "--xxtiny",
          "--xtiny",
          "--tiny",
          "--xxsmall",
          "--xxlarge",
          "--xxhuge",
          "--massive",
          "--xmassive",
          "--xxmassive"
        ]
      },
      "color": {
        "support": "all"
      },
      "visual-state": {
        "support": "all"
      },
      "shape": {
        "support": "subset",
        "values": [
          "--round",
          "--square",
          "--rounded"
        ]
      },
      "animation": {
        "support": "subset",
        "values": [
          "--spin",
          "--pulse",
          "--glow",
          "--blink"
        ]
      },
      "indent": {
        "support": "all"
      },
      "icon": {
        "support": "all"
      }
    },
    "attributes": {
      "icon": {
        "description": "Icon name rendered as the corresponding --icon-* class.",
        "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
        "allowUnknown": true,
        "appliesTo": [
          {
            "elements": [
              "ds-icon"
            ]
          }
        ]
      },
      "color": {
        "description": "SDS color name rendered as the corresponding --color-* class.",
        "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$",
        "allowUnknown": true,
        "appliesTo": [
          {
            "elements": [
              "ds-icon"
            ]
          }
        ]
      },
      "size": {
        "description": "Icon size.",
        "values": [
          "4xsmall",
          "3xsmall",
          "2xsmall",
          "xsmall",
          "small",
          "medium",
          "large",
          "xlarge",
          "2xlarge",
          "3xlarge",
          "4xlarge",
          "huge",
          "xhuge",
          "2xhuge",
          "3xhuge",
          "4xhuge",
          "xxtiny",
          "xtiny",
          "tiny",
          "xxsmall",
          "xxlarge",
          "xxhuge",
          "massive",
          "xmassive",
          "xxmassive"
        ],
        "appliesTo": [
          {
            "elements": [
              "ds-icon"
            ]
          }
        ]
      },
      "state": {
        "description": "Visual state applied to the icon.",
        "values": [
          "alert",
          "warning",
          "success",
          "info",
          "muted"
        ],
        "appliesTo": [
          {
            "elements": [
              "ds-icon"
            ]
          }
        ]
      },
      "animation": {
        "description": "One or more comma-separated icon animations.",
        "pattern": "^(spin|pulse|glow|blink)(\\s*,\\s*(spin|pulse|glow|blink))*$",
        "appliesTo": [
          {
            "elements": [
              "ds-icon"
            ]
          }
        ]
      },
      "css": {
        "description": "CSS loading mode. Global CSS is used by default; shadow loads component CSS into Shadow DOM.",
        "values": [
          "global",
          "shadow"
        ],
        "default": "global",
        "appliesTo": [
          {
            "elements": [
              "ds-icon"
            ]
          }
        ]
      }
    },
    "dataAttributes": [],
    "webComponentApi": {
      "tagName": "ds-icon",
      "className": "DsIcon",
      "observedAttributes": [
        "icon",
        "color",
        "size",
        "state",
        "animation"
      ]
    },
    "registries": {
      "icons": {
        "path": "./ds-icons.json",
        "description": "SDS icon metadata, including names, aliases, categories, and source URLs."
      }
    },
    "examples": [
      {
        "name": "basic",
        "html": "<i class=\"ds-icon --icon-user\"></i>"
      },
      {
        "name": "star",
        "html": "<i class=\"ds-icon --icon-star\"></i>"
      },
      {
        "name": "settings",
        "html": "<i class=\"ds-icon --icon-settings\"></i>"
      },
      {
        "name": "search",
        "html": "<i class=\"ds-icon --icon-search\"></i>"
      },
      {
        "name": "close",
        "html": "<i class=\"ds-icon --icon-close\"></i>"
      },
      {
        "name": "check",
        "html": "<i class=\"ds-icon --icon-check\"></i>"
      },
      {
        "name": "warning",
        "html": "<i class=\"ds-icon --icon-warning\"></i>"
      },
      {
        "name": "info",
        "html": "<i class=\"ds-icon --icon-info\"></i>"
      },
      {
        "name": "edit",
        "html": "<i class=\"ds-icon --icon-edit\"></i>"
      },
      {
        "name": "trash",
        "html": "<i class=\"ds-icon --icon-trash\"></i>"
      },
      {
        "name": "download",
        "html": "<i class=\"ds-icon --icon-download\"></i>"
      },
      {
        "name": "upload",
        "html": "<i class=\"ds-icon --icon-upload\"></i>"
      },
      {
        "name": "_comment_sizes",
        "html": "Size examples"
      },
      {
        "name": "xsmall",
        "html": "<i class=\"ds-icon --icon-user --xsmall\"></i>"
      },
      {
        "name": "small",
        "html": "<i class=\"ds-icon --icon-user --small\"></i>"
      },
      {
        "name": "medium",
        "html": "<i class=\"ds-icon --icon-user --medium\"></i>"
      },
      {
        "name": "large",
        "html": "<i class=\"ds-icon --icon-user --large\"></i>"
      },
      {
        "name": "xlarge",
        "html": "<i class=\"ds-icon --icon-user --xlarge\"></i>"
      },
      {
        "name": "2xlarge",
        "html": "<i class=\"ds-icon --icon-user --2xlarge\"></i>"
      },
      {
        "name": "huge",
        "html": "<i class=\"ds-icon --icon-user --huge\"></i>"
      },
      {
        "name": "_comment_colors",
        "html": "Color examples"
      },
      {
        "name": "color-red",
        "html": "<i class=\"ds-icon --icon-heart --color-red\"></i>"
      },
      {
        "name": "color-blue",
        "html": "<i class=\"ds-icon --icon-settings --color-blue\"></i>"
      },
      {
        "name": "color-green",
        "html": "<i class=\"ds-icon --icon-check --color-green\"></i>"
      },
      {
        "name": "color-celeste",
        "html": "<i class=\"ds-icon --icon-star --color-celeste\"></i>"
      },
      {
        "name": "_comment_visual_states",
        "html": "Visual state examples"
      },
      {
        "name": "alert-state",
        "html": "<i class=\"ds-icon --icon-warning --alert\"></i>"
      },
      {
        "name": "success-state",
        "html": "<i class=\"ds-icon --icon-check --success\"></i>"
      },
      {
        "name": "info-state",
        "html": "<i class=\"ds-icon --icon-info --info\"></i>"
      },
      {
        "name": "_comment_shapes",
        "html": "Shape modifiers"
      },
      {
        "name": "round",
        "html": "<i class=\"ds-icon --icon-user --round --large\"></i>"
      },
      {
        "name": "square",
        "html": "<i class=\"ds-icon --icon-user --square --large\"></i>"
      },
      {
        "name": "rounded",
        "html": "<i class=\"ds-icon --icon-user --rounded --large\"></i>"
      },
      {
        "name": "_comment_animations",
        "html": "Animation examples"
      },
      {
        "name": "spin",
        "html": "<i class=\"ds-icon --icon-refresh --spin\"></i>"
      },
      {
        "name": "pulse",
        "html": "<i class=\"ds-icon --icon-heart --pulse\"></i>"
      },
      {
        "name": "glow",
        "html": "<i class=\"ds-icon --icon-star --glow\"></i>"
      },
      {
        "name": "blink",
        "html": "<i class=\"ds-icon --icon-bell --blink\"></i>"
      },
      {
        "name": "_comment_indents",
        "html": "Indent examples"
      },
      {
        "name": "indent-small",
        "html": "<i class=\"ds-icon --icon-user --xlarge --indent-small\"></i>"
      },
      {
        "name": "indent-medium",
        "html": "<i class=\"ds-icon --icon-user --xlarge --indent-medium\"></i>"
      },
      {
        "name": "_comment_complex",
        "html": "Complex combinations"
      },
      {
        "name": "round-large-colored",
        "html": "<i class=\"ds-icon --icon-star --round --large --color-celeste\"></i>"
      },
      {
        "name": "loading-spinner",
        "html": "<i class=\"ds-icon --icon-refresh --spin --medium\"></i>"
      },
      {
        "name": "alert-blink",
        "html": "<i class=\"ds-icon --icon-bell --alert --blink\"></i>"
      }
    ]
  },
  "ds-input": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-input",
    "description": "Text input field component. Supports input, textarea, and div container wrapper. Icons require div wrapper. Includes date/time pickers, color picker, copy-to-clipboard, and resize variants.",
    "docUrl": "https://design.soracom.io/design-system/elements/input/",
    "category": "elements",
    "htmlElements": [
      "input",
      "textarea",
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "size": {
        "support": "subset",
        "values": [
          "--small",
          "--large"
        ]
      },
      "width": {
        "support": "subset",
        "values": [
          "--narrow",
          "--mid",
          "--wide",
          "--extra-wide",
          "--full-width",
          "--full"
        ]
      },
      "visual-state": {
        "support": "all"
      },
      "state": {
        "support": "subset",
        "values": [
          "--disabled"
        ]
      },
      "variant": {
        "support": "custom",
        "values": [
          "--text",
          "--date",
          "--time",
          "--datetime-split",
          "--color-picker",
          "--copy",
          "--addon"
        ]
      },
      "utility": {
        "support": "custom",
        "values": [
          "--resize-horizontal",
          "--resize-vertical",
          "--resize-none",
          "--no-resize",
          "--resize",
          "--narrow",
          "--auto-sizing"
        ]
      },
      "icon": {
        "support": "all"
      }
    },
    "cssCustomProperties": [
      {
        "name": "--ds-input-text-color",
        "default": "var(--color-default)",
        "description": "Text color for the input control"
      },
      {
        "name": "--ds-input-background-color",
        "default": "var(--color-background)",
        "description": "Background color for the input control"
      },
      {
        "name": "--ds-input-border-radius",
        "default": "2px",
        "description": "Border radius for the input and its wrapper"
      }
    ],
    "structure": {
      "containerWrapper": "div",
      "parts": {
        "control": {
          "element": "input",
          "alternativeElements": [
            "textarea"
          ],
          "optional": true
        },
        "addon": {
          "element": "button",
          "alternativeElements": [
            "span"
          ],
          "selector": ".ds-button, .ds-text",
          "optional": true
        }
      },
      "patterns": {
        "input": "<input class=\"ds-input\" type=\"text\">",
        "textarea": "<textarea class=\"ds-input\"></textarea>",
        "wrapper": "<div class=\"ds-input\"><input type=\"text\"></div>",
        "datetime-split": "<div class=\"ds-input --datetime-split\"><input type=\"date\"><input type=\"time\"></div>",
        "addon": "<div class=\"ds-input\"><input type=\"text\"><button class=\"ds-button --addon\" type=\"button\"><span>{action}</span></button></div>"
      }
    },
    "attributes": {
      "type": {
        "description": "Native input type, including text, date, time, datetime-local, and file controls.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "name": {
        "description": "Form field name submitted with the control value.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input",
              "textarea"
            ]
          }
        ]
      },
      "value": {
        "description": "Initial value for an input control. Use text content for textarea values.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "placeholder": {
        "description": "Placeholder text shown when the control is empty.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input",
              "textarea"
            ]
          }
        ]
      },
      "disabled": {
        "description": "Disables the control and applies the SDS disabled appearance.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input",
              "textarea"
            ]
          }
        ]
      },
      "readonly": {
        "description": "Makes the control read-only and applies the SDS read-only appearance.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input",
              "textarea"
            ]
          }
        ]
      },
      "required": {
        "description": "Marks the control as required for native form validation.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input",
              "textarea"
            ]
          }
        ]
      },
      "rows": {
        "description": "Visible text rows for a textarea control.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "textarea"
            ]
          }
        ]
      },
      "min": {
        "description": "Minimum value for date, time, datetime-local, and other constrained input types.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "max": {
        "description": "Maximum value for date, time, datetime-local, and other constrained input types.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "step": {
        "description": "Permitted value increment for date, time, datetime-local, and other constrained input types.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "pattern": {
        "description": "Native validation pattern for input values.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      }
    },
    "dataAttributes": [],
    "examples": [
      {
        "name": "basic",
        "html": "<input class=\"ds-input\" type=\"text\" placeholder=\"Enter text\">"
      },
      {
        "name": "container",
        "html": "<div class=\"ds-input\"><input type=\"text\" placeholder=\"Enter text\"></div>"
      },
      {
        "name": "withLabel",
        "html": "<label class=\"ds-field\"><div class=\"ds-text --label\">Label</div><div class=\"ds-input\"><input type=\"text\" placeholder=\"Enter text\"></div></label>"
      },
      {
        "name": "required",
        "html": "<label class=\"ds-field\"><div class=\"ds-text --label\">Required Field</div><div class=\"ds-input\"><input type=\"text\" placeholder=\"Enter text\" required></div></label>"
      },
      {
        "name": "small",
        "html": "<input class=\"ds-input --small\" type=\"text\" placeholder=\"Small input\">"
      },
      {
        "name": "large",
        "html": "<input class=\"ds-input --large\" type=\"text\" placeholder=\"Large input\">"
      },
      {
        "name": "alert",
        "html": "<input class=\"ds-input --alert\" type=\"text\" placeholder=\"Alert input\">"
      },
      {
        "name": "warning",
        "html": "<input class=\"ds-input --warning\" type=\"text\" placeholder=\"Warning input\">"
      },
      {
        "name": "success",
        "html": "<input class=\"ds-input --success\" type=\"text\" placeholder=\"Success input\">"
      },
      {
        "name": "info",
        "html": "<input class=\"ds-input --info\" type=\"text\" placeholder=\"Info input\">"
      },
      {
        "name": "with-icon",
        "html": "<div class=\"ds-input --icon-search\"><input type=\"text\" placeholder=\"Search...\"></div>"
      },
      {
        "name": "icon-and-state",
        "html": "<div class=\"ds-input --icon-warning --alert\"><input type=\"text\" placeholder=\"Alert with icon\"></div>"
      },
      {
        "name": "textarea",
        "html": "<textarea class=\"ds-input\" placeholder=\"Enter text\"></textarea>"
      },
      {
        "name": "auto-sizing",
        "html": "<textarea class=\"ds-input --auto-sizing\" placeholder=\"Auto-sizing text area\"></textarea>"
      },
      {
        "name": "textarea-container",
        "html": "<div class=\"ds-input\"><textarea placeholder=\"Enter text\"></textarea></div>"
      },
      {
        "name": "date-picker",
        "html": "<div class=\"ds-input --date\"><input type=\"date\"></div>"
      },
      {
        "name": "time-picker",
        "html": "<div class=\"ds-input --time\"><input type=\"time\"></div>"
      },
      {
        "name": "datetime-split",
        "html": "<div class=\"ds-input --datetime-split\"><input type=\"date\"><input type=\"time\"></div>"
      },
      {
        "name": "readonly",
        "html": "<input class=\"ds-input\" type=\"text\" value=\"Read only value\" readonly>"
      },
      {
        "name": "disabled",
        "html": "<input class=\"ds-input\" type=\"text\" placeholder=\"Disabled\" disabled>"
      },
      {
        "name": "addon",
        "html": "<div class=\"ds-input\"><input type=\"text\" placeholder=\"Enter value\"><button class=\"ds-button --addon --primary\">Go</button></div>"
      },
      {
        "name": "file",
        "html": "<input class=\"ds-input\" type=\"file\">"
      },
      {
        "name": "text-style",
        "html": "<input class=\"ds-input --text\" type=\"text\" value=\"Looks like plain text\">"
      },
      {
        "name": "copy",
        "html": "<div class=\"ds-input --copy\"><input type=\"text\" value=\"Text to copy\" readonly><button class=\"ds-button --small --icon-clipboard\"></button></div>"
      }
    ]
  },
  "ds-label": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-label",
    "description": "Label component for forms and content",
    "category": "utility",
    "htmlElements": [
      "label",
      "span"
    ],
    "isWebComponent": false,
    "modifiers": {
      "notification-state": {
        "support": "all"
      }
    },
    "structure": {
      "wrapContent": false,
      "parts": {
        "note": {
          "element": "span",
          "selector": ".__note",
          "optional": true,
          "position": [
            "last"
          ]
        }
      },
      "patterns": {
        "label": "<label class=\"ds-label\" for=\"{id}\">{content}</label>",
        "with-note": "<label class=\"ds-label\" for=\"{id}\">{content}<span class=\"__note\">{note}</span></label>"
      }
    },
    "attributes": {
      "for": {
        "description": "Associates the label with a form control when ds-label is applied to a label element.",
        "appliesTo": [
          {
            "elements": [
              "label"
            ]
          }
        ]
      }
    },
    "dataAttributes": [
      {
        "name": "data-notification-counter",
        "description": "Displays a numeric counter badge on the label root. Used with a --notification modifier.",
        "valueType": "number"
      }
    ]
  },
  "ds-list": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-list",
    "description": "List component with styling options",
    "docUrl": "https://design.soracom.io/design-system/elements/list/",
    "category": "elements",
    "htmlElements": [
      "ul",
      "ol"
    ],
    "isWebComponent": false,
    "modifiers": {
      "variant": {
        "support": "custom",
        "values": [
          "--lined",
          "--numbered",
          "--section"
        ]
      },
      "icon": {
        "support": "all"
      },
      "indent": {
        "support": "all"
      },
      "gap": {
        "support": "all"
      }
    },
    "structure": {
      "requiredChildren": [
        "li"
      ],
      "parts": {
        "item": {
          "element": "li",
          "required": true,
          "repeatable": true
        }
      },
      "patterns": {
        "unordered": "<ul class=\"ds-list\"><li>{item}</li></ul>",
        "ordered": "<ol class=\"ds-list --numbered\"><li>{item}</li></ol>"
      }
    },
    "attributes": {
      "start": {
        "description": "Initial counter value for the SDS numbered ordered-list variant.",
        "pattern": "^(?:[1-9]|[12]\\d|3\\d|40)$",
        "default": "1",
        "appliesTo": [
          {
            "elements": [
              "ol"
            ]
          }
        ]
      }
    },
    "dataAttributes": [],
    "examples": [
      {
        "name": "basic",
        "html": "<ul class=\"ds-list\"><li>List item 1</li><li>List item 2</li><li>List item 3</li></ul>"
      },
      {
        "name": "numbered",
        "html": "<ol class=\"ds-list --numbered\"><li>First item</li><li>Second item</li><li>Third item</li></ol>"
      },
      {
        "name": "numbered-start",
        "html": "<ol class=\"ds-list --numbered\" start=\"4\"><li>Fourth item</li><li>Fifth item</li><li>Sixth item</li></ol>"
      },
      {
        "name": "lined",
        "html": "<ul class=\"ds-list --lined\"><li>Lined item 1</li><li>Lined item 2</li><li>Lined item 3</li></ul>"
      },
      {
        "name": "with-icon",
        "html": "<ul class=\"ds-list --icon --icon-check\"><li>Item with icon</li><li>Another item</li></ul>"
      },
      {
        "name": "item-icons",
        "html": "<ul class=\"ds-list\"><li class=\"--icon --icon-check\">Check item</li><li class=\"--icon --icon-star\">Star item</li><li class=\"--icon --icon-info\">Info item</li></ul>"
      },
      {
        "name": "section-divider",
        "html": "<ul class=\"ds-list --lined\"><li>Group 1 - Item 1</li><li>Group 1 - Item 2</li><li class=\"--section\">Group 2 - Item 1</li><li>Group 2 - Item 2</li></ul>"
      }
    ]
  },
  "ds-menu": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-menu",
    "description": "Menu component for navigation",
    "docUrl": "https://design.soracom.io/design-system/elements/menu/",
    "category": "elements",
    "htmlElements": [
      "div",
      "nav"
    ],
    "isWebComponent": false,
    "modifiers": {
      "variant": {
        "support": "custom",
        "values": [
          "--simple",
          "--toc",
          "--dropdown",
          "--select-menu"
        ]
      },
      "size": {
        "support": "custom",
        "values": [
          "--compact"
        ]
      },
      "width": {
        "support": "subset",
        "values": [
          "--narrow",
          "--mid",
          "--wide",
          "--full"
        ]
      },
      "layout": {
        "support": "custom",
        "values": [
          "--viewport",
          "--max-viewport"
        ]
      },
      "icon": {
        "support": "all"
      }
    },
    "cssCustomProperties": [
      {
        "name": "--ds-menu-height",
        "default": "auto",
        "description": "Fixed menu height before overflow scrolling"
      },
      {
        "name": "--ds-menu-max-height",
        "default": "var(--ds-menu-height)",
        "description": "Maximum menu height before overflow scrolling"
      }
    ],
    "structure": {
      "parts": {
        "label": {
          "element": "div",
          "alternativeElements": [
            "span"
          ],
          "selector": ".ds-text.--label",
          "optional": true,
          "repeatable": true
        },
        "group": {
          "element": "ul",
          "optional": true,
          "repeatable": true
        },
        "item": {
          "element": "li",
          "optional": true,
          "repeatable": true
        },
        "action": {
          "element": "a",
          "alternativeElements": [
            "button"
          ],
          "optional": true,
          "repeatable": true
        }
      },
      "patterns": {
        "links": "<nav class=\"ds-menu\"><ul><li><a href=\"{href}\">{label}</a></li></ul></nav>",
        "actions": "<div class=\"ds-menu\"><ul><li><button type=\"button\">{label}</button></li></ul></div>",
        "groups": "<div class=\"ds-menu\"><div class=\"ds-text --label\">{group}</div><ul><li><a href=\"{href}\">{label}</a></li></ul></div>"
      }
    },
    "attributes": {},
    "dataAttributes": [
      {
        "name": "data-notification-counter",
        "description": "Displays a numeric counter badge when set on a descendant .__item element with a --notification modifier.",
        "valueType": "number"
      }
    ],
    "examples": [
      {
        "name": "basic",
        "html": "<div class=\"ds-menu\"><ul><li><a href=\"#\">Menu Item 1</a></li><li><a href=\"#\">Menu Item 2</a></li><li><a href=\"#\">Menu Item 3</a></li></ul></div>"
      },
      {
        "name": "with-buttons",
        "html": "<div class=\"ds-menu\"><ul><li><button>Action 1</button></li><li><button>Action 2</button></li><li><button>Action 3</button></li></ul></div>"
      },
      {
        "name": "dropdown",
        "html": "<div class=\"ds-menu --dropdown\"><ul><li><button>Edit</button></li><li><button>Duplicate</button></li><li><button>Delete</button></li></ul></div>"
      },
      {
        "name": "simple",
        "html": "<div class=\"ds-menu --simple\"><ul><li><a href=\"#\">Overview</a></li><li><a href=\"#\">Settings</a></li><li><a href=\"#\">Help</a></li></ul></div>"
      },
      {
        "name": "with-icons",
        "html": "<div class=\"ds-menu\"><ul><li><button class=\"ds-text --icon-settings\">Settings</button></li><li><button class=\"ds-text --icon-user\">Account</button></li><li><button class=\"ds-text --icon-support\">Help</button></li></ul></div>"
      },
      {
        "name": "with-groups",
        "html": "<div class=\"ds-menu\"><div class=\"ds-text --label\">Account</div><ul><li><a href=\"#\">Account settings</a></li><li><a href=\"#\">Change email</a></li></ul><div class=\"ds-text --label\">Payment</div><ul><li><button>Billing</button></li><li><button>Payment settings</button></li></ul></div>"
      },
      {
        "name": "compact",
        "html": "<div class=\"ds-menu --compact\"><ul><li><a href=\"#\">Compact Item 1</a></li><li><a href=\"#\">Compact Item 2</a></li><li><a href=\"#\">Compact Item 3</a></li></ul></div>"
      },
      {
        "name": "select-menu",
        "html": "<div class=\"ds-menu --select-menu\"><ul><li><button aria-selected=\"true\">Selected Option</button></li><li><button>Option 2</button></li><li><button>Option 3</button></li></ul></div>"
      },
      {
        "name": "narrow",
        "html": "<div class=\"ds-menu --narrow\"><ul><li><button>Short</button></li><li><button>Items</button></li></ul></div>"
      },
      {
        "name": "wide",
        "html": "<div class=\"ds-menu --wide\"><ul><li><button>Wide menu item 1</button></li><li><button>Wide menu item 2</button></li></ul></div>"
      },
      {
        "name": "toc",
        "html": "<nav class=\"ds-menu --toc\"><ul><li><a href=\"#section-1\">Section 1</a></li><li><a href=\"#section-2\">Section 2</a></li><li><a href=\"#section-3\">Section 3</a></li></ul></nav>"
      }
    ]
  },
  "ds-menubutton": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-menubutton",
    "description": "Button that opens a menu",
    "docUrl": "https://design.soracom.io/design-system/elements/menubutton/",
    "category": "elements",
    "htmlElements": [
      "details",
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "variant": {
        "support": "custom",
        "values": [
          "--inline",
          "--addon",
          "--no-background",
          "--force-background",
          "--no-dismiss",
          "--constrain-vh"
        ]
      },
      "position": {
        "support": "custom",
        "values": [
          "--top",
          "--top-left",
          "--bottom",
          "--right",
          "--fixed-left",
          "--fixed-right",
          "--fixed-top-left",
          "--fixed-top-right"
        ]
      },
      "color": {
        "support": "all"
      }
    },
    "structure": {
      "parts": {
        "trigger": {
          "element": "summary",
          "alternativeElements": [
            "button"
          ],
          "selector": "summary, button, [aria-expanded]",
          "required": true,
          "position": [
            "first"
          ]
        },
        "content": {
          "element": "div",
          "selector": ".ds-menu, .__content",
          "required": true,
          "position": [
            "after trigger"
          ]
        }
      },
      "patterns": {
        "details": "<details class=\"ds-menubutton\"><summary><span class=\"ds-button\"><span>{label}</span></span></summary><div class=\"ds-menu\"><ul><li><button type=\"button\">{action}</button></li></ul></div></details>",
        "scripted": "<div class=\"ds-menubutton\"><button class=\"ds-button\" type=\"button\" aria-expanded=\"false\" aria-haspopup=\"menu\" aria-controls=\"{id}\"><span>{label}</span></button><div id=\"{id}\" class=\"ds-menu\"><ul><li><button type=\"button\">{action}</button></li></ul></div></div>",
        "popover": "<div class=\"ds-menubutton\"><button class=\"ds-button\" type=\"button\" aria-haspopup=\"menu\" popovertarget=\"{id}\"><span>{label}</span></button><div id=\"{id}\" class=\"ds-menu\" popover><ul><li><button type=\"button\">{action}</button></li></ul></div></div>"
      }
    },
    "attributes": {
      "open": {
        "description": "Controls the expanded state when ds-menubutton is applied to a details element.",
        "appliesTo": [
          {
            "elements": [
              "details"
            ]
          }
        ]
      },
      "popovertarget": {
        "description": "References the id of the menu content controlled by a native popover trigger.",
        "appliesTo": [
          {
            "part": "trigger",
            "elements": [
              "button"
            ]
          }
        ]
      },
      "popover": {
        "description": "Enables native popover behavior on the menu content.",
        "default": "auto",
        "appliesTo": [
          {
            "part": "content",
            "elements": [
              "div"
            ]
          }
        ]
      }
    },
    "dataAttributes": [
      {
        "name": "data-ds-viewport",
        "description": "Set to true on the component root after measuring its trigger to constrain menu content to the remaining viewport height.",
        "valueType": "boolean",
        "values": [
          "true"
        ]
      }
    ],
    "accessibility": {
      "ariaAttributeContracts": [
        {
          "name": "aria-expanded",
          "description": "Reports the current menu state for a scripted button trigger.",
          "values": [
            "true",
            "false"
          ],
          "appliesTo": [
            {
              "part": "trigger",
              "elements": [
                "button"
              ]
            }
          ]
        },
        {
          "name": "aria-haspopup",
          "description": "Identifies that the button trigger opens a menu.",
          "values": [
            "menu"
          ],
          "appliesTo": [
            {
              "part": "trigger",
              "elements": [
                "button"
              ]
            }
          ]
        },
        {
          "name": "aria-controls",
          "description": "References the menu content controlled by a scripted button trigger.",
          "appliesTo": [
            {
              "part": "trigger",
              "elements": [
                "button"
              ]
            }
          ]
        }
      ],
      "notes": [
        "Application code must keep aria-expanded synchronized with the visible state of a scripted menu.",
        "A popovertarget trigger uses the browser-managed expanded state and does not need a duplicated aria-expanded attribute."
      ]
    },
    "examples": [
      {
        "name": "basic",
        "html": "<details class=\"ds-menubutton\"><summary><span class=\"ds-button\"><span>Menu</span></span></summary><div class=\"ds-menu\"><ul><li><a href=\"#\">Action 1</a></li><li><a href=\"#\">Action 2</a></li><li><a href=\"#\">Action 3</a></li></ul></div></details>"
      },
      {
        "name": "with-icon",
        "html": "<details class=\"ds-menubutton\"><summary><span class=\"ds-button --icon-settings\"><span>Settings</span></span></summary><div class=\"ds-menu\"><ul><li><a href=\"#\">Preferences</a></li><li><a href=\"#\">Account</a></li><li><button>Logout</button></li></ul></div></details>"
      },
      {
        "name": "top",
        "html": "<details class=\"ds-menubutton --top\"><summary><span class=\"ds-button\"><span>Menu Above</span></span></summary><div class=\"ds-menu\"><ul><li><a href=\"#\">Action 1</a></li><li><a href=\"#\">Action 2</a></li></ul></div></details>"
      },
      {
        "name": "right",
        "html": "<details class=\"ds-menubutton --right\"><summary><span class=\"ds-button\"><span>Menu Right</span></span></summary><div class=\"ds-menu\"><ul><li><a href=\"#\">Action 1</a></li><li><a href=\"#\">Action 2</a></li></ul></div></details>"
      },
      {
        "name": "inline",
        "html": "<details class=\"ds-menubutton --inline\"><summary><span class=\"ds-button\"><span>Inline Menu</span></span></summary><div class=\"ds-menu\"><ul><li><a href=\"#\">Action 1</a></li><li><a href=\"#\">Action 2</a></li></ul></div></details>"
      },
      {
        "name": "no-background",
        "html": "<details class=\"ds-menubutton --no-background\"><summary><span class=\"ds-button --label\"><span>No Overlay</span></span></summary><div class=\"ds-menu\"><ul><li><a href=\"#\">Action 1</a></li><li><a href=\"#\">Action 2</a></li></ul></div></details>"
      },
      {
        "name": "text-trigger",
        "html": "<details class=\"ds-menubutton\"><summary class=\"ds-text\">Text content</summary><div class=\"ds-menu\"><ul><li><a href=\"#\">Action 1</a></li><li><a href=\"#\">Action 2</a></li></ul></div></details>"
      },
      {
        "name": "primary",
        "html": "<details class=\"ds-menubutton\"><summary><span class=\"ds-button --primary --icon-settings\"><span>Button label</span></span></summary><div class=\"ds-menu\"><ul><li><a href=\"#\">Action 1</a></li><li><a href=\"#\">Action 2</a></li></ul></div></details>"
      },
      {
        "name": "with-sections",
        "html": "<details class=\"ds-menubutton\"><summary><span class=\"ds-button --icon-settings\"><span>Settings</span></span></summary><div class=\"ds-menu\"><div class=\"ds-text --label\">Account</div><ul><li><a href=\"#\" class=\"ds-text --icon-settings\">Account settings</a></li><li><a href=\"#\" class=\"ds-text --icon-signin\">Change email</a></li></ul><div class=\"ds-text --label\">Payment</div><ul><li><a href=\"#\">Billing</a></li><li><a href=\"#\">Payment settings</a></li></ul></div></details>"
      },
      {
        "name": "popover",
        "html": "<div class=\"ds-menubutton\"><button class=\"ds-button\" type=\"button\" aria-haspopup=\"menu\" popovertarget=\"example-menubutton-popover\"><span>Menu</span></button><div id=\"example-menubutton-popover\" class=\"ds-menu\" popover><ul><li><a href=\"#\">Action 1</a></li><li><a href=\"#\">Action 2</a></li><li><a href=\"#\">Action 3</a></li></ul></div></div>"
      },
      {
        "name": "div-button",
        "html": "<div class=\"ds-menubutton\"><button class=\"ds-button\" type=\"button\" aria-expanded=\"false\" aria-haspopup=\"menu\" aria-controls=\"example-menubutton-menu\"><span>Menu</span></button><div id=\"example-menubutton-menu\" class=\"ds-menu\"><ul><li><a href=\"#\">Action 1</a></li><li><a href=\"#\">Action 2</a></li><li><a href=\"#\">Action 3</a></li></ul></div></div>"
      }
    ]
  },
  "ds-modal": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-modal",
    "description": "Modal overlay container",
    "docUrl": "https://design.soracom.io/design-system/containers/modal/",
    "category": "containers",
    "htmlElements": [
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {},
    "structure": {
      "parts": {
        "dialog": {
          "element": "dialog",
          "alternativeElements": [
            "div"
          ],
          "selector": ".ds-dialog",
          "optional": true
        },
        "image": {
          "element": "img",
          "optional": true
        }
      },
      "patterns": {
        "content": "<div class=\"ds-modal\"><div>{content}</div></div>",
        "dialog": "<div class=\"ds-modal\"><dialog class=\"ds-dialog\" open>{content}</dialog></div>",
        "image": "<div class=\"ds-modal\"><img src=\"{src}\" alt=\"{alt}\"></div>"
      }
    },
    "attributes": {},
    "dataAttributes": [
      {
        "name": "data-ds-message",
        "description": "Message text that hides the modal contents and renders the SDS message state.",
        "valueType": "string"
      }
    ],
    "accessibility": {
      "notes": [
        "Treat ds-modal as the visual backdrop; its ds-dialog descendant owns the dialog role and accessible name.",
        "When displayed, prevent interaction with background content and keep keyboard focus within the active dialog."
      ]
    },
    "examples": [
      {
        "name": "basic",
        "html": "<div class=\"ds-modal\"><div class=\"ds-dialog\"><header><h2>Modal Title</h2></header><section><p>Modal content goes here.</p></section><footer><div class=\"ds-controls\"><button class=\"ds-button --plain\">Cancel</button><button class=\"ds-button --primary\">Confirm</button></div></footer></div></div>"
      }
    ]
  },
  "ds-notice": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-notice",
    "description": "Notice/alert component",
    "docUrl": "https://design.soracom.io/design-system/elements/notice/",
    "category": "elements",
    "htmlElements": [
      "div",
      "a"
    ],
    "isWebComponent": false,
    "modifiers": {
      "color": {
        "support": "all"
      },
      "gradient": {
        "support": "all"
      },
      "visual-state": {
        "support": "all"
      },
      "variant": {
        "support": "custom",
        "values": [
          "--plain",
          "--light",
          "--strong",
          "--fee",
          "--flag",
          "--pinned",
          "--flow-down"
        ]
      },
      "layout": {
        "support": "custom",
        "values": [
          "--center"
        ]
      },
      "state": {
        "support": "subset",
        "values": [
          "--loading",
          "--loading-refresh"
        ]
      },
      "icon": {
        "support": "all"
      },
      "indent": {
        "support": "all"
      }
    },
    "structure": {
      "parts": {
        "pinnedTag": {
          "element": "span",
          "alternativeElements": [
            "p"
          ],
          "selector": ".ds-tag.--pinned",
          "optional": true,
          "position": [
            "first"
          ]
        },
        "close": {
          "element": "button",
          "selector": ".__close, .ds-button.--close",
          "optional": true,
          "position": [
            "first"
          ]
        },
        "heading": {
          "element": "h2",
          "alternativeElements": [
            "h3",
            "h4"
          ],
          "optional": true
        },
        "action": {
          "element": "a",
          "alternativeElements": [
            "button"
          ],
          "selector": ".ds-button",
          "optional": true,
          "position": [
            "last"
          ]
        }
      },
      "patterns": {
        "basic": "<div class=\"ds-notice\"><p>{content}</p></div>",
        "heading": "<div class=\"ds-notice\"><h3>{title}</h3><p>{content}</p></div>",
        "dismissible": "<div class=\"ds-notice\"><button class=\"ds-button --close\" type=\"button\"><span>{closeLabel}</span></button><p>{content}</p></div>"
      }
    },
    "attributes": {
      "href": {
        "description": "Navigation target when the notice root or its action is an anchor.",
        "appliesTo": [
          {
            "elements": [
              "a"
            ]
          },
          {
            "part": "action",
            "elements": [
              "a"
            ]
          }
        ]
      }
    },
    "dataAttributes": [
      {
        "name": "data-ds-message",
        "description": "Message text that hides the notice contents and renders the SDS message state.",
        "valueType": "string"
      }
    ],
    "examples": [
      {
        "name": "basic",
        "html": "<div class=\"ds-notice\"><p>Notice message</p></div>"
      },
      {
        "name": "alert",
        "html": "<div class=\"ds-notice --alert\"><p>Alert notice with automatic warning icon.</p></div>"
      },
      {
        "name": "warning",
        "html": "<div class=\"ds-notice --warning\"><p>Warning notice with automatic notice icon.</p></div>"
      },
      {
        "name": "success",
        "html": "<div class=\"ds-notice --success\"><p>Success notice with automatic check icon.</p></div>"
      },
      {
        "name": "info",
        "html": "<div class=\"ds-notice --info\"><p>Info notice with automatic info icon.</p></div>"
      },
      {
        "name": "strong",
        "html": "<div class=\"ds-notice --strong\"><p>Strong notice with full background and contrasting text.</p></div>"
      },
      {
        "name": "plain",
        "html": "<div class=\"ds-notice --plain\"><p>Plain notice with transparent background.</p></div>"
      },
      {
        "name": "light",
        "html": "<div class=\"ds-notice --light\"><p>Light notice with reduced background opacity.</p></div>"
      },
      {
        "name": "fee",
        "html": "<div class=\"ds-notice --fee\"><p>Fee notice with gradient styling.</p></div>"
      },
      {
        "name": "flag",
        "html": "<div class=\"ds-notice --flag\"><p>Flag-style notice.</p></div>"
      },
      {
        "name": "pinned",
        "html": "<div class=\"ds-notice --pinned\"><p>Pinned notice with no border radius, for top-of-page placement.</p></div>"
      },
      {
        "name": "center",
        "html": "<div class=\"ds-notice --center\"><p>Centered notice.</p></div>"
      },
      {
        "name": "message",
        "html": "<div class=\"ds-notice\" data-ds-message=\"No additional information\"><p>Notice content</p></div>"
      },
      {
        "name": "with-icon",
        "html": "<div class=\"ds-notice --icon-star\"><p>Custom icon notice.</p></div>"
      },
      {
        "name": "color-blue",
        "html": "<div class=\"ds-notice --color-blue\"><p>Blue notice.</p></div>"
      },
      {
        "name": "with-close-button",
        "html": "<div class=\"ds-notice --info\"><button class=\"ds-button --close\" title=\"Close\"><span>Close</span></button><p>Notice with a close button.</p></div>"
      },
      {
        "name": "with-heading",
        "html": "<div class=\"ds-notice --alert\"><h3>Important Notice</h3><p>Alert notice with a heading.</p></div>"
      }
    ]
  },
  "ds-plan": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-plan",
    "description": "Plan/pricing display component",
    "docUrl": "https://design.soracom.io/design-system/web-components/plan/",
    "category": "specialized",
    "htmlElements": [
      "ds-plan"
    ],
    "isWebComponent": true,
    "modifiers": {
      "size": {
        "support": "subset",
        "values": [
          "--xsmall",
          "--small",
          "--medium",
          "--large"
        ]
      }
    },
    "webComponentApi": {
      "tagName": "ds-plan",
      "className": "DsPlan",
      "observedAttributes": [
        "size",
        "type",
        "name",
        "plan",
        "bundle",
        "imsi",
        "icon",
        "bundle-icon",
        "imsi-icon"
      ],
      "slots": [
        {
          "name": "",
          "description": "Plan key text used when the plan attribute is omitted."
        }
      ]
    },
    "attributes": {
      "plan": {
        "description": "SORACOM plan key. Unknown keys render with fallback colors and a normalized label.",
        "allowUnknown": true,
        "appliesTo": [
          {
            "elements": [
              "ds-plan"
            ]
          }
        ]
      },
      "bundle": {
        "description": "Optional bundle label displayed after the plan label.",
        "appliesTo": [
          {
            "elements": [
              "ds-plan"
            ]
          }
        ]
      },
      "imsi": {
        "description": "Optional IMSI label displayed after the bundle label.",
        "pattern": "^\\d{15}$",
        "appliesTo": [
          {
            "elements": [
              "ds-plan"
            ]
          }
        ]
      },
      "icon": {
        "description": "Optional icon name added to the rendered ds-tag as a --icon-* modifier.",
        "pattern": "^((--)?icon-)?[a-z0-9]+(-[a-z0-9]+)*$",
        "appliesTo": [
          {
            "elements": [
              "ds-plan"
            ]
          }
        ]
      },
      "bundle-icon": {
        "description": "Optional icon name added to the bundle label as a --icon-* modifier.",
        "pattern": "^((--)?icon-)?[a-z0-9]+(-[a-z0-9]+)*$",
        "appliesTo": [
          {
            "elements": [
              "ds-plan"
            ]
          }
        ]
      },
      "imsi-icon": {
        "description": "Optional icon name added to the IMSI label as a --icon-* modifier.",
        "pattern": "^((--)?icon-)?[a-z0-9]+(-[a-z0-9]+)*$",
        "appliesTo": [
          {
            "elements": [
              "ds-plan"
            ]
          }
        ]
      },
      "size": {
        "description": "Display size.",
        "values": [
          "xsmall",
          "small",
          "medium",
          "large"
        ],
        "appliesTo": [
          {
            "elements": [
              "ds-plan"
            ]
          }
        ]
      },
      "type": {
        "description": "Optional input control type.",
        "values": [
          "checkbox",
          "radio"
        ],
        "appliesTo": [
          {
            "elements": [
              "ds-plan"
            ]
          }
        ]
      },
      "name": {
        "description": "Input name used when type is radio or checkbox.",
        "appliesTo": [
          {
            "elements": [
              "ds-plan"
            ]
          }
        ]
      },
      "css": {
        "description": "CSS loading mode. Global CSS is used by default; shadow loads component CSS into Shadow DOM.",
        "values": [
          "global",
          "shadow"
        ],
        "default": "global",
        "appliesTo": [
          {
            "elements": [
              "ds-plan"
            ]
          }
        ]
      }
    },
    "dataAttributes": [],
    "registries": {
      "plans": {
        "path": "./plans.json",
        "description": "Supported SORACOM plan keys, display names, background color classes, and text color classes."
      }
    },
    "examples": [
      {
        "name": "basic",
        "html": "<ds-plan>plan01s</ds-plan>"
      },
      {
        "name": "with-plan-attr",
        "html": "<ds-plan plan=\"planX3\"></ds-plan>"
      },
      {
        "name": "xsmall",
        "html": "<ds-plan plan=\"planX3\" size=\"xsmall\"></ds-plan>"
      },
      {
        "name": "small",
        "html": "<ds-plan plan=\"planX3\" size=\"small\"></ds-plan>"
      },
      {
        "name": "medium",
        "html": "<ds-plan plan=\"planX3\" size=\"medium\"></ds-plan>"
      },
      {
        "name": "large",
        "html": "<ds-plan plan=\"planX3\" size=\"large\"></ds-plan>"
      },
      {
        "name": "with-bundle",
        "html": "<ds-plan plan=\"planK\" bundle=\"K bundle\"></ds-plan>"
      },
      {
        "name": "with-imsi",
        "html": "<ds-plan plan=\"planUS\" bundle=\"5GB\" imsi=\"295050123456789\"></ds-plan>"
      },
      {
        "name": "with-icon",
        "html": "<ds-plan plan=\"planX3\" icon=\"chart\"></ds-plan>"
      },
      {
        "name": "with-label-icons",
        "html": "<ds-plan plan=\"planUS\" bundle=\"5GB\" imsi=\"295050123456789\" bundle-icon=\"archive\" imsi-icon=\"sim\"></ds-plan>"
      },
      {
        "name": "as-checkbox",
        "html": "<ds-plan plan=\"planX3\" type=\"checkbox\"></ds-plan>"
      },
      {
        "name": "as-radio",
        "html": "<ds-plan plan=\"planX3\" type=\"radio\" name=\"selected-plan\"></ds-plan>"
      },
      {
        "name": "global-css",
        "html": "<ds-plan plan=\"planX3\" css=\"global\"></ds-plan>"
      }
    ]
  },
  "ds-progress-steps": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-progress-steps",
    "description": "Step progress indicator",
    "docUrl": "https://design.soracom.io/design-system/elements/progress-steps/",
    "category": "elements",
    "htmlElements": [
      "ul",
      "ol"
    ],
    "isWebComponent": false,
    "modifiers": {
      "utility": {
        "support": "custom",
        "values": [
          "--1",
          "--2",
          "--3",
          "--4",
          "--5",
          "--6",
          "--7",
          "--8",
          "--9",
          "--10"
        ]
      }
    },
    "structure": {
      "requiredChildren": [
        "li"
      ],
      "parts": {
        "step": {
          "element": "li",
          "required": true,
          "repeatable": true
        }
      },
      "patterns": {
        "unordered": "<ul class=\"ds-progress-steps\"><li>{step}</li></ul>",
        "ordered": "<ol class=\"ds-progress-steps\"><li>{step}</li></ol>"
      }
    },
    "attributes": {},
    "dataAttributes": [],
    "examples": [
      {
        "name": "basic",
        "html": "<ul class=\"ds-progress-steps\"><li>Step 1</li><li>Step 2</li><li>Step 3</li><li>Step 4</li></ul>"
      },
      {
        "name": "step-1",
        "html": "<ul class=\"ds-progress-steps --1\"><li>Register</li><li>Configure</li><li>Verify</li><li>Complete</li></ul>"
      },
      {
        "name": "step-2",
        "html": "<ul class=\"ds-progress-steps --2\"><li>Register</li><li>Configure</li><li>Verify</li><li>Complete</li></ul>"
      },
      {
        "name": "step-3",
        "html": "<ul class=\"ds-progress-steps --3\"><li>Register</li><li>Configure</li><li>Verify</li><li>Complete</li></ul>"
      },
      {
        "name": "completed",
        "html": "<ul class=\"ds-progress-steps --4\"><li>Register</li><li>Configure</li><li>Verify</li><li>Complete</li></ul>"
      }
    ]
  },
  "ds-promotion": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-promotion",
    "description": "Promotion/offer display",
    "category": "specialized",
    "htmlElements": [
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {},
    "attributes": {},
    "dataAttributes": []
  },
  "ds-radio": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-radio",
    "description": "Radio button input component",
    "docUrl": "https://design.soracom.io/design-system/elements/radio/",
    "category": "elements",
    "htmlElements": [
      "label",
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "size": {
        "support": "subset",
        "values": [
          "--small",
          "--medium",
          "--large"
        ]
      },
      "color": {
        "support": "all"
      },
      "visual-state": {
        "support": "all"
      },
      "state": {
        "support": "subset",
        "values": [
          "--disabled"
        ]
      },
      "variant": {
        "support": "custom",
        "values": [
          "--panel",
          "--panel-simple",
          "--dots",
          "--swatch",
          "--round",
          "--square",
          "--hide-label",
          "--image",
          "--fee"
        ]
      },
      "icon": {
        "support": "all"
      },
      "indent": {
        "support": "all"
      },
      "gap": {
        "support": "all"
      }
    },
    "cssCustomProperties": [
      {
        "name": "--ds-radio-color",
        "description": "Custom swatch color used by the --swatch variant"
      }
    ],
    "structure": {
      "parts": {
        "control": {
          "element": "input",
          "selector": "input[type=\"radio\"]",
          "attributes": {
            "type": "radio"
          },
          "optional": true,
          "position": [
            "first"
          ]
        },
        "label": {
          "element": "div",
          "alternativeElements": [
            "span"
          ],
          "optional": true,
          "position": [
            "after control"
          ]
        },
        "option": {
          "element": "label",
          "optional": true,
          "repeatable": true
        }
      },
      "patterns": {
        "single": "<label class=\"ds-radio\"><input type=\"radio\" name=\"{name}\"><div>{label}</div></label>",
        "group": "<div class=\"ds-radio --panel\"><label><input type=\"radio\" name=\"{name}\"><div>{label}</div></label><label><input type=\"radio\" name=\"{name}\"><div>{label}</div></label></div>"
      }
    },
    "attributes": {},
    "dataAttributes": [
      {
        "name": "data-ds-message",
        "description": "Message text that hides the radio contents and renders the SDS message state.",
        "valueType": "string"
      }
    ],
    "examples": [
      {
        "name": "basic",
        "html": "<label class=\"ds-radio\"><input type=\"radio\" name=\"group\" /><div>Radio option</div></label>"
      },
      {
        "name": "checked",
        "html": "<label class=\"ds-radio\"><input type=\"radio\" name=\"group\" checked /><div>Selected option</div></label>"
      },
      {
        "name": "small",
        "html": "<label class=\"ds-radio --small\"><input type=\"radio\" name=\"group\" /><div>Small</div></label>"
      },
      {
        "name": "large",
        "html": "<label class=\"ds-radio --large\"><input type=\"radio\" name=\"group\" /><div>Large</div></label>"
      },
      {
        "name": "alert",
        "html": "<label class=\"ds-radio --alert\"><input type=\"radio\" name=\"group\" checked /><div>Alert</div></label>"
      },
      {
        "name": "success",
        "html": "<label class=\"ds-radio --success\"><input type=\"radio\" name=\"group\" checked /><div>Success</div></label>"
      },
      {
        "name": "color-blue",
        "html": "<label class=\"ds-radio --color-blue\"><input type=\"radio\" name=\"group\" checked /><div>Blue</div></label>"
      },
      {
        "name": "color-purple",
        "html": "<label class=\"ds-radio --color-purple\"><input type=\"radio\" name=\"group\" checked /><div>Purple</div></label>"
      },
      {
        "name": "with-icon",
        "html": "<label class=\"ds-radio --icon-rocket\"><input type=\"radio\" name=\"group\" /><div>With icon</div></label>"
      },
      {
        "name": "panel",
        "html": "<label class=\"ds-radio --panel\"><input type=\"radio\" name=\"group\" /><div>Panel radio</div></label>"
      },
      {
        "name": "panel-simple",
        "html": "<label class=\"ds-radio --panel-simple\"><input type=\"radio\" name=\"group\" /><div>Simple panel</div></label>"
      },
      {
        "name": "dots",
        "html": "<label class=\"ds-radio --dots\"><input type=\"radio\" name=\"group\" /><div>A</div></label>"
      },
      {
        "name": "swatch",
        "html": "<label class=\"ds-radio --swatch\"><input type=\"radio\" name=\"group\" /><div>A</div></label>"
      },
      {
        "name": "square",
        "html": "<label class=\"ds-radio --square\"><input type=\"radio\" name=\"group\" /><div>A</div></label>"
      },
      {
        "name": "hide-label",
        "html": "<label class=\"ds-radio --hide-label --tip-right\"><input type=\"radio\" name=\"group\" /><div>Tooltip text</div></label>"
      },
      {
        "name": "disabled",
        "html": "<label class=\"ds-radio\"><input type=\"radio\" name=\"group\" disabled /><div>Disabled</div></label>"
      }
    ]
  },
  "ds-range": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-range",
    "description": "Range slider input component",
    "docUrl": "https://design.soracom.io/design-system/elements/range/",
    "category": "elements",
    "htmlElements": [
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {},
    "structure": {
      "parts": {
        "control": {
          "element": "input",
          "selector": "input[type=\"range\"]",
          "attributes": {
            "type": "range"
          },
          "required": true
        },
        "ticks": {
          "element": "datalist",
          "optional": true,
          "position": [
            "after control"
          ]
        },
        "icon": {
          "element": "i",
          "selector": ".ds-icon",
          "optional": true,
          "repeatable": true
        },
        "action": {
          "element": "button",
          "selector": ".ds-button",
          "optional": true,
          "position": [
            "last"
          ]
        }
      },
      "patterns": {
        "basic": "<div class=\"ds-range\"><input type=\"range\"></div>",
        "ticks": "<div class=\"ds-range\"><span><input type=\"range\" list=\"{id}\"><datalist id=\"{id}\"><option value=\"{value}\">{label}</option></datalist></span></div>",
        "with-icons": "<div class=\"ds-range\"><i class=\"ds-icon {startIcon}\"></i><input type=\"range\"><i class=\"ds-icon {endIcon}\"></i></div>"
      }
    },
    "attributes": {
      "type": {
        "description": "Required native input type for the range control.",
        "values": [
          "range"
        ],
        "default": "range",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "name": {
        "description": "Form field name submitted with the range value.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "value": {
        "description": "Initial value for the range control.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "min": {
        "description": "Minimum permitted range value.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "max": {
        "description": "Maximum permitted range value.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "step": {
        "description": "Permitted increment between range values.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "list": {
        "description": "ID of a datalist that supplies tick marks for the range control.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "disabled": {
        "description": "Disables the range control and applies the SDS disabled appearance.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      }
    },
    "dataAttributes": [],
    "examples": [
      {
        "name": "basic",
        "html": "<div class=\"ds-range\"><input type=\"range\"></div>"
      },
      {
        "name": "withLabel",
        "html": "<label class=\"ds-field\"><div class=\"ds-text --label\">Volume</div><div class=\"ds-range\"><input type=\"range\" min=\"0\" max=\"100\" value=\"50\"></div></label>"
      },
      {
        "name": "with-datalist",
        "html": "<div class=\"ds-range\"><span><input type=\"range\" min=\"0\" max=\"100\" value=\"50\" list=\"range-ticks\" step=\"25\"><datalist id=\"range-ticks\"><option value=\"0\">0</option><option value=\"25\">25</option><option value=\"50\">50</option><option value=\"75\">75</option><option value=\"100\">100</option></datalist></span></div>"
      },
      {
        "name": "disabled",
        "html": "<div class=\"ds-range\"><input type=\"range\" disabled></div>"
      },
      {
        "name": "with-button",
        "html": "<div class=\"ds-range\"><input type=\"range\"><button class=\"ds-button\"><span>Apply</span></button></div>"
      },
      {
        "name": "with-icons",
        "html": "<div class=\"ds-range\"><i class=\"ds-icon --icon-toy-horse --bottom\" data-ds-texttip=\"Slow\"></i><input type=\"range\" min=\"1\" max=\"12\" step=\"1\"><i class=\"ds-icon --icon-rocket --bottom\" data-ds-texttip=\"Fast\"></i></div>"
      }
    ]
  },
  "ds-required": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-required",
    "description": "Required field indicator",
    "docUrl": "https://design.soracom.io/design-system/web-components/required/",
    "category": "utility",
    "htmlElements": [
      "ds-required"
    ],
    "isWebComponent": true,
    "modifiers": {},
    "attributes": {
      "css": {
        "description": "CSS loading mode. Global CSS is used by default; shadow loads base CSS into Shadow DOM.",
        "values": [
          "global",
          "shadow"
        ],
        "default": "global",
        "appliesTo": [
          {
            "elements": [
              "ds-required"
            ]
          }
        ]
      }
    },
    "dataAttributes": [],
    "webComponentApi": {
      "tagName": "ds-required",
      "className": "DsRequired",
      "observedAttributes": []
    },
    "examples": [
      {
        "name": "basic",
        "html": "<ds-required></ds-required>"
      },
      {
        "name": "in-label",
        "html": "<label class=\"ds-field\"><div class=\"ds-text --label\">Name <ds-required></ds-required></div><div class=\"ds-input\"><input type=\"text\" placeholder=\"Enter name\" required></div></label>"
      },
      {
        "name": "native-abbr",
        "html": "<abbr class=\"--required\" title=\"required\">*</abbr>"
      }
    ]
  },
  "ds-richtip": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-richtip",
    "description": "Rich content tooltip component",
    "docUrl": "https://design.soracom.io/design-system/elements/richtip/",
    "category": "elements",
    "htmlElements": [
      "div",
      "details"
    ],
    "isWebComponent": false,
    "modifiers": {
      "state": {
        "support": "subset",
        "values": [
          "--active"
        ]
      },
      "visual-state": {
        "support": "all"
      },
      "color": {
        "support": "all"
      },
      "position": {
        "support": "custom",
        "values": [
          "--tip-top-left",
          "--tip-top",
          "--tip-top-right",
          "--tip-bottom-left",
          "--tip-bottom",
          "--tip-bottom-right",
          "--tip-left-top",
          "--tip-left",
          "--tip-left-bottom",
          "--tip-right-top",
          "--tip-right",
          "--tip-right-bottom"
        ]
      }
    },
    "cssCustomProperties": [
      {
        "name": "--ds-richtip-max-width",
        "default": "340px",
        "description": "Maximum width of the rich tooltip content"
      }
    ],
    "structure": {
      "parts": {
        "trigger": {
          "element": "summary",
          "alternativeElements": [
            "button",
            "i",
            "div"
          ],
          "selector": "summary, [class*=\"__button\"]",
          "required": true,
          "position": [
            "first"
          ]
        },
        "content": {
          "element": "div",
          "selector": "[class*=\"__content\"]",
          "required": true,
          "position": [
            "after trigger"
          ]
        }
      },
      "patterns": {
        "hover": "<div class=\"ds-richtip\"><i class=\"ds-icon --icon-info __button\"></i><div class=\"__content\">{content}</div></div>",
        "details": "<details class=\"ds-richtip\"><summary><i class=\"ds-icon --icon-info\"></i></summary><div class=\"__content\">{content}</div></details>"
      }
    },
    "attributes": {
      "open": {
        "description": "Opens the rich tooltip when the component uses a native details element.",
        "appliesTo": [
          {
            "elements": [
              "details"
            ]
          }
        ]
      }
    },
    "dataAttributes": [],
    "examples": [
      {
        "name": "basic",
        "html": "<div class=\"ds-richtip\"><i class=\"ds-icon --icon-info ds-richtip__button\"></i><div class=\"ds-richtip__content\">Global multicarrier cellular connectivity <strong>built for IoT & M2M</strong>. Pay as you go with no commitments and all the <a href=\"#\">tools you need</a> to manage and secure your IoT network and devices.</div></div>"
      },
      {
        "name": "text-trigger",
        "html": "<div class=\"ds-richtip\"><div class=\"ds-richtip__button ds-text\">Text Content</div><div class=\"ds-richtip__content\">Rich tooltip content with <strong>formatting</strong>.</div></div>"
      },
      {
        "name": "button-trigger",
        "html": "<div class=\"ds-richtip\"><button class=\"ds-button ds-richtip__button\"><span>Button label</span></button><div class=\"ds-richtip__content\">Rich tooltip content with <strong>formatting</strong>.</div></div>"
      },
      {
        "name": "details",
        "html": "<details class=\"ds-richtip\"><summary><i class=\"ds-icon --icon-info\"></i></summary><div class=\"ds-richtip__content\">Click the icon to toggle this rich content tooltip.</div></details>"
      },
      {
        "name": "active",
        "html": "<div class=\"ds-richtip --active\"><i class=\"ds-icon --icon-info ds-richtip__button\"></i><div class=\"ds-richtip__content\">This tooltip is always visible with the <code>--active</code> modifier.</div></div>"
      }
    ]
  },
  "ds-rows": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-rows",
    "description": "Row-based layout container",
    "docUrl": "https://design.soracom.io/design-system/containers/rows/",
    "category": "containers",
    "htmlElements": [
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "layout": {
        "support": "custom",
        "values": [
          "--middle",
          "--center",
          "--grow",
          "--limit"
        ]
      },
      "state": {
        "support": "subset",
        "values": [
          "--loading"
        ]
      },
      "gap": {
        "support": "all"
      },
      "indent": {
        "support": "all"
      },
      "utility": {
        "support": "custom",
        "values": [
          "--1",
          "--2",
          "--3",
          "--4",
          "--5",
          "--6",
          "--7",
          "--8",
          "--9",
          "--10",
          "--11",
          "--12"
        ]
      }
    },
    "attributes": {},
    "dataAttributes": [
      {
        "name": "data-ds-message",
        "description": "Message text that hides the row contents and renders the SDS message state.",
        "valueType": "string"
      }
    ],
    "examples": [
      {
        "name": "basic",
        "html": "<div class=\"ds-rows\"><div>Row 1</div><div>Row 2</div><div>Row 3</div></div>"
      },
      {
        "name": "centered",
        "html": "<div class=\"ds-rows --center --middle\"><div>Centered vertically and horizontally</div></div>"
      },
      {
        "name": "limit",
        "html": "<div class=\"ds-rows --limit\"><div>Max-width 1200px centered content</div></div>"
      },
      {
        "name": "indented",
        "html": "<div class=\"ds-rows --indent-large\"><div>Row with large indent</div><div>Another row</div></div>"
      },
      {
        "name": "grow",
        "html": "<div class=\"ds-rows --grow\"><div>Takes full height of parent</div></div>"
      }
    ]
  },
  "ds-scale": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-scale",
    "description": "Scale/gauge component",
    "docUrl": "https://design.soracom.io/design-system/elements/scale/",
    "category": "elements",
    "htmlElements": [
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "variant": {
        "support": "custom",
        "values": [
          "--progress",
          "--excess",
          "--caution-90",
          "--caution-95",
          "--caution-100"
        ]
      },
      "color": {
        "support": "all"
      }
    },
    "cssCustomProperties": [
      {
        "name": "--ds-scale-pc",
        "default": "0%",
        "description": "Percentage width of the filled scale bar"
      },
      {
        "name": "--ds-scale-width",
        "default": "100%",
        "description": "Width of the overall scale"
      }
    ],
    "attributes": {},
    "dataAttributes": [],
    "examples": [
      {
        "name": "basic",
        "html": "<div class=\"ds-scale\" style=\"--ds-scale-pc: 50%\"></div>"
      },
      {
        "name": "empty",
        "html": "<div class=\"ds-scale\" style=\"--ds-scale-pc: 0%\"></div>"
      },
      {
        "name": "full",
        "html": "<div class=\"ds-scale\" style=\"--ds-scale-pc: 100%\"></div>"
      },
      {
        "name": "progress",
        "html": "<div class=\"ds-scale --progress\" style=\"--ds-scale-pc: 65%\"></div>"
      },
      {
        "name": "with-color",
        "html": "<div class=\"ds-scale --color-orange\" style=\"--ds-scale-pc: 60%\"></div>"
      },
      {
        "name": "progress-with-color",
        "html": "<div class=\"ds-scale --progress --color-orange\" style=\"--ds-scale-pc: 60%\"></div>"
      },
      {
        "name": "caution-90",
        "html": "<div class=\"ds-scale --caution-90\" style=\"--ds-scale-pc: 90%\"></div>"
      },
      {
        "name": "caution-95",
        "html": "<div class=\"ds-scale --caution-95\" style=\"--ds-scale-pc: 95%\"></div>"
      },
      {
        "name": "caution-100",
        "html": "<div class=\"ds-scale --caution-100\" style=\"--ds-scale-pc: 100%\"></div>"
      },
      {
        "name": "excess",
        "html": "<div class=\"ds-scale --excess\" style=\"--ds-scale-pc: 100%\"></div>"
      },
      {
        "name": "with-calc",
        "html": "<div class=\"ds-scale\" style=\"--ds-scale-pc: calc(750 / 1000 * 100%)\"></div>"
      }
    ]
  },
  "ds-select": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-select",
    "description": "Select dropdown component",
    "docUrl": "https://design.soracom.io/design-system/elements/select/",
    "category": "elements",
    "htmlElements": [
      "select",
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "size": {
        "support": "subset",
        "values": [
          "--small",
          "--large"
        ]
      },
      "width": {
        "support": "subset",
        "values": [
          "--narrow",
          "--mid",
          "--wide",
          "--extra-wide",
          "--full-width"
        ]
      },
      "color": {
        "support": "all"
      },
      "visual-state": {
        "support": "all"
      },
      "state": {
        "support": "subset",
        "values": [
          "--disabled"
        ]
      },
      "variant": {
        "support": "custom",
        "values": [
          "--hide-label",
          "--button-default",
          "--addon"
        ]
      },
      "icon": {
        "support": "all"
      },
      "indent": {
        "support": "all"
      },
      "gap": {
        "support": "all"
      }
    },
    "structure": {
      "containerWrapper": "div",
      "parts": {
        "control": {
          "element": "select",
          "required": true
        },
        "option": {
          "element": "option",
          "alternativeElements": [
            "optgroup"
          ],
          "required": true,
          "repeatable": true
        }
      },
      "patterns": {
        "select": "<select class=\"ds-select\"><option>{option}</option></select>",
        "wrapper": "<div class=\"ds-select\"><select><option>{option}</option></select></div>"
      }
    },
    "attributes": {
      "disabled": {
        "description": "Disables the select control and applies the SDS disabled appearance.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "select"
            ]
          }
        ]
      }
    },
    "dataAttributes": [],
    "examples": [
      {
        "name": "basic",
        "html": "<select class=\"ds-select\"><option>Select an option</option><option>Option 1</option><option>Option 2</option></select>"
      },
      {
        "name": "container",
        "html": "<div class=\"ds-select\"><select><option>Select an option</option><option>Option 1</option><option>Option 2</option></select></div>"
      },
      {
        "name": "withLabel",
        "html": "<label class=\"ds-field\"><div class=\"ds-text --label\">Select Label</div><div class=\"ds-select\"><select><option>Select an option</option><option>Option 1</option><option>Option 2</option></select></div></label>"
      },
      {
        "name": "small",
        "html": "<select class=\"ds-select --small\"><option>Small select</option></select>"
      },
      {
        "name": "color-blue",
        "html": "<select class=\"ds-select --color-blue\"><option>Blue select</option><option>Option 1</option></select>"
      },
      {
        "name": "color-purple",
        "html": "<select class=\"ds-select --color-purple\"><option>Purple select</option><option>Option 1</option></select>"
      },
      {
        "name": "with-icon",
        "html": "<select class=\"ds-select --icon-chevron-down\"><option>Select with icon</option><option>Option 1</option></select>"
      },
      {
        "name": "icon-and-color",
        "html": "<select class=\"ds-select --icon-settings --color-blue\"><option>Settings</option><option>Option 1</option></select>"
      }
    ]
  },
  "ds-sentiment": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-sentiment",
    "description": "Sentiment indicator component",
    "category": "specialized",
    "htmlElements": [
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {},
    "structure": {
      "requiredChildren": [
        "div"
      ],
      "parts": {
        "choices": {
          "element": "div",
          "selector": ".ds-cols",
          "required": true
        },
        "choice": {
          "element": "a",
          "selector": ".ds-cols > a",
          "required": true,
          "repeatable": true
        },
        "result": {
          "element": "span",
          "required": true
        }
      },
      "patterns": {
        "basic": "<div class=\"ds-sentiment\" tabindex=\"-1\"><div class=\"ds-cols\"><a href=\"{positiveHref}\">{positiveLabel}</a><a href=\"{negativeHref}\">{negativeLabel}</a><span>{result}</span></div></div>"
      }
    },
    "attributes": {
      "tabindex": {
        "description": "Makes the sentiment root programmatically focusable so its result state can be displayed.",
        "values": [
          "-1"
        ],
        "default": "-1",
        "appliesTo": [
          {
            "elements": [
              "div"
            ]
          }
        ]
      },
      "href": {
        "description": "Navigation target for a positive or negative sentiment choice.",
        "appliesTo": [
          {
            "part": "choice",
            "elements": [
              "a"
            ]
          }
        ]
      }
    },
    "dataAttributes": []
  },
  "ds-sticky": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-sticky",
    "description": "Sticky positioning component",
    "category": "utility",
    "htmlElements": [
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {},
    "cssCustomProperties": [
      {
        "name": "--ds-sticky-offset",
        "default": "0",
        "description": "Offset from the sticky edge"
      },
      {
        "name": "--ds-sticky-z-index",
        "default": "5",
        "description": "Stacking order while sticky"
      }
    ],
    "attributes": {},
    "dataAttributes": []
  },
  "ds-switch": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-switch",
    "description": "Toggle switch component",
    "docUrl": "https://design.soracom.io/design-system/elements/switch/",
    "category": "elements",
    "htmlElements": [
      "label",
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "size": {
        "support": "subset",
        "values": [
          "--xsmall",
          "--small"
        ]
      },
      "color": {
        "support": "all"
      },
      "visual-state": {
        "support": "all"
      },
      "state": {
        "support": "subset",
        "values": [
          "--disabled"
        ]
      },
      "variant": {
        "support": "custom",
        "values": [
          "--hide-label",
          "--left-label",
          "--theme",
          "--plain"
        ]
      },
      "icon": {
        "support": "all"
      }
    },
    "structure": {
      "parts": {
        "control": {
          "element": "input",
          "selector": "input[type=\"checkbox\"], input[type=\"radio\"]",
          "required": true,
          "repeatable": true
        },
        "label": {
          "element": "span",
          "alternativeElements": [
            "div"
          ],
          "required": true,
          "repeatable": true
        },
        "option": {
          "element": "label",
          "optional": true,
          "repeatable": true
        }
      },
      "patterns": {
        "checkbox": "<label class=\"ds-switch\"><input type=\"checkbox\"><span>{label}</span></label>",
        "dual-label": "<label class=\"ds-switch\"><input type=\"checkbox\"><span>{offLabel}</span><span>{onLabel}</span></label>",
        "radio": "<div class=\"ds-switch\"><label><input type=\"radio\" name=\"{name}\" value=\"{value}\"><span>{label}</span></label></div>",
        "theme": "<div class=\"ds-switch --theme --hide-label\"><label class=\"--icon-light-mode\"><input type=\"radio\" name=\"theme\" value=\"light\"><span>Light</span></label><label class=\"--icon-contrast\"><input type=\"radio\" name=\"theme\" value=\"system\"><span>System</span></label><label class=\"--icon-dark-mode\"><input type=\"radio\" name=\"theme\" value=\"dark\"><span>Dark</span></label></div>"
      }
    },
    "attributes": {
      "type": {
        "description": "Native input type for a binary or mutually exclusive switch control.",
        "values": [
          "checkbox",
          "radio"
        ],
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "name": {
        "description": "Form field name submitted with the switch control value.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "value": {
        "description": "Value submitted when the switch control is selected.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "checked": {
        "description": "Selects the switch control and applies its active appearance.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "disabled": {
        "description": "Disables the switch control and applies the SDS disabled appearance.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "required": {
        "description": "Marks the switch control as required for native form validation.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      }
    },
    "dataAttributes": [],
    "examples": [
      {
        "name": "basic",
        "html": "<label class=\"ds-switch\"><input type=\"checkbox\" /><span>Toggle</span></label>"
      },
      {
        "name": "checked",
        "html": "<label class=\"ds-switch\"><input type=\"checkbox\" checked /><span>Enabled</span></label>"
      },
      {
        "name": "small",
        "html": "<label class=\"ds-switch --small\"><input type=\"checkbox\" /><span>Small switch</span></label>"
      },
      {
        "name": "xsmall",
        "html": "<label class=\"ds-switch --xsmall\"><input type=\"checkbox\" /><span>Extra small</span></label>"
      },
      {
        "name": "alert",
        "html": "<label class=\"ds-switch --alert\"><input type=\"checkbox\" checked /><span>Alert</span></label>"
      },
      {
        "name": "success",
        "html": "<label class=\"ds-switch --success\"><input type=\"checkbox\" checked /><span>Success</span></label>"
      },
      {
        "name": "color-blue",
        "html": "<label class=\"ds-switch --color-blue\"><input type=\"checkbox\" checked /><span>Blue</span></label>"
      },
      {
        "name": "with-icon",
        "html": "<label class=\"ds-switch --icon-lightning\"><input type=\"checkbox\" /><span>With icon</span></label>"
      },
      {
        "name": "icon-on-only",
        "html": "<label class=\"ds-switch\"><input type=\"checkbox\" class=\"--icon-lightning\" /><span>Icon on state only</span></label>"
      },
      {
        "name": "dual-icons",
        "html": "<label class=\"ds-switch --icon-cloud\"><input type=\"checkbox\" class=\"--icon-lightning\" /><span>Different on/off icons</span></label>"
      },
      {
        "name": "hide-label",
        "html": "<label class=\"ds-switch --hide-label\"><input type=\"checkbox\" /><span>Hidden label</span></label>"
      },
      {
        "name": "left-label",
        "html": "<label class=\"ds-switch --left-label\"><input type=\"checkbox\" /><span>Left label</span></label>"
      },
      {
        "name": "plain",
        "html": "<label class=\"ds-switch --plain\"><input type=\"checkbox\" /><span>Plain switch</span></label>"
      },
      {
        "name": "left-right-labels",
        "html": "<label class=\"ds-switch\"><input type=\"checkbox\" /><span>Off</span><span>On</span></label>"
      },
      {
        "name": "multi-radio",
        "html": "<div class=\"ds-switch\"><label><input type=\"radio\" name=\"group\" value=\"a\" checked /><span>Option A</span></label><label><input type=\"radio\" name=\"group\" value=\"b\" /><span>Option B</span></label><label><input type=\"radio\" name=\"group\" value=\"c\" /><span>Option C</span></label></div>"
      },
      {
        "name": "theme",
        "html": "<div class=\"ds-switch --theme --hide-label\"><label class=\"--icon-light-mode\"><input type=\"radio\" name=\"theme\" value=\"light\" /><span>Light</span></label><label class=\"--icon-contrast\"><input type=\"radio\" name=\"theme\" value=\"system\" checked /><span>System</span></label><label class=\"--icon-dark-mode\"><input type=\"radio\" name=\"theme\" value=\"dark\" /><span>Dark</span></label></div>"
      },
      {
        "name": "disabled",
        "html": "<label class=\"ds-switch\"><input type=\"checkbox\" disabled /><span>Disabled</span></label>"
      }
    ]
  },
  "ds-tabs": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-tabs",
    "description": "Tab navigation component",
    "docUrl": "https://design.soracom.io/design-system/elements/tabs/",
    "category": "elements",
    "htmlElements": [
      "div",
      "ul"
    ],
    "isWebComponent": false,
    "modifiers": {
      "variant": {
        "support": "custom",
        "values": [
          "--card",
          "--panel",
          "--vertical",
          "--sticky",
          "--no-wrap",
          "--adjust-height"
        ]
      },
      "size": {
        "support": "subset",
        "values": [
          "--small"
        ]
      },
      "indent": {
        "support": "all"
      }
    },
    "structure": {
      "parts": {
        "control": {
          "element": "input",
          "selector": "input[type=\"radio\"]",
          "attributes": {
            "type": "radio"
          },
          "optional": true,
          "repeatable": true
        },
        "tablist": {
          "element": "ul",
          "alternativeElements": [
            "div"
          ],
          "selector": "[role=\"tablist\"], ul",
          "required": true
        },
        "tab": {
          "element": "li",
          "alternativeElements": [
            "button"
          ],
          "selector": "[role=\"tab\"], li",
          "required": true,
          "repeatable": true
        },
        "panel": {
          "element": "div",
          "selector": "[role=\"tabpanel\"], [class*=\"__content\"]",
          "optional": true,
          "repeatable": true
        }
      },
      "patterns": {
        "panels": "<div class=\"ds-tabs\"><input id=\"{id}-1\" type=\"radio\" name=\"{name}\" checked><input id=\"{id}-2\" type=\"radio\" name=\"{name}\"><ul role=\"tablist\"><li role=\"tab\"><label for=\"{id}-1\">{tab}</label></li><li role=\"tab\"><label for=\"{id}-2\">{tab}</label></li></ul><div class=\"__1\" role=\"tabpanel\">{content}</div><div class=\"__2\" role=\"tabpanel\">{content}</div></div>",
        "bar": "<ul class=\"ds-tabs\" role=\"tablist\"><li class=\"--selected\" role=\"tab\"><span>{tab}</span></li><li role=\"tab\"><span>{tab}</span></li></ul>"
      }
    },
    "attributes": {
      "type": {
        "description": "Required native input type for a CSS-driven tab control.",
        "values": [
          "radio"
        ],
        "default": "radio",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "name": {
        "description": "Shared form field name that groups the tab controls.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "value": {
        "description": "Value associated with a tab control when it is selected.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "checked": {
        "description": "Selects the corresponding tab and panel.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "disabled": {
        "description": "Disables the corresponding tab control.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      }
    },
    "dataAttributes": [],
    "accessibility": {
      "roleContracts": [
        {
          "name": "tablist",
          "description": "Groups the tab controls.",
          "required": true,
          "appliesTo": [
            {
              "part": "tablist",
              "elements": [
                "ul",
                "div"
              ]
            }
          ]
        },
        {
          "name": "tab",
          "description": "Identifies an individual tab control.",
          "required": true,
          "appliesTo": [
            {
              "part": "tab",
              "elements": [
                "li",
                "button"
              ]
            }
          ]
        },
        {
          "name": "tabpanel",
          "description": "Identifies content controlled by a tab.",
          "required": true,
          "appliesTo": [
            {
              "part": "panel",
              "elements": [
                "div"
              ]
            }
          ]
        }
      ],
      "ariaAttributeContracts": [
        {
          "name": "aria-label",
          "description": "Provides an accessible name for the tab list when no visible label is available.",
          "appliesTo": [
            {
              "part": "tablist",
              "elements": [
                "ul",
                "div"
              ]
            }
          ]
        },
        {
          "name": "aria-labelledby",
          "description": "References the element that labels a tab list or tab panel.",
          "appliesTo": [
            {
              "part": "tablist",
              "elements": [
                "ul",
                "div"
              ]
            },
            {
              "part": "panel",
              "elements": [
                "div"
              ]
            }
          ]
        },
        {
          "name": "aria-selected",
          "description": "Reports whether a tab is currently selected.",
          "values": [
            "true",
            "false"
          ],
          "appliesTo": [
            {
              "part": "tab",
              "elements": [
                "li",
                "button"
              ]
            }
          ]
        },
        {
          "name": "aria-controls",
          "description": "References the tab panel controlled by a tab.",
          "appliesTo": [
            {
              "part": "tab",
              "elements": [
                "li",
                "button"
              ]
            }
          ]
        },
        {
          "name": "aria-orientation",
          "description": "Describes whether the tab list is horizontal or vertical.",
          "values": [
            "horizontal",
            "vertical"
          ],
          "appliesTo": [
            {
              "part": "tablist",
              "elements": [
                "ul",
                "div"
              ]
            }
          ]
        }
      ],
      "notes": [
        "When using ARIA tab semantics, application code must keep aria-selected, aria-controls, panel visibility, and roving tabindex in sync.",
        "Implement Left/Right Arrow navigation for horizontal tabs and Up/Down Arrow navigation for vertical tabs.",
        "The CSS radio pattern controls visual selection only; it does not implement the complete ARIA keyboard interaction model."
      ]
    },
    "examples": [
      {
        "name": "basic",
        "html": "<div class=\"ds-tabs\"><input id=\"tab-1\" type=\"radio\" name=\"tabs\" checked><input id=\"tab-2\" type=\"radio\" name=\"tabs\"><input id=\"tab-3\" type=\"radio\" name=\"tabs\"><ul role=\"tablist\"><li role=\"tab\"><label for=\"tab-1\">Tab 1</label></li><li role=\"tab\"><label for=\"tab-2\">Tab 2</label></li><li role=\"tab\"><label for=\"tab-3\">Tab 3</label></li></ul><div class=\"__1\" role=\"tabpanel\"><p>Tab 1 content</p></div><div class=\"__2\" role=\"tabpanel\"><p>Tab 2 content</p></div><div class=\"__3\" role=\"tabpanel\"><p>Tab 3 content</p></div></div>"
      },
      {
        "name": "card",
        "html": "<div class=\"ds-tabs --card\"><input id=\"card-1\" type=\"radio\" name=\"card-tabs\" checked><input id=\"card-2\" type=\"radio\" name=\"card-tabs\"><ul role=\"tablist\"><li role=\"tab\"><label for=\"card-1\">Tab 1</label></li><li role=\"tab\"><label for=\"card-2\">Tab 2</label></li></ul><div class=\"__1\" role=\"tabpanel\"><p>Card-style tab content</p></div><div class=\"__2\" role=\"tabpanel\"><p>Tab 2 content</p></div></div>"
      },
      {
        "name": "panel",
        "html": "<div class=\"ds-tabs --panel\"><input id=\"panel-1\" type=\"radio\" name=\"panel-tabs\" checked><input id=\"panel-2\" type=\"radio\" name=\"panel-tabs\"><ul role=\"tablist\"><li role=\"tab\"><label for=\"panel-1\">Tab 1</label></li><li role=\"tab\"><label for=\"panel-2\">Tab 2</label></li></ul><div class=\"__1\" role=\"tabpanel\"><p>Panel-style tab content</p></div><div class=\"__2\" role=\"tabpanel\"><p>Tab 2 content</p></div></div>"
      },
      {
        "name": "vertical",
        "html": "<div class=\"ds-tabs --vertical\"><input id=\"vert-1\" type=\"radio\" name=\"vert-tabs\" checked><input id=\"vert-2\" type=\"radio\" name=\"vert-tabs\"><input id=\"vert-3\" type=\"radio\" name=\"vert-tabs\"><ul role=\"tablist\"><li role=\"tab\"><label for=\"vert-1\">Tab 1</label></li><li role=\"tab\"><label for=\"vert-2\">Tab 2</label></li><li role=\"tab\"><label for=\"vert-3\">Tab 3</label></li></ul><div class=\"__1\" role=\"tabpanel\"><p>Vertical tab content</p></div><div class=\"__2\" role=\"tabpanel\"><p>Tab 2 content</p></div><div class=\"__3\" role=\"tabpanel\"><p>Tab 3 content</p></div></div>"
      },
      {
        "name": "small",
        "html": "<div class=\"ds-tabs --small\"><input id=\"sm-1\" type=\"radio\" name=\"sm-tabs\" checked><input id=\"sm-2\" type=\"radio\" name=\"sm-tabs\"><ul role=\"tablist\"><li role=\"tab\"><label for=\"sm-1\">Tab 1</label></li><li role=\"tab\"><label for=\"sm-2\">Tab 2</label></li></ul><div class=\"__1\" role=\"tabpanel\"><p>Small tabs content</p></div><div class=\"__2\" role=\"tabpanel\"><p>Tab 2 content</p></div></div>"
      },
      {
        "name": "sticky",
        "html": "<div class=\"ds-tabs\"><input id=\"sticky-1\" type=\"radio\" name=\"sticky-tabs\" checked><input id=\"sticky-2\" type=\"radio\" name=\"sticky-tabs\"><ul class=\"--sticky --offset-60\" role=\"tablist\"><li role=\"tab\"><label for=\"sticky-1\">Tab 1</label></li><li role=\"tab\"><label for=\"sticky-2\">Tab 2</label></li></ul><div class=\"__1\" role=\"tabpanel\"><p>Sticky tab list content</p></div><div class=\"__2\" role=\"tabpanel\"><p>Tab 2 content</p></div></div>"
      },
      {
        "name": "tab-bar",
        "html": "<ul class=\"ds-tabs\" role=\"tablist\"><li role=\"tab\" class=\"--selected\"><span>Label One</span></li><li role=\"tab\"><span>Label Two</span></li><li role=\"tab\"><span>Label Three</span></li></ul>"
      }
    ]
  },
  "ds-tag": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-tag",
    "description": "Tag/badge component",
    "docUrl": "https://design.soracom.io/design-system/elements/tag/",
    "category": "elements",
    "htmlElements": [
      "span",
      "div",
      "label"
    ],
    "isWebComponent": false,
    "modifiers": {
      "size": {
        "support": "subset",
        "values": [
          "--xsmall",
          "--small",
          "--medium",
          "--large"
        ]
      },
      "color": {
        "support": "all"
      },
      "visual-state": {
        "support": "all"
      },
      "variant": {
        "support": "custom",
        "values": [
          "--outline",
          "--pinned",
          "--flag",
          "--fence",
          "--fee",
          "--plan",
          "--ai",
          "--no-case"
        ]
      },
      "shape": {
        "support": "subset",
        "values": [
          "--square",
          "--rounded"
        ]
      },
      "icon": {
        "support": "all"
      },
      "state": {
        "support": "subset",
        "values": [
          "--disabled"
        ]
      },
      "utility": {
        "support": "subset",
        "values": [
          "--hide-label"
        ]
      },
      "animation": {
        "support": "subset",
        "values": [
          "--pulse",
          "--glow",
          "--blink"
        ]
      }
    },
    "structure": {
      "requiredChildren": [
        "span"
      ],
      "wrapContent": "span",
      "parts": {
        "control": {
          "element": "input",
          "selector": "input[type=\"checkbox\"], input[type=\"radio\"]",
          "optional": true,
          "position": [
            "first"
          ]
        },
        "icon": {
          "element": "i",
          "selector": ".ds-icon",
          "optional": true,
          "position": [
            "before label"
          ]
        },
        "label": {
          "element": "span",
          "required": true
        },
        "action": {
          "element": "button",
          "selector": ".ds-button",
          "optional": true,
          "position": [
            "last"
          ]
        }
      },
      "patterns": {
        "label": "<span class=\"ds-tag\"><span>{content}</span></span>",
        "checkbox": "<label class=\"ds-tag\"><input type=\"checkbox\"><span>{content}</span></label>",
        "radio": "<label class=\"ds-tag\"><input type=\"radio\" name=\"{name}\"><span>{content}</span></label>",
        "dismissible": "<div class=\"ds-tag\"><span>{content}</span><button class=\"ds-button --close\" type=\"button\"><span>{removeLabel}</span></button></div>"
      }
    },
    "attributes": {
      "type": {
        "description": "Native input type for a selectable tag control.",
        "values": [
          "checkbox",
          "radio"
        ],
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "name": {
        "description": "Form field name submitted with the selectable tag value.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "value": {
        "description": "Value submitted when the selectable tag is selected.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "checked": {
        "description": "Selects the tag control and applies its checked appearance.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "disabled": {
        "description": "Disables the tag control and applies the SDS disabled appearance.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      },
      "required": {
        "description": "Marks the tag control as required for native form validation.",
        "appliesTo": [
          {
            "part": "control",
            "elements": [
              "input"
            ]
          }
        ]
      }
    },
    "dataAttributes": [],
    "examples": [
      {
        "name": "basic",
        "html": "<span class=\"ds-tag\"><span>Tag</span></span>"
      },
      {
        "name": "small",
        "html": "<span class=\"ds-tag --small\"><span>Small</span></span>"
      },
      {
        "name": "medium",
        "html": "<span class=\"ds-tag --medium\"><span>Medium</span></span>"
      },
      {
        "name": "large",
        "html": "<span class=\"ds-tag --large\"><span>Large</span></span>"
      },
      {
        "name": "alert",
        "html": "<span class=\"ds-tag --alert\"><span>Alert</span></span>"
      },
      {
        "name": "warning",
        "html": "<span class=\"ds-tag --warning\"><span>Warning</span></span>"
      },
      {
        "name": "success",
        "html": "<span class=\"ds-tag --success\"><span>Success</span></span>"
      },
      {
        "name": "info",
        "html": "<span class=\"ds-tag --info\"><span>Info</span></span>"
      },
      {
        "name": "color",
        "html": "<span class=\"ds-tag --color-blue\"><span>Blue</span></span>"
      },
      {
        "name": "outline",
        "html": "<span class=\"ds-tag --outline\"><span>Outline</span></span>"
      },
      {
        "name": "outline-color",
        "html": "<span class=\"ds-tag --outline --color-magenta\"><span>Magenta Outline</span></span>"
      },
      {
        "name": "with-icon",
        "html": "<span class=\"ds-tag --icon-check\"><span>With Icon</span></span>"
      },
      {
        "name": "with-inline-icon",
        "html": "<span class=\"ds-tag\"><i class=\"ds-icon --icon-user\"></i><span>Inline Icon</span></span>"
      },
      {
        "name": "with-strong",
        "html": "<span class=\"ds-tag\"><span><strong>Label</strong>Value</span></span>"
      },
      {
        "name": "with-close-button",
        "html": "<div class=\"ds-tag\"><span>Closable</span><button class=\"ds-button --plain --icon-cancel --small\"><span>Remove</span></button></div>"
      },
      {
        "name": "checkbox",
        "html": "<label class=\"ds-tag\"><input type=\"checkbox\" /><span>Selectable</span></label>"
      },
      {
        "name": "radio",
        "html": "<label class=\"ds-tag\"><input type=\"radio\" name=\"group\" /><span>Option</span></label>"
      },
      {
        "name": "pinned",
        "html": "<span class=\"ds-tag --pinned\"><span>Pinned</span></span>"
      },
      {
        "name": "fee",
        "html": "<span class=\"ds-tag --fee\"><span>Fee</span></span>"
      },
      {
        "name": "no-case",
        "html": "<span class=\"ds-tag --no-case\"><span>No Uppercase</span></span>"
      },
      {
        "name": "square",
        "html": "<span class=\"ds-tag --square\"><span>Square</span></span>"
      },
      {
        "name": "disabled",
        "html": "<label class=\"ds-tag\"><input type=\"checkbox\" disabled /><span>Disabled</span></label>"
      }
    ]
  },
  "ds-text": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-text",
    "description": "Styled text component",
    "docUrl": "https://design.soracom.io/design-system/elements/text/",
    "category": "elements",
    "htmlElements": [
      "div",
      "p",
      "span",
      "h1",
      "h2",
      "h3",
      "h4",
      "h5",
      "h6",
      "label",
      "summary",
      "li",
      "a",
      "strong",
      "em"
    ],
    "isWebComponent": false,
    "modifiers": {
      "size": {
        "support": "custom",
        "values": [
          "--4xsmall",
          "--3xsmall",
          "--2xsmall",
          "--xsmall",
          "--small",
          "--medium",
          "--medium-bold",
          "--large",
          "--xlarge",
          "--2xlarge",
          "--3xlarge",
          "--4xlarge",
          "--huge",
          "--xhuge",
          "--2xhuge",
          "--3xhuge",
          "--4xhuge",
          "--xxsmall",
          "--xxlarge",
          "--xxhuge"
        ]
      },
      "color": {
        "support": "all"
      },
      "visual-state": {
        "support": "all"
      },
      "notification-state": {
        "support": "all"
      },
      "variant": {
        "support": "custom",
        "values": [
          "--inset",
          "--fee",
          "--fee-light",
          "--fee-strong",
          "--addon",
          "--note",
          "--nowrap",
          "--no-wrap"
        ]
      },
      "layout": {
        "support": "custom",
        "values": [
          "--end",
          "--right"
        ]
      },
      "icon": {
        "support": "all"
      },
      "indent": {
        "support": "all"
      }
    },
    "attributes": {
      "href": {
        "description": "Navigation target when ds-text is applied to an anchor element.",
        "appliesTo": [
          {
            "elements": [
              "a"
            ]
          }
        ]
      }
    },
    "dataAttributes": [
      {
        "name": "data-notification-counter",
        "description": "Displays a numeric counter badge on the text root. Used with a --notification modifier.",
        "valueType": "number"
      }
    ],
    "examples": [
      {
        "name": "basic",
        "html": "<p class=\"ds-text\">Text content</p>"
      },
      {
        "name": "small",
        "html": "<p class=\"ds-text --small\">Small text</p>"
      },
      {
        "name": "large",
        "html": "<p class=\"ds-text --large\">Large text</p>"
      },
      {
        "name": "xsmall",
        "html": "<p class=\"ds-text --xsmall\">Extra small text</p>"
      },
      {
        "name": "xlarge",
        "html": "<p class=\"ds-text --xlarge\">Extra large text</p>"
      },
      {
        "name": "bold",
        "html": "<p class=\"ds-text --medium-bold\">Bold medium text</p>"
      },
      {
        "name": "color-red",
        "html": "<p class=\"ds-text --color-red\">Red text</p>"
      },
      {
        "name": "color-blue",
        "html": "<p class=\"ds-text --color-blue\">Blue text</p>"
      },
      {
        "name": "alert",
        "html": "<p class=\"ds-text --alert\">Alert text</p>"
      },
      {
        "name": "with-icon",
        "html": "<p class=\"ds-text --icon-star\">Text with icon</p>"
      },
      {
        "name": "inset",
        "html": "<p class=\"ds-text --inset\">Inset text with padding</p>"
      },
      {
        "name": "fee",
        "html": "<p class=\"ds-text --fee\">Fee text with gradient icon</p>"
      },
      {
        "name": "note",
        "html": "<p class=\"ds-text --note\">Note text with left border accent</p>"
      },
      {
        "name": "nowrap",
        "html": "<p class=\"ds-text --nowrap\">Text that does not wrap</p>"
      },
      {
        "name": "as-span",
        "html": "<span class=\"ds-text --small\">Inline text element</span>"
      }
    ]
  },
  "ds-texttip": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-texttip",
    "description": "Text tooltip component",
    "docUrl": "https://design.soracom.io/design-system/elements/texttip/",
    "category": "elements",
    "htmlElements": [
      "span",
      "div",
      "button",
      "i"
    ],
    "isWebComponent": false,
    "modifiers": {
      "position": {
        "support": "custom",
        "values": [
          "--tip-top-left",
          "--tip-top",
          "--tip-top-right",
          "--tip-bottom-left",
          "--tip-bottom",
          "--tip-bottom-right",
          "--tip-left-top",
          "--tip-left",
          "--tip-left-bottom",
          "--tip-right-top",
          "--tip-right",
          "--tip-right-bottom"
        ]
      },
      "visual-state": {
        "support": "all"
      },
      "color": {
        "support": "all"
      }
    },
    "attributes": {},
    "dataAttributes": [],
    "examples": [
      {
        "name": "basic",
        "html": "<span data-ds-texttip=\"This is a tooltip\">Hover me</span>"
      },
      {
        "name": "on-text",
        "html": "<div class=\"ds-text\" data-ds-texttip=\"Additional information about this text\">Hover for details</div>"
      },
      {
        "name": "on-button",
        "html": "<button class=\"ds-button --primary\" type=\"button\" data-ds-texttip=\"Click to submit the form\"><span>Submit</span></button>"
      },
      {
        "name": "on-icon",
        "html": "<i class=\"ds-icon --icon-question\" data-ds-texttip=\"Help information\"></i>"
      },
      {
        "name": "on-label",
        "html": "<div class=\"ds-text --label\">Label text <i class=\"ds-icon --icon-online-solid --small\" data-ds-texttip=\"Status info\"></i></div>"
      },
      {
        "name": "inline",
        "html": "<div class=\"ds-text\">This text has an <span data-ds-texttip=\"Application Programming Interface\">API</span> reference with tooltip.</div>"
      },
      {
        "name": "tip-bottom",
        "html": "<span data-ds-texttip=\"Tooltip below\" class=\"--tip-bottom\">Hover (bottom)</span>"
      },
      {
        "name": "tip-left",
        "html": "<span data-ds-texttip=\"Tooltip on left\" class=\"--tip-left\">Hover (left)</span>"
      },
      {
        "name": "tip-right",
        "html": "<span data-ds-texttip=\"Tooltip on right\" class=\"--tip-right\">Hover (right)</span>"
      },
      {
        "name": "tip-bottom-right",
        "html": "<i class=\"ds-icon --icon-online-solid --tip-bottom-right\" data-ds-texttip=\"Positioned bottom-right\"></i>"
      }
    ]
  },
  "ds-theme": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-theme",
    "description": "Theme selector web component for light, system, and dark color modes",
    "docUrl": "https://design.soracom.io/design-system/web-components/theme/",
    "category": "utility",
    "htmlElements": [
      "ds-theme"
    ],
    "isWebComponent": true,
    "modifiers": {},
    "attributes": {
      "aria-label": {
        "description": "Accessible label for the internal theme radiogroup. Defaults to the localized Theme label.",
        "appliesTo": [
          {
            "elements": [
              "ds-theme"
            ]
          }
        ]
      },
      "name": {
        "description": "Name assigned to the internal radio group. A unique name is generated by default.",
        "appliesTo": [
          {
            "elements": [
              "ds-theme"
            ]
          }
        ]
      },
      "storage-key": {
        "description": "localStorage key used to persist the selected theme.",
        "default": "ds:theme",
        "appliesTo": [
          {
            "elements": [
              "ds-theme"
            ]
          }
        ]
      },
      "value": {
        "description": "Current theme selection.",
        "values": [
          "light",
          "system",
          "dark"
        ],
        "default": "system",
        "appliesTo": [
          {
            "elements": [
              "ds-theme"
            ]
          }
        ]
      },
      "css": {
        "description": "CSS loading mode. Global CSS is used by default; shadow loads component CSS into Shadow DOM.",
        "values": [
          "global",
          "shadow"
        ],
        "default": "global",
        "appliesTo": [
          {
            "elements": [
              "ds-theme"
            ]
          }
        ]
      }
    },
    "dataAttributes": [],
    "webComponentApi": {
      "tagName": "ds-theme",
      "className": "DsTheme",
      "observedAttributes": [
        "aria-label",
        "name",
        "storage-key",
        "value"
      ],
      "properties": {
        "value": {
          "type": "'light' | 'system' | 'dark'",
          "description": "Current theme selection. System removes data-ds-theme; light and dark set it explicitly."
        }
      },
      "events": [
        {
          "name": "ds-theme-change",
          "description": "Dispatched when the selected theme changes with detail { value: 'light' | 'system' | 'dark' }."
        }
      ]
    },
    "accessibility": {
      "role": "radiogroup",
      "ariaAttributes": [
        "aria-label"
      ],
      "notes": [
        "Renders native radio inputs inside a labelled SDS theme switch.",
        "Labels follow the document language from html[lang], supporting English and Japanese with English fallback."
      ]
    },
    "examples": [
      {
        "name": "basic",
        "html": "<ds-theme></ds-theme>"
      },
      {
        "name": "initial-light",
        "html": "<ds-theme value=\"light\"></ds-theme>"
      },
      {
        "name": "custom-storage-key",
        "html": "<ds-theme storage-key=\"example:theme\"></ds-theme>"
      }
    ]
  },
  "ds-timecontroller": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-timecontroller",
    "description": "Time range controller",
    "category": "utility",
    "htmlElements": [
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {},
    "structure": {
      "parts": {
        "oldest": {
          "element": "button",
          "selector": ".__control-oldest",
          "required": true
        },
        "increment": {
          "element": "button",
          "selector": "[class*=\"__control-top-\"]",
          "required": true,
          "repeatable": true
        },
        "display": {
          "element": "div",
          "alternativeElements": [
            "span"
          ],
          "selector": "[class*=\"__display-\"]",
          "required": true,
          "repeatable": true
        },
        "decrement": {
          "element": "button",
          "selector": "[class*=\"__control-bottom-\"]",
          "required": true,
          "repeatable": true
        },
        "latest": {
          "element": "button",
          "selector": ".__control-latest",
          "required": true
        }
      },
      "patterns": {
        "basic": "<div class=\"ds-timecontroller\"><button class=\"ds-button __control-oldest\" type=\"button\"><span>{oldest}</span></button>{incrementControls}<span class=\"__display-year\">{year}</span><span class=\"__display-month\">{month}</span><span class=\"__display-date\">{date}</span><span class=\"__display-weekday\">{weekday}</span><span class=\"__display-hour\">{hour}</span><span class=\"__display-minute\">{minute}</span><span class=\"__display-second\">{second}</span>{decrementControls}<button class=\"ds-button __control-latest\" type=\"button\"><span>{latest}</span></button></div>"
      }
    },
    "attributes": {},
    "dataAttributes": []
  },
  "ds-video": {
    "$schema": "./manifest.schema.json",
    "schemaVersion": "1.0.0",
    "name": "ds-video",
    "description": "Video player component",
    "docUrl": "https://design.soracom.io/design-system/elements/video/",
    "category": "elements",
    "htmlElements": [
      "video",
      "div"
    ],
    "isWebComponent": false,
    "modifiers": {
      "state": {
        "support": "custom",
        "values": [
          "--playing"
        ]
      },
      "layout": {
        "support": "subset",
        "values": [
          "--full-width"
        ]
      }
    },
    "cssCustomProperties": [
      {
        "name": "--ds-video-width",
        "default": "800px",
        "description": "Width of the video player before its max-width constraint"
      }
    ],
    "structure": {
      "parts": {
        "video": {
          "element": "video",
          "required": true
        },
        "playPause": {
          "element": "button",
          "selector": ".__playpause",
          "optional": true
        },
        "controls": {
          "element": "div",
          "selector": ".__controls, .ds-switch",
          "optional": true
        }
      },
      "patterns": {
        "direct": "<video class=\"ds-video\" controls src=\"{src}\"></video>",
        "wrapper": "<div class=\"ds-video\"><video controls src=\"{src}\"></video></div>",
        "custom": "<div class=\"ds-video\"><button class=\"ds-button __playpause\" type=\"button\"><span>{playLabel}</span></button><div class=\"__controls\">{controls}</div><video src=\"{src}\"></video></div>"
      }
    },
    "attributes": {
      "src": {
        "description": "URL of the video resource.",
        "appliesTo": [
          {
            "elements": [
              "video"
            ]
          },
          {
            "part": "video",
            "elements": [
              "video"
            ]
          }
        ]
      },
      "controls": {
        "description": "Displays the browser-provided video controls.",
        "appliesTo": [
          {
            "elements": [
              "video"
            ]
          },
          {
            "part": "video",
            "elements": [
              "video"
            ]
          }
        ]
      },
      "autoplay": {
        "description": "Starts playback automatically when browser policy permits it.",
        "appliesTo": [
          {
            "elements": [
              "video"
            ]
          },
          {
            "part": "video",
            "elements": [
              "video"
            ]
          }
        ]
      },
      "loop": {
        "description": "Restarts playback automatically after the video ends.",
        "appliesTo": [
          {
            "elements": [
              "video"
            ]
          },
          {
            "part": "video",
            "elements": [
              "video"
            ]
          }
        ]
      },
      "muted": {
        "description": "Mutes the video audio by default.",
        "appliesTo": [
          {
            "elements": [
              "video"
            ]
          },
          {
            "part": "video",
            "elements": [
              "video"
            ]
          }
        ]
      },
      "poster": {
        "description": "Image displayed before the video starts playing.",
        "appliesTo": [
          {
            "elements": [
              "video"
            ]
          },
          {
            "part": "video",
            "elements": [
              "video"
            ]
          }
        ]
      },
      "preload": {
        "description": "Hint for how much video data the browser should preload.",
        "values": [
          "none",
          "metadata",
          "auto"
        ],
        "appliesTo": [
          {
            "elements": [
              "video"
            ]
          },
          {
            "part": "video",
            "elements": [
              "video"
            ]
          }
        ]
      },
      "playsinline": {
        "description": "Requests inline playback on devices that otherwise use a fullscreen player.",
        "appliesTo": [
          {
            "elements": [
              "video"
            ]
          },
          {
            "part": "video",
            "elements": [
              "video"
            ]
          }
        ]
      }
    },
    "dataAttributes": [],
    "examples": [
      {
        "name": "basic",
        "html": "<div class=\"ds-video\"><video controls src=\"video.mp4\"></video></div>"
      },
      {
        "name": "direct",
        "html": "<video class=\"ds-video\" controls src=\"video.mp4\"></video>"
      },
      {
        "name": "full-width",
        "html": "<div class=\"ds-video --full-width\"><video controls src=\"video.mp4\"></video></div>"
      },
      {
        "name": "with-playpause",
        "html": "<div class=\"ds-video\"><button class=\"ds-icon --icon-circle-play-solid --xxlarge __playpause\"><span>Play</span></button><video src=\"video.mp4\"></video></div>"
      },
      {
        "name": "with-controls",
        "html": "<div class=\"ds-video\"><div class=\"ds-switch --hide-label --bottom-right __controls\"><label class=\"--icon-minimize\"><input type=\"radio\" name=\"video-mode\" value=\"small\" checked><span>Small</span></label><label class=\"--icon-grid-row\"><input type=\"radio\" name=\"video-mode\" value=\"wide\"><span>Wide</span></label><label class=\"--icon-padding\"><input type=\"radio\" name=\"video-mode\" value=\"fullscreen\"><span>Fullscreen</span></label><label class=\"--icon-iframe\"><input type=\"radio\" name=\"video-mode\" value=\"pip\"><span>Picture in Picture</span></label></div><video controls src=\"video.mp4\"></video></div>"
      },
      {
        "name": "playing",
        "html": "<div class=\"ds-video --playing\"><button class=\"ds-icon --icon-circle-play-solid --xxlarge __playpause\"><span>Pause</span></button><video src=\"video.mp4\"></video></div>"
      }
    ]
  }
}
