@vollowx/seele 0.13.6 → 0.13.8

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 (65) hide show
  1. package/README.md +32 -13
  2. package/package.json +1 -1
  3. package/src/all.d.ts +2 -0
  4. package/src/all.js +2 -0
  5. package/src/base/autocomplete.d.ts +1 -0
  6. package/src/base/autocomplete.js +7 -13
  7. package/src/base/button.d.ts +4 -2
  8. package/src/base/button.js +15 -10
  9. package/src/base/checkbox.js +3 -8
  10. package/src/base/controllers/popover-controller.js +1 -1
  11. package/src/base/experimental/popup-styles.css.js +2 -0
  12. package/src/base/experimental/popup.d.ts +38 -0
  13. package/src/base/experimental/popup.js +276 -0
  14. package/src/base/menu.d.ts +2 -0
  15. package/src/base/menu.js +2 -0
  16. package/src/base/mixins/button-toggle-mixin.d.ts +7 -0
  17. package/src/base/mixins/button-toggle-mixin.js +102 -0
  18. package/src/base/mixins/internals-attached.d.ts +2 -0
  19. package/src/base/mixins/internals-attached.js +5 -0
  20. package/src/base/toggle-button.d.ts +6 -45
  21. package/src/base/toggle-button.js +6 -135
  22. package/src/core/ensure-ready.d.ts +1 -0
  23. package/src/core/ensure-ready.js +15 -0
  24. package/src/m3/autocomplete/autocomplete.d.ts +1 -0
  25. package/src/m3/autocomplete/autocomplete.js +1 -0
  26. package/src/m3/badge/badge.d.ts +1 -0
  27. package/src/m3/badge/badge.js +4 -0
  28. package/src/m3/button/common-button-toggle.d.ts +4 -10
  29. package/src/m3/button/common-button-toggle.js +6 -40
  30. package/src/m3/button/icon-button-toggle.d.ts +4 -6
  31. package/src/m3/button/icon-button-toggle.js +6 -33
  32. package/src/m3/button/shared-button-styles.css.js +1 -1
  33. package/src/m3/button/shared-button-toggle-styles.css.js +1 -1
  34. package/src/m3/checkbox/checkbox-styles.css.js +1 -1
  35. package/src/m3/checkbox/checkbox.d.ts +1 -1
  36. package/src/m3/dialog/dialog-styles.css.js +1 -1
  37. package/src/m3/experimental/popup-styles.css.js +2 -0
  38. package/src/m3/experimental/popup.d.ts +9 -0
  39. package/src/m3/experimental/popup.js +11 -0
  40. package/src/m3/fab/fab-styles.css.js +1 -1
  41. package/src/m3/field/field-styles.css.js +1 -1
  42. package/src/m3/field/filled-field-styles.css.js +1 -1
  43. package/src/m3/focus-ring/focus-ring-styles.css.js +1 -1
  44. package/src/m3/list/list-item-styles.css.js +1 -1
  45. package/src/m3/list/list-item.d.ts +4 -2
  46. package/src/m3/list/list-item.js +2 -0
  47. package/src/m3/menu/menu-styles.css.js +1 -1
  48. package/src/m3/radio/radio-styles.css.js +1 -1
  49. package/src/m3/ripple/ripple-styles.css.js +1 -1
  50. package/src/m3/ripple/ripple.d.ts +1 -12
  51. package/src/m3/ripple/ripple.js +8 -9
  52. package/src/m3/select/select.d.ts +1 -0
  53. package/src/m3/select/select.js +1 -0
  54. package/src/m3/switch/switch-styles.css.js +1 -1
  55. package/src/m3/switch/switch.d.ts +3 -2
  56. package/src/m3/switch/switch.js +11 -10
  57. package/src/m3/tab/tabs-styles.css.js +1 -1
  58. package/src/m3/toolbar/toolbar-styles.css.js +1 -1
  59. package/src/win98/button/button-styles.css.js +1 -1
  60. package/src/m3/dialog/dialog-spring.d.ts +0 -45
  61. package/src/m3/dialog/dialog-spring.js +0 -176
  62. package/src/win98/button/radio.d.ts +0 -3
  63. package/src/win98/button/radio.js +0 -9
  64. package/src/win98/radio/radio.d.ts +0 -3
  65. package/src/win98/radio/radio.js +0 -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,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,7 +1,9 @@
1
1
  import { ListItem } from '../../base/list-item.js';
2
2
  import '../item/item.js';
3
- import { M3Ripple } from '../ripple/ripple.js';
4
- import { M3FocusRing } from '../focus-ring/focus-ring.js';
3
+ import '../ripple/ripple.js';
4
+ import '../focus-ring/focus-ring.js';
5
+ import type { M3Ripple } from '../ripple/ripple.js';
6
+ import type { M3FocusRing } from '../focus-ring/focus-ring.js';
5
7
  /**
6
8
  * @tag md-list-item
7
9
  *
@@ -3,6 +3,8 @@ import { html } from 'lit';
3
3
  import { customElement, query } from 'lit/decorators.js';
4
4
  import { ListItem } from '../../base/list-item.js';
5
5
  import '../item/item.js';
6
+ import '../ripple/ripple.js';
7
+ import '../focus-ring/focus-ring.js';
6
8
  import { listItemStyles } from './list-item-styles.css.js';
7
9
  /**
8
10
  * @tag md-list-item
@@ -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}}`;
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const radioStyles = css`:host{--_d:var(--md-sys-motion-effects-default-duration);--_default:var(--_d) var(--md-sys-motion-effects-default);--_slow:var(--md-sys-motion-effects-slow-duration) var(--md-sys-motion-effects-slow);cursor:pointer;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;border-radius:20px;outline:0;justify-content:center;align-items:center;width:40px;height:40px;display:inline-flex;position:relative}:host:before,.middle,:host:after{content:"";box-sizing:border-box;border-radius:50%;position:absolute;animation-fill-mode:forwards!important}:host:before{z-index:1;background-color:var(--md-sys-color-on-surface-variant);width:20px;height:20px;transition:background var(--_default)}.middle{z-index:2;background-color:var(--md-sys-color-surface);width:16px;height:16px}:host:after{z-index:3;background-color:var(--md-sys-color-primary);width:10px;height:10px;transform:scale(0)}:host(:state(unchecking)) .middle{animation:uncheck-mid-2 var(--_slow) var(--_d)}:host(:state(unchecking)):after{animation:uncheck-inner-1 var(--_default), uncheck-inner-2 var(--_slow) var(--_d)}:host([checked]):before{background-color:var(--md-sys-color-primary)}:host([checked]):after{transform:scale(1)}:host(:state(checking)) .middle{animation:check-mid-1 var(--_default), check-mid-2 var(--_slow) var(--_d)}:host(:state(checking)):after{animation:check-inner-1 var(--_default), check-inner-2 var(--_slow) var(--_d)}@keyframes uncheck-mid-2{0%,to{z-index:4}0%{transform:scale(0)}to{transform:scale(1)}}@keyframes uncheck-inner-1{0%{background-color:var(--md-sys-color-primary);transform:scale(1)}to{background-color:var(--md-sys-color-on-surface-variant);transform:scale(1.6)}}@keyframes uncheck-inner-2{0%{transform:scale(1.6)}to{transform:scale(1.6)}}@keyframes check-mid-1{0%{transform:scale(1)}to{transform:scale(0)}}@keyframes check-mid-2{0%{transform:scale(.625)}to{transform:scale(1)}}@keyframes check-inner-1{0%,to{transform:scale(0)}}@keyframes check-inner-2{0%,to{transform:scale(1)}}:host([disabled]){pointer-events:none}:host([disabled]):before,:host([disabled]):after{background:color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent)}`;
2
+ export const radioStyles = css`:host{--_d:var(--md-sys-motion-effects-default-duration);--_default:var(--_d) var(--md-sys-motion-effects-default);--_slow:var(--md-sys-motion-effects-slow-duration) var(--md-sys-motion-effects-slow);cursor:pointer;-webkit-tap-highlight-color:transparent;-webkit-user-select:none;user-select:none;border-radius:20px;outline:0;justify-content:center;align-items:center;width:40px;height:40px;display:inline-flex;position:relative}:host:before,.middle,:host:after{content:"";box-sizing:border-box;border-radius:50%;position:absolute;animation-fill-mode:forwards!important}:host:before{z-index:1;background-color:var(--md-sys-color-on-surface-variant);width:20px;height:20px;transition:background var(--_default)}.middle{z-index:2;background-color:var(--md-sys-color-surface);width:16px;height:16px}:host:after{z-index:3;background-color:var(--md-sys-color-primary);width:10px;height:10px;transform:scale(0)}:host(:state(unchecking)) .middle{animation:uncheck-mid-2 var(--_slow) var(--_d)}:host(:state(unchecking)):after{animation:uncheck-inner-1 var(--_default), uncheck-inner-2 var(--_slow) var(--_d)}:host([checked]):before{background-color:var(--md-sys-color-primary)}:host([checked]):after{transform:scale(1)}:host(:state(checking)) .middle{animation:check-mid-1 var(--_default), check-mid-2 var(--_slow) var(--_d)}:host(:state(checking)):after{animation:check-inner-1 var(--_default), check-inner-2 var(--_slow) var(--_d)}@keyframes uncheck-mid-2{0%,to{z-index:4}0%{transform:scale(0)}to{transform:scale(1)}}@keyframes uncheck-inner-1{0%{background-color:var(--md-sys-color-primary);transform:scale(1)}to{background-color:var(--md-sys-color-on-surface-variant);transform:scale(1.6)}}@keyframes uncheck-inner-2{0%{transform:scale(1.6)}to{transform:scale(1.6)}}@keyframes check-mid-1{0%{transform:scale(1)}to{transform:scale(0)}}@keyframes check-mid-2{0%{transform:scale(.625)}to{transform:scale(1)}}@keyframes check-inner-1{0%,to{transform:scale(0)}}@keyframes check-inner-2{0%,to{transform:scale(1)}}:host([disabled]){pointer-events:none}:host([disabled]):before,:host([disabled]):after{background:color-mix(in srgb, var(--md-sys-color-on-surface) 38%, transparent)}@media (forced-colors:active){:host{--md-sys-color-primary:SelectedItem;--md-sys-color-on-surface-variant:CanvasText}:host(:disabled):before,:host(:disabled):after{background:graytext}}`;
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const rippleStyles = css`:host{border-radius:inherit;pointer-events:none;display:block;position:absolute;inset:0;overflow:hidden}[part~=ripple]{background-image:radial-gradient(closest-side, var(--md-ripple-color,currentColor) max(calc(100% - 70px), 65%), transparent 100%);position:absolute;top:0;left:0}:host:before{background-color:var(--md-ripple-color,currentColor);border-radius:inherit;content:"";opacity:0;transition:opacity 67ms linear;display:block;position:absolute;inset:0}:host(:state(hover)):before{opacity:.08}`;
2
+ export const rippleStyles = css`:host{--_color:var(--md-ripple-color,currentColor);border-radius:inherit;pointer-events:none;display:block;position:absolute;inset:0;overflow:hidden}[part~=ripple]{background-image:radial-gradient(closest-side, var(--_color) max(calc(100% - 70px), 65%), transparent 100%);position:absolute;top:0;left:0}:host:before{background-color:var(--_color);border-radius:inherit;content:"";opacity:0;transition:opacity 67ms linear;display:block;position:absolute;inset:0}:host(:state(hover)):before{opacity:.08}@media (forced-colors:active){:host{--_color:var(--md-ripple-color,Highlight)}}`;
@@ -20,20 +20,9 @@ export declare class M3Ripple extends M3Ripple_base {
20
20
  handlePointerDown: (e: PointerEvent) => void;
21
21
  handlePointerUp: () => void;
22
22
  handleControlChange(prev?: HTMLElement | null, next?: HTMLElement | HTMLInputElement | null): void;
23
- calculateRipple(e?: MouseEvent | null): {
24
- startCenter: {
25
- x: number;
26
- y: number;
27
- };
28
- endCenter: {
29
- x: number;
30
- y: number;
31
- };
32
- radius: number;
33
- };
34
23
  addRipple(e?: MouseEvent | null): void;
35
24
  removeRipple(ripple: HTMLSpanElement): void;
36
- removeRippleAll(): void;
25
+ keepLastRipple(): void;
37
26
  }
38
27
  declare global {
39
28
  interface HTMLElementTagNameMap {
@@ -32,7 +32,7 @@ let M3Ripple = class M3Ripple extends Attachable(InternalsAttached(LitElement))
32
32
  if ((e.key === 'Enter' && this.enterBehavior === 'always') ||
33
33
  (e.key === ' ' && this.spaceBehavior === 'always')) {
34
34
  this.addRipple();
35
- this.removeRippleAll();
35
+ this.keepLastRipple();
36
36
  }
37
37
  else if (e.key === ' ' && this.spaceBehavior === 'once') {
38
38
  if (!this.#spaceKeyDown)
@@ -43,7 +43,7 @@ let M3Ripple = class M3Ripple extends Attachable(InternalsAttached(LitElement))
43
43
  this.handleKeyUp = (e) => {
44
44
  if (e.key === ' ' && this.spaceBehavior === 'once') {
45
45
  this.#spaceKeyDown = false;
46
- this.removeRippleAll();
46
+ this.keepLastRipple();
47
47
  }
48
48
  };
49
49
  this.handlePointerEnter = (e) => {
@@ -56,7 +56,7 @@ let M3Ripple = class M3Ripple extends Attachable(InternalsAttached(LitElement))
56
56
  this.handlePointerLeave = () => {
57
57
  this[internals].states.delete('hover');
58
58
  if (this.#pointerDown && this.clickBehavior === 'always')
59
- this.removeRippleAll();
59
+ this.keepLastRipple();
60
60
  };
61
61
  this.handlePointerDown = (e) => {
62
62
  if (e.pointerType === 'mouse')
@@ -65,7 +65,7 @@ let M3Ripple = class M3Ripple extends Attachable(InternalsAttached(LitElement))
65
65
  document.addEventListener('touchcancel', this.handlePointerUp);
66
66
  document.addEventListener('touchend', this.handlePointerUp);
67
67
  document.addEventListener('touchmove', this.handlePointerUp);
68
- if (e.button === 2)
68
+ if (e.button !== 0)
69
69
  return;
70
70
  if (this.clickBehavior === 'always')
71
71
  this.addRipple(e);
@@ -76,7 +76,7 @@ let M3Ripple = class M3Ripple extends Attachable(InternalsAttached(LitElement))
76
76
  document.removeEventListener('touchcancel', this.handlePointerUp);
77
77
  document.removeEventListener('touchend', this.handlePointerUp);
78
78
  document.removeEventListener('touchmove', this.handlePointerUp);
79
- this.removeRippleAll();
79
+ this.keepLastRipple();
80
80
  };
81
81
  this[internals].ariaHidden = 'true';
82
82
  }
@@ -111,7 +111,7 @@ let M3Ripple = class M3Ripple extends Attachable(InternalsAttached(LitElement))
111
111
  }
112
112
  });
113
113
  }
114
- calculateRipple(e = null) {
114
+ #calculateRipple(e = null) {
115
115
  const containerRect = this.getBoundingClientRect();
116
116
  const containerMiddle = {
117
117
  x: containerRect.width / 2,
@@ -134,7 +134,7 @@ let M3Ripple = class M3Ripple extends Attachable(InternalsAttached(LitElement))
134
134
  return { startCenter, endCenter, radius };
135
135
  }
136
136
  addRipple(e = null) {
137
- const { startCenter, endCenter, radius } = this.calculateRipple(e);
137
+ const { startCenter, endCenter, radius } = this.#calculateRipple(e);
138
138
  const diameter = radius * 2 + 'px';
139
139
  const translateStart = `${startCenter.x - radius}px ${startCenter.y - radius}px`;
140
140
  const translateEnd = `${endCenter.x - radius}px ${endCenter.y - radius}px`;
@@ -156,7 +156,6 @@ let M3Ripple = class M3Ripple extends Attachable(InternalsAttached(LitElement))
156
156
  scale: [0.2, 1.35],
157
157
  }, {
158
158
  duration: PRESS_GROW_MS,
159
- // TODO: Control by global variables
160
159
  easing: 'cubic-bezier(0.2, 0, 0, 1)',
161
160
  fill: 'forwards',
162
161
  });
@@ -174,7 +173,7 @@ let M3Ripple = class M3Ripple extends Attachable(InternalsAttached(LitElement))
174
173
  animation.onfinish = animation.oncancel = () => ripple.remove();
175
174
  }, Math.max(MINIMUM_PRESS_MS - (Date.now() - this.#lastTime), 0));
176
175
  }
177
- removeRippleAll() {
176
+ keepLastRipple() {
178
177
  for (const ripple of this.$ripples.splice(0))
179
178
  this.removeRipple(ripple);
180
179
  }
@@ -1,3 +1,4 @@
1
+ import '../menu/menu.js';
1
2
  import { Select } from '../../base/select.js';
2
3
  import { M3Field } from '../field/field.js';
3
4
  /**
@@ -1,6 +1,7 @@
1
1
  import { __decorate } from "tslib";
2
2
  import { html } from 'lit';
3
3
  import { property, query, state } from 'lit/decorators.js';
4
+ import '../menu/menu.js';
4
5
  import { Select } from '../../base/select.js';
5
6
  /**
6
7
  * @fires {Event} change - Fired when the selected value has changed.
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const switchStyles = css`:host{--_outline-color:var(--md-sys-color-outline);--_track-color:var(--md-sys-color-surface-container-highest);--_thumb-color:var(--md-sys-color-outline);--_icon-color:var(--md-sys-color-surface-container-highest);--_ripple-color:var(--md-sys-color-on-surface);background-color:color-mix(in srgb, var(--_track-color) var(--_track-opacity,100%), transparent);border-color:color-mix(in srgb, var(--_outline-color) var(--_outline-opacity,100%), transparent);box-sizing:border-box;cursor:pointer;-webkit-tap-highlight-color:transparent;touch-action:none;height:32px;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;border-style:solid;border-width:2px;border-radius:9999px;outline:0;place-content:center;place-items:center;width:52px;display:inline-grid;position:relative}:host(:state(checked)){--_outline-color:var(--md-sys-color-primary);--_track-color:var(--md-sys-color-primary);--_thumb-color:var(--md-sys-color-on-primary);--_icon-color:var(--md-sys-color-on-primary-container);--_ripple-color:var(--md-sys-color-primary)}:host(:disabled){--_outline-color:var(--md-sys-color-on-surface);--_outline-opacity:12%;--_track-color:var(--md-sys-color-surface-variant);--_track-opacity:12%;--_thumb-color:var(--md-sys-color-on-surface);--_thumb-opacity:38%;--_icon-color:var(--md-sys-color-surface-container-highest);cursor:default;pointer-events:none}:host(:disabled:state(checked)){--_outline-color:var(--md-sys-color-surface);--_track-color:var(--md-sys-color-on-surface);--_thumb-color:var(--md-sys-color-surface);--_thumb-opacity:100%;--_icon-color:var(--md-sys-color-on-surface)}:host([icons]:not(:state(checked)):not([checkedicononly])) [part~=icon-off],:host([icons]:state(checked)) [part~=icon-on]{--_icon-opacity:100%}:host([icons]:state(checked):disabled) [part~=icon-on]{--_icon-opacity:38%}@media (hover:hover) and (pointer:fine){:host(:hover){--_thumb-color:var(--md-sys-color-on-surface-variant)}:host(:state(checked):hover){--_thumb-color:var(--md-sys-color-primary-container)}}@media (forced-colors:active){:host{forced-color-adjust:none}}[part~=thumb]{--_thumb-diameter:16px;--_thumb-diff-default:20px;background-color:color-mix(in srgb, var(--_thumb-color) var(--_thumb-opacity,100%), transparent);height:var(--_thumb-diameter);transition:background-color var(--md-sys-motion-effects-fast-duration) var(--md-sys-motion-effects-fast), width var(--md-sys-motion-spatial-fast-duration) var(--md-sys-motion-spatial-fast), height var(--md-sys-motion-spatial-fast-duration) var(--md-sys-motion-spatial-fast), margin var(--md-sys-motion-spatial-fast-duration) var(--md-sys-motion-spatial-fast);width:var(--_thumb-diameter);z-index:1;border-radius:50%;place-content:center;place-items:center;margin-inline-start:calc(var(--_thumb-diff-pointer,0px) - var(--_thumb-diff-default));display:grid;position:absolute}:host(:state(checked)) [part~=thumb]{--_thumb-diameter:24px;--_thumb-diff-default:-20px;background-color:var(--_thumb-color)}:host([icons]:not([checkedicononly])) [part~=thumb]{--_thumb-diameter:24px}:host(:active) [part~=thumb]{--_thumb-color:var(--md-sys-color-on-surface-variant);--_thumb-diameter:28px!important}:host(:state(checked):active) [part~=thumb]{--_thumb-color:var(--md-sys-color-primary-container)}[part~=icons]{fill:color-mix(in srgb, var(--_icon-color) var(--_icon-opacity,0%), transparent);width:16px;height:16px;transition:fill 67ms linear;position:absolute}md-focus-ring{inset:-4px}md-ripple{color:var(--_ripple-color);height:40px;inset:unset;width:40px}`;
2
+ export const switchStyles = css`:host{--_outline-color:var(--md-sys-color-outline);--_track-color:var(--md-sys-color-surface-container-highest);--_thumb-color:var(--md-sys-color-outline);--_icon-color:var(--md-sys-color-surface-container-highest);--_ripple-color:var(--md-sys-color-on-surface);background-color:color-mix(in srgb, var(--_track-color) var(--_track-opacity,100%), transparent);border-color:color-mix(in srgb, var(--_outline-color) var(--_outline-opacity,100%), transparent);box-sizing:border-box;cursor:pointer;-webkit-tap-highlight-color:transparent;touch-action:none;height:32px;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;border-style:solid;border-width:2px;border-radius:9999px;outline:0;place-content:center;place-items:center;width:52px;display:inline-grid;position:relative}:host(:state(checked)){--_outline-color:var(--md-sys-color-primary);--_track-color:var(--md-sys-color-primary);--_thumb-color:var(--md-sys-color-on-primary);--_icon-color:var(--md-sys-color-on-primary-container);--_ripple-color:var(--md-sys-color-primary)}:host(:disabled){--_outline-color:var(--md-sys-color-on-surface);--_outline-opacity:12%;--_track-color:var(--md-sys-color-surface-variant);--_track-opacity:12%;--_thumb-color:var(--md-sys-color-on-surface);--_thumb-opacity:38%;--_icon-color:var(--md-sys-color-surface-container-highest);cursor:default;pointer-events:none}:host(:disabled:state(checked)){--_outline-color:var(--md-sys-color-surface);--_track-color:var(--md-sys-color-on-surface);--_thumb-color:var(--md-sys-color-surface);--_thumb-opacity:100%;--_icon-color:var(--md-sys-color-on-surface)}:host([icons]:not(:state(checked)):not([checkedicononly])) [part~=icon-off],:host([icons]:state(checked)) [part~=icon-on]{--_icon-opacity:100%}:host([icons]:state(checked):disabled) [part~=icon-on]{--_icon-opacity:38%}@media (hover:hover) and (pointer:fine){:host(:hover){--_thumb-color:var(--md-sys-color-on-surface-variant)}:host(:state(checked):hover){--_thumb-color:var(--md-sys-color-primary-container)}}@media (forced-colors:active){:host{forced-color-adjust:none}}[part~=thumb]{--_thumb-diameter:16px;--_thumb-diff-default:20px;background-color:color-mix(in srgb, var(--_thumb-color) var(--_thumb-opacity,100%), transparent);height:var(--_thumb-diameter);transition:background-color var(--md-sys-motion-effects-fast-duration) var(--md-sys-motion-effects-fast), width var(--md-sys-motion-spatial-fast-duration) var(--md-sys-motion-spatial-fast), height var(--md-sys-motion-spatial-fast-duration) var(--md-sys-motion-spatial-fast), margin var(--md-sys-motion-spatial-fast-duration) var(--md-sys-motion-spatial-fast);width:var(--_thumb-diameter);z-index:1;border-radius:50%;place-content:center;place-items:center;margin-inline-start:calc(var(--_thumb-diff-pointer,0px) - var(--_thumb-diff-default));display:grid;position:absolute}:host(:state(checked)) [part~=thumb]{--_thumb-diameter:24px;--_thumb-diff-default:-20px;background-color:var(--_thumb-color)}:host([icons]:not([checkedicononly])) [part~=thumb]{--_thumb-diameter:24px}:host(:active) [part~=thumb]{--_thumb-color:var(--md-sys-color-on-surface-variant);--_thumb-diameter:28px!important}:host(:state(checked):active) [part~=thumb]{--_thumb-color:var(--md-sys-color-primary-container)}[part~=icons]{fill:color-mix(in srgb, var(--_icon-color) var(--_icon-opacity,0%), transparent);width:16px;height:16px;transition:fill 67ms linear;position:absolute}md-focus-ring{inset:-4px}md-ripple{color:var(--_ripple-color);height:40px;inset:unset;width:40px}@media (forced-colors:active){:host{--md-sys-color-primary:SelectedItem;--md-sys-color-primary-container:SelectedItemText;--md-sys-color-on-primary:SelectedItemText}}`;
@@ -1,5 +1,6 @@
1
1
  import { ToggleButton } from '../../base/toggle-button.js';
2
2
  import '../focus-ring/focus-ring.js';
3
+ import '../ripple/ripple.js';
3
4
  import { M3Ripple } from '../ripple/ripple.js';
4
5
  /**
5
6
  * @tag md-switch
@@ -9,6 +10,8 @@ import { M3Ripple } from '../ripple/ripple.js';
9
10
  */
10
11
  export declare class M3Switch extends ToggleButton {
11
12
  #private;
13
+ icons: boolean;
14
+ checkedIconOnly: boolean;
12
15
  $ripple: M3Ripple;
13
16
  $thumb: HTMLSpanElement;
14
17
  static styles: any[];
@@ -17,8 +20,6 @@ export declare class M3Switch extends ToggleButton {
17
20
  renderOffIcon(): import("lit-html").TemplateResult<1>;
18
21
  connectedCallback(): void;
19
22
  disconnectedCallback(): void;
20
- icons: boolean;
21
- checkedIconOnly: boolean;
22
23
  }
23
24
  declare global {
24
25
  interface HTMLElementTagNameMap {
@@ -3,6 +3,7 @@ import { html } from 'lit';
3
3
  import { customElement, property, query } from 'lit/decorators.js';
4
4
  import { ToggleButton } from '../../base/toggle-button.js';
5
5
  import '../focus-ring/focus-ring.js';
6
+ import '../ripple/ripple.js';
6
7
  import { switchStyles } from './switch-styles.css.js';
7
8
  import { targetStyles } from '../target-styles.css.js';
8
9
  function isRTL() {
@@ -53,12 +54,12 @@ let M3Switch = class M3Switch extends ToggleButton {
53
54
  this.$thumb.style.setProperty('--_thumb-diameter', '');
54
55
  this.$thumb.style.transitionDuration = '';
55
56
  if (this.checked != shouldBeChecked)
56
- this.toggleChecked();
57
+ this._toggle();
57
58
  };
58
59
  }
59
60
  static { this.styles = [targetStyles, switchStyles]; }
60
61
  render() {
61
- return html `<md-focus-ring></md-focus-ring><div part="thumb"><md-ripple spacebehavior="always"></md-ripple><span part="target"></span> ${this.renderOffIcon()}${this.renderOnIcon()}</div>`;
62
+ return html `<md-focus-ring></md-focus-ring><div part="thumb"><md-ripple></md-ripple><span part="target"></span> ${this.renderOffIcon()}${this.renderOnIcon()}</div>`;
62
63
  }
63
64
  renderOnIcon() {
64
65
  return html `<svg part="icons icon-on" viewBox="0 0 24 24" aria-hidden="true"><path d="M9.55 18.2 3.65 12.3 5.275 10.675 9.55 14.95 18.725 5.775 20.35 7.4Z"/></svg>`;
@@ -69,33 +70,33 @@ let M3Switch = class M3Switch extends ToggleButton {
69
70
  connectedCallback() {
70
71
  super.connectedCallback();
71
72
  this.updateComplete.then(() => {
72
- this.$ripple.attach(this);
73
+ this.$ripple.attach(this, true);
73
74
  });
74
75
  this.addEventListener('pointerdown', this.#handlePointerDown);
75
76
  this.addEventListener('pointerup', this.#handlePointerUp);
76
77
  }
77
78
  disconnectedCallback() {
78
- super.disconnectedCallback();
79
79
  this.removeEventListener('pointerdown', this.#handlePointerDown);
80
80
  this.removeEventListener('pointerup', this.#handlePointerUp);
81
+ super.disconnectedCallback();
81
82
  }
82
83
  #pointerDownX;
83
84
  #handlePointerDown;
84
85
  #handlePointerMove;
85
86
  #handlePointerUp;
86
87
  };
87
- __decorate([
88
- query('md-ripple')
89
- ], M3Switch.prototype, "$ripple", void 0);
90
- __decorate([
91
- query('[part~="thumb"]')
92
- ], M3Switch.prototype, "$thumb", void 0);
93
88
  __decorate([
94
89
  property({ type: Boolean, reflect: true })
95
90
  ], M3Switch.prototype, "icons", void 0);
96
91
  __decorate([
97
92
  property({ type: Boolean, reflect: true })
98
93
  ], M3Switch.prototype, "checkedIconOnly", void 0);
94
+ __decorate([
95
+ query('md-ripple')
96
+ ], M3Switch.prototype, "$ripple", void 0);
97
+ __decorate([
98
+ query('[part~="thumb"]')
99
+ ], M3Switch.prototype, "$thumb", void 0);
99
100
  M3Switch = __decorate([
100
101
  customElement('md-switch')
101
102
  ], M3Switch);
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const tabsStyles = css`:host{--_tab-selected-color:var(--md-sys-color-primary);--_tab-indicator-height:3px;border-bottom:1px solid var(--md-sys-color-outline-variant);box-sizing:border-box;scroll-behavior:smooth;scrollbar-width:none;display:block;position:relative;overflow:auto hidden}[part=tablist]{display:flex}[part=indicator]{height:var(--_tab-indicator-height);background-color:var(--md-sys-color-primary);transition:left var(--md-sys-motion-spatial-default-duration) var(--md-sys-motion-spatial-default), width var(--md-sys-motion-spatial-default-duration) var(--md-sys-motion-spatial-default);will-change:left, width;border-radius:3px 3px 0 0;position:absolute;bottom:0}::slotted(*){flex:1}:host([secondary]){--_tab-selected-color:var(--md-sys-color-on-surface);--_tab-indicator-height:2px}:host([secondary]) [part=indicator]{border-radius:0}:host([iconsabove]){--_tab-flex-dir:column;--_tab-height:64px;--_tab-gap:2px}`;
2
+ export const tabsStyles = css`:host{--_tab-selected-color:var(--md-sys-color-primary);--_tab-indicator-height:3px;border-bottom:1px solid var(--md-sys-color-outline-variant);box-sizing:border-box;scroll-behavior:smooth;scrollbar-width:none;display:block;position:relative;overflow:auto hidden}[part=tablist]{display:flex}[part=indicator]{height:var(--_tab-indicator-height);background-color:var(--md-sys-color-primary);transition:left var(--md-sys-motion-spatial-default-duration) var(--md-sys-motion-spatial-default), width var(--md-sys-motion-spatial-default-duration) var(--md-sys-motion-spatial-default);will-change:left, width;border-radius:3px 3px 0 0;position:absolute;bottom:0}::slotted(*){flex:1}:host([secondary]){--_tab-selected-color:var(--md-sys-color-on-surface);--_tab-indicator-height:2px}:host([secondary]) [part=indicator]{border-radius:0}:host([iconsabove]){--_tab-flex-dir:column;--_tab-height:64px;--_tab-gap:2px}@media (forced-colors:active){[part=indicator]{background-color:highlight}}`;
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const toolbarStyles = css`:host{--_padding:16px;--_gap:32px;--_container-color:var(--md-sys-color-surface-container);--_on-color:var(--md-sys-color-on-surface);background-color:color-mix(in srgb, var(--_container-color) var(--_container-opacity,100%), transparent);box-sizing:border-box;color:color-mix(in srgb, var(--_on-color) var(--_on-opacity,100%), transparent);align-items:center;width:100%;height:64px;display:flex}[part=container]{box-sizing:border-box;align-items:center;gap:var(--_gap);height:64px;padding:0 var(--_padding);flex:auto;justify-content:space-between;width:100%;display:flex}[part=fab-slot]{justify-content:flex-end;align-items:center;display:flex}:host(:not([orientation=vertical])) ::slotted([slot=fab]){margin-inline-start:8px}:host([orientation=vertical]) ::slotted([slot=fab]){margin-block-start:8px}:host([type=floating]){--_padding:12px;--_gap:4px;--_container-color:var(--md-sys-color-surface-container-high);box-shadow:none;background:0 0;width:fit-content;max-width:calc(100% - 32px);& [part=container]{background-color:color-mix(in srgb, var(--_container-color) var(--_container-opacity,100%), transparent);box-shadow:var(--md-toolbar-shadow,var(--md-sys-elevation-shadow-3));border-radius:32px;width:fit-content}& ::slotted(md-button),& ::slotted(md-button-toggle),& ::slotted(md-icon-button),& ::slotted(md-icon-button-toggle){--md-focus-ring-shape:calc(var(--_h) / 2);border-radius:calc(var(--_h) / 2)}}:host([type=floating][orientation=vertical]){flex-direction:column;align-items:stretch;width:64px;min-height:auto;& [part=container]{height:fit-content;padding:var(--_padding) 0;flex-direction:column;width:100%}}::slotted(md-button-toggle[variant=tonal]:not(:state(checked))),::slotted(md-icon-button-toggle[variant=tonal]:not(:state(checked))){--_background-color:transparent}:host([color=vibrant]){--_container-color:var(--md-sys-color-primary-container);--_on-color:var(--md-sys-color-on-primary-container);& ::slotted(md-icon-button[variant=text]),& ::slotted(md-icon-button-toggle[variant=tonal]){--_text-color:var(--md-sys-color-on-primary-container)}& ::slotted(md-icon-button-toggle[variant=tonal]:state(checked)){--_background-color:var(--md-sys-color-surface-container);--_text-color:var(--md-sys-color-on-surface)}}`;
2
+ export const toolbarStyles = css`:host{--_padding:16px;--_gap:32px;--_container-color:var(--md-sys-color-surface-container);--_on-color:var(--md-sys-color-on-surface);background-color:color-mix(in srgb, var(--_container-color) var(--_container-opacity,100%), transparent);box-sizing:border-box;color:color-mix(in srgb, var(--_on-color) var(--_on-opacity,100%), transparent);align-items:center;width:100%;height:64px;display:flex}[part=container]{box-sizing:border-box;align-items:center;gap:var(--_gap);height:64px;padding:0 var(--_padding);flex:auto;justify-content:space-between;width:100%;display:flex}[part=fab-slot]{justify-content:flex-end;align-items:center;display:flex}:host(:not([orientation=vertical])) ::slotted([slot=fab]){margin-inline-start:8px}:host([orientation=vertical]) ::slotted([slot=fab]){margin-block-start:8px}:host([type=floating]){--_padding:12px;--_gap:4px;--_container-color:var(--md-sys-color-surface-container-high);box-shadow:none;background:0 0;width:fit-content;max-width:calc(100% - 32px);& [part=container]{background-color:color-mix(in srgb, var(--_container-color) var(--_container-opacity,100%), transparent);box-shadow:var(--md-toolbar-shadow,var(--md-sys-elevation-shadow-3));border-radius:32px;width:fit-content}& ::slotted(md-button),& ::slotted(md-button-toggle),& ::slotted(md-icon-button),& ::slotted(md-icon-button-toggle){--md-focus-ring-shape:calc(var(--_h) / 2);border-radius:calc(var(--_h) / 2)}}:host([type=floating][orientation=vertical]){flex-direction:column;align-items:stretch;width:64px;min-height:auto;& [part=container]{height:fit-content;padding:var(--_padding) 0;flex-direction:column;width:100%}}::slotted(md-button-toggle[variant=tonal]:not(:state(checked))),::slotted(md-icon-button-toggle[variant=tonal]:not(:state(checked))){--_background-color:transparent}:host([color=vibrant]){--_container-color:var(--md-sys-color-primary-container);--_on-color:var(--md-sys-color-on-primary-container);& ::slotted(md-icon-button[variant=text]),& ::slotted(md-icon-button-toggle[variant=tonal]){--_text-color:var(--md-sys-color-on-primary-container)}& ::slotted(md-icon-button-toggle[variant=tonal]:state(checked)){--_background-color:var(--md-sys-color-surface-container);--_text-color:var(--md-sys-color-on-surface)}}@media (forced-colors:active){[part=container]{outline:1px solid canvastext}}`;
@@ -1,2 +1,2 @@
1
1
  import { css } from 'lit';
2
- export const buttonStyles = css`:host{-webkit-font-smoothing:none;box-sizing:border-box;color:#0000;text-shadow:0 0 #222;-webkit-user-select:none;user-select:none;cursor:default;background:silver;border:none;border-radius:0;justify-content:center;align-items:center;min-width:75px;min-height:23px;padding:0 12px;font-family:Arial;font-size:11px;display:inline-flex;box-shadow:inset -1px -1px #0a0a0a,inset 1px 1px #fff,inset -2px -2px gray,inset 2px 2px #dfdfdf}:host(:active){text-shadow:1px 1px #222;box-shadow:inset -1px -1px #fff,inset 1px 1px #0a0a0a,inset -2px -2px #dfdfdf,inset 2px 2px gray}:host(:focus){outline-offset:-4px;outline:1px dotted #000}:host(:disabled){color:gray;text-shadow:1px 1px #fff;pointer-events:none}`;
2
+ export const buttonStyles = css`:host{-webkit-font-smoothing:none;box-sizing:border-box;color:#0000;text-shadow:0 0 #222;-webkit-user-select:none;user-select:none;cursor:default;background:silver;border:none;border-radius:0;justify-content:center;align-items:center;min-width:75px;min-height:23px;padding:0 12px;font-family:Arial;font-size:11px;display:inline-flex;box-shadow:inset -1px -1px #0a0a0a,inset 1px 1px #fff,inset -2px -2px gray,inset 2px 2px #dfdfdf}:host(:active),:host(:state(active)){text-shadow:1px 1px #222;box-shadow:inset -1px -1px #fff,inset 1px 1px #0a0a0a,inset -2px -2px #dfdfdf,inset 2px 2px gray}:host(:focus){outline-offset:-4px;outline:1px dotted #000}:host(:disabled){color:gray;text-shadow:1px 1px #fff;pointer-events:none}`;
@@ -1,45 +0,0 @@
1
- import { Dialog } from '../../base/dialog.js';
2
- /**
3
- * TODO: test if form actions `cancel` and other things related work - no,
4
- * event listener needed
5
- *
6
- * To get an approximation of the "not Expressive" version like:
7
- * https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration#e5b958f0-435d-4e84-aed4-8d1ea395fa5c
8
- *
9
- * ```css
10
- * --md-sys-motion-spatial-default: cubic-bezier(0, 0, 0, 1);
11
- * --md-sys-motion-spatial-default-duration: 500ms;
12
- * --md-sys-motion-spatial-fast: cubic-bezier(0.3, 0, 1, 1);
13
- * --md-sys-motion-spatial-fast-duration: 300ms;
14
- *
15
- * --md-sys-motion-effects-fast: linear;
16
- * --md-sys-motion-effects-fast-duration: 200ms;
17
- * --md-sys-motion-effects-default: linear;
18
- * --md-sys-motion-effects-default-duration: 300ms;
19
- * ```
20
- *
21
- * @tag md-dialog
22
- *
23
- * @csspart container
24
- * @csspart headline
25
- * @csspart content
26
- * @csspart actions
27
- *
28
- * @slot icon
29
- * @slot headline
30
- * @slot - content
31
- * @slot actions
32
- */
33
- export declare class M3Dialog extends Dialog {
34
- #private;
35
- private hasIcon;
36
- $container: HTMLDivElement;
37
- $body: HTMLDivElement;
38
- $actions: HTMLDivElement;
39
- $actionsPlaceholder: HTMLDivElement;
40
- $scrim: HTMLDivElement;
41
- static styles: any[];
42
- render(): import("lit-html").TemplateResult<1>;
43
- show(): void;
44
- close(): void;
45
- }
@@ -1,176 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { html } from 'lit';
3
- import { query, state, customElement } from 'lit/decorators.js';
4
- import { Dialog } from '../../base/dialog.js';
5
- import { getSpring } from '../system/motion.js';
6
- import { dialogStyles } from './dialog-styles.css.js';
7
- /**
8
- * TODO: test if form actions `cancel` and other things related work - no,
9
- * event listener needed
10
- *
11
- * To get an approximation of the "not Expressive" version like:
12
- * https://m3.material.io/styles/motion/easing-and-duration/applying-easing-and-duration#e5b958f0-435d-4e84-aed4-8d1ea395fa5c
13
- *
14
- * ```css
15
- * --md-sys-motion-spatial-default: cubic-bezier(0, 0, 0, 1);
16
- * --md-sys-motion-spatial-default-duration: 500ms;
17
- * --md-sys-motion-spatial-fast: cubic-bezier(0.3, 0, 1, 1);
18
- * --md-sys-motion-spatial-fast-duration: 300ms;
19
- *
20
- * --md-sys-motion-effects-fast: linear;
21
- * --md-sys-motion-effects-fast-duration: 200ms;
22
- * --md-sys-motion-effects-default: linear;
23
- * --md-sys-motion-effects-default-duration: 300ms;
24
- * ```
25
- *
26
- * @tag md-dialog
27
- *
28
- * @csspart container
29
- * @csspart headline
30
- * @csspart content
31
- * @csspart actions
32
- *
33
- * @slot icon
34
- * @slot headline
35
- * @slot - content
36
- * @slot actions
37
- */
38
- let M3Dialog = class M3Dialog extends Dialog {
39
- constructor() {
40
- super(...arguments);
41
- this.hasIcon = false;
42
- this.#activeAnimations = [];
43
- this.#handleClick = (e) => {
44
- const target = e.target;
45
- if (!this.$container.contains(target) && !this.contains(target))
46
- this.close();
47
- };
48
- this.#handleIconSlotChange = (e) => {
49
- const slot = e.target;
50
- this.hasIcon = slot.assignedElements({ flatten: true }).length > 0;
51
- };
52
- this.#opening = false;
53
- this.#closing = false;
54
- }
55
- static { this.styles = [dialogStyles]; }
56
- render() {
57
- 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>`;
58
- }
59
- #activeAnimations;
60
- #clearAnimations() {
61
- this.#activeAnimations.forEach((anim) => anim.cancel());
62
- this.#activeAnimations = [];
63
- this.#opening = this.#closing = false;
64
- }
65
- #handleClick;
66
- #handleIconSlotChange;
67
- get #springs() {
68
- return {
69
- spatialDefault: getSpring(this, 'spatial', 'default'),
70
- spatialFast: getSpring(this, 'spatial', 'fast'),
71
- effectsDefault: getSpring(this, 'effects', 'default'),
72
- effectsFast: getSpring(this, 'effects', 'fast'),
73
- };
74
- }
75
- #opening;
76
- show() {
77
- if (this.#opening)
78
- return;
79
- this.#clearAnimations();
80
- this.#opening = true;
81
- // Reset margins to allow browser centering
82
- this.$dialog.style.marginTop = 'auto';
83
- this.$dialog.style.marginBottom = 'auto';
84
- super.show();
85
- const actionsHeight = this.$actions.offsetHeight;
86
- this.$actionsPlaceholder.style.height = `${actionsHeight}px`;
87
- this.$container.style.height = 'auto';
88
- const startHeight = 0;
89
- const endHeight = this.$container.offsetHeight;
90
- // Lock the position to prevent auto-centering during animation
91
- const rect = this.$container.getBoundingClientRect();
92
- this.$dialog.style.marginTop = `${rect.top}px`;
93
- this.$dialog.style.marginBottom = 'auto';
94
- this.$container.style.minHeight = '0px';
95
- const container = this.$container.animate([
96
- {
97
- height: `${startHeight}px`,
98
- transform: `translateY(-40px)`,
99
- },
100
- {
101
- height: `${endHeight}px`,
102
- transform: 'translateY(0px)',
103
- },
104
- ], this.#springs.spatialDefault);
105
- const scrim = this.$scrim.animate([{ opacity: 0 }, { opacity: 0.32 }], {
106
- ...this.#springs.effectsDefault,
107
- fill: 'forwards',
108
- });
109
- const body = this.$body.animate([{ opacity: 0.2 }, { opacity: 1 }], {
110
- ...this.#springs.effectsDefault,
111
- fill: 'forwards',
112
- });
113
- const actions = this.$actions.animate([{ opacity: 0.5 }, { opacity: 1 }], {
114
- ...this.#springs.effectsDefault,
115
- fill: 'forwards',
116
- });
117
- this.#activeAnimations.push(container, scrim, body, actions);
118
- container.onfinish = () => {
119
- this.$container.style.minHeight = '';
120
- this.#clearAnimations();
121
- };
122
- }
123
- #closing;
124
- close() {
125
- if (this.#closing)
126
- return;
127
- this.#clearAnimations();
128
- this.#closing = true;
129
- const startHeight = this.$container.offsetHeight;
130
- const endHeight = startHeight * 0.35;
131
- this.$container.style.minHeight = '0px';
132
- const containerSpatial = this.$container.animate([
133
- { height: `${startHeight}px`, transform: 'translateY(0px)' },
134
- {
135
- height: `${endHeight}px`,
136
- transform: `translateY(-40px)`,
137
- },
138
- ], this.#springs.spatialFast);
139
- const containerEffects = this.$container.animate([{ opacity: 1 }, { opacity: 0 }], {
140
- ...this.#springs.effectsFast,
141
- fill: 'forwards',
142
- });
143
- const scrim = this.$scrim.animate([{ opacity: 0.32 }, { opacity: 0 }], {
144
- ...this.#springs.effectsFast,
145
- fill: 'forwards',
146
- });
147
- this.#activeAnimations.push(containerSpatial, containerEffects, scrim);
148
- containerEffects.onfinish = () => {
149
- this.$container.style.minHeight = '';
150
- super.close();
151
- this.#clearAnimations();
152
- };
153
- }
154
- };
155
- __decorate([
156
- state()
157
- ], M3Dialog.prototype, "hasIcon", void 0);
158
- __decorate([
159
- query('[part=container]')
160
- ], M3Dialog.prototype, "$container", void 0);
161
- __decorate([
162
- query('[part=body]')
163
- ], M3Dialog.prototype, "$body", void 0);
164
- __decorate([
165
- query('[part=actions]')
166
- ], M3Dialog.prototype, "$actions", void 0);
167
- __decorate([
168
- query('.actions-placeholder')
169
- ], M3Dialog.prototype, "$actionsPlaceholder", void 0);
170
- __decorate([
171
- query('[part=scrim]')
172
- ], M3Dialog.prototype, "$scrim", void 0);
173
- M3Dialog = __decorate([
174
- customElement('md-dialog')
175
- ], M3Dialog);
176
- export { M3Dialog };
@@ -1,3 +0,0 @@
1
- import { Radio } from '../../base/radio.js';
2
- export declare class Win98Radio extends Radio {
3
- }
@@ -1,9 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Radio } from '../../base/radio.js';
3
- import { customElement } from '../../core/decorators.js';
4
- let Win98Radio = class Win98Radio extends Radio {
5
- };
6
- Win98Radio = __decorate([
7
- customElement('win98-radio')
8
- ], Win98Radio);
9
- export { Win98Radio };
@@ -1,3 +0,0 @@
1
- import { Radio } from '../../base/radio.js';
2
- export declare class Win98Radio extends Radio {
3
- }