@vollowx/seele 0.13.7 → 0.13.9

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 (94) hide show
  1. package/README.md +33 -15
  2. package/package.json +2 -2
  3. package/src/all.d.ts +5 -0
  4. package/src/all.js +5 -0
  5. package/src/base/autocomplete.js +13 -13
  6. package/src/base/button.d.ts +4 -2
  7. package/src/base/button.js +15 -11
  8. package/src/base/checkbox.js +3 -8
  9. package/src/base/controllers/popover-controller.js +1 -1
  10. package/src/base/experimental/popup-styles.css.js +2 -0
  11. package/src/base/experimental/popup.d.ts +40 -0
  12. package/src/base/experimental/popup.js +278 -0
  13. package/src/base/mixins/attachable.d.ts +5 -2
  14. package/src/base/mixins/attachable.js +63 -23
  15. package/src/base/mixins/button-toggle-mixin.d.ts +7 -0
  16. package/src/base/mixins/button-toggle-mixin.js +101 -0
  17. package/src/base/mixins/internals-attached.d.ts +4 -0
  18. package/src/base/mixins/internals-attached.js +6 -0
  19. package/src/base/radio.d.ts +3 -0
  20. package/src/base/radio.js +28 -16
  21. package/src/base/tab-panel.d.ts +3 -3
  22. package/src/base/tab-panel.js +9 -11
  23. package/src/base/tab.d.ts +2 -8
  24. package/src/base/tab.js +16 -35
  25. package/src/base/tabs.d.ts +6 -6
  26. package/src/base/tabs.js +101 -99
  27. package/src/base/toggle-button.d.ts +6 -45
  28. package/src/base/toggle-button.js +6 -135
  29. package/src/base/tooltip.d.ts +2 -1
  30. package/src/base/tooltip.js +2 -2
  31. package/src/core/ensure-ready.d.ts +2 -1
  32. package/src/core/ensure-ready.js +12 -7
  33. package/src/m3/button/common-button-toggle.d.ts +4 -10
  34. package/src/m3/button/common-button-toggle.js +6 -40
  35. package/src/m3/button/icon-button-toggle.d.ts +4 -6
  36. package/src/m3/button/icon-button-toggle.js +6 -33
  37. package/src/m3/button/shared-button-styles.css.js +1 -1
  38. package/src/m3/button/shared-button-toggle-styles.css.js +1 -1
  39. package/src/m3/button-group/standard-button-group-styles.css.js +1 -1
  40. package/src/m3/button-group/standard-button-group.d.ts +2 -0
  41. package/src/m3/button-group/standard-button-group.js +44 -38
  42. package/src/m3/checkbox/checkbox-styles.css.js +1 -1
  43. package/src/m3/checkbox/checkbox.d.ts +1 -1
  44. package/src/m3/checkbox/checkbox.js +2 -5
  45. package/src/m3/dialog/dialog-styles.css.js +1 -1
  46. package/src/m3/dialog/dialog.d.ts +3 -1
  47. package/src/m3/dialog/dialog.js +6 -4
  48. package/src/m3/experimental/popup-styles.css.js +2 -0
  49. package/src/m3/experimental/popup.d.ts +9 -0
  50. package/src/m3/experimental/popup.js +11 -0
  51. package/src/m3/fab/fab-styles.css.js +1 -1
  52. package/src/m3/field/field-styles.css.js +1 -1
  53. package/src/m3/field/filled-field-styles.css.js +1 -1
  54. package/src/m3/focus-ring/focus-ring-styles.css.js +1 -1
  55. package/src/m3/focus-ring/focus-ring.d.ts +2 -1
  56. package/src/m3/focus-ring/focus-ring.js +4 -7
  57. package/src/m3/list/list-item-styles.css.js +1 -1
  58. package/src/m3/menu/menu-styles.css.js +1 -1
  59. package/src/m3/nagivation/navigation-rail-item-styles.css.js +2 -0
  60. package/src/m3/nagivation/navigation-rail-item.d.ts +21 -0
  61. package/src/m3/nagivation/navigation-rail-item.js +44 -0
  62. package/src/m3/nagivation/navigation-rail-styles.css.js +2 -0
  63. package/src/m3/nagivation/navigation-rail.d.ts +12 -0
  64. package/src/m3/nagivation/navigation-rail.js +17 -0
  65. package/src/m3/radio/radio-styles.css.js +1 -1
  66. package/src/m3/radio/radio.d.ts +3 -0
  67. package/src/m3/radio/radio.js +12 -4
  68. package/src/m3/ripple/ripple-styles.css.js +1 -1
  69. package/src/m3/ripple/ripple.d.ts +3 -13
  70. package/src/m3/ripple/ripple.js +28 -31
  71. package/src/m3/{system → styles}/defaults.css +1 -1
  72. package/src/m3/styles/motion-expressive.css +15 -0
  73. package/src/m3/styles/motion-standard.css +15 -0
  74. package/src/m3/styles/typography.css +24 -0
  75. package/src/m3/switch/switch-styles.css.js +1 -1
  76. package/src/m3/switch/switch.d.ts +4 -2
  77. package/src/m3/switch/switch.js +14 -12
  78. package/src/m3/tab/secondary-tab-styles.css.js +2 -0
  79. package/src/m3/tab/secondary-tab.d.ts +5 -0
  80. package/src/m3/tab/secondary-tab.js +15 -0
  81. package/src/m3/tab/tab-panel-styles.css.js +1 -1
  82. package/src/m3/tab/tab-styles.css.js +1 -1
  83. package/src/m3/tab/tab.d.ts +3 -0
  84. package/src/m3/tab/tab.js +68 -3
  85. package/src/m3/tab/tabs-styles.css.js +1 -1
  86. package/src/m3/tab/tabs.d.ts +1 -7
  87. package/src/m3/tab/tabs.js +6 -39
  88. package/src/m3/toolbar/toolbar-styles.css.js +1 -1
  89. package/src/win98/button/button-styles.css.js +1 -1
  90. package/src/m3/system/typography.css +0 -34
  91. /package/src/m3/{system → styles}/base.css +0 -0
  92. /package/src/m3/{system → styles}/elevation.css +0 -0
  93. /package/src/m3/{system → styles}/motion.d.ts +0 -0
  94. /package/src/m3/{system → styles}/motion.js +0 -0
@@ -1,13 +1,11 @@
1
1
  import { __decorate } from "tslib";
2
- import { html } from 'lit';
3
- import { customElement, property } from 'lit/decorators.js';
4
- import { ToggleButton } from '../../base/toggle-button.js';
5
2
  import '../focus-ring/focus-ring.js';
6
3
  import '../ripple/ripple.js';
7
- import { targetStyles } from '../target-styles.css.js';
8
- import { sharedButtonStyles } from './shared-button-styles.css.js';
4
+ import { html } from 'lit';
5
+ import { customElement } from 'lit/decorators.js';
6
+ import { M3IconButton } from './icon-button.js';
7
+ import { ButtonToggleMixin } from '../../base/mixins/button-toggle-mixin.js';
9
8
  import { sharedButtonToggleStyles } from './shared-button-toggle-styles.css.js';
10
- import { iconButtonStyles } from './icon-button-styles.css.js';
11
9
  /**
12
10
  * @tag md-icon-button-toggle
13
11
  *
@@ -16,37 +14,12 @@ import { iconButtonStyles } from './icon-button-styles.css.js';
16
14
  * @slot - icon
17
15
  * @slot checked - icon when checked
18
16
  */
19
- let M3IconButtonToggle = class M3IconButtonToggle extends ToggleButton {
20
- constructor() {
21
- super(...arguments);
22
- this.size = 's';
23
- this.color = 'primary';
24
- this.variant = 'text';
25
- this.width = 'standard';
26
- }
27
- static { this.styles = [
28
- ...super.styles,
29
- targetStyles,
30
- sharedButtonStyles,
31
- sharedButtonToggleStyles,
32
- iconButtonStyles,
33
- ]; }
17
+ let M3IconButtonToggle = class M3IconButtonToggle extends ButtonToggleMixin(M3IconButton) {
18
+ static { this.styles = [...super.styles, sharedButtonToggleStyles]; }
34
19
  render() {
35
20
  return html `<md-focus-ring></md-focus-ring><md-ripple enterbehavior="always"></md-ripple><span part="target"></span><slot part="icon unchecked"></slot><slot part="icon checked" name="checked"></slot>`;
36
21
  }
37
22
  };
38
- __decorate([
39
- property({ reflect: true })
40
- ], M3IconButtonToggle.prototype, "size", void 0);
41
- __decorate([
42
- property({ reflect: true })
43
- ], M3IconButtonToggle.prototype, "color", void 0);
44
- __decorate([
45
- property({ reflect: true })
46
- ], M3IconButtonToggle.prototype, "variant", void 0);
47
- __decorate([
48
- property({ reflect: true })
49
- ], M3IconButtonToggle.prototype, "width", void 0);
50
23
  M3IconButtonToggle = __decorate([
51
24
  customElement('md-icon-button-toggle')
52
25
  ], M3IconButtonToggle);
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const sharedButtonStyles = css`@layer common-button,icon-button;@layer shared{:host{--_on-color:var(--md-sys-color-on-primary);--_color:var(--md-sys-color-primary);--_h:40px;--_icon-size:20px;--_rs:12px;--_rp:8px;--_text-color:var(--_on-color);--_background-color:var(--_color);box-sizing:border-box;cursor:pointer;height:var(--_h);-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;vertical-align:top;border-start-start-radius:var(--_inner-left-radius,calc(var(--_h) / 2));border-start-end-radius:var(--_inner-right-radius,calc(var(--_h) / 2));border-end-end-radius:var(--_inner-right-radius,calc(var(--_h) / 2));border-end-start-radius:var(--_inner-left-radius,calc(var(--_h) / 2));outline:0;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative}:host([notransition]){transition:none!important}md-ripple,md-focus-ring{position:absolute}:host([size=xs]){--_h:32px}:host([size=m]){--_h:56px;--_icon-size:24px;--_rs:16px;--_rp:12px}:host([size=l]){--_h:96px;--_icon-size:32px;--_rs:28px;--_rp:16px}:host([size=xl]){--_h:136px;--_icon-size:40px;--_rs:28px;--_rp:16px}:host([color=secondary]){--_on-color:var(--md-sys-color-on-secondary);--_color:var(--md-sys-color-secondary)}:host([color=tertiary]){--_on-color:var(--md-sys-color-on-tertiary);--_color:var(--md-sys-color-tertiary)}:host([variant=tonal]){--_background-color:var(--md-sys-color-secondary-container);--_text-color:var(--md-sys-color-on-secondary-container)}:host([variant=outlined]){--_background-color:transparent;--_text-color:var(--md-sys-color-on-surface-variant);--md-focus-ring-offset:3px;border-color:color-mix(in srgb, var(--md-sys-color-outline-variant) 100%, transparent);border-style:solid;border-width:1px}:host([variant=text]){--_text-color:var(--_color);--_background-color:transparent!important}:host([square]){--md-focus-ring-shape:var(--_rs);border-radius:var(--_rs)}}@layer shared-toggle,override;@layer active{:host(:active){--md-focus-ring-shape:var(--_rp);border-radius:var(--_rp)}}@layer disabled{:host([variant=outlined]:disabled){--_background-color:var(--md-sys-color-outline)}:host(:disabled),:host([variant=outlined]:state(checked):disabled){--_background-color:var(--md-sys-color-on-surface);--_background-opacity:10%;--_text-color:var(--md-sys-color-on-surface);--_text-opacity:38%;border-color:color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);box-shadow:none;pointer-events:none}}`;
2
+ export const sharedButtonStyles = css`@layer common-button,icon-button;@layer shared{:host{--_on-color:var(--md-sys-color-on-primary);--_color:var(--md-sys-color-primary);--_h:40px;--_icon-size:20px;--_rs:12px;--_rp:8px;--_text-color:var(--_on-color);--_background-color:var(--_color);box-sizing:border-box;cursor:pointer;height:var(--_h);-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;vertical-align:top;border-start-start-radius:var(--_inner-left-radius,calc(var(--_h) / 2));border-start-end-radius:var(--_inner-right-radius,calc(var(--_h) / 2));border-end-end-radius:var(--_inner-right-radius,calc(var(--_h) / 2));border-end-start-radius:var(--_inner-left-radius,calc(var(--_h) / 2));outline:0;flex-shrink:0;justify-content:center;align-items:center;display:inline-flex;position:relative}:host([notransition]){transition:none!important}md-ripple,md-focus-ring{position:absolute}:host([size=xs]){--_h:32px}:host([size=m]){--_h:56px;--_icon-size:24px;--_rs:16px;--_rp:12px}:host([size=l]){--_h:96px;--_icon-size:32px;--_rs:28px;--_rp:16px}:host([size=xl]){--_h:136px;--_icon-size:40px;--_rs:28px;--_rp:16px}:host([color=secondary]){--_on-color:var(--md-sys-color-on-secondary);--_color:var(--md-sys-color-secondary)}:host([color=tertiary]){--_on-color:var(--md-sys-color-on-tertiary);--_color:var(--md-sys-color-tertiary)}:host([variant=tonal]){--_background-color:var(--md-sys-color-secondary-container);--_text-color:var(--md-sys-color-on-secondary-container)}:host([variant=outlined]){--_background-color:transparent;--_text-color:var(--md-sys-color-on-surface-variant);--md-focus-ring-offset:3px;border-color:color-mix(in srgb, var(--md-sys-color-outline-variant) 100%, transparent);border-style:solid;border-width:1px;& md-ripple{inset:-1px}}:host([variant=text]){--_text-color:var(--_color);--_background-color:transparent!important}:host([square]){--md-focus-ring-shape:var(--_rs);border-radius:var(--_rs)}@media (forced-colors:active){:host{forced-color-adjust:none;color:buttontext;background:buttonface;border:1px solid buttonborder}}}@layer shared-toggle,override;@layer active{:host(:active),:host(:state(active)){--md-focus-ring-shape:var(--_rp);border-radius:var(--_rp)}}@layer disabled{:host([variant=outlined]:disabled){--_background-color:var(--md-sys-color-outline)}:host(:disabled),:host([variant=outlined]:state(checked):disabled){--_background-color:var(--md-sys-color-on-surface);--_background-opacity:10%;--_text-color:var(--md-sys-color-on-surface);--_text-opacity:38%;border-color:color-mix(in srgb, var(--md-sys-color-on-surface) 10%, transparent);box-shadow:none;pointer-events:none}@media (forced-colors:active){:host(:disabled){color:graytext;border-color:graytext}}}`;
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const sharedButtonToggleStyles = css`@layer shared-toggle{:host{transition:border-radius var(--md-sys-motion-spatial-fast-duration) var(--md-sys-motion-spatial-fast), box-shadow var(--md-sys-motion-effects-default-duration) var(--md-sys-motion-effects-default), background-color var(--md-sys-motion-effects-fast-duration) var(--md-sys-motion-effects-fast), color var(--md-sys-motion-effects-fast-duration) var(--md-sys-motion-effects-fast)}:host(:state(checked)){--md-focus-ring-shape:var(--_rs);border-radius:var(--_rs)}:host(:state(checked)) [part~=unchecked],:host(:not(:state(checked))) [part~=checked]{display:none}:host([variant=filled]:not(:state(checked))){--_background-color:var(--md-sys-color-surface-container);--_text-color:var(--md-sys-color-on-surface-variant)}:host([variant=tonal]:not(:state(checked))){--_background-color:var(--md-sys-color-surface-container-highest);--_text-color:var(--md-sys-color-on-surface-variant)}:host([variant=outlined]:state(checked)){--_background-color:var(--md-sys-color-inverse-surface);--_text-color:var(--md-sys-color-inverse-on-surface);border-width:0}}`;
2
+ export const sharedButtonToggleStyles = css`@layer shared-toggle{:host{transition:border-radius var(--md-sys-motion-spatial-fast-duration) var(--md-sys-motion-spatial-fast), box-shadow var(--md-sys-motion-effects-default-duration) var(--md-sys-motion-effects-default), background-color var(--md-sys-motion-effects-fast-duration) var(--md-sys-motion-effects-fast), color var(--md-sys-motion-effects-fast-duration) var(--md-sys-motion-effects-fast)}:host(:state(checked)){--md-focus-ring-shape:var(--_rs);border-radius:var(--_rs)}:host(:state(checked)) [part~=unchecked],:host(:not(:state(checked))) [part~=checked]{display:none}:host([variant=filled]:not(:state(checked))){--_background-color:var(--md-sys-color-surface-container);--_text-color:var(--md-sys-color-on-surface-variant)}:host([variant=tonal]:not(:state(checked))){--_background-color:var(--md-sys-color-surface-container-highest);--_text-color:var(--md-sys-color-on-surface-variant)}:host([variant=outlined]:state(checked)){--_background-color:var(--md-sys-color-inverse-surface);--_text-color:var(--md-sys-color-inverse-on-surface);border-width:0}@media (forced-colors:active){:host(:state(checked)){color:highlighttext;background:highlight}}}`;
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const standardButtonGroupStyles = css`:host{gap:8px;display:inline-flex}:host([size=s]){gap:12px}:host([size=ss]){gap:18px}`;
2
+ export const standardButtonGroupStyles = css`:host{gap:8px;display:inline-flex}:host([size=s]){gap:12px}:host([size=xs]){gap:18px}`;
@@ -10,7 +10,9 @@ export declare class M3StandardButtonGroup extends LitElement {
10
10
  $buttons: Array<HTMLElement>;
11
11
  static styles: any[];
12
12
  render(): import("lit-html").TemplateResult<1>;
13
+ constructor();
13
14
  connectedCallback(): void;
15
+ firstUpdated(): Promise<void>;
14
16
  disconnectedCallback(): void;
15
17
  /**
16
18
  * Passing no element resets all shape changes
@@ -1,8 +1,9 @@
1
1
  import { __decorate } from "tslib";
2
- import { LitElement, html } from 'lit';
2
+ import { LitElement, html, isServer } from 'lit';
3
3
  import { property, queryAssignedElements } from 'lit/decorators.js';
4
4
  import { customElement } from '../../core/decorators.js';
5
- import { getSpring } from '../system/motion.js';
5
+ import { ensureSlottedReady } from '../../core/ensure-ready.js';
6
+ import { getSpring } from '../styles/motion.js';
6
7
  import { standardButtonGroupStyles } from './standard-button-group-styles.css.js';
7
8
  const EXPAND_FACTOR = 1.15;
8
9
  const shapeAnimation = Symbol('shapeAnimation');
@@ -12,8 +13,12 @@ const shapeAnimation = Symbol('shapeAnimation');
12
13
  * @slot - buttons
13
14
  */
14
15
  let M3StandardButtonGroup = class M3StandardButtonGroup extends LitElement {
16
+ static { this.styles = [standardButtonGroupStyles]; }
17
+ render() {
18
+ return html `<slot @slotchange="${this.#handleSlotChange}"></slot>`;
19
+ }
15
20
  constructor() {
16
- super(...arguments);
21
+ super();
17
22
  this.size = '';
18
23
  this.#activeIndex = -1;
19
24
  this.#baseWidths = [];
@@ -42,20 +47,21 @@ let M3StandardButtonGroup = class M3StandardButtonGroup extends LitElement {
42
47
  this.updateLayout();
43
48
  }
44
49
  };
45
- }
46
- static { this.styles = [standardButtonGroupStyles]; }
47
- render() {
48
- return html `<slot @slotchange="${this.#handleSlotChange}"></slot>`;
50
+ if (!isServer) {
51
+ this.addEventListener('pointerdown', this.#handlePointerDown);
52
+ this.addEventListener('keydown', this.#handleKeyDown, { capture: true });
53
+ }
49
54
  }
50
55
  connectedCallback() {
51
56
  super.connectedCallback();
52
- this.addEventListener('pointerdown', this.#handlePointerDown);
53
- this.addEventListener('keydown', this.#handleKeyDown, { capture: true });
54
- window.addEventListener('pointerup', this.#reset);
55
- window.addEventListener('pointercancel', this.#reset);
56
- window.addEventListener('keyup', this.#reset, { capture: true });
57
+ const signal = (this.#abortController = new AbortController()).signal;
58
+ window.addEventListener('pointerup', this.#reset, { signal });
59
+ window.addEventListener('pointercancel', this.#reset, { signal });
60
+ window.addEventListener('keyup', this.#reset, { capture: true, signal });
57
61
  this.#resizeObserver = new ResizeObserver((entries) => {
58
- if (this.#activeIndex !== -1)
62
+ const isAnimating = this.#activeIndex !== -1 ||
63
+ this.$buttons.some((btn) => btn[shapeAnimation]);
64
+ if (isAnimating)
59
65
  return; // Skip if animating
60
66
  entries.forEach((entry) => {
61
67
  const target = entry.target;
@@ -63,22 +69,23 @@ let M3StandardButtonGroup = class M3StandardButtonGroup extends LitElement {
63
69
  if (index !== -1) {
64
70
  const currentWidth = target.style.width;
65
71
  target.style.width = '';
66
- this.#baseWidths[index] = entry.target.getBoundingClientRect().width;
72
+ this.#baseWidths[index] = target.getBoundingClientRect().width;
67
73
  if (currentWidth)
68
74
  target.style.width = currentWidth;
69
75
  }
70
76
  });
71
77
  });
72
- queueMicrotask(this.#handleSlotChange);
73
- // Which is not called on a SSR'd element
78
+ }
79
+ async firstUpdated() {
80
+ await ensureSlottedReady(this, () => this.$buttons, true);
81
+ this.#handleSlotChange();
74
82
  }
75
83
  disconnectedCallback() {
76
- window.removeEventListener('pointerup', this.#reset);
77
- window.removeEventListener('pointercancel', this.#reset);
78
- window.removeEventListener('keyup', this.#reset, { capture: true });
84
+ this.#abortController.abort();
79
85
  this.#resizeObserver.disconnect();
80
86
  super.disconnectedCallback();
81
87
  }
88
+ #abortController;
82
89
  #activeIndex;
83
90
  #resizeObserver;
84
91
  #baseWidths;
@@ -93,35 +100,34 @@ let M3StandardButtonGroup = class M3StandardButtonGroup extends LitElement {
93
100
  const pressedIndex = target ? this.$buttons.indexOf(target) : -1;
94
101
  this.#activeIndex = pressedIndex;
95
102
  const pressedBaseWidth = pressedIndex !== -1 ? this.#baseWidths[pressedIndex] : 0;
96
- const expansionDelta = pressedBaseWidth * (EXPAND_FACTOR - 1);
97
103
  const isPressedAtEdge = pressedIndex === 0 || pressedIndex === this.$buttons.length - 1;
104
+ const delta = (pressedBaseWidth * (EXPAND_FACTOR - 1)) / (isPressedAtEdge ? 1 : 2);
105
+ const spring = getSpring(this, 'spatial', 'fast');
98
106
  this.$buttons.forEach((btn, i) => {
99
107
  const currentWidth = btn.getBoundingClientRect().width;
100
108
  let targetWidth = this.#baseWidths[i];
101
109
  if (pressedIndex !== -1) {
102
- if (i === pressedIndex) {
110
+ if (i === pressedIndex)
103
111
  targetWidth = pressedBaseWidth * EXPAND_FACTOR;
104
- }
105
- else if (Math.abs(i - pressedIndex) === 1) {
106
- if (isPressedAtEdge)
107
- targetWidth = this.#baseWidths[i] - expansionDelta;
108
- else
109
- targetWidth = this.#baseWidths[i] - expansionDelta / 2;
110
- }
112
+ else if (Math.abs(i - pressedIndex) === 1)
113
+ targetWidth -= delta;
111
114
  }
112
- const spring = getSpring(this, 'spatial', 'fast');
113
- if (btn[shapeAnimation])
114
- btn[shapeAnimation].cancel();
115
- btn[shapeAnimation] = btn.animate([{ width: `${currentWidth}px` }, { width: `${targetWidth}px` }], {
115
+ btn[shapeAnimation]?.cancel();
116
+ const anim = (btn[shapeAnimation] = btn.animate([{ width: `${currentWidth}px` }, { width: `${targetWidth}px` }], {
116
117
  ...spring,
117
118
  fill: 'forwards',
118
- });
119
- btn[shapeAnimation].onfinish = () => {
120
- if (pressedIndex === -1) {
121
- btn.style.width = '';
122
- btn[shapeAnimation].cancel();
119
+ }));
120
+ anim.finished
121
+ .then(() => {
122
+ if (btn[shapeAnimation] === anim) {
123
+ if (pressedIndex === -1) {
124
+ btn.style.width = '';
125
+ anim.cancel();
126
+ }
127
+ delete btn[shapeAnimation];
123
128
  }
124
- };
129
+ })
130
+ .catch(() => { });
125
131
  });
126
132
  }
127
133
  };
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const checkboxStyles = css`:host{--md-focus-ring-radius:9999px;--_container-color:transparent;--_outline-color:var(--md-sys-color-on-surface-variant);--_mark-color:var(--md-sys-color-surface-container-highest);--_ripple-color:var(--md-sys-color-on-surface);--_checkbox-size:18px;background-color:color-mix(in srgb, var(--_container-color) var(--_container-opacity,100%), transparent);border-color:color-mix(in srgb, var(--_outline-color) var(--_outline-opacity,100%), transparent);border-style:solid;border-width:var(--md-checkbox-outline-width,2px);box-sizing:border-box;cursor:pointer;height:var(--_checkbox-size);-webkit-tap-highlight-color:transparent;transition:background-color var(--md-sys-motion-effects-fast-duration) var(--md-sys-motion-effects-fast), border-color var(--md-sys-motion-effects-fast-duration) var(--md-sys-motion-effects-fast);-webkit-user-select:none;user-select:none;vertical-align:top;width:var(--_checkbox-size);border-radius:2px;outline:0;place-content:center;place-items:center;margin:15px;display:inline-grid;position:relative}:host(:state(checked)),:host(:state(indeterminate)){--_container-color:var(--md-sys-color-primary);--_outline-color:var(--md-sys-color-primary);--_mark-color:var(--md-sys-color-on-primary);--_mark-opacity:100%;--_ripple-color:var(--md-sys-color-primary)}:host([error]){--_outline-color:var(--md-sys-color-error);--_mark-color:var(--md-sys-color-surface-container-highest);--_ripple-color:var(--md-sys-color-error)}:host([error]:state(checked)),:host([error]:state(indeterminate)){--_container-color:var(--md-sys-color-error);--_outline-color:var(--md-sys-color-error);--_mark-color:var(--md-sys-color-on-error);--_ripple-color:var(--md-sys-color-error)}:host(:disabled){--_outline-color:var(--md-sys-color-on-surface);--_outline-opacity:38%;--_mark-color:var(--md-sys-color-surface-container-highest);cursor:default;pointer-events:none}:host(:disabled:state(checked)),:host(:disabled:state(indeterminate)){--_container-color:var(--md-sys-color-on-surface);--_container-opacity:38%;--_outline-color:var(--md-sys-color-surface);--_outline-opacity:0%;--_mark-color:var(--md-sys-color-surface)}@media (hover:hover) and (pointer:fine){:host(:hover){--_unchecked-outline-color:var(--md-sys-color-on-surface)}}@media (forced-colors:active){:host{forced-color-adjust:none}}:host(:disabled){--_unchecked-container-opacity:38%}[part~=icon]{fill:color-mix(in srgb, var(--_mark-color) var(--_mark-opacity,0%), transparent);height:18px;transition:fill var(--md-sys-motion-effects-fast-duration) var(--md-sys-motion-effects-fast);width:18px;position:absolute;inset:-2px}[part~=mark]{transition-duration:var(--md-sys-motion-effects-default-duration);transition-timing-function:var(--md-sys-motion-effects-default);transform:scaleY(-1)translate(7px,-14px)rotate(45deg)}:host(:state(indeterminate)) [part~=mark]{transform:scaleY(-1)translate(4px,-10px)rotate(0)}:host(:state(checked)) [part~=mark],:host(:state(indeterminate)) [part~=mark]{transition-duration:var(--md-sys-motion-effects-default-duration);transition-timing-function:var(--md-sys-motion-effects-default)}[part~=mark-short]{width:2px;height:0;transition-property:transform,height}[part~=mark-long]{width:0;height:2px;transition-property:transform,width}:host(:not(:state(checked)):not(:state(indeterminate)):state(was-checked)) [part~=mark],:host(:not(:state(checked)):not(:state(indeterminate)):state(was-indeterminate)) [part~=mark]{transition-delay:var(--md-sys-motion-effects-fast-duration)}:host(:state(checked)) [part~=mark-short]{height:5.65685px}:host(:state(checked)) [part~=mark-long]{width:11.3137px}:host(:state(checked):state(was-unchecked)) [part~=mark-short]{transition-property:none}:host(:state(indeterminate)) [part~=mark-short]{height:2px}:host(:state(indeterminate)) [part~=mark-long]{width:10px}:host(:state(indeterminate):state(was-unchecked)) [part~=mark-short]{transition-property:height}:host(:state(indeterminate):state(was-unchecked)) [part~=mark-long]{transition-property:width}md-focus-ring{height:44px;inset:unset;width:44px}md-ripple{--md-ripple-color:var(--_ripple-color);height:40px;inset:unset;border-radius:9999px;width:40px}`;
2
+ export const checkboxStyles = css`:host{--md-focus-ring-radius:9999px;--_container-color:transparent;--_outline-color:var(--md-sys-color-on-surface-variant);--_mark-color:var(--md-sys-color-surface-container-highest);--_ripple-color:var(--md-sys-color-on-surface);--_checkbox-size:18px;background-color:color-mix(in srgb, var(--_container-color) var(--_container-opacity,100%), transparent);border-color:color-mix(in srgb, var(--_outline-color) var(--_outline-opacity,100%), transparent);border-style:solid;border-width:var(--md-checkbox-outline-width,2px);box-sizing:border-box;cursor:pointer;height:var(--_checkbox-size);-webkit-tap-highlight-color:transparent;transition:background-color var(--md-sys-motion-effects-fast-duration) var(--md-sys-motion-effects-fast), border-color var(--md-sys-motion-effects-fast-duration) var(--md-sys-motion-effects-fast);-webkit-user-select:none;user-select:none;vertical-align:top;width:var(--_checkbox-size);border-radius:2px;outline:0;place-content:center;place-items:center;margin:15px;display:inline-grid;position:relative}:host(:state(checked)),:host(:state(indeterminate)){--_container-color:var(--md-sys-color-primary);--_outline-color:var(--md-sys-color-primary);--_mark-color:var(--md-sys-color-on-primary);--_mark-opacity:100%;--_ripple-color:var(--md-sys-color-primary)}:host([error]){--_outline-color:var(--md-sys-color-error);--_mark-color:var(--md-sys-color-surface-container-highest);--_ripple-color:var(--md-sys-color-error)}:host([error]:state(checked)),:host([error]:state(indeterminate)){--_container-color:var(--md-sys-color-error);--_outline-color:var(--md-sys-color-error);--_mark-color:var(--md-sys-color-on-error);--_ripple-color:var(--md-sys-color-error)}:host(:disabled){--_outline-color:var(--md-sys-color-on-surface);--_outline-opacity:38%;--_mark-color:var(--md-sys-color-surface-container-highest);cursor:default;pointer-events:none}:host(:disabled:state(checked)),:host(:disabled:state(indeterminate)){--_container-color:var(--md-sys-color-on-surface);--_container-opacity:38%;--_outline-color:var(--md-sys-color-surface);--_outline-opacity:0%;--_mark-color:var(--md-sys-color-surface)}@media (hover:hover) and (pointer:fine){:host(:hover){--_unchecked-outline-color:var(--md-sys-color-on-surface)}}@media (forced-colors:active){:host{forced-color-adjust:none}}:host(:disabled){--_unchecked-container-opacity:38%}[part~=icon]{fill:color-mix(in srgb, var(--_mark-color) var(--_mark-opacity,0%), transparent);height:18px;transition:fill var(--md-sys-motion-effects-fast-duration) var(--md-sys-motion-effects-fast);width:18px;position:absolute;inset:-2px}[part~=mark]{transition-duration:var(--md-sys-motion-effects-default-duration);transition-timing-function:var(--md-sys-motion-effects-default);transform:scaleY(-1)translate(7px,-14px)rotate(45deg)}:host(:state(indeterminate)) [part~=mark]{transform:scaleY(-1)translate(4px,-10px)rotate(0)}:host(:state(checked)) [part~=mark],:host(:state(indeterminate)) [part~=mark]{transition-duration:var(--md-sys-motion-effects-default-duration);transition-timing-function:var(--md-sys-motion-effects-default)}[part~=mark-short]{width:2px;height:0;transition-property:transform,height}[part~=mark-long]{width:0;height:2px;transition-property:transform,width}:host(:not(:state(checked)):not(:state(indeterminate)):state(was-checked)) [part~=mark],:host(:not(:state(checked)):not(:state(indeterminate)):state(was-indeterminate)) [part~=mark]{transition-delay:var(--md-sys-motion-effects-fast-duration)}:host(:state(checked)) [part~=mark-short]{height:5.65685px}:host(:state(checked)) [part~=mark-long]{width:11.3137px}:host(:state(checked):state(was-unchecked)) [part~=mark-short]{transition-property:none}:host(:state(indeterminate)) [part~=mark-short]{height:2px}:host(:state(indeterminate)) [part~=mark-long]{width:10px}:host(:state(indeterminate):state(was-unchecked)) [part~=mark-short]{transition-property:height}:host(:state(indeterminate):state(was-unchecked)) [part~=mark-long]{transition-property:width}md-focus-ring{height:44px;inset:unset;width:44px}md-ripple{--md-ripple-color:var(--_ripple-color);height:40px;inset:unset;border-radius:9999px;width:40px}@media (forced-colors:active){:host{--_outline-color:CanvasText;--_ripple-color:CanvasText}:host(:is(:state(checked),:state(indeterminate))){--md-sys-color-primary:SelectedItem;--_mark-color:SelectedItemText}}`;
@@ -16,7 +16,7 @@ export declare class M3Checkbox extends Checkbox {
16
16
  static styles: any[];
17
17
  render(): import("lit-html").TemplateResult<1>;
18
18
  renderIcon(): import("lit-html").TemplateResult<1>;
19
- connectedCallback(): void;
19
+ firstUpdated(): void;
20
20
  }
21
21
  declare global {
22
22
  interface HTMLElementTagNameMap {
@@ -26,12 +26,9 @@ let M3Checkbox = class M3Checkbox extends Checkbox {
26
26
  renderIcon() {
27
27
  return html `<svg part="icon" viewBox="0 0 18 18" aria-hidden="true"><rect part="mark mark-short"></rect><rect part="mark mark-long"></rect></svg>`;
28
28
  }
29
- connectedCallback() {
30
- super.connectedCallback();
29
+ firstUpdated() {
31
30
  // SSR'd <md-checkbox> components don't have their labels set up on time
32
- this.updateComplete.then(() => {
33
- this.$ripple.attach(this, true);
34
- });
31
+ this.$ripple.attach(this, true);
35
32
  }
36
33
  };
37
34
  __decorate([
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const dialogStyles = css`dialog{background:0 0;border:none;outline:0;min-width:280px;max-width:min(560px,100% - 48px);min-height:140px;max-height:min(560px,100% - 48px);padding:0;overflow:visible}dialog[open]{display:flex}dialog::backdrop{background:0 0}[part=container]{box-sizing:border-box;will-change:height, transform, opacity;background-color:var(--md-sys-color-surface-container-high);border-radius:28px;flex-direction:column;flex-grow:1;padding-top:8px;display:flex;position:relative;overflow:hidden}[part=headline]{flex-direction:column;display:flex}::slotted([slot=icon]){block-size:1em;color:var(--md-sys-color-secondary);fill:currentColor;inline-size:1em;margin:16px 0 0;font-size:24px}::slotted([slot=headline]){box-sizing:border-box;font:var(--md-sys-typography-headline-small);color:var(--md-sys-color-on-surface);margin:0;padding:16px 24px 0}[part=headline].has-icon{align-items:center}[part=content]{color:var(--md-sys-color-on-surface-variant);font:var(--md-sys-typography-body-medium);will-change:opacity;padding:16px 24px 0;display:block}[part=actions]{justify-content:flex-end;gap:8px;display:flex;position:absolute;bottom:0;left:0;right:0}slot[name=actions]::slotted(*){box-sizing:border-box;justify-content:flex-end;gap:8px;padding:24px;display:flex}[part=scrim]{background:var(--md-sys-color-scrim);opacity:.32;pointer-events:none;z-index:1;display:none;position:fixed;inset:0}dialog[open]+[part=scrim]{display:block}`;
2
+ export const dialogStyles = css`dialog{background:0 0;border:none;outline:0;min-width:280px;max-width:min(560px,100% - 48px);min-height:140px;max-height:min(560px,100% - 48px);padding:0;overflow:visible}dialog[open]{display:flex}dialog::backdrop{background:0 0}[part=container]{box-sizing:border-box;will-change:height, transform, opacity;background-color:var(--md-sys-color-surface-container-high);border-radius:28px;flex-direction:column;flex-grow:1;padding-top:8px;display:flex;position:relative;overflow:hidden}[part=headline]{flex-direction:column;display:flex}::slotted([slot=icon]){block-size:1em;color:var(--md-sys-color-secondary);fill:currentColor;inline-size:1em;margin:16px 0 0;font-size:24px}::slotted([slot=headline]){box-sizing:border-box;font:var(--md-sys-typography-headline-small);color:var(--md-sys-color-on-surface);margin:0;padding:16px 24px 0}[part=headline].has-icon{align-items:center}[part=content]{color:var(--md-sys-color-on-surface-variant);font:var(--md-sys-typography-body-medium);will-change:opacity;padding:16px 24px 0;display:block}[part=actions]{justify-content:flex-end;gap:8px;display:flex;position:absolute;bottom:0;left:0;right:0}slot[name=actions]::slotted(*){box-sizing:border-box;justify-content:flex-end;gap:8px;padding:24px;display:flex}[part=scrim]{background:var(--md-sys-color-scrim);opacity:.32;pointer-events:none;z-index:1;display:none;position:fixed;inset:0}dialog[open]+[part=scrim]{display:block}@media (forced-colors:active){[part=container]{outline:2px solid windowtext}}`;
@@ -2,6 +2,8 @@ import { Dialog } from '../../base/dialog.js';
2
2
  /**
3
3
  * TODO: test if form actions `cancel` and other things related work - no,
4
4
  * event listener needed
5
+ * FIXME: on Firefox, the focus is not autoatically set to the first tabbable
6
+ * element
5
7
  *
6
8
  * @tag md-dialog
7
9
  *
@@ -35,7 +37,7 @@ export declare class M3Dialog extends Dialog {
35
37
  $scrim: HTMLDivElement;
36
38
  static styles: any[];
37
39
  render(): import("lit-html").TemplateResult<1>;
38
- connectedCallback(): void;
40
+ firstUpdated(): Promise<void>;
39
41
  show(): void;
40
42
  close(): void;
41
43
  }
@@ -1,11 +1,14 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { html } from 'lit';
3
3
  import { query, state, customElement } from 'lit/decorators.js';
4
+ import { ensureSlottedReady } from '../../core/ensure-ready.js';
4
5
  import { Dialog } from '../../base/dialog.js';
5
6
  import { dialogStyles } from './dialog-styles.css.js';
6
7
  /**
7
8
  * TODO: test if form actions `cancel` and other things related work - no,
8
9
  * event listener needed
10
+ * FIXME: on Firefox, the focus is not autoatically set to the first tabbable
11
+ * element
9
12
  *
10
13
  * @tag md-dialog
11
14
  *
@@ -50,10 +53,9 @@ let M3Dialog = class M3Dialog extends Dialog {
50
53
  render() {
51
54
  return html `<dialog part="dialog" @click="${this.#handleClick}" @cancel="${this._handleCancel}"><div part="container"><div part="body"><div part="headline" class="${this.hasIcon ? 'has-icon' : ''}"><slot name="icon" @slotchange="${this.#handleIconSlotChange}"></slot><slot name="headline"></slot></div><div part="content"><slot></slot></div><div class="actions-placeholder"></div></div><div part="actions"><slot name="actions"></slot></div></div></dialog><div part="scrim"></div>`;
52
55
  }
53
- connectedCallback() {
54
- super.connectedCallback();
55
- queueMicrotask(this.#handleIconSlotChange);
56
- // Which is not called on a SSR'd element
56
+ async firstUpdated() {
57
+ await ensureSlottedReady(this);
58
+ this.#handleIconSlotChange();
57
59
  }
58
60
  #activeAnimations;
59
61
  #clearAnimations() {
@@ -0,0 +1,2 @@
1
+ import { css } from 'lit';
2
+ export const popupStyles = css`:host{background:var(--md-sys-color-surface-container);box-shadow:var(--md-sys-elevation-shadow-2);color:var(--md-sys-color-on-surface);opacity:0;transition:opacity var(--md-sys-motion-effects-fast-duration), transform var(--md-sys-motion-spatial-fast-duration) var(--md-sys-motion-spatial-fast), display var(--md-sys-motion-spatial-default-duration) allow-discrete, overlay var(--md-sys-motion-spatial-default-duration) allow-discrete;border-radius:16px;transform:scaleY(.35)}slot{opacity:0;transition:opacity 67ms}:host(:popover-open){opacity:1;transition:opacity 67ms linear, transform var(--md-sys-motion-spatial-default-duration) var(--md-sys-motion-spatial-default);transform:scaleY(1);& slot{opacity:1;transition:opacity 67ms linear 67ms}}@starting-style{:host(:popover-open){opacity:0;transform:scaleY(.35);& slot{opacity:0}}}`;
@@ -0,0 +1,9 @@
1
+ import { Popup } from '../../base/experimental/popup.js';
2
+ export declare class M3Popup extends Popup {
3
+ static styles: any[];
4
+ }
5
+ declare global {
6
+ interface HTMLElementTagNameMap {
7
+ 'md-popup': M3Popup;
8
+ }
9
+ }
@@ -0,0 +1,11 @@
1
+ import { __decorate } from "tslib";
2
+ import { customElement } from 'lit/decorators.js';
3
+ import { Popup } from '../../base/experimental/popup.js';
4
+ import { popupStyles } from './popup-styles.css.js';
5
+ let M3Popup = class M3Popup extends Popup {
6
+ static { this.styles = [...super.styles, popupStyles]; }
7
+ };
8
+ M3Popup = __decorate([
9
+ customElement('md-popup')
10
+ ], M3Popup);
11
+ export { M3Popup };
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const fabStyles = css`:host{--md-focus-ring-shape:var(--_border-radius);--_text-color:var(--md-sys-color-on-primary);--_background-color:var(--md-sys-color-primary);--_size:56px;--_border-radius:16px;--_icon-size:24px;background-color:color-mix(in srgb, var(--_background-color) var(--_background-opacity,100%), transparent);border-radius:var(--_border-radius);box-shadow:var(--md-sys-elevation-shadow-3);box-sizing:border-box;color:color-mix(in srgb, var(--_text-color) var(--_text-opacity,100%), transparent);cursor:pointer;font:var(--md-sys-typography-label-large);height:var(--_size);min-width:var(--_size);padding-inline:calc((var(--_size) - var(--_icon-size)) / 2);-webkit-tap-highlight-color:transparent;transition:box-shadow var(--md-sys-motion-effects-default-duration) var(--md-sys-motion-effects-default);-webkit-user-select:none;user-select:none;vertical-align:middle;outline:0;justify-content:center;align-items:center;gap:8px;display:inline-flex;position:relative}md-ripple,md-focus-ring{position:absolute}:host([size=m]){--_size:80px;--_border-radius:20px;--_icon-size:28px}:host([size=l]){--_size:96px;--_border-radius:28px;--_icon-size:36px}:host([color=primary-container]){--_text-color:var(--md-sys-color-on-primary-container);--_background-color:var(--md-sys-color-primary-container)}:host([color=secondary-container]){--_text-color:var(--md-sys-color-on-secondary-container);--_background-color:var(--md-sys-color-secondary-container)}:host([color=tertiary-container]){--_text-color:var(--md-sys-color-on-tertiary-container);--_background-color:var(--md-sys-color-tertiary-container)}:host([color=secondary]){--_text-color:var(--md-sys-color-on-secondary);--_background-color:var(--md-sys-color-secondary)}:host([color=tertiary]){--_text-color:var(--md-sys-color-on-tertiary);--_background-color:var(--md-sys-color-tertiary)}:host([color=surface]){--_text-color:var(--md-sys-color-primary);--_background-color:var(--md-sys-color-surface-container-high)}:host(:disabled){--_background-color:var(--md-sys-color-on-surface);--_background-opacity:12%;--_text-color:var(--md-sys-color-on-surface);--_text-opacity:38%;box-shadow:none;pointer-events:none}@media (hover:hover) and (pointer:fine){:host(:hover:not(:active)){box-shadow:var(--md-sys-elevation-shadow-4)}}::slotted(:not([slot=label])){fill:currentColor;block-size:1em;font-size:var(--_icon-size);inline-size:1em}::slotted([slot=label]){margin-inline:4px}`;
2
+ export const fabStyles = css`:host{--md-focus-ring-shape:var(--_border-radius);--_text-color:var(--md-sys-color-on-primary);--_background-color:var(--md-sys-color-primary);--_size:56px;--_border-radius:16px;--_icon-size:24px;background-color:color-mix(in srgb, var(--_background-color) var(--_background-opacity,100%), transparent);border-radius:var(--_border-radius);box-shadow:var(--md-sys-elevation-shadow-3);box-sizing:border-box;color:color-mix(in srgb, var(--_text-color) var(--_text-opacity,100%), transparent);cursor:pointer;font:var(--md-sys-typography-label-large);height:var(--_size);min-width:var(--_size);padding-inline:calc((var(--_size) - var(--_icon-size)) / 2);-webkit-tap-highlight-color:transparent;transition:box-shadow var(--md-sys-motion-effects-default-duration) var(--md-sys-motion-effects-default);-webkit-user-select:none;user-select:none;vertical-align:middle;outline:0;justify-content:center;align-items:center;gap:8px;display:inline-flex;position:relative}md-ripple,md-focus-ring{position:absolute}:host([size=m]){--_size:80px;--_border-radius:20px;--_icon-size:28px}:host([size=l]){--_size:96px;--_border-radius:28px;--_icon-size:36px}:host([color=primary-container]){--_text-color:var(--md-sys-color-on-primary-container);--_background-color:var(--md-sys-color-primary-container)}:host([color=secondary-container]){--_text-color:var(--md-sys-color-on-secondary-container);--_background-color:var(--md-sys-color-secondary-container)}:host([color=tertiary-container]){--_text-color:var(--md-sys-color-on-tertiary-container);--_background-color:var(--md-sys-color-tertiary-container)}:host([color=secondary]){--_text-color:var(--md-sys-color-on-secondary);--_background-color:var(--md-sys-color-secondary)}:host([color=tertiary]){--_text-color:var(--md-sys-color-on-tertiary);--_background-color:var(--md-sys-color-tertiary)}:host([color=surface]){--_text-color:var(--md-sys-color-primary);--_background-color:var(--md-sys-color-surface-container-high)}:host(:disabled){--_background-color:var(--md-sys-color-on-surface);--_background-opacity:12%;--_text-color:var(--md-sys-color-on-surface);--_text-opacity:38%;box-shadow:none;pointer-events:none}@media (hover:hover) and (pointer:fine){:host(:hover:not(:active)){box-shadow:var(--md-sys-elevation-shadow-4)}}::slotted(:not([slot=label])){fill:currentColor;block-size:1em;font-size:var(--_icon-size);inline-size:1em}::slotted([slot=label]){margin-inline:4px}@media (forced-colors:active){:host{forced-color-adjust:none;color:buttontext;background:buttonface;border:1px solid buttonborder}}`;
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const fieldStyles = css`:host{--_min-height:56px;--_padding-top:16px;--_padding-bottom:16px;cursor:text;-webkit-user-select:none;user-select:none;vertical-align:top;flex-direction:column;display:inline-flex;position:relative}.container{box-sizing:border-box;min-height:var(--_min-height);flex:1;align-items:center;display:flex;position:relative}:host([disabled]){opacity:.38;pointer-events:none}.start,.end{color:var(--md-sys-color-on-surface-variant);justify-content:center;align-items:center;min-width:48px;display:flex}.start[hidden],.end[hidden]{display:none}.middle{flex-direction:column;flex:1;justify-content:center;height:100%;display:flex;position:relative;overflow:hidden}.label{font:var(--md-sys-typography-body-large);pointer-events:none;text-overflow:ellipsis;transform-origin:0 0;max-width:calc(100% - 24px);transition:margin-top var(--md-sys-motion-effects-default-duration) var(--md-sys-motion-effects-default), font-size var(--md-sys-motion-effects-default-duration) var(--md-sys-motion-effects-default);white-space:nowrap}.input-wrapper{padding-block:var(--_padding-top) var(--_padding-bottom);flex:1;align-items:center;display:flex}:host([haslabel]:not([focused]):not([populated])) ::slotted(input:placeholder-shown),:host([haslabel]:not([focused]):not([populated])) ::slotted(textarea:placeholder-shown){opacity:0}::slotted(*){caret-color:var(--md-sys-color-primary);font:var(--md-sys-typography-body-large)}.supporting-text{color:var(--md-sys-color-on-surface-variant);font:var(--md-sys-typography-body-small);padding-inline:16px;padding-top:4px}:host([error]) ::slotted(*){caret-color:var(--md-sys-color-error)}:host([error]) .supporting-text{color:var(--md-sys-color-error)}`;
2
+ export const fieldStyles = css`:host{--_min-height:56px;--_padding-top:16px;--_padding-bottom:16px;cursor:text;-webkit-user-select:none;user-select:none;vertical-align:top;flex-direction:column;display:inline-flex;position:relative}.container{box-sizing:border-box;min-height:var(--_min-height);flex:1;align-items:center;display:flex;position:relative}:host([disabled]){opacity:.38;pointer-events:none}.start,.end{color:var(--md-sys-color-on-surface-variant);justify-content:center;align-items:center;min-width:48px;display:flex}.start[hidden],.end[hidden]{display:none}.middle{flex-direction:column;flex:1;justify-content:center;height:100%;display:flex;position:relative;overflow:hidden}.label{font:var(--md-sys-typography-body-large);pointer-events:none;text-overflow:ellipsis;transform-origin:0 0;max-width:calc(100% - 24px);transition:margin-top var(--md-sys-motion-effects-default-duration) var(--md-sys-motion-effects-default), font-size var(--md-sys-motion-effects-default-duration) var(--md-sys-motion-effects-default);white-space:nowrap}.input-wrapper{padding-block:var(--_padding-top) var(--_padding-bottom);flex:1;align-items:center;display:flex}:host([haslabel]:not([focused]):not([populated])) ::slotted(input:placeholder-shown),:host([haslabel]:not([focused]):not([populated])) ::slotted(textarea:placeholder-shown){opacity:0}::slotted(*){caret-color:var(--md-sys-color-primary);font:var(--md-sys-typography-body-large)}.supporting-text{color:var(--md-sys-color-on-surface-variant);font:var(--md-sys-typography-body-small);padding-inline:16px;padding-top:4px}:host([error]) ::slotted(*){caret-color:var(--md-sys-color-error)}:host([error]) .supporting-text{color:var(--md-sys-color-error)}@media (forced-colors:active){:host{--md-sys-color-primary:Highlight;--md-sys-color-error:VisitedText}}`;
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const filledFieldStyles = css`.container{--_indicator-height:1px;--_indicator-color:var(--md-sys-color-on-surface-variant);background-color:var(--md-sys-color-surface-container-highest);box-shadow:inset 0 calc(var(--_indicator-height) * -1) 0 0 var(--_indicator-color);transition:box-shadow var(--md-sys-motion-effects-fast-duration) var(--md-sys-motion-effects-fast);border-radius:4px 4px 0 0;padding:0 16px}:host([haslabel]){--_padding-top:24px;--_padding-bottom:8px}.label{color:var(--md-sys-color-on-surface-variant);margin-top:calc((var(--_padding-top) + var(--_padding-bottom)) / 2);position:absolute;top:0}:host([focused]) .label{color:var(--md-sys-color-primary)}:host([error]) .label{color:var(--md-sys-color-error)}:host([populated]) .label,:host([focused]) .label{margin-top:calc(var(--_padding-top) / 2 - .75em);font-size:.75em}:host([focused]) .container{--_indicator-height:3px;--_indicator-color:var(--md-sys-color-primary)}:host([error]) .container,:host([error][focused]) .container{--_indicator-color:var(--md-sys-color-error)}`;
2
+ export const filledFieldStyles = css`.container{--_indicator-height:1px;--_indicator-color:var(--md-sys-color-on-surface-variant);background-color:var(--md-sys-color-surface-container-highest);box-shadow:inset 0 calc(var(--_indicator-height) * -1) 0 0 var(--_indicator-color);transition:box-shadow var(--md-sys-motion-effects-fast-duration) var(--md-sys-motion-effects-fast);border-radius:4px 4px 0 0;padding:0 16px}:host([haslabel]){--_padding-top:24px;--_padding-bottom:8px}.label{color:var(--md-sys-color-on-surface-variant);margin-top:calc((var(--_padding-top) + var(--_padding-bottom)) / 2);position:absolute;top:0}:host([focused]) .label{color:var(--md-sys-color-primary)}:host([error]) .label{color:var(--md-sys-color-error)}:host([populated]) .label,:host([focused]) .label{margin-top:calc(var(--_padding-top) / 2 - .75em);font-size:.75em}:host([focused]) .container{--_indicator-height:3px;--_indicator-color:var(--md-sys-color-primary)}:host([error]) .container,:host([error][focused]) .container{--_indicator-color:var(--md-sys-color-error)}@media (forced-colors:active){:host{--md-sys-color-primary:Highlight;outline:1px solid canvastext}:host([focused]){outline-color:highlight}}`;
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const focusRingStyles = css`:host{animation-delay:0s, calc(var(--md-focus-ring-duration,.6s) * .25);animation-duration:calc(var(--md-focus-ring-duration,.6s) * .25), calc(var(--md-focus-ring-duration,.6s) * .75);box-sizing:border-box;color:var(--md-focus-ring-color,var(--md-sys-color-secondary));pointer-events:none;animation-timing-function:cubic-bezier(.2,0,0,1),cubic-bezier(.2,0,0,1);display:none;position:absolute}:host(:state(visible)){display:flex}:host(:not([inward])){box-shadow:0 0 0 var(--md-focus-ring-width,3px) currentColor;inset:calc(-1 * var(--md-focus-ring-outward-offset,2px));border-start-start-radius:calc(var(--md-focus-ring-shape-start-start,var(--md-focus-ring-shape,9999px)) + var(--md-focus-ring-outward-offset,2px));border-start-end-radius:calc(var(--md-focus-ring-shape-start-end,var(--md-focus-ring-shape,9999px)) + var(--md-focus-ring-outward-offset,2px));border-end-end-radius:calc(var(--md-focus-ring-shape-end-end,var(--md-focus-ring-shape,9999px)) + var(--md-focus-ring-outward-offset,2px));border-end-start-radius:calc(var(--md-focus-ring-shape-end-start,var(--md-focus-ring-shape,9999px)) + var(--md-focus-ring-outward-offset,2px));animation-name:outward-grow,outward-shrink}:host([inward]){box-shadow:inset 0 0 0 var(--md-focus-ring-width,3px) currentColor;inset:var(--md-focus-ring-inward-offset,0px);border-start-start-radius:calc(var(--md-focus-ring-shape-start-start,var(--md-focus-ring-shape,9999px)) - var(--md-focus-ring-inward-offset,0px));border-start-end-radius:calc(var(--md-focus-ring-shape-start-end,var(--md-focus-ring-shape,9999px)) - var(--md-focus-ring-inward-offset,0px));border-end-end-radius:calc(var(--md-focus-ring-shape-end-end,var(--md-focus-ring-shape,9999px)) - var(--md-focus-ring-inward-offset,0px));border-end-start-radius:calc(var(--md-focus-ring-shape-end-start,var(--md-focus-ring-shape,9999px)) - var(--md-focus-ring-inward-offset,0px));animation-name:inward-grow,inward-shrink}@keyframes outward-grow{0%{box-shadow:0 0}to{box-shadow:0 0 0 var(--md-focus-ring-active-width,8px) currentColor}}@keyframes outward-shrink{0%{box-shadow:0 0 0 var(--md-focus-ring-active-width,8px) currentColor}}@keyframes inward-grow{0%{box-shadow:inset 0 0}to{box-shadow:inset 0 0 0 var(--md-focus-ring-active-width,8px) currentColor}}@keyframes inward-shrink{0%{box-shadow:inset 0 0 0 var(--md-focus-ring-active-width,8px) currentColor}}@media (prefers-reduced-motion){:host{animation:none}}`;
2
+ export const focusRingStyles = css`:host{animation-delay:0s, calc(var(--md-focus-ring-duration,.6s) * .25);animation-duration:calc(var(--md-focus-ring-duration,.6s) * .25), calc(var(--md-focus-ring-duration,.6s) * .75);box-sizing:border-box;color:var(--md-focus-ring-color,var(--md-sys-color-secondary));pointer-events:none;animation-timing-function:cubic-bezier(.2,0,0,1),cubic-bezier(.2,0,0,1);display:none;position:absolute}:host(:state(visible)){display:flex}:host(:not([inward])){box-shadow:0 0 0 var(--md-focus-ring-width,3px) currentColor;inset:calc(-1 * var(--md-focus-ring-outward-offset,2px));border-start-start-radius:calc(var(--md-focus-ring-shape-start-start,var(--md-focus-ring-shape,9999px)) + var(--md-focus-ring-outward-offset,2px));border-start-end-radius:calc(var(--md-focus-ring-shape-start-end,var(--md-focus-ring-shape,9999px)) + var(--md-focus-ring-outward-offset,2px));border-end-end-radius:calc(var(--md-focus-ring-shape-end-end,var(--md-focus-ring-shape,9999px)) + var(--md-focus-ring-outward-offset,2px));border-end-start-radius:calc(var(--md-focus-ring-shape-end-start,var(--md-focus-ring-shape,9999px)) + var(--md-focus-ring-outward-offset,2px));animation-name:outward-grow,outward-shrink}:host([inward]){box-shadow:inset 0 0 0 var(--md-focus-ring-width,3px) currentColor;inset:var(--md-focus-ring-inward-offset,0px);border-start-start-radius:calc(var(--md-focus-ring-shape-start-start,var(--md-focus-ring-shape,9999px)) - var(--md-focus-ring-inward-offset,0px));border-start-end-radius:calc(var(--md-focus-ring-shape-start-end,var(--md-focus-ring-shape,9999px)) - var(--md-focus-ring-inward-offset,0px));border-end-end-radius:calc(var(--md-focus-ring-shape-end-end,var(--md-focus-ring-shape,9999px)) - var(--md-focus-ring-inward-offset,0px));border-end-start-radius:calc(var(--md-focus-ring-shape-end-start,var(--md-focus-ring-shape,9999px)) - var(--md-focus-ring-inward-offset,0px));animation-name:inward-grow,inward-shrink}@keyframes outward-grow{0%{box-shadow:0 0}to{box-shadow:0 0 0 var(--md-focus-ring-active-width,8px) currentColor}}@keyframes outward-shrink{0%{box-shadow:0 0 0 var(--md-focus-ring-active-width,8px) currentColor}}@keyframes inward-grow{0%{box-shadow:inset 0 0}to{box-shadow:inset 0 0 0 var(--md-focus-ring-active-width,8px) currentColor}}@keyframes inward-shrink{0%{box-shadow:inset 0 0 0 var(--md-focus-ring-active-width,8px) currentColor}}@media (prefers-reduced-motion){:host{animation:none}}@media (forced-colors:active){:host{color:highlight}}`;
@@ -1,4 +1,5 @@
1
1
  import { LitElement } from 'lit';
2
+ import { handleControlChange } from '../../base/mixins/attachable.js';
2
3
  declare const M3FocusRing_base: Constructor<import("../../base/mixins/attachable.js").AttachableInterface> & Constructor<import("../../base/mixins/internals-attached.js").InternalsAttachedInterface> & typeof LitElement;
3
4
  /**
4
5
  * @tag md-focus-ring
@@ -22,7 +23,7 @@ export declare class M3FocusRing extends M3FocusRing_base {
22
23
  constructor();
23
24
  visualFocus(): void;
24
25
  visualBlur(): void;
25
- handleControlChange(prev?: HTMLElement | null, next?: HTMLElement | null): void;
26
+ [handleControlChange](prev?: HTMLElement | null, next?: HTMLElement | null): void;
26
27
  }
27
28
  declare global {
28
29
  interface HTMLElementTagNameMap {
@@ -3,8 +3,8 @@ import { LitElement } from 'lit';
3
3
  import { property } from 'lit/decorators.js';
4
4
  import { customElement } from '../../core/decorators.js';
5
5
  import { focusVisible } from '../../core/focus-visible.js';
6
- import { Attachable } from '../../base/mixins/attachable.js';
7
- import { InternalsAttached, internals, } from '../../base/mixins/internals-attached.js';
6
+ import { Attachable, handleControlChange } from '../../base/mixins/attachable.js';
7
+ import { InternalsAttached, internals, replaceStates, } from '../../base/mixins/internals-attached.js';
8
8
  import { focusRingStyles } from './focus-ring-styles.css.js';
9
9
  /**
10
10
  * @tag md-focus-ring
@@ -27,10 +27,7 @@ let M3FocusRing = class M3FocusRing extends Attachable(InternalsAttached(LitElem
27
27
  super();
28
28
  this.inward = false;
29
29
  this.#handleFocusIn = () => {
30
- if (focusVisible)
31
- this[internals].states.add('visible');
32
- else
33
- this[internals].states.delete('visible');
30
+ this[replaceStates](['visible'], [focusVisible ? 'visible' : null]);
34
31
  };
35
32
  this.#handleFocusOut = () => {
36
33
  this[internals].states.delete('visible');
@@ -49,7 +46,7 @@ let M3FocusRing = class M3FocusRing extends Attachable(InternalsAttached(LitElem
49
46
  visualBlur() {
50
47
  this.#handleFocusOut();
51
48
  }
52
- handleControlChange(prev = null, next = null) {
49
+ [handleControlChange](prev = null, next = null) {
53
50
  const eventHandlers = {
54
51
  focusin: this.#handleFocusIn,
55
52
  focusout: this.#handleFocusOut,
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const listItemStyles = css`:host{--md-focus-ring-shape:12px;--md-focus-ring-inward-offset:-3px;background-color:var(--_background,transparent);-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;border-radius:4px;outline:0;display:flex}:host(:not([hidden]):first-of-type){border-radius:12px 12px 4px 4px}:host(:not([hidden]):last-of-type){border-radius:4px 4px 12px 12px}:host(:state(selected)){--md-item-supporting-text-color:var(--md-sys-color-on-tertiary-container);background-color:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container);border-radius:12px}:host(:disabled){cursor:default;opacity:.3;pointer-events:none}md-item,md-item div[slot=container]{border-radius:inherit}`;
2
+ export const listItemStyles = css`:host{--md-focus-ring-shape:12px;--md-focus-ring-inward-offset:-3px;background-color:var(--_background,transparent);-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;border-radius:4px;outline:0;display:flex}:host(:not([hidden]):first-of-type){border-radius:12px 12px 4px 4px}:host(:not([hidden]):last-of-type){border-radius:4px 4px 12px 12px}:host(:state(selected)){--md-item-supporting-text-color:var(--md-sys-color-on-tertiary-container);background-color:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container);border-radius:12px}:host(:disabled){cursor:default;opacity:.3;pointer-events:none}md-item,md-item div[slot=container]{border-radius:inherit}@media (forced-colors:active){:host{forced-color-adjust:none;color:canvastext}:host(:hover),:host(:state(selected)){color:highlighttext;background:highlight}}`;
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const menuStyles = css`:host{min-width:112px;display:contents}[part=menu]{background:var(--md-sys-color-surface-container);box-shadow:var(--md-sys-elevation-shadow-2);box-sizing:border-box;color:var(--md-sys-color-on-surface);height:inherit;max-height:var(--md-menu-max-height,inherit);max-width:inherit;min-width:inherit;opacity:0;-webkit-user-select:none;user-select:none;z-index:1000;border-radius:16px;outline:0;padding:4px;position:absolute;inset:auto;overflow-y:auto;transform:scaleY(.35)}:host([color=vibrant]){& [part=menu]{--md-divider-color:var(--md-sys-color-tertiary);--md-item-supporting-text-color:var(--md-sys-color-on-tertiary-container);background-color:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}& ::slotted([selected]){--md-item-supporting-text-color:var(--md-sys-color-on-tertiary);background-color:var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary)}}:host([alignstrategy=fixed]) [part=menu]{position:fixed}[part=items]{opacity:0;flex-direction:column;gap:2px;display:flex}:host(:state(closed)) [part=menu]{display:none}:host(:state(opening)){& [part=menu]{opacity:1;transition:opacity 67ms, transform var(--md-sys-motion-spatial-default-duration) var(--md-sys-motion-spatial-default);display:block;transform:scaleY(1)}& [part=items]{opacity:1;transition:opacity 67ms linear 67ms}}:host(:state(opened)){& [part=menu]{opacity:1;display:block;transform:scaleY(1)}& [part=items]{opacity:1}}:host(:state(closing)){& [part=menu]{opacity:0;transition:opacity var(--md-sys-motion-effects-fast-duration), transform var(--md-sys-motion-spatial-default-duration) var(--md-sys-motion-spatial-default);transform:scaleY(.35)}& [part=items]{opacity:0;transition:opacity 67ms}}::slotted(md-divider){margin-block:6px}`;
2
+ export const menuStyles = css`:host{min-width:112px;display:contents}[part=menu]{background:var(--md-sys-color-surface-container);box-shadow:var(--md-sys-elevation-shadow-2);box-sizing:border-box;color:var(--md-sys-color-on-surface);height:inherit;max-height:var(--md-menu-max-height,inherit);max-width:inherit;min-width:inherit;opacity:0;-webkit-user-select:none;user-select:none;z-index:1000;border-radius:16px;outline:0;padding:4px;position:absolute;inset:auto;overflow-y:auto;transform:scaleY(.35)}:host([color=vibrant]){& [part=menu]{--md-divider-color:var(--md-sys-color-tertiary);--md-item-supporting-text-color:var(--md-sys-color-on-tertiary-container);background-color:var(--md-sys-color-tertiary-container);color:var(--md-sys-color-on-tertiary-container)}& ::slotted([selected]){--md-item-supporting-text-color:var(--md-sys-color-on-tertiary);background-color:var(--md-sys-color-tertiary);color:var(--md-sys-color-on-tertiary)}}:host([alignstrategy=fixed]) [part=menu]{position:fixed}[part=items]{opacity:0;flex-direction:column;gap:2px;display:flex}:host(:state(closed)) [part=menu]{display:none}:host(:state(opening)){& [part=menu]{opacity:1;transition:opacity 67ms, transform var(--md-sys-motion-spatial-default-duration) var(--md-sys-motion-spatial-default);display:block;transform:scaleY(1)}& [part=items]{opacity:1;transition:opacity 67ms linear 67ms}}:host(:state(opened)){& [part=menu]{opacity:1;display:block;transform:scaleY(1)}& [part=items]{opacity:1}}:host(:state(closing)){& [part=menu]{opacity:0;transition:opacity var(--md-sys-motion-effects-fast-duration), transform var(--md-sys-motion-spatial-default-duration) var(--md-sys-motion-spatial-default);transform:scaleY(.35)}& [part=items]{opacity:0;transition:opacity 67ms}}::slotted(md-divider){margin-block:6px}@media (forced-colors:active){[part=menu]{border:1px solid canvastext}}`;
@@ -0,0 +1,2 @@
1
+ import { css } from 'lit';
2
+ export const navigationRailItemStyles = css`:host{color:var(--md-sys-color-on-surface-variant);cursor:pointer;outline:0;grid-template-rows:40px 1fr;justify-content:flex-start;width:max-content;display:grid;position:relative}.pill-root{grid-template:".start icon.label end."32px/20px 16px 24px 0 0fr 16px 20px;place-self:center;display:grid;position:relative}.pill{border-radius:9999px;grid-area:1/start-start/auto/end-end;position:relative}::slotted(*){fill:currentColor;place-self:center;block-size:1em;inline-size:1em;font-size:24px;position:absolute}::slotted([slot=active]){opacity:0}.label-inside{font:var(--md-sys-typography-label-large);display:none}.label-outside{font:var(--md-sys-typography-label-medium);pointer-events:none;text-align:center;word-break:break-word;grid-template-rows:1fr;width:96px;display:block;overflow:hidden}:host([active]){& .pill{color:var(--md-sys-color-on-secondary-container)}& md-ripple{background-color:var(--md-sys-color-secondary-container)}&::slotted([slot=active]){opacity:1}&::slotted(:not([slot=active])){opacity:0}& .label-outside{color:var(--md-sys-color-secondary)}}`;
@@ -0,0 +1,21 @@
1
+ import { type PropertyValues } from 'lit';
2
+ import { Button } from '../../base/button.js';
3
+ import '../focus-ring/focus-ring.js';
4
+ import '../ripple/ripple.js';
5
+ import { type M3FocusRing } from '../focus-ring/focus-ring.js';
6
+ import { type M3Ripple } from '../ripple/ripple.js';
7
+ export declare class M3NavigationRailItem extends Button {
8
+ label: string;
9
+ active: boolean;
10
+ $focusRing: M3FocusRing;
11
+ $ripple: M3Ripple;
12
+ static styles: any[];
13
+ render(): import("lit-html").TemplateResult<1>;
14
+ updated(changed: PropertyValues): void;
15
+ firstUpdated(): void;
16
+ }
17
+ declare global {
18
+ interface HTMLElementTagNameMap {
19
+ 'md-nav-rail-item': M3NavigationRailItem;
20
+ }
21
+ }
@@ -0,0 +1,44 @@
1
+ import { __decorate } from "tslib";
2
+ import { html } from 'lit';
3
+ import { customElement, property, query } from 'lit/decorators.js';
4
+ import { internals } from '../../base/mixins/internals-attached.js';
5
+ import { Button } from '../../base/button.js';
6
+ import '../focus-ring/focus-ring.js';
7
+ import '../ripple/ripple.js';
8
+ import { navigationRailItemStyles } from './navigation-rail-item-styles.css.js';
9
+ let M3NavigationRailItem = class M3NavigationRailItem extends Button {
10
+ constructor() {
11
+ super(...arguments);
12
+ this.active = false;
13
+ }
14
+ static { this.styles = [navigationRailItemStyles]; }
15
+ render() {
16
+ return html `<div class="pill-root"><div class="pill"><md-focus-ring></md-focus-ring><md-ripple></md-ripple></div><slot></slot><slot name="active"></slot><span class="label-inside">${this.label}</span></div><span class="label-outside">${this.label}</span>`;
17
+ }
18
+ updated(changed) {
19
+ if (changed.has('label'))
20
+ this[internals].ariaLabel = this.label;
21
+ if (changed.has('active'))
22
+ this[internals].ariaCurrent = this.active ? 'true' : null;
23
+ }
24
+ firstUpdated() {
25
+ this.$focusRing.attach(this);
26
+ this.$ripple.attach(this);
27
+ }
28
+ };
29
+ __decorate([
30
+ property({ reflect: true })
31
+ ], M3NavigationRailItem.prototype, "label", void 0);
32
+ __decorate([
33
+ property({ type: Boolean, reflect: true })
34
+ ], M3NavigationRailItem.prototype, "active", void 0);
35
+ __decorate([
36
+ query('md-focus-ring')
37
+ ], M3NavigationRailItem.prototype, "$focusRing", void 0);
38
+ __decorate([
39
+ query('md-ripple')
40
+ ], M3NavigationRailItem.prototype, "$ripple", void 0);
41
+ M3NavigationRailItem = __decorate([
42
+ customElement('md-nav-rail-item')
43
+ ], M3NavigationRailItem);
44
+ export { M3NavigationRailItem };
@@ -0,0 +1,2 @@
1
+ import { css } from 'lit';
2
+ export const navigationRailStyles = css`:host{background-color:var(--md-sys-color-surface-container);-webkit-user-select:none;user-select:none;z-index:10;flex-shrink:0;grid-template-rows:min-content auto;justify-content:space-between;gap:40px;width:96px;height:100%;padding-top:44px;padding-bottom:20px;display:grid;overflow:visible}.actions{z-index:10;place-self:center;display:grid;position:sticky;top:-44px}::slotted(md-fab){box-shadow:none}.items{grid-template-areas:"stack";display:grid}slot:not([name]){flex-direction:column;grid-area:stack;gap:8px;padding:0;list-style:none;display:flex;position:relative}`;
@@ -0,0 +1,12 @@
1
+ import { LitElement } from 'lit';
2
+ import { type M3NavigationRailItem } from './navigation-rail-item.js';
3
+ export declare class M3NavigationRail extends LitElement {
4
+ get $items(): Array<M3NavigationRailItem>;
5
+ static styles: any[];
6
+ render(): import("lit-html").TemplateResult<1>;
7
+ }
8
+ declare global {
9
+ interface HTMLElementTagNameMap {
10
+ 'md-nav-rail': M3NavigationRail;
11
+ }
12
+ }
@@ -0,0 +1,17 @@
1
+ import { __decorate } from "tslib";
2
+ import { LitElement, html } from 'lit';
3
+ import { customElement } from 'lit/decorators.js';
4
+ import { navigationRailStyles } from './navigation-rail-styles.css.js';
5
+ let M3NavigationRail = class M3NavigationRail extends LitElement {
6
+ get $items() {
7
+ return [...this.querySelectorAll('md-nav-rail-item')];
8
+ }
9
+ static { this.styles = [navigationRailStyles]; }
10
+ render() {
11
+ return html `<div class="actions"><slot name="menu"></slot><slot name="fab"></slot></div><div class="items"><slot></slot></div>`;
12
+ }
13
+ };
14
+ M3NavigationRail = __decorate([
15
+ customElement('md-nav-rail')
16
+ ], M3NavigationRail);
17
+ export { M3NavigationRail };