@material/web 2.4.2-nightly.fd17013.0 → 2.5.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.
- package/custom-elements.json +44986 -0
- package/labs/gb/components/badge/_badge-tokens.scss +18 -0
- package/labs/gb/components/badge/badge-element.d.ts +15 -0
- package/labs/gb/components/badge/badge-element.js +49 -0
- package/labs/gb/components/badge/badge-element.js.map +1 -0
- package/labs/gb/components/badge/badge.css +4 -0
- package/labs/gb/components/badge/badge.css.map +1 -0
- package/labs/gb/components/badge/badge.cssresult.d.ts +3 -0
- package/labs/gb/components/badge/badge.cssresult.js +14 -0
- package/labs/gb/components/badge/badge.cssresult.js.map +1 -0
- package/labs/gb/components/badge/badge.d.ts +32 -0
- package/labs/gb/components/badge/badge.js +35 -0
- package/labs/gb/components/badge/badge.js.map +1 -0
- package/labs/gb/components/badge/badge.scss +49 -0
- package/labs/gb/components/badge/md-gb-badge.d.ts +12 -0
- package/labs/gb/components/badge/md-gb-badge.js +8 -0
- package/labs/gb/components/badge/md-gb-badge.js.map +1 -0
- package/labs/gb/components/button/_button-tokens.scss +2 -0
- package/labs/gb/components/button/{md-button.d.ts → button-element.d.ts} +31 -8
- package/labs/gb/components/button/{md-button.js → button-element.js} +119 -20
- package/labs/gb/components/button/button-element.js.map +1 -0
- package/labs/gb/components/button/button.css.map +1 -1
- package/labs/gb/components/button/md-gb-button.d.ts +12 -0
- package/labs/gb/components/button/md-gb-button.js +8 -0
- package/labs/gb/components/button/md-gb-button.js.map +1 -0
- package/labs/gb/components/card/_card-tokens.scss +2 -0
- package/labs/gb/components/card/card-element.d.ts +43 -0
- package/labs/gb/components/card/card-element.js +169 -0
- package/labs/gb/components/card/card-element.js.map +1 -0
- package/labs/gb/components/card/card.css.map +1 -1
- package/labs/gb/components/card/md-gb-card.d.ts +12 -0
- package/labs/gb/components/card/md-gb-card.js +8 -0
- package/labs/gb/components/card/md-gb-card.js.map +1 -0
- package/labs/gb/components/checkbox/_checkbox-tokens.scss +2 -0
- package/labs/gb/components/checkbox/{md-checkbox.d.ts → checkbox-element.d.ts} +15 -7
- package/labs/gb/components/checkbox/{md-checkbox.js → checkbox-element.js} +26 -16
- package/labs/gb/components/checkbox/checkbox-element.js.map +1 -0
- package/labs/gb/components/checkbox/checkbox.css.map +1 -1
- package/labs/gb/components/checkbox/md-gb-checkbox.d.ts +12 -0
- package/labs/gb/components/checkbox/md-gb-checkbox.js +8 -0
- package/labs/gb/components/checkbox/md-gb-checkbox.js.map +1 -0
- package/labs/gb/components/divider/_divider-tokens.scss +2 -0
- package/labs/gb/components/divider/{md-divider.d.ts → divider-element.d.ts} +5 -7
- package/labs/gb/components/divider/{md-divider.js → divider-element.js} +10 -10
- package/labs/gb/components/divider/divider-element.js.map +1 -0
- package/labs/gb/components/divider/divider.css.map +1 -1
- package/labs/gb/components/divider/md-gb-divider.d.ts +12 -0
- package/labs/gb/components/divider/md-gb-divider.js +8 -0
- package/labs/gb/components/divider/md-gb-divider.js.map +1 -0
- package/labs/gb/components/fab/_fab-tokens.scss +2 -0
- package/labs/gb/components/fab/fab-element.d.ts +31 -0
- package/labs/gb/components/fab/{md-fab.js → fab-element.js} +22 -11
- package/labs/gb/components/fab/fab-element.js.map +1 -0
- package/labs/gb/components/fab/fab.css.map +1 -1
- package/labs/gb/components/fab/md-gb-fab.d.ts +12 -0
- package/labs/gb/components/fab/md-gb-fab.js +8 -0
- package/labs/gb/components/fab/md-gb-fab.js.map +1 -0
- package/labs/gb/components/iconbutton/_icon-button-tokens.scss +2 -0
- package/labs/gb/components/iconbutton/{md-icon-button.d.ts → icon-button-element.d.ts} +15 -7
- package/labs/gb/components/iconbutton/{md-icon-button.js → icon-button-element.js} +30 -20
- package/labs/gb/components/iconbutton/icon-button-element.js.map +1 -0
- package/labs/gb/components/iconbutton/icon-button.css.map +1 -1
- package/labs/gb/components/iconbutton/md-gb-icon-button.d.ts +12 -0
- package/labs/gb/components/iconbutton/md-gb-icon-button.js +8 -0
- package/labs/gb/components/iconbutton/md-gb-icon-button.js.map +1 -0
- package/labs/gb/components/list/_list-tokens.scss +4 -0
- package/labs/gb/components/list/{md-list.d.ts → list-element.d.ts} +6 -7
- package/labs/gb/components/list/{md-list.js → list-element.js} +11 -10
- package/labs/gb/components/list/list-element.js.map +1 -0
- package/labs/gb/components/list/list-item-element.d.ts +77 -0
- package/labs/gb/components/list/{md-list-item.js → list-item-element.js} +55 -20
- package/labs/gb/components/list/list-item-element.js.map +1 -0
- package/labs/gb/components/list/list.css.map +1 -1
- package/labs/gb/components/list/md-gb-list-item.d.ts +12 -0
- package/labs/gb/components/list/md-gb-list-item.js +8 -0
- package/labs/gb/components/list/md-gb-list-item.js.map +1 -0
- package/labs/gb/components/list/md-gb-list.d.ts +12 -0
- package/labs/gb/components/list/md-gb-list.js +8 -0
- package/labs/gb/components/list/md-gb-list.js.map +1 -0
- package/labs/gb/components/menu/_menu-tokens.scss +4 -0
- package/labs/gb/components/menu/md-gb-menu-group.d.ts +12 -0
- package/labs/gb/components/menu/md-gb-menu-group.js +8 -0
- package/labs/gb/components/menu/md-gb-menu-group.js.map +1 -0
- package/labs/gb/components/menu/md-gb-menu-item.d.ts +12 -0
- package/labs/gb/components/menu/md-gb-menu-item.js +8 -0
- package/labs/gb/components/menu/md-gb-menu-item.js.map +1 -0
- package/labs/gb/components/menu/md-gb-menu.d.ts +12 -0
- package/labs/gb/components/menu/md-gb-menu.js +8 -0
- package/labs/gb/components/menu/md-gb-menu.js.map +1 -0
- package/labs/gb/components/menu/{md-menu.d.ts → menu-element.d.ts} +11 -7
- package/labs/gb/components/menu/{md-menu.js → menu-element.js} +16 -10
- package/labs/gb/components/menu/menu-element.js.map +1 -0
- package/labs/gb/components/menu/{md-menu-group.d.ts → menu-group-element.d.ts} +3 -6
- package/labs/gb/components/menu/{md-menu-group.js → menu-group-element.js} +11 -11
- package/labs/gb/components/menu/menu-group-element.js.map +1 -0
- package/labs/gb/components/menu/menu-item-element.d.ts +56 -0
- package/labs/gb/components/menu/{md-menu-item.js → menu-item-element.js} +41 -13
- package/labs/gb/components/menu/menu-item-element.js.map +1 -0
- package/labs/gb/components/menu/menu.css.map +1 -1
- package/labs/gb/components/menu/menu.js +1 -1
- package/labs/gb/components/menu/menu.js.map +1 -1
- package/labs/gb/components/radio/_radio-tokens.scss +2 -0
- package/labs/gb/components/radio/md-gb-radio.d.ts +12 -0
- package/labs/gb/components/radio/md-gb-radio.js +8 -0
- package/labs/gb/components/radio/md-gb-radio.js.map +1 -0
- package/labs/gb/components/radio/{md-radio.d.ts → radio-element.d.ts} +10 -7
- package/labs/gb/components/radio/{md-radio.js → radio-element.js} +19 -14
- package/labs/gb/components/radio/radio-element.js.map +1 -0
- package/labs/gb/components/radio/radio.css.map +1 -1
- package/labs/gb/components/splitbutton/_split-button-tokens.scss +4 -0
- package/labs/gb/components/splitbutton/md-gb-split-button.d.ts +12 -0
- package/labs/gb/components/splitbutton/md-gb-split-button.js +8 -0
- package/labs/gb/components/splitbutton/md-gb-split-button.js.map +1 -0
- package/labs/gb/components/splitbutton/split-button-element.d.ts +33 -0
- package/labs/gb/components/splitbutton/{md-split-button.js → split-button-element.js} +21 -12
- package/labs/gb/components/splitbutton/split-button-element.js.map +1 -0
- package/labs/gb/components/splitbutton/split-button.css.map +1 -1
- package/labs/gb/components/splitbutton/split-button.d.ts +5 -5
- package/labs/gb/components/splitbutton/split-button.js +5 -5
- package/labs/gb/components/splitbutton/split-button.js.map +1 -1
- package/labs/gb/components/switch/_switch-tokens.scss +2 -0
- package/labs/gb/components/switch/md-gb-switch.d.ts +12 -0
- package/labs/gb/components/switch/md-gb-switch.js +8 -0
- package/labs/gb/components/switch/md-gb-switch.js.map +1 -0
- package/labs/gb/components/switch/{md-switch.d.ts → switch-element.d.ts} +19 -7
- package/labs/gb/components/switch/{md-switch.js → switch-element.js} +28 -14
- package/labs/gb/components/switch/switch-element.js.map +1 -0
- package/labs/gb/components/switch/switch.css.map +1 -1
- package/labs/gb/styles/adopt-styles.js +7 -7
- package/labs/gb/styles/adopt-styles.js.map +1 -1
- package/labs/gb/styles/icon/{md-icon.d.ts → icon-element.d.ts} +1 -7
- package/labs/gb/styles/icon/{md-icon.js → icon-element.js} +8 -10
- package/labs/gb/styles/icon/icon-element.js.map +1 -0
- package/labs/gb/styles/icon/md-gb-icon.d.ts +12 -0
- package/labs/gb/styles/icon/md-gb-icon.js +8 -0
- package/labs/gb/styles/icon/md-gb-icon.js.map +1 -0
- package/list/internal/listitem/list-item.d.ts +4 -1
- package/list/internal/listitem/list-item.js +4 -1
- package/list/internal/listitem/list-item.js.map +1 -1
- package/menu/internal/submenu/sub-menu.d.ts +5 -1
- package/menu/internal/submenu/sub-menu.js +5 -1
- package/menu/internal/submenu/sub-menu.js.map +1 -1
- package/package.json +22 -3
- package/labs/gb/components/button/md-button.js.map +0 -1
- package/labs/gb/components/card/md-card.d.ts +0 -30
- package/labs/gb/components/card/md-card.js +0 -85
- package/labs/gb/components/card/md-card.js.map +0 -1
- package/labs/gb/components/checkbox/md-checkbox.js.map +0 -1
- package/labs/gb/components/divider/md-divider.js.map +0 -1
- package/labs/gb/components/fab/md-fab.d.ts +0 -22
- package/labs/gb/components/fab/md-fab.js.map +0 -1
- package/labs/gb/components/iconbutton/md-icon-button.js.map +0 -1
- package/labs/gb/components/list/md-list-item.d.ts +0 -44
- package/labs/gb/components/list/md-list-item.js.map +0 -1
- package/labs/gb/components/list/md-list.js.map +0 -1
- package/labs/gb/components/menu/md-menu-group.js.map +0 -1
- package/labs/gb/components/menu/md-menu-item.d.ts +0 -30
- package/labs/gb/components/menu/md-menu-item.js.map +0 -1
- package/labs/gb/components/menu/md-menu.js.map +0 -1
- package/labs/gb/components/radio/md-radio.js.map +0 -1
- package/labs/gb/components/splitbutton/md-split-button.d.ts +0 -26
- package/labs/gb/components/splitbutton/md-split-button.js.map +0 -1
- package/labs/gb/components/switch/md-switch.js.map +0 -1
- 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,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 @@
|
|
|
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 {
|
|
@@ -3,21 +3,37 @@
|
|
|
3
3
|
* Copyright 2026 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { CSSResultOrNative, LitElement } from 'lit';
|
|
7
|
-
declare global {
|
|
8
|
-
interface HTMLElementTagNameMap {
|
|
9
|
-
/** A Material Design button. */
|
|
10
|
-
'md-button': Button;
|
|
11
|
-
}
|
|
12
|
-
}
|
|
6
|
+
import { CSSResultOrNative, LitElement, PropertyValues } from 'lit';
|
|
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
|
|
32
|
+
export declare class ButtonElement extends baseClass {
|
|
18
33
|
/** @nocollapse */
|
|
19
34
|
static shadowRootOptions: ShadowRootInit;
|
|
20
35
|
static styles: CSSResultOrNative[];
|
|
36
|
+
private hideOutline;
|
|
21
37
|
/**
|
|
22
38
|
* The color of the button.
|
|
23
39
|
*/
|
|
@@ -69,7 +85,14 @@ export declare class Button extends baseClass {
|
|
|
69
85
|
* include `_blank` to open in a new tab.
|
|
70
86
|
*/
|
|
71
87
|
target: '_blank' | '_parent' | '_self' | '_top' | '';
|
|
88
|
+
private lastFiredEnabledState?;
|
|
89
|
+
connectedCallback(): void;
|
|
90
|
+
disconnectedCallback(): void;
|
|
91
|
+
private readonly handleSetShowOutline;
|
|
92
|
+
protected updated(changedProperties: PropertyValues): void;
|
|
93
|
+
private dispatchSetEnabledEvent;
|
|
72
94
|
protected render(): import("lit-html").TemplateResult<1>;
|
|
95
|
+
private handleContainerSlotChange;
|
|
73
96
|
private handleChange;
|
|
74
97
|
}
|
|
75
98
|
export {};
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
6
|
import { __decorate } from "tslib";
|
|
7
|
-
import { css, html, LitElement, nothing } from 'lit';
|
|
8
|
-
import {
|
|
7
|
+
import { css, html, LitElement, nothing, } from 'lit';
|
|
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';
|
|
@@ -15,6 +15,7 @@ import focusRingStyles from '../focus/focus-ring.css' with { type: 'css' }; // g
|
|
|
15
15
|
// import focusRingStyles from '../focus/focus-ring.cssresult.js'; // google3-only
|
|
16
16
|
import rippleStyles from '../ripple/ripple.css' with { type: 'css' }; // github-only
|
|
17
17
|
// import rippleStyles from '../ripple/ripple.cssresult.js'; // google3-only
|
|
18
|
+
import { hasSlotted } from '../shared/has-slotted.js';
|
|
18
19
|
import buttonStyles from './button.css' with { type: 'css' }; // github-only
|
|
19
20
|
// import buttonStyles from './button.cssresult.js'; // google3-only
|
|
20
21
|
import { button } from './button.js';
|
|
@@ -22,10 +23,32 @@ import { button } from './button.js';
|
|
|
22
23
|
const baseClass = mixinDelegatesAria(mixinFormSubmitter(mixinFormAssociated(mixinElementInternals(LitElement))));
|
|
23
24
|
/**
|
|
24
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
|
|
25
47
|
*/
|
|
26
|
-
|
|
48
|
+
export class ButtonElement extends baseClass {
|
|
27
49
|
constructor() {
|
|
28
50
|
super(...arguments);
|
|
51
|
+
this.hideOutline = false;
|
|
29
52
|
/**
|
|
30
53
|
* The color of the button.
|
|
31
54
|
*/
|
|
@@ -66,6 +89,10 @@ let Button = class Button extends baseClass {
|
|
|
66
89
|
* include `_blank` to open in a new tab.
|
|
67
90
|
*/
|
|
68
91
|
this.target = '';
|
|
92
|
+
this.handleSetShowOutline = (event) => {
|
|
93
|
+
const customEvent = event;
|
|
94
|
+
this.hideOutline = !customEvent.detail.shown;
|
|
95
|
+
};
|
|
69
96
|
}
|
|
70
97
|
/**
|
|
71
98
|
* A string indicating the behavior of the button.
|
|
@@ -85,6 +112,35 @@ let Button = class Button extends baseClass {
|
|
|
85
112
|
}
|
|
86
113
|
super.type = type;
|
|
87
114
|
}
|
|
115
|
+
connectedCallback() {
|
|
116
|
+
super.connectedCallback();
|
|
117
|
+
this.addEventListener('md-gb:set-show-outline', this.handleSetShowOutline);
|
|
118
|
+
}
|
|
119
|
+
disconnectedCallback() {
|
|
120
|
+
super.disconnectedCallback();
|
|
121
|
+
this.removeEventListener('md-gb:set-show-outline', this.handleSetShowOutline);
|
|
122
|
+
}
|
|
123
|
+
updated(changedProperties) {
|
|
124
|
+
super.updated(changedProperties);
|
|
125
|
+
if (changedProperties.has('disabled') ||
|
|
126
|
+
changedProperties.has('softDisabled')) {
|
|
127
|
+
this.dispatchSetEnabledEvent();
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
dispatchSetEnabledEvent() {
|
|
131
|
+
const enabled = !(this.disabled || this.softDisabled);
|
|
132
|
+
if (this.lastFiredEnabledState === enabled)
|
|
133
|
+
return;
|
|
134
|
+
const slot = this.shadowRoot?.querySelector('slot[name="container"]');
|
|
135
|
+
if (slot) {
|
|
136
|
+
for (const element of slot.assignedElements({ flatten: true })) {
|
|
137
|
+
element.dispatchEvent(new CustomEvent('md-gb:set-enabled', {
|
|
138
|
+
detail: { enabled },
|
|
139
|
+
}));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
this.lastFiredEnabledState = enabled;
|
|
143
|
+
}
|
|
88
144
|
render() {
|
|
89
145
|
const classes = button({
|
|
90
146
|
color: this.color,
|
|
@@ -92,6 +148,9 @@ let Button = class Button extends baseClass {
|
|
|
92
148
|
square: this.square,
|
|
93
149
|
// Emulate `:disabled` when soft-disabled
|
|
94
150
|
disabled: this.softDisabled,
|
|
151
|
+
classes: {
|
|
152
|
+
'btn-hide-outline': this.hideOutline,
|
|
153
|
+
},
|
|
95
154
|
});
|
|
96
155
|
// Needed for closure conformance
|
|
97
156
|
const { ariaLabel, ariaHasPopup, ariaExpanded } = this;
|
|
@@ -108,6 +167,10 @@ let Button = class Button extends baseClass {
|
|
|
108
167
|
aria-disabled=${this.disabled || this.softDisabled || nothing}
|
|
109
168
|
tabindex=${this.disabled && !this.softDisabled ? -1 : nothing}>
|
|
110
169
|
<slot></slot>
|
|
170
|
+
<slot
|
|
171
|
+
name="container"
|
|
172
|
+
${hasSlotted()}
|
|
173
|
+
@slotchange=${this.handleContainerSlotChange}></slot>
|
|
111
174
|
</a>`;
|
|
112
175
|
}
|
|
113
176
|
return html `<button
|
|
@@ -121,60 +184,96 @@ let Button = class Button extends baseClass {
|
|
|
121
184
|
aria-expanded=${ariaExpanded || nothing}
|
|
122
185
|
@change=${this.handleChange}>
|
|
123
186
|
<slot></slot>
|
|
187
|
+
<slot
|
|
188
|
+
name="container"
|
|
189
|
+
${hasSlotted()}
|
|
190
|
+
@slotchange=${this.handleContainerSlotChange}></slot>
|
|
124
191
|
</button>`;
|
|
125
192
|
}
|
|
193
|
+
handleContainerSlotChange(event) {
|
|
194
|
+
const slot = event.target;
|
|
195
|
+
const enabled = !(this.disabled || this.softDisabled);
|
|
196
|
+
for (const element of slot.assignedElements({ flatten: true })) {
|
|
197
|
+
element.dispatchEvent(new CustomEvent('md-gb:change-container-slot'));
|
|
198
|
+
element.dispatchEvent(new CustomEvent('md-gb:set-enabled', {
|
|
199
|
+
detail: { enabled },
|
|
200
|
+
}));
|
|
201
|
+
}
|
|
202
|
+
}
|
|
126
203
|
handleChange(event) {
|
|
127
204
|
this.selected = event.target.ariaPressed === 'true';
|
|
128
205
|
redispatchEvent(this, event);
|
|
129
206
|
}
|
|
130
|
-
}
|
|
207
|
+
}
|
|
131
208
|
/** @nocollapse */
|
|
132
|
-
|
|
209
|
+
ButtonElement.shadowRootOptions = {
|
|
133
210
|
mode: 'open',
|
|
134
211
|
delegatesFocus: true,
|
|
135
212
|
};
|
|
136
|
-
|
|
213
|
+
ButtonElement.styles = [
|
|
137
214
|
focusRingStyles,
|
|
138
215
|
rippleStyles,
|
|
139
216
|
buttonStyles,
|
|
140
217
|
css `
|
|
141
218
|
:host {
|
|
142
219
|
display: inline-flex;
|
|
220
|
+
isolation: isolate;
|
|
143
221
|
}
|
|
144
222
|
.btn {
|
|
145
223
|
flex: 1;
|
|
224
|
+
position: relative;
|
|
225
|
+
}
|
|
226
|
+
.btn:has([name='container'].has-slotted) {
|
|
227
|
+
background-color: transparent;
|
|
228
|
+
}
|
|
229
|
+
.btn.btn-hide-outline {
|
|
230
|
+
--outline-color: transparent;
|
|
231
|
+
--container-elevation: var(--md-sys-elevation-shadow-0);
|
|
232
|
+
}
|
|
233
|
+
slot[name='container'] {
|
|
234
|
+
display: block;
|
|
235
|
+
position: absolute;
|
|
236
|
+
inset: 0;
|
|
237
|
+
border-radius: inherit;
|
|
238
|
+
pointer-events: none;
|
|
239
|
+
--color: var(--container-color);
|
|
240
|
+
z-index: -1;
|
|
241
|
+
transition: inherit;
|
|
242
|
+
}
|
|
243
|
+
slot[name='container']::slotted(*) {
|
|
244
|
+
width: 100%;
|
|
245
|
+
height: 100%;
|
|
146
246
|
}
|
|
147
247
|
`,
|
|
148
248
|
];
|
|
249
|
+
__decorate([
|
|
250
|
+
state()
|
|
251
|
+
], ButtonElement.prototype, "hideOutline", void 0);
|
|
149
252
|
__decorate([
|
|
150
253
|
property()
|
|
151
|
-
],
|
|
254
|
+
], ButtonElement.prototype, "color", void 0);
|
|
152
255
|
__decorate([
|
|
153
256
|
property()
|
|
154
|
-
],
|
|
257
|
+
], ButtonElement.prototype, "size", void 0);
|
|
155
258
|
__decorate([
|
|
156
259
|
property({ type: Boolean })
|
|
157
|
-
],
|
|
260
|
+
], ButtonElement.prototype, "square", void 0);
|
|
158
261
|
__decorate([
|
|
159
262
|
property({ noAccessor: true })
|
|
160
|
-
],
|
|
263
|
+
], ButtonElement.prototype, "type", null);
|
|
161
264
|
__decorate([
|
|
162
265
|
property({ type: Boolean, attribute: 'soft-disabled', reflect: true })
|
|
163
|
-
],
|
|
266
|
+
], ButtonElement.prototype, "softDisabled", void 0);
|
|
164
267
|
__decorate([
|
|
165
268
|
property({ type: Boolean })
|
|
166
|
-
],
|
|
269
|
+
], ButtonElement.prototype, "selected", void 0);
|
|
167
270
|
__decorate([
|
|
168
271
|
property()
|
|
169
|
-
],
|
|
272
|
+
], ButtonElement.prototype, "href", void 0);
|
|
170
273
|
__decorate([
|
|
171
274
|
property()
|
|
172
|
-
],
|
|
275
|
+
], ButtonElement.prototype, "download", void 0);
|
|
173
276
|
__decorate([
|
|
174
277
|
property()
|
|
175
|
-
],
|
|
176
|
-
|
|
177
|
-
customElement('md-button')
|
|
178
|
-
], Button);
|
|
179
|
-
export { Button };
|
|
180
|
-
//# 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,
|
|
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
|
+
}
|