@material/web 2.5.0 → 2.5.1-nightly.23b638c.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/custom-elements.json +20910 -18104
  2. package/labs/aria/command.d.ts +18 -0
  3. package/labs/aria/command.js +204 -0
  4. package/labs/aria/command.js.map +1 -0
  5. package/labs/aria/menu/md-aria-menuitem.d.ts +11 -0
  6. package/labs/aria/menu/md-aria-menuitem.js +8 -0
  7. package/labs/aria/menu/md-aria-menuitem.js.map +1 -0
  8. package/labs/aria/menu/md-aria-menulist.d.ts +11 -0
  9. package/labs/aria/menu/md-aria-menulist.js +8 -0
  10. package/labs/aria/menu/md-aria-menulist.js.map +1 -0
  11. package/labs/aria/menu/menuitem.d.ts +26 -0
  12. package/labs/aria/menu/menuitem.js +86 -0
  13. package/labs/aria/menu/menuitem.js.map +1 -0
  14. package/labs/aria/menu/menulist.d.ts +25 -0
  15. package/labs/aria/menu/menulist.js +138 -0
  16. package/labs/aria/menu/menulist.js.map +1 -0
  17. package/labs/aria/query-associated.d.ts +23 -0
  18. package/labs/aria/query-associated.js +36 -0
  19. package/labs/aria/query-associated.js.map +1 -0
  20. package/labs/aria/tabs/md-aria-tab.d.ts +11 -0
  21. package/labs/aria/tabs/md-aria-tab.js +8 -0
  22. package/labs/aria/tabs/md-aria-tab.js.map +1 -0
  23. package/labs/aria/tabs/md-aria-tablist.d.ts +11 -0
  24. package/labs/aria/tabs/md-aria-tablist.js +8 -0
  25. package/labs/aria/tabs/md-aria-tablist.js.map +1 -0
  26. package/labs/aria/tabs/md-aria-tabpanel.d.ts +11 -0
  27. package/labs/aria/tabs/md-aria-tabpanel.js +8 -0
  28. package/labs/aria/tabs/md-aria-tabpanel.js.map +1 -0
  29. package/labs/aria/tabs/tab.d.ts +33 -0
  30. package/labs/aria/tabs/tab.js +88 -0
  31. package/labs/aria/tabs/tab.js.map +1 -0
  32. package/labs/aria/tabs/tablist.d.ts +67 -0
  33. package/labs/aria/tabs/tablist.js +271 -0
  34. package/labs/aria/tabs/tablist.js.map +1 -0
  35. package/labs/aria/tabs/tabpanel.d.ts +26 -0
  36. package/labs/aria/tabs/tabpanel.js +53 -0
  37. package/labs/aria/tabs/tabpanel.js.map +1 -0
  38. package/labs/gb/components/appbar/_app-bar-tokens.scss +136 -0
  39. package/labs/gb/components/appbar/app-bar-element.d.ts +54 -0
  40. package/labs/gb/components/appbar/app-bar-element.js +145 -0
  41. package/labs/gb/components/appbar/app-bar-element.js.map +1 -0
  42. package/labs/gb/components/appbar/app-bar.css +4 -0
  43. package/labs/gb/components/appbar/app-bar.css.map +1 -0
  44. package/labs/gb/components/appbar/app-bar.cssresult.d.ts +3 -0
  45. package/labs/gb/components/appbar/app-bar.cssresult.js +14 -0
  46. package/labs/gb/components/appbar/app-bar.cssresult.js.map +1 -0
  47. package/labs/gb/components/appbar/app-bar.d.ts +71 -0
  48. package/labs/gb/components/appbar/app-bar.js +96 -0
  49. package/labs/gb/components/appbar/app-bar.js.map +1 -0
  50. package/labs/gb/components/appbar/app-bar.scss +167 -0
  51. package/labs/gb/components/appbar/md-gb-app-bar.d.ts +12 -0
  52. package/labs/gb/components/appbar/md-gb-app-bar.js +8 -0
  53. package/labs/gb/components/appbar/md-gb-app-bar.js.map +1 -0
  54. package/labs/gb/components/badge/badge-element.d.ts +1 -0
  55. package/labs/gb/components/badge/badge-element.js +1 -0
  56. package/labs/gb/components/badge/badge-element.js.map +1 -1
  57. package/labs/gb/components/button/_button-tokens.scss +5 -1
  58. package/labs/gb/components/button/button-element.d.ts +2 -0
  59. package/labs/gb/components/button/button-element.js +2 -0
  60. package/labs/gb/components/button/button-element.js.map +1 -1
  61. package/labs/gb/components/button/button.css +1 -1
  62. package/labs/gb/components/button/button.css.map +1 -1
  63. package/labs/gb/components/button/button.cssresult.js +1 -1
  64. package/labs/gb/components/button/button.cssresult.js.map +1 -1
  65. package/labs/gb/components/button/button.scss +1 -0
  66. package/labs/gb/components/card/card-element.d.ts +1 -0
  67. package/labs/gb/components/card/card-element.js +1 -0
  68. package/labs/gb/components/card/card-element.js.map +1 -1
  69. package/labs/gb/components/checkbox/checkbox-element.d.ts +1 -0
  70. package/labs/gb/components/checkbox/checkbox-element.js +1 -0
  71. package/labs/gb/components/checkbox/checkbox-element.js.map +1 -1
  72. package/labs/gb/components/chip/_chip-tokens.scss +167 -0
  73. package/labs/gb/components/chip/chip-element.d.ts +74 -0
  74. package/labs/gb/components/chip/chip-element.js +234 -0
  75. package/labs/gb/components/chip/chip-element.js.map +1 -0
  76. package/labs/gb/components/chip/chip.css +4 -0
  77. package/labs/gb/components/chip/chip.css.map +1 -0
  78. package/labs/gb/components/chip/chip.cssresult.d.ts +3 -0
  79. package/labs/gb/components/chip/chip.cssresult.js +14 -0
  80. package/labs/gb/components/chip/chip.cssresult.js.map +1 -0
  81. package/labs/gb/components/chip/chip.d.ts +77 -0
  82. package/labs/gb/components/chip/chip.js +99 -0
  83. package/labs/gb/components/chip/chip.js.map +1 -0
  84. package/labs/gb/components/chip/chip.scss +99 -0
  85. package/labs/gb/components/chip/md-gb-chip.d.ts +13 -0
  86. package/labs/gb/components/chip/md-gb-chip.js +9 -0
  87. package/labs/gb/components/chip/md-gb-chip.js.map +1 -0
  88. package/labs/gb/components/divider/divider-element.d.ts +1 -0
  89. package/labs/gb/components/divider/divider-element.js +1 -0
  90. package/labs/gb/components/divider/divider-element.js.map +1 -1
  91. package/labs/gb/components/fab/_fab-tokens.scss +4 -1
  92. package/labs/gb/components/fab/fab-element.d.ts +2 -0
  93. package/labs/gb/components/fab/fab-element.js +2 -0
  94. package/labs/gb/components/fab/fab-element.js.map +1 -1
  95. package/labs/gb/components/fab/fab.css +1 -1
  96. package/labs/gb/components/fab/fab.css.map +1 -1
  97. package/labs/gb/components/fab/fab.cssresult.js +1 -1
  98. package/labs/gb/components/fab/fab.cssresult.js.map +1 -1
  99. package/labs/gb/components/fab/fab.scss +1 -0
  100. package/labs/gb/components/iconbutton/icon-button-element.d.ts +1 -0
  101. package/labs/gb/components/iconbutton/icon-button-element.js +1 -0
  102. package/labs/gb/components/iconbutton/icon-button-element.js.map +1 -1
  103. package/labs/gb/components/list/_list-tokens.scss +11 -14
  104. package/labs/gb/components/list/list-element.d.ts +1 -0
  105. package/labs/gb/components/list/list-element.js +1 -0
  106. package/labs/gb/components/list/list-element.js.map +1 -1
  107. package/labs/gb/components/list/list-item-element.d.ts +5 -0
  108. package/labs/gb/components/list/list-item-element.js +5 -0
  109. package/labs/gb/components/list/list-item-element.js.map +1 -1
  110. package/labs/gb/components/list/list.css +1 -1
  111. package/labs/gb/components/list/list.css.map +1 -1
  112. package/labs/gb/components/list/list.cssresult.js +1 -1
  113. package/labs/gb/components/list/list.cssresult.js.map +1 -1
  114. package/labs/gb/components/list/list.scss +5 -0
  115. package/labs/gb/components/menu/_menu-tokens.scss +45 -16
  116. package/labs/gb/components/menu/menu-element.d.ts +1 -0
  117. package/labs/gb/components/menu/menu-element.js +1 -0
  118. package/labs/gb/components/menu/menu-element.js.map +1 -1
  119. package/labs/gb/components/menu/menu-group-element.d.ts +1 -0
  120. package/labs/gb/components/menu/menu-group-element.js +1 -0
  121. package/labs/gb/components/menu/menu-group-element.js.map +1 -1
  122. package/labs/gb/components/menu/menu-item-element.d.ts +5 -1
  123. package/labs/gb/components/menu/menu-item-element.js +5 -1
  124. package/labs/gb/components/menu/menu-item-element.js.map +1 -1
  125. package/labs/gb/components/menu/menu.css +1 -1
  126. package/labs/gb/components/menu/menu.css.map +1 -1
  127. package/labs/gb/components/menu/menu.cssresult.js +1 -1
  128. package/labs/gb/components/menu/menu.cssresult.js.map +1 -1
  129. package/labs/gb/components/menu/menu.scss +3 -0
  130. package/labs/gb/components/radio/radio-element.d.ts +1 -0
  131. package/labs/gb/components/radio/radio-element.js +1 -0
  132. package/labs/gb/components/radio/radio-element.js.map +1 -1
  133. package/labs/gb/components/splitbutton/split-button-element.d.ts +1 -0
  134. package/labs/gb/components/splitbutton/split-button-element.js +1 -0
  135. package/labs/gb/components/splitbutton/split-button-element.js.map +1 -1
  136. package/labs/gb/components/switch/switch-element.d.ts +1 -0
  137. package/labs/gb/components/switch/switch-element.js +1 -0
  138. package/labs/gb/components/switch/switch-element.js.map +1 -1
  139. package/labs/gb/styles/icon/icon-element.d.ts +1 -0
  140. package/labs/gb/styles/icon/icon-element.js +1 -0
  141. package/labs/gb/styles/icon/icon-element.js.map +1 -1
  142. package/package.json +1 -1
  143. package/types/command-event.d.ts +22 -0
  144. package/types/popover.d.ts +22 -0
@@ -1 +1 @@
1
- {"version":3,"file":"checkbox-element.js","sourceRoot":"","sources":["checkbox-element.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {css, CSSResultOrNative, html, LitElement, nothing} from 'lit';\nimport {property, query} from 'lit/decorators.js';\nimport {ARIAMixinStrict} from '../../../../internal/aria/aria.js';\nimport {mixinDelegatesAria} from '../../../../internal/aria/delegate.js';\nimport {redispatchEvent} from '../../../../internal/events/redispatch-event.js';\nimport {\n createValidator,\n getValidityAnchor,\n mixinConstraintValidation,\n} from '../../../behaviors/constraint-validation.js';\nimport {mixinElementInternals} from '../../../behaviors/element-internals.js';\nimport {\n getFormState,\n getFormValue,\n mixinFormAssociated,\n} from '../../../behaviors/form-associated.js';\nimport {CheckboxValidator} from '../../../behaviors/validators/checkbox-validator.js';\n\nimport focusRingStyles from '../focus/focus-ring.css' with {type: 'css'}; // github-only\n// import focusRingStyles from '../focus/focus-ring.cssresult.js'; // google3-only\nimport rippleStyles from '../ripple/ripple.css' with {type: 'css'}; // github-only\n// import rippleStyles from '../ripple/ripple.cssresult.js'; // google3-only\nimport checkboxStyles from './checkbox.css' with {type: 'css'}; // github-only\n// import checkboxStyles from './checkbox.cssresult.js'; // google3-only\n\nimport {checkbox} from './checkbox.js';\n\n// Separate variable needed for closure.\nconst baseClass = mixinDelegatesAria(\n mixinConstraintValidation(\n mixinFormAssociated(mixinElementInternals(LitElement)),\n ),\n);\n\n/**\n * A Material Design checkbox component.\n *\n * @fires {InputEvent} input - Fired when the checkbox is checked or unchecked. --bubbles --composed\n * @fires {Event} change - Fired when the checkbox is checked or unchecked. --bubbles\n * @csspart checkbox - The checkbox's root element.\n * @cssprop --container-color\n * @cssprop --container-shape\n * @cssprop --container-size\n * @cssprop --icon-color\n * @cssprop --icon-size\n * @cssprop --outline-color\n * @cssprop --outline-width\n * @cssprop --state-layer-color\n * @cssprop --state-layer-shape\n * @cssprop --state-layer-size\n */\nexport class CheckboxElement extends baseClass {\n /** @nocollapse */\n static override shadowRootOptions: ShadowRootInit = {\n mode: 'open',\n delegatesFocus: true,\n };\n\n static override styles: CSSResultOrNative[] = [\n focusRingStyles,\n rippleStyles,\n checkboxStyles,\n css`\n :host {\n display: inline-flex;\n }\n .checkbox {\n flex: 1;\n }\n `,\n ];\n\n /**\n * Whether or not the checkbox is invalid.\n */\n @property({type: Boolean}) error = false;\n\n /**\n * Whether or not the checkbox is selected.\n */\n @property({type: Boolean}) checked = false;\n\n /**\n * The default checked state of the checkbox.\n */\n get defaultChecked(): boolean {\n return this.hasAttribute('checked');\n }\n set defaultChecked(value: boolean) {\n this.toggleAttribute('checked', value || false);\n }\n\n /**\n * Whether or not the checkbox is indeterminate.\n *\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#indeterminate_state_checkboxes\n */\n @property({type: Boolean}) indeterminate = false;\n\n /**\n * When true, require the checkbox to be selected when participating in\n * form submission.\n *\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#validation\n */\n @property({type: Boolean}) required = false;\n\n /**\n * The value of the checkbox that is submitted with a form when selected.\n *\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#value\n */\n @property() value = 'on';\n\n @query('input', true)\n private readonly input!: HTMLInputElement | null;\n /**\n * Mimics the behavior of <input> dirty checkedness, where the `checked`\n * attribute only updates the checked state if the checkbox has not been\n * interacted with.\n *\n * @see https://html.spec.whatwg.org/multipage/input.html#concept-input-checked-dirty-flag\n */\n private dirtyCheckedness = false;\n\n protected override render() {\n // Needed for closure conformance\n const {ariaLabel, ariaInvalid} = this as ARIAMixinStrict;\n return html`\n <input\n part=\"checkbox\"\n class=\"${checkbox({invalid: this.error})}\"\n type=\"checkbox\"\n aria-checked=${this.indeterminate ? 'mixed' : nothing}\n aria-label=${ariaLabel || nothing}\n aria-invalid=${ariaInvalid || this.error || nothing}\n ?disabled=${this.disabled}\n ?required=${this.required}\n .indeterminate=${this.indeterminate}\n .checked=${this.checked}\n @input=${this.handleInput}\n @change=${this.handleChange} />\n `;\n }\n\n private handleInput(event: Event) {\n this.dirtyCheckedness = true;\n const target = event.target as HTMLInputElement;\n this.checked = target.checked;\n this.indeterminate = target.indeterminate;\n // <input> 'input' event bubbles and is composed, don't re-dispatch it.\n }\n\n private handleChange(event: Event) {\n this.dirtyCheckedness = true;\n // <input> 'change' event is not composed, re-dispatch it.\n redispatchEvent(this, event);\n }\n\n override attributeChangedCallback(\n name: string,\n oldValue: string | null,\n newValue: string | null,\n ) {\n if (name === 'checked' && this.dirtyCheckedness) {\n // The 'checked' attribute does not update checkboxes that have been\n // interacted with.\n return;\n }\n\n super.attributeChangedCallback(name, oldValue, newValue);\n }\n\n override [getFormValue]() {\n return this.checked ? this.value : null;\n }\n\n override [getFormState]() {\n return String(this.checked);\n }\n\n override formResetCallback() {\n this.dirtyCheckedness = false;\n this.checked = this.defaultChecked;\n }\n\n override formStateRestoreCallback(state: string) {\n this.checked = state === 'true';\n }\n\n override [createValidator]() {\n return new CheckboxValidator(() => this);\n }\n\n override [getValidityAnchor]() {\n return this.input;\n }\n}\n"]}
1
+ {"version":3,"file":"checkbox-element.js","sourceRoot":"","sources":["checkbox-element.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {css, CSSResultOrNative, html, LitElement, nothing} from 'lit';\nimport {property, query} from 'lit/decorators.js';\nimport {ARIAMixinStrict} from '../../../../internal/aria/aria.js';\nimport {mixinDelegatesAria} from '../../../../internal/aria/delegate.js';\nimport {redispatchEvent} from '../../../../internal/events/redispatch-event.js';\nimport {\n createValidator,\n getValidityAnchor,\n mixinConstraintValidation,\n} from '../../../behaviors/constraint-validation.js';\nimport {mixinElementInternals} from '../../../behaviors/element-internals.js';\nimport {\n getFormState,\n getFormValue,\n mixinFormAssociated,\n} from '../../../behaviors/form-associated.js';\nimport {CheckboxValidator} from '../../../behaviors/validators/checkbox-validator.js';\n\nimport focusRingStyles from '../focus/focus-ring.css' with {type: 'css'}; // github-only\n// import focusRingStyles from '../focus/focus-ring.cssresult.js'; // google3-only\nimport rippleStyles from '../ripple/ripple.css' with {type: 'css'}; // github-only\n// import rippleStyles from '../ripple/ripple.cssresult.js'; // google3-only\nimport checkboxStyles from './checkbox.css' with {type: 'css'}; // github-only\n// import checkboxStyles from './checkbox.cssresult.js'; // google3-only\n\nimport {checkbox} from './checkbox.js';\n\n// Separate variable needed for closure.\nconst baseClass = mixinDelegatesAria(\n mixinConstraintValidation(\n mixinFormAssociated(mixinElementInternals(LitElement)),\n ),\n);\n\n/**\n * A Material Design checkbox component.\n *\n * @fires {InputEvent} input - Fired when the checkbox is checked or unchecked. --bubbles --composed\n * @fires {Event} change - Fired when the checkbox is checked or unchecked. --bubbles\n * @csspart checkbox - The checkbox's root element.\n * @cssprop --container-color\n * @cssprop --container-shape\n * @cssprop --container-size\n * @cssprop --icon-color\n * @cssprop --icon-size\n * @cssprop --outline-color\n * @cssprop --outline-width\n * @cssprop --state-layer-color\n * @cssprop --state-layer-shape\n * @cssprop --state-layer-size\n */\nexport class CheckboxElement extends baseClass {\n /** @nocollapse */\n static override shadowRootOptions: ShadowRootInit = {\n mode: 'open',\n delegatesFocus: true,\n };\n\n /** @nocollapse */\n static override styles: CSSResultOrNative[] = [\n focusRingStyles,\n rippleStyles,\n checkboxStyles,\n css`\n :host {\n display: inline-flex;\n }\n .checkbox {\n flex: 1;\n }\n `,\n ];\n\n /**\n * Whether or not the checkbox is invalid.\n */\n @property({type: Boolean}) error = false;\n\n /**\n * Whether or not the checkbox is selected.\n */\n @property({type: Boolean}) checked = false;\n\n /**\n * The default checked state of the checkbox.\n */\n get defaultChecked(): boolean {\n return this.hasAttribute('checked');\n }\n set defaultChecked(value: boolean) {\n this.toggleAttribute('checked', value || false);\n }\n\n /**\n * Whether or not the checkbox is indeterminate.\n *\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#indeterminate_state_checkboxes\n */\n @property({type: Boolean}) indeterminate = false;\n\n /**\n * When true, require the checkbox to be selected when participating in\n * form submission.\n *\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#validation\n */\n @property({type: Boolean}) required = false;\n\n /**\n * The value of the checkbox that is submitted with a form when selected.\n *\n * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input/checkbox#value\n */\n @property() value = 'on';\n\n @query('input', true)\n private readonly input!: HTMLInputElement | null;\n /**\n * Mimics the behavior of <input> dirty checkedness, where the `checked`\n * attribute only updates the checked state if the checkbox has not been\n * interacted with.\n *\n * @see https://html.spec.whatwg.org/multipage/input.html#concept-input-checked-dirty-flag\n */\n private dirtyCheckedness = false;\n\n protected override render() {\n // Needed for closure conformance\n const {ariaLabel, ariaInvalid} = this as ARIAMixinStrict;\n return html`\n <input\n part=\"checkbox\"\n class=\"${checkbox({invalid: this.error})}\"\n type=\"checkbox\"\n aria-checked=${this.indeterminate ? 'mixed' : nothing}\n aria-label=${ariaLabel || nothing}\n aria-invalid=${ariaInvalid || this.error || nothing}\n ?disabled=${this.disabled}\n ?required=${this.required}\n .indeterminate=${this.indeterminate}\n .checked=${this.checked}\n @input=${this.handleInput}\n @change=${this.handleChange} />\n `;\n }\n\n private handleInput(event: Event) {\n this.dirtyCheckedness = true;\n const target = event.target as HTMLInputElement;\n this.checked = target.checked;\n this.indeterminate = target.indeterminate;\n // <input> 'input' event bubbles and is composed, don't re-dispatch it.\n }\n\n private handleChange(event: Event) {\n this.dirtyCheckedness = true;\n // <input> 'change' event is not composed, re-dispatch it.\n redispatchEvent(this, event);\n }\n\n override attributeChangedCallback(\n name: string,\n oldValue: string | null,\n newValue: string | null,\n ) {\n if (name === 'checked' && this.dirtyCheckedness) {\n // The 'checked' attribute does not update checkboxes that have been\n // interacted with.\n return;\n }\n\n super.attributeChangedCallback(name, oldValue, newValue);\n }\n\n override [getFormValue]() {\n return this.checked ? this.value : null;\n }\n\n override [getFormState]() {\n return String(this.checked);\n }\n\n override formResetCallback() {\n this.dirtyCheckedness = false;\n this.checked = this.defaultChecked;\n }\n\n override formStateRestoreCallback(state: string) {\n this.checked = state === 'true';\n }\n\n override [createValidator]() {\n return new CheckboxValidator(() => this);\n }\n\n override [getValidityAnchor]() {\n return this.input;\n }\n}\n"]}
@@ -0,0 +1,167 @@
1
+ //
2
+ // Copyright 2026 Google LLC
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ //
5
+
6
+ // Auto-generated by cascade_tokens
7
+ // Add `// EDIT:` comments for manual adjustments.
8
+ //
9
+ // --prefix=md.comp.chip
10
+ // --states="hovered|focused|pressed|dragged,:unselected|selected,:filter|input,with-leading-icon|with-avatar,with-trailing-icon,disabled"
11
+ // --exclude=motion,state-layer,indicator
12
+
13
+ @mixin root {
14
+ // LINT.IfChange
15
+ --avatar-opacity: unset;
16
+ // md.comp.chip.avatar.shape
17
+ --avatar-shape: var(--md-sys-shape-corner-full);
18
+ // md.comp.chip.avatar.size
19
+ --avatar-size: 24px;
20
+ --container-color: unset;
21
+ // md.comp.chip.container.elevation
22
+ --container-elevation: var(--md-sys-elevation-shadow-0);
23
+ // --container-opacity: unset; // EDIT: unused
24
+ // md.comp.chip.gap.horizontal
25
+ --gap-horizontal: var(--md-sys-space-50);
26
+ // md.comp.chip.height
27
+ --height: 32px;
28
+ // md.comp.chip.label-text
29
+ --label-text: var(--md-sys-typescale-label-lg);
30
+ // ┌┄ md.comp.chip.label-text
31
+ --label-text-axes: var(--md-sys-typescale-label-lg-axes);
32
+ // md.comp.chip.unselected.label-text.color
33
+ --label-text-color: var(--md-sys-color-on-surface-variant);
34
+ // --label-text-opacity: unset; // EDIT: unused
35
+ // ┌┄ md.comp.chip.label-text
36
+ --label-text-tracking: var(--md-sys-typescale-label-lg-tracking);
37
+ // md.comp.chip.unselected.leading-icon.color
38
+ --leading-icon-color: var(--md-sys-color-on-surface-variant);
39
+ // --leading-icon-opacity: unset; // EDIT: unused
40
+ // md.comp.chip.leading-icon.size
41
+ --leading-icon-size: 18px;
42
+ // md.comp.chip.unselected.outline.color
43
+ --outline-color: var(--md-sys-color-outline-variant);
44
+ // --outline-opacity: unset; // EDIT: unused
45
+ // md.comp.chip.unselected.outline.width
46
+ --outline-width: 1px;
47
+ // md.comp.chip.padding.bottom
48
+ --padding-bottom: var(--md-sys-space-75);
49
+ // ┌ md.comp.chip.filter.padding.leading
50
+ --padding-leading: var(--md-sys-space-200);
51
+ // md.comp.chip.padding.top
52
+ --padding-top: var(--md-sys-space-75);
53
+ // ┌ md.comp.chip.filter.padding.trailing
54
+ --padding-trailing: var(--md-sys-space-200);
55
+ // md.comp.chip.unselected.shape
56
+ --shape: var(--md-sys-shape-corner-md);
57
+ // md.comp.chip.unselected.trailing-icon.color
58
+ --trailing-icon-color: var(--md-sys-color-on-surface-variant);
59
+ // --trailing-icon-opacity: unset; // EDIT: unused
60
+ // md.comp.chip.trailing-icon.size
61
+ --trailing-icon-size: 18px;
62
+ // LINT.ThenChange(md-gb-chip.ts) sync with `@cssprop` jsdoc tags
63
+ }
64
+
65
+ @mixin pressed {
66
+ // md.comp.chip.pressed.shape
67
+ --shape: var(--md-sys-shape-corner-sm);
68
+ }
69
+
70
+ @mixin dragged {
71
+ // md.comp.chip.dragged.container.elevation
72
+ --container-elevation: var(--md-sys-elevation-shadow-4);
73
+ }
74
+
75
+ @mixin selected {
76
+ // md.comp.chip.selected.container.color
77
+ --container-color: var(--md-sys-color-secondary-container);
78
+ // md.comp.chip.selected.label-text.color
79
+ --label-text-color: var(--md-sys-color-on-secondary-container);
80
+ // md.comp.chip.selected.leading-icon.color
81
+ --leading-icon-color: var(--md-sys-color-on-secondary-container);
82
+ // md.comp.chip.selected.outline.width
83
+ --outline-width: 0px;
84
+ // md.comp.chip.selected.shape
85
+ --shape: var(--md-sys-shape-corner-full);
86
+ // md.comp.chip.selected.trailing-icon.color
87
+ --trailing-icon-color: var(--md-sys-color-on-secondary-container);
88
+ }
89
+
90
+ @mixin input {
91
+ // md.comp.chip.input.padding.leading
92
+ --padding-leading: var(--md-sys-space-150);
93
+ // md.comp.chip.input.padding.trailing
94
+ --padding-trailing: var(--md-sys-space-150);
95
+ }
96
+
97
+ @mixin with-leading-icon {
98
+ // md.comp.chip.with-leading-icon.padding.leading
99
+ --padding-leading: var(--md-sys-space-100);
100
+ }
101
+
102
+ @mixin with-avatar {
103
+ // md.comp.chip.with-avatar.padding.leading
104
+ --padding-leading: var(--md-sys-space-50);
105
+ }
106
+
107
+ @mixin with-trailing-icon {
108
+ // md.comp.chip.with-trailing-icon.padding.trailing
109
+ --padding-trailing: var(--md-sys-space-100);
110
+ }
111
+
112
+ @mixin disabled {
113
+ // md.comp.chip.disabled.avatar.opacity
114
+ --avatar-opacity: 0.38;
115
+ // ┌ md.comp.chip.disabled.label-text.opacity
116
+ // md.comp.chip.disabled.label-text.color
117
+ --label-text-color: hsl(from var(--md-sys-color-on-surface) h s l / 0.38);
118
+ // ┌ md.comp.chip.disabled.leading-icon.opacity
119
+ // md.comp.chip.disabled.leading-icon.color
120
+ --leading-icon-color: hsl(from var(--md-sys-color-on-surface) h s l / 0.38);
121
+ // ┌ md.comp.chip.unselected.disabled.outline.opacity
122
+ // md.comp.chip.unselected.disabled.outline.color
123
+ --outline-color: hsl(from var(--md-sys-color-on-surface) h s l / 0.1);
124
+ // ┌ md.comp.chip.disabled.trailing-icon.opacity
125
+ // md.comp.chip.disabled.trailing-icon.color
126
+ --trailing-icon-color: hsl(from var(--md-sys-color-on-surface) h s l / 0.38);
127
+ }
128
+
129
+ @mixin disabled-selected {
130
+ // ┌ md.comp.chip.selected.disabled.container.opacity
131
+ // md.comp.chip.selected.disabled.container.color
132
+ --container-color: hsl(from var(--md-sys-color-on-surface) h s l / 0.12);
133
+ }
134
+
135
+ // EDIT: Manual adjustments
136
+ @mixin filter {
137
+ // Hoisted to root, so empty here to satisfy chip.scss mapping
138
+ }
139
+
140
+ @mixin elevated {
141
+ --container-color: var(--md-sys-color-surface-container-low);
142
+ --container-elevation: var(--md-sys-elevation-shadow-1);
143
+ --label-text-color: var(--md-sys-color-on-surface);
144
+ --outline-width: 0;
145
+ }
146
+
147
+ @mixin filled {
148
+ --container-color: var(--md-sys-color-surface-container);
149
+ --container-elevation: var(--md-sys-elevation-shadow-0);
150
+ --label-text-color: var(--md-sys-color-on-surface);
151
+ --outline-width: 0;
152
+ }
153
+
154
+ @mixin tonal {
155
+ --container-color: var(--md-sys-color-secondary-container);
156
+ --container-elevation: var(--md-sys-elevation-shadow-0);
157
+ --label-text-color: var(--md-sys-color-on-secondary-container);
158
+ --outline-width: 0;
159
+ }
160
+
161
+ @mixin outlined {
162
+ --container-color: transparent;
163
+ --container-elevation: var(--md-sys-elevation-shadow-0);
164
+ --label-text-color: var(--md-sys-color-on-surface);
165
+ --outline-color: var(--md-sys-color-outline);
166
+ --outline-width: 1px;
167
+ }
@@ -0,0 +1,74 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { CSSResultOrNative, LitElement } from 'lit';
7
+ import { type ChipColor, type ChipType } from './chip.js';
8
+ /**
9
+ * A Material Design Expressive Chip component (`md-gb-chip`).
10
+ *
11
+ * @slot - Used to display the chip label text.
12
+ * @slot icon - Used to display an optional leading icon, checkmark, or avatar.
13
+ * @slot remove-icon - Used to display the trailing remove button icon when `removable="true"`.
14
+ * @fires {Event} remove - Fired when the remove action is triggered on a removable chip. --bubbles --composed
15
+ * @fires {Event} change - Fired when a filter/toggle chip's selection state changes. --bubbles
16
+ * @fires {InputEvent} input - Fired when a filter/toggle chip's selection state changes. --bubbles --composed
17
+ * @csspart chip - The root container element.
18
+ * @cssprop --avatar-opacity
19
+ * @cssprop --avatar-shape
20
+ * @cssprop --avatar-size
21
+ * @cssprop --container-color
22
+ * @cssprop --container-elevation
23
+ * @cssprop --container-opacity
24
+ * @cssprop --gap-horizontal
25
+ * @cssprop --height
26
+ * @cssprop --label-text
27
+ * @cssprop --label-text-color
28
+ * @cssprop --label-text-opacity
29
+ * @cssprop --leading-icon-color
30
+ * @cssprop --leading-icon-opacity
31
+ * @cssprop --leading-icon-size
32
+ * @cssprop --outline-color
33
+ * @cssprop --outline-opacity
34
+ * @cssprop --outline-width
35
+ * @cssprop --padding-bottom
36
+ * @cssprop --padding-leading
37
+ * @cssprop --padding-top
38
+ * @cssprop --padding-trailing
39
+ * @cssprop --shape
40
+ * @cssprop --trailing-icon-color
41
+ * @cssprop --trailing-icon-opacity
42
+ * @cssprop --trailing-icon-size
43
+ */
44
+ export declare class ChipElement extends LitElement {
45
+ /** @nocollapse */
46
+ static styles: CSSResultOrNative[];
47
+ /** The color emphasis of the chip. Defaults to `outlined`. */
48
+ color: ChipColor;
49
+ /** The functional behavior type of the chip (`action`, `filter`, `toggle`, `link`). */
50
+ type: ChipType;
51
+ /** Whether the filter or toggle chip is selected. */
52
+ selected: boolean;
53
+ /** Whether the chip is removable. */
54
+ removable: boolean;
55
+ /** Whether the chip is disabled. */
56
+ disabled: boolean;
57
+ /** Whether the chip is soft-disabled (`aria-disabled="true"` while preserving focusability). */
58
+ softDisabled: boolean;
59
+ /** The URL destination if `type="link"` or if `href` is set. */
60
+ href: string;
61
+ /** Where to display the linked `href` URL for a link chip. */
62
+ target: '_blank' | '_parent' | '_self' | '_top' | '';
63
+ private hasLeadingIcon;
64
+ private hasAvatar;
65
+ private hasRemoveIcon;
66
+ protected render(): import("lit-html").TemplateResult<1>;
67
+ private renderContent;
68
+ private renderLeadingIcon;
69
+ private renderRemoveButton;
70
+ private handleIconSlotChange;
71
+ private handleRemoveIconSlotChange;
72
+ private handleChange;
73
+ private handleRemove;
74
+ }
@@ -0,0 +1,234 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { __decorate } from "tslib";
7
+ import { css, html, LitElement, nothing } from 'lit';
8
+ import { property, state } from 'lit/decorators.js';
9
+ import { redispatchEvent } from '../../../../internal/events/redispatch-event.js';
10
+ import focusRingStyles from '../focus/focus-ring.cssresult.js';
11
+ import rippleStyles from '../ripple/ripple.cssresult.js';
12
+ import { chip } from './chip.js';
13
+ import { styles as chipStyles } from './chip.cssresult.js';
14
+ /**
15
+ * A Material Design Expressive Chip component (`md-gb-chip`).
16
+ *
17
+ * @slot - Used to display the chip label text.
18
+ * @slot icon - Used to display an optional leading icon, checkmark, or avatar.
19
+ * @slot remove-icon - Used to display the trailing remove button icon when `removable="true"`.
20
+ * @fires {Event} remove - Fired when the remove action is triggered on a removable chip. --bubbles --composed
21
+ * @fires {Event} change - Fired when a filter/toggle chip's selection state changes. --bubbles
22
+ * @fires {InputEvent} input - Fired when a filter/toggle chip's selection state changes. --bubbles --composed
23
+ * @csspart chip - The root container element.
24
+ * @cssprop --avatar-opacity
25
+ * @cssprop --avatar-shape
26
+ * @cssprop --avatar-size
27
+ * @cssprop --container-color
28
+ * @cssprop --container-elevation
29
+ * @cssprop --container-opacity
30
+ * @cssprop --gap-horizontal
31
+ * @cssprop --height
32
+ * @cssprop --label-text
33
+ * @cssprop --label-text-color
34
+ * @cssprop --label-text-opacity
35
+ * @cssprop --leading-icon-color
36
+ * @cssprop --leading-icon-opacity
37
+ * @cssprop --leading-icon-size
38
+ * @cssprop --outline-color
39
+ * @cssprop --outline-opacity
40
+ * @cssprop --outline-width
41
+ * @cssprop --padding-bottom
42
+ * @cssprop --padding-leading
43
+ * @cssprop --padding-top
44
+ * @cssprop --padding-trailing
45
+ * @cssprop --shape
46
+ * @cssprop --trailing-icon-color
47
+ * @cssprop --trailing-icon-opacity
48
+ * @cssprop --trailing-icon-size
49
+ */
50
+ export class ChipElement extends LitElement {
51
+ constructor() {
52
+ super(...arguments);
53
+ /** The color emphasis of the chip. Defaults to `outlined`. */
54
+ this.color = 'outlined';
55
+ /** The functional behavior type of the chip (`action`, `filter`, `toggle`, `link`). */
56
+ this.type = 'action';
57
+ /** Whether the filter or toggle chip is selected. */
58
+ this.selected = false;
59
+ /** Whether the chip is removable. */
60
+ this.removable = false;
61
+ /** Whether the chip is disabled. */
62
+ this.disabled = false;
63
+ /** Whether the chip is soft-disabled (`aria-disabled="true"` while preserving focusability). */
64
+ this.softDisabled = false;
65
+ /** The URL destination if `type="link"` or if `href` is set. */
66
+ this.href = '';
67
+ /** Where to display the linked `href` URL for a link chip. */
68
+ this.target = '';
69
+ this.hasLeadingIcon = false;
70
+ this.hasAvatar = false;
71
+ this.hasRemoveIcon = false;
72
+ }
73
+ render() {
74
+ const isFilterSelected = (this.type === 'filter' || this.type === 'toggle') && this.selected;
75
+ const withLeadingIcon = this.hasLeadingIcon || isFilterSelected;
76
+ const withAvatar = this.hasAvatar;
77
+ const chipClasses = chip({
78
+ color: this.color,
79
+ type: this.href ? 'link' : this.type,
80
+ selected: this.selected,
81
+ removable: this.removable,
82
+ disabled: this.softDisabled || this.disabled,
83
+ withLeadingIcon: withLeadingIcon && !withAvatar,
84
+ withAvatar,
85
+ withTrailingIcon: this.removable || this.hasRemoveIcon,
86
+ });
87
+ if (this.href || this.type === 'link') {
88
+ return html `<a
89
+ part="chip"
90
+ class="${chipClasses}"
91
+ href=${this.href}
92
+ target=${this.target ||
93
+ nothing}
94
+ aria-disabled=${this.disabled || this.softDisabled ? 'true' : nothing}
95
+ tabindex=${this.disabled && !this.softDisabled ? -1 : nothing}>
96
+ ${this.renderContent(withLeadingIcon, isFilterSelected)}
97
+ </a>`;
98
+ }
99
+ if (this.removable) {
100
+ return html `<div
101
+ part="chip"
102
+ class="${chipClasses}"
103
+ role="row"
104
+ aria-pressed=${this.type === 'filter' || this.type === 'toggle'
105
+ ? (this.selected ? 'true' : 'false')
106
+ : nothing}
107
+ @change=${this.handleChange}>
108
+ <button
109
+ class="chip-action focus-ring-target"
110
+ type="button"
111
+ ?disabled=${this.disabled}
112
+ aria-disabled=${this.softDisabled ? 'true' : nothing}>
113
+ ${this.renderContent(withLeadingIcon, isFilterSelected)}
114
+ </button>
115
+ ${this.renderRemoveButton()}
116
+ </div>`;
117
+ }
118
+ return html `<button
119
+ part="chip"
120
+ class="${chipClasses}"
121
+ type="button"
122
+ ?disabled=${this.disabled}
123
+ aria-disabled=${this.softDisabled ? 'true' : nothing}
124
+ aria-pressed=${this.type === 'filter' || this.type === 'toggle'
125
+ ? (this.selected ? 'true' : 'false')
126
+ : nothing}
127
+ @change=${this.handleChange}>
128
+ ${this.renderContent(withLeadingIcon, isFilterSelected)}
129
+ </button>`;
130
+ }
131
+ renderContent(withLeadingIcon, isFilterSelected) {
132
+ return html `
133
+ ${this.renderLeadingIcon(withLeadingIcon, isFilterSelected)}
134
+ <slot></slot>
135
+ `;
136
+ }
137
+ renderLeadingIcon(withLeadingIcon, isFilterSelected) {
138
+ return html `<span
139
+ class="chip-icon"
140
+ style="${withLeadingIcon ? '' : 'display: none;'}">
141
+ <slot name="icon" @slotchange=${this.handleIconSlotChange}>
142
+ ${isFilterSelected ? html `✓` : nothing}
143
+ </slot>
144
+ </span>`;
145
+ }
146
+ renderRemoveButton() {
147
+ return html `<button
148
+ class="chip-remove focus-ring-outer"
149
+ type="button"
150
+ aria-label="Remove"
151
+ ?disabled=${this.disabled}
152
+ aria-disabled=${this.softDisabled ? 'true' : nothing}
153
+ @click=${this.handleRemove}>
154
+ <slot
155
+ name="remove-icon"
156
+ @slotchange=${this.handleRemoveIconSlotChange}
157
+ >✕</slot
158
+ >
159
+ </button>`;
160
+ }
161
+ handleIconSlotChange(event) {
162
+ const slot = event.target;
163
+ const elements = slot.assignedElements({ flatten: true });
164
+ this.hasLeadingIcon = elements.length > 0;
165
+ this.hasAvatar = elements.some((el) => el.classList.contains('chip-avatar'));
166
+ }
167
+ handleRemoveIconSlotChange(event) {
168
+ const slot = event.target;
169
+ this.hasRemoveIcon = slot.assignedNodes({ flatten: true }).length > 0;
170
+ }
171
+ handleChange(event) {
172
+ this.selected = event.target.ariaPressed === 'true';
173
+ redispatchEvent(this, event);
174
+ }
175
+ handleRemove(event) {
176
+ event.stopPropagation();
177
+ if (this.disabled || this.softDisabled)
178
+ return;
179
+ this.dispatchEvent(new Event('remove', { bubbles: true, composed: true }));
180
+ }
181
+ }
182
+ /** @nocollapse */
183
+ ChipElement.styles = [
184
+ focusRingStyles,
185
+ rippleStyles,
186
+ chipStyles,
187
+ css `
188
+ :host {
189
+ display: inline-flex;
190
+ vertical-align: middle;
191
+ }
192
+ .chip {
193
+ flex: 1;
194
+ }
195
+ .chip-icon {
196
+ display: inline-flex;
197
+ align-items: center;
198
+ }
199
+ `,
200
+ ];
201
+ __decorate([
202
+ property()
203
+ ], ChipElement.prototype, "color", void 0);
204
+ __decorate([
205
+ property()
206
+ ], ChipElement.prototype, "type", void 0);
207
+ __decorate([
208
+ property({ type: Boolean, reflect: true })
209
+ ], ChipElement.prototype, "selected", void 0);
210
+ __decorate([
211
+ property({ type: Boolean, reflect: true })
212
+ ], ChipElement.prototype, "removable", void 0);
213
+ __decorate([
214
+ property({ type: Boolean, reflect: true })
215
+ ], ChipElement.prototype, "disabled", void 0);
216
+ __decorate([
217
+ property({ type: Boolean, attribute: 'soft-disabled', reflect: true })
218
+ ], ChipElement.prototype, "softDisabled", void 0);
219
+ __decorate([
220
+ property()
221
+ ], ChipElement.prototype, "href", void 0);
222
+ __decorate([
223
+ property()
224
+ ], ChipElement.prototype, "target", void 0);
225
+ __decorate([
226
+ state()
227
+ ], ChipElement.prototype, "hasLeadingIcon", void 0);
228
+ __decorate([
229
+ state()
230
+ ], ChipElement.prototype, "hasAvatar", void 0);
231
+ __decorate([
232
+ state()
233
+ ], ChipElement.prototype, "hasRemoveIcon", void 0);
234
+ //# sourceMappingURL=chip-element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chip-element.js","sourceRoot":"","sources":["chip-element.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * @license\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {css, CSSResultOrNative, html, LitElement, nothing} from 'lit';\nimport {property, state} from 'lit/decorators.js';\nimport {redispatchEvent} from '../../../../internal/events/redispatch-event.js';\nimport focusRingStyles from '../focus/focus-ring.cssresult.js';\nimport rippleStyles from '../ripple/ripple.cssresult.js';\nimport {chip, type ChipColor, type ChipType} from './chip.js';\nimport {styles as chipStyles} from './chip.cssresult.js';\n\n/**\n * A Material Design Expressive Chip component (`md-gb-chip`).\n *\n * @slot - Used to display the chip label text.\n * @slot icon - Used to display an optional leading icon, checkmark, or avatar.\n * @slot remove-icon - Used to display the trailing remove button icon when `removable=\"true\"`.\n * @fires {Event} remove - Fired when the remove action is triggered on a removable chip. --bubbles --composed\n * @fires {Event} change - Fired when a filter/toggle chip's selection state changes. --bubbles\n * @fires {InputEvent} input - Fired when a filter/toggle chip's selection state changes. --bubbles --composed\n * @csspart chip - The root container element.\n * @cssprop --avatar-opacity\n * @cssprop --avatar-shape\n * @cssprop --avatar-size\n * @cssprop --container-color\n * @cssprop --container-elevation\n * @cssprop --container-opacity\n * @cssprop --gap-horizontal\n * @cssprop --height\n * @cssprop --label-text\n * @cssprop --label-text-color\n * @cssprop --label-text-opacity\n * @cssprop --leading-icon-color\n * @cssprop --leading-icon-opacity\n * @cssprop --leading-icon-size\n * @cssprop --outline-color\n * @cssprop --outline-opacity\n * @cssprop --outline-width\n * @cssprop --padding-bottom\n * @cssprop --padding-leading\n * @cssprop --padding-top\n * @cssprop --padding-trailing\n * @cssprop --shape\n * @cssprop --trailing-icon-color\n * @cssprop --trailing-icon-opacity\n * @cssprop --trailing-icon-size\n */\nexport class ChipElement extends LitElement {\n /** @nocollapse */\n static override styles: CSSResultOrNative[] = [\n focusRingStyles,\n rippleStyles,\n chipStyles,\n css`\n :host {\n display: inline-flex;\n vertical-align: middle;\n }\n .chip {\n flex: 1;\n }\n .chip-icon {\n display: inline-flex;\n align-items: center;\n }\n `,\n ];\n\n /** The color emphasis of the chip. Defaults to `outlined`. */\n @property() color: ChipColor = 'outlined';\n\n /** The functional behavior type of the chip (`action`, `filter`, `toggle`, `link`). */\n @property() type: ChipType = 'action';\n\n /** Whether the filter or toggle chip is selected. */\n @property({type: Boolean, reflect: true}) selected = false;\n\n /** Whether the chip is removable. */\n @property({type: Boolean, reflect: true}) removable = false;\n\n /** Whether the chip is disabled. */\n @property({type: Boolean, reflect: true}) disabled = false;\n\n /** Whether the chip is soft-disabled (`aria-disabled=\"true\"` while preserving focusability). */\n @property({type: Boolean, attribute: 'soft-disabled', reflect: true})\n softDisabled = false;\n\n /** The URL destination if `type=\"link\"` or if `href` is set. */\n @property() href = '';\n\n /** Where to display the linked `href` URL for a link chip. */\n @property() target: '_blank' | '_parent' | '_self' | '_top' | '' = '';\n\n @state() private hasLeadingIcon = false;\n @state() private hasAvatar = false;\n @state() private hasRemoveIcon = false;\n\n protected override render() {\n const isFilterSelected =\n (this.type === 'filter' || this.type === 'toggle') && this.selected;\n const withLeadingIcon = this.hasLeadingIcon || isFilterSelected;\n const withAvatar = this.hasAvatar;\n\n const chipClasses = chip({\n color: this.color,\n type: this.href ? 'link' : this.type,\n selected: this.selected,\n removable: this.removable,\n disabled: this.softDisabled || this.disabled,\n withLeadingIcon: withLeadingIcon && !withAvatar,\n withAvatar,\n withTrailingIcon: this.removable || this.hasRemoveIcon,\n });\n\n if (this.href || this.type === 'link') {\n return html`<a\n part=\"chip\"\n class=\"${chipClasses}\"\n href=${this.href}\n target=${(this.target as '_blank' | '_parent' | '_self' | '_top') ||\n nothing}\n aria-disabled=${this.disabled || this.softDisabled ? 'true' : nothing}\n tabindex=${this.disabled && !this.softDisabled ? -1 : nothing}>\n ${this.renderContent(withLeadingIcon, isFilterSelected)}\n </a>`;\n }\n\n if (this.removable) {\n return html`<div\n part=\"chip\"\n class=\"${chipClasses}\"\n role=\"row\"\n aria-pressed=${this.type === 'filter' || this.type === 'toggle'\n ? (this.selected ? 'true' : 'false')\n : nothing}\n @change=${this.handleChange}>\n <button\n class=\"chip-action focus-ring-target\"\n type=\"button\"\n ?disabled=${this.disabled}\n aria-disabled=${this.softDisabled ? 'true' : nothing}>\n ${this.renderContent(withLeadingIcon, isFilterSelected)}\n </button>\n ${this.renderRemoveButton()}\n </div>`;\n }\n\n return html`<button\n part=\"chip\"\n class=\"${chipClasses}\"\n type=\"button\"\n ?disabled=${this.disabled}\n aria-disabled=${this.softDisabled ? 'true' : nothing}\n aria-pressed=${this.type === 'filter' || this.type === 'toggle'\n ? (this.selected ? 'true' : 'false')\n : nothing}\n @change=${this.handleChange}>\n ${this.renderContent(withLeadingIcon, isFilterSelected)}\n </button>`;\n }\n\n private renderContent(withLeadingIcon: boolean, isFilterSelected: boolean) {\n return html`\n ${this.renderLeadingIcon(withLeadingIcon, isFilterSelected)}\n <slot></slot>\n `;\n }\n\n private renderLeadingIcon(\n withLeadingIcon: boolean,\n isFilterSelected: boolean,\n ) {\n return html`<span\n class=\"chip-icon\"\n style=\"${withLeadingIcon ? '' : 'display: none;'}\">\n <slot name=\"icon\" @slotchange=${this.handleIconSlotChange}>\n ${isFilterSelected ? html`✓` : nothing}\n </slot>\n </span>`;\n }\n\n private renderRemoveButton() {\n return html`<button\n class=\"chip-remove focus-ring-outer\"\n type=\"button\"\n aria-label=\"Remove\"\n ?disabled=${this.disabled}\n aria-disabled=${this.softDisabled ? 'true' : nothing}\n @click=${this.handleRemove}>\n <slot\n name=\"remove-icon\"\n @slotchange=${this.handleRemoveIconSlotChange}\n >✕</slot\n >\n </button>`;\n }\n\n private handleIconSlotChange(event: Event) {\n const slot = event.target as HTMLSlotElement;\n const elements = slot.assignedElements({flatten: true});\n this.hasLeadingIcon = elements.length > 0;\n this.hasAvatar = elements.some((el) => el.classList.contains('chip-avatar'));\n }\n\n private handleRemoveIconSlotChange(event: Event) {\n const slot = event.target as HTMLSlotElement;\n this.hasRemoveIcon = slot.assignedNodes({flatten: true}).length > 0;\n }\n\n private handleChange(event: Event) {\n this.selected = (event.target as HTMLElement).ariaPressed === 'true';\n redispatchEvent(this, event);\n }\n\n private handleRemove(event: Event) {\n event.stopPropagation();\n if (this.disabled || this.softDisabled) return;\n this.dispatchEvent(new Event('remove', {bubbles: true, composed: true}));\n }\n}\n"]}
@@ -0,0 +1,4 @@
1
+ /*!
2
+ * Copyright 2026 Google LLC
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */@layer md.sys, md.comp.ripple, md.comp.focus-ring;@layer md.comp.chip{.chip{--avatar-opacity: unset;--avatar-shape: var(--md-sys-shape-corner-full);--avatar-size: 24px;--container-color: unset;--container-elevation: var(--md-sys-elevation-shadow-0);--gap-horizontal: var(--md-sys-space-50);--height: 32px;--label-text: var(--md-sys-typescale-label-lg);--label-text-axes: var(--md-sys-typescale-label-lg-axes);--label-text-color: var(--md-sys-color-on-surface-variant);--label-text-tracking: var(--md-sys-typescale-label-lg-tracking);--leading-icon-color: var(--md-sys-color-on-surface-variant);--leading-icon-size: 18px;--outline-color: var(--md-sys-color-outline-variant);--outline-width: 1px;--padding-bottom: var(--md-sys-space-75);--padding-leading: var(--md-sys-space-200);--padding-top: var(--md-sys-space-75);--padding-trailing: var(--md-sys-space-200);--shape: var(--md-sys-shape-corner-md);--trailing-icon-color: var(--md-sys-color-on-surface-variant);--trailing-icon-size: 18px}.chip.chip-elevated{--container-color: var(--md-sys-color-surface-container-low);--container-elevation: var(--md-sys-elevation-shadow-1);--label-text-color: var(--md-sys-color-on-surface);--outline-width: 0}.chip.chip-filled{--container-color: var(--md-sys-color-surface-container);--container-elevation: var(--md-sys-elevation-shadow-0);--label-text-color: var(--md-sys-color-on-surface);--outline-width: 0}.chip.chip-tonal{--container-color: var(--md-sys-color-secondary-container);--container-elevation: var(--md-sys-elevation-shadow-0);--label-text-color: var(--md-sys-color-on-secondary-container);--outline-width: 0}.chip.chip-outlined{--container-color: transparent;--container-elevation: var(--md-sys-elevation-shadow-0);--label-text-color: var(--md-sys-color-on-surface);--outline-color: var(--md-sys-color-outline);--outline-width: 1px}.chip:is(.chip-selected,[aria-pressed=true]){--container-color: var(--md-sys-color-secondary-container);--label-text-color: var(--md-sys-color-on-secondary-container);--leading-icon-color: var(--md-sys-color-on-secondary-container);--outline-width: 0px;--shape: var(--md-sys-shape-corner-full);--trailing-icon-color: var(--md-sys-color-on-secondary-container)}.chip.chip-input{--padding-leading: var(--md-sys-space-150);--padding-trailing: var(--md-sys-space-150)}.chip.chip-with-leading-icon{--padding-leading: var(--md-sys-space-100)}.chip.chip-with-trailing-icon{--padding-trailing: var(--md-sys-space-100)}.chip.chip-with-avatar{--padding-leading: var(--md-sys-space-50)}.chip:is(:disabled,.disabled,[aria-disabled=true]){--avatar-opacity: 0.38;--label-text-color: hsl(from var(--md-sys-color-on-surface) h s l / 0.38);--leading-icon-color: hsl(from var(--md-sys-color-on-surface) h s l / 0.38);--outline-color: hsl(from var(--md-sys-color-on-surface) h s l / 0.1);--trailing-icon-color: hsl(from var(--md-sys-color-on-surface) h s l / 0.38)}.chip{display:inline-flex;align-items:center;justify-content:center;height:var(--height);gap:var(--gap-horizontal);padding-inline:var(--padding-leading) var(--padding-trailing);padding-block:var(--padding-top) var(--padding-bottom);border:var(--outline-width) solid var(--outline-color);border-radius:var(--shape);box-shadow:var(--container-elevation);background-color:var(--container-color);color:var(--label-text-color);font:var(--label-text);letter-spacing:var(--label-text-tracking);font-variation-settings:var(--label-text-axes);box-sizing:border-box;user-select:none;white-space:nowrap;--md-icon-color: var(--leading-icon-color);--md-icon-size: var(--leading-icon-size)}.chip:not(:disabled,.disabled,[aria-disabled=true]){cursor:pointer}.chip .chip-action,.chip .chip-remove{display:inline-flex;align-items:center;justify-content:center;gap:var(--gap-horizontal);background:rgba(0,0,0,0);border:none;outline:none;color:inherit;font:inherit;padding:0;margin:0;height:100%;cursor:inherit}.chip .chip-remove{border-radius:50%;aspect-ratio:1;margin-inline-start:4px;outline:var(--focus-ring-outline);--md-icon-color: var(--trailing-icon-color);--md-icon-size: var(--trailing-icon-size)}}/*# sourceMappingURL=chip.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["chip.scss","_chip-tokens.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA,GASA,kDACA,oBACE,MCGA,wBAEA,gDAEA,oBACA,yBAEA,wDAGA,yCAEA,eAEA,+CAEA,yDAEA,2DAGA,iEAEA,6DAGA,0BAEA,qDAGA,qBAEA,yCAEA,2CAEA,sCAEA,4CAEA,uCAEA,8DAGA,2BD/CE,oBC+HF,6DACA,wDACA,mDACA,mBD/HE,kBCmIF,yDACA,wDACA,mDACA,mBDnIE,iBCuIF,2DACA,wDACA,+DACA,mBDvIE,oBC2IF,+BACA,wDACA,mDACA,6CACA,qBD5IE,6CCmDF,2DAEA,+DAEA,iEAEA,qBAEA,yCAEA,kEDvDE,iBC4DF,2CAEA,4CD3DE,6BCgEF,2CD7DE,8BCuEF,4CDpEE,uBC+DF,0CD5DE,mDCsEF,uBAGA,0EAGA,4EAGA,sEAGA,6ED9EE,MACE,oBACA,mBACA,uBACA,qBACA,0BACA,8DACA,uDACA,uDACA,2BACA,sCACA,wCACA,8BACA,uBACA,0CACA,+CACA,sBACA,iBACA,mBACA,2CACA,yCAEF,oDACE,eAGF,sCAEE,oBACA,mBACA,uBACA,0BACA,yBACA,YACA,aACA,cACA,aACA,UACA,SACA,YACA,eAEF,mBACE,kBACA,eACA,wBACA,kCACA,4CACA","file":"chip.css"}
@@ -0,0 +1,3 @@
1
+ export declare const styles: import("lit").CSSResult;
2
+ declare const _default: CSSStyleSheet;
3
+ export default _default;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ // Generated stylesheet for ./labs/gb/components/chip/chip.css.
7
+ import { css } from 'lit';
8
+ export const styles = css `/*!
9
+ * Copyright 2026 Google LLC
10
+ * SPDX-License-Identifier: Apache-2.0
11
+ */@layer md.sys, md.comp.ripple, md.comp.focus-ring;@layer md.comp.chip{.chip{--avatar-opacity: unset;--avatar-shape: var(--md-sys-shape-corner-full);--avatar-size: 24px;--container-color: unset;--container-elevation: var(--md-sys-elevation-shadow-0);--gap-horizontal: var(--md-sys-space-50);--height: 32px;--label-text: var(--md-sys-typescale-label-lg);--label-text-axes: var(--md-sys-typescale-label-lg-axes);--label-text-color: var(--md-sys-color-on-surface-variant);--label-text-tracking: var(--md-sys-typescale-label-lg-tracking);--leading-icon-color: var(--md-sys-color-on-surface-variant);--leading-icon-size: 18px;--outline-color: var(--md-sys-color-outline-variant);--outline-width: 1px;--padding-bottom: var(--md-sys-space-75);--padding-leading: var(--md-sys-space-200);--padding-top: var(--md-sys-space-75);--padding-trailing: var(--md-sys-space-200);--shape: var(--md-sys-shape-corner-md);--trailing-icon-color: var(--md-sys-color-on-surface-variant);--trailing-icon-size: 18px}.chip.chip-elevated{--container-color: var(--md-sys-color-surface-container-low);--container-elevation: var(--md-sys-elevation-shadow-1);--label-text-color: var(--md-sys-color-on-surface);--outline-width: 0}.chip.chip-filled{--container-color: var(--md-sys-color-surface-container);--container-elevation: var(--md-sys-elevation-shadow-0);--label-text-color: var(--md-sys-color-on-surface);--outline-width: 0}.chip.chip-tonal{--container-color: var(--md-sys-color-secondary-container);--container-elevation: var(--md-sys-elevation-shadow-0);--label-text-color: var(--md-sys-color-on-secondary-container);--outline-width: 0}.chip.chip-outlined{--container-color: transparent;--container-elevation: var(--md-sys-elevation-shadow-0);--label-text-color: var(--md-sys-color-on-surface);--outline-color: var(--md-sys-color-outline);--outline-width: 1px}.chip:is(.chip-selected,[aria-pressed=true]){--container-color: var(--md-sys-color-secondary-container);--label-text-color: var(--md-sys-color-on-secondary-container);--leading-icon-color: var(--md-sys-color-on-secondary-container);--outline-width: 0px;--shape: var(--md-sys-shape-corner-full);--trailing-icon-color: var(--md-sys-color-on-secondary-container)}.chip.chip-input{--padding-leading: var(--md-sys-space-150);--padding-trailing: var(--md-sys-space-150)}.chip.chip-with-leading-icon{--padding-leading: var(--md-sys-space-100)}.chip.chip-with-trailing-icon{--padding-trailing: var(--md-sys-space-100)}.chip.chip-with-avatar{--padding-leading: var(--md-sys-space-50)}.chip:is(:disabled,.disabled,[aria-disabled=true]){--avatar-opacity: 0.38;--label-text-color: hsl(from var(--md-sys-color-on-surface) h s l / 0.38);--leading-icon-color: hsl(from var(--md-sys-color-on-surface) h s l / 0.38);--outline-color: hsl(from var(--md-sys-color-on-surface) h s l / 0.1);--trailing-icon-color: hsl(from var(--md-sys-color-on-surface) h s l / 0.38)}.chip{display:inline-flex;align-items:center;justify-content:center;height:var(--height);gap:var(--gap-horizontal);padding-inline:var(--padding-leading) var(--padding-trailing);padding-block:var(--padding-top) var(--padding-bottom);border:var(--outline-width) solid var(--outline-color);border-radius:var(--shape);box-shadow:var(--container-elevation);background-color:var(--container-color);color:var(--label-text-color);font:var(--label-text);letter-spacing:var(--label-text-tracking);font-variation-settings:var(--label-text-axes);box-sizing:border-box;user-select:none;white-space:nowrap;--md-icon-color: var(--leading-icon-color);--md-icon-size: var(--leading-icon-size)}.chip:not(:disabled,.disabled,[aria-disabled=true]){cursor:pointer}.chip .chip-action,.chip .chip-remove{display:inline-flex;align-items:center;justify-content:center;gap:var(--gap-horizontal);background:rgba(0,0,0,0);border:none;outline:none;color:inherit;font:inherit;padding:0;margin:0;height:100%;cursor:inherit}.chip .chip-remove{border-radius:50%;aspect-ratio:1;margin-inline-start:4px;outline:var(--focus-ring-outline);--md-icon-color: var(--trailing-icon-color);--md-icon-size: var(--trailing-icon-size)}}
12
+ `;
13
+ export default styles.styleSheet;
14
+ //# sourceMappingURL=chip.cssresult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chip.cssresult.js","sourceRoot":"","sources":["chip.cssresult.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,+DAA+D;AAC/D,OAAO,EAAC,GAAG,EAAC,MAAM,KAAK,CAAC;AACxB,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAA;;;;CAIxB,CAAC;AACF,eAAe,MAAM,CAAC,UAAW,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n// Generated stylesheet for ./labs/gb/components/chip/chip.css.\nimport {css} from 'lit';\nexport const styles = css`/*!\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */@layer md.sys, md.comp.ripple, md.comp.focus-ring;@layer md.comp.chip{.chip{--avatar-opacity: unset;--avatar-shape: var(--md-sys-shape-corner-full);--avatar-size: 24px;--container-color: unset;--container-elevation: var(--md-sys-elevation-shadow-0);--gap-horizontal: var(--md-sys-space-50);--height: 32px;--label-text: var(--md-sys-typescale-label-lg);--label-text-axes: var(--md-sys-typescale-label-lg-axes);--label-text-color: var(--md-sys-color-on-surface-variant);--label-text-tracking: var(--md-sys-typescale-label-lg-tracking);--leading-icon-color: var(--md-sys-color-on-surface-variant);--leading-icon-size: 18px;--outline-color: var(--md-sys-color-outline-variant);--outline-width: 1px;--padding-bottom: var(--md-sys-space-75);--padding-leading: var(--md-sys-space-200);--padding-top: var(--md-sys-space-75);--padding-trailing: var(--md-sys-space-200);--shape: var(--md-sys-shape-corner-md);--trailing-icon-color: var(--md-sys-color-on-surface-variant);--trailing-icon-size: 18px}.chip.chip-elevated{--container-color: var(--md-sys-color-surface-container-low);--container-elevation: var(--md-sys-elevation-shadow-1);--label-text-color: var(--md-sys-color-on-surface);--outline-width: 0}.chip.chip-filled{--container-color: var(--md-sys-color-surface-container);--container-elevation: var(--md-sys-elevation-shadow-0);--label-text-color: var(--md-sys-color-on-surface);--outline-width: 0}.chip.chip-tonal{--container-color: var(--md-sys-color-secondary-container);--container-elevation: var(--md-sys-elevation-shadow-0);--label-text-color: var(--md-sys-color-on-secondary-container);--outline-width: 0}.chip.chip-outlined{--container-color: transparent;--container-elevation: var(--md-sys-elevation-shadow-0);--label-text-color: var(--md-sys-color-on-surface);--outline-color: var(--md-sys-color-outline);--outline-width: 1px}.chip:is(.chip-selected,[aria-pressed=true]){--container-color: var(--md-sys-color-secondary-container);--label-text-color: var(--md-sys-color-on-secondary-container);--leading-icon-color: var(--md-sys-color-on-secondary-container);--outline-width: 0px;--shape: var(--md-sys-shape-corner-full);--trailing-icon-color: var(--md-sys-color-on-secondary-container)}.chip.chip-input{--padding-leading: var(--md-sys-space-150);--padding-trailing: var(--md-sys-space-150)}.chip.chip-with-leading-icon{--padding-leading: var(--md-sys-space-100)}.chip.chip-with-trailing-icon{--padding-trailing: var(--md-sys-space-100)}.chip.chip-with-avatar{--padding-leading: var(--md-sys-space-50)}.chip:is(:disabled,.disabled,[aria-disabled=true]){--avatar-opacity: 0.38;--label-text-color: hsl(from var(--md-sys-color-on-surface) h s l / 0.38);--leading-icon-color: hsl(from var(--md-sys-color-on-surface) h s l / 0.38);--outline-color: hsl(from var(--md-sys-color-on-surface) h s l / 0.1);--trailing-icon-color: hsl(from var(--md-sys-color-on-surface) h s l / 0.38)}.chip{display:inline-flex;align-items:center;justify-content:center;height:var(--height);gap:var(--gap-horizontal);padding-inline:var(--padding-leading) var(--padding-trailing);padding-block:var(--padding-top) var(--padding-bottom);border:var(--outline-width) solid var(--outline-color);border-radius:var(--shape);box-shadow:var(--container-elevation);background-color:var(--container-color);color:var(--label-text-color);font:var(--label-text);letter-spacing:var(--label-text-tracking);font-variation-settings:var(--label-text-axes);box-sizing:border-box;user-select:none;white-space:nowrap;--md-icon-color: var(--leading-icon-color);--md-icon-size: var(--leading-icon-size)}.chip:not(:disabled,.disabled,[aria-disabled=true]){cursor:pointer}.chip .chip-action,.chip .chip-remove{display:inline-flex;align-items:center;justify-content:center;gap:var(--gap-horizontal);background:rgba(0,0,0,0);border:none;outline:none;color:inherit;font:inherit;padding:0;margin:0;height:100%;cursor:inherit}.chip .chip-remove{border-radius:50%;aspect-ratio:1;margin-inline-start:4px;outline:var(--focus-ring-outline);--md-icon-color: var(--trailing-icon-color);--md-icon-size: var(--trailing-icon-size)}}\n`;\nexport default styles.styleSheet!;\n"]}