@material/web 2.4.2-nightly.fd6fe2a.0 → 2.5.1-nightly.70e259d.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 (209) hide show
  1. package/custom-elements.json +7148 -7166
  2. package/labs/aria/query-associated.d.ts +23 -0
  3. package/labs/aria/query-associated.js +36 -0
  4. package/labs/aria/query-associated.js.map +1 -0
  5. package/labs/aria/tabs/md-aria-tab.d.ts +11 -0
  6. package/labs/aria/tabs/md-aria-tab.js +8 -0
  7. package/labs/aria/tabs/md-aria-tab.js.map +1 -0
  8. package/labs/aria/tabs/md-aria-tablist.d.ts +11 -0
  9. package/labs/aria/tabs/md-aria-tablist.js +8 -0
  10. package/labs/aria/tabs/md-aria-tablist.js.map +1 -0
  11. package/labs/aria/tabs/md-aria-tabpanel.d.ts +11 -0
  12. package/labs/aria/tabs/md-aria-tabpanel.js +8 -0
  13. package/labs/aria/tabs/md-aria-tabpanel.js.map +1 -0
  14. package/labs/aria/tabs/tab.d.ts +33 -0
  15. package/labs/aria/tabs/tab.js +88 -0
  16. package/labs/aria/tabs/tab.js.map +1 -0
  17. package/labs/aria/tabs/tablist.d.ts +67 -0
  18. package/labs/aria/tabs/tablist.js +271 -0
  19. package/labs/aria/tabs/tablist.js.map +1 -0
  20. package/labs/aria/tabs/tabpanel.d.ts +26 -0
  21. package/labs/aria/tabs/tabpanel.js +53 -0
  22. package/labs/aria/tabs/tabpanel.js.map +1 -0
  23. package/labs/gb/components/appbar/_app-bar-tokens.scss +136 -0
  24. package/labs/gb/components/appbar/app-bar-element.d.ts +53 -0
  25. package/labs/gb/components/appbar/app-bar-element.js +144 -0
  26. package/labs/gb/components/appbar/app-bar-element.js.map +1 -0
  27. package/labs/gb/components/appbar/app-bar.css +4 -0
  28. package/labs/gb/components/appbar/app-bar.css.map +1 -0
  29. package/labs/gb/components/appbar/app-bar.cssresult.d.ts +3 -0
  30. package/labs/gb/components/appbar/app-bar.cssresult.js +14 -0
  31. package/labs/gb/components/appbar/app-bar.cssresult.js.map +1 -0
  32. package/labs/gb/components/appbar/app-bar.d.ts +71 -0
  33. package/labs/gb/components/appbar/app-bar.js +96 -0
  34. package/labs/gb/components/appbar/app-bar.js.map +1 -0
  35. package/labs/gb/components/appbar/app-bar.scss +167 -0
  36. package/labs/gb/components/appbar/md-gb-app-bar.d.ts +12 -0
  37. package/labs/gb/components/appbar/md-gb-app-bar.js +8 -0
  38. package/labs/gb/components/appbar/md-gb-app-bar.js.map +1 -0
  39. package/labs/gb/components/badge/_badge-tokens.scss +18 -0
  40. package/labs/gb/components/badge/badge-element.d.ts +15 -0
  41. package/labs/gb/components/badge/badge-element.js +49 -0
  42. package/labs/gb/components/badge/badge-element.js.map +1 -0
  43. package/labs/gb/components/badge/badge.css +4 -0
  44. package/labs/gb/components/badge/badge.css.map +1 -0
  45. package/labs/gb/components/badge/badge.cssresult.d.ts +3 -0
  46. package/labs/gb/components/badge/badge.cssresult.js +14 -0
  47. package/labs/gb/components/badge/badge.cssresult.js.map +1 -0
  48. package/labs/gb/components/badge/badge.d.ts +32 -0
  49. package/labs/gb/components/badge/badge.js +35 -0
  50. package/labs/gb/components/badge/badge.js.map +1 -0
  51. package/labs/gb/components/badge/badge.scss +49 -0
  52. package/labs/gb/components/badge/md-gb-badge.d.ts +12 -0
  53. package/labs/gb/components/badge/md-gb-badge.js +8 -0
  54. package/labs/gb/components/badge/md-gb-badge.js.map +1 -0
  55. package/labs/gb/components/button/_button-tokens.scss +2 -0
  56. package/labs/gb/components/button/{md-button.d.ts → button-element.d.ts} +22 -7
  57. package/labs/gb/components/button/{md-button.js → button-element.js} +38 -20
  58. package/labs/gb/components/button/button-element.js.map +1 -0
  59. package/labs/gb/components/button/button.css.map +1 -1
  60. package/labs/gb/components/button/md-gb-button.d.ts +12 -0
  61. package/labs/gb/components/button/md-gb-button.js +8 -0
  62. package/labs/gb/components/button/md-gb-button.js.map +1 -0
  63. package/labs/gb/components/card/_card-tokens.scss +2 -0
  64. package/labs/gb/components/card/{md-card.d.ts → card-element.d.ts} +12 -7
  65. package/labs/gb/components/card/{md-card.js → card-element.js} +21 -14
  66. package/labs/gb/components/card/card-element.js.map +1 -0
  67. package/labs/gb/components/card/card.css.map +1 -1
  68. package/labs/gb/components/card/md-gb-card.d.ts +12 -0
  69. package/labs/gb/components/card/md-gb-card.js +8 -0
  70. package/labs/gb/components/card/md-gb-card.js.map +1 -0
  71. package/labs/gb/components/checkbox/_checkbox-tokens.scss +2 -0
  72. package/labs/gb/components/checkbox/{md-checkbox.d.ts → checkbox-element.d.ts} +15 -7
  73. package/labs/gb/components/checkbox/{md-checkbox.js → checkbox-element.js} +26 -16
  74. package/labs/gb/components/checkbox/checkbox-element.js.map +1 -0
  75. package/labs/gb/components/checkbox/checkbox.css.map +1 -1
  76. package/labs/gb/components/checkbox/md-gb-checkbox.d.ts +12 -0
  77. package/labs/gb/components/checkbox/md-gb-checkbox.js +8 -0
  78. package/labs/gb/components/checkbox/md-gb-checkbox.js.map +1 -0
  79. package/labs/gb/components/chip/_chip-tokens.scss +167 -0
  80. package/labs/gb/components/chip/chip-element.d.ts +73 -0
  81. package/labs/gb/components/chip/chip-element.js +233 -0
  82. package/labs/gb/components/chip/chip-element.js.map +1 -0
  83. package/labs/gb/components/chip/chip.css +4 -0
  84. package/labs/gb/components/chip/chip.css.map +1 -0
  85. package/labs/gb/components/chip/chip.cssresult.d.ts +3 -0
  86. package/labs/gb/components/chip/chip.cssresult.js +14 -0
  87. package/labs/gb/components/chip/chip.cssresult.js.map +1 -0
  88. package/labs/gb/components/chip/chip.d.ts +77 -0
  89. package/labs/gb/components/chip/chip.js +99 -0
  90. package/labs/gb/components/chip/chip.js.map +1 -0
  91. package/labs/gb/components/chip/chip.scss +97 -0
  92. package/labs/gb/components/chip/md-gb-chip.d.ts +13 -0
  93. package/labs/gb/components/chip/md-gb-chip.js +9 -0
  94. package/labs/gb/components/chip/md-gb-chip.js.map +1 -0
  95. package/labs/gb/components/divider/_divider-tokens.scss +2 -0
  96. package/labs/gb/components/divider/{md-divider.d.ts → divider-element.d.ts} +5 -7
  97. package/labs/gb/components/divider/{md-divider.js → divider-element.js} +10 -10
  98. package/labs/gb/components/divider/divider-element.js.map +1 -0
  99. package/labs/gb/components/divider/divider.css.map +1 -1
  100. package/labs/gb/components/divider/md-gb-divider.d.ts +12 -0
  101. package/labs/gb/components/divider/md-gb-divider.js +8 -0
  102. package/labs/gb/components/divider/md-gb-divider.js.map +1 -0
  103. package/labs/gb/components/fab/_fab-tokens.scss +2 -0
  104. package/labs/gb/components/fab/fab-element.d.ts +31 -0
  105. package/labs/gb/components/fab/{md-fab.js → fab-element.js} +22 -11
  106. package/labs/gb/components/fab/fab-element.js.map +1 -0
  107. package/labs/gb/components/fab/fab.css.map +1 -1
  108. package/labs/gb/components/fab/md-gb-fab.d.ts +12 -0
  109. package/labs/gb/components/fab/md-gb-fab.js +8 -0
  110. package/labs/gb/components/fab/md-gb-fab.js.map +1 -0
  111. package/labs/gb/components/iconbutton/_icon-button-tokens.scss +2 -0
  112. package/labs/gb/components/iconbutton/{md-icon-button.d.ts → icon-button-element.d.ts} +15 -7
  113. package/labs/gb/components/iconbutton/{md-icon-button.js → icon-button-element.js} +30 -20
  114. package/labs/gb/components/iconbutton/icon-button-element.js.map +1 -0
  115. package/labs/gb/components/iconbutton/icon-button.css.map +1 -1
  116. package/labs/gb/components/iconbutton/md-gb-icon-button.d.ts +12 -0
  117. package/labs/gb/components/iconbutton/md-gb-icon-button.js +8 -0
  118. package/labs/gb/components/iconbutton/md-gb-icon-button.js.map +1 -0
  119. package/labs/gb/components/list/_list-tokens.scss +4 -0
  120. package/labs/gb/components/list/{md-list.d.ts → list-element.d.ts} +6 -7
  121. package/labs/gb/components/list/{md-list.js → list-element.js} +11 -10
  122. package/labs/gb/components/list/list-element.js.map +1 -0
  123. package/labs/gb/components/list/list-item-element.d.ts +77 -0
  124. package/labs/gb/components/list/{md-list-item.js → list-item-element.js} +48 -13
  125. package/labs/gb/components/list/list-item-element.js.map +1 -0
  126. package/labs/gb/components/list/list.css.map +1 -1
  127. package/labs/gb/components/list/md-gb-list-item.d.ts +12 -0
  128. package/labs/gb/components/list/md-gb-list-item.js +8 -0
  129. package/labs/gb/components/list/md-gb-list-item.js.map +1 -0
  130. package/labs/gb/components/list/md-gb-list.d.ts +12 -0
  131. package/labs/gb/components/list/md-gb-list.js +8 -0
  132. package/labs/gb/components/list/md-gb-list.js.map +1 -0
  133. package/labs/gb/components/menu/_menu-tokens.scss +4 -0
  134. package/labs/gb/components/menu/md-gb-menu-group.d.ts +12 -0
  135. package/labs/gb/components/menu/md-gb-menu-group.js +8 -0
  136. package/labs/gb/components/menu/md-gb-menu-group.js.map +1 -0
  137. package/labs/gb/components/menu/md-gb-menu-item.d.ts +12 -0
  138. package/labs/gb/components/menu/md-gb-menu-item.js +8 -0
  139. package/labs/gb/components/menu/md-gb-menu-item.js.map +1 -0
  140. package/labs/gb/components/menu/md-gb-menu.d.ts +12 -0
  141. package/labs/gb/components/menu/md-gb-menu.js +8 -0
  142. package/labs/gb/components/menu/md-gb-menu.js.map +1 -0
  143. package/labs/gb/components/menu/{md-menu.d.ts → menu-element.d.ts} +11 -7
  144. package/labs/gb/components/menu/{md-menu.js → menu-element.js} +16 -10
  145. package/labs/gb/components/menu/menu-element.js.map +1 -0
  146. package/labs/gb/components/menu/{md-menu-group.d.ts → menu-group-element.d.ts} +3 -6
  147. package/labs/gb/components/menu/{md-menu-group.js → menu-group-element.js} +11 -11
  148. package/labs/gb/components/menu/menu-group-element.js.map +1 -0
  149. package/labs/gb/components/menu/menu-item-element.d.ts +56 -0
  150. package/labs/gb/components/menu/{md-menu-item.js → menu-item-element.js} +41 -13
  151. package/labs/gb/components/menu/menu-item-element.js.map +1 -0
  152. package/labs/gb/components/menu/menu.css.map +1 -1
  153. package/labs/gb/components/menu/menu.js +1 -1
  154. package/labs/gb/components/menu/menu.js.map +1 -1
  155. package/labs/gb/components/radio/_radio-tokens.scss +2 -0
  156. package/labs/gb/components/radio/md-gb-radio.d.ts +12 -0
  157. package/labs/gb/components/radio/md-gb-radio.js +8 -0
  158. package/labs/gb/components/radio/md-gb-radio.js.map +1 -0
  159. package/labs/gb/components/radio/{md-radio.d.ts → radio-element.d.ts} +10 -7
  160. package/labs/gb/components/radio/{md-radio.js → radio-element.js} +19 -14
  161. package/labs/gb/components/radio/radio-element.js.map +1 -0
  162. package/labs/gb/components/radio/radio.css.map +1 -1
  163. package/labs/gb/components/splitbutton/_split-button-tokens.scss +4 -0
  164. package/labs/gb/components/splitbutton/md-gb-split-button.d.ts +12 -0
  165. package/labs/gb/components/splitbutton/md-gb-split-button.js +8 -0
  166. package/labs/gb/components/splitbutton/md-gb-split-button.js.map +1 -0
  167. package/labs/gb/components/splitbutton/split-button-element.d.ts +33 -0
  168. package/labs/gb/components/splitbutton/{md-split-button.js → split-button-element.js} +21 -12
  169. package/labs/gb/components/splitbutton/split-button-element.js.map +1 -0
  170. package/labs/gb/components/splitbutton/split-button.css.map +1 -1
  171. package/labs/gb/components/splitbutton/split-button.d.ts +4 -4
  172. package/labs/gb/components/splitbutton/split-button.js +4 -4
  173. package/labs/gb/components/splitbutton/split-button.js.map +1 -1
  174. package/labs/gb/components/switch/_switch-tokens.scss +2 -0
  175. package/labs/gb/components/switch/md-gb-switch.d.ts +12 -0
  176. package/labs/gb/components/switch/md-gb-switch.js +8 -0
  177. package/labs/gb/components/switch/md-gb-switch.js.map +1 -0
  178. package/labs/gb/components/switch/{md-switch.d.ts → switch-element.d.ts} +19 -7
  179. package/labs/gb/components/switch/{md-switch.js → switch-element.js} +28 -14
  180. package/labs/gb/components/switch/switch-element.js.map +1 -0
  181. package/labs/gb/components/switch/switch.css.map +1 -1
  182. package/labs/gb/styles/adopt-styles.js +6 -1
  183. package/labs/gb/styles/adopt-styles.js.map +1 -1
  184. package/labs/gb/styles/icon/{md-icon.d.ts → icon-element.d.ts} +1 -7
  185. package/labs/gb/styles/icon/{md-icon.js → icon-element.js} +8 -10
  186. package/labs/gb/styles/icon/icon-element.js.map +1 -0
  187. package/labs/gb/styles/icon/md-gb-icon.d.ts +12 -0
  188. package/labs/gb/styles/icon/md-gb-icon.js +8 -0
  189. package/labs/gb/styles/icon/md-gb-icon.js.map +1 -0
  190. package/package.json +3 -3
  191. package/labs/gb/components/button/md-button.js.map +0 -1
  192. package/labs/gb/components/card/md-card.js.map +0 -1
  193. package/labs/gb/components/checkbox/md-checkbox.js.map +0 -1
  194. package/labs/gb/components/divider/md-divider.js.map +0 -1
  195. package/labs/gb/components/fab/md-fab.d.ts +0 -22
  196. package/labs/gb/components/fab/md-fab.js.map +0 -1
  197. package/labs/gb/components/iconbutton/md-icon-button.js.map +0 -1
  198. package/labs/gb/components/list/md-list-item.d.ts +0 -44
  199. package/labs/gb/components/list/md-list-item.js.map +0 -1
  200. package/labs/gb/components/list/md-list.js.map +0 -1
  201. package/labs/gb/components/menu/md-menu-group.js.map +0 -1
  202. package/labs/gb/components/menu/md-menu-item.d.ts +0 -30
  203. package/labs/gb/components/menu/md-menu-item.js.map +0 -1
  204. package/labs/gb/components/menu/md-menu.js.map +0 -1
  205. package/labs/gb/components/radio/md-radio.js.map +0 -1
  206. package/labs/gb/components/splitbutton/md-split-button.d.ts +0 -26
  207. package/labs/gb/components/splitbutton/md-split-button.js.map +0 -1
  208. package/labs/gb/components/switch/md-switch.js.map +0 -1
  209. package/labs/gb/styles/icon/md-icon.js.map +0 -1
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { LitElement } from 'lit';
7
+ declare const baseClass: import("../../behaviors/mixin.js").MixinReturn<import("../../behaviors/mixin.js").MixinReturn<typeof LitElement, import("../../behaviors/element-internals.js").WithElementInternals>, import("../../behaviors/focusable.js").Focusable>;
8
+ /**
9
+ * An ARIA tabpanel element.
10
+ */
11
+ export declare class AriaTabpanelElement extends baseClass {
12
+ static styles: import("lit").CSSResult;
13
+ /**
14
+ * ID of the tab element that controls this tabpanel.
15
+ */
16
+ get tab(): string;
17
+ set tab(value: string);
18
+ /**
19
+ * The tab element that controls this tabpanel.
20
+ */
21
+ get tabElement(): Element | null;
22
+ set tabElement(value: Element | null);
23
+ constructor();
24
+ protected render(): import("lit-html").TemplateResult<1>;
25
+ }
26
+ export {};
@@ -0,0 +1,53 @@
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, isServer, LitElement } from 'lit';
8
+ import { property } from 'lit/decorators.js';
9
+ import { queryAssociatedById } from '../../aria/query-associated.js';
10
+ import { internals, mixinElementInternals, } from '../../behaviors/element-internals.js';
11
+ import { mixinFocusable } from '../../behaviors/focusable.js';
12
+ const baseClass = mixinFocusable(mixinElementInternals(LitElement));
13
+ /**
14
+ * An ARIA tabpanel element.
15
+ */
16
+ export class AriaTabpanelElement extends baseClass {
17
+ /**
18
+ * ID of the tab element that controls this tabpanel.
19
+ */
20
+ get tab() {
21
+ return this.tabElement?.id || '';
22
+ }
23
+ set tab(value) {
24
+ this.tabElement = queryAssociatedById(this, value);
25
+ }
26
+ /**
27
+ * The tab element that controls this tabpanel.
28
+ */
29
+ get tabElement() {
30
+ return this[internals].ariaLabelledByElements?.[0] || null;
31
+ }
32
+ set tabElement(value) {
33
+ this[internals].ariaLabelledByElements = value ? [value] : [];
34
+ }
35
+ constructor() {
36
+ super();
37
+ if (isServer)
38
+ return;
39
+ this[internals].role = 'tabpanel';
40
+ }
41
+ render() {
42
+ return html `<slot></slot>`;
43
+ }
44
+ }
45
+ AriaTabpanelElement.styles = css `
46
+ :host(:not([hidden])) {
47
+ display: block;
48
+ }
49
+ `;
50
+ __decorate([
51
+ property({ type: String, reflect: true, noAccessor: true })
52
+ ], AriaTabpanelElement.prototype, "tab", null);
53
+ //# sourceMappingURL=tabpanel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabpanel.js","sourceRoot":"","sources":["tabpanel.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,OAAO,EAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAC,MAAM,KAAK,CAAC;AACpD,OAAO,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAE3C,OAAO,EAAC,mBAAmB,EAAC,MAAM,gCAAgC,CAAC;AACnE,OAAO,EACL,SAAS,EACT,qBAAqB,GACtB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAC,cAAc,EAAC,MAAM,8BAA8B,CAAC;AAE5D,MAAM,SAAS,GAAG,cAAc,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,CAAC;AAEpE;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,SAAS;IAOhD;;OAEG;IAEH,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,CAAC;IACnC,CAAC;IACD,IAAI,GAAG,CAAC,KAAa;QACnB,IAAI,CAAC,UAAU,GAAG,mBAAmB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,sBAAsB,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC7D,CAAC;IACD,IAAI,UAAU,CAAC,KAAqB;QAClC,IAAI,CAAC,SAAS,CAAC,CAAC,sBAAsB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAChE,CAAC;IAED;QACE,KAAK,EAAE,CAAC;QACR,IAAI,QAAQ;YAAE,OAAO;QACrB,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,GAAG,UAAU,CAAC;IACpC,CAAC;IAEkB,MAAM;QACvB,OAAO,IAAI,CAAA,eAAe,CAAC;IAC7B,CAAC;;AAnCe,0BAAM,GAAG,GAAG,CAAA;;;;GAI3B,CAAC;AAMF;IADC,QAAQ,CAAC,EAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAC,CAAC;8CAGzD","sourcesContent":["/**\n * @license\n * Copyright 2026 Google LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport {css, html, isServer, LitElement} from 'lit';\nimport {property} from 'lit/decorators.js';\n\nimport {queryAssociatedById} from '../../aria/query-associated.js';\nimport {\n internals,\n mixinElementInternals,\n} from '../../behaviors/element-internals.js';\nimport {mixinFocusable} from '../../behaviors/focusable.js';\n\nconst baseClass = mixinFocusable(mixinElementInternals(LitElement));\n\n/**\n * An ARIA tabpanel element.\n */\nexport class AriaTabpanelElement extends baseClass {\n static override styles = css`\n :host(:not([hidden])) {\n display: block;\n }\n `;\n\n /**\n * ID of the tab element that controls this tabpanel.\n */\n @property({type: String, reflect: true, noAccessor: true})\n get tab(): string {\n return this.tabElement?.id || '';\n }\n set tab(value: string) {\n this.tabElement = queryAssociatedById(this, value);\n }\n\n /**\n * The tab element that controls this tabpanel.\n */\n get tabElement(): Element | null {\n return this[internals].ariaLabelledByElements?.[0] || null;\n }\n set tabElement(value: Element | null) {\n this[internals].ariaLabelledByElements = value ? [value] : [];\n }\n\n constructor() {\n super();\n if (isServer) return;\n this[internals].role = 'tabpanel';\n }\n\n protected override render() {\n return html`<slot></slot>`;\n }\n}\n"]}
@@ -0,0 +1,136 @@
1
+ //
2
+ // Copyright 2026 Google LLC
3
+ // SPDX-License-Identifier: Apache-2.0
4
+ //
5
+
6
+ // Auto-generated by cascade_tokens
7
+ // Add `// EDIT:` comments for manual adjustments.
8
+ //
9
+ // --prefix=md.comp.app-bar
10
+ // --states=":small|[medium-flexible=medium]|[large-flexible=large],with-subtitle,search,on-scroll"
11
+ // --exclude=".medium.,.large."
12
+
13
+ @mixin root {
14
+ // LINT.IfChange
15
+ // md.comp.app-bar.avatar.size
16
+ --avatar-size: 32px;
17
+ // md.comp.app-bar.container.color
18
+ --container-color: var(--md-sys-color-surface);
19
+ // md.comp.app-bar.container.elevation
20
+ --container-elevation: var(--md-sys-elevation-shadow-0);
21
+ // md.comp.app-bar.small.container.height
22
+ --container-height: 64px;
23
+ // md.comp.app-bar.container.shape
24
+ --container-shape: var(--md-sys-shape-corner-none);
25
+ // md.comp.app-bar.icon-button-space
26
+ --icon-button-space: var(--md-sys-space-0);
27
+ // md.comp.app-bar.icon.size
28
+ --icon-size: 24px;
29
+ --label-text: unset;
30
+ --label-text-axes: unset;
31
+ --label-text-tracking: unset;
32
+ --label-color: unset;
33
+ // md.comp.app-bar.leading-icon.color
34
+ --leading-icon-color: var(--md-sys-color-on-surface);
35
+ // md.comp.app-bar.leading-space
36
+ --leading-space: var(--md-sys-space-50);
37
+ // ┌ md.comp.app-bar.small.subtitle.font
38
+ --subtitle: var(--md-sys-typescale-label-md);
39
+ // ┌┄ md.comp.app-bar.small.subtitle
40
+ --subtitle-axes: var(--md-sys-typescale-label-md-axes);
41
+ // md.comp.app-bar.subtitle.color
42
+ --subtitle-color: var(--md-sys-color-on-surface-variant);
43
+ // ┌┄ md.comp.app-bar.small.subtitle
44
+ --subtitle-tracking: var(--md-sys-typescale-label-md-tracking);
45
+ // ┌ md.comp.app-bar.small.title.font
46
+ --title: var(--md-sys-typescale-title-lg);
47
+ // ┌┄ md.comp.app-bar.small.title
48
+ --title-axes: var(--md-sys-typescale-title-lg-axes);
49
+ // md.comp.app-bar.title.color
50
+ --title-color: var(--md-sys-color-on-surface);
51
+ // ┌┄ md.comp.app-bar.small.title
52
+ --title-tracking: var(--md-sys-typescale-title-lg-tracking);
53
+ // md.comp.app-bar.trailing-icon.color
54
+ --trailing-icon-color: var(--md-sys-color-on-surface-variant);
55
+ // md.comp.app-bar.trailing-space
56
+ --trailing-space: var(--md-sys-space-50);
57
+ // LINT.ThenChange(md-gb-app-bar.ts) keep in sync with `@cssprop` jsdoc tags
58
+ }
59
+
60
+ @mixin medium {
61
+ // md.comp.app-bar.medium-flexible.container.height
62
+ --container-height: 112px;
63
+ // ┌ md.comp.app-bar.medium-flexible.subtitle.font
64
+ --subtitle: var(--md-sys-typescale-label-lg);
65
+ // ┌┄ md.comp.app-bar.medium-flexible.subtitle
66
+ --subtitle-axes: var(--md-sys-typescale-label-lg-axes);
67
+ // ┌┄ md.comp.app-bar.medium-flexible.subtitle
68
+ --subtitle-tracking: var(--md-sys-typescale-label-lg-tracking);
69
+ // ┌ md.comp.app-bar.medium-flexible.title.font
70
+ --title: var(--md-sys-typescale-headline-md);
71
+ // ┌┄ md.comp.app-bar.medium-flexible.title
72
+ --title-axes: var(--md-sys-typescale-headline-md-axes);
73
+ // ┌┄ md.comp.app-bar.medium-flexible.title
74
+ --title-tracking: var(--md-sys-typescale-headline-md-tracking);
75
+ }
76
+
77
+ @mixin large {
78
+ // md.comp.app-bar.large-flexible.container.height
79
+ --container-height: 120px;
80
+ // ┌ md.comp.app-bar.large-flexible.subtitle.font
81
+ --subtitle: var(--md-sys-typescale-title-md);
82
+ // ┌┄ md.comp.app-bar.large-flexible.subtitle
83
+ --subtitle-axes: var(--md-sys-typescale-title-md-axes);
84
+ // ┌┄ md.comp.app-bar.large-flexible.subtitle
85
+ --subtitle-tracking: var(--md-sys-typescale-title-md-tracking);
86
+ // ┌ md.comp.app-bar.large-flexible.title.font
87
+ --title: var(--md-sys-typescale-display-sm);
88
+ // ┌┄ md.comp.app-bar.large-flexible.title
89
+ --title-axes: var(--md-sys-typescale-display-sm-axes);
90
+ // ┌┄ md.comp.app-bar.large-flexible.title
91
+ --title-tracking: var(--md-sys-typescale-display-sm-tracking);
92
+ }
93
+
94
+ @mixin with-subtitle {
95
+ // ┌ md.comp.app-bar.medium-flexible.with-subtitle.container.height
96
+ --container-height: 136px;
97
+ }
98
+
99
+ @mixin with-subtitle-large {
100
+ // md.comp.app-bar.large-flexible.with-subtitle.container.height
101
+ --container-height: 152px;
102
+ }
103
+
104
+ @mixin search {
105
+ // md.comp.app-bar.search.container.color
106
+ --container-color: var(--md-sys-color-surface-container);
107
+ // md.comp.app-bar.small.search.container.height
108
+ --container-height: 56px;
109
+ // md.comp.app-bar.small.search.container.shape
110
+ --container-shape: var(--md-sys-shape-corner-full);
111
+ // ┌ md.comp.app-bar.small.search.label-text.font
112
+ --label-text: var(--md-sys-typescale-body-lg);
113
+ // ┌┄ md.comp.app-bar.small.search.label-text
114
+ --label-text-axes: var(--md-sys-typescale-body-lg-axes);
115
+ // ┌┄ md.comp.app-bar.small.search.label-text
116
+ --label-text-tracking: var(--md-sys-typescale-body-lg-tracking);
117
+ // md.comp.app-bar.search.label.color
118
+ --label-color: var(--md-sys-color-on-surface-variant);
119
+ // md.comp.app-bar.search.leading-space
120
+ --leading-space: var(--md-sys-space-100);
121
+ // md.comp.app-bar.search.trailing-space
122
+ --trailing-space: var(--md-sys-space-100);
123
+ }
124
+
125
+ @mixin on-scroll {
126
+ // md.comp.app-bar.on-scroll.container.color
127
+ --container-color: var(--md-sys-color-surface-container);
128
+ // md.comp.app-bar.on-scroll.container.elevation
129
+ --container-elevation: var(--md-sys-elevation-shadow-2);
130
+ }
131
+
132
+ @mixin on-scroll-search {
133
+ // md.comp.app-bar.search.on-scroll.container.color
134
+ --container-color: var(--md-sys-color-surface-container-highest);
135
+ }
136
+
@@ -0,0 +1,53 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Google LLC
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { CSSResultOrNative, LitElement } from 'lit';
7
+ import { type AppBarSize, type AppBarVariant } from './app-bar.js';
8
+ /**
9
+ * A Material Design Expressive App Bar component (`md-gb-app-bar`).
10
+ *
11
+ * @slot - Used to display the primary title text of the app bar.
12
+ * @slot subtitle - Used to display an optional subtitle below the title in medium/large bars.
13
+ * @slot leading - Used to display the leading navigation icon button (e.g. menu or back).
14
+ * @slot trailing - Used to display trailing action buttons and/or user avatar.
15
+ * @slot search - Used to display search bar input or controls when `variant="search"`.
16
+ * @fires {CustomEvent<{scrolled: boolean}>} scrollstatechange - Fired when the scrolled state changes. --bubbles --composed
17
+ * @csspart app-bar - The root container element.
18
+ * @cssprop --avatar-size
19
+ * @cssprop --container-color
20
+ * @cssprop --container-elevation
21
+ * @cssprop --container-height
22
+ * @cssprop --container-shape
23
+ * @cssprop --icon-button-space
24
+ * @cssprop --icon-size
25
+ * @cssprop --label-text
26
+ * @cssprop --label-text-axes
27
+ * @cssprop --label-text-tracking
28
+ * @cssprop --label-color
29
+ * @cssprop --leading-icon-color
30
+ * @cssprop --leading-space
31
+ * @cssprop --subtitle
32
+ * @cssprop --subtitle-axes
33
+ * @cssprop --subtitle-color
34
+ * @cssprop --subtitle-tracking
35
+ * @cssprop --title
36
+ * @cssprop --title-axes
37
+ * @cssprop --title-color
38
+ * @cssprop --title-tracking
39
+ * @cssprop --trailing-icon-color
40
+ * @cssprop --trailing-space
41
+ */
42
+ export declare class AppBarElement extends LitElement {
43
+ static styles: CSSResultOrNative[];
44
+ /** The size of the app bar (`sm`, `md`, `lg`). Defaults to `sm`. */
45
+ size: AppBarSize;
46
+ /** The behavioral variant of the app bar (`standard` or `search`). Defaults to `standard`. */
47
+ variant: AppBarVariant;
48
+ /** Whether the app bar is in its scrolled state. Defaults to `false`. */
49
+ scrolled: boolean;
50
+ private hasSubtitle;
51
+ protected render(): import("lit-html").TemplateResult<1>;
52
+ private handleSubtitleSlotChange;
53
+ }
@@ -0,0 +1,144 @@
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 { property, state } from 'lit/decorators.js';
9
+ import { appBar } from './app-bar.js';
10
+ import { styles as appBarStyles } from './app-bar.cssresult.js';
11
+ /**
12
+ * A Material Design Expressive App Bar component (`md-gb-app-bar`).
13
+ *
14
+ * @slot - Used to display the primary title text of the app bar.
15
+ * @slot subtitle - Used to display an optional subtitle below the title in medium/large bars.
16
+ * @slot leading - Used to display the leading navigation icon button (e.g. menu or back).
17
+ * @slot trailing - Used to display trailing action buttons and/or user avatar.
18
+ * @slot search - Used to display search bar input or controls when `variant="search"`.
19
+ * @fires {CustomEvent<{scrolled: boolean}>} scrollstatechange - Fired when the scrolled state changes. --bubbles --composed
20
+ * @csspart app-bar - The root container element.
21
+ * @cssprop --avatar-size
22
+ * @cssprop --container-color
23
+ * @cssprop --container-elevation
24
+ * @cssprop --container-height
25
+ * @cssprop --container-shape
26
+ * @cssprop --icon-button-space
27
+ * @cssprop --icon-size
28
+ * @cssprop --label-text
29
+ * @cssprop --label-text-axes
30
+ * @cssprop --label-text-tracking
31
+ * @cssprop --label-color
32
+ * @cssprop --leading-icon-color
33
+ * @cssprop --leading-space
34
+ * @cssprop --subtitle
35
+ * @cssprop --subtitle-axes
36
+ * @cssprop --subtitle-color
37
+ * @cssprop --subtitle-tracking
38
+ * @cssprop --title
39
+ * @cssprop --title-axes
40
+ * @cssprop --title-color
41
+ * @cssprop --title-tracking
42
+ * @cssprop --trailing-icon-color
43
+ * @cssprop --trailing-space
44
+ */
45
+ export class AppBarElement extends LitElement {
46
+ constructor() {
47
+ super(...arguments);
48
+ /** The size of the app bar (`sm`, `md`, `lg`). Defaults to `sm`. */
49
+ this.size = 'sm';
50
+ /** The behavioral variant of the app bar (`standard` or `search`). Defaults to `standard`. */
51
+ this.variant = 'standard';
52
+ /** Whether the app bar is in its scrolled state. Defaults to `false`. */
53
+ this.scrolled = false;
54
+ this.hasSubtitle = false;
55
+ }
56
+ render() {
57
+ const withSubtitle = this.size !== 'sm' && this.hasSubtitle;
58
+ const directive = appBar({
59
+ size: this.size,
60
+ withSubtitle,
61
+ variant: this.variant,
62
+ scrolled: this.scrolled,
63
+ });
64
+ if (this.variant === 'search') {
65
+ return html `<div part="app-bar" class="${directive}">
66
+ <div class="app-bar-leading">
67
+ <slot name="leading"></slot>
68
+ </div>
69
+ <div class="app-bar-search-container">
70
+ <slot name="search"></slot>
71
+ </div>
72
+ <div class="app-bar-trailing">
73
+ <slot name="trailing"></slot>
74
+ </div>
75
+ </div>`;
76
+ }
77
+ if (this.size !== 'sm') {
78
+ return html `<div part="app-bar" class="${directive}">
79
+ <div class="app-bar-top-row">
80
+ <div class="app-bar-leading">
81
+ <slot name="leading"></slot>
82
+ </div>
83
+ <div class="app-bar-trailing">
84
+ <slot name="trailing"></slot>
85
+ </div>
86
+ </div>
87
+ <div class="app-bar-bottom-row">
88
+ <div class="app-bar-title-wrapper">
89
+ <div class="app-bar-title">
90
+ <slot></slot>
91
+ </div>
92
+ <div
93
+ class="app-bar-subtitle"
94
+ style="${withSubtitle ? '' : 'display: none;'}">
95
+ <slot
96
+ name="subtitle"
97
+ @slotchange=${this.handleSubtitleSlotChange}></slot>
98
+ </div>
99
+ </div>
100
+ </div>
101
+ </div>`;
102
+ }
103
+ return html `<div part="app-bar" class="${directive}">
104
+ <div class="app-bar-leading">
105
+ <slot name="leading"></slot>
106
+ </div>
107
+ <div class="app-bar-title-wrapper">
108
+ <div class="app-bar-title">
109
+ <slot></slot>
110
+ </div>
111
+ </div>
112
+ <div class="app-bar-trailing">
113
+ <slot name="trailing"></slot>
114
+ </div>
115
+ </div>`;
116
+ }
117
+ handleSubtitleSlotChange(event) {
118
+ const slot = event.target;
119
+ this.hasSubtitle = slot.assignedNodes({ flatten: true }).length > 0;
120
+ }
121
+ }
122
+ AppBarElement.styles = [
123
+ appBarStyles,
124
+ css `
125
+ :host {
126
+ display: flex;
127
+ width: 100%;
128
+ position: relative;
129
+ }
130
+ `,
131
+ ];
132
+ __decorate([
133
+ property({ reflect: true })
134
+ ], AppBarElement.prototype, "size", void 0);
135
+ __decorate([
136
+ property({ reflect: true })
137
+ ], AppBarElement.prototype, "variant", void 0);
138
+ __decorate([
139
+ property({ type: Boolean, reflect: true })
140
+ ], AppBarElement.prototype, "scrolled", void 0);
141
+ __decorate([
142
+ state()
143
+ ], AppBarElement.prototype, "hasSubtitle", void 0);
144
+ //# sourceMappingURL=app-bar-element.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-bar-element.js","sourceRoot":"","sources":["app-bar-element.ts"],"names":[],"mappings":"AAAA;;;;GAIG;;AAEH,OAAO,EAAC,GAAG,EAAqB,IAAI,EAAE,UAAU,EAAC,MAAM,KAAK,CAAC;AAC7D,OAAO,EAAC,QAAQ,EAAE,KAAK,EAAC,MAAM,mBAAmB,CAAC;AAElD,OAAO,EAAC,MAAM,EAAsC,MAAM,cAAc,CAAC;AACzE,OAAO,EAAC,MAAM,IAAI,YAAY,EAAC,MAAM,wBAAwB,CAAC;AAE9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,MAAM,OAAO,aAAc,SAAQ,UAAU;IAA7C;;QAYE,oEAAoE;QACzC,SAAI,GAAe,IAAI,CAAC;QAEnD,8FAA8F;QACnE,YAAO,GAAkB,UAAU,CAAC;QAE/D,yEAAyE;QAC/B,aAAQ,GAAG,KAAK,CAAC;QAE1C,gBAAW,GAAG,KAAK,CAAC;IAuEvC,CAAC;IArEoB,MAAM;QACvB,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,WAAW,CAAC;QAC5D,MAAM,SAAS,GAAG,MAAM,CAAC;YACvB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,YAAY;YACZ,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAA,8BAA8B,SAAS;;;;;;;;;;aAU3C,CAAC;QACV,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,IAAI,CAAA,8BAA8B,SAAS;;;;;;;;;;;;;;;;uBAgBjC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB;;;8BAG7B,IAAI,CAAC,wBAAwB;;;;aAI9C,CAAC;QACV,CAAC;QAED,OAAO,IAAI,CAAA,8BAA8B,SAAS;;;;;;;;;;;;WAY3C,CAAC;IACV,CAAC;IAEO,wBAAwB,CAAC,KAAY;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,MAAyB,CAAC;QAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IACpE,CAAC;;AA1Fe,oBAAM,GAAwB;IAC5C,YAAY;IACZ,GAAG,CAAA;;;;;;KAMF;CACF,AATqB,CASpB;AAGyB;IAA1B,QAAQ,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC;2CAAyB;AAGxB;IAA1B,QAAQ,CAAC,EAAC,OAAO,EAAE,IAAI,EAAC,CAAC;8CAAqC;AAGrB;IAAzC,QAAQ,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAC,CAAC;+CAAkB;AAE1C;IAAhB,KAAK,EAAE;kDAA6B","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 {property, state} from 'lit/decorators.js';\n\nimport {appBar, type AppBarSize, type AppBarVariant} from './app-bar.js';\nimport {styles as appBarStyles} from './app-bar.cssresult.js';\n\n/**\n * A Material Design Expressive App Bar component (`md-gb-app-bar`).\n *\n * @slot - Used to display the primary title text of the app bar.\n * @slot subtitle - Used to display an optional subtitle below the title in medium/large bars.\n * @slot leading - Used to display the leading navigation icon button (e.g. menu or back).\n * @slot trailing - Used to display trailing action buttons and/or user avatar.\n * @slot search - Used to display search bar input or controls when `variant=\"search\"`.\n * @fires {CustomEvent<{scrolled: boolean}>} scrollstatechange - Fired when the scrolled state changes. --bubbles --composed\n * @csspart app-bar - The root container element.\n * @cssprop --avatar-size\n * @cssprop --container-color\n * @cssprop --container-elevation\n * @cssprop --container-height\n * @cssprop --container-shape\n * @cssprop --icon-button-space\n * @cssprop --icon-size\n * @cssprop --label-text\n * @cssprop --label-text-axes\n * @cssprop --label-text-tracking\n * @cssprop --label-color\n * @cssprop --leading-icon-color\n * @cssprop --leading-space\n * @cssprop --subtitle\n * @cssprop --subtitle-axes\n * @cssprop --subtitle-color\n * @cssprop --subtitle-tracking\n * @cssprop --title\n * @cssprop --title-axes\n * @cssprop --title-color\n * @cssprop --title-tracking\n * @cssprop --trailing-icon-color\n * @cssprop --trailing-space\n */\nexport class AppBarElement extends LitElement {\n static override styles: CSSResultOrNative[] = [\n appBarStyles,\n css`\n :host {\n display: flex;\n width: 100%;\n position: relative;\n }\n `,\n ];\n\n /** The size of the app bar (`sm`, `md`, `lg`). Defaults to `sm`. */\n @property({reflect: true}) size: AppBarSize = 'sm';\n\n /** The behavioral variant of the app bar (`standard` or `search`). Defaults to `standard`. */\n @property({reflect: true}) variant: AppBarVariant = 'standard';\n\n /** Whether the app bar is in its scrolled state. Defaults to `false`. */\n @property({type: Boolean, reflect: true}) scrolled = false;\n\n @state() private hasSubtitle = false;\n\n protected override render() {\n const withSubtitle = this.size !== 'sm' && this.hasSubtitle;\n const directive = appBar({\n size: this.size,\n withSubtitle,\n variant: this.variant,\n scrolled: this.scrolled,\n });\n\n if (this.variant === 'search') {\n return html`<div part=\"app-bar\" class=\"${directive}\">\n <div class=\"app-bar-leading\">\n <slot name=\"leading\"></slot>\n </div>\n <div class=\"app-bar-search-container\">\n <slot name=\"search\"></slot>\n </div>\n <div class=\"app-bar-trailing\">\n <slot name=\"trailing\"></slot>\n </div>\n </div>`;\n }\n\n if (this.size !== 'sm') {\n return html`<div part=\"app-bar\" class=\"${directive}\">\n <div class=\"app-bar-top-row\">\n <div class=\"app-bar-leading\">\n <slot name=\"leading\"></slot>\n </div>\n <div class=\"app-bar-trailing\">\n <slot name=\"trailing\"></slot>\n </div>\n </div>\n <div class=\"app-bar-bottom-row\">\n <div class=\"app-bar-title-wrapper\">\n <div class=\"app-bar-title\">\n <slot></slot>\n </div>\n <div\n class=\"app-bar-subtitle\"\n style=\"${withSubtitle ? '' : 'display: none;'}\">\n <slot\n name=\"subtitle\"\n @slotchange=${this.handleSubtitleSlotChange}></slot>\n </div>\n </div>\n </div>\n </div>`;\n }\n\n return html`<div part=\"app-bar\" class=\"${directive}\">\n <div class=\"app-bar-leading\">\n <slot name=\"leading\"></slot>\n </div>\n <div class=\"app-bar-title-wrapper\">\n <div class=\"app-bar-title\">\n <slot></slot>\n </div>\n </div>\n <div class=\"app-bar-trailing\">\n <slot name=\"trailing\"></slot>\n </div>\n </div>`;\n }\n\n private handleSubtitleSlotChange(event: Event) {\n const slot = event.target as HTMLSlotElement;\n this.hasSubtitle = slot.assignedNodes({flatten: true}).length > 0;\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.app-bar{.app-bar{--avatar-size: 32px;--container-color: var(--md-sys-color-surface);--container-elevation: var(--md-sys-elevation-shadow-0);--container-height: 64px;--container-shape: var(--md-sys-shape-corner-none);--icon-button-space: var(--md-sys-space-0);--icon-size: 24px;--label-text: unset;--label-text-axes: unset;--label-text-tracking: unset;--label-color: unset;--leading-icon-color: var(--md-sys-color-on-surface);--leading-space: var(--md-sys-space-50);--subtitle: var(--md-sys-typescale-label-md);--subtitle-axes: var(--md-sys-typescale-label-md-axes);--subtitle-color: var(--md-sys-color-on-surface-variant);--subtitle-tracking: var(--md-sys-typescale-label-md-tracking);--title: var(--md-sys-typescale-title-lg);--title-axes: var(--md-sys-typescale-title-lg-axes);--title-color: var(--md-sys-color-on-surface);--title-tracking: var(--md-sys-typescale-title-lg-tracking);--trailing-icon-color: var(--md-sys-color-on-surface-variant);--trailing-space: var(--md-sys-space-50)}.app-bar-md{--container-height: 112px;--subtitle: var(--md-sys-typescale-label-lg);--subtitle-axes: var(--md-sys-typescale-label-lg-axes);--subtitle-tracking: var(--md-sys-typescale-label-lg-tracking);--title: var(--md-sys-typescale-headline-md);--title-axes: var(--md-sys-typescale-headline-md-axes);--title-tracking: var(--md-sys-typescale-headline-md-tracking)}.app-bar-lg{--container-height: 120px;--subtitle: var(--md-sys-typescale-title-md);--subtitle-axes: var(--md-sys-typescale-title-md-axes);--subtitle-tracking: var(--md-sys-typescale-title-md-tracking);--title: var(--md-sys-typescale-display-sm);--title-axes: var(--md-sys-typescale-display-sm-axes);--title-tracking: var(--md-sys-typescale-display-sm-tracking)}.app-bar-with-subtitle{--container-height: 136px}.app-bar-with-subtitle.app-bar-lg{--container-height: 152px}.app-bar-search{--container-color: var(--md-sys-color-surface-container);--container-height: 56px;--container-shape: var(--md-sys-shape-corner-full);--label-text: var(--md-sys-typescale-body-lg);--label-text-axes: var(--md-sys-typescale-body-lg-axes);--label-text-tracking: var(--md-sys-typescale-body-lg-tracking);--label-color: var(--md-sys-color-on-surface-variant);--leading-space: var(--md-sys-space-100);--trailing-space: var(--md-sys-space-100)}.app-bar-scrolled{--container-color: var(--md-sys-color-surface-container);--container-elevation: var(--md-sys-elevation-shadow-2)}.app-bar-scrolled.app-bar-search{--container-color: var(--md-sys-color-surface-container-highest)}.app-bar{box-sizing:border-box;display:flex;position:relative;width:100%;min-height:var(--container-height);background-color:var(--container-color);border-radius:var(--container-shape);box-shadow:var(--container-elevation);color:var(--title-color);transition:background-color 200ms ease,box-shadow 200ms ease,min-height 200ms ease;padding-inline:var(--leading-space) var(--trailing-space)}.app-bar-sm,.app-bar-search{flex-direction:row;align-items:center;justify-content:space-between}.app-bar-md,.app-bar-lg{flex-direction:column;justify-content:space-between;align-items:stretch}.app-bar-md .app-bar-top-row,.app-bar-lg .app-bar-top-row{display:flex;flex-direction:row;align-items:center;justify-content:space-between;min-height:64px;width:100%}.app-bar-md .app-bar-bottom-row,.app-bar-lg .app-bar-bottom-row{display:flex;flex-direction:column;justify-content:flex-end;padding-bottom:24px;padding-inline:12px;flex:1 1 auto;min-height:0}.app-bar-leading,.app-bar-trailing{display:flex;align-items:center;gap:var(--icon-button-space);flex-shrink:0}.app-bar-leading{color:var(--leading-icon-color)}.app-bar-trailing{color:var(--trailing-icon-color)}.app-bar-title-wrapper{display:flex;flex-direction:column;justify-content:center;flex:1 1 auto;min-width:0;overflow:hidden}.app-bar-sm .app-bar-title-wrapper{margin-inline:4px}.app-bar-title{margin:0;font:var(--title);font-variation-settings:var(--title-axes);letter-spacing:var(--title-tracking);color:var(--title-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-bar-title ::slotted(*){margin:0;font:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit}.app-bar-subtitle{margin:0;margin-top:2px;font:var(--subtitle);font-variation-settings:var(--subtitle-axes);letter-spacing:var(--subtitle-tracking);color:var(--subtitle-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-bar-subtitle ::slotted(*){margin:0;font:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit}.app-bar-search-container{display:flex;flex:1 1 auto;align-items:center;min-width:0;margin-inline:8px}}/*# sourceMappingURL=app-bar.css.map */
@@ -0,0 +1 @@
1
+ {"version":3,"sourceRoot":"","sources":["app-bar.scss","_app-bar-tokens.scss"],"names":[],"mappings":"AAAA;AAAA;AAAA;AAAA,GASA,cACA,uBAEE,SCGA,oBAEA,+CAEA,wDAEA,yBAEA,mDAEA,2CAEA,kBACA,oBACA,yBACA,6BACA,qBAEA,qDAEA,wCAEA,6CAEA,uDAEA,yDAEA,+DAEA,0CAEA,oDAEA,8CAEA,4DAEA,8DAEA,yCDxCA,YC8CA,0BAEA,6CAEA,uDAEA,+DAEA,6CAEA,uDAEA,+DDvDA,YC4DA,0BAEA,6CAEA,uDAEA,+DAEA,4CAEA,sDAEA,8DDrEA,uBC0EA,0BDvEA,kCC4EA,0BDzEA,gBC8EA,yDAEA,yBAEA,mDAEA,8CAEA,wDAEA,gEAEA,sDAEA,yCAEA,0CD3FA,kBCgGA,yDAEA,wDD/FA,iCCoGA,iED/FA,SACE,sBACA,aACA,kBACA,WACA,mCACA,wCACA,qCACA,sCACA,yBACA,WACE,wEAGF,0DAIF,4BAEE,mBACA,mBACA,8BAIF,wBAEE,sBACA,8BACA,oBAEA,0DACE,aACA,mBACA,mBACA,8BACA,gBACA,WAGF,gEACE,aACA,sBACA,yBACA,oBACA,oBACA,cACA,aAKJ,mCAEE,aACA,mBACA,6BACA,cAGF,iBACE,gCAGF,kBACE,iCAGF,uBACE,aACA,sBACA,uBACA,cACA,YACA,gBAGF,mCACE,kBAGF,eACE,SACA,kBACA,0CACA,qCACA,yBACA,mBACA,gBACA,uBAEA,4BACE,SACA,aACA,gCACA,uBACA,cAIJ,kBACE,SACA,eACA,qBACA,6CACA,wCACA,4BACA,mBACA,gBACA,uBAEA,+BACE,SACA,aACA,gCACA,uBACA,cAIJ,0BACE,aACA,cACA,mBACA,YACA","file":"app-bar.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/appbar/app-bar.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.app-bar{.app-bar{--avatar-size: 32px;--container-color: var(--md-sys-color-surface);--container-elevation: var(--md-sys-elevation-shadow-0);--container-height: 64px;--container-shape: var(--md-sys-shape-corner-none);--icon-button-space: var(--md-sys-space-0);--icon-size: 24px;--label-text: unset;--label-text-axes: unset;--label-text-tracking: unset;--label-color: unset;--leading-icon-color: var(--md-sys-color-on-surface);--leading-space: var(--md-sys-space-50);--subtitle: var(--md-sys-typescale-label-md);--subtitle-axes: var(--md-sys-typescale-label-md-axes);--subtitle-color: var(--md-sys-color-on-surface-variant);--subtitle-tracking: var(--md-sys-typescale-label-md-tracking);--title: var(--md-sys-typescale-title-lg);--title-axes: var(--md-sys-typescale-title-lg-axes);--title-color: var(--md-sys-color-on-surface);--title-tracking: var(--md-sys-typescale-title-lg-tracking);--trailing-icon-color: var(--md-sys-color-on-surface-variant);--trailing-space: var(--md-sys-space-50)}.app-bar-md{--container-height: 112px;--subtitle: var(--md-sys-typescale-label-lg);--subtitle-axes: var(--md-sys-typescale-label-lg-axes);--subtitle-tracking: var(--md-sys-typescale-label-lg-tracking);--title: var(--md-sys-typescale-headline-md);--title-axes: var(--md-sys-typescale-headline-md-axes);--title-tracking: var(--md-sys-typescale-headline-md-tracking)}.app-bar-lg{--container-height: 120px;--subtitle: var(--md-sys-typescale-title-md);--subtitle-axes: var(--md-sys-typescale-title-md-axes);--subtitle-tracking: var(--md-sys-typescale-title-md-tracking);--title: var(--md-sys-typescale-display-sm);--title-axes: var(--md-sys-typescale-display-sm-axes);--title-tracking: var(--md-sys-typescale-display-sm-tracking)}.app-bar-with-subtitle{--container-height: 136px}.app-bar-with-subtitle.app-bar-lg{--container-height: 152px}.app-bar-search{--container-color: var(--md-sys-color-surface-container);--container-height: 56px;--container-shape: var(--md-sys-shape-corner-full);--label-text: var(--md-sys-typescale-body-lg);--label-text-axes: var(--md-sys-typescale-body-lg-axes);--label-text-tracking: var(--md-sys-typescale-body-lg-tracking);--label-color: var(--md-sys-color-on-surface-variant);--leading-space: var(--md-sys-space-100);--trailing-space: var(--md-sys-space-100)}.app-bar-scrolled{--container-color: var(--md-sys-color-surface-container);--container-elevation: var(--md-sys-elevation-shadow-2)}.app-bar-scrolled.app-bar-search{--container-color: var(--md-sys-color-surface-container-highest)}.app-bar{box-sizing:border-box;display:flex;position:relative;width:100%;min-height:var(--container-height);background-color:var(--container-color);border-radius:var(--container-shape);box-shadow:var(--container-elevation);color:var(--title-color);transition:background-color 200ms ease,box-shadow 200ms ease,min-height 200ms ease;padding-inline:var(--leading-space) var(--trailing-space)}.app-bar-sm,.app-bar-search{flex-direction:row;align-items:center;justify-content:space-between}.app-bar-md,.app-bar-lg{flex-direction:column;justify-content:space-between;align-items:stretch}.app-bar-md .app-bar-top-row,.app-bar-lg .app-bar-top-row{display:flex;flex-direction:row;align-items:center;justify-content:space-between;min-height:64px;width:100%}.app-bar-md .app-bar-bottom-row,.app-bar-lg .app-bar-bottom-row{display:flex;flex-direction:column;justify-content:flex-end;padding-bottom:24px;padding-inline:12px;flex:1 1 auto;min-height:0}.app-bar-leading,.app-bar-trailing{display:flex;align-items:center;gap:var(--icon-button-space);flex-shrink:0}.app-bar-leading{color:var(--leading-icon-color)}.app-bar-trailing{color:var(--trailing-icon-color)}.app-bar-title-wrapper{display:flex;flex-direction:column;justify-content:center;flex:1 1 auto;min-width:0;overflow:hidden}.app-bar-sm .app-bar-title-wrapper{margin-inline:4px}.app-bar-title{margin:0;font:var(--title);font-variation-settings:var(--title-axes);letter-spacing:var(--title-tracking);color:var(--title-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-bar-title ::slotted(*){margin:0;font:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit}.app-bar-subtitle{margin:0;margin-top:2px;font:var(--subtitle);font-variation-settings:var(--subtitle-axes);letter-spacing:var(--subtitle-tracking);color:var(--subtitle-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-bar-subtitle ::slotted(*){margin:0;font:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit}.app-bar-search-container{display:flex;flex:1 1 auto;align-items:center;min-width:0;margin-inline:8px}}
12
+ `;
13
+ export default styles.styleSheet;
14
+ //# sourceMappingURL=app-bar.cssresult.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app-bar.cssresult.js","sourceRoot":"","sources":["app-bar.cssresult.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,oEAAoE;AACpE,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/appbar/app-bar.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.app-bar{.app-bar{--avatar-size: 32px;--container-color: var(--md-sys-color-surface);--container-elevation: var(--md-sys-elevation-shadow-0);--container-height: 64px;--container-shape: var(--md-sys-shape-corner-none);--icon-button-space: var(--md-sys-space-0);--icon-size: 24px;--label-text: unset;--label-text-axes: unset;--label-text-tracking: unset;--label-color: unset;--leading-icon-color: var(--md-sys-color-on-surface);--leading-space: var(--md-sys-space-50);--subtitle: var(--md-sys-typescale-label-md);--subtitle-axes: var(--md-sys-typescale-label-md-axes);--subtitle-color: var(--md-sys-color-on-surface-variant);--subtitle-tracking: var(--md-sys-typescale-label-md-tracking);--title: var(--md-sys-typescale-title-lg);--title-axes: var(--md-sys-typescale-title-lg-axes);--title-color: var(--md-sys-color-on-surface);--title-tracking: var(--md-sys-typescale-title-lg-tracking);--trailing-icon-color: var(--md-sys-color-on-surface-variant);--trailing-space: var(--md-sys-space-50)}.app-bar-md{--container-height: 112px;--subtitle: var(--md-sys-typescale-label-lg);--subtitle-axes: var(--md-sys-typescale-label-lg-axes);--subtitle-tracking: var(--md-sys-typescale-label-lg-tracking);--title: var(--md-sys-typescale-headline-md);--title-axes: var(--md-sys-typescale-headline-md-axes);--title-tracking: var(--md-sys-typescale-headline-md-tracking)}.app-bar-lg{--container-height: 120px;--subtitle: var(--md-sys-typescale-title-md);--subtitle-axes: var(--md-sys-typescale-title-md-axes);--subtitle-tracking: var(--md-sys-typescale-title-md-tracking);--title: var(--md-sys-typescale-display-sm);--title-axes: var(--md-sys-typescale-display-sm-axes);--title-tracking: var(--md-sys-typescale-display-sm-tracking)}.app-bar-with-subtitle{--container-height: 136px}.app-bar-with-subtitle.app-bar-lg{--container-height: 152px}.app-bar-search{--container-color: var(--md-sys-color-surface-container);--container-height: 56px;--container-shape: var(--md-sys-shape-corner-full);--label-text: var(--md-sys-typescale-body-lg);--label-text-axes: var(--md-sys-typescale-body-lg-axes);--label-text-tracking: var(--md-sys-typescale-body-lg-tracking);--label-color: var(--md-sys-color-on-surface-variant);--leading-space: var(--md-sys-space-100);--trailing-space: var(--md-sys-space-100)}.app-bar-scrolled{--container-color: var(--md-sys-color-surface-container);--container-elevation: var(--md-sys-elevation-shadow-2)}.app-bar-scrolled.app-bar-search{--container-color: var(--md-sys-color-surface-container-highest)}.app-bar{box-sizing:border-box;display:flex;position:relative;width:100%;min-height:var(--container-height);background-color:var(--container-color);border-radius:var(--container-shape);box-shadow:var(--container-elevation);color:var(--title-color);transition:background-color 200ms ease,box-shadow 200ms ease,min-height 200ms ease;padding-inline:var(--leading-space) var(--trailing-space)}.app-bar-sm,.app-bar-search{flex-direction:row;align-items:center;justify-content:space-between}.app-bar-md,.app-bar-lg{flex-direction:column;justify-content:space-between;align-items:stretch}.app-bar-md .app-bar-top-row,.app-bar-lg .app-bar-top-row{display:flex;flex-direction:row;align-items:center;justify-content:space-between;min-height:64px;width:100%}.app-bar-md .app-bar-bottom-row,.app-bar-lg .app-bar-bottom-row{display:flex;flex-direction:column;justify-content:flex-end;padding-bottom:24px;padding-inline:12px;flex:1 1 auto;min-height:0}.app-bar-leading,.app-bar-trailing{display:flex;align-items:center;gap:var(--icon-button-space);flex-shrink:0}.app-bar-leading{color:var(--leading-icon-color)}.app-bar-trailing{color:var(--trailing-icon-color)}.app-bar-title-wrapper{display:flex;flex-direction:column;justify-content:center;flex:1 1 auto;min-width:0;overflow:hidden}.app-bar-sm .app-bar-title-wrapper{margin-inline:4px}.app-bar-title{margin:0;font:var(--title);font-variation-settings:var(--title-axes);letter-spacing:var(--title-tracking);color:var(--title-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-bar-title ::slotted(*){margin:0;font:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit}.app-bar-subtitle{margin:0;margin-top:2px;font:var(--subtitle);font-variation-settings:var(--subtitle-axes);letter-spacing:var(--subtitle-tracking);color:var(--subtitle-color);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.app-bar-subtitle ::slotted(*){margin:0;font:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit}.app-bar-search-container{display:flex;flex:1 1 auto;align-items:center;min-width:0;margin-inline:8px}}\n`;\nexport default styles.styleSheet!;\n"]}
@@ -0,0 +1,71 @@
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
+ /** App Bar size configuration types. */
8
+ export type AppBarSize = 'sm' | 'md' | 'lg';
9
+ /** App Bar size configurations. */
10
+ export declare const APP_BAR_SIZES: {
11
+ readonly sm: "sm";
12
+ readonly md: "md";
13
+ readonly lg: "lg";
14
+ };
15
+ /** App Bar variant configuration types. */
16
+ export type AppBarVariant = 'standard' | 'search';
17
+ /** App Bar variant configurations. */
18
+ export declare const APP_BAR_VARIANTS: {
19
+ readonly standard: "standard";
20
+ readonly search: "search";
21
+ };
22
+ /** App Bar classes. */
23
+ export declare const APP_BAR_CLASSES: {
24
+ readonly appBar: "app-bar";
25
+ readonly appBarSm: "app-bar-sm";
26
+ readonly appBarMd: "app-bar-md";
27
+ readonly appBarLg: "app-bar-lg";
28
+ readonly appBarWithSubtitle: "app-bar-with-subtitle";
29
+ readonly appBarSearch: "app-bar-search";
30
+ readonly appBarScrolled: "app-bar-scrolled";
31
+ };
32
+ /** The state provided to the `appBarClasses()` function. */
33
+ export interface AppBarClassesState {
34
+ /** The size of the app bar (`sm`, `md`, `lg`). */
35
+ size?: AppBarSize;
36
+ /** Whether the app bar has a subtitle. */
37
+ withSubtitle?: boolean;
38
+ /** The behavior variant (`standard` or `search`). */
39
+ variant?: AppBarVariant;
40
+ /** Whether the app bar is in a scrolled or docked state (`.app-bar-scrolled`). */
41
+ scrolled?: boolean;
42
+ }
43
+ /**
44
+ * Returns the app bar classes to apply to an element based on the given state.
45
+ *
46
+ * @param state The state of the app bar.
47
+ * @return An object of class names and truthy values if they apply.
48
+ */
49
+ export declare function appBarClasses({ size, withSubtitle, variant, scrolled, }?: AppBarClassesState): ClassInfo;
50
+ /**
51
+ * Sets up optional scroll target tracking for the given app bar element when an explicit `scrollTarget` is provided.
52
+ *
53
+ * @param appBar The element on which to set up app bar functionality.
54
+ * @param opts Setup options, containing an explicit `scrollTarget` and optional cleanup `signal`.
55
+ */
56
+ export declare function setupAppBar(appBar: HTMLElement, opts?: {
57
+ signal?: AbortSignal;
58
+ scrollTarget?: HTMLElement | Window;
59
+ }): void;
60
+ /**
61
+ * A Lit directive that adds app bar styling and optional scroll tracking functionality to its element.
62
+ *
63
+ * @example
64
+ * ```ts
65
+ * html`<div class="${appBar({size: 'md', scrolled: true})}">
66
+ * <div class="app-bar-top-row">...</div>
67
+ * <div class="app-bar-bottom-row">...</div>
68
+ * </div>`;
69
+ * ```
70
+ */
71
+ export declare const appBar: (state?: AppBarClassesState & import("../shared/directives.js").AdditionalClasses) => import("lit-html/directive.js").DirectiveResult;