@material/web 2.4.2-nightly.d7503be.0 → 2.4.2-nightly.e58e4e8.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 (149) hide show
  1. package/custom-elements.json +2253 -1201
  2. package/labs/gb/components/badge/_badge-tokens.scss +18 -0
  3. package/labs/gb/components/badge/badge-element.d.ts +15 -0
  4. package/labs/gb/components/badge/badge-element.js +49 -0
  5. package/labs/gb/components/badge/badge-element.js.map +1 -0
  6. package/labs/gb/components/badge/badge.css +4 -0
  7. package/labs/gb/components/badge/badge.css.map +1 -0
  8. package/labs/gb/components/badge/badge.cssresult.d.ts +3 -0
  9. package/labs/gb/components/badge/badge.cssresult.js +14 -0
  10. package/labs/gb/components/badge/badge.cssresult.js.map +1 -0
  11. package/labs/gb/components/badge/badge.d.ts +32 -0
  12. package/labs/gb/components/badge/badge.js +35 -0
  13. package/labs/gb/components/badge/badge.js.map +1 -0
  14. package/labs/gb/components/badge/badge.scss +49 -0
  15. package/labs/gb/components/badge/md-gb-badge.d.ts +12 -0
  16. package/labs/gb/components/badge/md-gb-badge.js +8 -0
  17. package/labs/gb/components/badge/md-gb-badge.js.map +1 -0
  18. package/labs/gb/components/button/_button-tokens.scss +2 -0
  19. package/labs/gb/components/button/{md-button.d.ts → button-element.d.ts} +22 -7
  20. package/labs/gb/components/button/{md-button.js → button-element.js} +37 -20
  21. package/labs/gb/components/button/button-element.js.map +1 -0
  22. package/labs/gb/components/button/button.css.map +1 -1
  23. package/labs/gb/components/button/md-gb-button.d.ts +12 -0
  24. package/labs/gb/components/button/md-gb-button.js +8 -0
  25. package/labs/gb/components/button/md-gb-button.js.map +1 -0
  26. package/labs/gb/components/card/_card-tokens.scss +2 -0
  27. package/labs/gb/components/card/{md-card.d.ts → card-element.d.ts} +12 -7
  28. package/labs/gb/components/card/{md-card.js → card-element.js} +21 -14
  29. package/labs/gb/components/card/card-element.js.map +1 -0
  30. package/labs/gb/components/card/card.css.map +1 -1
  31. package/labs/gb/components/card/md-gb-card.d.ts +12 -0
  32. package/labs/gb/components/card/md-gb-card.js +8 -0
  33. package/labs/gb/components/card/md-gb-card.js.map +1 -0
  34. package/labs/gb/components/checkbox/_checkbox-tokens.scss +2 -0
  35. package/labs/gb/components/checkbox/{md-checkbox.d.ts → checkbox-element.d.ts} +15 -7
  36. package/labs/gb/components/checkbox/{md-checkbox.js → checkbox-element.js} +26 -16
  37. package/labs/gb/components/checkbox/checkbox-element.js.map +1 -0
  38. package/labs/gb/components/checkbox/checkbox.css.map +1 -1
  39. package/labs/gb/components/checkbox/md-gb-checkbox.d.ts +12 -0
  40. package/labs/gb/components/checkbox/md-gb-checkbox.js +8 -0
  41. package/labs/gb/components/checkbox/md-gb-checkbox.js.map +1 -0
  42. package/labs/gb/components/divider/_divider-tokens.scss +2 -0
  43. package/labs/gb/components/divider/{md-divider.d.ts → divider-element.d.ts} +5 -7
  44. package/labs/gb/components/divider/{md-divider.js → divider-element.js} +10 -10
  45. package/labs/gb/components/divider/divider-element.js.map +1 -0
  46. package/labs/gb/components/divider/divider.css.map +1 -1
  47. package/labs/gb/components/divider/md-gb-divider.d.ts +12 -0
  48. package/labs/gb/components/divider/md-gb-divider.js +8 -0
  49. package/labs/gb/components/divider/md-gb-divider.js.map +1 -0
  50. package/labs/gb/components/fab/_fab-tokens.scss +2 -0
  51. package/labs/gb/components/fab/fab-element.d.ts +31 -0
  52. package/labs/gb/components/fab/{md-fab.js → fab-element.js} +22 -11
  53. package/labs/gb/components/fab/fab-element.js.map +1 -0
  54. package/labs/gb/components/fab/fab.css.map +1 -1
  55. package/labs/gb/components/fab/md-gb-fab.d.ts +12 -0
  56. package/labs/gb/components/fab/md-gb-fab.js +8 -0
  57. package/labs/gb/components/fab/md-gb-fab.js.map +1 -0
  58. package/labs/gb/components/iconbutton/_icon-button-tokens.scss +2 -0
  59. package/labs/gb/components/iconbutton/{md-icon-button.d.ts → icon-button-element.d.ts} +15 -7
  60. package/labs/gb/components/iconbutton/{md-icon-button.js → icon-button-element.js} +30 -20
  61. package/labs/gb/components/iconbutton/icon-button-element.js.map +1 -0
  62. package/labs/gb/components/iconbutton/icon-button.css.map +1 -1
  63. package/labs/gb/components/iconbutton/md-gb-icon-button.d.ts +12 -0
  64. package/labs/gb/components/iconbutton/md-gb-icon-button.js +8 -0
  65. package/labs/gb/components/iconbutton/md-gb-icon-button.js.map +1 -0
  66. package/labs/gb/components/list/_list-tokens.scss +4 -0
  67. package/labs/gb/components/list/{md-list.d.ts → list-element.d.ts} +6 -7
  68. package/labs/gb/components/list/{md-list.js → list-element.js} +11 -10
  69. package/labs/gb/components/list/list-element.js.map +1 -0
  70. package/labs/gb/components/list/list-item-element.d.ts +77 -0
  71. package/labs/gb/components/list/{md-list-item.js → list-item-element.js} +48 -13
  72. package/labs/gb/components/list/list-item-element.js.map +1 -0
  73. package/labs/gb/components/list/list.css.map +1 -1
  74. package/labs/gb/components/list/md-gb-list-item.d.ts +12 -0
  75. package/labs/gb/components/list/md-gb-list-item.js +8 -0
  76. package/labs/gb/components/list/md-gb-list-item.js.map +1 -0
  77. package/labs/gb/components/list/md-gb-list.d.ts +12 -0
  78. package/labs/gb/components/list/md-gb-list.js +8 -0
  79. package/labs/gb/components/list/md-gb-list.js.map +1 -0
  80. package/labs/gb/components/menu/_menu-tokens.scss +4 -0
  81. package/labs/gb/components/menu/md-gb-menu-group.d.ts +12 -0
  82. package/labs/gb/components/menu/md-gb-menu-group.js +8 -0
  83. package/labs/gb/components/menu/md-gb-menu-group.js.map +1 -0
  84. package/labs/gb/components/menu/md-gb-menu-item.d.ts +12 -0
  85. package/labs/gb/components/menu/md-gb-menu-item.js +8 -0
  86. package/labs/gb/components/menu/md-gb-menu-item.js.map +1 -0
  87. package/labs/gb/components/menu/md-gb-menu.d.ts +12 -0
  88. package/labs/gb/components/menu/md-gb-menu.js +8 -0
  89. package/labs/gb/components/menu/md-gb-menu.js.map +1 -0
  90. package/labs/gb/components/menu/{md-menu.d.ts → menu-element.d.ts} +11 -7
  91. package/labs/gb/components/menu/{md-menu.js → menu-element.js} +16 -10
  92. package/labs/gb/components/menu/menu-element.js.map +1 -0
  93. package/labs/gb/components/menu/{md-menu-group.d.ts → menu-group-element.d.ts} +3 -6
  94. package/labs/gb/components/menu/{md-menu-group.js → menu-group-element.js} +11 -11
  95. package/labs/gb/components/menu/menu-group-element.js.map +1 -0
  96. package/labs/gb/components/menu/menu-item-element.d.ts +56 -0
  97. package/labs/gb/components/menu/{md-menu-item.js → menu-item-element.js} +41 -13
  98. package/labs/gb/components/menu/menu-item-element.js.map +1 -0
  99. package/labs/gb/components/menu/menu.css.map +1 -1
  100. package/labs/gb/components/radio/_radio-tokens.scss +2 -0
  101. package/labs/gb/components/radio/md-gb-radio.d.ts +12 -0
  102. package/labs/gb/components/radio/md-gb-radio.js +8 -0
  103. package/labs/gb/components/radio/md-gb-radio.js.map +1 -0
  104. package/labs/gb/components/radio/{md-radio.d.ts → radio-element.d.ts} +10 -7
  105. package/labs/gb/components/radio/{md-radio.js → radio-element.js} +19 -14
  106. package/labs/gb/components/radio/radio-element.js.map +1 -0
  107. package/labs/gb/components/radio/radio.css.map +1 -1
  108. package/labs/gb/components/splitbutton/_split-button-tokens.scss +4 -0
  109. package/labs/gb/components/splitbutton/md-gb-split-button.d.ts +12 -0
  110. package/labs/gb/components/splitbutton/md-gb-split-button.js +8 -0
  111. package/labs/gb/components/splitbutton/md-gb-split-button.js.map +1 -0
  112. package/labs/gb/components/splitbutton/split-button-element.d.ts +33 -0
  113. package/labs/gb/components/splitbutton/{md-split-button.js → split-button-element.js} +21 -12
  114. package/labs/gb/components/splitbutton/split-button-element.js.map +1 -0
  115. package/labs/gb/components/splitbutton/split-button.css.map +1 -1
  116. package/labs/gb/components/switch/_switch-tokens.scss +2 -0
  117. package/labs/gb/components/switch/md-gb-switch.d.ts +12 -0
  118. package/labs/gb/components/switch/md-gb-switch.js +8 -0
  119. package/labs/gb/components/switch/md-gb-switch.js.map +1 -0
  120. package/labs/gb/components/switch/{md-switch.d.ts → switch-element.d.ts} +19 -7
  121. package/labs/gb/components/switch/{md-switch.js → switch-element.js} +28 -14
  122. package/labs/gb/components/switch/switch-element.js.map +1 -0
  123. package/labs/gb/components/switch/switch.css.map +1 -1
  124. package/labs/gb/styles/icon/{md-icon.d.ts → icon-element.d.ts} +1 -7
  125. package/labs/gb/styles/icon/{md-icon.js → icon-element.js} +5 -10
  126. package/labs/gb/styles/icon/icon-element.js.map +1 -0
  127. package/labs/gb/styles/icon/md-gb-icon.d.ts +12 -0
  128. package/labs/gb/styles/icon/md-gb-icon.js +8 -0
  129. package/labs/gb/styles/icon/md-gb-icon.js.map +1 -0
  130. package/package.json +2 -2
  131. package/labs/gb/components/button/md-button.js.map +0 -1
  132. package/labs/gb/components/card/md-card.js.map +0 -1
  133. package/labs/gb/components/checkbox/md-checkbox.js.map +0 -1
  134. package/labs/gb/components/divider/md-divider.js.map +0 -1
  135. package/labs/gb/components/fab/md-fab.d.ts +0 -22
  136. package/labs/gb/components/fab/md-fab.js.map +0 -1
  137. package/labs/gb/components/iconbutton/md-icon-button.js.map +0 -1
  138. package/labs/gb/components/list/md-list-item.d.ts +0 -44
  139. package/labs/gb/components/list/md-list-item.js.map +0 -1
  140. package/labs/gb/components/list/md-list.js.map +0 -1
  141. package/labs/gb/components/menu/md-menu-group.js.map +0 -1
  142. package/labs/gb/components/menu/md-menu-item.d.ts +0 -30
  143. package/labs/gb/components/menu/md-menu-item.js.map +0 -1
  144. package/labs/gb/components/menu/md-menu.js.map +0 -1
  145. package/labs/gb/components/radio/md-radio.js.map +0 -1
  146. package/labs/gb/components/splitbutton/md-split-button.d.ts +0 -26
  147. package/labs/gb/components/splitbutton/md-split-button.js.map +0 -1
  148. package/labs/gb/components/switch/md-switch.js.map +0 -1
  149. package/labs/gb/styles/icon/md-icon.js.map +0 -1
@@ -0,0 +1,18 @@
1
+ //
2
+ // Copyright 2026 Google LLC
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ //
5
+
6
+ @mixin root {
7
+ --container-color: var(--md-sys-color-error);
8
+ --shape: var(--md-sys-shape-corner-full);
9
+ --size: 6px;
10
+ --label-text-color: var(--md-sys-color-on-error);
11
+ --label-text: var(--md-sys-typescale-label-sm);
12
+ --label-text-tracking: var(--md-sys-typescale-label-sm-tracking);
13
+ --label-text-axes: var(--md-sys-typescale-label-sm-axes);
14
+ }
15
+
16
+ @mixin large {
17
+ --size: 16px;
18
+ }
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { CSSResultOrNative, LitElement } from 'lit';
7
+ /**
8
+ * A Material Design badge component.
9
+ */
10
+ export declare class BadgeElement extends LitElement {
11
+ static styles: CSSResultOrNative[];
12
+ private hasContent;
13
+ protected render(): import("lit-html").TemplateResult<1>;
14
+ private handleSlotChange;
15
+ }
@@ -0,0 +1,49 @@
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 } from 'lit';
8
+ import { state } from 'lit/decorators.js';
9
+ import { badge } from './badge.js';
10
+ import { styles as badgeStyles } from './badge.cssresult.js';
11
+ /**
12
+ * A Material Design badge component.
13
+ */
14
+ export class BadgeElement extends LitElement {
15
+ constructor() {
16
+ super(...arguments);
17
+ this.hasContent = false;
18
+ }
19
+ render() {
20
+ return html `<span part="badge" class="${badge({ large: this.hasContent })}">
21
+ <slot @slotchange=${this.handleSlotChange}></slot>
22
+ </span>`;
23
+ }
24
+ handleSlotChange(e) {
25
+ const slot = e.target;
26
+ const nodes = slot.assignedNodes();
27
+ this.hasContent = nodes.some((node) => {
28
+ if (node.nodeType === Node.TEXT_NODE) {
29
+ return (node.textContent ?? '').trim().length > 0;
30
+ }
31
+ return true;
32
+ });
33
+ }
34
+ }
35
+ BadgeElement.styles = [
36
+ badgeStyles,
37
+ css `
38
+ :host {
39
+ display: inline-flex;
40
+ }
41
+ .badge {
42
+ flex: 1;
43
+ }
44
+ `,
45
+ ];
46
+ __decorate([
47
+ state()
48
+ ], BadgeElement.prototype, "hasContent", void 0);
49
+ //# sourceMappingURL=badge-element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge-element.js","sourceRoot":"","sources":["badge-element.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,OAAO,EAAC,GAAG,EAAqB,IAAI,EAAE,UAAU,EAAC,MAAM,KAAK,CAAC;AAC7D,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AACjC,OAAO,EAAC,MAAM,IAAI,WAAW,EAAC,MAAM,sBAAsB,CAAC;AAE3D;;GAEG;AACH,MAAM,OAAO,YAAa,SAAQ,UAAU;IAA5C;;QAamB,eAAU,GAAG,KAAK,CAAC;IAkBtC,CAAC;IAhBoB,MAAM;QACvB,OAAO,IAAI,CAAA,6BAA6B,KAAK,CAAC,EAAC,KAAK,EAAE,IAAI,CAAC,UAAU,EAAC,CAAC;0BACjD,IAAI,CAAC,gBAAgB;YACnC,CAAC;IACX,CAAC;IAEO,gBAAgB,CAAC,CAAQ;QAC/B,MAAM,IAAI,GAAG,CAAC,CAAC,MAAyB,CAAC;QACzC,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACnC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE;YACpC,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;gBACrC,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC,CAAC,CAAC;IACL,CAAC;;AA7Be,mBAAM,GAAwB;IAC5C,WAAW;IACX,GAAG,CAAA;;;;;;;KAOF;CACF,AAVqB,CAUpB;AAEe;IAAhB,KAAK,EAAE;gDAA4B","sourcesContent":["/**\n * @license\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {css, CSSResultOrNative, html, LitElement} from 'lit';\nimport {state} from 'lit/decorators.js';\nimport {badge} from './badge.js';\nimport {styles as badgeStyles} from './badge.cssresult.js';\n\n/**\n * A Material Design badge component.\n */\nexport class BadgeElement extends LitElement {\n static override styles: CSSResultOrNative[] = [\n badgeStyles,\n css`\n :host {\n display: inline-flex;\n }\n .badge {\n flex: 1;\n }\n `,\n ];\n\n @state() private hasContent = false;\n\n protected override render() {\n return html`<span part=\"badge\" class=\"${badge({large: this.hasContent})}\">\n <slot @slotchange=${this.handleSlotChange}></slot>\n </span>`;\n }\n\n private handleSlotChange(e: Event) {\n const slot = e.target as HTMLSlotElement;\n const nodes = slot.assignedNodes();\n this.hasContent = nodes.some((node) => {\n if (node.nodeType === Node.TEXT_NODE) {\n return (node.textContent ?? '').trim().length > 0;\n }\n return true;\n });\n }\n}\n"]}
@@ -0,0 +1,4 @@
1
+ /*!
2
+ * Copyright 2026 Google LLC
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */@layer md.sys;@layer md.comp.badge{.badge{--container-color: var(--md-sys-color-error);--shape: var(--md-sys-shape-corner-full);--size: 6px;--label-text-color: var(--md-sys-color-on-error);--label-text: var(--md-sys-typescale-label-sm);--label-text-tracking: var(--md-sys-typescale-label-sm-tracking);--label-text-axes: var(--md-sys-typescale-label-sm-axes)}.badge{display:inline-flex;align-items:center;justify-content:center;background-color:var(--container-color);border-radius:var(--shape);height:var(--size);width:var(--size);box-sizing:border-box}.badge slot{display:none}.badge.badge-large{--size: 16px;width:auto;min-width:var(--size);padding:0 4px;color:var(--label-text-color);font:var(--label-text);letter-spacing:var(--label-text-tracking);font-variation-settings:var(--label-text-axes)}.badge.badge-large slot{display:contents}}/*# sourceMappingURL=badge.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["badge.scss","_badge-tokens.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA,GASA,cACA,qBAEI,OCNF,6CACA,yCACA,YACA,iDACA,+CACA,iEACA,yDDIE,OACE,oBACA,mBACA,uBACA,wCACA,2BACA,mBACA,kBACA,sBAEA,YACE,aAKJ,mBChBF,aDkBI,WACA,sBACA,cAEA,8BACA,uBACA,0CACA,+CAEA,wBACE","file":"badge.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/badge/badge.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;@layer md.comp.badge{.badge{--container-color: var(--md-sys-color-error);--shape: var(--md-sys-shape-corner-full);--size: 6px;--label-text-color: var(--md-sys-color-on-error);--label-text: var(--md-sys-typescale-label-sm);--label-text-tracking: var(--md-sys-typescale-label-sm-tracking);--label-text-axes: var(--md-sys-typescale-label-sm-axes)}.badge{display:inline-flex;align-items:center;justify-content:center;background-color:var(--container-color);border-radius:var(--shape);height:var(--size);width:var(--size);box-sizing:border-box}.badge slot{display:none}.badge.badge-large{--size: 16px;width:auto;min-width:var(--size);padding:0 4px;color:var(--label-text-color);font:var(--label-text);letter-spacing:var(--label-text-tracking);font-variation-settings:var(--label-text-axes)}.badge.badge-large slot{display:contents}}
12
+ `;
13
+ export default styles.styleSheet;
14
+ //# sourceMappingURL=badge.cssresult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.cssresult.js","sourceRoot":"","sources":["badge.cssresult.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,iEAAiE;AACjE,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/badge/badge.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;@layer md.comp.badge{.badge{--container-color: var(--md-sys-color-error);--shape: var(--md-sys-shape-corner-full);--size: 6px;--label-text-color: var(--md-sys-color-on-error);--label-text: var(--md-sys-typescale-label-sm);--label-text-tracking: var(--md-sys-typescale-label-sm-tracking);--label-text-axes: var(--md-sys-typescale-label-sm-axes)}.badge{display:inline-flex;align-items:center;justify-content:center;background-color:var(--container-color);border-radius:var(--shape);height:var(--size);width:var(--size);box-sizing:border-box}.badge slot{display:none}.badge.badge-large{--size: 16px;width:auto;min-width:var(--size);padding:0 4px;color:var(--label-text-color);font:var(--label-text);letter-spacing:var(--label-text-tracking);font-variation-settings:var(--label-text-axes)}.badge.badge-large slot{display:contents}}\n`;\nexport default styles.styleSheet!;\n"]}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { type ClassInfo } from 'lit/directives/class-map.js';
7
+ /** Badge classes. */
8
+ export declare const BADGE_CLASSES: {
9
+ readonly badge: "badge";
10
+ readonly badgeLarge: "badge-large";
11
+ };
12
+ /** The state provided to the `badgeClasses()` function. */
13
+ export interface BadgeClassesState {
14
+ /** Whether the badge is large. */
15
+ large?: boolean;
16
+ }
17
+ /**
18
+ * Returns the badge classes to apply to an element.
19
+ *
20
+ * @param state The state of the badge.
21
+ * @return An object of class names and truthy values if they apply.
22
+ */
23
+ export declare function badgeClasses({ large, }?: BadgeClassesState): ClassInfo;
24
+ /**
25
+ * A Lit directive that adds badge styling to its element.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * html`<span class="${badge({large: true})}">1</span>`;
30
+ * ```
31
+ */
32
+ export declare const badge: (state?: BadgeClassesState & import("../shared/directives.js").AdditionalClasses) => import("lit-html/directive.js").DirectiveResult;
@@ -0,0 +1,35 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { createClassMapDirective } from '../shared/directives.js';
7
+ /** Badge classes. */
8
+ export const BADGE_CLASSES = {
9
+ badge: 'badge',
10
+ badgeLarge: 'badge-large',
11
+ };
12
+ /**
13
+ * Returns the badge classes to apply to an element.
14
+ *
15
+ * @param state The state of the badge.
16
+ * @return An object of class names and truthy values if they apply.
17
+ */
18
+ export function badgeClasses({ large = false, } = {}) {
19
+ return {
20
+ [BADGE_CLASSES.badge]: true,
21
+ [BADGE_CLASSES.badgeLarge]: large,
22
+ };
23
+ }
24
+ /**
25
+ * A Lit directive that adds badge styling to its element.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * html`<span class="${badge({large: true})}">1</span>`;
30
+ * ```
31
+ */
32
+ export const badge = createClassMapDirective({
33
+ getClasses: badgeClasses,
34
+ });
35
+ //# sourceMappingURL=badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"badge.js","sourceRoot":"","sources":["badge.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAC,uBAAuB,EAAC,MAAM,yBAAyB,CAAC;AAEhE,qBAAqB;AACrB,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,KAAK,EAAE,OAAO;IACd,UAAU,EAAE,aAAa;CACjB,CAAC;AAQX;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,EAC3B,KAAK,GAAG,KAAK,MACQ,EAAE;IACvB,OAAO;QACL,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,IAAI;QAC3B,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,KAAK;KAClC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG,uBAAuB,CAAoB;IAC9D,UAAU,EAAE,YAAY;CACzB,CAAC,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {type ClassInfo} from 'lit/directives/class-map.js';\nimport {createClassMapDirective} from '../shared/directives.js';\n\n/** Badge classes. */\nexport const BADGE_CLASSES = {\n badge: 'badge',\n badgeLarge: 'badge-large',\n} as const;\n\n/** The state provided to the `badgeClasses()` function. */\nexport interface BadgeClassesState {\n /** Whether the badge is large. */\n large?: boolean;\n}\n\n/**\n * Returns the badge classes to apply to an element.\n *\n * @param state The state of the badge.\n * @return An object of class names and truthy values if they apply.\n */\nexport function badgeClasses({\n large = false,\n}: BadgeClassesState = {}): ClassInfo {\n return {\n [BADGE_CLASSES.badge]: true,\n [BADGE_CLASSES.badgeLarge]: large,\n };\n}\n\n/**\n * A Lit directive that adds badge styling to its element.\n *\n * @example\n * ```ts\n * html`<span class=\"${badge({large: true})}\">1</span>`;\n * ```\n */\nexport const badge = createClassMapDirective<BadgeClassesState>({\n getClasses: badgeClasses,\n});\n"]}
@@ -0,0 +1,49 @@
1
+ /*!
2
+ * Copyright 2026 Google LLC
3
+ * SPDX-License-Identifier: Apache-2.0
4
+ */
5
+
6
+ // go/keep-sorted start by_regex='(.+) prefix_order=sass:
7
+ @use 'badge-tokens';
8
+ // go/keep-sorted end
9
+
10
+ @layer md.sys;
11
+ @layer md.comp.badge {
12
+ .badge {
13
+ & {
14
+ @include badge-tokens.root;
15
+ }
16
+
17
+ & {
18
+ display: inline-flex;
19
+ align-items: center;
20
+ justify-content: center;
21
+ background-color: var(--container-color);
22
+ border-radius: var(--shape);
23
+ height: var(--size);
24
+ width: var(--size);
25
+ box-sizing: border-box;
26
+
27
+ slot {
28
+ display: none;
29
+ }
30
+ }
31
+
32
+ // Large badge (with text)
33
+ &.badge-large {
34
+ @include badge-tokens.large;
35
+ width: auto;
36
+ min-width: var(--size);
37
+ padding: 0 4px;
38
+
39
+ color: var(--label-text-color);
40
+ font: var(--label-text);
41
+ letter-spacing: var(--label-text-tracking);
42
+ font-variation-settings: var(--label-text-axes);
43
+
44
+ slot {
45
+ display: contents;
46
+ }
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { BadgeElement } from './badge-element.js';
7
+ declare global {
8
+ interface HTMLElementTagNameMap {
9
+ /** A Material Design badge component. */
10
+ 'md-gb-badge': BadgeElement;
11
+ }
12
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { BadgeElement } from './badge-element.js';
7
+ customElements.define('md-gb-badge', BadgeElement);
8
+ //# sourceMappingURL=md-gb-badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md-gb-badge.js","sourceRoot":"","sources":["md-gb-badge.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAShD,cAAc,CAAC,MAAM,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {BadgeElement} from './badge-element.js';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n /** A Material Design badge component. */\n 'md-gb-badge': BadgeElement;\n }\n}\n\ncustomElements.define('md-gb-badge', BadgeElement);\n"]}
@@ -4,6 +4,7 @@
4
4
  //
5
5
 
6
6
  @mixin root {
7
+ // LINT.IfChange
7
8
  --container-color: transparent;
8
9
  --container-height: auto;
9
10
  --container-elevation: var(--md-sys-elevation-shadow-0);
@@ -19,6 +20,7 @@
19
20
  --leading-space: 0;
20
21
  --state-layer-color: transparent;
21
22
  --trailing-space: 0;
23
+ // LINT.ThenChange(md-button.ts) keep in sync with `@cssprop` jsdoc tags
22
24
  }
23
25
 
24
26
  @mixin selected {
@@ -4,17 +4,32 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  import { CSSResultOrNative, LitElement, PropertyValues } from 'lit';
7
- declare global {
8
- interface HTMLElementTagNameMap {
9
- /** A Material Design button. */
10
- 'md-gb-button': Button;
11
- }
12
- }
13
7
  declare const baseClass: import("@material/web/labs/behaviors/mixin.js").MixinReturn<import("@material/web/labs/behaviors/mixin.js").MixinReturn<import("@material/web/labs/behaviors/mixin.js").MixinReturn<(abstract new (...args: any[]) => import("../../../behaviors/element-internals.js").WithElementInternals) & typeof LitElement & import("../../../behaviors/form-associated.js").FormAssociatedConstructor, import("../../../behaviors/form-associated.js").FormAssociated>, import("../../../behaviors/form-submitter.js").FormSubmitter>>;
14
8
  /**
15
9
  * A Material Design button.
10
+ *
11
+ * @slot - Used to display a label and optional icon.
12
+ * @slot container - Used to set a custom background container for the button.
13
+ * @fires {InputEvent} input - Fired when a toggle button is selected or unselected. --bubbles --composed
14
+ * @fires {Event} change - Fired when a toggle button is selected or unselected. --bubbles
15
+ * @csspart btn - The button's root element.
16
+ * @cssprop --container-color
17
+ * @cssprop --container-height
18
+ * @cssprop --container-elevation
19
+ * @cssprop --container-shape
20
+ * @cssprop --outline-width
21
+ * @cssprop --outline-color
22
+ * @cssprop --icon-label-space
23
+ * @cssprop --icon-color
24
+ * @cssprop --icon-size
25
+ * @cssprop --label-text
26
+ * @cssprop --label-text-tracking
27
+ * @cssprop --label-text-color
28
+ * @cssprop --leading-space
29
+ * @cssprop --state-layer-color
30
+ * @cssprop --trailing-space
16
31
  */
17
- export declare class Button extends baseClass {
32
+ export declare class ButtonElement extends baseClass {
18
33
  /** @nocollapse */
19
34
  static shadowRootOptions: ShadowRootInit;
20
35
  static styles: CSSResultOrNative[];
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { __decorate } from "tslib";
7
7
  import { css, html, LitElement, nothing, } from 'lit';
8
- import { customElement, property, state } from 'lit/decorators.js';
8
+ import { property, state } from 'lit/decorators.js';
9
9
  import { mixinDelegatesAria } from '../../../../internal/aria/delegate.js';
10
10
  import { redispatchEvent } from '../../../../internal/events/redispatch-event.js';
11
11
  import { mixinElementInternals } from '../../../behaviors/element-internals.js';
@@ -23,8 +23,29 @@ import { button } from './button.js';
23
23
  const baseClass = mixinDelegatesAria(mixinFormSubmitter(mixinFormAssociated(mixinElementInternals(LitElement))));
24
24
  /**
25
25
  * A Material Design button.
26
+ *
27
+ * @slot - Used to display a label and optional icon.
28
+ * @slot container - Used to set a custom background container for the button.
29
+ * @fires {InputEvent} input - Fired when a toggle button is selected or unselected. --bubbles --composed
30
+ * @fires {Event} change - Fired when a toggle button is selected or unselected. --bubbles
31
+ * @csspart btn - The button's root element.
32
+ * @cssprop --container-color
33
+ * @cssprop --container-height
34
+ * @cssprop --container-elevation
35
+ * @cssprop --container-shape
36
+ * @cssprop --outline-width
37
+ * @cssprop --outline-color
38
+ * @cssprop --icon-label-space
39
+ * @cssprop --icon-color
40
+ * @cssprop --icon-size
41
+ * @cssprop --label-text
42
+ * @cssprop --label-text-tracking
43
+ * @cssprop --label-text-color
44
+ * @cssprop --leading-space
45
+ * @cssprop --state-layer-color
46
+ * @cssprop --trailing-space
26
47
  */
27
- let Button = class Button extends baseClass {
48
+ export class ButtonElement extends baseClass {
28
49
  constructor() {
29
50
  super(...arguments);
30
51
  this.hideOutline = false;
@@ -183,13 +204,13 @@ let Button = class Button extends baseClass {
183
204
  this.selected = event.target.ariaPressed === 'true';
184
205
  redispatchEvent(this, event);
185
206
  }
186
- };
207
+ }
187
208
  /** @nocollapse */
188
- Button.shadowRootOptions = {
209
+ ButtonElement.shadowRootOptions = {
189
210
  mode: 'open',
190
211
  delegatesFocus: true,
191
212
  };
192
- Button.styles = [
213
+ ButtonElement.styles = [
193
214
  focusRingStyles,
194
215
  rippleStyles,
195
216
  buttonStyles,
@@ -227,36 +248,32 @@ Button.styles = [
227
248
  ];
228
249
  __decorate([
229
250
  state()
230
- ], Button.prototype, "hideOutline", void 0);
251
+ ], ButtonElement.prototype, "hideOutline", void 0);
231
252
  __decorate([
232
253
  property()
233
- ], Button.prototype, "color", void 0);
254
+ ], ButtonElement.prototype, "color", void 0);
234
255
  __decorate([
235
256
  property()
236
- ], Button.prototype, "size", void 0);
257
+ ], ButtonElement.prototype, "size", void 0);
237
258
  __decorate([
238
259
  property({ type: Boolean })
239
- ], Button.prototype, "square", void 0);
260
+ ], ButtonElement.prototype, "square", void 0);
240
261
  __decorate([
241
262
  property({ noAccessor: true })
242
- ], Button.prototype, "type", null);
263
+ ], ButtonElement.prototype, "type", null);
243
264
  __decorate([
244
265
  property({ type: Boolean, attribute: 'soft-disabled', reflect: true })
245
- ], Button.prototype, "softDisabled", void 0);
266
+ ], ButtonElement.prototype, "softDisabled", void 0);
246
267
  __decorate([
247
268
  property({ type: Boolean })
248
- ], Button.prototype, "selected", void 0);
269
+ ], ButtonElement.prototype, "selected", void 0);
249
270
  __decorate([
250
271
  property()
251
- ], Button.prototype, "href", void 0);
272
+ ], ButtonElement.prototype, "href", void 0);
252
273
  __decorate([
253
274
  property()
254
- ], Button.prototype, "download", void 0);
275
+ ], ButtonElement.prototype, "download", void 0);
255
276
  __decorate([
256
277
  property()
257
- ], Button.prototype, "target", void 0);
258
- Button = __decorate([
259
- customElement('md-gb-button')
260
- ], Button);
261
- export { Button };
262
- //# sourceMappingURL=md-button.js.map
278
+ ], ButtonElement.prototype, "target", void 0);
279
+ //# sourceMappingURL=button-element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"button-element.js","sourceRoot":"","sources":["button-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 {\n css,\n CSSResultOrNative,\n html,\n LitElement,\n nothing,\n PropertyValues,\n} from 'lit';\nimport {property, state} 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 {mixinElementInternals} from '../../../behaviors/element-internals.js';\nimport {mixinFormAssociated} from '../../../behaviors/form-associated.js';\nimport {mixinFormSubmitter} from '../../../behaviors/form-submitter.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\n\nimport {hasSlotted} from '../shared/has-slotted.js';\n\nimport buttonStyles from './button.css' with {type: 'css'}; // github-only\n// import buttonStyles from './button.cssresult.js'; // google3-only\n\nimport {button} from './button.js';\n\n// Separate variable needed for closure.\nconst baseClass = mixinDelegatesAria(\n mixinFormSubmitter(mixinFormAssociated(mixinElementInternals(LitElement))),\n);\n\n/**\n * A Material Design button.\n *\n * @slot - Used to display a label and optional icon.\n * @slot container - Used to set a custom background container for the button.\n * @fires {InputEvent} input - Fired when a toggle button is selected or unselected. --bubbles --composed\n * @fires {Event} change - Fired when a toggle button is selected or unselected. --bubbles\n * @csspart btn - The button's root element.\n * @cssprop --container-color\n * @cssprop --container-height\n * @cssprop --container-elevation\n * @cssprop --container-shape\n * @cssprop --outline-width\n * @cssprop --outline-color\n * @cssprop --icon-label-space\n * @cssprop --icon-color\n * @cssprop --icon-size\n * @cssprop --label-text\n * @cssprop --label-text-tracking\n * @cssprop --label-text-color\n * @cssprop --leading-space\n * @cssprop --state-layer-color\n * @cssprop --trailing-space\n */\nexport class ButtonElement 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 buttonStyles,\n css`\n :host {\n display: inline-flex;\n isolation: isolate;\n }\n .btn {\n flex: 1;\n position: relative;\n }\n .btn:has([name='container'].has-slotted) {\n background-color: transparent;\n }\n .btn.btn-hide-outline {\n --outline-color: transparent;\n --container-elevation: var(--md-sys-elevation-shadow-0);\n }\n slot[name='container'] {\n display: block;\n position: absolute;\n inset: 0;\n border-radius: inherit;\n pointer-events: none;\n --color: var(--container-color);\n z-index: -1;\n transition: inherit;\n }\n slot[name='container']::slotted(*) {\n width: 100%;\n height: 100%;\n }\n `,\n ];\n\n @state() private hideOutline = false;\n\n /**\n * The color of the button.\n */\n @property()\n color: 'filled' | 'elevated' | 'tonal' | 'outlined' | 'text' = 'text';\n\n /**\n * The size of the button.\n */\n @property() size: 'xs' | 'sm' | 'md' | 'lg' | 'xl' = 'sm';\n\n /**\n * Changes the shape of the button to be square.\n */\n @property({type: Boolean}) square = false;\n\n /**\n * A string indicating the behavior of the button.\n *\n * - \"submit\" (default): A button that submits its associated form.\n * - \"reset\": A button that resets its associated form.\n * - \"button\": A normal button.\n * - \"toggle\": A toggle button using the `selected` property.\n * - \"link\": An anchor link (`<a>`). Type is always \"link\" when `href` is set.\n */\n @property({noAccessor: true})\n override get type(): string {\n return this.href ? 'link' : super.type;\n }\n override set type(type: string) {\n if (this.href && type !== 'link') {\n return;\n }\n super.type = type;\n }\n\n /**\n * Whether or not the button is \"soft-disabled\" (disabled but still\n * focusable).\n *\n * Use this when a button needs increased visibility when disabled. See\n * https://www.w3.org/WAI/ARIA/apg/practices/keyboard-interface/#kbd_disabled_controls\n * for more guidance on when this is needed.\n */\n @property({type: Boolean, attribute: 'soft-disabled', reflect: true})\n softDisabled = false;\n\n /**\n * Whether or not the button is selected, when `type=\"toggle\"`.\n */\n @property({type: Boolean}) selected = false;\n\n /**\n * The URL that the link button points to.\n */\n @property() href = '';\n\n /**\n * The filename to use when downloading the linked resource.\n * If not specified, the browser will determine a filename.\n * This is only applicable when the button is used as a link (`href` is set).\n */\n @property() download = '';\n\n /**\n * Where to display the linked `href` URL for a link button. Common options\n * include `_blank` to open in a new tab.\n */\n @property() target: '_blank' | '_parent' | '_self' | '_top' | '' = '';\n\n private lastFiredEnabledState?: boolean;\n\n override connectedCallback() {\n super.connectedCallback();\n this.addEventListener('md-gb:set-show-outline', this.handleSetShowOutline);\n }\n\n override disconnectedCallback() {\n super.disconnectedCallback();\n this.removeEventListener(\n 'md-gb:set-show-outline',\n this.handleSetShowOutline,\n );\n }\n\n private readonly handleSetShowOutline = (event: Event) => {\n const customEvent = event as CustomEvent<{shown: boolean}>;\n this.hideOutline = !customEvent.detail.shown;\n };\n\n protected override updated(changedProperties: PropertyValues) {\n super.updated(changedProperties);\n if (\n changedProperties.has('disabled') ||\n changedProperties.has('softDisabled')\n ) {\n this.dispatchSetEnabledEvent();\n }\n }\n\n private dispatchSetEnabledEvent() {\n const enabled = !(this.disabled || this.softDisabled);\n\n if (this.lastFiredEnabledState === enabled) return;\n\n const slot = this.shadowRoot?.querySelector(\n 'slot[name=\"container\"]',\n ) as HTMLSlotElement;\n if (slot) {\n for (const element of slot.assignedElements({flatten: true})) {\n element.dispatchEvent(\n new CustomEvent('md-gb:set-enabled', {\n detail: {enabled},\n }),\n );\n }\n }\n this.lastFiredEnabledState = enabled;\n }\n\n protected override render() {\n const classes = button({\n color: this.color,\n size: this.size,\n square: this.square,\n // Emulate `:disabled` when soft-disabled\n disabled: this.softDisabled,\n classes: {\n 'btn-hide-outline': this.hideOutline,\n },\n });\n\n // Needed for closure conformance\n const {ariaLabel, ariaHasPopup, ariaExpanded} = this as ARIAMixinStrict;\n if (this.type === 'link') {\n return html`<a\n part=\"btn\"\n class=${classes}\n href=${this.href}\n download=${this.download || nothing}\n target=${this.target || nothing}\n aria-label=${ariaLabel || nothing}\n aria-haspopup=${ariaHasPopup || nothing}\n aria-expanded=${ariaExpanded || nothing}\n aria-disabled=${this.disabled || this.softDisabled || nothing}\n tabindex=${this.disabled && !this.softDisabled ? -1 : nothing}>\n <slot></slot>\n <slot\n name=\"container\"\n ${hasSlotted()}\n @slotchange=${this.handleContainerSlotChange}></slot>\n </a>`;\n }\n\n return html`<button\n part=\"btn\"\n class=${classes}\n ?disabled=${this.disabled}\n aria-disabled=${this.softDisabled || nothing}\n aria-label=${ariaLabel || nothing}\n aria-pressed=${this.type === 'toggle' ? this.selected : nothing}\n aria-haspopup=${ariaHasPopup || nothing}\n aria-expanded=${ariaExpanded || nothing}\n @change=${this.handleChange}>\n <slot></slot>\n <slot\n name=\"container\"\n ${hasSlotted()}\n @slotchange=${this.handleContainerSlotChange}></slot>\n </button>`;\n }\n\n private handleContainerSlotChange(event: Event) {\n const slot = event.target as HTMLSlotElement;\n\n const enabled = !(this.disabled || this.softDisabled);\n\n for (const element of slot.assignedElements({flatten: true})) {\n element.dispatchEvent(new CustomEvent('md-gb:change-container-slot'));\n element.dispatchEvent(\n new CustomEvent('md-gb:set-enabled', {\n detail: {enabled},\n }),\n );\n }\n }\n\n private handleChange(event: Event) {\n this.selected = (event.target as HTMLElement).ariaPressed === 'true';\n redispatchEvent(this, event);\n }\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["button.scss","_button-tokens.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA,GASA,kDACA,sBACE,KCLA,+BACA,yBACA,wDACA,qDACA,mBACA,6BACA,wBACA,2BACA,kBACA,+CACA,iEACA,iCACA,mBACA,iCACA,oBDPE,2CCWF,iDDRE,gBCYF,+CACA,6CACA,mDDZI,4DCgBJ,yDACA,qDACA,2DDfI,yDCmBJ,+CACA,6CACA,mDDjBE,kBCqBF,6DACA,wDACA,0CACA,gDDtBI,2DC0BJ,+CACA,6CACA,mDDxBE,eC4BF,2DACA,yDACA,+DD5BI,wDCgCJ,iDACA,+CACA,qDD9BE,kBCkCF,qDACA,2DACA,qDACA,qBDnCI,iCCuCJ,qBDpCI,iCCwCJ,qBDrCI,2DCyCJ,uDACA,qDACA,2DDvCE,cC2CF,gDACA,0CACA,iDD1CE,YC8CF,yBACA,sBACA,uBD7CE,YCiDF,yBACA,sBACA,uBDhDE,YCoDF,yBACA,sBACA,uBACA,kBACA,+CACA,iEDvDI,qDC2DJ,iDDvDE,YC2DF,yBACA,yBACA,kBACA,sBACA,uBACA,kDACA,oED/DI,qDCmEJ,iDD/DE,YCmEF,0BACA,yBACA,kBACA,sBACA,uBACA,kDACA,oEDvEI,qDC2EJ,iDDvEE,gBC2EF,iDDzEI,+BC6EJ,iDD1EI,+BC8EJ,iDD3EI,+BC+EJ,iDD5EI,yDCgFJ,qDD5EE,0DCgFF,iDD9EI,yECkFJ,iDD/EI,yECmFJ,iDDhFI,yECoFJ,iDDhFE,6BCoFF,wEACA,wDACA,mEACA,yEDnFE,KACE,oBACA,mBACA,uBACA,mCACA,4BACA,0DACA,uDACA,qCACA,sCACA,wCACA,8BACA,uBACA,0CACA,WACE,iFAEF,mCACA,iCAEF,8BACE","file":"button.css"}
1
+ {"version":3,"sourceRoot":"","sources":["button.scss","_button-tokens.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA,GASA,kDACA,sBACE,KCJA,+BACA,yBACA,wDACA,qDACA,mBACA,6BACA,wBACA,2BACA,kBACA,+CACA,iEACA,iCACA,mBACA,iCACA,oBDRE,2CCaF,iDDVE,gBCcF,+CACA,6CACA,mDDdI,4DCkBJ,yDACA,qDACA,2DDjBI,yDCqBJ,+CACA,6CACA,mDDnBE,kBCuBF,6DACA,wDACA,0CACA,gDDxBI,2DC4BJ,+CACA,6CACA,mDD1BE,eC8BF,2DACA,yDACA,+DD9BI,wDCkCJ,iDACA,+CACA,qDDhCE,kBCoCF,qDACA,2DACA,qDACA,qBDrCI,iCCyCJ,qBDtCI,iCC0CJ,qBDvCI,2DC2CJ,uDACA,qDACA,2DDzCE,cC6CF,gDACA,0CACA,iDD5CE,YCgDF,yBACA,sBACA,uBD/CE,YCmDF,yBACA,sBACA,uBDlDE,YCsDF,yBACA,sBACA,uBACA,kBACA,+CACA,iEDzDI,qDC6DJ,iDDzDE,YC6DF,yBACA,yBACA,kBACA,sBACA,uBACA,kDACA,oEDjEI,qDCqEJ,iDDjEE,YCqEF,0BACA,yBACA,kBACA,sBACA,uBACA,kDACA,oEDzEI,qDC6EJ,iDDzEE,gBC6EF,iDD3EI,+BC+EJ,iDD5EI,+BCgFJ,iDD7EI,+BCiFJ,iDD9EI,yDCkFJ,qDD9EE,0DCkFF,iDDhFI,yECoFJ,iDDjFI,yECqFJ,iDDlFI,yECsFJ,iDDlFE,6BCsFF,wEACA,wDACA,mEACA,yEDrFE,KACE,oBACA,mBACA,uBACA,mCACA,4BACA,0DACA,uDACA,qCACA,sCACA,wCACA,8BACA,uBACA,0CACA,WACE,iFAEF,mCACA,iCAEF,8BACE","file":"button.css"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { ButtonElement } from './button-element.js';
7
+ declare global {
8
+ interface HTMLElementTagNameMap {
9
+ /** A Material Design button. */
10
+ 'md-gb-button': ButtonElement;
11
+ }
12
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { ButtonElement } from './button-element.js';
7
+ customElements.define('md-gb-button', ButtonElement);
8
+ //# sourceMappingURL=md-gb-button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"md-gb-button.js","sourceRoot":"","sources":["md-gb-button.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AASlD,cAAc,CAAC,MAAM,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC","sourcesContent":["/**\n * @license\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {ButtonElement} from './button-element.js';\n\ndeclare global {\n interface HTMLElementTagNameMap {\n /** A Material Design button. */\n 'md-gb-button': ButtonElement;\n }\n}\n\ncustomElements.define('md-gb-button', ButtonElement);\n"]}
@@ -4,12 +4,14 @@
4
4
  //
5
5
 
6
6
  @mixin root {
7
+ // LINT.IfChange
7
8
  --container-color: transparent;
8
9
  --container-elevation: var(--md-sys-elevation-shadow-0);
9
10
  --container-shape: var(--md-sys-shape-corner-md);
10
11
  --outline-color: transparent;
11
12
  --outline-width: 0;
12
13
  --state-layer-color: var(--md-sys-color-on-surface);
14
+ // LINT.ThenChange(md-card.ts) keep in sync with `@cssprop` jsdoc tags
13
15
  }
14
16
 
15
17
  @mixin hover {
@@ -5,17 +5,22 @@
5
5
  */
6
6
  import { CSSResultOrNative, LitElement, PropertyValues } from 'lit';
7
7
  import { type CardColor } from './card.js';
8
- declare global {
9
- interface HTMLElementTagNameMap {
10
- /** A Material Design card component. */
11
- 'md-gb-card': Card;
12
- }
13
- }
14
8
  declare const baseClass: import("@material/web/labs/behaviors/mixin.js").MixinReturn<typeof LitElement>;
15
9
  /**
16
10
  * A Material Design card.
11
+ *
12
+ * @slot - Used to display the card's content. Note: add padding to content, not the host <md-gb-card> element.
13
+ * @slot container - Used to set a custom background container for the card.
14
+ * @csspart card - The card's root element.
15
+ * @csspart card-btn - The card's main action button, when interactive.
16
+ * @cssprop --container-color
17
+ * @cssprop --container-elevation
18
+ * @cssprop --container-shape
19
+ * @cssprop --outline-color
20
+ * @cssprop --outline-width
21
+ * @cssprop --state-layer-color
17
22
  */
18
- export declare class Card extends baseClass {
23
+ export declare class CardElement extends baseClass {
19
24
  /** @nocollapse */
20
25
  static shadowRootOptions: ShadowRootInit;
21
26
  static styles: CSSResultOrNative[];
@@ -5,7 +5,7 @@
5
5
  */
6
6
  import { __decorate } from "tslib";
7
7
  import { css, html, LitElement, nothing, } from 'lit';
8
- import { customElement, property, state } from 'lit/decorators.js';
8
+ import { property, state } from 'lit/decorators.js';
9
9
  import { mixinDelegatesAria } from '../../../../internal/aria/delegate.js';
10
10
  import { ripple } from '../ripple/ripple.js';
11
11
  import { hasSlotted } from '../shared/has-slotted.js';
@@ -20,8 +20,19 @@ import { card } from './card.js';
20
20
  const baseClass = mixinDelegatesAria(LitElement);
21
21
  /**
22
22
  * A Material Design card.
23
+ *
24
+ * @slot - Used to display the card's content. Note: add padding to content, not the host <md-gb-card> element.
25
+ * @slot container - Used to set a custom background container for the card.
26
+ * @csspart card - The card's root element.
27
+ * @csspart card-btn - The card's main action button, when interactive.
28
+ * @cssprop --container-color
29
+ * @cssprop --container-elevation
30
+ * @cssprop --container-shape
31
+ * @cssprop --outline-color
32
+ * @cssprop --outline-width
33
+ * @cssprop --state-layer-color
23
34
  */
24
- let Card = class Card extends baseClass {
35
+ export class CardElement extends baseClass {
25
36
  constructor() {
26
37
  super(...arguments);
27
38
  this.hideOutline = false;
@@ -101,13 +112,13 @@ let Card = class Card extends baseClass {
101
112
  }));
102
113
  }
103
114
  }
104
- };
115
+ }
105
116
  /** @nocollapse */
106
- Card.shadowRootOptions = {
117
+ CardElement.shadowRootOptions = {
107
118
  mode: 'open',
108
119
  delegatesFocus: true,
109
120
  };
110
- Card.styles = [
121
+ CardElement.styles = [
111
122
  focusRingStyles,
112
123
  rippleStyles,
113
124
  cardStyles,
@@ -145,18 +156,14 @@ Card.styles = [
145
156
  ];
146
157
  __decorate([
147
158
  state()
148
- ], Card.prototype, "hideOutline", void 0);
159
+ ], CardElement.prototype, "hideOutline", void 0);
149
160
  __decorate([
150
161
  property()
151
- ], Card.prototype, "color", void 0);
162
+ ], CardElement.prototype, "color", void 0);
152
163
  __decorate([
153
164
  property({ type: Boolean })
154
- ], Card.prototype, "disabled", void 0);
165
+ ], CardElement.prototype, "disabled", void 0);
155
166
  __decorate([
156
167
  property({ type: Boolean })
157
- ], Card.prototype, "interactive", void 0);
158
- Card = __decorate([
159
- customElement('md-gb-card')
160
- ], Card);
161
- export { Card };
162
- //# sourceMappingURL=md-card.js.map
168
+ ], CardElement.prototype, "interactive", void 0);
169
+ //# sourceMappingURL=card-element.js.map