@expressivecss/expressive 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (140) hide show
  1. package/CHANGELOG.md +162 -7
  2. package/README.md +1 -1
  3. package/dist/css/expressive.css +230 -99
  4. package/dist/css/expressive.css.map +1 -1
  5. package/dist/css/expressive.min.css +1 -1
  6. package/dist/css/expressive.min.css.map +1 -1
  7. package/dist/js/chunks/{chunk-IMUPRRI6.mjs → chunk-3VOK6J7U.mjs} +3 -3
  8. package/dist/js/chunks/{chunk-XDB3G6RL.mjs → chunk-6N2XAEFK.mjs} +15 -4
  9. package/dist/js/chunks/{chunk-XDB3G6RL.mjs.map → chunk-6N2XAEFK.mjs.map} +2 -2
  10. package/dist/js/chunks/{chunk-MISGHDUU.mjs → chunk-6OMRGML6.mjs} +9 -7
  11. package/dist/js/chunks/{chunk-MISGHDUU.mjs.map → chunk-6OMRGML6.mjs.map} +2 -2
  12. package/dist/js/chunks/{chunk-A3BJA7V4.mjs → chunk-6WLSDZ4O.mjs} +2 -2
  13. package/dist/js/chunks/{chunk-JODJAGFS.mjs → chunk-CKQP6P76.mjs} +31 -8
  14. package/dist/js/chunks/chunk-CKQP6P76.mjs.map +7 -0
  15. package/dist/js/chunks/{chunk-KR44BSYQ.mjs → chunk-DLWYKFEI.mjs} +3 -3
  16. package/dist/js/chunks/{chunk-SLFNPY5M.mjs → chunk-EC63CHXU.mjs} +2 -2
  17. package/dist/js/chunks/chunk-G3I5H2U3.mjs +7 -0
  18. package/dist/js/chunks/{chunk-PMBPAFAS.mjs.map → chunk-G3I5H2U3.mjs.map} +1 -1
  19. package/dist/js/chunks/{chunk-LZVBJ33S.mjs → chunk-GZWPXXY6.mjs} +15 -8
  20. package/dist/js/chunks/chunk-GZWPXXY6.mjs.map +7 -0
  21. package/dist/js/chunks/{chunk-74N6U5JJ.mjs → chunk-H2WA4XHH.mjs} +36 -35
  22. package/dist/js/chunks/chunk-H2WA4XHH.mjs.map +7 -0
  23. package/dist/js/chunks/{chunk-XFJ452AZ.mjs → chunk-HB6IW7QQ.mjs} +5 -6
  24. package/dist/js/chunks/{chunk-XFJ452AZ.mjs.map → chunk-HB6IW7QQ.mjs.map} +2 -2
  25. package/dist/js/chunks/{chunk-AYYYWUJ4.mjs → chunk-HLDXZ7XB.mjs} +17 -11
  26. package/dist/js/chunks/chunk-HLDXZ7XB.mjs.map +7 -0
  27. package/dist/js/chunks/{chunk-7GKXUG4B.mjs → chunk-HNFSMIBY.mjs} +18 -18
  28. package/dist/js/chunks/{chunk-D4UZ4HFN.mjs → chunk-IFXVDDDH.mjs} +23 -11
  29. package/dist/js/chunks/chunk-IFXVDDDH.mjs.map +7 -0
  30. package/dist/js/chunks/{chunk-QSQ24FYT.mjs → chunk-LTWPGFBR.mjs} +2 -2
  31. package/dist/js/chunks/{chunk-QSQ24FYT.mjs.map → chunk-LTWPGFBR.mjs.map} +2 -2
  32. package/dist/js/chunks/{chunk-I5KR22BY.mjs → chunk-LWBQIX5J.mjs} +15 -15
  33. package/dist/js/chunks/chunk-LWBQIX5J.mjs.map +7 -0
  34. package/dist/js/chunks/{chunk-GY2Z5CJ2.mjs → chunk-NNYP33NB.mjs} +67 -32
  35. package/dist/js/chunks/chunk-NNYP33NB.mjs.map +7 -0
  36. package/dist/js/chunks/{chunk-VAS6JQ6P.mjs → chunk-PIJ2TAR3.mjs} +3 -3
  37. package/dist/js/chunks/{chunk-JR24UB4X.mjs → chunk-PSSHQWCX.mjs} +2 -2
  38. package/dist/js/chunks/{chunk-PIIAEYAJ.mjs → chunk-QDAL4IYN.mjs} +2 -2
  39. package/dist/js/chunks/{chunk-FRB7TOCS.mjs → chunk-QV2JAWIZ.mjs} +2 -2
  40. package/dist/js/chunks/{chunk-N3UHGN3N.mjs → chunk-QVVEWBOF.mjs} +3 -3
  41. package/dist/js/chunks/{chunk-CDW6WIRT.mjs → chunk-RFZZCYVU.mjs} +18 -11
  42. package/dist/js/chunks/chunk-RFZZCYVU.mjs.map +7 -0
  43. package/dist/js/chunks/{chunk-TYM6U5DY.mjs → chunk-UAEAQBRC.mjs} +2 -2
  44. package/dist/js/chunks/{chunk-7UXHSYIA.mjs → chunk-UBLRRJ7N.mjs} +3 -3
  45. package/dist/js/chunks/{chunk-EP3CVKB5.mjs → chunk-UEZUJQ66.mjs} +8 -5
  46. package/dist/js/chunks/chunk-UEZUJQ66.mjs.map +7 -0
  47. package/dist/js/chunks/{chunk-JNPIWFJT.mjs → chunk-UNEMYWEW.mjs} +3 -3
  48. package/dist/js/chunks/{chunk-JKNPQQWY.mjs → chunk-WJXDBPXQ.mjs} +28 -12
  49. package/dist/js/chunks/chunk-WJXDBPXQ.mjs.map +7 -0
  50. package/dist/js/chunks/{chunk-XO5WX3TK.mjs → chunk-YDCS5S3J.mjs} +2 -2
  51. package/dist/js/chunks/{chunk-TK6PX2GC.mjs → chunk-YSBCHYXP.mjs} +16 -8
  52. package/dist/js/chunks/chunk-YSBCHYXP.mjs.map +7 -0
  53. package/dist/js/expressive.cjs +263 -133
  54. package/dist/js/expressive.cjs.map +2 -2
  55. package/dist/js/expressive.js +263 -133
  56. package/dist/js/expressive.js.map +2 -2
  57. package/dist/js/expressive.min.js +9 -9
  58. package/dist/js/expressive.min.js.map +3 -3
  59. package/dist/js/expressive.mjs +30 -30
  60. package/dist/js/internal/behaviors/bottomSheets.mjs +3 -3
  61. package/dist/js/internal/behaviors/dialogs.mjs +2 -2
  62. package/dist/js/internal/behaviors/forms.mjs +2 -2
  63. package/dist/js/internal/behaviors/sheetDrag.mjs +2 -2
  64. package/dist/js/internal/behaviors/sideSheets.mjs +3 -3
  65. package/dist/js/internal/components/appBar.mjs +2 -2
  66. package/dist/js/internal/components/autocomplete.mjs +4 -4
  67. package/dist/js/internal/components/buttonGroup.mjs +2 -2
  68. package/dist/js/internal/components/buttons.mjs +3 -3
  69. package/dist/js/internal/components/cards.mjs +3 -3
  70. package/dist/js/internal/components/carousel.mjs +3 -3
  71. package/dist/js/internal/components/characterCounter.mjs +2 -2
  72. package/dist/js/internal/components/chips.mjs +5 -5
  73. package/dist/js/internal/components/datepicker.mjs +6 -6
  74. package/dist/js/internal/components/expandingCard.mjs +3 -3
  75. package/dist/js/internal/components/index.mjs +23 -23
  76. package/dist/js/internal/components/lightbox.mjs +3 -3
  77. package/dist/js/internal/components/menu.mjs +3 -3
  78. package/dist/js/internal/components/navigationRail.mjs +2 -2
  79. package/dist/js/internal/components/registry.mjs +24 -24
  80. package/dist/js/internal/components/scrollspy.mjs +2 -2
  81. package/dist/js/internal/components/select.mjs +4 -4
  82. package/dist/js/internal/components/slider.mjs +3 -3
  83. package/dist/js/internal/components/snackbar.mjs +2 -2
  84. package/dist/js/internal/components/tabs.mjs +4 -4
  85. package/dist/js/internal/components/timepicker.mjs +4 -4
  86. package/dist/js/internal/components/tooltip.mjs +3 -3
  87. package/dist/js/internal/core/component.mjs +1 -1
  88. package/dist/js/internal/core/utils.mjs +1 -1
  89. package/dist/js/internal/plugins/dockedDisplayPlugin.mjs +2 -2
  90. package/dist/js/modular.mjs +30 -30
  91. package/dist/types/components/appBar.d.ts +1 -1
  92. package/dist/types/components/datepicker.d.ts +5 -2
  93. package/dist/types/components/menu.d.ts +1 -0
  94. package/dist/types/components/slider.d.ts +1 -0
  95. package/dist/types/components/snackbar.d.ts +6 -0
  96. package/dist/types/components/timepicker.d.ts +4 -1
  97. package/dist/types/components/tooltip.d.ts +2 -1
  98. package/dist/types/modular.d.ts +1 -1
  99. package/package.json +1 -1
  100. package/src/sass/components/_carousel.scss +9 -7
  101. package/src/sass/components/_navbar.scss +11 -6
  102. package/src/sass/components/_page-footer.scss +0 -11
  103. package/src/sass/components/_progress.scss +25 -6
  104. package/src/sass/components/_snackbar.scss +1 -1
  105. package/src/sass/components/_timepicker.scss +2 -2
  106. package/src/sass/components/_toolbar.scss +1 -1
  107. package/src/sass/components/forms/_checkboxes.scss +2 -2
  108. package/src/sass/components/forms/_input-fields.scss +35 -15
  109. package/src/sass/components/forms/_radio-buttons.scss +2 -2
  110. package/src/sass/components/forms/_slider.scss +51 -29
  111. package/src/sass/components/forms/_switches.scss +3 -3
  112. package/src/sass/utilities/_helpers.scss +14 -0
  113. package/src/sass/utilities/_spacing.scss +29 -23
  114. package/src/sass/utilities/_visibility.scss +3 -2
  115. package/dist/js/chunks/chunk-74N6U5JJ.mjs.map +0 -7
  116. package/dist/js/chunks/chunk-AYYYWUJ4.mjs.map +0 -7
  117. package/dist/js/chunks/chunk-CDW6WIRT.mjs.map +0 -7
  118. package/dist/js/chunks/chunk-D4UZ4HFN.mjs.map +0 -7
  119. package/dist/js/chunks/chunk-EP3CVKB5.mjs.map +0 -7
  120. package/dist/js/chunks/chunk-GY2Z5CJ2.mjs.map +0 -7
  121. package/dist/js/chunks/chunk-I5KR22BY.mjs.map +0 -7
  122. package/dist/js/chunks/chunk-JKNPQQWY.mjs.map +0 -7
  123. package/dist/js/chunks/chunk-JODJAGFS.mjs.map +0 -7
  124. package/dist/js/chunks/chunk-LZVBJ33S.mjs.map +0 -7
  125. package/dist/js/chunks/chunk-PMBPAFAS.mjs +0 -7
  126. package/dist/js/chunks/chunk-TK6PX2GC.mjs.map +0 -7
  127. /package/dist/js/chunks/{chunk-IMUPRRI6.mjs.map → chunk-3VOK6J7U.mjs.map} +0 -0
  128. /package/dist/js/chunks/{chunk-A3BJA7V4.mjs.map → chunk-6WLSDZ4O.mjs.map} +0 -0
  129. /package/dist/js/chunks/{chunk-KR44BSYQ.mjs.map → chunk-DLWYKFEI.mjs.map} +0 -0
  130. /package/dist/js/chunks/{chunk-SLFNPY5M.mjs.map → chunk-EC63CHXU.mjs.map} +0 -0
  131. /package/dist/js/chunks/{chunk-7GKXUG4B.mjs.map → chunk-HNFSMIBY.mjs.map} +0 -0
  132. /package/dist/js/chunks/{chunk-VAS6JQ6P.mjs.map → chunk-PIJ2TAR3.mjs.map} +0 -0
  133. /package/dist/js/chunks/{chunk-JR24UB4X.mjs.map → chunk-PSSHQWCX.mjs.map} +0 -0
  134. /package/dist/js/chunks/{chunk-PIIAEYAJ.mjs.map → chunk-QDAL4IYN.mjs.map} +0 -0
  135. /package/dist/js/chunks/{chunk-FRB7TOCS.mjs.map → chunk-QV2JAWIZ.mjs.map} +0 -0
  136. /package/dist/js/chunks/{chunk-N3UHGN3N.mjs.map → chunk-QVVEWBOF.mjs.map} +0 -0
  137. /package/dist/js/chunks/{chunk-TYM6U5DY.mjs.map → chunk-UAEAQBRC.mjs.map} +0 -0
  138. /package/dist/js/chunks/{chunk-7UXHSYIA.mjs.map → chunk-UBLRRJ7N.mjs.map} +0 -0
  139. /package/dist/js/chunks/{chunk-JNPIWFJT.mjs.map → chunk-UNEMYWEW.mjs.map} +0 -0
  140. /package/dist/js/chunks/{chunk-XO5WX3TK.mjs.map → chunk-YDCS5S3J.mjs.map} +0 -0
@@ -1,86 +1,86 @@
1
1
  import {
2
2
  version
3
- } from "./chunks/chunk-PMBPAFAS.mjs";
3
+ } from "./chunks/chunk-G3I5H2U3.mjs";
4
4
  import {
5
5
  AutoInit
6
- } from "./chunks/chunk-7GKXUG4B.mjs";
6
+ } from "./chunks/chunk-HNFSMIBY.mjs";
7
7
  import "./chunks/chunk-WWPAPHMA.mjs";
8
8
  import {
9
9
  Slider
10
- } from "./chunks/chunk-JKNPQQWY.mjs";
10
+ } from "./chunks/chunk-WJXDBPXQ.mjs";
11
11
  import {
12
12
  Snackbar
13
- } from "./chunks/chunk-GY2Z5CJ2.mjs";
13
+ } from "./chunks/chunk-NNYP33NB.mjs";
14
14
  import {
15
15
  Tabs
16
- } from "./chunks/chunk-IMUPRRI6.mjs";
16
+ } from "./chunks/chunk-3VOK6J7U.mjs";
17
17
  import {
18
18
  Timepicker
19
- } from "./chunks/chunk-D4UZ4HFN.mjs";
19
+ } from "./chunks/chunk-IFXVDDDH.mjs";
20
20
  import {
21
21
  Tooltip
22
- } from "./chunks/chunk-JODJAGFS.mjs";
22
+ } from "./chunks/chunk-CKQP6P76.mjs";
23
23
  import {
24
24
  ExpandingCard
25
- } from "./chunks/chunk-N3UHGN3N.mjs";
25
+ } from "./chunks/chunk-QVVEWBOF.mjs";
26
26
  import {
27
27
  Lightbox
28
- } from "./chunks/chunk-JNPIWFJT.mjs";
28
+ } from "./chunks/chunk-UNEMYWEW.mjs";
29
29
  import {
30
30
  NavigationRail
31
- } from "./chunks/chunk-XDB3G6RL.mjs";
31
+ } from "./chunks/chunk-6N2XAEFK.mjs";
32
32
  import {
33
33
  ScrollSpy
34
- } from "./chunks/chunk-FRB7TOCS.mjs";
34
+ } from "./chunks/chunk-QV2JAWIZ.mjs";
35
35
  import {
36
36
  ButtonGroup
37
- } from "./chunks/chunk-XO5WX3TK.mjs";
37
+ } from "./chunks/chunk-YDCS5S3J.mjs";
38
38
  import {
39
39
  FloatingActionButton
40
- } from "./chunks/chunk-VAS6JQ6P.mjs";
40
+ } from "./chunks/chunk-PIJ2TAR3.mjs";
41
41
  import {
42
42
  Cards
43
- } from "./chunks/chunk-7UXHSYIA.mjs";
43
+ } from "./chunks/chunk-UBLRRJ7N.mjs";
44
44
  import {
45
45
  Carousel
46
- } from "./chunks/chunk-I5KR22BY.mjs";
46
+ } from "./chunks/chunk-LWBQIX5J.mjs";
47
47
  import {
48
48
  CharacterCounter
49
- } from "./chunks/chunk-PIIAEYAJ.mjs";
49
+ } from "./chunks/chunk-QDAL4IYN.mjs";
50
50
  import {
51
51
  Chips
52
- } from "./chunks/chunk-CDW6WIRT.mjs";
52
+ } from "./chunks/chunk-RFZZCYVU.mjs";
53
53
  import {
54
54
  Autocomplete
55
- } from "./chunks/chunk-AYYYWUJ4.mjs";
55
+ } from "./chunks/chunk-HLDXZ7XB.mjs";
56
56
  import {
57
57
  Datepicker
58
- } from "./chunks/chunk-74N6U5JJ.mjs";
59
- import "./chunks/chunk-SLFNPY5M.mjs";
58
+ } from "./chunks/chunk-H2WA4XHH.mjs";
59
+ import "./chunks/chunk-EC63CHXU.mjs";
60
60
  import {
61
61
  FormSelect
62
- } from "./chunks/chunk-XFJ452AZ.mjs";
62
+ } from "./chunks/chunk-HB6IW7QQ.mjs";
63
63
  import {
64
64
  Menu
65
- } from "./chunks/chunk-TK6PX2GC.mjs";
65
+ } from "./chunks/chunk-YSBCHYXP.mjs";
66
66
  import {
67
67
  BottomSheets
68
- } from "./chunks/chunk-KR44BSYQ.mjs";
68
+ } from "./chunks/chunk-DLWYKFEI.mjs";
69
69
  import {
70
70
  Dialogs
71
- } from "./chunks/chunk-TYM6U5DY.mjs";
71
+ } from "./chunks/chunk-UAEAQBRC.mjs";
72
72
  import {
73
73
  Forms
74
- } from "./chunks/chunk-JR24UB4X.mjs";
74
+ } from "./chunks/chunk-PSSHQWCX.mjs";
75
75
  import {
76
76
  SideSheets
77
- } from "./chunks/chunk-A3BJA7V4.mjs";
78
- import "./chunks/chunk-LZVBJ33S.mjs";
79
- import "./chunks/chunk-MISGHDUU.mjs";
77
+ } from "./chunks/chunk-6WLSDZ4O.mjs";
78
+ import "./chunks/chunk-GZWPXXY6.mjs";
79
+ import "./chunks/chunk-6OMRGML6.mjs";
80
80
  import {
81
81
  AppBar
82
- } from "./chunks/chunk-EP3CVKB5.mjs";
83
- import "./chunks/chunk-QSQ24FYT.mjs";
82
+ } from "./chunks/chunk-UEZUJQ66.mjs";
83
+ import "./chunks/chunk-LTWPGFBR.mjs";
84
84
  export {
85
85
  AppBar,
86
86
  AutoInit,
@@ -3,7 +3,7 @@ import { Component, BaseOptions, InitElements, InitElement } from '../core/compo
3
3
  * Collapse medium/large flexible app bars on scroll, and open the related
4
4
  * search view when the search field in a search app bar is selected.
5
5
  *
6
- * Observation is IntersectionObserver on a 1px sentinel ahead of the header.
6
+ * Observation is IntersectionObserver on a sentinel after the header.
7
7
  * A scroll listener would re-enter layout on every tick; this does not.
8
8
  */
9
9
  export declare class AppBar extends Component<BaseOptions> {
@@ -18,6 +18,8 @@ export interface DatepickerOptions extends BaseOptions {
18
18
  format: string | ((d: Date) => string);
19
19
  /**
20
20
  * Used to create date object from current input string.
21
+ * Receives the format string, or an empty string when format is a function.
22
+ * Not called for blank input.
21
23
  * @default null
22
24
  */
23
25
  parse: ((value: string, format: string) => Date) | null;
@@ -123,9 +125,9 @@ export interface DatepickerOptions extends BaseOptions {
123
125
  showClearBtn: boolean;
124
126
  /**
125
127
  * Autosubmit calendar day select to input field
126
- * @default false
128
+ * @default true
127
129
  */
128
- autoSubmit: true;
130
+ autoSubmit: boolean;
129
131
  /**
130
132
  * Internationalization options.
131
133
  */
@@ -244,6 +246,7 @@ export declare class Datepicker extends Component<DatepickerOptions> {
244
246
  static _escape(value: unknown): string;
245
247
  static _isDate(obj: any): boolean;
246
248
  private static _parseDate;
249
+ private _parseInput;
247
250
  static _isWeekend(date: any): boolean;
248
251
  /**
249
252
  * @deprecated as this function has no effect without any return statement or global parameter setter.
@@ -94,6 +94,7 @@ export declare class Menu extends Component<MenuOptions> implements Openable {
94
94
  private _pendingTimers;
95
95
  private _transition;
96
96
  private _originalInert;
97
+ private _menuClickTargets;
97
98
  constructor(el: HTMLElement, options: Partial<MenuOptions>);
98
99
  static get defaults(): MenuOptions;
99
100
  /**
@@ -23,6 +23,7 @@ export declare class Slider extends Component<SliderOptions> {
23
23
  static init(els: InitElements<HTMLInputElement | InitElement>, options?: Partial<SliderOptions>): Slider[];
24
24
  static getInstance(el: HTMLInputElement): Slider;
25
25
  destroy(): void;
26
+ _set(el: HTMLElement, name: string, value: string): void;
26
27
  _setupEventHandlers(): void;
27
28
  _removeEventHandlers(): void;
28
29
  _handleRangeChange: () => void;
@@ -92,6 +92,11 @@ export declare class Snackbar {
92
92
  velocityX: number;
93
93
  private _dismissed;
94
94
  private _returnFocus;
95
+ private _events;
96
+ private _restoreElement;
97
+ private _transitionTimer;
98
+ private _dismissTimer;
99
+ private _focusTimer;
95
100
  static _snackbars: Snackbar[];
96
101
  static _container: HTMLElement;
97
102
  static _draggedSnackbar: Snackbar;
@@ -116,6 +121,7 @@ export declare class Snackbar {
116
121
  */
117
122
  static dismissAll(): void;
118
123
  _createSnackbar(): HTMLElement;
124
+ private _remove;
119
125
  _animateIn(): void;
120
126
  /**
121
127
  * Arm the dismissal timer.
@@ -41,7 +41,7 @@ export interface TimepickerOptions extends BaseOptions {
41
41
  * Autosubmit timepicker selection to input field
42
42
  * @default true
43
43
  */
44
- autoSubmit: true;
44
+ autoSubmit: boolean;
45
45
  /**
46
46
  * Default time to set on the timepicker 'now' or '13:14'.
47
47
  * @default 'now';
@@ -143,6 +143,8 @@ export declare class Timepicker extends Component<TimepickerOptions> {
143
143
  g: Element;
144
144
  toggleViewTimer: ReturnType<typeof setTimeout>;
145
145
  vibrateTimer: ReturnType<typeof setTimeout>;
146
+ private _autoSubmitTimer;
147
+ private _clockResetTimer;
146
148
  private displayPlugin;
147
149
  /** Whether the dial (ticks + SVG + AM/PM buttons) has been built yet. */
148
150
  private _clockBuilt;
@@ -202,6 +204,7 @@ export declare class Timepicker extends Component<TimepickerOptions> {
202
204
  * @param delay
203
205
  */
204
206
  showView: (view: Views, delay?: number) => void;
207
+ private _cancelClockReset;
205
208
  resetClock(delay: any): void;
206
209
  _inputFromTextField: (event: Event) => void;
207
210
  drawClockFromTimeInput(value: any, isHours: any): void;
@@ -70,6 +70,7 @@ export declare class Tooltip extends Component<TooltipOptions> {
70
70
  private _exitDelayTimeout;
71
71
  private _enterDelayTimeout;
72
72
  private _animationTimeout;
73
+ private _originalContent;
73
74
  xMovement: number;
74
75
  yMovement: number;
75
76
  constructor(el: HTMLElement, options: Partial<TooltipOptions>);
@@ -96,7 +97,7 @@ export declare class Tooltip extends Component<TooltipOptions> {
96
97
  /**
97
98
  * Show tooltip.
98
99
  */
99
- open: (isManual: boolean) => void;
100
+ open: (isManual?: boolean) => void;
100
101
  /**
101
102
  * Hide tooltip.
102
103
  */
@@ -5,7 +5,7 @@ export { SideSheets } from './behaviors/sideSheets';
5
5
  export { Forms } from './behaviors/forms';
6
6
  export { AutoInit } from './components/registry';
7
7
  export type { AutoInitOptions } from './components/registry';
8
- export declare const version = "0.11.0";
8
+ export declare const version = "0.12.0";
9
9
  export type * from './components/autocomplete';
10
10
  export type * from './components/appBar';
11
11
  export type * from './components/buttons';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@expressivecss/expressive",
3
- "version": "0.11.0",
3
+ "version": "0.12.0",
4
4
  "description": "ExpressiveCSS - a Material Design 3 front-end framework.",
5
5
  "license": "MIT",
6
6
  "author": "BaezFJ <baezdevs@gmail.com>",
@@ -76,7 +76,6 @@
76
76
  scroll-snap-type: x mandatory;
77
77
  scroll-behavior: smooth;
78
78
  overscroll-behavior-inline: contain;
79
- touch-action: pan-x;
80
79
  scrollbar-width: none;
81
80
 
82
81
  &::-webkit-scrollbar {
@@ -485,7 +484,6 @@
485
484
  scroll-snap-type: y mandatory;
486
485
  overscroll-behavior-inline: auto;
487
486
  overscroll-behavior-block: contain;
488
- touch-action: pan-y;
489
487
  }
490
488
 
491
489
  .carousel-track > .carousel-item {
@@ -527,7 +525,6 @@
527
525
  scroll-snap-type: x mandatory;
528
526
  overscroll-behavior-inline: contain;
529
527
  overscroll-behavior-block: auto;
530
- touch-action: pan-x;
531
528
  }
532
529
 
533
530
  .carousel-track > .carousel-item {
@@ -565,17 +562,22 @@
565
562
  cursor: grab;
566
563
  }
567
564
 
568
- .carousel.dragging {
565
+ // A drag writes the scroll position directly, and snapping would pull each
566
+ // write back to a snap point. Each layout that sets scroll-snap-type with
567
+ // more classes than `.carousel.dragging` needs its own arm here.
568
+ .carousel.dragging,
569
+ .carousel.uncontained.snap.dragging,
570
+ .carousel.full-screen.full-screen-horizontal.dragging {
569
571
  > .carousel-track {
570
572
  cursor: grabbing;
571
573
  scroll-behavior: auto;
572
574
  scroll-snap-type: none;
573
575
  user-select: none;
574
576
  }
577
+ }
575
578
 
576
- .carousel-item {
577
- pointer-events: none;
578
- }
579
+ .carousel.dragging .carousel-item {
580
+ pointer-events: none;
579
581
  }
580
582
  }
581
583
 
@@ -53,7 +53,7 @@ $_heading: ":is(h1, h2, h3, h4, h5, h6)";
53
53
  $_title: ":is(#{$_heading}, hgroup)";
54
54
  $_search: ":is(.search-bar, .searchbar)";
55
55
 
56
- header:has(> :is(nav:not(.navigation-bar, .navigation-rail), .bar)) {
56
+ header:has(> #{$_bar}) {
57
57
  --md-comp-top-app-bar-container-color: var(--md-sys-color-surface);
58
58
  --md-comp-top-app-bar-scrolled-container-color: var(--md-sys-color-surface-container);
59
59
  --md-comp-top-app-bar-headline-color: var(--md-sys-color-on-surface);
@@ -494,14 +494,19 @@ header.large.collapsed:has(> #{$_bar}) > #{$_bar} {
494
494
  // from the body (M3 Expressive). The animation only drives the mix
495
495
  // progress; a utility class on the header sets background-color itself
496
496
  // and is not overwritten. Without animation-timeline the bar stays at
497
- // rest (surface), the spec default.
498
- header:has(> :is(nav:not(.navigation-bar, .navigation-rail), .bar)) {
497
+ // rest (surface), the spec default. The @supports guard is load-bearing: an
498
+ // engine that drops animation-timeline runs a 0s animation instead, and
499
+ // fill-mode both holds the scrolled keyframe from the first frame.
500
+ header:has(> #{$_bar}) {
499
501
  position: sticky;
500
502
  top: 0;
501
503
  z-index: 997;
502
- animation: top-app-bar-scroll linear both;
503
- animation-timeline: scroll(root);
504
- animation-range: 0 8px;
504
+
505
+ @supports (animation-timeline: scroll()) {
506
+ animation: top-app-bar-scroll linear both;
507
+ animation-timeline: scroll(root);
508
+ animation-range: 0 8px;
509
+ }
505
510
  }
506
511
 
507
512
  @keyframes top-app-bar-scroll {
@@ -140,14 +140,3 @@ footer:not(:has(> nav:only-child)) > .container > small:last-child {
140
140
  }
141
141
  }
142
142
 
143
- // Sticky: pin the footer to the bottom of a short page. Only when the
144
- // landmark is a direct child of body — not a footer nested in a demo.
145
- body:has(> footer:not(:has(> nav:only-child))) {
146
- min-height: 100dvh;
147
- display: flex;
148
- flex-direction: column;
149
- }
150
-
151
- body:has(> footer:not(:has(> nav:only-child))) > main {
152
- flex: 1 0 auto;
153
- }
@@ -18,7 +18,7 @@
18
18
  // --md-comp-progress-circular-thickness 4px
19
19
 
20
20
  // M3 names this component "Progress indicators", linear and circular. The
21
- // class is `.progress`; `.preloader` is the Materialize name for the circular
21
+ // class is `.progress`; `.preloader` is the older name for the circular
22
22
  // one and stays as an alias, as does `.progress.circular`.
23
23
  .progress,
24
24
  .preloader {
@@ -71,12 +71,24 @@ progress.progress {
71
71
  border-radius: var(--md-comp-progress-shape);
72
72
  }
73
73
 
74
- &:indeterminate::-webkit-progress-value,
74
+ // Firefox draws no ::before/::after on <progress> and paints the track as the
75
+ // element's own background, so its indeterminate bar is the native one. It
76
+ // places that bar from the physical left and reads only margin-left, which is
77
+ // margin-inline-end in RTL, so both inline margins move. Keep this out of any
78
+ // -webkit- selector list: Chromium drops a list naming a pseudo-element it
79
+ // does not know.
75
80
  &:indeterminate::-moz-progress-bar {
76
- background-color: transparent;
81
+ width: 40%;
82
+ margin-inline-end: 60%;
83
+ animation: progress-indeterminate-moz 2.1s cubic-bezier(0.65, 0.815, 0.735, 0.395) infinite;
77
84
  }
78
85
  }
79
86
 
87
+ @keyframes progress-indeterminate-moz {
88
+ from { margin-inline-start: -40%; margin-inline-end: 100%; }
89
+ to { margin-inline-start: 100%; margin-inline-end: -40%; }
90
+ }
91
+
80
92
  .progress > .determinate {
81
93
  position: absolute;
82
94
  inset-block: 0;
@@ -107,10 +119,12 @@ progress.progress {
107
119
  }
108
120
  }
109
121
 
110
- .progress > .indeterminate,
111
- progress.progress:indeterminate {
122
+ .progress > .indeterminate {
112
123
  background-color: transparent;
124
+ }
113
125
 
126
+ .progress > .indeterminate,
127
+ progress.progress:indeterminate {
114
128
  &::before,
115
129
  &::after {
116
130
  content: "";
@@ -147,7 +161,7 @@ progress.progress:indeterminate {
147
161
  // ---------------------------------------------------------------------------
148
162
 
149
163
  // The circular indicator. `.progress.circular` is the M3-aligned name;
150
- // `.preloader` is the Materialize one and still works.
164
+ // `.preloader` remains a compatibility alias.
151
165
  :is(.preloader, .progress.circular) {
152
166
  box-sizing: border-box;
153
167
  display: inline-block;
@@ -218,6 +232,7 @@ progress.progress:indeterminate {
218
232
  progress.progress:indeterminate::-moz-progress-bar {
219
233
  background-color: CanvasText;
220
234
  width: 40%;
235
+ animation: none;
221
236
  }
222
237
 
223
238
  :is(.preloader, .progress.circular) {
@@ -254,4 +269,8 @@ progress.progress:indeterminate {
254
269
  .preloader {
255
270
  transform: none;
256
271
  }
272
+
273
+ progress.progress:indeterminate::-moz-progress-bar {
274
+ animation: none;
275
+ }
257
276
  }
@@ -120,7 +120,7 @@ $_bar: ".snackbar";
120
120
  overflow: hidden;
121
121
  }
122
122
 
123
- // Optional leading icon (BeerCSS). M3 snackbars have no leading icon.
123
+ // Optional leading icon. M3 snackbars have no leading icon.
124
124
  > #{$icon}:first-child {
125
125
  flex: 0 0 auto;
126
126
  font-size: 24px;
@@ -101,7 +101,7 @@ input[type=text]:is(.timepicker-input-minutes, .time-picker-input-minutes) {
101
101
  :is(.timepicker-container, .time-picker-container) .pm-btn {
102
102
  width: 3.6rem;
103
103
  height: 50%;
104
- // --btn-padding is a Materialize variable that no longer exists, so this
104
+ // --btn-padding is a retired variable that no longer exists, so this
105
105
  // was invalid at computed-value time and the padding resolved to 0 - not
106
106
  // to the base button's inline space, which the invalid declaration still
107
107
  // beat in the cascade. Written as the 0 it has always rendered as.
@@ -278,7 +278,7 @@ input[type=text]:is(.timepicker-input-minutes, .time-picker-input-minutes) {
278
278
  :is(.timepicker-container, .time-picker-container) .pm-btn {
279
279
  flex-grow: 1;
280
280
  /*width: auto;*/
281
- // Same two dead Materialize variables as above; both declarations
281
+ // Same two retired variables as above; both declarations
282
282
  // rendered as 0. The corner rules that follow square off the inner
283
283
  // edges, so the outer ones are the only radius in play.
284
284
  padding-inline: 0;
@@ -57,7 +57,7 @@
57
57
  // already, in $_bar.
58
58
  $_toolbar: ".toolbar";
59
59
 
60
- // The two axes. `.max` is BeerCSS's name for docked; `.filled` is the older
60
+ // The two axes. `.max` is an alias for docked; `.filled` is the older
61
61
  // name for vibrant. Both stay in the :is() lists.
62
62
  $_floating: "#{$_toolbar}:is(.floating, :not(.docked, .max))";
63
63
  $_docked: "#{$_toolbar}:is(.docked, .max)";
@@ -4,7 +4,7 @@
4
4
  //
5
5
  // Anatomy is the HTML. A <label> wrapping <input type="checkbox"> is
6
6
  // the control. The label text is a sibling of the input — no extra class,
7
- // no required <span>. input + span still works (legacy / BeerCSS / Select).
7
+ // no required <span>. input + span still works (legacy / Select).
8
8
  // label.switch is a switch, not a checkbox — leave it alone.
9
9
  //
10
10
  // Tokens follow https://m3.material.io/components/checkbox/specs
@@ -206,7 +206,7 @@ label:has(> [type="checkbox"]:disabled):not(.switch),
206
206
  cursor: default;
207
207
  }
208
208
 
209
- // Legacy / BeerCSS / Select / Autocomplete: input + span draws the same
209
+ // Legacy / Select / Autocomplete: input + span draws the same
210
210
  // 18dp anatomy. Exclude .switch — that file paints the track on a span.
211
211
  $_cb-span: "*:not(.switch) > [type='checkbox'] + span:not(.lever, .supporting-text, .character-counter, .file-path)";
212
212
 
@@ -310,24 +310,44 @@ textarea {
310
310
  }
311
311
  }
312
312
 
313
- :is(.datepicker-date-input, .date-picker-date-input) {
314
- position: relative;
315
- text-indent: -9999px;
316
-
317
- &::after {
318
- display: block;
319
- position: absolute;
320
- top: 1.1rem;
321
- content: attr(data-date);
322
- color: var(--input-color);
323
- text-indent: 0;
324
- }
313
+ // Datepicker paints its formatted date over the native value with ::after.
314
+ // Firefox renders no generated content on an <input>, so hiding the native
315
+ // value there left the field blank. The engines that do render it are the ones
316
+ // that expose ::-webkit-datetime-edit.
317
+ @supports selector(::-webkit-datetime-edit) {
318
+ // The positioned input would paint its filled container over the field's
319
+ // icons, which come before it. Raise them inside the field's own stacking
320
+ // context, so they do not also rise over the docked search view or a
321
+ // sticky header. A docked calendar in the field has to escape it.
322
+ .field:has(> :is(.datepicker-date-input, .date-picker-date-input)) {
323
+ &:not(:has(> .display-docked)) {
324
+ isolation: isolate;
325
+ }
325
326
 
326
- &:focus-visible {
327
- text-indent: 0;
327
+ > :is(i, .prefix, .suffix) {
328
+ z-index: 1;
329
+ }
328
330
  }
329
331
 
330
- &:focus-visible:after {
332
+ :is(.datepicker-date-input, .date-picker-date-input) {
333
+ position: relative;
331
334
  text-indent: -9999px;
335
+
336
+ &::after {
337
+ display: block;
338
+ position: absolute;
339
+ top: 1.1rem;
340
+ content: attr(data-date);
341
+ color: var(--input-color);
342
+ text-indent: 0;
343
+ }
344
+
345
+ &:focus-visible {
346
+ text-indent: 0;
347
+ }
348
+
349
+ &:focus-visible:after {
350
+ text-indent: -9999px;
351
+ }
332
352
  }
333
353
  }
@@ -4,7 +4,7 @@
4
4
  //
5
5
  // Anatomy is the HTML. A <label> wrapping <input type="radio"> is the
6
6
  // control. The label text is a sibling of the input — no extra class, no
7
- // required <span>. input + span still works (legacy / BeerCSS).
7
+ // required <span>. input + span still works (legacy).
8
8
  //
9
9
  // Tokens follow https://m3.material.io/components/radio-button/specs
10
10
  // icon 20dp ring, 2dp stroke, on-surface-variant
@@ -136,7 +136,7 @@ label:has(> [type="radio"]:disabled),
136
136
  cursor: default;
137
137
  }
138
138
 
139
- // Legacy / BeerCSS: input + span draws the same 20/10 anatomy.
139
+ // Legacy: input + span draws the same 20/10 anatomy.
140
140
  [type="radio"] + span {
141
141
  position: relative;
142
142
  display: inline-flex;